codex@macbookpro
·
2026-03-31
T-S049.md
1# Task T-S049:开放 @browser.chatgpt 和 @browser.gemini target
2
3## 状态
4
5- 当前状态:`已完成`
6- 规模预估:`S`
7- 依赖任务:`T-S048`(Gemini 适配器)
8- 建议执行者:`Codex` 或 `Claude`(加白名单 + 路由,边界清晰)
9
10## 直接给对话的提示词
11
12读 `/Users/george/code/baa-conductor/tasks/T-S049.md` 任务文档,完成开发任务。
13
14## 当前基线
15
16- 仓库:`/Users/george/code/baa-conductor`
17- 分支基线:`main`(当前已包含 `T-BUG-029`)
18- 提交:`4663817`
19
20## 分支与 worktree(强制)
21
22- 分支名:`feat/browser-chatgpt-gemini-targets`
23- worktree 路径:`/Users/george/code/baa-conductor-browser-chatgpt-gemini-targets`
24
25开工步骤:
26
271. `cd /Users/george/code/baa-conductor`
282. `git worktree add ../baa-conductor-browser-chatgpt-gemini-targets -b feat/browser-chatgpt-gemini-targets main`
293. `cd ../baa-conductor-browser-chatgpt-gemini-targets`
30
31完成后提交与推送(由执行者完成,不要合并):
32
331. 在 worktree 里提交所有变更(包括更新后的任务文档)
342. `git push -u origin feat/browser-chatgpt-gemini-targets`
35
36## 目标
37
38在 BAA 指令系统中正式开放 `@browser.chatgpt` 和 `@browser.gemini` 作为合法 target。
39
40## 必须完成
41
42### 1. policy.ts 加白名单
43
44```typescript
45SUPPORTED_TARGET_TOOLS["browser.chatgpt"] = ["current", "send"];
46SUPPORTED_TARGET_TOOLS["browser.gemini"] = ["current", "send"];
47```
48
49### 2. router.ts 加路由映射
50
51参照 `browser.claude` 的路由,为 `browser.chatgpt` 和 `browser.gemini` 加对应映射:
52
53- `send` → `POST /v1/browser/chatgpt/send` / `POST /v1/browser/gemini/send`
54- `current` → `GET /v1/browser/chatgpt/current` / `GET /v1/browser/gemini/current`
55
56### 3. local-api.ts 加端点
57
58参照 `/v1/browser/claude/send` 和 `/v1/browser/claude/current` 的实现,为 chatgpt 和 gemini 加对应端点。
59
60## 允许修改的目录
61
62- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/policy.ts`
63- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/router.ts`
64- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
65
66## 验收标准
67
68- `@browser.chatgpt::send:::"hello"` 不被 policy deny
69- `@browser.gemini::send:::"hello"` 不被 policy deny
70- 路由正确映射到对应端点
71- Claude 的 `@browser.claude` 行为不受影响
72- 所有现有测试通过
73
74## 执行记录
75
76> 以下内容由执行任务的 AI 填写,创建任务时留空。
77
78### 开始执行
79
80- 执行者:Codex
81- 开始时间:2026-03-30 02:49 CST
82- 状态变更:`待开始` → `进行中`
83
84### 完成摘要
85
86- 完成时间:2026-03-30 03:19 CST
87- 状态变更:`进行中` → `已完成`
88- 修改了哪些文件:`apps/conductor-daemon/src/instructions/policy.ts`、`apps/conductor-daemon/src/instructions/router.ts`、`apps/conductor-daemon/src/local-api.ts`、`apps/conductor-daemon/src/index.test.js`、`tasks/T-S049.md`
89- 核心实现思路:把 `browser.chatgpt`、`browser.gemini` 加入 BAA Phase 1 target 白名单;router 复用 `browser.claude` 的 `send/current` 映射模式,落到 `/v1/browser/chatgpt/*`、`/v1/browser/gemini/*`;local-api 为 ChatGPT/Gemini 增加 legacy helper wrapper,其中 `send` 复用现有 browser proxy,请求默认分别落到 ChatGPT conversation 路径和 Gemini StreamGenerate 路径,`current` 为 ChatGPT 增加当前对话代理读取,为 Gemini 返回当前页面/runtime 与最近 final-message 快照;同时补齐 describe/capabilities 中的 legacy route 暴露,并把原先“应被 policy deny”的测试改成新语义下的正向覆盖。
90- 跑了哪些测试:`pnpm -C apps/conductor-daemon test`
91
92### 执行过程中遇到的问题
93
94- 新建 worktree 默认没有 `node_modules`,导致 `pnpm exec tsc` 失败;复用主工作区依赖后重新跑测试,源码无需额外调整。
95
96### 剩余风险
97
98- `POST /v1/browser/chatgpt/send` 仍依赖浏览器侧真实登录态和已捕获的请求上下文;若 ChatGPT 页面协议再次变化,需要和插件侧模板/headers 逻辑一起联调。
99- `POST /v1/browser/gemini/send` 依赖浏览器插件已先捕获一条真实 Gemini `StreamGenerate` 模板请求;若模板过期或页面协议变化,helper route 可能需要同步调整。
100
101### 2026-03-31 latest main 复核
102
103- 执行者:Codex
104- 复核基线:`origin/main@e89ee69`
105- 复核结论:`apps/conductor-daemon/src/instructions/policy.ts`、`apps/conductor-daemon/src/instructions/router.ts`、`apps/conductor-daemon/src/local-api.ts` 与 `apps/conductor-daemon/src/index.test.js` 已包含 `T-S049` 所需改动;按要求新建 `feat/browser-chatgpt-gemini-targets` worktree 后,无需再补源码。
106- 测试复核:复用主工作区依赖后运行 `pnpm -C apps/conductor-daemon test`,`77` 项测试全部通过。
107- 备注:本地 `/Users/george/code/baa-conductor` 的 `main` 比 `origin/main` 多 1 个与 `T-S049` 无关的 Gemini adapter 提交,因此本次 worktree 直接从 `origin/main` 创建,避免混入额外变更。