Files
AirCoding/docs/implementation-plan.md
airlongdian af3016fe27 feat(aircoding): AirCoding V2 baseline — deterministic multi-agent architecture
Forked from OpenCode v1.17.4 with multi-agent system:
- 5 agents: aircoding, scheduler, worker, architect, reviewer
- Deterministic DAG scheduling engine (coordinator_tick)
- Tool whitelists as hard enforcement
- AirCoding validation plugin
- System prompt injection for routing
- V1 requirements: C4 docs, ADR, AGENTS.md, debug-log.md
- Design documents in docs/
2026-06-13 21:41:54 +08:00

248 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AirCoding 实现计划
> **版本**: 2.0
> **日期**: 2026-06-12
> **基线**: OpenCode v1.17.4 (commit abda3515)
> **参考**: aircoding-architecture-mvp.md (完整架构设计)、reference/airplan-v2 (可复用 prompt)
---
## 1. 最终方案4 Agent + 4 文件
```
Main Agent对话 + 意图分类 + 架构规划)
├── Scheduler Agent任务拆解 + 派发 + 监控 + 状态落盘)
│ └── Worker AgentEXECUTE / DEBUG 双模式,通过 shell 调用 cmake/ctest/cppcheck 等)
└── Architecture Designer架构规划 + 里程碑审查 fork
```
C++ 工具链不单独封装为 Plugin——Worker 直接通过 OpenCode 已有的 `shell` 工具调用命令行。
取证工具(截图/抓包同理Worker 直接通过 `shell` 调用 ffmpeg/tcpdump。
---
## 2. 文件清单
| # | 文件 | 内容 | 类型 |
|---|------|------|------|
| 1 | `agents/scheduler.json` | Scheduler agent 配置 + system prompt | JSON + prompt |
| 2 | `agents/worker.json` | Worker agent 配置 + 双模式 system prompt | JSON + prompt |
| 3 | `agents/architect.json` | Arc agent 配置 + system prompt含审查 fork | JSON + prompt |
| 4 | `.opencode/tool/coordinator.ts` | listen / dispatch / status 三个调度工具 | TypeScript |
运行时自动生成:`.air/local/state/scheduler-state.json`(调度器状态落盘)
---
## 3. 可复用的 AirPlan V2 资源
| AirCoding Agent | V2 对应 | 可复用文件 |
|----------------|---------|-----------|
| Scheduler | AirEng | `reference/airplan-v2/commands/eng.md` — 调度逻辑、轮询规则、自主决策指令 |
| Worker (EXECUTE) | AirDo | `reference/airplan-v2/commands/do.md` — 执行行为、验收标准 |
| Worker (DEBUG) | AirDbg | `reference/airplan-v2/commands/dbg.md` — 调试工作流、先取证后修复规则 |
| Architecture Designer | AirArc | `reference/airplan-v2/commands/arc.md` — 架构规划、需求探讨、审查指令 |
| 审查 fork | AirRvr | `reference/airplan-v2/commands/rvr.md` — Code-to-Design 审查、高风险审计 |
**复用方式**:将 V2 命令文件中的关键指令提取、适配后写入对应 Agent 的 system prompt。不是原封不动复制而是提取核心约束规则去掉 V2 特有的 Python runtime 部分。
---
## 4. 各文件实现细节
### 4.1 `agents/scheduler.json`
```json
{
"id": "scheduler",
"name": "Scheduler",
"description": "任务调度引擎,负责任务拆解、派发、监控和结果汇总",
"mode": "subagent",
"model": { "primary": "claude-sonnet-4-20250514" },
"tools": [
"read", "glob", "grep",
"coordinator.listen", "coordinator.dispatch", "coordinator.status",
"task"
],
"steps": 200,
"system_prompt_file": "agents/prompts/scheduler.md"
}
```
**system prompt 核心指令**(从 `eng.md` 提取):
- 语言锁定中文
- 自主决策原则(不询问用户,除非修复预算耗尽/需求歧义/资源耗尽)
- 不写代码(工具白名单已硬阻断)
- 任务拆解策略(按模块拆分、按依赖排序)
- 流程规则Worker 完成 → 下一个任务 / 失败 → 重新派发调试)
- 状态落盘要求(每次状态变更写 scheduler-state.json
- 10 分钟不活跃自动巡检
### 4.2 `agents/worker.json`
```json
{
"id": "worker",
"name": "Worker",
"description": "执行器/调试器双模式 Worker",
"mode": "subagent",
"model": { "primary": "claude-sonnet-4-20250514" },
"tools": [
"read", "write", "edit", "shell", "glob", "grep"
],
"steps": 100,
"system_prompt_file": "agents/prompts/worker.md"
}
```
**system prompt 核心指令**(从 `do.md` + `dbg.md` 提取):
```markdown
## EXECUTE 模式task.type = "execute"
- 按 acceptance_criteria 实现功能
- 先读后改,小步编辑
- 通过 shell 执行 cmake --build 和 ctest 验证
- **每次任务完成前必须通过 shell 运行 cppcheck --enable=all不可跳过**
- 编译通过 + 测试通过 + cppcheck 无严重问题 = 完成
- 不修改 scope.denied_paths 中的文件
- 完成后输出结构化结果(必须包含 cppcheck 输出)
- **Scheduler 校验WorkerResult 中无 cppcheck 输出则拒绝,要求补跑**
## DEBUG 模式task.type = "debug"
- 先取证后修改(不可违反)
- 必须至少通过 shell 执行一种取证命令:
· GUI 问题 → ffmpeg -f kmsgrab 截图
· 网络问题 → tcpdump 抓包
· C++ 问题 → cppcheck 静态分析
· 通用 → 代码追踪 + 日志分析
- 取证结果记录后才能开始修改代码
- 修复后必须重新编译 + 测试验证
- 修复失败不超过 retry_budget 次
```
### 4.3 `agents/architect.json`
```json
{
"id": "architect",
"name": "Architecture Designer",
"description": "架构规划器,负责需求分析、架构设计和里程碑审查",
"mode": "subagent",
"model": { "primary": "claude-sonnet-4-20250514" },
"tools": ["read", "glob", "grep", "task"],
"steps": 100,
"system_prompt_file": "agents/prompts/architect.md"
}
```
**system prompt 核心指令**(从 `arc.md` + `rvr.md` 提取):
- 纯规划器,禁止写代码(工具白名单硬阻断)
- 三阶段流程:探讨 → 确认 → 生成计划
- 任务描述规范(避免歧义词、包含保留约束)
- 里程碑审查fork 只读子 session 做 Code-to-Design 审查
- 审查结果精简后返回 Scheduler
### 4.4 `.opencode/tool/coordinator.ts`
三个工具的实现要点:
**coordinator.listen**
- 订阅 OpenCode EventV2 事件总线
- 等待匹配的子代理事件task.completed / task.failed / task.progress
- 超时返回 timeout 状态(触发 Scheduler 巡检)
- 每次调用时检查 last_activity → 超过 10 分钟自动巡检
**coordinator.dispatch**
- 接收任务列表
- 为每个任务创建 OpenCode BackgroundJob非阻塞子 session
- 返回 jobId 列表
- 更新 scheduler-state.json
**coordinator.status**
- 查询所有活跃 BackgroundJob 的状态
- 返回 [{ jobId, taskId, agentType, status, lastHeartbeat }]
- 检测卡死任务(心跳超时 / 硬超时)
**关键技术点**:需要研究 OpenCode 的以下 API
- `packages/opencode/src/background/job.ts` — BackgroundJob 的 start/wait/cancel
- `packages/core/src/event.ts` — EventV2 的 subscribe/listen
- `packages/opencode/src/tool/task.ts` — TaskTool 的子 session 创建
---
## 5. 实现顺序
### Step 1: 环境搭建 + 读 API0.5 天)
- 确认 Bun 环境可用
- 读懂 OpenCode Plugin 工具注册机制(`registry.ts` + `.opencode/tool/`
- 读懂 BackgroundJob API`packages/opencode/src/background/job.ts`
- 读懂 EventV2 API`packages/core/src/event.ts`
### Step 2: 调度工具1-2 天)
- 实现 `coordinator.ts`listen + dispatch + status
- 这是唯一的自定义代码,需要吃透 OpenCode 内部 API
- 验证子 session 创建和事件订阅可用
### Step 3: Agent 配置 + Prompt1 天)
-`scheduler.json` + system prompt从 eng.md 提取)
-`worker.json` + system prompt从 do.md + dbg.md 提取)
-`architect.json` + system prompt从 arc.md + rvr.md 提取)
### Step 4: 端到端测试0.5-1 天)
- 准备一个简单 C++ 项目
- 测试完整流程:用户提需求 → Main Agent → Scheduler 拆解 → Worker 执行 → 结果汇总
- 修复发现的问题
**总计3-5 天**
---
## 6. 已知风险和对策
| 风险 | 对策 |
|------|------|
| OpenCode Plugin API 不够用 | 读源码确认,必要时做最小修改 |
| BackgroundJob 不支持非阻塞派发 | 用 OpenCode 的 `task` 工具 + `background: true` 参数 |
| EventV2 事件格式不符合预期 | 在 coordinator.listen 中做适配层 |
| System prompt 不够稳定 | 从 V2 提取已验证的指令,反复测试调优 |
| 上下文窗口不够 | 简化 promptWorker 只传必要上下文 |
---
## 7. 后续迭代路线(当前不做)
1. C++ 工具链 Plugincpp.build/test/analyze/diagnose— Worker 目前直接用 shell
2. 取证工具 Pluginevidence.screenshot/pcap— Worker 目前直接用 shell
3. 独立 Reviewer Agent
4. 证据门控策略10 种任务类型 × 证据表)
5. 动态 DAG 调度算法(增量重规划)
6. ContextAssembler按需抽取上下文
7. 上下文压缩Copy-on-Write
8. ExperienceMiner + Debug Knowledge
9. HUD / Status Layer
10. 多语言 toolchainPython/Rust/JS
11. 二进制分发
---
## 8. 核心设计决策速查
| 决策 | 结论 |
|------|------|
| 基线 | OpenCode v1.17.4 |
| 进程模型 | 单进程(子代理 = 子 session |
| C++ 工具链 | Worker 直接用 shell 调用(不封装 Plugin |
| Scheduler | 独立 Agent事件驱动 |
| 防卡死 | 10 分钟不活跃定时器 + 状态落盘 |
| LLM 策略 | 混合:正常流程确定性代码,异常走 LLM |
| 接口契约 | 中等粒度 + stability 标记 |
| 审查 | 两层Worker 自验 + Arc 里程碑审查 fork |
| 上下文共享 | 共享文件 + ContextPack + WorkerResult |
| Worker 模式 | EXECUTE + DEBUG 双模式合一 |