add-coder 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +26 -6
- package/package.json +1 -1
- package/templates/core/agents/add-flow-guardian.md +6 -6
- package/templates/core/agents/add-orchestrator.md +2 -2
- package/templates/core/hooks/doc-format-guard.sh +17 -0
- package/templates/core/hooks/lib/context-inject.sh +96 -0
- package/templates/core/hooks/lib/state-detect.sh +104 -0
- package/templates/core/hooks/lib/vocabulary.sh +49 -0
- package/templates/core/hooks/notification.sh +9 -0
- package/templates/core/hooks/permission-gate.sh +18 -0
- package/templates/core/hooks/post-tool-failure.sh +10 -0
- package/templates/core/hooks/post-tool-use.sh +18 -0
- package/templates/core/hooks/pre-compact.sh +14 -0
- package/templates/core/hooks/pre-tool-use.sh +28 -0
- package/templates/core/hooks/prompt-submit.sh +16 -0
- package/templates/core/hooks/review-checklist.sh +10 -0
- package/templates/core/hooks/session-start.sh +23 -0
- package/templates/core/hooks/stop-check.sh +10 -0
- package/templates/core/hooks/subagent-guard.sh +15 -0
- package/templates/core/plans/2026-07/08/{farm-agent-add-coder-npm-package-add-route-v1.md → add-coder-npm-package-add-route-v1.md} +9 -9
- package/templates/core/plans/2026-07/08/{farm-agent-add-coder-npm-package-handoff-v1.md → add-coder-npm-package-handoff-v1.md} +43 -43
- package/templates/core/plans/2026-07/08/{farm-agent-add-coder-npm-package-plan-v1.md → add-coder-npm-package-plan-v1.md} +47 -47
- package/templates/core/reports/REPORT-WORKFLOW.md +2 -2
- package/templates/core/reports/index.md +1 -1
- package/templates/core/rules/project_rules.md +29 -29
- package/templates/core/scripts/mcp-server.ts +17 -17
- package/templates/core/skills/add-paradigm/SKILL.md +18 -16
- package/templates/core/skills/session-init/SKILL.md +3 -3
- package/templates/core/specs/{farm-agent-add-coder-npm-package → add-coder-npm-package}/checklist.md +7 -7
- package/templates/core/specs/{farm-agent-add-coder-npm-package → add-coder-npm-package}/spec.md +12 -12
- package/templates/core/specs/{farm-agent-add-coder-npm-package → add-coder-npm-package}/tasks.md +17 -17
- package/templates/core/templates/01-/346/236/266/346/236/204//343/200/212ADD/345/274/200/345/217/221/345/267/245/344/275/234/350/267/257/345/276/204/344/270/216/346/226/207/346/241/243/345/215/217/345/220/214/350/247/204/350/214/203/343/200/213.md +25 -25
- package/templates/core/templates/TERMINOLOGY.md +1 -1
- package/templates/core/templates/checklist-template.md +1 -1
- package/templates/core/templates/handoff-multi-round-template.md +10 -10
- package/templates/core/templates/handoff-single-round-template.md +1 -1
- package/templates/core/templates/index.md +5 -1
- package/templates/core/templates/prd-incremental-template.md +103 -0
- package/templates/core/templates/prd-incremental-template.schema.json +32 -0
- package/templates/core/templates/prd-standard-template.md +219 -0
- package/templates/core/templates/prd-standard-template.schema.json +27 -0
- package/templates/core/templates/simple-plan-template.md +2 -2
- package/templates/core/templates/standard-plan-template.md +9 -9
- package/templates/core/tools/README.md +2 -2
- package/templates/core/vocabulary/add-governance-vocabulary.md +28 -26
|
@@ -38,13 +38,13 @@ AI 助手必须先恢复到基线、找到对应的 SKILL 文件并按步骤执
|
|
|
38
38
|
|
|
39
39
|
### ADD 词汇→操作映射(L1 预埋)
|
|
40
40
|
|
|
41
|
-
>
|
|
41
|
+
> **完整词汇表已独立维护**:`{{magicDir}}/vocabulary/add-governance-vocabulary.md`
|
|
42
42
|
> **六类分类**: A.文档类型 / B.ADD阶段 / C.门禁/闸门 / D.MCP工具 / E.Skills/Subagents / F.核心概念
|
|
43
43
|
> **消费者**: IDE 侧 LLM + 未来治理 AI。领域触发词汇(面向 {{projectName}} 运行时用户 LLM)另有独立路径。
|
|
44
44
|
|
|
45
45
|
### 理论→实践映射
|
|
46
46
|
|
|
47
|
-
>
|
|
47
|
+
> 完整结构化映射:`{{magicDir}}/rules/theory-practice-map.toml`(可被脚本解析验证)
|
|
48
48
|
|
|
49
49
|
| 规则 | 实践位置 | 触发时机 |
|
|
50
50
|
|------|---------|---------|
|
|
@@ -73,7 +73,7 @@ AI 助手必须先恢复到基线、找到对应的 SKILL 文件并按步骤执
|
|
|
73
73
|
|
|
74
74
|
**触发条件**:每次新对话启动时,作为第一个操作执行。
|
|
75
75
|
|
|
76
|
-
SKILL 文件位于
|
|
76
|
+
SKILL 文件位于 `{{magicDir}}/skills/session-init/SKILL.md`,包含 4 个步骤:
|
|
77
77
|
1. 查询 `query_audit_logs({})` 获取最近的开发操作记录
|
|
78
78
|
2. 分析审计日志推断上下文
|
|
79
79
|
3. 构建上下文摘要
|
|
@@ -87,7 +87,7 @@ SKILL 文件位于 `.qoder/skills/session-init/SKILL.md`,包含 4 个步骤:
|
|
|
87
87
|
|
|
88
88
|
**触发条件**:用户提出任何功能开发、Bug 修复、系统修改需求时。
|
|
89
89
|
|
|
90
|
-
SKILL 文件位于
|
|
90
|
+
SKILL 文件位于 `{{magicDir}}/skills/add-paradigm/SKILL.md`,包含 10 个阶段(Step 0 - Step 9),每个阶段包含若干子步骤:
|
|
91
91
|
0. 文档先行(Documentation First — 在编写任何代码之前更新项目文档 + 验收后回看架构文档)
|
|
92
92
|
1. 功能分析与审计阶段定义
|
|
93
93
|
2. 审计基础设施实现
|
|
@@ -148,7 +148,7 @@ ADD 是**开发阶段**的编程范式,不是运行时范式。
|
|
|
148
148
|
| 架构文档 | `docs/*/knowledge/01-架构/` 或 `02-架构/` | 架构说明书、系统设计、模块定义 |
|
|
149
149
|
| 规范文档 | `docs/*/knowledge/02-规范/` 或 `03-规范/` | 开发规范、AI 核心规范、状态机规范 |
|
|
150
150
|
|
|
151
|
-
**此外,ADD 工作流的核心产物由
|
|
151
|
+
**此外,ADD 工作流的核心产物由 `{{magicDir}}/templates/` 下的 11 个模板定义**,这些模板不是参考资料,而是每次变更必须产出的文档骨架。分析变更影响范围时,必须同步确认需要创建/更新哪些模板产物:
|
|
152
152
|
|
|
153
153
|
| 模板 | 用途 | 对应阶段 |
|
|
154
154
|
|------|------|---------|
|
|
@@ -425,7 +425,7 @@ reason: 中文/英文说明本次改动的目的
|
|
|
425
425
|
正确示例:
|
|
426
426
|
- ✅ `src/middleware.ts`({{projectName}} workspace 内)
|
|
427
427
|
- ✅ `agrisynapse/src/api/agent/types.ts`(跨项目时带项目名前缀)
|
|
428
|
-
- ✅
|
|
428
|
+
- ✅ `{{magicDir}}/plans/{{projectName}}-agrisynapse-integration-plan-v1.md`(.qoder 内文件)
|
|
429
429
|
|
|
430
430
|
原因:`query_audit_logs({ targetId })` 做精确匹配,绝对路径和相对路径是两条不同的记录,导致漏查。
|
|
431
431
|
|
|
@@ -447,13 +447,13 @@ ADD 开发流程产生多种产物(方案、拆分、交接、评审、spec)
|
|
|
447
447
|
| `docs/哲学理论/` | 哲学理论基础文章 | 公开 |
|
|
448
448
|
| `{{docsDir}}/` | 项目文档(需求/架构/规范) | 公开 |
|
|
449
449
|
| `TODO/` | 开源协作 TODO,与 docs/ 平级 | 公开 |
|
|
450
|
-
|
|
|
451
|
-
|
|
|
452
|
-
|
|
|
453
|
-
|
|
|
454
|
-
|
|
|
455
|
-
|
|
|
456
|
-
|
|
|
450
|
+
| `{{magicDir}}/plans/` | 需求方案(plan)+ 任务拆分(execution)+ 轮间交接手册(handoff) | 开发内部 |
|
|
451
|
+
| `{{magicDir}}/reviews/` | 方案评审 + 逐轮 spec 评审 | 开发内部 |
|
|
452
|
+
| `{{magicDir}}/specs/` | 每轮 spec + tasks + checklist(三件套) | 开发内部 |
|
|
453
|
+
| `{{magicDir}}/templates/` | 文档模板(plan/spec/tasks/checklist/review) | 开发内部 |
|
|
454
|
+
| `{{magicDir}}/rules/` | 项目规则文件 | 开发内部 |
|
|
455
|
+
| `{{magicDir}}/skills/` | SKILL 行为定义 | 开发内部 |
|
|
456
|
+
| `{{magicDir}}/scripts/` | 工具脚本 + MCP 服务器 | 开发内部 |
|
|
457
457
|
|
|
458
458
|
### 命名规范
|
|
459
459
|
|
|
@@ -466,31 +466,31 @@ ADD 开发流程产生多种产物(方案、拆分、交接、评审、spec)
|
|
|
466
466
|
### ADD 工作流三大阶段与目录对应
|
|
467
467
|
|
|
468
468
|
```
|
|
469
|
-
需求理解 + 任务拆分 →
|
|
469
|
+
需求理解 + 任务拆分 → {{magicDir}}/plans/ (plan + execution + handoff)
|
|
470
470
|
↓
|
|
471
|
-
Review(强制关卡) →
|
|
471
|
+
Review(强制关卡) → {{magicDir}}/reviews/ (plan-review + roundN-spec-review)
|
|
472
472
|
↓
|
|
473
|
-
Spec 执行 →
|
|
473
|
+
Spec 执行 → {{magicDir}}/specs/ (三件套:spec + tasks + checklist)
|
|
474
474
|
```
|
|
475
475
|
|
|
476
476
|
**Review 强制关卡约束**:每轮计划在实际代码改动之前,必须先生成 Review 文件并通过评审。
|
|
477
477
|
- Review 是 **spec → 代码** 之间的强制关卡,未通过 Review 不得写代码
|
|
478
478
|
- Review 至少包含:元信息(对象/方案/时间/类型)、问题复现、方案对比、决策结论
|
|
479
|
-
- 每轮的 Review
|
|
479
|
+
- 每轮的 Review 文件路径:`{{magicDir}}/reviews/{需求域名}-round{N}-{核心内容}-spec-review-v{版本}.md`
|
|
480
480
|
|
|
481
481
|
### 文档产出物模板
|
|
482
482
|
|
|
483
|
-
ADD 开发流程产生五类文档,模板文件位于
|
|
483
|
+
ADD 开发流程产生五类文档,模板文件位于 `{{magicDir}}/templates/`:
|
|
484
484
|
|
|
485
485
|
| 模板 | 文件路径 | 说明 |
|
|
486
486
|
|------|---------|------|
|
|
487
|
-
| Plan |
|
|
488
|
-
| Spec |
|
|
489
|
-
| Tasks |
|
|
490
|
-
| Checklist |
|
|
491
|
-
| Review |
|
|
492
|
-
| Handoff(单轮) |
|
|
493
|
-
| Handoff(多轮) |
|
|
487
|
+
| Plan | `{{magicDir}}/templates/plan-template.md` | 元信息 + 背景目标 + 方案选型 + 架构设计 + 实施步骤 + 验收标准 + 关联文档 |
|
|
488
|
+
| Spec | `{{magicDir}}/templates/spec-template.md` | Why + What Changes + Impact + Requirements(WHEN/THEN) |
|
|
489
|
+
| Tasks | `{{magicDir}}/templates/tasks-template.md` | Phase → Task → SubTask 层级 |
|
|
490
|
+
| Checklist | `{{magicDir}}/templates/checklist-template.md` | Phase 检查项 + ADD 规则合规检查 |
|
|
491
|
+
| Review | `{{magicDir}}/templates/review-template.md` | 元信息 + 问题复现 + 方案对比 + 决策结论 + 影响评估 |
|
|
492
|
+
| Handoff(单轮) | `{{magicDir}}/templates/handoff-single-round-template.md` | 单轮变更 Handoff 基础格式(9 章节) |
|
|
493
|
+
| Handoff(多轮) | `{{magicDir}}/templates/handoff-multi-round-template.md` | 多轮原子事务 Handoff(全局结构 + 13 子章节 + 收敛规则 + 启动模板) |
|
|
494
494
|
|
|
495
495
|
使用时直接复制模板文件到目标路径,将 `{...}` 占位符替换为实际内容。
|
|
496
496
|
|
|
@@ -571,7 +571,7 @@ Handoff 分两种场景,格式要求不同:
|
|
|
571
571
|
| 2 | **上游已完成** | ✅ | 列表:上游本轮依赖的能力/文件/状态(不允许靠记忆,必须写清楚) |
|
|
572
572
|
| 3 | **恢复上下文审计查询** | ✅ | MCP 工具调用列表,按"第一步搜索代码 → 第二步搜索文档 → 第三步按行动词"组织。每个 `query_audit_logs` 写清楚预期命中数和返回内容摘要 |
|
|
573
573
|
| 4 | **原子事务目标** | ✅ | 一句话概括本轮目标;覆盖父 Plan 的哪个 Step |
|
|
574
|
-
| 5 | **spec 文件** | ✅ |
|
|
574
|
+
| 5 | **spec 文件** | ✅ | `{{magicDir}}/specs/{spec-name}/spec.md` + `tasks.md` + `checklist.md` 三件套路径 |
|
|
575
575
|
| 6 | **架构文档** | ✅ | 关联的 `docs/` 下架构/技术文档路径 + 对应章节号 |
|
|
576
576
|
| 7 | **你要改的文件** | ✅ | 表格:文件路径 + 操作(新建/修改)+ 改什么(一句话) |
|
|
577
577
|
| 8 | **核心设计** | 🔶 | 本轮最关键的代码片段/设计要点,不超过 10 行 |
|
|
@@ -827,12 +827,12 @@ AI 助手遵循"调用工具 → 获得结果 → 编码 → 验证"的闭环流
|
|
|
827
827
|
|
|
828
828
|
### MCP-5:稀疏推理恢复(Sparse Inference Recovery)
|
|
829
829
|
|
|
830
|
-
AI 助手在**每次新对话启动时**,必须先执行
|
|
830
|
+
AI 助手在**每次新对话启动时**,必须先执行 `{{magicDir}}/skills/session-init/SKILL.md`(SKILL-1 会话初始化),作为**不可跳过的前置操作**。
|
|
831
831
|
|
|
832
832
|
`session-init` SKILL 的 Step 1 要求调用 `query_audit_logs` 工具查询开发操作审计记录,以恢复开发上下文。
|
|
833
833
|
|
|
834
834
|
**执行顺序**(新对话启动时的首个操作):
|
|
835
|
-
1. 定位并执行 `session-init` SKILL
|
|
835
|
+
1. 定位并执行 `session-init` SKILL(`{{magicDir}}/skills/session-init/SKILL.md`)
|
|
836
836
|
2. 按 SKILL 的 Step 1 调用 `query_audit_logs({})` 查询
|
|
837
837
|
3. 按 SKILL 的 Step 2 分析推断上下文
|
|
838
838
|
4. 按 SKILL 的 Step 3 构建摘要
|
|
@@ -867,7 +867,7 @@ AI 助手在**每次新对话启动时**,必须先执行 `.qoder/skills/sessio
|
|
|
867
867
|
|
|
868
868
|
### MCP 配置
|
|
869
869
|
|
|
870
|
-
MCP 服务器配置在
|
|
870
|
+
MCP 服务器配置在 `{{magicDir}}/mcp.json`,通过 `npx tsx {{magicDir}}/scripts/mcp-server.ts` 启动。
|
|
871
871
|
Trae IDE 加载项目时自动连接 MCP 服务器。
|
|
872
872
|
|
|
873
873
|
### 附录
|
|
@@ -394,7 +394,7 @@ server.registerTool(
|
|
|
394
394
|
|
|
395
395
|
// ADD 工作流产物目录
|
|
396
396
|
parts.push(`=== ${MAGIC_DIR}/ ADD 工作流产物 ===`)
|
|
397
|
-
const
|
|
397
|
+
const magicDirs = [
|
|
398
398
|
{ dir: "templates", desc: "ADD 文档模板(11 个)" },
|
|
399
399
|
{ dir: "specs", desc: "specs 三元组(spec+tasks+checklist)" },
|
|
400
400
|
{ dir: "reviews", desc: "方案审查 + 实现审查 + 运行时审查" },
|
|
@@ -403,7 +403,7 @@ server.registerTool(
|
|
|
403
403
|
{ dir: "skills", desc: "SKILL 行为定义(add-paradigm / session-init)" },
|
|
404
404
|
{ dir: "scripts", desc: "工具脚本 + MCP 服务器" },
|
|
405
405
|
]
|
|
406
|
-
for (const { dir, desc } of
|
|
406
|
+
for (const { dir, desc } of magicDirs) {
|
|
407
407
|
const fullPath = join(PROJECT_ROOT, MAGIC_DIR, dir)
|
|
408
408
|
if (existsSync(fullPath)) {
|
|
409
409
|
const entries = await readdir(fullPath)
|
|
@@ -981,7 +981,7 @@ export async function record${featureName}Audit(record: ${featureName}AuditRecor
|
|
|
981
981
|
server.registerTool(
|
|
982
982
|
"query_audit_logs",
|
|
983
983
|
{
|
|
984
|
-
description: "稀疏查询开发操作审计日志(DevOperation 表,MCP-5 稀疏推理恢复)。支持多维度检索,AI 可在不同对话会话中通过任意维度组合查询之前的开发操作记录,实现跨会话的上下文恢复。\n\n典型用法:\n- query_audit_logs({ targetType: \"API_ROUTE\" }) — 查所有 API 路由改动\n- query_audit_logs({ targetId: \"src/app/api/knowledge/route.ts\" }) — 查特定文件改动\n- query_audit_logs({ keyword: \"pagination\" }) — 按关键词搜索\n- query_audit_logs({ planKeyword: \"add-
|
|
984
|
+
description: "稀疏查询开发操作审计日志(DevOperation 表,MCP-5 稀疏推理恢复)。支持多维度检索,AI 可在不同对话会话中通过任意维度组合查询之前的开发操作记录,实现跨会话的上下文恢复。\n\n典型用法:\n- query_audit_logs({ targetType: \"API_ROUTE\" }) — 查所有 API 路由改动\n- query_audit_logs({ targetId: \"src/app/api/knowledge/route.ts\" }) — 查特定文件改动\n- query_audit_logs({ keyword: \"pagination\" }) — 按关键词搜索\n- query_audit_logs({ planKeyword: \"add-coder\" }) — 按 Plan 关键词查该 Plan 下所有 devlog\n- query_audit_logs({}) — 查最近的记录(session-init 会话恢复)",
|
|
985
985
|
inputSchema: {
|
|
986
986
|
targetType: z.string().optional().describe("按目标类型精确过滤"),
|
|
987
987
|
action: z.string().optional().describe("按操作类型精确过滤"),
|
|
@@ -1223,7 +1223,7 @@ server.registerTool(
|
|
|
1223
1223
|
}
|
|
1224
1224
|
|
|
1225
1225
|
// ${MAGIC_DIR}/ 产物类别映射
|
|
1226
|
-
const
|
|
1226
|
+
const magicCategoryMap: Record<string, string> = {
|
|
1227
1227
|
plans: "plan",
|
|
1228
1228
|
specs: "spec",
|
|
1229
1229
|
reviews: "review",
|
|
@@ -1232,7 +1232,7 @@ server.registerTool(
|
|
|
1232
1232
|
// 收集所有 Markdown 文件
|
|
1233
1233
|
const allFiles: Array<{ path: string; relativePath: string; category: string }> = []
|
|
1234
1234
|
|
|
1235
|
-
const walkDir = async (dir: string, relativeDir: string, sourceType: "docs" | "
|
|
1235
|
+
const walkDir = async (dir: string, relativeDir: string, sourceType: "docs" | "magic" = "docs"): Promise<void> => {
|
|
1236
1236
|
try {
|
|
1237
1237
|
const entries = await readdir(dir, { withFileTypes: true })
|
|
1238
1238
|
for (const entry of entries) {
|
|
@@ -1242,10 +1242,10 @@ server.registerTool(
|
|
|
1242
1242
|
await walkDir(fullPath, relPath, sourceType)
|
|
1243
1243
|
} else if (entry.isFile() && (entry.name.endsWith(".md") || entry.name.endsWith(".html"))) {
|
|
1244
1244
|
let docCategory = "unknown"
|
|
1245
|
-
if (sourceType === "
|
|
1245
|
+
if (sourceType === "magic") {
|
|
1246
1246
|
// ${MAGIC_DIR}/ 产物按目录分类
|
|
1247
1247
|
const topDir = relPath.split("/")[0]
|
|
1248
|
-
docCategory =
|
|
1248
|
+
docCategory = magicCategoryMap[topDir] || "unknown"
|
|
1249
1249
|
// handoff 文件特殊识别(存放在 plans/ 下但含 handoff 关键词)
|
|
1250
1250
|
if (topDir === "plans" && entry.name.includes("handoff")) {
|
|
1251
1251
|
docCategory = "handoff"
|
|
@@ -1274,11 +1274,11 @@ server.registerTool(
|
|
|
1274
1274
|
// 搜索 docs/ 目录
|
|
1275
1275
|
await walkDir(docsDir, "", "docs")
|
|
1276
1276
|
// 搜索 ${MAGIC_DIR}/ 产物目录(plans/specs/reviews)
|
|
1277
|
-
const
|
|
1278
|
-
for (const
|
|
1279
|
-
const
|
|
1280
|
-
if (existsSync(
|
|
1281
|
-
await walkDir(
|
|
1277
|
+
const magicSearchDirs = ["plans", "specs", "reviews"]
|
|
1278
|
+
for (const mDir of magicSearchDirs) {
|
|
1279
|
+
const mPath = join(PROJECT_ROOT, MAGIC_DIR, mDir)
|
|
1280
|
+
if (existsSync(mPath)) {
|
|
1281
|
+
await walkDir(mPath, mDir, "magic")
|
|
1282
1282
|
}
|
|
1283
1283
|
}
|
|
1284
1284
|
|
|
@@ -2127,12 +2127,12 @@ server.registerTool(
|
|
|
2127
2127
|
const planContent = await readFileSafe(planPath)
|
|
2128
2128
|
let specDirName = ""
|
|
2129
2129
|
if (planContent) {
|
|
2130
|
-
const specMatch = planContent.match(/Spec:\s*\.qoder\/specs\/([^/\s]+)/)
|
|
2130
|
+
const specMatch = planContent.match(/Spec:\s*\.(qoder|claude|add|vscode)\/specs\/([^/\s]+)/)
|
|
2131
2131
|
if (specMatch) specDirName = specMatch[1]
|
|
2132
2132
|
}
|
|
2133
2133
|
if (!specDirName) {
|
|
2134
2134
|
// 退而求其次:从 tasks.md 引用提取
|
|
2135
|
-
const taskMatch = planContent?.match(/Tasks:\s*\.qoder\/specs\/([^/\s]+)/)
|
|
2135
|
+
const taskMatch = planContent?.match(/Tasks:\s*\.(qoder|claude|add|vscode)\/specs\/([^/\s]+)/)
|
|
2136
2136
|
if (taskMatch) specDirName = taskMatch[1]
|
|
2137
2137
|
}
|
|
2138
2138
|
if (!specDirName) {
|
|
@@ -2809,7 +2809,7 @@ server.registerTool(
|
|
|
2809
2809
|
if (existsSync(reviewsDir)) {
|
|
2810
2810
|
const reviewFiles = await readdir(reviewsDir)
|
|
2811
2811
|
// 从 Plan 全文提取所有 Review 引用,优先匹配含 planKeyword 的
|
|
2812
|
-
const allReviewRefs = Array.from(planContent.matchAll(/\.qoder\/reviews\/([^\s)]+\.md)/g))
|
|
2812
|
+
const allReviewRefs = Array.from(planContent.matchAll(/\.(qoder|claude|add|vscode)\/reviews\/([^\s)]+\.md)/g))
|
|
2813
2813
|
.map(m => m[1].split("/").pop() || "")
|
|
2814
2814
|
.filter(Boolean)
|
|
2815
2815
|
// 策略1: 在所有引用中优先选含 planKeyword 的
|
|
@@ -2837,10 +2837,10 @@ server.registerTool(
|
|
|
2837
2837
|
let specContent = ""
|
|
2838
2838
|
let tasksContent = ""
|
|
2839
2839
|
// 从 Plan 绑定或 §7 提取
|
|
2840
|
-
const specRef = planContent.match(/Spec:\s*\.qoder\/specs\/([^/\s]+)/)
|
|
2840
|
+
const specRef = planContent.match(/Spec:\s*\.(qoder|claude|add|vscode)\/specs\/([^/\s]+)/)
|
|
2841
2841
|
if (specRef) specDirName = specRef[1]
|
|
2842
2842
|
if (!specDirName) {
|
|
2843
|
-
const taskRef = planContent.match(/Tasks:\s*\.qoder\/specs\/([^/\s]+)/)
|
|
2843
|
+
const taskRef = planContent.match(/Tasks:\s*\.(qoder|claude|add|vscode)\/specs\/([^/\s]+)/)
|
|
2844
2844
|
if (taskRef) specDirName = taskRef[1]
|
|
2845
2845
|
}
|
|
2846
2846
|
if (!specDirName) {
|
|
@@ -7,12 +7,12 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
|
|
|
7
7
|
|
|
8
8
|
本 Skill 引导你按照 ADD 范式完成功能开发。每次开始新功能、修复 Bug、或修改系统行为时,必须按此工作流执行。
|
|
9
9
|
|
|
10
|
-
**范式边界**(定义在
|
|
10
|
+
**范式边界**(定义在 `{{magicDir}}/rules/project_rules.md` ADD-0):
|
|
11
11
|
- ADD 是开发阶段编程范式,不是运行时范式
|
|
12
12
|
- 反馈闭环消费者:IDE 中的 AI 助手 + 编程人员
|
|
13
13
|
- 运行时范式(裁决层/能力模型)是独立的下一步演化
|
|
14
14
|
|
|
15
|
-
**核心原则**(始终生效,定义在
|
|
15
|
+
**核心原则**(始终生效,定义在 `{{magicDir}}/rules/project_rules.md`):
|
|
16
16
|
- ADD-0:范式边界与消费者定义
|
|
17
17
|
- ADD-0.1:广义文档先行(Documentation First)— Plan → Review → Spec → Code → Checklist → runtime-review → 回归校准。详细流程约束见 ADD-9~ADD-12
|
|
18
18
|
- ADD-1:可观测性优先于功能实现
|
|
@@ -47,7 +47,7 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
|
|
|
47
47
|
> **Plan 是后续 ADD 工作流的输入。** 生成 plan 后如需执行,才启动下方 Step 0。
|
|
48
48
|
|
|
49
49
|
1. **读取模板**:读 `plan-template.md`,禁止凭记忆
|
|
50
|
-
2. **命名规范**:`{项目名}-{功能名}-plan-v1.md` →
|
|
50
|
+
2. **命名规范**:`{项目名}-{功能名}-plan-v1.md` → `{{magicDir}}/plans/{YYYY-MM}/{DD}/`(按当天日期创建子目录)
|
|
51
51
|
3. **必含章节**:
|
|
52
52
|
- 元信息(名称/时间/关联文档/ADD-7审计策略表)
|
|
53
53
|
- 一、背景与目标
|
|
@@ -84,10 +84,12 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
|
|
|
84
84
|
| 规范文档 | `docs/*/knowledge/02-规范/` 或 `03-规范/` | 开发规范、状态机规范、核心规范 |
|
|
85
85
|
| AI 核心文档 | `docs/*/knowledge/03-规范/` | AI 智能体核心规范 |
|
|
86
86
|
|
|
87
|
-
**此外,ADD 工作流的核心产物由
|
|
87
|
+
**此外,ADD 工作流的核心产物由 `{{magicDir}}/templates/` 下的 13 个模板定义**,这些模板不是参考资料,而是每次变更必须产出的文档骨架。分析变更影响范围时,必须同步确认需要创建/更新哪些模板产物:
|
|
88
88
|
|
|
89
89
|
| 模板 | 用途 | 对应阶段 |
|
|
90
90
|
|------|------|---------|
|
|
91
|
+
| `prd-standard-template.md` | 产品/系统需求文档(新建):背景目标 + 用户场景 + 功能需求 + 非功能需求 + 验收标准 | 需求定义 |
|
|
92
|
+
| `prd-incremental-template.md` | 产品/系统需求文档(增量):在已有 PRD 基础上追加/修改/删除 | 需求变更 |
|
|
91
93
|
| `plan-template.md` | 需求方案:元信息 + 背景目标 + 方案选型 + 架构设计 + 实施步骤 + 验收标准 + ADD-7审计策略 | 需求理解 |
|
|
92
94
|
| `add-route-template.md` | Plan→ADD 十阶段执行映射:Step 0-9 具体动作 + Task 映射表 + 审计阶段清单 + 依赖拓扑 | Step 0 |
|
|
93
95
|
| `spec-template.md` | 功能规格:Why / What Changes / Impact / WHEN-THEN Requirements | Step 0~1 |
|
|
@@ -100,7 +102,7 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
|
|
|
100
102
|
| `handoff-single-round-template.md` | 单轮交接:9 章节(含恢复上下文审计查询) | 单轮变更完成后 |
|
|
101
103
|
| `handoff-multi-round-template.md` | 多轮交接:全局拓扑 + 每轮 13 子章节 + 收敛规则 + 启动模板 | 多轮原子事务完成后 |
|
|
102
104
|
|
|
103
|
-
> **AI 首次学习 ADD 范式时,必须读取上述全部
|
|
105
|
+
> **AI 首次学习 ADD 范式时,必须读取上述全部 13 个模板文件。遗漏模板 = 遗漏范式全貌。**
|
|
104
106
|
>
|
|
105
107
|
> **每次根据模板生成文档时(plan/spec/review/handoff),MUST 先重新读取对应的模板文件,再填充内容。禁止凭记忆生成——模板可能已在迭代中更新,记忆中的版本可能不完整。**
|
|
106
108
|
|
|
@@ -147,7 +149,7 @@ find_related_docs({ query: "功能关键词" })
|
|
|
147
149
|
4. **ADD-7 审计策略**:从 Plan 元信息 ADD-7 策略表复制,逐文件填写 targetType/action/beforeState/afterState
|
|
148
150
|
5. **文件清单**:汇总所有涉及文件的 targetType 和操作类型
|
|
149
151
|
|
|
150
|
-
**命名**:`{需求域名}-{核心内容}-add-route-v1.md` →
|
|
152
|
+
**命名**:`{需求域名}-{核心内容}-add-route-v1.md` → `{{magicDir}}/plans/{YYYY-MM}/{DD}/`(与 Plan 同目录)
|
|
151
153
|
|
|
152
154
|
**关键约束**:
|
|
153
155
|
- [ ] add-route 必须先于任何代码变更生成(Step 1 依赖 add-route 中的审计阶段清单)
|
|
@@ -173,7 +175,7 @@ find_related_docs({ query: "功能关键词" })
|
|
|
173
175
|
> **核心原则**:Review 是诊断报告,Plan 是治疗方案。诊断报告的结论必须写进治疗方案,病人才能按修正后的方案治疗。
|
|
174
176
|
|
|
175
177
|
**什么时候触发**:
|
|
176
|
-
- Plan Review
|
|
178
|
+
- Plan Review 已生成(`{{magicDir}}/reviews/{需求域名}-*review-v{n}.md` 存在)
|
|
177
179
|
- Review 中有 P0/P1/P2 问题清单
|
|
178
180
|
- 人类已确认 Review 结论(通过评审)
|
|
179
181
|
|
|
@@ -332,7 +334,7 @@ Plan 级闭包: {业务功能描述}
|
|
|
332
334
|
|
|
333
335
|
## 附录 A:协作文档规范(命名、格式与交互规则)
|
|
334
336
|
|
|
335
|
-
> **目标**:确保
|
|
337
|
+
> **目标**:确保 `{{magicDir}}/specs/`、`{{magicDir}}/reviews/` 下的 spec/review/handoff 文件遵循统一的命名和格式约定,使后续 AI Session 能快速定位和恢复上下文。
|
|
336
338
|
|
|
337
339
|
**在编写任何代码之前,必须先确认本附录中的文件结构已就位。**
|
|
338
340
|
|
|
@@ -340,9 +342,9 @@ Plan 级闭包: {业务功能描述}
|
|
|
340
342
|
|
|
341
343
|
| 文档类型 | 命名规则 | 示例 | 存放位置 |
|
|
342
344
|
|---------|---------|------|---------|
|
|
343
|
-
| 开发任务(specs 三元组) | `项目名-任务名/` | `{{projectName}}-response-strategy/` |
|
|
344
|
-
| review 文件 | `项目名-任务名-round{N}-review.md` | `{{projectName}}-response-strategy-round2-review.md` |
|
|
345
|
-
| handoff 文件 | `项目名-需求名-handoff.md` | `{{projectName}}-co-agent-handoff.md` |
|
|
345
|
+
| 开发任务(specs 三元组) | `项目名-任务名/` | `{{projectName}}-response-strategy/` | `{{magicDir}}/specs/` |
|
|
346
|
+
| review 文件 | `项目名-任务名-round{N}-review.md` | `{{projectName}}-response-strategy-round2-review.md` | `{{magicDir}}/reviews/` |
|
|
347
|
+
| handoff 文件 | `项目名-需求名-handoff.md` | `{{projectName}}-co-agent-handoff.md` | `{{magicDir}}/plans/{YYYY-MM}/{DD}/`(与 Plan 同目录) |
|
|
346
348
|
|
|
347
349
|
**命名规则说明**:
|
|
348
350
|
|
|
@@ -357,7 +359,7 @@ Plan 级闭包: {业务功能描述}
|
|
|
357
359
|
每个 spec 目录 MUST 包含三个文件,形成"需求→执行→验收"闭环:
|
|
358
360
|
|
|
359
361
|
```
|
|
360
|
-
|
|
362
|
+
{{magicDir}}/specs/{任务名}/
|
|
361
363
|
├── spec.md # 需求定义:Why / What Changes / Impact / Boundaries / Requirements
|
|
362
364
|
├── tasks.md # 执行拆分:Preconditions / Forbidden / Tasks / Dependencies / Verification
|
|
363
365
|
└── checklist.md # 验收清单:编号验证项,每条可追溯到 tasks.md 的 Task
|
|
@@ -747,7 +749,7 @@ check_add_route_completeness({ planKeyword: "<Plan 核心关键词>" })
|
|
|
747
749
|
|
|
748
750
|
### 3.5.1 运行 spec checklist
|
|
749
751
|
|
|
750
|
-
检查
|
|
752
|
+
检查 `{{magicDir}}/specs/{task}/checklist.md` 中的所有检查项:
|
|
751
753
|
|
|
752
754
|
- `[T]` 编译期验证项:逐项执行并勾选
|
|
753
755
|
- `[R]` 运行时验证项:保持 `[ ]`,将自动流转到 review-runtime.md
|
|
@@ -774,7 +776,7 @@ check_add_route_completeness({ planKeyword: "<Plan 核心关键词>" })
|
|
|
774
776
|
当所有 `[T]` 项均通过后:
|
|
775
777
|
|
|
776
778
|
1. 读取 `review-runtime-template.md`
|
|
777
|
-
2. 复制为
|
|
779
|
+
2. 复制为 `{{magicDir}}/reviews/{project}-review-runtime.md`
|
|
778
780
|
3. 替换占位符(标题、关联文档路径)
|
|
779
781
|
4. §1 发现列表初始化为"尚无运行时发现"
|
|
780
782
|
5. §1 末尾自动插入所有 `[R]` 项的"待运行时验证"清单
|
|
@@ -1019,7 +1021,7 @@ LIMIT 10;
|
|
|
1019
1021
|
- **§9 后置确认**:逐项确认 tsc/ADD 合规/审计落库
|
|
1020
1022
|
3. **审计查询语句必须可执行**:`query_audit_logs({ targetId: "..." })` 调用参数来自 `record_dev_operation` 落库的 targetId
|
|
1021
1023
|
4. **双向链接**:handoff 文件内必须包含指向对应 plan + review 的链接;review 文件内必须包含指向 handoff 的链接
|
|
1022
|
-
5. **写入位置**:`{项目名}-{需求名}-handoff.md` →
|
|
1024
|
+
5. **写入位置**:`{项目名}-{需求名}-handoff.md` → `{{magicDir}}/plans/`
|
|
1023
1025
|
|
|
1024
1026
|
### 未收敛
|
|
1025
1027
|
|
|
@@ -1038,7 +1040,7 @@ LIMIT 10;
|
|
|
1038
1040
|
|
|
1039
1041
|
### 9.1 读取 report-handoff 模板
|
|
1040
1042
|
|
|
1041
|
-
读取
|
|
1043
|
+
读取 `{{magicDir}}/templates/report-handoff-template.md`,按模板格式在 handoff 中追加 Report Closure 章节。
|
|
1042
1044
|
|
|
1043
1045
|
### 9.2 在 handoff 中追加 Report Closure 章节
|
|
1044
1046
|
|
|
@@ -39,7 +39,7 @@ description: "会话上下文恢复(稀疏推理)。每次新对话启动时
|
|
|
39
39
|
### 1.1 搜索 review-runtime.md 文件
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
find
|
|
42
|
+
find {{magicDir}}/reviews/ -name "*review-runtime*" -type f 2>/dev/null
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
### 1.2 逐文件检查未关闭发现
|
|
@@ -100,7 +100,7 @@ query_audit_logs({ action: "RUNTIME_ERROR" }) // ADD-11: 运行时异
|
|
|
100
100
|
### 2.4 加载 Plan 索引(L2 操作惯性 — index.md 预载)
|
|
101
101
|
|
|
102
102
|
```
|
|
103
|
-
读取
|
|
103
|
+
读取 {{magicDir}}/plans/index.md
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
**预期产出**:
|
|
@@ -208,7 +208,7 @@ get_project_context({ scope: "add-state" })
|
|
|
208
208
|
|
|
209
209
|
## 本 SKILL 的执行检查清单
|
|
210
210
|
|
|
211
|
-
- [ ] Step 1: 已扫描
|
|
211
|
+
- [ ] Step 1: 已扫描 `{{magicDir}}/reviews/*review-runtime*` 并汇总未关闭发现
|
|
212
212
|
- [ ] Step 2: 已调用 `query_audit_logs({})`(含 `RUNTIME_ERROR` 查询)
|
|
213
213
|
- [ ] Step 3: 已分析审计日志推断上下文
|
|
214
214
|
- [ ] Step 4: 已构建上下文摘要
|
package/templates/core/specs/{farm-agent-add-coder-npm-package → add-coder-npm-package}/checklist.md
RENAMED
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
- [ ] [E] `.claude/settings.json` 含 hook 配置,matcher 使用标准工具名(`Write`, `Edit`, `Bash`)
|
|
36
36
|
- [ ] [E] `.claude/mcp.json` 存在且格式正确
|
|
37
37
|
- [ ] [E] `.claude/hooks/` 下 12 个脚本存在且可执行
|
|
38
|
-
- [ ] [T] `npx add-coder init --adapter qoder` 生成正确的
|
|
39
|
-
- [ ] [E]
|
|
40
|
-
- [ ] [E]
|
|
38
|
+
- [ ] [T] `npx add-coder init --adapter qoder` 生成正确的 `{{magicDir}}/` 目录 — 证据: (待填写)|审计: (待填写)
|
|
39
|
+
- [ ] [E] `{{magicDir}}/settings.json` matcher 使用双套工具名(`Write|write_to_file`, `Edit|edit_file`, `Bash`)
|
|
40
|
+
- [ ] [E] `{{magicDir}}/hooks/` 下 12 个脚本 + `lib/` 存在
|
|
41
41
|
- [ ] [T] `npx add-coder init --adapter vscode` 生成正确的 `.vscode/` 目录 — 证据: (待填写)|审计: (待填写)
|
|
42
42
|
- [ ] [E] `.vscode/settings.json`、`launch.json`、`tasks.json`、`extensions.json` 存在
|
|
43
43
|
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
- [ ] [T] `--force` 和 `--yes` 互斥,同时指定时报错 — 证据: (待填写)|审计: (待填写)
|
|
75
75
|
- [ ] [T] `add-coder sync` 只同步缺失文件 — 证据: (待填写)|审计: (待填写)
|
|
76
76
|
- [ ] [T] `add-coder status` 检查完整性 — 证据: (待填写)|审计: (待填写)
|
|
77
|
-
- [ ] [T] 已有
|
|
77
|
+
- [ ] [T] 已有 `{{magicDir}}/settings.json` 时 `init` 不覆盖,展示 diff 并交互确认 — 证据: (待填写)|审计: (待填写)
|
|
78
78
|
- [ ] [T] 单元测试:`renderer.ts`、`config-loader.ts`、`detect.ts`、`writer.ts` 全部通过 — 证据: (待填写)|审计: (待填写)
|
|
79
79
|
|
|
80
80
|
---
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
|
|
91
91
|
> ADD 用双层报告替代传统 E2E:代码审查报告(review-implementation.md + review-runtime.md)覆盖实现质量,
|
|
92
92
|
> Runtime Report 体系(gateway.md + boundary-runtime-report.md)覆盖边界合约持续监测。
|
|
93
|
-
> 参考: `policy-update-loop.ts` 的持续反馈闭环模式 +
|
|
93
|
+
> 参考: `policy-update-loop.ts` 的持续反馈闭环模式 + `{{magicDir}}/reports/REPORT-WORKFLOW.md`。
|
|
94
94
|
|
|
95
95
|
- [ ] [T] `review-implementation.md` 已生成,覆盖全部 9 个 Task 的变更范围 — 证据: (待填写)|审计: (待填写)
|
|
96
96
|
- [ ] [T] `review-runtime.md` 已生成(含本 checklist 全部 `[R]` 项清单) — 证据: (待填写)|审计: (待填写)
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
- [ ] [E] Plan/Spec 一致性 — 证据: `check_spec_sync` 结果|审计: (待填写)
|
|
109
109
|
- [ ] [E] Plan/Spec 修订记录 — 证据: `record_dev_operation` 审计 ID|审计: (待填写)
|
|
110
110
|
- [ ] [E] 无新增依赖(模板引擎等) — 证据: `git diff package.json` 无新增 dependency|审计: (待填写)
|
|
111
|
-
- [ ] [E] 不改
|
|
111
|
+
- [ ] [E] 不改 add-coder 业务代码 — 证据: 仅改动 `packages/add-coder/`|审计: (待填写)
|
|
112
112
|
- [ ] [E] 审计日志记录完整 — 证据: `query_audit_logs` 回查确认|审计: (待填写)
|
|
113
113
|
|
|
114
114
|
---
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
> 当所有 `[T]` 和 `[E]` 编译期检查项均为 `[x]` 时(`[R]` 和 `[H]` 项可保持 `[ ]`),AI 必须执行:
|
|
119
119
|
>
|
|
120
120
|
> 1. **读取** `review-implementation-template.md`,逐项填写实现审查内容
|
|
121
|
-
> 2. **读取** `review-runtime-template.md`,复制为
|
|
121
|
+
> 2. **读取** `review-runtime-template.md`,复制为 `{{magicDir}}/reviews/{project}-review-runtime.md`
|
|
122
122
|
> - 替换占位符(标题、关联文档路径)
|
|
123
123
|
> - §1 发现列表初始化为 "尚无运行时发现"
|
|
124
124
|
> - §1 末尾自动插入本 checklist 中所有 `[R]` 项的清单,标记为 "待运行时验证"
|
package/templates/core/specs/{farm-agent-add-coder-npm-package → add-coder-npm-package}/spec.md
RENAMED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
当前 `packages/add-coder/` 是一个不可发布的半成品:
|
|
6
6
|
|
|
7
|
-
1. **模板硬编码**:`templates/` 下所有文件直接来自
|
|
7
|
+
1. **模板硬编码**:`templates/` 下所有文件直接来自 add-coder 项目,包含数据库密码、项目名、特定路径等不可移植内容
|
|
8
8
|
2. **CLI 纯搬运**:`bin/add-coder.js`(113 行 CommonJS)只有 `init/sync/status` 三个命令,全是 `fs.copyFileSync`,无参数化渲染、无配置合并
|
|
9
9
|
3. **无适配层抽象**:`.qoder` 和 `.vscode` 是两套独立静态模板,无共享逻辑。加 Claude 适配需要再复制一套
|
|
10
10
|
4. **VS Code 无 hook 层**:`.vscode/` 只有 MCP 配置,缺少 Qoder 的 11 个 hook 等价物
|
|
@@ -75,14 +75,14 @@
|
|
|
75
75
|
## Impact
|
|
76
76
|
|
|
77
77
|
- Affected specs: 无(本 Plan 为全新举措)
|
|
78
|
-
- Affected code: `packages/add-coder/`(约 90 个文件变更),不修改
|
|
79
|
-
- 父 Plan:
|
|
78
|
+
- Affected code: `packages/add-coder/`(约 90 个文件变更),不修改 add-coder 业务代码
|
|
79
|
+
- 父 Plan: `{{magicDir}}/plans/2026-07/08/add-coder-add-coder-npm-package-plan-v1.md`
|
|
80
80
|
- 依赖: 无
|
|
81
81
|
- 后续依赖: 无
|
|
82
82
|
|
|
83
83
|
## Boundaries
|
|
84
84
|
|
|
85
|
-
- 本次只改造 `packages/add-coder/` 目录,不修改
|
|
85
|
+
- 本次只改造 `packages/add-coder/` 目录,不修改 add-coder 业务代码
|
|
86
86
|
- 本次不新增 AgentAuditPhase 字面量(npm 包工程化,无业务逻辑审计点)
|
|
87
87
|
- 审计通过 `record_dev_operation`(ADD-7)落库 DevOperation 表
|
|
88
88
|
- 模板引擎不引入第三方依赖(Handlebars/EJS 等),用 TypeScript 原生字符串替换
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
|
|
122
122
|
### Requirement: 模板参数化(硬编码清理)
|
|
123
123
|
|
|
124
|
-
系统 SHALL 将 `templates/` 下所有文件中的
|
|
124
|
+
系统 SHALL 将 `templates/` 下所有文件中的 add-coder 硬编码替换为 `{{placeholder}}` 占位符。
|
|
125
125
|
|
|
126
126
|
#### Scenario: 占位符语法
|
|
127
127
|
|
|
@@ -174,11 +174,11 @@
|
|
|
174
174
|
#### Scenario: 三目录部署(core 内容同步到 IDE magic path)
|
|
175
175
|
|
|
176
176
|
- **WHEN** 执行 `init` 渲染 core 模板后
|
|
177
|
-
- **THEN** `templates/core/` 的所有文件 SHALL 同时写入 `.add/`、`.
|
|
177
|
+
- **THEN** `templates/core/` 的所有文件 SHALL 同时写入 `.add/`、`{{magicDir}}/`、`.claude/` 三个目标目录
|
|
178
178
|
- **AND** adapter renderers SHALL 只处理 adapter 专属文件(hooks/mcp.json/settings.json/sync-policy.json),不再单独渲染 core 内容
|
|
179
179
|
|
|
180
180
|
**改造步骤**:
|
|
181
|
-
1. `src/core/renderer.ts`:`renderCore()` 返回值改为输出三份文件的映射(`.add/` +
|
|
181
|
+
1. `src/core/renderer.ts`:`renderCore()` 返回值改为输出三份文件的映射(`.add/` + `{{magicDir}}/` + `.claude/`)
|
|
182
182
|
2. `src/cli/commands/init.ts`:写入阶段对三目录同名文件去重(内容相同则 skip)
|
|
183
183
|
3. `src/adapters/{claude,qoder,vscode}/renderer.ts`:删除 core 渲染逻辑,只保留 hooks + mcp + settings 等 adapter 专属文件
|
|
184
184
|
|
|
@@ -201,7 +201,7 @@
|
|
|
201
201
|
#### Scenario: Qoder 适配器
|
|
202
202
|
|
|
203
203
|
- **WHEN** 执行 `npx add-coder init --adapter qoder`
|
|
204
|
-
- **THEN** 生成正确的
|
|
204
|
+
- **THEN** 生成正确的 `{{magicDir}}/` 目录,hook 配置 matcher 适配双套工具名(`Write|write_to_file`, `Edit|edit_file`, `Bash`)
|
|
205
205
|
|
|
206
206
|
#### Scenario: VS Code 适配器
|
|
207
207
|
|
|
@@ -272,7 +272,7 @@
|
|
|
272
272
|
|
|
273
273
|
#### Scenario: JSON 合并
|
|
274
274
|
|
|
275
|
-
- **WHEN** 用户已有
|
|
275
|
+
- **WHEN** 用户已有 `{{magicDir}}/settings.json` 或 `.vscode/settings.json`
|
|
276
276
|
- **THEN** deep merge,已有 `hooks` 数组追加新 hook 而非全量替换
|
|
277
277
|
|
|
278
278
|
---
|
|
@@ -331,12 +331,12 @@
|
|
|
331
331
|
#### Scenario: 空项目 init
|
|
332
332
|
|
|
333
333
|
- **WHEN** 在空白项目中执行 `npx add-coder init`
|
|
334
|
-
- **THEN** `.add/`
|
|
334
|
+
- **THEN** `.add/` `{{magicDir}}/` `.claude/` 三目录均含完整 ADD 内容(agents/skills/templates/rules/vocabulary/scripts/hooks/plans/specs/reports/tools),`.vscode/` 含 IDE 配置
|
|
335
335
|
|
|
336
336
|
#### Scenario: plans/specs 示例
|
|
337
337
|
|
|
338
338
|
- **WHEN** 用户首次 init
|
|
339
|
-
- **THEN**
|
|
339
|
+
- **THEN** `{{magicDir}}/plans/` 含 add-coder 6轮范例,`{{magicDir}}/specs/` 含 spec/tasks/checklist 范例
|
|
340
340
|
|
|
341
341
|
#### Scenario: 三端兼容
|
|
342
342
|
|
|
@@ -345,7 +345,7 @@
|
|
|
345
345
|
|
|
346
346
|
#### Scenario: 已有配置不覆盖
|
|
347
347
|
|
|
348
|
-
- **WHEN** 用户已有
|
|
348
|
+
- **WHEN** 用户已有 `{{magicDir}}/settings.json` 时执行 `init`
|
|
349
349
|
- **THEN** 不覆盖已有配置,展示 diff 并交互确认
|
|
350
350
|
|
|
351
351
|
#### Scenario: Prisma 迁移幂等
|