baa-conductor

git clone 

commit
00dc4be
parent
3769b05
author
codex@macbookpro
date
2026-03-27 16:11:53 +0800 CST
docs: add baa next-wave plan and task splits
6 files changed,  +564, -1
A plans/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md
+123, -0
  1@@ -0,0 +1,123 @@
  2+# BAA 浏览器最终消息中继需求
  3+
  4+## 状态
  5+
  6+- `待落地(对应 T-S029)`
  7+- 优先级:`high`
  8+- 记录时间:`2026-03-27`
  9+
 10+## 关联文档
 11+
 12+- [BAA_INSTRUCTION_SYSTEM.md](/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md)
 13+- [README.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/README.md)
 14+- [06-integration-with-current-baa-conductor.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/06-integration-with-current-baa-conductor.md)
 15+- [07-rollout-plan.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/07-rollout-plan.md)
 16+
 17+## 背景
 18+
 19+当前 repo 已经具备:
 20+
 21+- Firefox 插件 `page-interceptor.js` 的 network / SSE 拦截骨架
 22+- `controller.js` 的 WS 上报链路
 23+- Claude / ChatGPT / Gemini 的平台定义和空壳页模型
 24+
 25+但 BAA 指令系统真正需要的输入不是“半截 stream chunk”,而是:
 26+
 27+- 一条最终权威 assistant message
 28+- 稳定的 `platform`
 29+- 最小可用的消息身份元数据
 30+- 完整原文 `raw_text`
 31+
 32+如果没有这层“最终消息 raw relay”,conductor 就无法把 BAA 解析、去重、执行中心稳定地放在服务端。
 33+
 34+## 核心结论
 35+
 36+- 浏览器侧只负责“观察最终权威消息并 raw relay”,不负责 BAA 提取、解析、格式化或执行
 37+- 首批需求必须覆盖:
 38+  - `chatgpt`
 39+  - `gemini`
 40+- 输入必须是最终完成态消息,不允许在 streaming 半截执行
 41+- 同一条 assistant 最终消息,插件侧最多发出一条 `browser.final_message`
 42+- 首版只要求 raw relay 稳定到 conductor,不要求在本任务里同时完成 BAA 执行闭环
 43+
 44+## 首版范围
 45+
 46+- ChatGPT 最终 assistant message 观察
 47+- Gemini 最终 assistant message 观察
 48+- Firefox bridge 新消息类型:
 49+  - `browser.final_message`
 50+- 最小必要元数据:
 51+  - `platform`
 52+  - `conversation_id`
 53+  - `assistant_message_id`
 54+  - `raw_text`
 55+  - `observed_at`
 56+- 插件侧去重与重复抑制
 57+- 文档与自动化 smoke
 58+
 59+## bridge 消息合同
 60+
 61+首版推荐消息形态:
 62+
 63+```json
 64+{
 65+  "type": "browser.final_message",
 66+  "platform": "chatgpt",
 67+  "conversation_id": "conv_xxx",
 68+  "assistant_message_id": "msg_xxx",
 69+  "raw_text": "```baa\n@conductor::describe\n```",
 70+  "observed_at": 1760000000000
 71+}
 72+```
 73+
 74+### 合同要求
 75+
 76+- `raw_text` 必须是完整最终文本,不是 chunk
 77+- `assistant_message_id` 允许首版按平台能力退化;如果页面暂时取不到稳定 message id,至少要提供当前轮次稳定去重所需的等价字段
 78+- `conversation_id` 允许为空,但应尽量提供
 79+- `observed_at` 使用插件本地时间戳,单位毫秒
 80+
 81+## 插件侧需求
 82+
 83+### 观察原则
 84+
 85+- 只观察最终权威 assistant message
 86+- 不解析 ` ```baa `
 87+- 不根据消息内容直接执行任何外部能力
 88+- 不在普通用户输入、草稿、thinking 中间态上报
 89+
 90+### 推荐实现边界
 91+
 92+- 优先基于页面内已存在的 network / SSE / 页面状态信号完成最终消息拼接
 93+- DOM 兜底只能作为最后手段,不应成为首选主路径
 94+- 对同一 assistant 消息做最小重复抑制,避免页面重渲染、重放或 reconnect 时重复上报
 95+
 96+## conductor 侧需求
 97+
 98+首版 conductor 侧只需要:
 99+
100+- 接收 `browser.final_message`
101+- 记录或转交给后续 instruction center
102+- 为后续 dedupe / audit 保留最小字段
103+
104+### 当前明确不要求
105+
106+- 不要求在本需求里完成 BAA 提取和执行
107+- 不要求在本需求里完成 artifact upload / download
108+- 不要求在本需求里补多 AI 路由、任务池或共识层
109+
110+## 明确不做
111+
112+- 不在插件里实现 `extractBaaBlocks`
113+- 不在插件里实现 `parseBaaBlock`
114+- 不在插件里做 result formatting / manifest / delivery plan
115+- 不把 ChatGPT / Gemini 页面自动化当成首版 blocker
116+- 不要求首版做 Claude 最终消息 raw relay,一旦 ChatGPT / Gemini 路线稳定,再按同合同补齐即可
117+
118+## 验收条件
119+
120+- ChatGPT 最终 assistant message 能稳定产生一条 `browser.final_message`
121+- Gemini 最终 assistant message 能稳定产生一条 `browser.final_message`
122+- streaming 半截、重复重放、页面重渲染不会导致同一消息多次上报
123+- 插件仍保持薄层,不引入 BAA 解析逻辑
124+- 文档已同步到 `docs/firefox/`、`plans/`、`tasks/`
A plans/BAA_INSTRUCTION_CENTER_REQUIREMENTS.md
+138, -0
  1@@ -0,0 +1,138 @@
  2+# BAA 指令解析中心与最小执行闭环需求
  3+
  4+## 状态
  5+
  6+- `待落地(对应 T-S030)`
  7+- 优先级:`high`
  8+- 记录时间:`2026-03-27`
  9+
 10+## 关联文档
 11+
 12+- [BAA_INSTRUCTION_SYSTEM.md](/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md)
 13+- [BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md](/Users/george/code/baa-conductor/plans/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md)
 14+- [README.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/README.md)
 15+- [02-protocol-spec.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/02-protocol-spec.md)
 16+- [04-execution-loop-state-machine.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/04-execution-loop-state-machine.md)
 17+- [06-integration-with-current-baa-conductor.md](/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/06-integration-with-current-baa-conductor.md)
 18+
 19+## 背景
 20+
 21+`BAA_INSTRUCTION_SYSTEM.md` 已经把总模型定义清楚了:
 22+
 23+- ` ```baa ` 一块一指令
 24+- `@target::tool::params`
 25+- conductor 是唯一解释中心
 26+- 插件不解析 BAA
 27+
 28+现在缺的不是继续讨论语法,而是把这套模型拆成当前 repo 可执行的第一阶段工程需求:
 29+
 30+- 从完整 assistant message 中提取 ` ```baa `
 31+- 解析为标准化指令
 32+- 做去重、权限和最小路由
 33+- 先跑通最小执行闭环
 34+
 35+## 核心结论
 36+
 37+- 语法层直接冻结在 v3 / v5 当前定义,不再反复改格式
 38+- parser / normalize / dedupe / policy / router / executor 全部放进 conductor
 39+- 首版只消费“完整最终消息文本”,不依赖 streaming 中间态
 40+- 首版先做精确 target,不做 `pool.*` / `role.*`
 41+- 首版先做最小工具集,不把 artifact / upload barrier 一次性塞进同一任务
 42+
 43+## 首版范围
 44+
 45+### 输入
 46+
 47+- 完整 assistant message 文本
 48+- 最小上下文:
 49+  - `platform`
 50+  - `conversation_id`
 51+  - `assistant_message_id` 或等价 dedupe 字段
 52+
 53+### 语法与解析
 54+
 55+- 提取 ` ```baa ` 代码块
 56+- 支持四种参数形式:
 57+  - 单行字符串
 58+  - 单行 JSON
 59+  - 多行 body
 60+  - 无参数
 61+- 忽略普通代码块
 62+- 一块一指令,多块并行语义
 63+
 64+### 标准化与去重
 65+
 66+- 生成标准化 instruction envelope
 67+- 生成稳定 dedupe key
 68+- 明确 block index、message identity、target、tool、params
 69+- 失败必须 fail-closed,不允许“半解析半执行”
 70+
 71+### 最小执行闭环
 72+
 73+首版建议先支持:
 74+
 75+- `@conductor::describe`
 76+- `@conductor::status`
 77+- `@conductor::exec`
 78+- `@conductor::files/read`
 79+- `@conductor::files/write`
 80+
 81+### 当前明确不要求
 82+
 83+- 不要求首版就接 `@browser.*::send`
 84+- 不要求首版就做 artifact upload / download
 85+- 不要求首版就做 `pool.*` / `role.*`
 86+- 不要求首版就做多轮 gossip / consensus / task pool
 87+
 88+## conductor 侧模块建议
 89+
 90+建议优先新增:
 91+
 92+```text
 93+apps/conductor-daemon/src/instructions/
 94+  extract.ts
 95+  parse.ts
 96+  normalize.ts
 97+  dedupe.ts
 98+  policy.ts
 99+  router.ts
100+  executor.ts
101+  loop.ts
102+```
103+
104+## 路由与执行边界
105+
106+### 路由原则
107+
108+- 先只做精确 target:
109+  - `conductor`
110+  - `system`
111+- `browser.chatgpt` / `browser.gemini` 的真正业务执行留给后续阶段
112+
113+### 执行原则
114+
115+- 优先复用当前 `conductor-daemon` 已有能力
116+- 不要再实现一套平行 shell / file 执行器
117+- executor 只负责把标准化指令映射到现有能力入口
118+
119+## 明确不做
120+
121+- 不在插件里放 parser
122+- 不在本需求里要求 ChatGPT / Gemini 页面拦截完工;那是平行方向
123+- 不在本需求里强行完成最终注入、上传确认、artifact barrier
124+- 不把语法讨论重新打开成新一轮格式设计
125+
126+## 与平行任务的关系
127+
128+- `T-S029` 负责浏览器最终消息 raw relay
129+- 本需求负责 conductor 侧 instruction center
130+- 为了并行推进,本需求必须允许先用 synthetic message / fixture 跑通,而不阻塞于浏览器端最终消息中继
131+
132+## 验收条件
133+
134+- parser 能稳定提取 ` ```baa `,并忽略普通代码块
135+- 四种参数形式都有自动化测试
136+- dedupe key 稳定且可解释
137+- 最小工具集能通过标准化指令跑通执行闭环
138+- 插件侧仍没有 parser 逻辑
139+- 文档已同步到 `plans/`、`tasks/` 和必要的 `docs/baa-instruction-system-v5/`
M plans/STATUS_SUMMARY.md
+13, -1
 1@@ -18,11 +18,15 @@
 2 - `已完成`:`T-S001` 到 `T-S025`、`T-S027`、`T-S028`,以及 `T-BUG-011`、`T-BUG-012`、`T-BUG-014`
 3 - `当前 TODO`:
 4   - `T-S026` 真实 Firefox 手工 smoke 与验收记录
 5+  - `T-S029` ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
 6+  - `T-S030` BAA 指令解析中心 Phase 1 与最小执行闭环
 7 - `待处理缺陷`:当前无 open bug backlog(见 `bugs/README.md`)
 8 - `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
 9 
