- commit
- 1a90d21
- parent
- 22a3232
- author
- im_wower
- date
- 2026-03-28 13:30:56 +0800 CST
docs: add bug 023 task tracking
3 files changed,
+123,
-1
+1,
-0
1@@ -13,6 +13,7 @@ bugs/
2
3 ## 待修复
4
5+- `BUG-023`:[`BUG-023-claude-final-message-not-captured-in-practice.md`](./BUG-023-claude-final-message-not-captured-in-practice.md)
6 - `OPT-002`:[`OPT-002-executor-timeout.md`](./OPT-002-executor-timeout.md)
7 - `OPT-003`:[`OPT-003-policy-configurable.md`](./OPT-003-policy-configurable.md)
8 - `OPT-004`:[`OPT-004-final-message-claude-sse-fallback.md`](./OPT-004-final-message-claude-sse-fallback.md)
+120,
-0
1@@ -0,0 +1,120 @@
2+# Task T-BUG-019:修复 Claude final-message 在真实 Firefox 中未被捕获
3+
4+## 直接给对话的提示词
5+
6+读 `/Users/george/code/baa-conductor/tasks/T-BUG-019.md` 任务文档,完成开发任务。
7+
8+如需补背景,再读:
9+
10+- `/Users/george/code/baa-conductor/bugs/BUG-023-claude-final-message-not-captured-in-practice.md`
11+- `/Users/george/code/baa-conductor/tasks/TASK_OVERVIEW.md`
12+- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
13+
14+## 当前基线
15+
16+- 仓库:`/Users/george/code/baa-conductor`
17+- 分支基线:`main`
18+- 提交:`fa6290a`
19+- 开工要求:必须先从当前 `main` 新建任务分支,再开始开发;禁止直接在 `main` 上修改。功能任务分支名必须以 `feat/` 开头,缺陷任务分支名必须以 `bug/` 开头。
20+
21+## 必须创建的新分支名
22+
23+- `bug/bug-023-claude-runtime-final-message`
24+
25+## 目标
26+
27+让 Claude 的真实聊天页在 Firefox 实际运行环境中,稳定产出 `browser.final_message`,不再只在仓库内测试里通过。
28+
29+## 背景
30+
31+当前 `final-message.js` 的 Claude 解析逻辑已经补齐,自动化测试也通过,但真实 Firefox 环境里 Claude 聊天页仍然没有 final-message 进入 conductor。代码核对后,至少存在两个运行时层面的缺口:
32+
33+- 插件 reload 后,没有任何显式的脚本 reinject 逻辑把新版 `content-script.js` / `page-interceptor.js` 注入到已经打开的 Claude 聊天 tab
34+- `tab_reload` 只会 reload 受管 shell tab(`#baa-shell`),不会 reload 用户实际聊天的 `claude.ai/chat/...` tab
35+
36+另外,`controller.js` 的 `ensureTrackedTabId()` 也会拒绝非 shell URL 的 sender,因此非 shell 聊天页的 page activity 无法进入受管状态读面。这至少会让 `lastActivityAt`、busy 状态和一些诊断字段失真。
37+
38+## 涉及仓库
39+
40+- `/Users/george/code/baa-conductor`
41+
42+## 范围
43+
44+- 修复 Claude 聊天页的运行时注入 / 观察链,让真实页能把 final-message 送进 controller
45+- 修复或收口 `tab_reload` / 扩展 reload 后“用户聊天 tab 仍跑旧脚本”的问题
46+- 补最小自动化回归测试
47+
48+## 路径约束
49+
50+优先在 Firefox 插件运行时层解决,不要顺手修改 conductor、instruction center 或 browser request 协议。重点范围应放在“脚本注入、tab 选择、页面消息接收”三件事。
51+
52+## 推荐实现边界
53+
54+建议优先做:
55+
56+- 为已打开的 Claude / ChatGPT / Gemini 页面补一条显式 reinject 路径,至少覆盖 Claude
57+- 或者确保 `tab_reload` 能 reload 实际聊天页,而不是只 reload shell tab
58+- 重新梳理 `ensureTrackedTabId()` / `getSenderContext()` 对非 shell 聊天页的处理,避免真实聊天页的观测消息被静默丢弃
59+- 在 `tests/browser/browser-control-e2e-smoke.test.mjs` 补能覆盖该运行时语义的最小回归
60+
61+## 允许修改的目录
62+
63+- `/Users/george/code/baa-conductor/plugins/baa-firefox/background.js`
64+- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
65+- `/Users/george/code/baa-conductor/plugins/baa-firefox/content-script.js`
66+- `/Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
67+- `/Users/george/code/baa-conductor/plugins/baa-firefox/manifest.json`
68+- `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
69+
70+## 尽量不要修改
71+
72+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
73+- `/Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
74+- `/Users/george/code/baa-conductor/plugins/baa-firefox/delivery-adapters.js`
75+- `/Users/george/code/baa-conductor/docs/`
76+
77+## 必须完成
78+
79+### 1. 修复真实聊天页注入 / reload 问题
80+
81+- 扩展 reload 后,已打开的 Claude 聊天页要有明确方式拿到当前版本的 observer 逻辑
82+- `tab_reload` 不能再只对 shell tab 生效而对实际聊天页无效
83+
84+### 2. 修复页面观测消息被静默丢弃的问题
85+
86+- Claude 聊天页发出的 page net / page sse 观测消息不能因为“不是 shell URL”被全部静默丢弃
87+- 至少要保证 final-message 相关链路和必要的运行态诊断字段能更新
88+
89+### 3. 补回归
90+
91+- 覆盖“真实聊天页 / 非 shell 页”观测消息不再被错误过滤
92+- 覆盖扩展 reload 或 tab reload 后,Claude final-message 观察链仍可工作
93+
94+## 需要特别注意
95+
96+- 不要破坏当前 `#baa-shell` 受管模型和 `desired/actual/drift` 语义
97+- 不要把这张卡扩成完整多 tab 管理重构
98+- 不要回退 BUG-022 已修好的 Claude final-message 解析逻辑
99+- 如果引入 reinject,要保持实现可解释、可测试,并尽量限制到必要 host / 文件
100+
101+## 验收标准
102+
103+- 在真实 Claude 聊天页里,扩展 reload 后无需手工重开所有页面,也能重新拿到 final-message 观察能力
104+- Claude 聊天完成后,controller / conductor 能收到 `platform: "claude"` 的 `browser.final_message`
105+- 与 `Gemini`、`ChatGPT` 的现有 observer 行为不回归
106+
107+## 推荐验证命令
108+
109+- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
110+- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
111+- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
112+- `git diff --check`
113+
114+## 交付要求
115+
116+完成后请说明:
117+
118+- 修改了哪些文件
119+- 核心实现思路是什么
120+- 跑了哪些测试
121+- 还有哪些剩余风险
+2,
-1
1@@ -17,7 +17,7 @@
2
3 - `已完成`:见 [`./archive/README.md`](./archive/README.md)
4 - `当前 TODO`:
5- - 下一张主线任务卡待新建
6+ - [`T-BUG-019.md`](./T-BUG-019.md):修复 Claude final-message 在真实 Firefox 中未被捕获
7 - `待处理缺陷`:见 [`../bugs/README.md`](../bugs/README.md)
8 - `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
9
10@@ -53,6 +53,7 @@
11 - `2026-03-28`:`T-BUG-015`、`T-BUG-016`、`T-BUG-017` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
12 - `2026-03-28`:`T-BUG-018` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
13 - `2026-03-28`:`T-MISSING-003` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
14+- `2026-03-28`:当前活跃缺陷任务卡为 [`T-BUG-019.md`](./T-BUG-019.md),用于修复 Claude final-message 在真实 Firefox 中未被捕获
15
16 ## 当前主线收口情况
17