baa-conductor

git clone 

baa-conductor / tasks
codex@macbookpro  ·  2026-04-01

T-S061.md

  1# Task T-S061:浮层统一自动化控制
  2
  3## 状态
  4
  5- 当前状态:`已完成`
  6- 规模预估:`M`
  7- 依赖任务:`T-S060`
  8- 建议执行者:`Claude / Codex`(需要同时处理插件浮层、WS 同步和状态映射)
  9
 10## 直接给对话的提示词
 11
 12`/Users/george/code/baa-conductor/tasks/T-S061.md` 任务文档,完成开发任务。
 13
 14如需补背景,再读:
 15
 16- `/Users/george/code/baa-conductor/plans/UNIFIED_OVERLAY_AUTOMATION_CONTROL.md`
 17- `/Users/george/code/baa-conductor/plans/AUTOMATION_ARBITRATION_REQUIREMENTS.md`
 18- `/Users/george/code/baa-conductor/tasks/T-S060.md`
 19
 20## 当前基线
 21
 22- 仓库:`/Users/george/code/baa-conductor`
 23- 分支基线:`main`
 24- 提交:`64d122e`
 25
 26## 分支与 worktree(强制)
 27
 28- 分支名:`feat/unified-overlay-automation-control`
 29- worktree 路径:`/Users/george/code/baa-conductor-unified-overlay-automation-control`
 30
 31开工步骤:
 32
 331. `cd /Users/george/code/baa-conductor`
 342. `git worktree add ../baa-conductor-unified-overlay-automation-control -b feat/unified-overlay-automation-control main`
 353. `cd ../baa-conductor-unified-overlay-automation-control`
 364. 在这个 worktree 目录里开发,不要回到主仓库目录
 37
 38完成后提交与推送:
 39
 401. 在 worktree 里提交所有变更(包括更新后的任务文档)
 412. `git push -u origin feat/unified-overlay-automation-control`
 42
 43合并步骤(由合并者执行):
 44
 451. `cd /Users/george/code/baa-conductor`
 462. `git fetch origin`
 473. `git merge origin/feat/unified-overlay-automation-control`
 484. `git push`
 495. `git worktree remove ../baa-conductor-unified-overlay-automation-control`(如果 worktree 还在)
 50
 51合并冲突处理:
 52
 531. 如果 `git merge` 报冲突,先 `git diff` 查看冲突文件
 542. 手动解决冲突后 `git add` 冲突文件
 553. `git merge --continue` 完成合并
 564. 不要用 `git merge --abort` 然后 force 覆盖
 57
 58命名规则:
 59
 60- 功能任务分支名以 `feat/` 开头
 61- 缺陷任务分支名以 `bug/` 开头
 62
 63## 目标
 64
 65把页面右下角浮层升级成统一自动化控制入口,同时控制页面级 BAA 和 renewal,并展示 `pause_reason` 66
 67## 背景
 68
 69当前浮层只能控制页面级 BAA;renewal 的 `manual / auto / paused` 只能通过 API 操作。用户看不到两套状态之间的关系,也无法从一个入口暂停当前对话的全部自动化。
 70
 71## 涉及仓库
 72
 73- `/Users/george/code/baa-conductor`
 74
 75## 范围
 76
 77- 浮层展示系统状态和当前对话状态
 78- 页面级按钮同时作用于 BAA 与 renewal
 79- API / WS / 浮层状态保持同步
 80- `pause_reason` 在浮层上可见
 81
 82## 路径约束
 83
 84- 本任务只做页面/对话级统一控制
 85- 系统级暂停的后端行为和独立控制由 `T-S062` 处理
 86- 不改自动化仲裁核心规则;依赖 `T-S060`
 87
 88## 推荐实现边界
 89
 90建议优先做:
 91
 92- `plugins/baa-firefox/content-script.js`
 93- `plugins/baa-firefox/controller.js`
 94- `apps/conductor-daemon/src/firefox-ws.ts`
 95- `apps/conductor-daemon/src/local-api.ts`
 96
 97## 允许修改的目录
 98
 99- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
100- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-ws.ts`
101- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
102- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
103
104## 尽量不要修改
105
106- `/Users/george/code/baa-conductor/packages/artifact-db/`
107- `/Users/george/code/baa-conductor/apps/codexd/`
108
109## 必须完成
110
111### 1. 浮层统一显示
112
113- 浮层同时显示系统状态和当前对话状态
114- 当前对话如处于 `paused`,显示 `pause_reason`
115- 页面级状态与 renewal `automation_status` 一致
116
117### 2. 页面级统一控制
118
119- “暂停本页”同时暂停页面级 BAA 和 renewal
120- “恢复本页”只恢复当前对话,不解除系统级暂停
121- “设为手动”会让当前对话停止自动续命
122
123### 3. 状态同步
124
125- 浮层按钮 → conductor → renewal/page_control 双向生效
126- REST API 改状态后,浮层能实时刷新
127- 自动熔断后的 `pause_reason` 能同步到浮层
128
129## 需要特别注意
130
131- 系统级状态和页面级状态必须分层显示,不共用一个状态值
132- UI 可以统一入口,但不能把系统级和页面级恢复动作混在一起
133- 不要让“恢复本页”顺手解除系统暂停
134- 所有开发必须在 worktree 中进行,不要在主仓库目录修改代码
135
136## 验收标准
137
138- 浮层点击“暂停本页”后,BAA 和 renewal 同时暂停
139- 浮层点击“恢复本页”后,当前对话恢复,但系统级暂停保持不变
140- 自动熔断后,浮层能看到暂停原因
141- REST API 修改状态后,浮层实时反映
142
143## 推荐验证命令
144
145- `cd /Users/george/code/baa-conductor-unified-overlay-automation-control && pnpm -C apps/conductor-daemon test`
146- `cd /Users/george/code/baa-conductor-unified-overlay-automation-control && pnpm -C plugins/baa-firefox test`
147
148## 执行记录
149
150> 以下内容由执行任务的 AI 填写,创建任务时留空。
151
152### 开始执行
153
154- 执行者:`Codex`
155- 开始时间:`2026-04-01 11:31:00 CST`
156- 状态变更:`待开始` → `进行中`
157
158### 完成摘要
159
160- 完成时间:`2026-04-01 12:08:52 CST`
161- 状态变更:`进行中` → `已完成`
162- 修改了哪些文件:
163  - `plugins/baa-firefox/content-script.js`
164  - `plugins/baa-firefox/controller.js`
165  - `plugins/baa-firefox/controller.test.cjs`
166  - `apps/conductor-daemon/src/browser-types.ts`
167  - `apps/conductor-daemon/src/firefox-ws.ts`
168  - `apps/conductor-daemon/src/local-api.ts`
169  - `apps/conductor-daemon/src/index.test.js`
170  - `docs/api/business-interfaces.md`
171  - `docs/api/control-interfaces.md`
172  - `docs/api/firefox-local-ws.md`
173  - `tasks/T-S061.md`
174  - `tasks/TASK_OVERVIEW.md`
175- 核心实现思路:
176  - 把 Firefox 浮层从单一 `page paused` 布尔值升级成系统级 + 当前对话级分层展示,新增 `manual / auto / paused`、`local_conversation_id` 和 `pause_reason` 的本地状态映射,并把页面按钮拆成 `暂停本页` / `恢复本页` / `设为手动`
177  - controller 在当前对话已被 conductor 识别时,统一通过 `/v1/internal/automation/conversations/control` 驱动 renewal 自动化状态;如果对话还没有 local conversation,则继续只落本地 page_control,避免误把“恢复本页”升级成系统恢复
178  - conductor 的 Firefox WS `state_snapshot` 新增 `automation_conversations`,按 active link 暴露 `remote_conversation_id`、`automation_status`、`pause_reason` 和 `local_conversation_id`,让 REST 改状态、自动熔断和插件浮层都走同一份快照同步
179- 跑了哪些测试:
180  - `cd /Users/george/code/baa-conductor-unified-overlay-automation-control && pnpm install`
181  - `node --test /Users/george/code/baa-conductor-unified-overlay-automation-control/plugins/baa-firefox/controller.test.cjs`
182  - `cd /Users/george/code/baa-conductor-unified-overlay-automation-control && pnpm -C apps/conductor-daemon test`
183
184### 执行过程中遇到的问题
185
186- 新 worktree 初始没有 `node_modules`,`pnpm exec tsc` 会直接报 `tsc not found`;先在 worktree 根目录补了一次 `pnpm install`
187- Firefox WS 新增 `automation_conversations` 后,TypeScript 对 `map(...).filter(Boolean)` 的推断不够收敛;改成显式构造数组后恢复通过
188
189### 剩余风险
190
191- 浏览器侧 real-time 刷新目前依赖 Firefox WS 的 2 秒轮询快照;对外部 REST 改状态已经能自动同步到浮层,但如果后续要做“立即 push”级别的时效性,可能还需要单独事件通知通道