lazyBoy/docs/agent-computer-handoff-2026...

116 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 暫停交接:全項完成與 Bug 修復2026-09-11
**使用者要求:剩餘使用量約 10%,先整理收尾,等待使用量恢復後再繼續。停止新增工作,不自動擴展下一個實作。全案未完成,也未宣稱零 Bug。**
## 文件入口
- 原始完整範圍:[啟動指令](plan/LAZYBOY_CODING_AGENT_START_HERE_V3.md)、[主計劃](plan/LAZYBOY_AGENT_COMPUTER_IMPLEMENTATION_PLAN_V3.md)、[48 項清單](plan/LAZYBOY_OPTIMIZATION_CHECKLIST_V3.md)。使用者要求 P0P3 全做,優先於文件原本允許延期的文字。
- [逐項稽核](agent-computer-audit-2026-09-10.md)O01O48、T01T64 的證據與缺項。VERIFIED 只涵蓋該列明示範圍,不能推論全案完成。
- [累積實作紀錄](agent-computer-progress.md):每批修改、測試、風險、回滾與接續步驟。
- 本文件為最新暫停入口;舊報告中的早期缺項可能已由後續進度補上,續作時以程式與最新驗證為準。
## 已實作並取得驗證的範圍
以下是完成的子範圍,不表示對應 O/T 整列全部驗收:
| 範圍 | 已有成果 | 主要檔案 |
|---|---|---|
| 截圖與雙模式 | 截圖交付契約修復、native 不必啟桌面;保留 TeamDedicated | control/controller.rs、api/computer.rs均位於 crates |
| Native jobs | Computer root SQLite、PTY、stdin/resize、有界輸出、重連、pidfd 取消、outbox、scope pause 基礎與終態 TTL | crates/supervisor/src/runner_jobs.pycrates/control/src/jobs.rs |
| 檔案 | descriptor-relative 操作、binary/range、CAS write/patch/move、原子 journal/receipt/outbox、immutable artifact、歷史讀取與明確恢復 | crates/supervisor/src/computer_files.py、runner_files.pycrates/api/src/file_*.rs |
| 重建恢復 | 正式 destroy acknowledgement、簽章退役 proof、真實 Dedicated 重建Team cold bootwarm reuselost reply 不重做/不覆蓋人類修改 | crates/api/src/file_recovery_e2e.rsscripts/test-runner-jobs.py |
| MCP 基礎 | Computer-local HTTP/stdio、受限 archive、per-binding UID、版本 pin、更新/rollback/撤銷、root receipt 與 UI/API | crates/controld/src/mcp_client.rscrates/supervisor/src/runner_packages.pycrates/api/src/package_transitions.rs |
| readiness | Runner/browser/desktop/viewer 分層,真實 X/WM/CDP/WebSocket-RFB兩 display 七種故障修復與 peer 不受影響 | crates/supervisor/src/runtime_probe.pyimage/computer/lazyboy-screenscripts/test-runtime-gui.py |
| GUI 授權發布 | 持久 display epoch、pause 同交易 bump、root 簽章 publication、中央 durable intent/ack/retry、原 owner/Computer authority 核對、過時 backlog 排除 | migrations/039043crates/api/src/gui_publications.rscrates/supervisor/src/runner_gui_fences.py |
| GUI routing | act/browser/recording/observe/health 的 target 一致性、非法 display重複 header 拒絕;實際 controld 39 cases | crates/control/src/screen.rscrates/controld/src/main.rscrates/supervisor/src/main.rstests/gui-targets.test.py |
| Cua 未明結果 | 取消timeout 保留本地 unresolved、拒絕自動重開 session、未知 outcome 不 delivery retry本次補 cursor configuration 未明即停 | crates/control/src/cua/client.rs |
| 量測 | native shared 60private 30 樣本與環境記錄 | docs/benchmarks/scripts/bench-agent-computer.py |
## O01O48 目前標記
以下逐項保留原稽核狀態;「部分完成」與「未開始」全部仍在使用者要求範圍內。
| ID | 項目 | 優先級 | 狀態 |
|---|---|---|---|
| O01 | 修正新圖交付 | P0必做 | 已驗證(限稽核所列範圍) |
| O02 | 原生 exec | P1必做 | 部分完成 |
| O03 | 原生 files | P1必做 | 部分完成 |
| O04 | 持續 jobs 與 PTY | P1必做 | 部分完成 |
| O05 | 批次程序form macro | P1必做 | 部分完成 |
| O06 | 套件/連線常駐 | P1必做 | 部分完成 |
| O07 | 穩定 Runner transport | P2量測 | 未開始 |
| O08 | readiness 分層 | P1必做 | 部分完成 |
| O09 | 按能力路由 | P1必做 | 部分完成 |
| O10 | 工具 schema 按需載入 | P1必做 | 部分完成 |
| O11 | 簡單任務不加 planner | P1必做 | 已驗證(限稽核所列範圍) |
| O12 | 條件等待 | P1必做 | 部分完成 |
| O13 | DOM snapshot 限量與增量 | P2量測 | 未開始 |
| O14 | agent 圖片和 viewer 串流分離 | P1必做 | 已驗證(限稽核所列範圍) |
| O15 | 既有 browser/session 穩定 attach | P1必做 | 部分完成 |
| O16 | 驗證、有限恢復與模型升級 | P1必做 | 部分完成 |
| O17 | Xvfb+x11vnc → TigerVNC Xvnc | P2必做候選測試 | 部分完成 |
| O18 | Xvfb+x0vncserver 備選 | P3保留替代 | 未開始 |
| O19 | 檢查 -noxdamage | P2對照 | 未開始 |
| O20 | noVNC/websockify 與畫質檔 | P2調校 | 部分完成 |
| O21 | 精簡桌面而非先換 OS | P2調校 | 已驗證(限稽核所列範圍) |
| O22 | Selkies 替代 viewer | P3可選 | 未開始 |
| O23 | Xpra 替代 viewer | P3可選 | 未開始 |
| O24 | Wayland全面換桌面 | P3延後 | 未開始 |
| O25 | 雙模式正式保留 | P0必做 | 部分完成 |
| O26 | 按 display檔案account 鎖 | P1必做 | 部分完成 |
| O27 | scope-aware pause | P1必做 | 部分完成 |
| O28 | 共享 lifecyclesingle-flight | P1必做 | 部分完成 |
| O29 | 程式共享與帳號授權分離 | P0必做 | 部分完成 |
| O30 | 公平排程與總配額 | P1必做 | 部分完成 |
| O31 | Chromium /dev/shm 與程序回收 | P2量測 | 未開始 |
| O32 | X11/DBus/profile 權限與 session | P1必做 | 部分完成 |
| O33 | Tool Manager 安裝入口 | P1必做 | 部分完成 |
| O34 | 來源版本與完整性 | P1必做 | 部分完成 |
| O35 | 安裝/啟動/認證/授權分開 | P1必做 | 部分完成 |
| O36 | 熱啟用與 registry 更新 | P1必做 | 部分完成 |
| O37 | 版本更新/回滾/移除 | P1必做 | 部分完成 |
| O38 | OAuthtoken broker | P1必做 | 未開始 |
| O39 | Outlook Graph 外掛 | P1必做驗收 | 部分完成 |
| O40 | Outlook 批次/增量同步 | P1/P2 | 部分完成 |
| O41 | operation journal/outbox | P0/P1 | 部分完成 |
| O42 | 活動紀錄串流而非桌面演出 | P1必做 | 部分完成 |
| O43 | artifact 存 Computer脫敏 | P1必做 | 部分完成 |
| O44 | Task 驗證與郵件分類品質 | P1必做 | 部分完成 |
| O45 | 衝突與冪等/未知效果 | P1必做 | 部分完成 |
| O46 | 部件健康與版本相容矩陣 | P1/P2 | 部分完成 |
| O47 | 已驗證 skill流程重用 | P2後續 | 未開始 |
| O48 | 端到端viewer 雙 benchmark | P1必做 | 部分完成 |
## 尚待完成的實作與驗收
1. **GUI 執行邊界**:實際 executor 接 root durable admission、整個 operation deadline可信 quiescence、未知結果可信恢復pause/takeover 等待 root acknowledgement。現在 publication/store 已有,實際 GUI 操作尚未全接入。
2. **服務與 OS 隔離**controldCua 的可信身分和 credential 通道、boot/service/X session epoch任意同 UID shell 仍可繞過 GUI 路徑,需實際 namespaces/cgroup/fs/network/syscall/process-tree 保護。不可把 HTTP 200CLI exit 當可信 GUI 完成。
3. **所有輸入同一授權**Cua、DOM、人類 noVNC input/clipboard/resize、profile 排他、inode/symlink alias、stale refs、AT-SPI 語意恢复與整台 Computer barrier。
4. **Native/files/artifacts 補齊**:完整 signal/cancel race 與 API restart其餘寫入路徑接 journal大附件 upload/download 全串流、所有工具輸出 artifact、完整 quota/retention/GC、大量歷史首次掃描公平性。
5. **資源協調**per-agentComputer 的 CPU/RAM/disk/requests 配額與公平排程;完整 lifecycle 活性聚合及壓測。
6. **Tool Manager 完整契約**:完整 V1/nested manifest、catalog/受控 URL/上傳、審核 hooks/deps、真實第三方 MCP、常駐 pool/legacy SSE、registry/grant 熱更新與活動 run 撤銷。
7. **OAuth郵件**:受保護 token broker、refresh single-flight、Google/Microsoft 安裝型 adapter、fake HTTP 分頁/429/Graph 20 batch/delta/ImmutableId、unknown readback/conflict-aware undo、分類品質資料集。真實外部 OAuth 帳號可另列 BLOCKED_EXTERNAL不能因此跳過本地實作與 fixtures。
8. **執行策略**:完整 capability dispatcher、verifier/milestone、有限恢復/模型升級、form macro 每步 checks、event wait、增量 DOM revision/ref invalidation、已驗證流程重用。
9. **P2/P3 顯示替代與量測**UDS/HTTP transport 分解TigerVNC 建置與對照、x0vncserver、XDamage、noVNC FPS/壓縮/延遲、桌面 autostart、Selkies、Xpra、Wayland 可選實作與實測、Chromium shm/OOM。仍保留原 X11 rollback。
10. **完整 E2Ebenchmark**:公開 login/model/run→Computer→GUI/viewer 全流程、雙模式所有 T01T64 故障條件、冷暖各 30 次的完整模型/工具/queue/snapshot/viewer/CPU/RAM/可讀性量測。現有 native benchmark 不等於完成此項。
## 暫停時工作樹與續作規則
- 工作目錄 `/root/lazyBoy`HEAD `80fe9a8`;大量累積修改及未追蹤檔案尚未提交。保留整個工作目錄,**不要 reset/clean 或只保留 tracked diff**。未部署、未推送,未動正式 migration使用者資料。
- migration 024043 是累積變更的一部分SQLx 測試使用 disposable PostgreSQL不代表正式資料庫已升級。
- 目前測試資料庫:`postgres://lazyboy:lazyboy@127.0.0.1:5434/lazyboy`,容器 `lazyboy-test-pg`。Computer fixture image `lazyboy/computer:local`controld fixture `lazyboy/controld:plan-test`
- 續作先讀本文件、progress 最後兩節與 audit再確認 git status、既有程序與測試結果。未收到使用者恢復指令前不新增實作或啟動整批測試。
- 恢復後第一個主要工作:設計並接好可信 root GUI executor 邊界(見待辦 13不要把目前 instance 記憶體 guard 說成 durable 完成。再依主計劃 DAG 收斂其餘全部項目。
- 常用驗證:`cargo test -p lazyboy-control -p lazyboy-controld``CARGO_INCREMENTAL=0 cargo clippy -p lazyboy-control -p lazyboy-controld --all-targets -- -D warnings``DATABASE_URL=postgres://lazyboy:lazyboy@127.0.0.1:5434/lazyboy python3 scripts/test-runner-jobs.py`。
- controld/control runtime 改動後完整 gate 必須重建 fixture binary不可用 host glibc binary 取代 Bookworm image 內 binary。僅在 runtime 完全未變時才考慮 `LAZYBOY_TEST_MCP_IMAGE` 重用。
## 本次收尾驗證
- 最終 Control **165 passed**、controld **2 passed**`/tmp/lazyboy-cua-motion-tests-final.log`。
- 最終 affected all-targets Clippy `-D warnings` 通過,`/tmp/lazyboy-cua-motion-clippy-final.log`;最初 collapsible-if 已修正並重新驗證。
- 完整 Runner gate 通過,`/tmp/lazyboy-cua-motion-gate.log`,包含實際 controld 39 個 target 案例、Supervisor HTTP 4.19 秒、API 真實恢復整合 26.82 秒、native/files/MCP/publication retry 與重建回歸。
- gate 的 Bookworm runtime snapshot 在純語法 let-chain 整理前建置;語意相同,最終 host 測試及 Clippy 覆蓋整理後 source。
- 本次 fixture prefix `lazyboy-plan-runner-test-811691d312ee`;自有容器與 network 已清除。既有測試 PostgreSQLbase images 保留,不刪使用者或其他資料。
- 本次所有測試程序已結束,沒有待接手的測試 handle。`git diff --check` 通過。測試日誌位於 `/tmp`,可能隨環境清理消失;本文件保留結果摘要。
- **已依使用者要求暫停;等使用者明確恢復後再開工。**