4.3 KiB
4.3 KiB
id, title, phase, deps, status, created, owner
| id | title | phase | deps | status | created | owner | ||
|---|---|---|---|---|---|---|---|---|
| T-302 | 本地 CDP 启动、外部关联与实例端口展示 | 3 |
|
DONE | 2026-07-25 | codex |
需求与背景
Chub 需要为新启动的 Chrome/Edge 分配仅限 loopback 的 remote debugging port;设置中的起始端口留空时使用 9666。实例列表需要展示实际关联端口并使用清晰的边框分组。
如果其他程序已经使用同一规范化 User Data Dir 启动浏览器,Chub 不得再次启动同目录浏览器。只有该目录中的 DevToolsActivePort 与 127.0.0.1:<port>/json/version 可验证为同类浏览器时,Chub 才能将其标为“外部已关联”;此关联不赋予关闭、强制关闭、重启或其他 CDP 页面控制权限。
方案与边界
LaunchSpec将 remote debugging port 作为受控领域字段;BuildArgs固定生成--remote-debugging-address=127.0.0.1和--remote-debugging-port=<port>,额外参数继续不得覆盖。- 平台端从保存的起始端口开始,在最多 100 个端口范围中探测可用候选;启动后直接请求该已知 loopback 端口的
/json/version,只有验证成功才把该端口写入运行时结果。端口探测与浏览器绑定之间存在竞争时,不自动杀死或重复启动浏览器。 - 启动前先合并 Chub launcher registry 与 Windows 外部 profile inspector 结果。目录被外部占用时,只读取该目录的
DevToolsActivePort,不扫描全系统 Chrome/Edge 进程或端口。 - 外部端点验证失败、端口文件过期、权限不足或浏览器类型不匹配时,保守报告外部/未知占用并拒绝启动;不得借此接管外部 PID。
- Gio 设置增加带 Label 和帮助文本的“远程调试起始端口”数字输入;空值在保存时归一化为
9666,有效值为1024至65535。 - Gio 实例列表增加“调试端口”字段及 1dp 外层边框、圆角和表头分隔;端口值为实际关联端口、检测中或
—。行级启动结果沿现有异步 channel 回到 UI 线程,避免阻塞 frame。 - 托管运行、外部已关联、外部占用和启动失败使用不同文字状态;外部已关联只保留“重新检测”语义,不成为可关闭/重启的托管实例。
验收要点
- 启动 Chrome/Edge 时实际追加 loopback remote debugging 参数,默认从
9666选择;首个端口占用时尝试后续端口,并在实例列表显示已验证的实际端口。 - 同一规范化 User Data Dir 的外部 Chrome/Edge 若存在有效
DevToolsActivePort,启动操作不创建新进程,列表显示“外部已关联”、PID、来源和端口。 - 外部浏览器未启用 CDP 或无法验证时,不创建新进程,列表显示外部/未知占用与可恢复说明。
- 端口输入可保存、恢复、校验和取消;空值恢复为
9666,非法端口在字段附近显示错误。 - 实例列表外框、表头和紧凑端口列在默认窗口宽度下不挤压启动/删除图标;端口为空显示
—。 - 外部关联没有关闭、重启、强制终止或全局按进程名操作;CDP WebSocket URL 不进入配置、日志、事件或 UI。
go test ./...、go vet ./...、Windows build、真实 Chrome/Edge CDP/外部关联 smoke 和既有 Windows smoke 通过。
执行记录
- 状态:DONE
- 变更:
LaunchSpec新增受控 remote debugging port 并固定生成 loopback 参数;设置持久化并恢复起始端口(空值/旧配置默认 9666);新增端口递增、DevToolsActivePort解析和/json/version浏览器类型校验。GUI 启动链路会拒绝未验证的外部占用、关联可验证的外部实例、展示 PID/端口/来源,并将端口作为列表边框内的独立字段。真实 smoke 以已知端口校验 Chrome/Edge CDP,并在任意失败路径按 profile 清理测试进程。 - 验证:
gofmt、go test ./...、go vet ./...、go build -o build/chub.exe ./cmd/chub、scripts/smoke-browser.ps1(真实 Chrome/Edge loopback CDP)和scripts/smoke-windows.ps1均通过。 - 阻塞:无。
- 残余风险:Chrome 默认用户目录可能忽略 remote debugging 开关;端口预探测存在不可消除的短暂竞争,最终以端点验证为准。外部浏览器未留下
DevToolsActivePort时,Chub 不会猜测或扫描端口以避免把其他 profile 的 CDP 端点错误关联,只报告外部占用。