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 机制