baa-conductor


baa-conductor / tasks / archive
im_wower  ·  2026-03-28

T-S028.md

  1# Task T-S028:收口 ChatGPT browser relay 到正式合同
  2
  3## 直接给对话的提示词
  4
  5`/Users/george/code/baa-conductor/tasks/archive/T-S028.md` 任务文档,完成开发任务。
  6
  7如需补背景,再读:
  8
  9- `/Users/george/code/baa-conductor/tasks/archive/T-S023.md`
 10- `/Users/george/code/baa-conductor/tasks/archive/T-S025.md`
 11- `/Users/george/code/baa-conductor/docs/api/README.md`
 12- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
 13- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
 14- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
 15- `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
 16- `/Users/george/code/baa-conductor/PROGRESS/2026-03-27-current-code-progress.md`
 17
 18## 当前基线
 19
 20- 仓库:`/Users/george/code/baa-conductor`
 21- 分支:`main`
 22- 提交:`a2b1055`
 23- 开工要求:不要从其他任务分支切出;如需新分支,从当前 `main` 新切
 24
 25## 当前状态
 26
 27- `已完成(2026-03-27)`
 28
 29## 建议分支名
 30
 31- `feat/chatgpt-browser-relay`
 32
 33## 目标
 34
 35`platform=chatgpt``/v1/browser/request` 路径收口成正式支持面,并补齐自动化验证和文档口径。
 36
 37## 背景
 38
 39当前代码现实和文档口径之间有明显落差:
 40
 41- Firefox 插件和 bridge 层已经有 `chatgpt` 平台定义、header 组装、`api_request` 派发能力
 42- `index.test.js` 里也已有 `chatgpt` 的 bridge 命令与请求级测试
 43- 但正式文档、smoke 和进度口径仍然写成“正式 relay 只有 Claude 接通”
 44
 45这会让后续协作者无法判断 `chatgpt` 到底是“未实现”,还是“已具备骨架但未正式验收”。这张卡的目标就是把这个灰区清掉。
 46
 47## 涉及仓库
 48
 49- `/Users/george/code/baa-conductor`
 50
 51## 范围
 52
 53- `/v1/browser/request``platform=chatgpt` 的正式支持面
 54- 必要时补 `buffered` / `sse` / `cancel` 路径缺口
 55- ChatGPT 对应自动化 smoke
 56- 正式文档和进度文档回写
 57
 58## 路径约束
 59
 60- 这张卡优先收口 `chatgpt`,不要把 `gemini` 一起做成大任务
 61- 不要破坏 Claude 现有 prompt shortcut、legacy `/v1/browser/claude/*` 包装和现有 smoke
 62- 如需改 Firefox 插件,优先做 ChatGPT 相关最小增量,不要顺手重写整个平台抽象
 63
 64## 推荐实现边界
 65
 66建议优先做:
 67
 68- 先确认 `local-api -> bridge -> plugin/page proxy` 这条 ChatGPT 请求链现状
 69- 先把 `buffered` 路径收口成正式支持面
 70- 如果当前代码已能稳定支撑 `sse` / `cancel`,一并纳入 smoke 和文档
 71- 如果 `sse` 仍有真实缺口,不要模糊描述,明确写成限制并单开后续任务或 bug
 72
 73## 允许修改的目录
 74
 75- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
 76- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 77- `/Users/george/code/baa-conductor/tests/browser/`
 78- `/Users/george/code/baa-conductor/docs/api/`
 79- `/Users/george/code/baa-conductor/docs/firefox/`
 80- `/Users/george/code/baa-conductor/tasks/`
 81- `/Users/george/code/baa-conductor/plans/`
 82- `/Users/george/code/baa-conductor/PROGRESS/`
 83
 84## 尽量不要修改
 85
 86- `/Users/george/code/baa-conductor/packages/db/`
 87- `/Users/george/code/baa-conductor/apps/status-api/`
 88- `/Users/george/code/baa-conductor/packages/host-ops/`
 89- `/Users/george/code/baa-conductor/plugins/baa-firefox/` 里的 Gemini 专用模板逻辑
 90
 91## 必须完成
 92
 93### 1. 确认并收口 ChatGPT 正式请求面
 94
 95- 确认 `POST /v1/browser/request``platform=chatgpt` 下的真实行为
 96- 至少把 `buffered` 模式收口成自动化可验证的正式支持面
 97- 如当前代码已具备条件,补 `sse``cancel` 的正式验证;如果没有,就明确写出当前限制
 98
 99### 2. 补自动化验证
100
101- 至少补一条从 `local-api` 到 Firefox bridge stub 的 ChatGPT 请求测试
102- 优先补到已有测试文件里,不新起一套平行测试体系
103- 不能只测 bridge 原语,必须覆盖正式 `/v1/browser/request` 合同
104
105### 3. 同步正式文档和进度口径
106
107- `docs/api/README.md`、必要时 `docs/api/business-interfaces.md` 要与代码现实一致
108- `tasks/`、`plans/`、`PROGRESS/` 的状态描述要同步
109- 如果最终只做到 `buffered`,文档必须明确写“ChatGPT 哪些模式已正式支持,哪些还没有”
110
111## 需要特别注意
112
113- ChatGPT 仍依赖真实浏览器里捕获到的有效 header / 登录态;不要把“有代码路径”写成“无前提可用”
114- Claude prompt shortcut 仍然只属于 Claude,不要扩成 ChatGPT 共用语义
115- Gemini 继续留到下一波;除非是共享通用路径上的低风险修正,否则不要把范围扩成 `chatgpt + gemini`
116- 任何文档结论都要以当前代码和自动化验证为准,不要沿用旧口径
117
118## 验收标准
119
120- 至少一条自动化测试证明 `platform=chatgpt``/v1/browser/request` 正式可用
121- 如果 `sse` / `cancel` 也已纳入支持面,测试中要有对应覆盖
122- 文档不再错误写成“正式 relay 只有 Claude”。
123- Claude 现有请求、cancel、smoke 不回退
124- `git diff --check` 通过
125
126## 推荐验证命令
127
128- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
129- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
130- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
131- `git -C /Users/george/code/baa-conductor diff --check`
132
133## 实施结果
134
135- `platform=chatgpt``/v1/browser/request` 已正式收口到文档和 describe 合同,当前正式支持:
136  - 显式 `path``buffered`
137  - 显式 `path``sse`
138  - `POST /v1/browser/request/cancel`
139- Claude 仍保留原有 prompt shortcut、legacy `/v1/browser/claude/*` 包装和现有 smoke;本轮没有把 ChatGPT 扩成 Claude 风格 prompt helper。
140- 自动化验证已补到两层:
141  - `apps/conductor-daemon/src/index.test.js`:补本地 API 合同级 ChatGPT buffered 请求断言,并校验 describe 合同里的正式支持平台
142  - `tests/browser/browser-control-e2e-smoke.test.mjs`:补 ChatGPT metadata + buffered / SSE / cancel smoke
143- Firefox 插件侧本轮没有新增行为改动;现有通用 proxy / stream / cancel 路径已经足以支撑 ChatGPT,主要补的是正式合同、测试和文档口径。
144- Gemini 继续留在下一波,因为这张卡的目标是先把已具备链路基础、且已能被自动化验证的 ChatGPT 收口成正式支持面,避免扩成 `chatgpt + gemini` 大任务。
145
146## 自动化验证
147
148- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
149- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
150  - 结果:`35/35` 通过
151- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
152  - 结果:`3/3` 通过
153
154## 剩余风险
155
156- ChatGPT 仍依赖浏览器里真实捕获到的有效登录态 / header;这轮没有把它做成“无前提可用”的平台
157- ChatGPT 仍没有 Claude 风格的 prompt shortcut;当前正式支持面仍是显式 `path` 的 raw request / SSE / cancel
158- 真实 Firefox 手工 smoke 仍未完成;当前自动化覆盖的是 conductor / bridge / plugin stub 层面的合同与语义透传,不等于真机桌面验收
159
160## 交付要求
161
162完成后请说明:
163
164- ChatGPT 最终正式支持了哪些请求模式
165- 改了哪些测试和文档
166- 是否改到 Firefox 插件侧
167- Gemini 为什么仍然留在下一波
168- 还有哪些剩余风险