feat: add cli contract and local browser events

This commit is contained in:
QiuSW
2026-07-22 15:19:11 +08:00
parent 82f3c1be0e
commit 26cfa8b921
8 changed files with 210 additions and 6 deletions
+1 -1
View File
@@ -25,7 +25,7 @@
| --- | --- | --- | --- |
| T-201 | HTML 原型、Gio 外壳和实例列表/表单 | T-002 | DONE |
| T-202 | 本地配置持久化和实例恢复 | T-101 | DONE |
| T-203 | CLI 合约和本地事件推送 | T-103 | TODO |
| T-203 | CLI 合约和本地事件推送 | T-103 | DONE |
| T-204 | UI 全状态验收与 Windows 打包 smoke | T-201,T-202,T-203 | TODO |
## Backlog
+6 -1
View File
@@ -24,17 +24,20 @@ type BrowserManager interface {
参数数组由 `internal/platform/browser.BuildArgs` 生成;Chrome/Edge executable 由同包 `Discoverer.Resolve` 解析。二者都不接收 shell 命令行字符串。
## CLI 目标形状
## CLI 当前合约
```text
chub start --browser chrome --user-data-dir <dir> [--profile-directory <name>] [--url <url>]
chub list
chub stop <instance-id> [--force]
chub restart <instance-id>
chub events
```
退出码:0 成功,2 参数错误,3 profile 占用,4 实例不存在,5 身份校验失败,6 系统权限/进程错误。
当前 `list` 和 `events` 已输出 JSON;`events` 输出本地配置快照 JSON,后续 loopback transport 接入后升级为 JSON Lines 持续流。`start/stop/restart` 已保留稳定命令和错误码,等待 BrowserManager adapter 接入。
## 事件
| 事件 | 触发 | 负载 |
@@ -44,3 +47,5 @@ chub restart <instance-id>
| `browser.exited` | 进程退出 | instance_id、exit_code |
事件禁止携带密码、Cookie、Token、完整代理认证信息或原始系统堆栈。
应用内 `application.EventBus` 使用带缓冲的订阅通道,发布不阻塞进程监控;UI 通过订阅刷新状态,取消订阅会关闭对应通道。
+4 -4
View File
@@ -3,11 +3,11 @@
## 快照
- 日期:2026-07-22
- 阶段:Phase 2 产品外壳(T-201、T-202 已完成)
- 代码:已建立 Go module `chub`、`cmd/chub` 入口、logging 测试基座、浏览器 domain/application 合约、Chrome/Edge 参数/发现模块、启动 registry、Windows 身份/占用检查、优雅关闭、Job Object、真实 Chrome/Edge smoke、JSON 配置存储和启动恢复,T-001 至 T-003、T-101 至 T-104、T-201 至 T-202 已完成
- UI:已接入 Gio v0.10.1 双页桌面壳,设置保存异步写入本地配置,启动时恢复设置和已保存实例;CLI/实时事件由 T-203 接入
- 阶段:Phase 2 产品外壳(T-201 至 T-203 已完成)
- 代码:已建立 Go module `chub`、`cmd/chub` 入口、logging 测试基座、浏览器 domain/application 合约、Chrome/Edge 参数/发现模块、启动 registry、Windows 身份/占用检查、优雅关闭、Job Object、真实 Chrome/Edge smoke、JSON 配置存储、启动恢复、CLI JSON 合约和应用内事件总线,T-001 至 T-003、T-101 至 T-104、T-201 至 T-203 已完成
- UI:已接入 Gio v0.10.1 双页桌面壳,设置保存异步写入本地配置,启动时恢复设置和已保存实例;CLI `list/events` 已可用,`start/stop/restart` 等待 BrowserManager adapter
- 浏览器核心:设计参考来自 `D:\OPC\shop_helm\internal\platform\chrome`,尚未复制或接入本项目
- blocker:无;下一个任务为 T-203(CLI 合约和本地事件推送)
- blocker:无;下一个任务为 T-204(UI 全状态验收与 Windows 打包 smoke)
## 当前目录
+35
View File
@@ -0,0 +1,35 @@
---
id: T-203
title: 实现 CLI 合约和本地事件推送
phase: 2
deps: [T-103]
status: DONE
created: 2026-07-22
owner: codex
---
## 需求与背景
脚本需要稳定的机器可读入口,UI 和进程监控需要共享浏览器状态事件,同时不能把敏感凭证写入输出。
## 方案与边界
- CLI 默认 JSON 输出;`list` 返回配置实例,`events` 返回当前本地配置快照。
- 预留 `start/stop/restart` 命令形状和退出码,未接入 BrowserManager 时明确返回 `service_unavailable`,不伪造成功。
- `application.EventBus` 提供带缓冲的进程内订阅通道,发布不阻塞进程监控,取消订阅会关闭通道。
- 事件和 CLI 输出禁止包含密码、Cookie、Token、完整代理认证和原始系统堆栈。
## 验收要点
- `list`、`events` 可输出有效 JSON。
- 未知命令返回退出码 2 和稳定错误码。
- 事件总线可发布、接收和取消订阅。
- `go test ./...`、`go vet ./...`、`go build -o build/chub.exe ./cmd/chub` 通过。
## 执行记录
- 状态:DONE
- 变更:新增 `application.EventBus` 及测试;`cmd/chub` 增加 list/events JSON 输出、稳定错误码和 start/stop/restart 预留合约;同步 API 文档。
- 验证:`gofmt`、`go test ./...`、`go vet ./...`、`go build -o build/chub.exe ./cmd/chub` 均通过。
- 阻塞:无。
- 残余风险:跨进程实时事件流和 BrowserManager CLI adapter 尚未接入,属于后续迭代范围。