baa-conductor

git clone 

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
M bugs/README.md
+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)
A tasks/T-BUG-019.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+- 还有哪些剩余风险
M tasks/TASK_OVERVIEW.md
+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