baa-conductor

git clone 

baa-conductor / tasks
im_wower  ·  2026-03-29

T-S053.md

  1# Task T-S053:插件详细日志与诊断增强
  2
  3## 状态
  4
  5- 当前状态:`已完成`
  6- 规模预估:`M`
  7- 依赖任务:无
  8- 建议执行者:`Claude`(需要理解插件 controller.js / content-script.js / page-interceptor.js 的事件流)
  9
 10## 直接给对话的提示词
 11
 12`/Users/george/code/baa-conductor/tasks/T-S053.md` 任务文档,完成开发任务。
 13
 14如需补背景,再读:
 15
 16- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
 17- `/Users/george/code/baa-conductor/plugins/baa-firefox/content-script.js`
 18- `/Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
 19- `/Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
 20
 21## 当前基线
 22
 23- 仓库:`/Users/george/code/baa-conductor`
 24- 分支基线:`main`
 25- 提交:`dee2b20`
 26
 27## 分支与 worktree(强制)
 28
 29- 分支名:`feat/plugin-diagnostic-logging`
 30- worktree 路径:`/Users/george/code/baa-conductor-plugin-diagnostic-logging`
 31
 32开工步骤:
 33
 341. `cd /Users/george/code/baa-conductor`
 352. `git worktree add ../baa-conductor-plugin-diagnostic-logging -b feat/plugin-diagnostic-logging main`
 363. `cd ../baa-conductor-plugin-diagnostic-logging`
 37
 38完成后提交与推送(由执行者完成,不要合并):
 39
 401. 在 worktree 里提交所有变更(包括更新后的任务文档)
 412. `git push -u origin feat/plugin-diagnostic-logging`
 42
 43## 目标
 44
 45增强 Firefox 插件的日志和诊断能力,让排查 final-message 捕获失败等问题不再需要猜。
 46
 47## 背景
 48
 49手动验证 ChatGPT 闭环时,ChatGPT 明确回复了 baa 代码块,但插件没有捕获到 final_message。当前插件日志在内存循环缓冲区,无法事后查看,也不记录关键事件(哪个 tab 的哪个请求被拦截/跳过、final-message 观察器为什么没触发等)。
 50
 51## 必须完成
 52
 53### 1. Tab 跟踪日志
 54
 55在 controller.js 中,每个被跟踪的 tab 记录:
 56- tab ID
 57- 平台(chatgpt / claude / gemini)
 58- 页面标题
 59- 页面 URL
 60- content-script 是否注入成功
 61- page-interceptor 是否注入成功
 62- 最近一次网络事件时间
 63
 64每当 tab 状态变化时(创建、导航、关闭、content-script 就绪)写一条日志。
 65
 66### 2. 网络事件日志
 67
 68在 handlePageNetwork 和 handlePageSse 中,对每个被处理的事件记录:
 69- 来源 tab ID 和平台
 70- URL(截取路径部分)
 71- 方法(GET/POST)
 72- 是否匹配 `isRelevantStreamUrl`
 73- 是否触发了 final-message 观察器
 74- 如果触发了,观察器返回了什么(relay 成功 / 被去重 / 为 null)
 75
 76### 3. final-message 观察日志
 77
 78在 observeFinalMessageFromPageSse 和 observeFinalMessageFromPageNetwork 中记录:
 79- 是否有 observer(`state.finalMessageRelayObservers[platform]` 是否存在)
 80- observeSse / observeNetwork 的返回值(null = 未产生 relay,有值 = 产生了 relay)
 81- relay 是否被去重跳过
 82- relay 是否成功发送到 conductor
 83
 84### 4. console.log 转发
 85
 86在 page-interceptor.js 和 content-script.js 中:
 87- 关键事件(fetch 拦截、SSE 流开始/结束、代理请求)用 `console.log("[BAA]", ...)` 输出
 88- content-script.js 收到页面事件时 `console.log("[BAA-CS]", event.type, ...)` 输出
 89- 这些日志可以通过 Firefox 的 Browser Console(Ctrl+Shift+J)查看
 90
 91### 5. 日志通过 WS 转发到 conductor(可选)
 92
 93如果实现简单,把关键日志事件通过 WS 发给 conductor,conductor 写到 `logs/baa-plugin/YYYY-MM-DD.jsonl`。消息类型用 `plugin_diagnostic_log` 94
 95如果实现复杂,跳过此项,只做本地 console 日志。
 96
 97## 允许修改的目录
 98
 99- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
