baa-conductor

git clone 

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

T-S062.md

  1# Task T-S062:系统级暂停接入自动化主链
  2
  3## 状态
  4
  5- 当前状态:`已完成`
  6- 规模预估:`M`
  7- 依赖任务:`T-S060`
  8- 建议执行者:`Codex`(以后端状态门控、timed-jobs 和控制接口为主)
  9
 10## 直接给对话的提示词
 11
 12`/Users/george/code/baa-conductor/tasks/T-S062.md` 任务文档,完成开发任务。
 13
 14如需补背景,再读:
 15
 16- `/Users/george/code/baa-conductor/plans/SYSTEM_LEVEL_PAUSE_REQUIREMENTS.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/system-level-automation-pause`
 29- worktree 路径:`/Users/george/code/baa-conductor-system-level-automation-pause`
 30
 31开工步骤:
 32
 331. `cd /Users/george/code/baa-conductor`
 342. `git worktree add ../baa-conductor-system-level-automation-pause -b feat/system-level-automation-pause main`
 353. `cd ../baa-conductor-system-level-automation-pause`
 364. 在这个 worktree 目录里开发,不要回到主仓库目录
 37
 38完成后提交与推送:
 39
 401. 在 worktree 里提交所有变更(包括更新后的任务文档)
 412. `git push -u origin feat/system-level-automation-pause`
 42
 43合并步骤(由合并者执行):
 44
 451. `cd /Users/george/code/baa-conductor`
 462. `git fetch origin`
 473. `git merge origin/feat/system-level-automation-pause`
 484. `git push`
 495. `git worktree remove ../baa-conductor-system-level-automation-pause`(如果 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把系统级 `running / paused / draining` 接入 BAA 指令处理和 timed-jobs 主链,形成真正的全局 automation gate。
 66
 67## 背景
 68
 69当前页面/对话级暂停已经存在,但 renewal 没有真正的系统级全局开关。需要一键暂停所有自动化,同时不改写各对话原有状态。
 70
 71## 涉及仓库
 72
 73- `/Users/george/code/baa-conductor`
 74
 75## 范围
 76
 77- 系统级 automation.mode 统一门控
 78- timed-jobs 在系统暂停时跳过 tick
 79- BAA 指令链路在系统暂停时阻断
 80- 最小 REST / WS / 浮层状态同步
 81
 82## 路径约束
 83
 84- 自动熔断仍属于页面/对话级暂停,本任务不替代 `T-S060`
 85- 不把系统级暂停和页面级状态合并
 86
 87## 推荐实现边界
 88
 89建议优先做:
 90
 91- `apps/conductor-daemon/src/timed-jobs/`
 92- `apps/conductor-daemon/src/instructions/`
 93- `apps/conductor-daemon/src/local-api.ts`
 94- `apps/conductor-daemon/src/firefox-ws.ts`
 95- `packages/db/`
 96
 97## 允许修改的目录
 98
 99- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/timed-jobs/`
100- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
101- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
102- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-ws.ts`
103- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
104- `/Users/george/code/baa-conductor/packages/db/`
105
106## 尽量不要修改
107
108- `/Users/george/code/baa-conductor/plugins/baa-firefox/`(除非确有必要补 system 状态展示)
109
110## 必须完成
111
112### 1. 系统级门控
113
114- 系统级 `paused` 时,BAA 指令和 renewal 都不执行
115- 系统级 `running` 时,恢复后按各对话原有状态继续
116- `system_pause` 不会覆盖各对话已有 `pause_reason`
117
118### 2. timed-jobs 集成
119
120- system paused 时,runner 不执行实际逻辑
121- timed-jobs 日志写出 `skipped_system_paused`
122
123### 3. 控制入口
124
125- 保留现有系统级控制按钮和接口
126- 如有必要,补最小系统级 pause/resume API
127- 后续 BAA 控制指令可挂到这套后端状态上
128
129## 需要特别注意
130
131- 系统恢复不会把 `manual``paused` 的对话自动改成 `auto`
132- 页面恢复不会把系统级 `paused` 改成 `running`
133- 所有开发必须在 worktree 中进行,不要在主仓库目录修改代码
134
135## 验收标准
136
137- 系统暂停后,BAA 指令和 renewal 同时停止
138- 系统恢复后,两者按各自状态恢复
139- timed-jobs 日志里有 `skipped_system_paused`
140- 系统暂停不覆盖对话级 `pause_reason`
141
142## 推荐验证命令
143
144- `cd /Users/george/code/baa-conductor-system-level-automation-pause && pnpm -C apps/conductor-daemon test`
145- `cd /Users/george/code/baa-conductor-system-level-automation-pause && pnpm -C packages/db test`
146
147## 执行记录
148
149> 以下内容由执行任务的 AI 填写,创建任务时留空。
150
151### 开始执行
152
153- 执行者:`Codex`
154- 开始时间:`2026-04-01 15:12:07 CST`
155- 状态变更:`待开始` → `进行中`
156
157### 完成摘要
158
159- 完成时间:`2026-04-01 15:57:43 CST`
160- 状态变更:`进行中` → `已完成`
161- 修改了哪些文件:
162  - `apps/conductor-daemon/src/instructions/types.ts`
163  - `apps/conductor-daemon/src/instructions/ingest.ts`
164  - `apps/conductor-daemon/src/instructions/loop.ts`
165  - `apps/conductor-daemon/src/timed-jobs/runtime.ts`
166  - `apps/conductor-daemon/src/index.ts`
167  - `apps/conductor-daemon/src/index.test.js`
168  - `docs/api/control-interfaces.md`
169  - `docs/api/firefox-local-ws.md`
170  - `tasks/T-S062.md`
171  - `tasks/TASK_OVERVIEW.md`
172- 核心实现思路:
173  -`BaaInstructionCenter` 接入系统级 `automation.mode` 读取,系统为 `paused` 时把普通 BAA 指令直接记为 `system_paused` 并阻断执行,同时保留 `@conductor::system/pause` / `resume` 这类显式控制指令的通路
174  -`ConductorRuntime` 的 timed-jobs 调度包装层先检查系统级 mode;命中 `paused` 时整批 tick 返回 `skipped_system_paused`,framework 和 runner JSONL 日志都会写出同名结果
175  - 补文档说明 `/v1/system/*` 的全局 gate 语义,以及 Firefox WS `instruction_ingest` 在系统暂停时的 `system_paused` 状态
176- 跑了哪些测试:
177  - `cd /Users/george/code/baa-conductor-system-level-automation-pause && pnpm install`
178  - `cd /Users/george/code/baa-conductor-system-level-automation-pause && pnpm -C apps/conductor-daemon test`
179  - `cd /Users/george/code/baa-conductor-system-level-automation-pause && pnpm -C packages/db test`
180
181### 执行过程中遇到的问题
182
183- 新建 worktree 初始缺少 `node_modules`,`pnpm exec tsc` 报 `Command "tsc" not found`;先在 worktree 根目录执行 `pnpm install` 后恢复正常
184
185### 剩余风险
186
187- 当前实现会阻断新的 BAA 指令执行和 timed-jobs tick,但不会强制中断已经在执行中的单次 browser proxy / host-op 请求;如果后续需要“立刻打断”语义,还要补 execution cancel 机制