| name | coding-agent |
| description | 设计驱动自动编码 - 读取圆桌会议设计文档,按任务拆解逐任务自动编码,直接写入项目文件。
触发关键词: 根据设计编码, 开始编码, 按设计实现, coding agent, 实现设计方案,
按圆桌会议编码, 从设计文档编码, 执行编码任务, start coding, implement design
|
🔧 Coding Agent - 设计驱动自动编码
读取圆桌会议产出的设计文档,解析任务拆解表,串行逐任务调用 subagent 编码,直接写入项目文件。
🎯 核心流程:发现设计文档 → 解析任务表 → 逐任务编码(subagent)→ HUMAN_CHECK 暂停点 → 完成报告
🔴 关键原则:
- 串行执行 — 用时间换质量,逐任务完成后再启动下一个
- 精准提取 — 用
CODING_IMPL + DESIGN_REVIEW 标记精准获取上下文,不读全文
- 不确定即分级标记 — 两级 HUMAN_CHECK 机制(见下方说明),避免频繁打断
- 直接写文件 — create_file / replace_string_in_file 直接操作项目源码
HUMAN_CHECK 分级机制:
// 🔴 HUMAN_CHECK_CRITICAL: <原因> — 影响功能正确性的不确定项(算法逻辑、数据结构选择、业务规则)→ 即时暂停,等用户确认后继续
// 🟡 HUMAN_CHECK_REVIEW: <原因> — 不影响功能正确性的待审查项(命名规范、注释补充、代码风格、可选优化)→ 不暂停,Step 3 统一汇总审查
- 旧格式
// 🔴 HUMAN_CHECK: 按 CRITICAL 处理(向后兼容)
🔴 设计文档来源
本 Skill 消费圆桌会议(#roundtable-debate)的产出文件:
{project}/.copilot-temp/roundtable-{NNN}/
├── 01-architecture.md # 架构派 → 接口定义、模块职责
├── 02-efficiency.md # 效率派 → 文件结构、复用分析
├── 03-quality.md # 质量派 → 异常处理、测试用例
├── 04-cost.md # 成本派 → 任务拆解表(CODING_TASK_LIST)
├── 05-implementation.md # 实施派 → 实现骨架(CODING_IMPL)、调用链
└── 06-design-review.md # 设计评审文档
核心消费的标记
| 标记 | 来源文件 | 用途 |
|---|
CODING_TASK_LIST | 04-cost.md | 解析任务条目+依赖+目标文件 |
CODING_IMPL:{taskId} | 05-implementation.md | 精准提取每个任务的实现骨架 |
DESIGN_REVIEW:2.3a/2.3b | 01/05 | 按需提取接口定义 |
DESIGN_REVIEW:1.3 | 02-efficiency.md | 按需提取文件结构 |
🔄 执行流程(4步)
┌─────────────────────────────────────────────────────────────┐
│ Step 0:发现与加载设计文档 │
├─────────────────────────────────────────────────────────────┤
│ 扫描 .copilot-temp/roundtable-* → 选择工作目录 │
│ 读取 05-implementation.md(全文 → 主上下文) │
│ 验证 04-cost.md + 05-implementation.md 存在 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Step 1:构建执行计划 │
├─────────────────────────────────────────────────────────────┤
│ 解析任务表 → 提取任务ID/描述/层级/目标文件/依赖/操作类型 │
│ 拓扑排序(按依赖列)→ 确定执行顺序 │
│ 🔴 展示执行计划给用户确认 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Step 2:逐任务串行编码(核心循环) │
├─────────────────────────────────────────────────────────────┤
│ 对每个任务(按拓扑序): │
│ ├── 2a. 收集精准上下文 │
│ │ ├── grep CODING_IMPL:{taskId} → 实现骨架 │
│ │ ├── grep DESIGN_REVIEW → 接口/数据结构(按需) │
│ │ ├── read_file(目标文件) → 现有代码(修改任务) │
│ │ └── read_file(expert skill) → 项目规范 │
│ ├── 2b. runSubagent 编码 │
│ │ ├── 新增文件 → create_file │
│ │ └── 修改文件 → 定位锚点 + replace_string_in_file │
│ └── 2c. 检查点 │
│ ├── 验证文件已写入 │
│ ├── grep HUMAN_CHECK_CRITICAL 计数 │
│ ├── 有CRITICAL → 暂停,展示给用户确认 │
│ ├── 仅REVIEW → 计数记录,自动继续下一任务 │
│ └── 无标记 → 自动继续下一任务 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Step 3:完成报告 │
├─────────────────────────────────────────────────────────────┤
│ 修改/新增的文件清单 + diff 摘要 │
│ CRITICAL 汇总 + REVIEW 统一审查表 │
│ 建议的验证命令(编译/测试) │
│ 任务完成率统计 │
└─────────────────────────────────────────────────────────────┘
📖 详细执行流程见 references/execution-flow.md
🔴 Step 0:发现设计文档(强制)
const tempDir = `${projectRoot}/.copilot-temp`;
const roundtables = list_dir(tempDir)
.filter(d => d.startsWith("roundtable-"))
.sort()
.reverse();
if (roundtables.length > 1) {
} else {
workDir = `${tempDir}/${roundtables[0]}`;
}
const required = ["04-cost.md", "05-implementation.md"];
for (const file of required) {
if (!exists(`${workDir}/${file}`)) {
}
}
const implContent = read_file(`${workDir}/05-implementation.md`);
🔴 Step 1:解析任务表 + 拓扑排序
const taskListStart = grep_search("CODING_TASK_LIST:START", {
includePattern: `${workDir}/04-cost.md`
});
const taskListEnd = grep_search("CODING_TASK_LIST:END", {
includePattern: `${workDir}/04-cost.md`
});
const taskTable = read_file(`${workDir}/04-cost.md`, startLine, endLine);
const tasks = parseMarkdownTable(taskTable);
const executionOrder = topologicalSort(tasks);
展示格式
📋 **编码执行计划**(共 X 个任务)
| 序号 | 任务ID | 描述 | 层级 | 操作 | 目标文件 | 依赖 |
|------|--------|------|------|------|----------|------|
| 1 | BE-01 | 实现xxx接口 | 应用BE | 新增 | src/.../IXxxService.cs | - |
| 2 | BE-02 | xxx平台层实现 | 平台BE | 新增 | src/.../XxxHelper.cpp | BE-01 |
| 3 | FE-01 | xxxViewModel | 应用FE | 修改 | src/.../XxxViewModel.cs | BE-01 |
⏱️ 预计总工时: Xh
📁 涉及文件: Y 个(新增 A + 修改 B)
> 展示执行计划表格后,使用 ask_questions 对话框让用户确认:
> - header: "编码确认"
> - question: "确认执行计划并开始编码?"
> - 选项A(推荐): "确认,开始编码"
> - 选项B: "需要调整计划" (allowFreeformInput: true)
🔴 Step 2:逐任务编码(核心)
📖 编码 subagent prompt 模板见 references/subagent-prompt.md
📖 已有文件修改策略见 references/modify-strategy.md
2a. 为每个任务收集精准上下文
对每个任务,按以下步骤收集上下文:
1. 精准提取该任务的实现骨架:用 grep_search("CODING_IMPL:{taskId}:START") 定位 05-implementation.md 中的标记区段,read_file 读取标记之间的内容。
2. 按需提取接口定义:
- C# 任务(层级含"FE"或"应用")→ 从
01-architecture.md 提取 DESIGN_REVIEW:2.3a 标记区段
- C++ 任务(层级含"平台"或"BE")→ 从
05-implementation.md 提取 DESIGN_REVIEW:2.3b 标记区段
3. 修改任务 → 读取目标文件现有代码:read_file(task.targetFile)
4. 提取质量/自测要求:从 03-quality.md 提取 DESIGN_REVIEW:4.1 标记区段
5. 读取相关 expert skill:根据目标文件路径推断模块名,读取对应的 expert skill
🔴 2a-6. 平台层源码(涉及平台组件时强制执行,不可跳过)
⚠️ 当任务层级含"平台",或任务描述含以下关键词时,此步骤为强制步骤:
DataLoad / DataSave / ROI / VOI / TissueControl / MaskData / Volume /
Layout / Cine / VRT / Palette / Density / SUV / DataLinkage / ImageTools>
上游短路:如 .copilot-temp/roundtable-*/context-check.md 已存在且含「平台源文件清单」,优先复用其中已读取的源码文件路径(直接 read_file),仅对未覆盖的接口做增量搜索。这避免了与 roundtable Step 5-7 的重复平台源码搜索。
6a. 从平台域专家 skill 提取搜索关键词
从步骤 5 读取的 {{PLATFORM_PREFIX}}-{领域}-expert skill 中,提取以下信息作为搜索关键词:
- 「核心接口速查」表中的接口名/类名(如
[你的平台接口名]、[你的平台接口名])
- **「关键数据类型」**中的类型名(如
ExportConfig、Structure)
- **「搜索策略」**中推荐的代码路径(如
DataSave/BE/)
🔴 不要在应用代码里搜 using/include 来提取类名 — using 只有命名空间,没有类名。
降级策略:Tier 1 skill接口速查表 → Tier 2 skill代码搜索建议 → Tier 3 PBI英文关键词
6b. 读取平台源码(本地优先 → MCP 降级)
路径A — 本地优先(工作区包含 {{PLATFORM_REPO}} 文件夹时):
grep_search("接口名", { includePattern: "**/{{PLATFORM_REPO}}/**" }) 定位文件
read_file("命中的头文件.h") + read_file("命中的实现文件.cpp")
路径B — MCP 降级(本地没有 {{PLATFORM_REPO}} 时):
mcp_azuredevops_search_code({ searchText: "接口名", filters: { Repository: ["{{PLATFORM_REPO}}"] } })
- 取前 3 个结果,
mcp_azuredevops_get_file_content({ repositoryId: "{{PLATFORM_REPO}}", path: "文件路径", versionType: "branch", version: "{{PLATFORM_BRANCH}}" })
6c. 验证检查点(硬阻断 — 不通过则禁止进入编码阶段)
确认至少读取了 1 个平台源文件(.h / .cpp / .cs)。
通过:将读取到的源码保存为 context.platformSource,文件路径写入 {workDir}/context-check.md(如工作目录存在该文件)。
未通过处理:
- 降级到下一 Tier 重试
- 全部 Tier 失败 且 MCP 不可用 → 标注「⚠️ 降级出口:未获取平台源码」,允许继续(降级通过)
- 🔴 MCP 可用但未搜索/未读取 → 禁止进入编码阶段,必须重新执行步骤 6b
将读取到的源码保存为 context.platformSource,后续注入到编码 subAgent prompt 中。
🔴 强制规则:搜索关键词从 expert skill「核心接口速查」提取,但最终必须读取平台完整源码(头文件+实现),
不能仅停留在 skill 文档描述或设计文档伪代码层面。参考 #platform-architecture 搜索策略。
2a-7. 读取运行时配置文件(涉及 FE↔BE 通信时执行)
⚠️ 当任务涉及新增/修改 Operation、Widget、Model 注册或 BE↔FE 消息路由时,此步骤为强制步骤。
7a. 自动发现配置文件路径
按以下优先级搜索:
- 标准路径:
file_search("**/appdata/*/config/[你的配置目录]/[配置文件]")
- 拆分路径:
file_search("**/BE/appdata/*/config/[你的配置目录]/[配置文件]")
- 均未找到 → 跳过,标注「⚠️ 未找到运行时配置文件」
7b. 读取与任务相关的配置文件
| 任务类型 | 必读配置 | 关注内容 |
|---|
| 新增/修改 Operation | [后端配置文件] | <Item> 条目中的 Operation 注册 |
| 修改 Operation 链 | BE/WorkflowController.xml | <OperationName> 链、线程模型 |
| 新增/修改 BE→FE 消息 | [前端命令配置] | <Handler> 条目(注意文件名拼写) |
| 新增 Widget/Model | [后端配置文件] | Widget/Model 注册条目 |
7c. 编码时同步修改配置文件
🔴 强制规则:如果任务需要新增 Operation/Widget/Model 注册或消息路由,编码 subAgent 必须同时修改对应的 XML 配置文件,并标记 // 🔴 HUMAN_CHECK: 新增 XML 配置条目,请确认注册信息正确。
将读取到的配置条目保存为 context.xmlConfig,后续注入到编码 subAgent prompt 中。
2b. runSubagent 编码
await runSubagent(`编码任务 ${task.id}: ${task.desc}`, `
${codingSubagentPrompt}
## 当前任务
${task.id}: ${task.desc}
操作类型: ${task.operation}
目标文件: ${task.targetFile}
语言: ${task.layer.includes("BE") && task.layer.includes("平台") ? "C++" : "C#"}
## 实现骨架
${context.skeleton}
## 接口定义
${context.interface || context.cppInterface}
## 目标文件现有代码
${context.existingCode || "(新增文件,无现有代码)"}
## 项目规范
${context.expertKnowledge}
${context.platformSource ? `
## 平台层源码参考
以下是涉及的平台层 API 完整源码,编码时必须以此为准:
${context.platformSource}
` : ''}
## 🔍 搜索指南(遇到未知信息时必须使用)
🔴 **强制规则**: 编码中遇到不认识的枚举/类型/方法签名,
必须先搜索确认,禁止凭记忆猜测。搜索后仍不确定才标记 HUMAN_CHECK。
可用工具:
1. grep_search("类名或枚举名") — 搜索本地工作区
2. read_file("路径") — 读取本地文件
3. mcp_azuredevops_search_code({ searchText: "类名", filters: { Repository: ["{{PLATFORM_REPO}}"] } }) — 搜索平台仓库
4. mcp_azuredevops_get_file_content({ repositoryId: "{{PLATFORM_REPO}}", path: "...", versionType: "branch", version: "{{PLATFORM_BRANCH}}" }) — 读取平台源码
搜索策略: 本地 grep_search 优先 → MCP search_code 降级
## 🔴 输出要求
直接 create_file / replace_string_in_file 写入项目文件。
不确定的地方先搜索,仍不确定按以下分级标记:
- 影响功能正确性(算法/业务逻辑/数据结构)→ // 🔴 HUMAN_CHECK_CRITICAL: <原因>
- 不影响正确性(命名/注释/风格/可选优化)→ // 🟡 HUMAN_CHECK_REVIEW: <原因>
`);
2c. 检查点
if (!globalEditFailures) globalEditFailures = {};
const key = task.targetFile;
const fileExists = exists(task.targetFile);
if (!fileExists) {
globalEditFailures[key] = (globalEditFailures[key] || 0) + 1;
if (globalEditFailures[key] >= 3) {
continue;
}
runSubagent(`重试 ${task.id}`, retryPrompt);
} else {
globalEditFailures[key] = 0;
}
const criticals = grep_search("HUMAN_CHECK_CRITICAL", { includePattern: task.targetFile });
const reviews = grep_search("HUMAN_CHECK_REVIEW", { includePattern: task.targetFile });
const legacyChecks = grep_search("HUMAN_CHECK:", { includePattern: task.targetFile })
.filter(m => !m.includes("CRITICAL") && !m.includes("REVIEW"));
const allCriticals = [...criticals, ...legacyChecks];
if (allCriticals.length > 0) {
} else if (reviews.length > 0) {
} else {
}
🔴 Step 3:完成报告
🔧 **编码完成报告**
### 任务执行结果
| 任务ID | 状态 | 目标文件 | CRITICAL | REVIEW |
|--------|------|----------|----------|--------|
| BE-01 | ✅ 完成 | src/.../IXxxService.cs | 0 | 0 |
| BE-02 | ✅ 完成 | src/.../XxxHelper.cpp | 1 | 2 |
| FE-01 | ✅ 完成 | src/.../XxxViewModel.cs | 0 | 1 |
### 📁 文件变更清单
- **新增**: 2 个文件
- `src/.../IXxxService.cs`
- `src/.../XxxHelper.cpp`
- **修改**: 1 个文件
- `src/.../XxxViewModel.cs`
### 🔴 CRITICAL 标记汇总(已在编码过程中逐个确认)
| 文件 | 行号 | 原因 | 确认状态 |
|------|------|------|----------|
| XxxHelper.cpp | L45 | 不确定坐标系转换算法 | ✅ 已确认 |
### 🟡 REVIEW 标记审查(统一审查)
> 以下标记不影响功能正确性,建议在代码审查时一并处理:
| 文件 | 行号 | 原因 |
|------|------|------|
| XxxHelper.cpp | L23 | 变量命名建议优化 |
| XxxHelper.cpp | L67 | 可添加性能优化注释 |
| XxxViewModel.cs | L112 | 建议补充 XML 文档注释 |
### 🔧 建议验证
1. 编译检查: `dotnet build` / `cmake --build`
2. 运行现有测试
3. 审查 REVIEW 标记处(非阻断,可稍后处理)
⚠️ 关键约束
| 约束 | 说明 |
|---|
| 串行执行 | 逐任务完成,不并行。用时间换质量 |
| 只消费圆桌会议 | 不兼容其他设计文档来源 |
| 不覆盖整文件 | 修改任务只改动需要变更的部分 |
| HUMAN_CHECK 分级处理 | CRITICAL 即时暂停等确认;REVIEW 不暂停,Step 3 统一审查 |
| subagent 必须写文件 | 不接受只返回上下文的结果 |
⚠️ 常见错误
| 错误 | 后果 | 正确做法 |
|---|
| 不解析 CODING_TASK_LIST | 无法确定任务边界和依赖 | grep + parse 标记区段 |
| 全文读取设计文档 | prompt 空间耗尽 | 用标记精准提取 |
| 修改文件时覆盖整文件 | 丢失现有代码 | 定位锚点 + replace_string_in_file |
| 跳过 HUMAN_CHECK | 不确定处可能出错 | CRITICAL 暂停确认,REVIEW 统一审查 |
| 不按拓扑序执行 | 依赖未满足导致编译错误 | 先排序再串行执行 |
执行进度提示
🔧 **Coding Agent 启动**
📋 设计来源: roundtable-{NNN}
📊 任务总数: X 个
---
📂 **Step 0:加载设计文档**
✅ 发现 roundtable-{NNN}
✅ 读取 05-implementation.md
✅ 解析 CODING_TASK_LIST(X 个任务)
📋 **Step 1:执行计划**
✅ 拓扑排序完成
✅ 用户已确认执行计划
🔄 **Step 2:逐任务编码**
✅ BE-01: 实现xxx接口 → src/.../IXxxService.cs (新增)
⭕ BE-02: xxx平台层实现 → src/.../XxxHelper.cpp (新增)
⭕ FE-01: xxxViewModel → src/.../XxxViewModel.cs (修改)
📊 **进度: 1/X 完成**
相关资源