100- `/Users/george/code/baa-conductor/plugins/baa-firefox/content-script.js`
101- `/Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
102- `/Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
103- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-ws.ts`(如果做 WS 转发)
104
105## 尽量不要修改
106
107- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
108- `/Users/george/code/baa-conductor/packages/`
109
110## 需要特别注意
111
112- 日志不能影响正常功能——所有日志写入包在 try-catch 中
113- 日志量要控制——网络事件日志只记录匹配平台 URL 的请求,不记录所有请求
114- console.log 前缀统一用 `[BAA]`,方便在 Browser Console 中过滤
115- controller.js 的内存日志缓冲区上限可以适当加大(从当前值加到 500 条)
116- 所有开发必须在 worktree 中进行,不要在主仓库目录修改代码
117
118## 验收标准
119
120- 插件重载后,Browser Console 中能看到 `[BAA]` 前缀的日志
121- 打开 ChatGPT 页面后,能看到 tab 跟踪日志(tab ID、平台、URL)
122- ChatGPT 发消息后,能看到网络事件日志(SSE 流开始/结束)
123- final-message 观察器的触发/跳过原因可见
124- 日志不影响正常功能
125
126## 推荐验证命令
127
128- 在 Firefox 中按 Ctrl+Shift+J 打开 Browser Console
129- 过滤 `[BAA]`
130- 重载插件,观察 tab 跟踪日志
131- 在 ChatGPT 中发消息,观察网络事件和 final-message 日志
132
133## 执行记录
134
135> 以下内容由执行任务的 AI 填写,创建任务时留空。
136
137### 开始执行
138
139- 执行者:Claude
140- 开始时间:2026-03-29
141- 状态变更:`待开始` → `进行中`
142
143### 完成摘要
144
145- 完成时间:2026-03-29
146- 状态变更:`进行中` → `已完成`
147- 修改了哪些文件:
148  - `plugins/baa-firefox/controller.js` — LOG_LIMIT 160→500,handlePageNetwork/handlePageSse 增加 [NET]/[SSE] 诊断日志,observeFinalMessageFromPageNetwork/PageSse 增加 [FM-NET]/[FM-SSE] 诊断日志,handlePageBridgeReady 增加 URL 和标题输出
149  - `plugins/baa-firefox/content-script.js` — 所有事件处理函数(page_ready, network, sse, proxy_response, proxy_request_dispatch)增加 `[BAA-CS]` console.log
150  - `plugins/baa-firefox/page-interceptor.js` — fetch 拦截、SSE 流开始/结束、XHR 拦截、代理请求增加 `[BAA]` console.log
151  - `plugins/baa-firefox/final-message.js` — 导出 `isRelevantStreamUrl` 供 controller.js 诊断日志使用
152- 核心实现思路:
153  - controller.js 使用 `addLog("debug", ..., false)` 写入内存日志缓冲区(不通过 WS 发送),所有诊断日志包在 try-catch 中
154  - content-script.js 和 page-interceptor.js 使用 `console.log("[BAA]"/[BAA-CS]", ...)` 输出到 Browser Console,全部包在 try-catch 中
155  - SSE 事件日志仅在 done/error 时记录(避免每个 chunk 都记录)
156  - 网络事件日志记录所有已匹配平台的请求(shouldTrack 已在上游过滤)
157- 跑了哪些测试:
158  - 无自动化测试(纯日志增强,需手动在 Firefox Browser Console 验证)
159
160### 执行过程中遇到的问题
161
162无。
163
164### 剩余风险
165
166- WS 转发诊断日志(必须完成项第 5 项)标记为可选,本次未实现。如需事后查看日志,仍需通过 Browser Console 实时观察。
167- `addLog("debug", ...)` 的日志会占用内存缓冲区(已扩容到 500 条),高频 API 调用场景下可能挤掉较早的 info/warn/error 日志。
168