OMW 補足 OpenCode 缺少的整機管理與 Remote 控制一環:它在 Windows 主機集中管理 Project、Instance 與 Session,並可透過自動註冊 Tailscale Serve,讓使用者從瀏覽器開啟 OMW Web 與 OpenCode Web。
- 從 Web UI 掌握多個 Project 與 Instance,切換或建立 Session,並啟動 OMW 管理的背景 Instance。
- 本機預設維持 loopback-only;遠端模式沿用使用者自行安裝並登入的 Tailscale。
- 原生
opencode不被攔截;只有明確透過 OMW wrapper 啟動的 Local TUI Instance 納入管理。
Important
日常命令會使用 %LOCALAPPDATA%\OMW。Repository development 請改用 npm run dev:credentials、npm run dev 或 npm run dev:omw -- ...,避免讀寫日常 credentials、token、SQLite 與 OpenCode data。歷史 @sevenflanks/[email protected] 發布與 smoke 證據維持在 release verification 紀錄,但不代表目前建議的 npx @sevenflanks/omw@latest 已完成完整 E2E。
- 第一次使用:只讀 Prerequisites 與 Quick Start。
- 啟動 OpenCode 或使用 Web:Usage。
- 關閉前確認影響範圍:三種停止操作。
- 遠端或手機存取:Tailnet 與手機存取。
- 啟動失敗:Troubleshooting;查已驗證範圍:Validation Status。
日常 published-package onboarding 需要:
- Windows 11,並以日常使用 OMW 的同一個 Windows 帳號操作。
- PowerShell 7,且
pwsh.exe可由PATH找到。 - Node.js 24 以上與 npm。
- 已安裝 OpenCode CLI。
- 遠端使用另需在 OMW 主機與訪問裝置自行安裝 Tailscale、登入同一個 Tailnet,並確認裝置有存取權。
原始碼/本機 artifact 替代路徑才需要本 repository checkout,且相關命令必須從 repository root 執行。
OMW 不會安裝 OpenCode 或 Tailscale,也不會修改 PATH。若 OMW 找不到 PowerShell 或 OpenCode executable,直接跳到 Troubleshooting。
- 在日常使用的 PowerShell 啟動 OMW:
npx @sevenflanks/omw@latest第一次執行時,npm 可能詢問是否下載 @sevenflanks/omw;確認後繼續。若偏好全域 omw 命令,可改用可選的 global install。
執行上述 plain Manager 命令後:
- OMW 使用者名稱,預設是
omw。 - 至少 16 個字元的密碼。
- 再輸入一次密碼確認。
- 開啟終端顯示的 URL。
OMW 會自動產生 launcher token,並將帳密與 token 透過 Windows current-user DPAPI 保護後保存。請勿把密碼、launcher token 或 credentials.dpapi 內容貼到文件、Issue、log 或截圖中。
成功後,終端應顯示類似:
OMW CLI version: 0.2.1
OMW Manager ready: http://127.0.0.1:4174 (version 0.2.1, started)
這個 plain Manager 命令只會初始化、重用或在背景啟動 Manager,不會啟動 OpenCode TUI。請用瀏覽器開啟終端實際輸出的 URL。
**完成指標:**終端顯示 Manager 的實際 runtime version 與 started、reused 或 upgraded(port 可能不同),瀏覽器可開啟登入頁。UI 的 連線詳細資料 也會顯示同一個 OMW Manager version。
在首次設定按 Ctrl+C 時,預期訊息是:
OMW 初始化已取消,可直接重試。
取消會直接結束,不會偷偷改成啟動未受管理的 OpenCode。重新執行 npx @sevenflanks/omw@latest 即可重試。
若在沒有既有設定的非互動環境執行,OMW 會要求先回到本機互動式終端:
缺少 OMW 初始設定;請先在本機互動式終端執行 omw。
之後每天可執行同一個 npx @sevenflanks/omw@latest 命令。OMW 會以 launcher token 驗證 127.0.0.1:<port> 上的 Manager identity:
- 身分是
omw-manager、protocol version 相符,且 runtime version 與 CLI 相同或較新時,重用現有 Manager,不會降版。 - runtime version 較舊,或舊版 identity 尚未提供 version 時,在啟動 lock 內正常關閉舊 Manager,確認 loopback port 已釋放後啟動新版並驗證版本。
- Manager 不存在時,以背景 process 啟動,並等待 readiness。
- 同時執行多次時,由初始化與啟動 lock 加上第二次 identity 檢查避免重複初始化、關閉或啟動 Manager。
- 重用不會重設帳密、不會輪替 launcher token,也不會清空 SQLite。
若希望提供全域 omw 命令,可安裝目前最新版:
npm install --global @sevenflanks/omw@latest
omw後續可使用 omw opencode ...。Global install 與 npx 使用同一份 %LOCALAPPDATA%\OMW 日常資料,不再是 Quick Start 的主要入口。
只有需要從目前 repository 建置或驗證 package 時,才使用這條路徑:
- 在 repository root 開啟 PowerShell。
- 建立 local package artifact 並啟動 OMW:
npm ci
$packageDir = Join-Path $env:TEMP 'omw-local-package'
New-Item -ItemType Directory -Force -Path $packageDir | Out-Null
$packageName = npm pack --pack-destination $packageDir -w @sevenflanks/omw | Select-Object -Last 1
$omwPackage = Join-Path $packageDir $packageName
npm exec --yes --package="$omwPackage" -- omw$omwPackage 直接使用 npm pack 實際輸出的檔名,不依賴寫死的 package version。npm pack 會先建置 workspace,並將以下 runtime 內容放入 artifact:
- OMW Manager server。
- OMW Web 靜態資源。
omw與omw-opencodelauncher。- Windows DPAPI 與 process control helper。
這個 .tgz 是後續替代命令的 package 來源。清除 npm cache 或刪除 artifact 後,未來再次啟動前需重新執行 npm pack;OMW 的持久資料不放在 artifact 或 npm cache 中。
日常使用只需:
- 執行
npx @sevenflanks/omw@latest,確認 Manager ready。 - 在 Project 目錄執行
npx @sevenflanks/omw@latest opencode。 - 回到 Web 管理介面查看 Project、Instance 與 Session。
**完成指標:**OpenCode TUI 正常啟動,且 OMW Web 顯示對應的 Local TUI Instance。若看到 continuing with native OpenCode,請依對應排障處理,不能視為已受 OMW 管理。
在要工作的 Project 目錄執行:
npx @sevenflanks/omw@latest opencode沒有提供 [project] 時,wrapper 使用目前工作目錄。也可以明確提供 Project 路徑:
npx @sevenflanks/omw@latest opencode 'C:\develop\projects\example'要開啟特定 OpenCode Session:
npx @sevenflanks/omw@latest opencode 'C:\develop\projects\example' -s '<session-id>'若使用可選的 global install,可將 npx @sevenflanks/omw@latest 縮短為 omw。若使用原始碼/本機 artifact 替代路徑,則替換為 npm exec --yes --package="$omwPackage" -- omw。
Wrapper 會保留呼叫時的 cwd、Project 與原始 OpenCode arguments。它只補上缺少的 loopback hostname 與 OMW 保留的固定 port,再啟動 OpenCode TUI。
直接執行下列命令仍是原生 OpenCode,不會出現在 OMW 的受管理流程中:
opencode這是刻意的邊界,不是安裝失敗。OMW 不會建立全域 shim,也不會把 opencode 替換成 wrapper。
若 wrapper 無法啟動或連上 Manager,預設會顯示診斷,然後用原始 argv 與環境啟動 native OpenCode。這個 TUI 是未受 OMW 管理的執行個體;請不要把 fail-open 誤認為 Manager 已恢復。
需要「Manager 不可用就不要啟動 OpenCode」時,在同一個 PowerShell 視窗設定:
$env:OMW_REQUIRED = '1'
npx @sevenflanks/omw@latest opencodeOMW_REQUIRED=1 會讓任何 bootstrap failure 直接結束。未設定 OMW_REQUIRED=1 時,首次設定缺失或使用者取消初始化仍不會 fail-open;既有 credentials 損毀、DPAPI 無法解密或其他 Manager bootstrap failure 則會顯示診斷並啟動未受管理的 native OpenCode。
Note
以下畫面證據皆為:正式 Vue UI,隔離 mock backend,非真 Manager/Tailnet實測。圖片用來說明操作位置與預期畫面,不代表真實 process、credentials、Session、手機或網路已通過。
Overview 顯示 OMW 已知的 Project 與 Instance。狀態來自觀察與 probe:
- 可連線代表目前 probe 成功。
Unreachable只代表 OMW 目前無法連線,不等於 process 已停止。- 直接用 native
opencode啟動的 TUI 不保證被 OMW 追蹤。 - 已停止追蹤的項目預設隱藏,可使用
顯示已停止追蹤檢視。 - 目前搜尋只查目前 Instance;展開
已停止紀錄才載入停止歷史,首批 20 筆,可按載入更多。停止歷史有自己的搜尋,涵蓋完整歷史範圍;已載入 / 總數顯示進度。收合重開或詳情返回保留進度,手動刷新失敗仍保留最後成功內容並提供重試。
**用途:**辨識 Instance 清單、目前狀態與選取後的 detail。
**步驟:**開啟 Overview,選取一個合成 fixture Instance。 **預期結果:**左側保留 Project/Instance 層級,右側顯示 Primary Session 與狀態摘要。
從 啟動執行個體 開啟 launch panel,選擇或輸入 Project 後啟動。這種 Instance 是 Manager-launched Headless Instance,與 wrapper 啟動的 Local TUI Instance 不同;只有前者可以從 Web 執行 停止執行個體。
啟動後,先確認清單中的 Project、port 與狀態,再開啟 detail。不要只看清單列存在就判定 OpenCode 已 ready。
**用途:**確認按建立前的 Project 目錄與啟動控制。
**步驟:**按 啟動執行個體,輸入測試目錄並按 瀏覽;此圖停在按 啟動全新 Instance 之前。
**預期結果:**畫面顯示選定目錄與 啟動全新 Instance;截圖當下未送出 create request。
**用途:**說明建立成功後的 UI 落點。
**步驟:**在隔離 create mock 情境送出 fixture 目錄。 **預期結果:**成功通知出現,detail 切換至新 Instance;這不是同一次真實 Manager 建立的連續證據。
Instance detail 中的操作語意如下:
進入主 Session:開啟目前 Primary Session Binding 指向的 Main Session。New Session:確認後建立新 OpenCode Session、把它設成新的 Primary Session Binding,並開啟 OpenCode Web。切換其他 Session:展開既有 Session 歷史。- 直接點選歷史 Session:開啟該 Session,但不改 Primary Session Binding。
切換並開啟:明確把選定 Session 設為新的 Primary Session Binding,再開啟。
OMW 管理的是 binding 與入口;Session 內容仍由 OpenCode 保存。停止 OMW、停止追蹤或停止背景 Instance 都不會刪除 OpenCode Session。
**用途:**辨識 Primary Session 與其他 Session 的層級。
**步驟:**在 Instance detail 展開 切換其他 Session,再載入 child Session。
**預期結果:**主 Session、歷史 Session 與 child Session 層級可辨識。
Note
正式 Vue UI,隔離 mock backend,非真 Manager/Tailnet實測。以下圖片沒有驗證 DPAPI persistence、新帳密登入或舊帳密失效。
開啟 OMW 設定 → 修改 OMW 帳號與密碼,輸入:
- 目前密碼。
- 新使用者名稱。
- 至少 16 個字元的新密碼。
- 送出
更新帳密。
更新流程會先驗證目前密碼,先把新 DPAPI payload 寫入成功,再切換執行中的驗證資料。如果寫入失敗,舊帳密仍維持有效。
更新帳密不會:
- 輪替 launcher token。
- 變更資料目錄。
- 清除 SQLite。
- 刪除 OpenCode Session 或 Project files。
遠端瀏覽器需使用新帳密重新登入。不要在截圖中顯示任一密碼欄位內容。
**用途:**辨識 credential rotation 欄位與送出控制。
**步驟:**開啟 OMW 設定,停在尚未輸入密碼的畫面。
**預期結果:**目前密碼、新密碼與確認欄位均為空白,且不顯示 launcher token。
**用途:**說明前端收到 HTTP 204 後的完成狀態。
**步驟:**以合成 credential 送出隔離 mock request。 **預期結果:**成功通知出現,三個密碼欄位清空;不代表新帳密已寫入或可登入真 Manager。
Note
正式 Vue UI,隔離 mock backend,非真 Manager/Tailnet實測。以下停止畫面不代表任何真實 Manager 或 OpenCode process 已停止或保留。
這三個操作完全不同;執行前先確認真正想影響的範圍。
| 操作 | 會停止或隱藏 | 一定保留 |
|---|---|---|
OMW 設定 → 停止 OMW → 只停止 OMW |
Manager、Web 管理介面、OMW-owned observers 與 SQLite 連線 | 所有 OpenCode Local TUI、背景 Instances、Sessions、Project files、持久資料 |
執行個體操作 → 停止執行個體 |
該 Manager-owned 背景 Instance 與其中進行中的工作 | Manager、其他 Instances、OpenCode Sessions、Project files;Local TUI 不允許由此停止 |
執行個體操作 → 停止追蹤 |
只把 OMW tracking record 從預設清單隱藏 | process、工作、reserved port、Sessions、Project files、Manager |
管理介面會立即斷線,但 OpenCode 工作繼續。之後重新執行 npx @sevenflanks/omw@latest 即可重建 Manager 管理介面並重用既有資料。
**用途:**在送出前核對停止範圍。
**步驟:**開啟 OMW 設定,按 停止 OMW,停在 confirmation。
**預期結果:**標題為「停止 OMW Manager?」且文案明示 OpenCode TUI、背景 Instance、Sessions 與 Project 工作繼續。
**用途:**說明前端收到 mock HTTP 202 後的 stopped banner。
**步驟:**在隔離 mock 情境按 只停止 OMW。
**預期結果:**管理介面顯示 OMW Manager 已停止;不代表真 process shutdown 已完成。
這是真正的 process stop,只提供給 OMW 有 ownership 且允許停止的背景 Instance。Local TUI 的 process ownership 留在使用者的終端,因此 Web 不會代替使用者終止它。
這不是 process stop。被隱藏的 process 仍可能佔用同一個 fixed port;若要再次檢視,先開啟 顯示已停止追蹤。不要因為主清單看不到就嘗試啟動同 port 的替代 process。
OMW 維持 loopback-only;明示開啟 remote mode 時,會沿用已安裝、已登入的 Tailscale,保守新增並驗證缺少的 Serve mappings。它不會自動 login/up、啟動 OS service、開啟 Funnel 或覆寫既有不相容設定。
本手冊對應已發布 package 的 CLI 介面;日常建議命令為:
npx @sevenflanks/omw@latest
npx @sevenflanks/omw@latest opencode [project] [-s session]
原生 opencode 命令不會被 OMW 改寫、攔截或自動接管。只有透過 npx @sevenflanks/omw@latest opencode ...(或可選 global install 的等價 omw opencode ...)啟動時,OMW wrapper 才會嘗試啟動或重用 Manager、保留執行個體的固定連線埠並登錄追蹤資訊。
三張圖是由同目錄的靜態 HTML source 匯出,方便 GitHub 直接顯示;它們不代表已完成真實 UI 或手機驗收。
預設資料目錄固定為:
%LOCALAPPDATA%\OMW
它不受目前工作目錄、repository 位置、.tgz 位置或 npm cache 位置影響。目錄內包含 OMW credentials、launcher token 與 SQLite 等持久資料;OpenCode Session 與 Project files 仍由 OpenCode / Project 自己保存。
只有明確設定 OMW_DATA_DIR 才會改用其他位置:
$env:OMW_DATA_DIR = 'D:\private\omw-data'這是改用另一個資料根目錄,不是自動搬移。不要為了排除啟動問題刪除或覆寫既有 %LOCALAPPDATA%\OMW;也不要把舊 .omw 目錄當成新版本要自動搬移的資料來源。
如果使用 override,plain Manager 與每一次 wrapper 命令都必須使用同一個 OMW_DATA_DIR,否則會看到不同的 OMW 狀態。
未設定 remote env 時,OMW 預設只提供本機存取。要啟用 Tailnet:
- 在 OMW 主機與要訪問的電腦或手機自行安裝 Tailscale,登入同一個 Tailnet,並確認 Tailnet policy 允許該裝置存取主機。
- 從 OMW 本機 UI 按「啟用遠端存取」,閱讀 exposure 說明,以目前 OMW 帳密按「同意並啟用」。取消不會新增映射。
- OMW 自動取得此裝置的 Tailnet DNSName,沿用目前 Manager port 與 Instance pool;保存非機密設定後,立即要求 Basic 登入並嘗試註冊 Serve,無需設定 env 或重啟。
- 確認畫面顯示可用的遠端 URL,再從有存取權的 Tailnet 裝置開啟。註冊失敗時修正畫面指出的問題,再按「自動註冊」;設定會保留,下次啟動也會自動註冊。
Manager server 仍只綁定 loopback。啟用會為 Manager 與目前 Instance pool 建立固定 Serve 映射;OpenCode ports 沒有額外帳密保護,Tailnet 裝置存取政策必須先核對。帳密不會存入瀏覽器 localStorage 或 URL,reload 後依瀏覽器 Basic 登入提示驗證。
OMW_REMOTE_ACCESS=0 是明確停用 override,UI 會說明停用原因;移除該設定並重新啟動後才可由 UI 啟用。既有 OMW_REMOTE_ACCESS=1 仍須提供完整 explicit env,優先於保存設定。
OMW 不會代替 operator 設定:
- Tailscale 安裝、登入或啟動服務。
- Windows Firewall。
- Tailnet ACL 或 device policy。
- Funnel 或任何 public internet ingress。
OMW 會驗證「Tailnet HTTPS URL → 同一個 127.0.0.1:<port>」的固定映射,遇到衝突或 Funnel 不會覆蓋。請依序閱讀:
不要用「Tailnet 設定看起來正確」或模擬 viewport 代替真實手機驗收。手機清單、detail、Session navigation、帳密與 stop confirmation 只有經實機確認後才能宣稱通過。使用者已明確同意將真手機與 Tailnet 驗收移出 Issue #11 本輪 PR 的必要條件;它們仍是未驗證的後續驗收項目,目前狀態見驗收證據。
Note
正式 Vue UI,隔離 mock backend,非真 Manager/Tailnet實測。以下是 Playwright 390 × 844 viewport,不是觸控或實機證據。
**用途:**確認 mobile list 與水平版面。
**步驟:**以 390 × 844 viewport 開啟 Overview,從 detail 按 返回列表。
**預期結果:**回到 Instance list,detail 隱藏,頁面沒有水平 overflow。
**用途:**確認從 list 進入 mobile detail。
**步驟:**在 mobile list 點選 fixture Instance。
**預期結果:**切換至 detail 並顯示 返回列表;此 click-based 路徑不代表 browser back gesture 或真手機已通過。
OMW runtime 預設使用 pwsh.exe,不是 Windows PowerShell 5.1 的 powershell.exe。若 pwsh.exe 不在 PATH,可在啟動 OMW 的環境指定 PowerShell 7:
$env:OMW_POWERSHELL_EXECUTABLE = 'C:\Program Files\PowerShell\7\pwsh.exe'
npx @sevenflanks/omw@latest此設定只覆蓋 OMW runtime 內採用它的 PowerShell 呼叫,不會覆蓋其他 scripts 或手動指令。
Repository Quick Start 找不到 local package 時,回到 repository root 重新執行 npm pack,確認 $omwPackage 指向實際存在的 .tgz,再使用:
npm exec --yes --package="$omwPackage" -- omw日常使用已發布版本時,執行 npx @sevenflanks/omw@latest;npm 首次詢問下載時確認即可。歷史 @sevenflanks/[email protected] registry、artifact identity 與 smoke 證據範圍見release verification 紀錄,不代表目前 latest 的完整 E2E 已驗證。
如果 opencode.exe 不在 PATH,請先找出可信任的實際執行檔,並在目前 PowerShell 視窗明確設定:
$env:OMW_OPENCODE_EXECUTABLE = 'C:\path\to\opencode.exe'此值必須是絕對路徑、存在且為一般檔案。若沒有設定,OMW 會先依序查看已知安裝提示與 PATH 中的 opencode.exe;找不到時,才會靜態辨識 PATH 中由 npm 產生、直接轉呼叫 node_modules\opencode-ai\bin\opencode.exe 的已知 opencode.cmd 格式。OMW 不會執行 shim,也不會解析一般 batch script。推導出的 .exe 仍須通過 Windows PE 與非 OMW launcher 驗證。
OMW 不會掃描整顆磁碟、修改 PATH 或猜測其他 shim 格式。明確設定 OMW_OPENCODE_EXECUTABLE 時仍須指向真正的 .exe,不可指向 .cmd;若已知 shim 的 target 可驗證,錯誤訊息會提供可設定的 .exe 路徑。
先在 PowerShell 執行:
$command = Get-Command opencode -ErrorAction Stop
$command | Format-List CommandType, Source, Path如果結果指向 opencode.cmd,可先查看內容並確認它是否直接轉呼叫 npm package 內的 executable:
$shim = (Get-Command opencode.cmd -ErrorAction Stop).Source
Get-Content -LiteralPath $shim
$target = Join-Path (Split-Path -Parent $shim) 'node_modules\opencode-ai\bin\opencode.exe'
Test-Path -LiteralPath $target -PathType Leaf已知格式最後一行會直接呼叫 "%dp0%\node_modules\opencode-ai\bin\opencode.exe" %*。若 OMW 回報格式未知、target 不存在或不是有效 Windows PE,訊息會列出 shim/target 路徑與原因;OMW 不會嘗試執行該 shim。確認 $target 是可信任的真正 executable 後,可在目前 PowerShell 視窗設定:
$env:OMW_OPENCODE_EXECUTABLE = (Resolve-Path -LiteralPath $target).Path如果 Get-Command 找不到,請確認 OpenCode 已安裝。OMW 不會修改 PATH、自動安裝或全磁碟搜尋。
若 identity probe 判定 listener 不是 OMW Manager,OMW 會明確失敗,訊息包含:
127.0.0.1:<port> 已由非 OMW Manager 程序使用;不會停止或取代該程序。
先由 operator 確認該 listener 的 owner,再自行決定是否改用其他 OMW_PORT 或停止 owner。OMW 不會猜 PID、殺掉未知程序或取代 listener。
- plain Manager 命令:回報錯誤並結束;它不會啟動 TUI。
npx @sevenflanks/omw@latest opencode ...:預設顯示 bootstrap failure 診斷並啟動 native OpenCode;此 TUI 是 unmanaged。OMW_REQUIRED=1:wrapper 回報錯誤並結束,不啟動 native OpenCode。- 若本次剛建立的背景 Manager readiness 失敗,launcher 只清理本次自己建立的 process object,不會依 port 或猜測的 PID 停止其他程序。
Unreachable 不是停止證據。依序確認 process 是否仍在、fixed port 是否仍由同一個 Instance 監聽,以及 Tailnet Serve 是否映射到同一個 loopback port。不要直接按 停止追蹤 來修復連線;那只會隱藏紀錄。
這是 wrapper 的明示 fail-open,不是成功接管。OpenCode 可以繼續使用,但 OMW 不保證能追蹤這次 TUI。需要強制受管理時,修正 Manager 問題後使用 OMW_REQUIRED=1 重試。
| 項目 | 狀態 | 證據或限制 |
|---|---|---|
| Local package 建置、pack 與本機安裝 | VERIFIED/人工 PASS(2026-09-20) | npm pack -w @sevenflanks/omw 成功,artifact manifest 為 @sevenflanks/[email protected];使用者另回報 local package 本機安裝 PASS |
Local .tgz 的 omw bin resolution |
VERIFIED(2026-09-20) | npm exec --package=<local-tgz> -- omw __docs_probe__ 進入目前 CLI 並回報預期 unknown-command 診斷 |
| Public npm publication / target package | VERIFIED(2026-09-21) | PR #22 已合併至 cb87fc68df98fc310834ac24dc4c9bddc51bccda;target @sevenflanks/[email protected] 已發布,registry latest 為 0.1.0 |
| Fresh consumer install / published artifact resolution | VERIFIED(2026-09-21) | Registry consumer npm install --save-exact @sevenflanks/[email protected] 成功,50 packages、0 vulnerabilities;tarball、integrity 與 shasum 見release verification 紀錄 |
| Published CLI/Manager/Web smoke | VERIFIED(2026-09-21) | CLI exit 0;Manager identity HTTP 200(omw-manager、protocol 1);Web HTTP 200 app container;shutdown HTTP 202 後不可連線 |
Public npx @sevenflanks/omw@latest end-to-end |
NOT VERIFIED | 目前是本手冊建議命令,但尚未完成該入口的完整 E2E |
| Manager 初始化與返回終端 | 人工 PASS(2026-09-20) | 使用者依人工隔離環境 guide,在一般 pwsh 完成初始化並確認控制權返回終端;不是 agent synthetic PTY 重跑 |
| Wrapper 啟動真實 OpenCode TUI | 人工 PASS(2026-09-20) | cwd、cwd + -s target、指定 Project + -s target 與 Ctrl+C 均由使用者親自驗收通過 |
| Web 登錄、Manager-only shutdown 與 restart | 人工 PASS(2026-09-20) | cwd TUI 可在 Web 登錄;stopManager 後 TUI 仍可操作;restart 後 target 保留;測試 TUI 與 Manager 均已停止 |
| 歷史 synthetic PTY harness | NOT_PROVEN | harness 在 resume 前遇到 AssignProcessToJobObject failed with Win32 error 5;此歷史結果不改寫,人工驗收另行補足 user-observable 路徑 |
| Web UI 桌面 walkthrough | MOCK UI VERIFIED/REAL NOT VERIFIED | Issue #11 UI acceptance report 已保存正式 Vue UI + 隔離 mock backend 證據;未連真 Manager |
| Tailnet / 真實手機 | NOT VERIFIED/本輪非 blocker | 配置文件與模擬 viewport 不能替代實機 probe;使用者已同意移出 Issue #11 本輪 PR 必要條件 |
| 個人既有 OpenCode 設定 | NOT VERIFIED | 人工驗收使用隔離環境,未驗個人既有設定、plugin、Session 或資料相容性 |
| Published release artifact / Product smoke version | RELEASE SMOKE VERIFIED/FULL E2E NOT VERIFIED(2026-09-21) | fresh consumer 已解析 public @sevenflanks/[email protected] 並完成 CLI/Manager/Web smoke;不代表真實 TUI、完整 Web walkthrough 或其他環境驗收 |
| 人工驗收日期 | 2026-09-20 | 只記錄日期,不推測確切時間或 pack hash |
Bin resolution probe 只證明 local artifact 與 bin entry 可用。另見 Issue #11 人工本機驗收報告,其 PASS 來自使用者在一般 pwsh 親自執行,不是 agent 重跑,也不證明 release artifact、個人既有 OpenCode 設定、Tailnet 或真手機路徑。
正式 Vue UI,隔離 mock backend,非真 Manager/Tailnet實測。十張圖已放入上方對應操作章節;完整 route、status、request 與 lifecycle 證據見 Issue #11 UI acceptance report。
| 場景 | Mock UI 狀態 | 真實驗收狀態 |
|---|---|---|
| Overview / Instance detail | VERIFIED | 真 Manager、SQLite 與真 Instance 未驗證 |
| Session tree | VERIFIED | 真 OpenCode Session/provider 未驗證 |
| Launch panel / create result | VERIFIED(分開的 mock 證據) | 真 Manager 建立與 readiness 未驗證 |
| Credential form / success | VERIFIED | DPAPI persistence、新舊帳密行為未驗證 |
| Stop confirmation / stopped banner | VERIFIED | 真 Manager shutdown 與 OpenCode process 保留未驗證 |
| Mobile list / detail / list | VERIFIED(模擬 viewport) | 真手機、touch、Tailnet 與 browser back gesture 未驗證 |
- Credential 更新後新帳密可用、舊帳密拒絕、launcher token 保留與 persistence failure rollback。
- 個人既有 OpenCode 設定、plugin、Session 與資料相容性。
npx @sevenflanks/omw@latestend-to-end,以及 packaged release 的真實 OpenCode TUI、reservation、register、finalize lifecycle。- browser UI 操作、完整 Web walkthrough、Tailnet、真手機與個人既有 OpenCode 設定/資料相容性。
真手機經 Tailnet/Tailscale Serve 的 list/detail、touch、back gesture、Session navigation、帳密與 stop confirmation 仍是 NOT VERIFIED,但使用者已明確同意移出 Issue #11 本輪 PR 必要條件。上方 desktop 與 390 × 844 mobile viewport 證據維持有效;它們不代表真手機或 Tailnet 已通過。









