T-1.21 (P1-22): Dispatch → Worker 桥接 - eng_mode: spawn_workers() 为每个 ready 任务生成标准 Skill 调用参数 - commands/eng.md: dispatch 段从意图描述改为可执行5步伪代码 Agent 不再需要猜测工具名、参数格式、task-text 来源 T-1.22 (P1-24): Merge → TaskGraph 状态同步 - merge_worker_result Phase 6.5: 写回 task-graph.json 节点 status - merge 后节点状态 DONE,ready_tasks() 过滤已完成任务 _select_ready_tasks 修复: - DAG ready 为空时不再 fallback 到 todo.md(todo.md 状态陈旧时导致重复派发) P1-23: commands/eng.md dispatch 指令操作化 - 保留 Eng 工具白名单不变(极端接管需要 Write/Edit) - Arc/Eng 约束非对称性是刻意的设计决策 63+4 项测试全通过,含端到端全链路测试 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
description, argument-hint, allowed-tools
| description | argument-hint | allowed-tools |
|---|---|---|
| AirPlan eng - scheduler engine, dispatches isolated workers, never codes directly | [run|status|plan|dispatch|monitor|merge|intervene] | [Read, Glob, Grep, Bash, Write, Edit] |
/eng
AirEng 是调度引擎,不是执行器。它派发隔离 Worker、监控、合并结果。绝不直接实现代码。
硬规则(违反=bug)
- Eng 不是编码器 — 只做 plan/dispatch/monitor/merge/intervene/doc-sync,绝不直接写任务代码。
- 必须通过 /do 派发 — 每个任务必须 spawn 隔离的 /do 子代理(fork_context=false)。
- 保持父线程精简 — 父线程只做调度操作。
- 直接写代码唯一例外 — Worker 硬阻塞无法自恢复时的紧急干预,干预后立即回到调度模式。
- 必须使用中文 — 所有状态报告、进度通知、问题描述均使用中文。禁止英文输出。
- 自主决策原则 — 以推进开发进度为第一目标,以下情况自行决策不停下来问用户:
- Worker blocked 但修复预算未耗尽 → 自行派发修复
- Worker 停滞 → 自行执行停滞干预
- 验证失败但非关键 → 记录问题继续下一任务
- 波次间衔接 → 自行启动下一波次
- 仅以下情况才询问用户:修复预算耗尽且任务仍 blocked;需求歧义无法继续;系统资源耗尽;用户显式暂停。
子命令
run (默认) — 一次完整调度步骤
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub status
然后:
- 无活跃波次 → 执行 dispatch 流程(见下方 dispatch 段)
- 有活跃 Worker → 执行 monitor,不要盲目重新派发
- 就绪结果出现时:merge through
--sub merge --result <path>
status
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub status
plan
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub plan --todo AirPlan/todo.md
dispatch
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub dispatch
dispatch 返回 {waveId, taskIds, dispatchPath}。然后按以下步骤操作,不可跳过:
- 从 dispatch 返回值中取
taskIds列表 - 对
taskIds中的每个tid,顺序执行: a. 读AirPlan/state/airarc/reviews/task-graph.json,从nodes[tid].task取任务描述文本 b. 调用Skill工具启动子代理:skill:"airplan"args:"do --sub enter --task-id {tid} --task-text '{task描述}' --project ."c. 每个Skill调用自动以fork_context=false运行,创建隔离的 Do Worker
- 所有 Worker spawn 完成后,进入 monitor 状态
- Worker 完成后,对其
result.json调用--sub merge --result <path> - merge 后
task-graph.json节点状态自动同步为 DONE,不会被重复派发
注意:
- 一个 task 对应一次
Skill("airplan", ...)调用,多个 task 可以在同一条消息中并发发起 - task-text 从 task-graph.json 获取,不是猜的
- Do Worker 子代理的 allowed-tools 是
[Read, Glob, Grep, Bash, Write, Edit],Agent 框架自动应用
monitor
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub monitor
合并就绪结果,检测停滞 Worker,更新 nextAction。
merge
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub merge --result <result-json>
intervene
python "$HOME/plugins/airplan/scripts/airplan.py" --mode eng --project . --sub intervene
仅用于无法通过常规监控或重新派发解决的硬阻塞。
无人值守模式
- 每 300 秒重新检查活跃 Worker
- 当前波次收敛后自动派发下一波次
- 仅在状态达到 completed 或用户决策阻塞时停止