- commit
- 207d72f
- parent
- 6c0b602
- author
- im_wower
- date
- 2026-03-28 02:30:25 +0800 CST
docs: add task card for bug 022
2 files changed,
+113,
-2
+111,
-0
1@@ -0,0 +1,111 @@
2+# Task T-BUG-018:补齐 Claude final-message relay 支持
3+
4+## 直接给对话的提示词
5+
6+读 `/Users/george/code/baa-conductor/tasks/T-BUG-018.md` 任务文档,完成开发任务。
7+
8+如需补背景,再读:
9+
10+- `/Users/george/code/baa-conductor/bugs/BUG-022-final-message-claude-missing.md`
11+- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
12+- `/Users/george/code/baa-conductor/tasks/TASK_OVERVIEW.md`
13+
14+## 当前基线
15+
16+- 仓库:`/Users/george/code/baa-conductor`
17+- 分支基线:`main`
18+- 提交:`6c0b602`
19+- 开工要求:必须先从当前 `main` 新建任务分支,再开始开发;禁止直接在 `main` 上修改。功能任务分支名必须以 `feat/` 开头,缺陷任务分支名必须以 `bug/` 开头。
20+
21+## 必须创建的新分支名
22+
23+- `bug/bug-022-claude-final-message-relay`
24+
25+## 目标
26+
27+让 Firefox 插件的 `final-message` relay 正式支持 Claude,使 Claude 的有机最终回复能进入 `browser.final_message -> instruction_ingest` 主链。
28+
29+## 背景
30+
31+当前 `plugins/baa-firefox/final-message.js` 只对 `chatgpt` 和 `gemini` 做了 final-message 提取。Claude 没有 stream URL 识别,也没有 Claude SSE 文本提取器,导致用户在 Claude 页面里正常拿到回复时,conductor 仍然收不到 `platform=claude` 的 `browser.final_message`。这会直接让 Claude 平台上的 BAA 指令闭环失效。
32+
33+## 涉及仓库
34+
35+- `/Users/george/code/baa-conductor`
36+
37+## 范围
38+
39+- 补齐 Claude 的 final-message SSE 识别
40+- 补齐 Claude 的 candidate 提取与 relay 构造
41+- 补最小自动化回归测试
42+
43+## 路径约束
44+
45+优先在 Firefox 插件的 `final-message.js` 和现有 smoke / 单测入口内完成修复,不要顺手重写整个 network observer,也不要扩成新的 browser request / delivery 任务。
46+
47+## 推荐实现边界
48+
49+建议优先做:
50+
51+- 给 `isRelevantStreamUrl()` 增加 Claude `/completion` 识别
52+- 新增 `extractClaudeCandidateFromText()`,从 Claude SSE `completion` 事件里提取 `completion`、`id`、`conversationId`
53+- 在 `observeSse()` 和 `observeNetwork()` 里显式加 Claude 分支
54+- 复用现有 `tests/browser/browser-control-e2e-smoke.test.mjs` 的 `final-message` 测试入口补回归
55+
56+## 允许修改的目录
57+
58+- `/Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
59+- `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
60+
61+## 尽量不要修改
62+
63+- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
64+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
65+- `/Users/george/code/baa-conductor/plugins/baa-firefox/delivery-adapters.js`
66+- `/Users/george/code/baa-conductor/docs/`
67+
68+## 必须完成
69+
70+### 1. 补齐 Claude SSE 识别
71+
72+- Claude `/completion` 流量要能被 `isRelevantStreamUrl()` 识别
73+- `observeSse()` 不能再对 Claude 直接 `return null`
74+
75+### 2. 补齐 Claude candidate 提取
76+
77+- 从 Claude SSE `completion` 事件里拼出完整 `rawText`
78+- 优先提取真实 `assistantMessageId`
79+- 从请求 URL 或页面 URL 中提取 `conversationId`
80+
81+### 3. 补自动化回归
82+
83+- 覆盖 Claude final-message relay 的正向场景
84+- 验证 relay 结果里 `platform`、`conversation_id`、`assistant_message_id`、`raw_text` 合理
85+- 保持现有 ChatGPT / Gemini final-message 测试不回归
86+
87+## 需要特别注意
88+
89+- 不要破坏现有 ChatGPT / Gemini 提取逻辑
90+- Claude 的空 `completion` 事件不能把元数据误拼进最终文本
91+- 这张卡只修 `final-message relay`,不要顺手扩 `browser.claude` target 或新的 delivery 逻辑
92+
93+## 验收标准
94+
95+- Claude 页面回复完成后,插件能产生 `platform: "claude"` 的 `browser.final_message`
96+- Claude 的 `raw_text` 是完整回复文本,不混入 SSE 元数据
97+- Claude 回复中包含 baa 代码块时,现有 `instruction_ingest` 主链具备被触发的前置条件
98+
99+## 推荐验证命令
100+
101+- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
102+- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
103+- `git diff --check`
104+
105+## 交付要求
106+
107+完成后请说明:
108+
109+- 修改了哪些文件
110+- 核心实现思路是什么
111+- 跑了哪些测试
112+- 还有哪些剩余风险
+2,
-2
1@@ -17,7 +17,7 @@
2
3 - `已完成`:见 [`./archive/README.md`](./archive/README.md)
4 - `当前 TODO`:
5- - 下一张主线任务卡待新建
6+ - [`T-BUG-018.md`](./T-BUG-018.md):补齐 Claude final-message relay 支持
7 - `待处理缺陷`:见 [`../bugs/README.md`](../bugs/README.md)
8 - `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
9
10@@ -51,7 +51,7 @@
11 - upload / download / artifact route 已移除
12 - 默认超长策略改成前 `200` 行 + `超长截断`
13 - `2026-03-28`:`T-BUG-015`、`T-BUG-016`、`T-BUG-017` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
14-- 当前没有正在执行中的缺陷修复卡;如需继续推进工程改动,优先新开卡处理剩余风险
15+- `2026-03-28`:当前活跃缺陷任务卡为 [`T-BUG-018.md`](./T-BUG-018.md),用于修复 Claude final-message relay 缺失
16
17 ## 当前主线收口情况
18