im_wower
·
2026-03-29
T-BUG-031.md
1# Task T-BUG-031:插件重载后自动刷新已打开的 AI 页面
2
3## 状态
4
5- 当前状态:`已完成`
6- 规模预估:`S`
7- 依赖任务:无
8- 建议执行者:`均可`
9
10## 直接给对话的提示词
11
12读 `/Users/george/code/baa-conductor/tasks/T-BUG-031.md` 任务文档,完成开发任务。
13
14## 当前基线
15
16- 仓库:`/Users/george/code/baa-conductor`
17- 分支基线:`main`
18- 提交:`a2c76c2`
19
20## 分支与 worktree(强制)
21
22- 分支名:`bug/reload-refresh-tabs`
23- worktree 路径:`/Users/george/code/baa-conductor-reload-refresh-tabs`
24
25开工步骤:
26
271. `cd /Users/george/code/baa-conductor`
282. `git worktree add ../baa-conductor-reload-refresh-tabs -b bug/reload-refresh-tabs main`
293. `cd ../baa-conductor-reload-refresh-tabs`
30
31完成后提交与推送(由执行者完成,不要合并):
32
331. 在 worktree 里提交所有变更(包括更新后的任务文档)
342. `git push -u origin bug/reload-refresh-tabs`
35
36## 目标
37
38插件重载或启动时,延迟几秒后自动刷新已打开的 AI 页面(Claude、ChatGPT、Gemini),确保 content-script 和 page-interceptor 重新注入,BAA 浮层恢复正常状态。
39
40## 背景
41
42插件重载后,已打开的 AI 页面不会重新注入 content-script,导致:
43- 右下角 BAA 浮层显示"本页:未发现"
44- page-interceptor 不工作,SSE/fetch 拦截失效
45- final-message 无法捕获
46
47需要手动刷新每个页面才能恢复。
48
49## 必须完成
50
51### 1. 插件启动时查找已打开的 AI 页面
52
53在 `controller.js` 的 `browser.runtime.onInstalled` 或启动初始化阶段:
54
55- 用 `browser.tabs.query` 查找所有匹配 AI 平台 URL 的 tab:
56 - `https://claude.ai/*`
57 - `https://chatgpt.com/*`
58 - `https://chat.openai.com/*`
59 - `https://gemini.google.com/*`
60
61### 2. 延迟后刷新
62
63- 延迟 2-3 秒(等待插件初始化、WS 连接建立)
64- 对每个匹配的 tab 调用 `browser.tabs.reload(tabId)`
65- 不刷新 controller 页面本身
66- 不刷新 shell 页面(`#baa-shell` 的 tab),只刷新用户的业务对话页面
67
68### 3. 日志
69
70- 记录刷新了哪些 tab(tab ID、URL、平台)
71- 如果没有找到需要刷新的 tab,记录"无需刷新"
72
73## 允许修改的目录
74
75- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
76
77## 尽量不要修改
78
79- `/Users/george/code/baa-conductor/plugins/baa-firefox/content-script.js`
80- `/Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
81- `/Users/george/code/baa-conductor/apps/`
82
83## 需要特别注意
84
85- 只在插件安装/重载时刷新,不要在每次 `browser.runtime.onStartup` 时都刷新(避免浏览器启动时不必要的刷新)
86- 延迟时间不要太短(WS 还没连上就刷新没意义),也不要太长(用户等太久)
87- shell 页面不要刷新,它们由 conductor 管理
88- 所有开发必须在 worktree 中进行
89
90## 验收标准
91
92- 重载插件后,2-3 秒内已打开的 ChatGPT/Claude/Gemini 页面自动刷新
93- 刷新后 BAA 浮层正常显示(不再是"未发现")
94- shell 页面不受影响
95- controller 页面不受影响
96
97## 执行记录
98
99> 以下内容由执行任务的 AI 填写,创建任务时留空。
100
101### 开始执行
102
103- 执行者:`Codex (GPT-5)`
104- 开始时间:`2026-03-29 03:45:00 CST`
105- 状态变更:`待开始` → `进行中`
106
107### 完成摘要
108
109- 完成时间:`2026-03-29 04:07:14 CST`
110- 状态变更:`进行中` → `已完成`
111- 修改了哪些文件:
112 - `plugins/baa-firefox/controller.js`
113 - `tasks/T-BUG-031.md`
114- 核心实现思路:
115 - 在 `controller.js` 启动初始化阶段增加一次性判定:结合 `browser.storage.session` 的本次浏览器会话标记与持久化的扩展 `origin`,区分“插件安装/重载”与“浏览器普通启动 / controller 页面重开”。
116 - 仅在判定为安装或重载时,延迟 `2500ms` 查询 Claude / ChatGPT / Gemini 已打开标签页,并只刷新非 `#baa-shell` 的业务页面。
117 - 为跳过、无需刷新、逐 tab 刷新成功 / 失败都增加日志,日志包含平台、tab ID、URL 和来源。
118- 跑了哪些测试:
119 - `node --check plugins/baa-firefox/controller.js`
120
121### 执行过程中遇到的问题
122
123> 记录执行过程中遇到的阻塞、环境问题、临时绕过方案等。合并时由合并者判断是否需要修复或建新任务。
124
125- 未发现阻塞问题。
126
127### 剩余风险
128
129- 该实现依赖 Firefox 扩展侧 `browser.storage.session` 与持久化的扩展 `origin` 来区分“插件重载”和“浏览器重启”。如果未来 Firefox 在这两处行为上发生变化,可能需要调整判定逻辑。