Files
AirCoding/docs/meeting-notes-20260613.md
airlongdian deaf7eb806 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
- V1 requirements: C4 docs, ADR, AGENTS.md, debug-log.md
- Design documents in docs/
2026-06-13 21:53:43 +08:00

269 lines
10 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 会议记录与当前状态
> 日期2026-06-13
> 状态:架构已确定,实现进行中,需要补全各层代码级保证和协作 prompt
---
## 一、核心架构决策(已确定)
### 1.1 总体架构
```
用户 ↔ Main Agent客服/乙方代表,用户唯一交互入口)
└── Scheduler核心枢纽事件路由器
├── Architect按需咨询/里程碑审查)
│ └── fork → Reviewer审查时临时创建审查完销毁
├── Executor Worker写代码、编译、测试
├── Debugger Worker证据收集、问题定位、修复
└── 读写 .air/shared/ 共享文件
```
- **Main Agent = 客服角色**:面向用户,理解意图,传达需求,汇报进度,处理变更,不做技术活
- **Scheduler = 项目经理**:拆解任务,派发 Worker监控进度协调资源不写代码
- **Architect = 技术总监**:需求分析,架构设计,里程碑审查,常驻提供咨询
- **Worker = 工程师**EXECUTE + DEBUG 双模式,写代码/编译/测试/调试
### 1.2 通信模型
- **EventV2 事件总线** + **coordinator 工具**listen/dispatch/status
- 子 agent 完成 → EventV2 广播 → Scheduler 收到 → 按规则派发下一个
- **共享文件**`.air/shared/`+ **ContextPack**(派发时传递上下文引用)
- **不是 agent 之间直接对话**,而是通过事件 + Scheduler 路由
### 1.3 三条通信路径
1. **Scheduler → Architect**:重规划/异常咨询Arc 读图 → 输出 PlanDelta
2. **Scheduler → Reviewer**Code-to-Design 对照审查,审查报告写入 WorkerResult
3. **Scheduler → Architectconsult**Scheduler 无法决策时求助
### 1.4 流程规则Scheduler 状态机)
```
Executor 完成 → 自动触发 Reviewer逐任务审查
Reviewer 通过 → 标记任务完成
build/test 失败 → 自动触发 Debugger
Reviewer 发现问题 → 重新派发 Executor 修复
阶段内所有任务完成 → 自动触发 Architect里程碑审查
里程碑审查通过 → 进入下一阶段
里程碑审查发现问题 → Architect 生成修复任务 → Scheduler 派发
需求变更 → 触发动态 DAG 调度算法
Scheduler 异常无法决策 → 派发 Architect咨询
所有任务完成 → 汇总结果返回 Main Agent
```
### 1.5 核心设计约束
- **单进程模型**:子代理 = OpenCode 子 sessionTaskTool + BackgroundJob
- **代码级硬阻断**:工具白名单是硬阻断不是建议
- **LLM 混合策略**:正常调度走确定性代码,异常/边界才调 LLM
- **防卡死**10 分钟不活跃定时器 + scheduler-state.json 实时落盘
- **cppcheck 强制**:每次任务完成前必须运行,无输出不允许标记完成
- **证据门控**:按任务类型决定必需证据
- **两层审查**Worker 自验 + Architect 里程碑审查 fork
### 1.6 基线
- **Fork OpenCode v1.17.4**commit abda3515
- TypeScript + Bun单进程Effect v4 beta
- 不封装 C++ 工具链 PluginWorker 直接用 shell 调用 cmake/ctest/cppcheck
---
## 二、当前实现状态
### 2.1 已完成的文件
| 文件 | 位置 | 状态 |
|------|------|------|
| coordinator.ts | workspace/.../src/tool/coordinator.ts | ✅ 已写入,类型检查通过 |
| registry.ts | workspace/.../src/tool/registry.ts | ✅ 已修改(+4 工具注册) |
| agent.ts | workspace/.../src/agent/agent.ts | ⚠️ 已回退,需要重新修改 |
| scheduler.txt | workspace/.../src/agent/prompt/scheduler.txt | ✅ 已写入,但缺少协作指令 |
| worker.txt | workspace/.../src/agent/prompt/worker.txt | ✅ 已写入,但缺少协作指令 |
| architect.txt | workspace/.../src/agent/prompt/architect.txt | ✅ 已写入,但缺少协作指令 |
| AGENTS.md | E:\WorkSpace\AirCodingCli\AGENTS.md | ✅ 已写入 |
| opencode.json | E:\WorkSpace\AirCodingCli\opencode.json | ✅ 已创建 |
| bun install | workspace | ✅ 成功(需要设置 WindowsSdkDir 环境变量) |
| bun typecheck | workspace | ✅ 通过 |
### 2.2 启动方式
```bash
cd E:\WorkSpace\AirCodingCli\workspace
export WindowsSdkDir="D:/Dev/IDE/VS/VSIDE/Windows Kits/10/"
export VCToolsInstallDir="D:/Dev/IDE/VS/VSIDE/VC/Tools/MSVC/14.50.35717/"
export OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true
bun dev
```
或运行 `workspace\start.bat` / `workspace\start.sh`
### 2.3 测试结果
- TUI 正常渲染 ✅
- 只能看到 build 和 plan 两个 agent ❌scheduler/worker/architect 未注册)
- Main Agent 不会自动派发 Scheduler ❌
- 各 Agent 之间无法协作 ❌
---
## 三、待解决的问题(按优先级)
### 3.1 每层都需要 A代码级保证+ B协作 Prompt
**这是用户反复强调的核心要求。不能只靠 prompt也不能只有代码没有 prompt。**
| Agent | A代码级保证需要改 OpenCode 源码) | B协作 Prompt需要补全 |
|-------|-------------------------------------|--------------------------|
| **Main Agent** | prompt.ts 强制转发给 Scheduler代码路由 | 怎么汇报结果、转达变更、与用户沟通 |
| **Scheduler** | 代码保证只能通过 task 工具派发 Worker/Architect | 怎么拆任务、怎么用 coordinator 工具、怎么读写 task-graph、怎么和 Architect 协作 |
| **Architect** | 工具白名单已有(只读) | 怎么写 task-graph.json、怎么 fork Reviewer、审查结果发给谁 |
| **Worker** | Scheduler 校验 WorkerResult 包含 cppcheck 输出 | 怎么汇报结果WorkerResult 格式、EXECUTE/DEBUG 模式切换、结果返回给谁 |
### 3.2 每个 Agent 需要知道的协作信息
```
我是谁 → 我的角色和约束
我的上游是谁 → 谁派发了我,结果返回给谁
我的下游是谁 → 我能派发谁,用什么工具
通信协议 → 共享文件在哪、结果格式是什么、事件怎么收
```
### 3.3 具体改动清单
#### 改动 1agent.ts — 注册 3 个自定义 Agent
```typescript
// 在 agents 对象中添加:
scheduler: {
name: "scheduler",
description: "AirCoding 调度引擎",
mode: "subagent", // 不是 primary由 Main Agent 派发
native: true,
steps: 200,
prompt: PROMPT_SCHEDULER,
permission: Permission.merge(defaults, Permission.fromConfig({
edit: "deny", write: "deny", todowrite: "deny", task: "allow",
}), user),
},
worker: { ... mode: "subagent", prompt: PROMPT_WORKER, ... },
architect: { ... mode: "subagent", prompt: PROMPT_ARCHITECT,
permission: { "*": "deny", read: "allow", glob: "allow", grep: "allow", task: "allow" }
},
```
#### 改动 2build agent 加 prompt — Main Agent 编排逻辑
```typescript
build: {
name: "build",
prompt: PROMPT_AIRCODING_MAIN, // ← 新增
mode: "primary",
...
}
```
PROMPT_AIRCODING_MAIN 内容:
- 你是 AirCoding 主代理,面向用户的唯一交互入口
- 你不直接执行复杂任务,通过 task 工具派发 scheduler
- 始终设置 background: true
- 子代理完成后自动通知你,你负责向用户汇报
#### 改动 3prompt.ts — 代码级路由(可选但推荐)
在主循环中插入确定性路由,强制将复杂任务转发给 Scheduler
```typescript
// 在 runLoop 中LLM 调用之前
// 如果当前 agent 是 build且用户消息不是简单问答
// → 确定性派发 scheduler不经过 LLM 判断)
```
#### 改动 4各 Agent prompt 补全协作指令
每个 prompt 需要补充:
- 上游/下游是谁
- 用什么工具通信task, coordinator.listen, coordinator.status
- 共享文件路径和格式task-graph.json, review-result.json
- 结果格式WorkerResult 结构)
---
## 四、设计文档索引
| 文档 | 路径 | 内容 |
|------|------|------|
| 架构设计 | aircoding-architecture-mvp.md | 完整架构16 章7 项已确定决策) |
| 实现计划 | implementation-plan.md | 实现步骤 v2.0 |
| 集成指南 | INTEGRATION.md | 如何集成到 OpenCode fork |
| AI 编码指南 | AGENTS.md | 代码风格 + Agent 约束 |
| V1 痛点 | airplanV2-Qwen3.7-Max设计.md | 25 个 P0/P1 缺陷及 V2 方案 |
| 原始愿景 | idea.md | 完整系统设计(参考用) |
| V1 基线 | baselineV1.md | 早期基线设计(参考用) |
---
## 五、环境配置
```bash
# Bun 版本
bun 1.3.14
# 必需环境变量
WindowsSdkDir=D:\Dev\IDE\VS\VSIDE\Windows Kits\10\
VCToolsInstallDir=D:\Dev\IDE\VS\VSIDE\VC\Tools\MSVC\14.50.35717\
OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true
# 项目结构
E:\WorkSpace\AirCodingCli\
├── workspace/ # OpenCode v1.17.4 fork工作目录
├── reference/opencode/ # OpenCode v1.17.4 原始参考
├── reference/airplan-v2/ # V2 插件 prompt 参考
├── src/ # AirCoding 自有源码coordinator.ts, prompts
└── *.md # 设计文档
```
---
## 六、关键代码参考
### coordinator.ts 已实现的 4 个工具
1. `coordinator_listen` — 等待后台 Worker 完成,返回结果
2. `coordinator_status` — 查询所有后台 Worker 状态
3. `coordinator_save_state` — 保存调度状态到 scheduler-state.json
4. `coordinator_load_state` — 从 scheduler-state.json 恢复状态
### TaskTool 关键 APIOpenCode 已有)
```typescript
// 派发子代理(前台/后台)
task({
description: "任务描述",
prompt: "详细任务指令",
subagent_type: "scheduler", // 或 "worker", "architect"
background: true, // 后台运行
task_id: "复用已有session的ID" // 可选,复用持久 session
})
```
### 共享文件结构
```
.air/shared/
├── plan/
│ ├── plan.md # 架构方案
│ ├── task-graph.json # 任务图source of truth
│ ├── requirements.md # 原始需求
│ └── docs/ADR-*.md # 架构决策记录
└── rules/
├── project-rules.md
└── toolchain-rules.md
.air/local/
├── state/
│ └── scheduler-state.json # 调度器实时状态
└── sessions/
```