baa-conductor


baa-conductor / tasks / archive
im_wower  ·  2026-03-28

T-S037.md

  1# Task T-S037:恢复 AI 页面右下角控制浮层,并支持页面级暂停 BAA 控制
  2
  3> 已完成并归档:`2026-03-28`
  4
  5## 直接给对话的提示词
  6
  7`/Users/george/code/baa-conductor/tasks/archive/T-S037.md` 任务文档,查看已完成任务记录。
  8
  9如需补背景,再读:
 10
 11- `/Users/george/code/baa-conductor/plugins/baa-firefox/README.md`
 12- `/Users/george/code/baa-conductor/tasks/TASK_OVERVIEW.md`
 13- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
 14
 15## 当前基线
 16
 17- 仓库:`/Users/george/code/baa-conductor`
 18- 分支基线:`main`
 19- 提交:`7dc34ad`
 20- 开工要求:必须先从当前 `main` 新建任务分支,再开始开发;禁止直接在 `main` 上修改。功能任务分支名必须以 `feat/` 开头,缺陷任务分支名必须以 `bug/` 开头。
 21- 开发隔离要求:必须使用新的 `git worktree` 开发本任务,禁止直接在当前正在使用的插件工作目录里修改并 reload 扩展,避免影响当前稳定可用的 Firefox 插件。
 22
 23## 必须创建的新分支名
 24
 25- `feat/page-level-baa-control-overlay`
 26
 27## 推荐 worktree
 28
 29- 建议新建:`/Users/george/code/baa-conductor-ts037`
 30- 建议命令:`git worktree add ../baa-conductor-ts037 -b feat/page-level-baa-control-overlay main`
 31
 32## 目标
 33
 34把 AI 网页右下角的控制浮层正式恢复回来,并支持“仅暂停当前页面 / 当前对话的 BAA 控制”,避免死循环时只能做全局暂停。
 35
 36## 背景
 37
 38当前仓库已经补了一个临时止损方案:在支持的 AI 网页右下角注入全局 `pause / resume / drain` 浮层。但这只是全局控制,不是用户真正需要的“只暂停当前页面 / 当前对话”。
 39
 40现状问题:
 41
 42- 当前页面没有正式的页面级 BAA 控制开关
 43- 一旦出现循环,用户只能全局 `pause`
 44- `browser.final_message` 和 delivery 仍然按平台主链工作,无法只对某一个页面停用
 45
 46这张卡的目标不是继续扩大全局控制,而是把页面级 stop switch 正式落地。
 47
 48## 涉及仓库
 49
 50- `/Users/george/code/baa-conductor`
 51
 52## 范围
 53
 54- 恢复 AI 页面右下角控制浮层为正式能力,而不是临时 stopgap
 55- 增加页面级 / tab 级 BAA 暂停状态
 56- 让被暂停页面不再继续参与 `browser.final_message` 上报和 delivery 回写
 57- 补最小自动化回归
 58
 59## 路径约束
 60
 61优先在 Firefox 插件运行时层完成,不要把这张卡扩成完整多页面会话框架重构。只有在确实需要 conductor 读面暴露时,才最小改动 `apps/conductor-daemon/src/` 62
 63## 推荐实现边界
 64
 65建议优先做:
 66
 67- 页面浮层状态以 `tabId + platform` 为主键;如果页面里已经能稳定取到 `conversationId`,可以作为补充字段保留
 68- 页面级暂停后,至少阻断该页面的 `browser.final_message`
 69- 如果该页面被标记为暂停,delivery 也不要继续往该页面注入 / 发送
 70- 在 controller 或 `/v1/browser` 读面里保留最小可观察状态,便于排查“为什么这个页面没有继续执行”
 71
 72## 允许修改的目录
 73
 74- `/Users/george/code/baa-conductor/plugins/baa-firefox/content-script.js`
 75- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
 76- `/Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
 77- `/Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
 78- `/Users/george/code/baa-conductor/plugins/baa-firefox/background.js`
 79- `/Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
 80- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-ws.ts`
 81- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/browser-types.ts`
 82- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
 83
 84## 尽量不要修改
 85
 86- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
 87- `/Users/george/code/baa-conductor/plugins/baa-firefox/delivery-adapters.js`
 88- `/Users/george/code/baa-conductor/docs/`
 89
 90## 必须完成
 91
 92### 1. 恢复正式页面浮层
 93
 94- 在 Claude / ChatGPT / Gemini 页面右下角显示 BAA 控制浮层
 95- 浮层至少要能显示当前页面是否被暂停
 96- 不要再只依赖 `controller.html` 做控制入口
 97
 98### 2. 支持页面级暂停
 99
100- 用户可以只暂停当前页面 / 当前 tab 的 BAA 控制
101- 被暂停页面的 `browser.final_message` 不再继续上报给 conductor
102- 恢复后该页面能继续进入正常观察链
103
104### 3. 收口 delivery 行为
105
106- 被暂停页面不应继续接收自动 delivery 回写
107- 其他未暂停页面和全局控制语义不能被破坏
108- 临时全局浮层可以保留,但不能和页面级状态冲突
109
110### 4. 补回归
111
112- 覆盖页面级暂停后 `browser.final_message` 被抑制
113- 覆盖恢复后观察链重新生效
114- 覆盖现有全局 `pause / resume / drain` 语义不回归
115
116## 需要特别注意
117
118- 不要把这张卡扩成完整 conversation manager 或多 tab orchestration 重构
119- 不要破坏当前 shell tab、desired / actual / drift 语义
120- 不要回退已经修好的 Claude / ChatGPT / Gemini final-message 观察链
121- 页面级暂停和全局 `system pause` 要能区分,不能混成一个状态
122
123## 验收标准
124
125- 在支持的 AI 网页里能看到右下角 BAA 控制浮层
126- 用户可以只暂停当前页面,而不是只能全局暂停
127- 被暂停页面不会继续触发 `browser.final_message -> conductor -> delivery`
128- 恢复后该页面重新参与主链
129- 现有 browser smoke 通过
130
131## 推荐验证命令
132
133- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/content-script.js`
134- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`
135- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/page-interceptor.js`
136- `node --check /Users/george/code/baa-conductor/plugins/baa-firefox/final-message.js`
137- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
138- `git diff --check`
139
140## 交付要求
141
142完成后请说明:
143
144- 修改了哪些文件
145- 页面级暂停状态是怎么建模的
146- `browser.final_message` 和 delivery 各自如何尊重该状态
147- 跑了哪些测试
148- 还有哪些剩余风险