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

12 KiB
Raw Blame History

暫停交接:全項完成與 Bug 修復(2026-09-11)

使用者要求:剩餘使用量約 10%,先整理收尾,等待使用量恢復後再繼續。停止新增工作,不自動擴展下一個實作。全案未完成,也未宣稱零 Bug。

文件入口

  • 原始完整範圍:啟動指令、主計劃、48 項清單。使用者要求 P0~P3 全做,優先於文件原本允許延期的文字。
  • 逐項稽核:O01~O48、T01~T64 的證據與缺項。VERIFIED 只涵蓋該列明示範圍,不能推論全案完成。
  • 累積實作紀錄:每批修改、測試、風險、回滾與接續步驟。
  • 本文件為最新暫停入口;舊報告中的早期缺項可能已由後續進度補上,續作時以程式與最新驗證為準。

已實作並取得驗證的範圍

以下是完成的子範圍,不表示對應 O/T 整列全部驗收:

範圍 已有成果 主要檔案
截圖與雙模式 截圖交付契約修復、native 不必啟桌面;保留 Team/Dedicated 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.py;crates/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.py;crates/api/src/file_*.rs
重建恢復 正式 destroy acknowledgement、簽章退役 proof、真實 Dedicated 重建/Team cold boot/warm reuse,lost reply 不重做/不覆蓋人類修改 crates/api/src/file_recovery_e2e.rs;scripts/test-runner-jobs.py
MCP 基礎 Computer-local HTTP/stdio、受限 archive、per-binding UID、版本 pin、更新/rollback/撤銷、root receipt 與 UI/API crates/controld/src/mcp_client.rs;crates/supervisor/src/runner_packages.py;crates/api/src/package_transitions.rs
readiness Runner/browser/desktop/viewer 分層,真實 X/WM/CDP/WebSocket-RFB;兩 display 七種故障修復與 peer 不受影響 crates/supervisor/src/runtime_probe.py;image/computer/lazyboy-screen;scripts/test-runtime-gui.py
GUI 授權發布 持久 display epoch、pause 同交易 bump、root 簽章 publication、中央 durable intent/ack/retry、原 owner/Computer authority 核對、過時 backlog 排除 migrations/039–043;crates/api/src/gui_publications.rs;crates/supervisor/src/runner_gui_fences.py
GUI routing act/browser/recording/observe/health 的 target 一致性、非法 display/重複 header 拒絕;實際 controld 39 cases crates/control/src/screen.rs;crates/controld/src/main.rs;crates/supervisor/src/main.rs;tests/gui-targets.test.py
Cua 未明結果 取消/timeout 保留本地 unresolved、拒絕自動重開 session、未知 outcome 不 delivery retry;本次補 cursor configuration 未明即停 crates/control/src/cua/client.rs
量測 native shared 60/private 30 樣本與環境記錄 docs/benchmarks/;scripts/bench-agent-computer.py

O01~O48 目前標記

以下逐項保留原稽核狀態;「部分完成」與「未開始」全部仍在使用者要求範圍內。

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 共享 lifecycle/single-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 OAuth/token 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 隔離:controld/Cua 的可信身分和 credential 通道、boot/service/X session epoch;任意同 UID shell 仍可繞過 GUI 路徑,需實際 namespaces/cgroup/fs/network/syscall/process-tree 保護。不可把 HTTP 200/CLI 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-agent/Computer 的 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. 完整 E2E/benchmark:公開 login/model/run→Computer→GUI/viewer 全流程、雙模式所有 T01–T64 故障條件、冷暖各 30 次的完整模型/工具/queue/snapshot/viewer/CPU/RAM/可讀性量測。現有 native benchmark 不等於完成此項。

暫停時工作樹與續作規則

  • 工作目錄 /root/lazyBoy,HEAD 80fe9a8;大量累積修改及未追蹤檔案尚未提交。保留整個工作目錄,不要 reset/clean 或只保留 tracked diff。未部署、未推送,未動正式 migration/使用者資料。
  • migration 024~043 是累積變更的一部分;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 邊界(見待辦 1~3),不要把目前 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 已清除。既有測試 PostgreSQL/base images 保留,不刪使用者或其他資料。
  • 本次所有測試程序已結束,沒有待接手的測試 handle。git diff --check 通過。測試日誌位於 /tmp,可能隨環境清理消失;本文件保留結果摘要。
  • 已依使用者要求暫停;等使用者明確恢復後再開工。