54 lines
3.3 KiB
Markdown
54 lines
3.3 KiB
Markdown
|
|
# Cua 遷移檢查(2026-09-07)
|
|||
|
|
|
|||
|
|
結論:`a.md` Phase 1 規格尚未全部勾完,但 **opt-in Cua 已可在現有 XFCE + Xvfb 桌面容器使用**。生產預設仍是 `legacy`。
|
|||
|
|
|
|||
|
|
本次在 Apple Silicon(linux/arm64)上以 `lazyboy/computer:local` + Cua Driver **0.23.2** 重跑隔離桌面驗收。
|
|||
|
|
|
|||
|
|
## 現況
|
|||
|
|
|
|||
|
|
| 規格 | 狀態 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 雙後端、Agent schema 不變 | 完成。`LAZYBOY_COMPUTER_DRIVER=legacy`(預設)或 `cua`。 |
|
|||
|
|
| Docker 安裝 | 完成。Dockerfile 依 `TARGETARCH` 安裝 linux-arm64 / linux-x86_64,checksum 固定。 |
|
|||
|
|
| `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 | **未做。** 完整 DoD(takeover、錄製、生產 metrics)未過前維持 legacy。 |
|
|||
|
|
|
|||
|
|
## 這輪修正
|
|||
|
|
|
|||
|
|
- Native 同一批 `computer_act` 共用一份觀察快照;先前每個動作都把 handle map 拿掉,導致 `wait` 後面的 ref 或連續兩個 ref 被當成過期。
|
|||
|
|
- 拒絕的過期 ref 不再清掉該螢幕上其他仍有效的 handle。
|
|||
|
|
- JSON `code != ok` 即使行程成功碼為 0 也當失敗(避免 drag 誤報成功)。
|
|||
|
|
- CLI JSON 改走 stdin,避免輸入文字出現在 argv。
|
|||
|
|
- 拖曳改打最小包含該點的視窗(避免點到覆蓋其上的 Chromium),focus 優先精確標題(避免 `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 後必須重建桌面容器。
|