Files
AirCoding/docs/implementation-plan.md
airlongdian e2fd375a1c feat: 品牌替换 + 启动优化 + AGENTS.md 模板定制
- 品牌替换:OpenCode/opencode → AirCoding/aircoding(16+ 文件)
- Logo ASCII art:修复 left/right 行数不匹配导致的启动崩溃
- 启动诊断:添加 OPENCODE_PRINT_TIMING 计时探针
- dev 模式默认 --pure 跳过外部插件加载
- AGENTS.md 模板:追加 AirCoding 多 Agent 专项段落
- architect prompt + plugin:强化 AGENTS.md 产出验证
2026-06-14 09:31:29 +08:00

8.9 KiB
Raw Blame History

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

{
  "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

{
  "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 提取):

## 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

{
  "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 APIpackages/opencode/src/background/job.ts
  • 读懂 EventV2 APIpackages/core/src/event.ts

Step 2: 调度工具1-2 天)

  • 实现 coordinator.tslisten + 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 双模式合一