10 当前新的主需求文档:
11 
12+- [`./BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md`](./BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md)
13+- [`./BAA_INSTRUCTION_CENTER_REQUIREMENTS.md`](./BAA_INSTRUCTION_CENTER_REQUIREMENTS.md)
14 - [`./BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md`](./BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md)
15 - [`./FIREFOX_BRIDGE_CONTROL_REQUIREMENTS.md`](./FIREFOX_BRIDGE_CONTROL_REQUIREMENTS.md)
16 
17@@ -80,6 +84,8 @@
18 
19 - 当前最高优先级剩余任务按顺序是:
20   - `T-S026`:真实 Firefox 手工 smoke 与验收记录
21+  - `T-S029`:补 ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
22+  - `T-S030`:收口 BAA 指令解析中心 Phase 1 与最小执行闭环
23 - 当前 bug backlog 单独留在 `bugs/` 目录,不把它和主线需求任务混写
24 - 当前不把大文件拆分当作主线 blocker
25 - 以下重构工作顺延到下一轮专门重构任务:
26@@ -92,7 +98,7 @@
27 ## 当前缺陷 backlog
28 
29 - 当前 open bug backlog:无
30-- 当前没有 bug fix 正在主线开发中;当前下一波主线任务顺序是 `T-S026`
31+- 当前没有 bug fix 正在主线开发中;当前下一波主线任务顺序是 `T-S026 -> (T-S029 || T-S030)`
32 
33 ## 低优先级 TODO
34 
35@@ -164,6 +170,12 @@
36 - 当前 open bug backlog 已清空
37 - 当前主线下一波任务是:
38   - `T-S026`:真实 Firefox 手工 smoke 与验收记录
39+- BAA 下一波工程任务已拆成两个并行方向:
40+  - `T-S029`:插件侧 ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
41+  - `T-S030`:conductor 侧 BAA 指令解析中心与最小执行闭环
42+- 这两个方向默认并行推进,但边界要保持稳定:
43+  - `T-S029` 不把 parser 放回插件
44+  - `T-S030` 允许先用 synthetic final message / fixture 跑通,不阻塞于浏览器端 relay 完工
45 - `BUG-012` 这轮修复已补上 stale `inFlight` 自愈清扫;当前残余边界是“健康但长时间完全静默”的超长 buffered 请求,理论上仍可能被 `5min` idle 阈值误判
46 - ChatGPT 当前仍依赖浏览器里真实捕获到的有效登录态 / header,且没有 Claude 风格 prompt shortcut;这是当前正式支持面的已知边界
47 - `BUG-014` 的自动化验证目前覆盖的是 conductor 侧语义透传,不是 Firefox 扩展真实运行环境里的 reconnect 生命周期;真实“重连完成”仍依赖后续 `hello` / 状态同步
A tasks/T-S029.md
+132, -0
  1@@ -0,0 +1,132 @@
  2+# Task T-S029:补 ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
  3+
  4+## 直接给对话的提示词
  5+
  6+读 `/Users/george/code/baa-conductor/tasks/T-S029.md` 任务文档,完成开发任务。
  7+
  8+如需补背景,再读:
  9+
 10+- `/Users/george/code/baa-conductor/plans/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md`
 11+- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
 12+- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/06-integration-with-current-baa-conductor.md`
 13+- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
 14+- `/Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
 15+
 16+## 当前基线
 17+
 18+- 仓库:`/Users/george/code/baa-conductor`
 19+- 分支:`main`
 20+- 提交:`3769b05`
 21+- 开工要求:不要从其他任务分支切出;如需新分支,从当前 `main` 新切
 22+
 23+## 建议分支名
 24+
 25+- `feat/browser-final-message-relay`
 26+
 27+## 目标
 28+
 29+让 Firefox 插件稳定观察 ChatGPT / Gemini 的最终 assistant message,并以统一 `browser.final_message` 消息 raw relay 给 conductor。
 30+
 31+## 背景
 32+
 33+当前 BAA 指令系统的关键输入不是 stream chunk,而是最终权威消息全文。插件已经有 network / SSE / WS 基础设施,但还没有把 ChatGPT / Gemini 的最终 assistant message 稳定抽出来发给 conductor。
 34+
 35+如果这层没打通,conductor 侧的 BAA instruction center 就只能停留在离线或 synthetic fixture 阶段。
 36+
 37+## 涉及仓库
 38+
 39+- `/Users/george/code/baa-conductor`
 40+
 41+## 范围
 42+
 43+- ChatGPT 最终消息观察
 44+- Gemini 最终消息观察
 45+- `browser.final_message` bridge 消息
 46+- 插件侧最小去重 / 重放抑制
 47+- 对应 smoke / 文档回写
 48+
 49+## 路径约束
 50+
 51+- 插件只负责“观察并转发最终消息 raw text”,不要在插件里加入 BAA parser
 52+- 不要在这个任务里实现 artifact upload / download / delivery plan
 53+- 尽量把改动限制在 Firefox 插件和 browser smoke;如果 conductor 侧只需要最小兼容接收,可做最小增量,但不要扩成 instruction center 大任务
 54+
 55+## 推荐实现边界
 56+
 57+建议优先做:
 58+
 59+- 基于现有 network / SSE / 页面状态信号判断“最终 assistant message 完成”
 60+- 统一消息形态为 `browser.final_message`
 61+- 先保证 ChatGPT / Gemini 各自产出稳定单条最终消息
 62+- 补 smoke 断言,覆盖“不在半截 stream 发送”和“同一条消息不重复上报”
 63+
 64+## 允许修改的目录
 65+
 66+- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 67+- `/Users/george/code/baa-conductor/tests/browser/`
 68+- `/Users/george/code/baa-conductor/docs/firefox/`
 69+- `/Users/george/code/baa-conductor/docs/api/`
 70+- `/Users/george/code/baa-conductor/tasks/`
 71+- `/Users/george/code/baa-conductor/plans/`
 72+
 73+## 尽量不要修改
 74+
 75+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
 76+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
 77+- `/Users/george/code/baa-conductor/packages/db/`
 78+- `/Users/george/code/baa-conductor/apps/status-api/`
 79+
 80+## 必须完成
 81+
 82+### 1. 完成 ChatGPT / Gemini 最终消息观察
 83+
 84+- 能判断最终 assistant message 何时完成
 85+- 不能在 stream 半截就上报
 86+- 同一条 assistant 最终消息不能重复上报多次
 87+
 88+### 2. 补 `browser.final_message` raw relay
 89+
 90+- 统一消息形态
 91+- 至少带:
 92+  - `platform`
 93+  - `conversation_id`
 94+  - `assistant_message_id` 或等价稳定字段
 95+  - `raw_text`
 96+  - `observed_at`
 97+- raw text 必须是完整最终文本,不是 chunk
 98+
 99+### 3. 补 smoke 和文档
