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

116 lines
12 KiB
Markdown
Raw Normal View History

2026-09-11 02:47:43 +00:00
# 暫停交接:全項完成與 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`,可能隨環境清理消失;本文件保留結果摘要。
- **已依使用者要求暫停;等使用者明確恢復後再開工。**