lazyBoy/docs/cua-review.md

56 lines
3.5 KiB
Markdown
Raw 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.

# Cua 遷移檢查2026-09-07
> 歷史紀錄:本文描述 2026-09-07 的雙後端驗證,已非現況。目前只保留 Cua操作方式見 [operations.md](operations.md),最新驗證狀態見 [cua-migration-progress.md](cua-migration-progress.md)。
結論:`a.md` Phase 1 規格尚未全部勾完,但 **opt-in Cua 已可在現有 XFCE + Xvfb 桌面容器使用**。生產預設仍是 `legacy`
本次在 Apple Siliconlinux/arm64上以 `lazyboy/computer:local` + Cua Driver **0.23.2** 重跑隔離桌面驗收。
## 現況
| 規格 | 狀態 |
| --- | --- |
| 雙後端、Agent schema 不變 | 完成。`LAZYBOY_COMPUTER_DRIVER=legacy`(預設)或 `cua`。 |
| Docker 安裝 | 完成。Dockerfile 依 `TARGETARCH` 安裝 linux-arm64 / linux-x86_64checksum 固定。 |
| `computer_observe` | 完成。截圖 + native AT-SPI 元素(`kind=a11y`、snapshot-scoped `cua:…` handle+ 視窗列表。 |
| `computer_act` | 完成。pointer / type / key / scroll / focus / 單次 `drag`native ref 走 Cua `click` / `set_value`。不支援的動作明確 `Unsupported`,不再偷偷回退 legacy。 |
| Browser | 完成。`existing_profile` attach、`semantic_v2` refs、navigate 限 http/https/about。 |
| 多螢幕隔離 | 完成。display `:1` 的 handle 送到 `:2` 會被拒絕;各自點擊只改自己的測試程式。 |
| pause / restart 後 Chromium cookie | 完成。adapter `--check-persistence``docker pause``docker restart` 後都通過。 |
| noVNC | smoke 確認 `:6080` 仍可連;完整 human takeover 端到端未另開測試。 |
| 示範錄製 | Cua `start_recording` + 既有 CDP recorder 仍在;未做真人 noVNC 示範驗收。 |
| Benchmark 文件 | 見 [cua-benchmark.md](cua-benchmark.md)。尚未對 legacy 做對照。 |
| 預設切到 Cua | **未做。** 完整 DoDtakeover、錄製、生產 metrics未過前維持 legacy。 |
## 這輪修正
- Native 同一批 `computer_act` 共用一份觀察快照;先前每個動作都把 handle map 拿掉,導致 `wait` 後面的 ref 或連續兩個 ref 被當成過期。
- 拒絕的過期 ref 不再清掉該螢幕上其他仍有效的 handle。
- JSON `code != ok` 即使行程成功碼為 0 也當失敗(避免 drag 誤報成功)。
- CLI JSON 改走 stdin避免輸入文字出現在 argv。
- 拖曳改打最小包含該點的視窗(避免點到覆蓋其上的 Chromiumfocus 優先精確標題(避免 `LazyBoy Cua Smoke - Chromium` 搶走 GTK 視窗)。
- GTK 測資把 drawing area 座標轉成螢幕座標。
- Cua 選到但 binary 不在或 daemon 起不來會明確失敗。
## 驗證(本機 2026-09-07
- `cargo test --locked -p lazyboy-control`84 通過。
- `cargo check --locked -p lazyboy-api -p lazyboy-sandbox -p lazyboy-controld`:通過。
- `make cua-smoke``--repeat 10`
- 原始 Driver smoke **10/10**截圖、視窗、native click/type、Chromium attach、noVNC
- LazyBoy adapter **10/10**GTK click / 中文 setvalue、過期 handle 拒絕、批次 native、drag、Chromium 表單)
- 雙 display 隔離通過
- pause/unpause 與 `docker restart` 後 cookie 仍在
## 如何啟用
預設不要改。要在本機明確跑 Cua
```bash
make cua-smoke
# 或
docker compose -f docker-compose.yml -f docker-compose.cua.yml up -d --build
```
overlay 把 supervisor 的 `LAZYBOY_COMPUTER_DRIVER` 設成 `cua`,桌面映像標成 `lazyboy/computer:cua`,不會覆寫預設的 `lazyboy/computer:local` legacy 映像。改 flag 後必須重建桌面容器。