100+
101+- 补自动化验证,优先复用现有 browser smoke
102+- 文档同步说明这层只是“最终消息 raw relay”,不是 BAA parser
103+- 回写相关 `tasks/`、`plans/`、必要时 `docs/firefox/`
104+
105+## 需要特别注意
106+
107+- 不要在插件里做 `extractBaaBlocks()` / `parseBaaBlock()`
108+- 不要把 ChatGPT / Gemini 的页面自动化扩成更大任务
109+- 和 `T-S030` 并行时,尽量不要碰 conductor instruction center 文件;共享合同以 `plans/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md` 为准
110+
111+## 验收标准
112+
113+- ChatGPT 最终消息能稳定产生一条 `browser.final_message`
114+- Gemini 最终消息能稳定产生一条 `browser.final_message`
115+- 不会在 streaming 半截触发 relay
116+- 同一条最终消息不会因重渲染 / 重放稳定重复上报
117+- `git diff --check` 通过
118+
119+## 推荐验证命令
120+
121+- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
122+- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
123+- `git -C /Users/george/code/baa-conductor diff --check`
124+
125+## 交付要求
126+
127+完成后请说明:
128+
129+- 最终消息是如何判定完成的
130+- `browser.final_message` 最终字段长什么样
131+- 跑了哪些测试
132+- 是否有平台特定边界
133+- 还有哪些剩余风险
A tasks/T-S030.md
+144, -0
  1@@ -0,0 +1,144 @@
  2+# Task T-S030:收口 BAA 指令解析中心 Phase 1 与最小执行闭环
  3+
  4+## 直接给对话的提示词
  5+
  6+读 `/Users/george/code/baa-conductor/tasks/T-S030.md` 任务文档,完成开发任务。
  7+
  8+如需补背景,再读:
  9+
 10+- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_CENTER_REQUIREMENTS.md`
 11+- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
 12+- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/02-protocol-spec.md`
 13+- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/04-execution-loop-state-machine.md`
 14+- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/06-integration-with-current-baa-conductor.md`
 15+
 16+## 当前基线
 17+
 18+- 仓库:`/Users/george/code/baa-conductor`
 19+- 分支:`main`
 20+- 提交:`3769b05`
 21+- 开工要求:不要从其他任务分支切出;如需新分支,从当前 `main` 新切
 22+
 23+## 建议分支名
 24+
 25+- `feat/baa-instruction-center`
 26+
 27+## 目标
 28+
 29+把 BAA 指令的提取、解析、标准化、去重和最小执行闭环放进 conductor,先跑通 Phase 1 的服务端 instruction center。
 30+
 31+## 背景
 32+
 33+`BAA_INSTRUCTION_SYSTEM.md` 和 v5 文档已经把职责边界讲清楚了:插件不解析 BAA,conductor 才是唯一解释中心。当前真正缺的是把这套模型拆成 repo 内可运行的第一阶段工程实现。
 34+
 35+这张卡的目标不是一次性做完 artifact / upload barrier / 多 AI 路由,而是先把“完整 assistant text -> BAA 指令 -> 最小执行闭环”落到 conductor。
 36+
 37+## 涉及仓库
 38+
 39+- `/Users/george/code/baa-conductor`
 40+
 41+## 范围
 42+
 43+- ` ```baa ` 提取
 44+- 四种参数形式解析
 45+- instruction normalize / envelope / dedupe key
 46+- 最小路由与执行闭环
 47+- 对应测试与文档回写
 48+
 49+## 路径约束
 50+
 51+- 这张卡默认以 conductor 侧实现为主,不依赖插件 parser
 52+- 应允许先用 synthetic complete assistant text / fixture 跑通,不要阻塞于 `T-S029`
 53+- 首版先做精确 target,不做 `pool.*` / `role.*`
 54+- 首版先做最小工具集,不要把 artifact / upload / download 全部并进来
 55+
 56+## 推荐实现边界
 57+
 58+建议优先做:
 59+
 60+- 新建 `apps/conductor-daemon/src/instructions/` 子目录
 61+- 先把 extraction / parse / normalize / dedupe 做扎实
 62+- 再把最小工具集映射到当前已有 conductor 能力
 63+- 优先用单元测试和 conductor 侧集成测试证明闭环
 64+
 65+## 允许修改的目录
 66+
 67+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
 68+- `/Users/george/code/baa-conductor/packages/schemas/src/`
 69+- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/`
 70+- `/Users/george/code/baa-conductor/tasks/`
 71+- `/Users/george/code/baa-conductor/plans/`
 72+
 73+## 尽量不要修改
 74+
 75+- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 76+- `/Users/george/code/baa-conductor/tests/browser/`
 77+- `/Users/george/code/baa-conductor/packages/db/`
 78+- `/Users/george/code/baa-conductor/apps/status-api/`
 79+
 80+## 必须完成
 81+
 82+### 1. 完成提取与解析
 83+
 84+- 只提取 ` ```baa `
 85+- 支持四种参数形式:
 86+  - 单行字符串
 87+  - 单行 JSON
 88+  - 多行 body
 89+  - 无参数
 90+- 普通代码块必须忽略
 91+
 92+### 2. 完成标准化与去重
 93+
 94+- 生成稳定 instruction envelope
 95+- 生成稳定 dedupe key
 96+- 保留最小可审计字段:
 97+  - `platform`
 98+  - `conversation_id`
 99+  - `assistant_message_id` 或等价消息身份
100+  - `block_index`
101+  - `target`
102+  - `tool`
103+  - `params`
104+
105+### 3. 跑通最小执行闭环
106+
107+- 首版至少支持:
108+  - `@conductor::describe`
109+  - `@conductor::status`
110+  - `@conductor::exec`
111+  - `@conductor::files/read`
112+  - `@conductor::files/write`
113+- 优先复用当前已有 conductor 能力,不要重新造一套平行执行器
114+
115+## 需要特别注意
116+
117+- 不要在这张卡里顺手改插件,让它长 parser
118+- 不要把 artifact 上传、下载、manifest、delivery plan 一次性全做进来
119+- 和 `T-S029` 并行时,默认把浏览器最终消息 relay 当成外部输入;这张卡必须允许先用 synthetic message / fixture 自证闭环
120+- 不要重新打开语法设计争论;v3 / v5 当前格式默认冻结
121+
122+## 验收标准
123+
124+- parser 能稳定提取 ` ```baa `,并忽略普通代码块
125+- 四种参数形式都有自动化测试
126+- dedupe key 稳定且可解释
127+- 最小工具集能通过标准化指令跑通执行闭环
128+- 插件侧仍没有 parser 逻辑
129+- `git diff --check` 通过
130+
131+## 推荐验证命令
132+
133+- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
134+- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
135+- `git -C /Users/george/code/baa-conductor diff --check`
136+
137+## 交付要求
138+
139+完成后请说明:
140+
141+- 提取 / 解析 / normalize / dedupe 是怎么设计的
142+- 最小执行闭环最终覆盖了哪些工具
143+- 跑了哪些测试
144+- 有没有刻意留到下一阶段的能力
145+- 还有哪些剩余风险
M tasks/TASK_OVERVIEW.md
+14, -0
 1@@ -18,11 +18,15 @@
 2 - `已完成`:`T-S001` 到 `T-S025`、`T-S027`、`T-S028`,以及 `T-BUG-011`、`T-BUG-012`、`T-BUG-014`
 3 - `当前 TODO`:
 4   - `T-S026` 真实 Firefox 手工 smoke 与验收记录
 5+  - `T-S029` ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
 6+  - `T-S030` BAA 指令解析中心 Phase 1 与最小执行闭环
 7 - `待处理缺陷`:当前无 open bug backlog(见 `../bugs/README.md`)
 8 - `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
 9 
10 当前新的主需求文档:
11 
12+- [`../plans/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md`](../plans/BAA_BROWSER_FINAL_MESSAGE_RELAY_REQUIREMENTS.md)
13+- [`../plans/BAA_INSTRUCTION_CENTER_REQUIREMENTS.md`](../plans/BAA_INSTRUCTION_CENTER_REQUIREMENTS.md)
14 - [`../plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md`](../plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md)
15 - [`../plans/FIREFOX_BRIDGE_CONTROL_REQUIREMENTS.md`](../plans/FIREFOX_BRIDGE_CONTROL_REQUIREMENTS.md)
16 
17@@ -66,6 +70,8 @@
18 ## 已准备的后续任务
19 
20 - [`T-S026.md`](./T-S026.md):真实 Firefox 手工 smoke 与验收记录
21+- [`T-S029.md`](./T-S029.md):补 ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
22+- [`T-S030.md`](./T-S030.md):收口 BAA 指令解析中心 Phase 1 与最小执行闭环
23 
24 当前主线已经额外收口:
25 
26@@ -81,6 +87,8 @@
27 
28 - 当前高优先级剩余任务按顺序是:
29   - [`T-S026.md`](./T-S026.md):真实 Firefox 手工 smoke 与验收记录
30+  - [`T-S029.md`](./T-S029.md):补 ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
31+  - [`T-S030.md`](./T-S030.md):收口 BAA 指令解析中心 Phase 1 与最小执行闭环
32 - 当前没有正在执行中的缺陷修复卡;如需继续推进工程改动,优先从残余风险或后续增强项开新卡
33 
34 ## 当前主线收口情况
35@@ -126,6 +134,12 @@
36 - 当前 open bug backlog 已清空
37 - 当前主线剩余任务是:
38   - [`T-S026.md`](./T-S026.md):补真实 Firefox 手工 smoke 与验收记录
39+- BAA 下一波工程任务已拆成两个并行方向:
40+  - [`T-S029.md`](./T-S029.md):插件侧 ChatGPT / Gemini 最终消息观察与 `browser.final_message` raw relay
41+  - [`T-S030.md`](./T-S030.md):conductor 侧 BAA 指令解析中心与最小执行闭环
42+- 这两个方向默认并行推进,但边界要保持稳定:
43+  - `T-S029` 以插件侧最终消息 raw relay 为主,不把 parser 放回插件
44+  - `T-S030` 以 synthetic final message / fixture 先跑通,不阻塞于浏览器端 relay 完工
45 - `BUG-012` 这轮修复已补上 stale `inFlight` 自愈清扫;当前残余边界是“健康但长时间完全静默”的超长 buffered 请求,理论上仍可能被 `5min` idle 阈值误判
46 - ChatGPT 当前仍依赖浏览器里真实捕获到的有效登录态 / header,且没有 Claude 风格 prompt shortcut;这是当前正式支持面的已知边界,不是 regression
47 - `BUG-014` 的自动化验证目前覆盖的是 conductor 侧语义透传,不是 Firefox 扩展真实运行环境里的 reconnect 生命周期;真实“重连完成”仍依赖后续 `hello` / 状态同步