add-coder 0.1.0
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/README.md +50 -0
- package/bin/add-coder.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +576 -0
- package/package.json +64 -0
- package/templates/adapters/claude/hooks/doc-format-guard.sh +17 -0
- package/templates/adapters/claude/hooks/notification.sh +9 -0
- package/templates/adapters/claude/hooks/permission-gate.sh +18 -0
- package/templates/adapters/claude/hooks/post-tool-failure.sh +10 -0
- package/templates/adapters/claude/hooks/post-tool-use.sh +18 -0
- package/templates/adapters/claude/hooks/pre-compact.sh +14 -0
- package/templates/adapters/claude/hooks/pre-tool-use.sh +28 -0
- package/templates/adapters/claude/hooks/prompt-submit.sh +16 -0
- package/templates/adapters/claude/hooks/review-checklist.sh +10 -0
- package/templates/adapters/claude/hooks/session-start.sh +23 -0
- package/templates/adapters/claude/hooks/stop-check.sh +10 -0
- package/templates/adapters/claude/hooks/subagent-guard.sh +15 -0
- package/templates/adapters/claude/mcp.json +13 -0
- package/templates/adapters/claude/settings.json +125 -0
- package/templates/adapters/qoder/hooks/doc-format-guard.sh +164 -0
- package/templates/adapters/qoder/hooks/lib/context-inject.sh +96 -0
- package/templates/adapters/qoder/hooks/lib/state-detect.sh +104 -0
- package/templates/adapters/qoder/hooks/lib/vocabulary.sh +49 -0
- package/templates/adapters/qoder/hooks/notification.sh +22 -0
- package/templates/adapters/qoder/hooks/permission-gate.sh +8 -0
- package/templates/adapters/qoder/hooks/post-tool-failure.sh +8 -0
- package/templates/adapters/qoder/hooks/post-tool-use.sh +20 -0
- package/templates/adapters/qoder/hooks/pre-compact.sh +12 -0
- package/templates/adapters/qoder/hooks/pre-tool-use.sh +77 -0
- package/templates/adapters/qoder/hooks/prompt-submit.sh +72 -0
- package/templates/adapters/qoder/hooks/review-checklist.sh +157 -0
- package/templates/adapters/qoder/hooks/session-start.sh +16 -0
- package/templates/adapters/qoder/hooks/stop-check.sh +71 -0
- package/templates/adapters/qoder/hooks/subagent-guard.sh +11 -0
- package/templates/adapters/qoder/mcp.json +13 -0
- package/templates/adapters/qoder/settings.json +125 -0
- package/templates/adapters/qoder/sync-policy.json +18 -0
- package/templates/adapters/vscode/extensions.json +5 -0
- package/templates/adapters/vscode/launch.json +16 -0
- package/templates/adapters/vscode/settings.json +16 -0
- package/templates/adapters/vscode/tasks.json +38 -0
- package/templates/core/agents/add-flow-guardian.md +276 -0
- package/templates/core/agents/add-orchestrator.md +217 -0
- package/templates/core/plans/2026-07/08/farm-agent-add-coder-npm-package-add-route-v1.md +323 -0
- package/templates/core/plans/2026-07/08/farm-agent-add-coder-npm-package-handoff-v1.md +678 -0
- package/templates/core/plans/2026-07/08/farm-agent-add-coder-npm-package-plan-v1.md +785 -0
- package/templates/core/prisma/add.prisma +34 -0
- package/templates/core/reports/REPORT-WORKFLOW.md +250 -0
- package/templates/core/reports/boundary-runtime-report.md +134 -0
- package/templates/core/reports/code-review-combined-report.md +227 -0
- package/templates/core/reports/code-review-fix-verification-report.md +505 -0
- package/templates/core/reports/code-review-suggestions.md +66 -0
- package/templates/core/reports/index.md +57 -0
- package/templates/core/reports/runtime-report/gateway.md +741 -0
- package/templates/core/rules/project_rules.md +905 -0
- package/templates/core/rules/theory-practice-map.toml +105 -0
- package/templates/core/scripts/mcp-server.ts +3492 -0
- package/templates/core/skills/add-paradigm/SKILL.md +1086 -0
- package/templates/core/skills/session-init/SKILL.md +215 -0
- package/templates/core/specs/farm-agent-add-coder-npm-package/checklist.md +125 -0
- package/templates/core/specs/farm-agent-add-coder-npm-package/spec.md +343 -0
- package/templates/core/specs/farm-agent-add-coder-npm-package/tasks.md +203 -0
- 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 +386 -0
- package/templates/core/templates/TERMINOLOGY.md +81 -0
- package/templates/core/templates/add-route-template-heavyweight.md +288 -0
- package/templates/core/templates/add-route-template.md +242 -0
- package/templates/core/templates/add-route-template.schema.json +35 -0
- package/templates/core/templates/checklist-template.md +72 -0
- package/templates/core/templates/checklist-template.schema.json +20 -0
- package/templates/core/templates/fix-verification-template.md +132 -0
- package/templates/core/templates/fix-verification-template.schema.json +54 -0
- package/templates/core/templates/handoff-multi-round-template.md +295 -0
- package/templates/core/templates/handoff-multi-round.schema.json +48 -0
- package/templates/core/templates/handoff-single-round-template.md +145 -0
- package/templates/core/templates/handoff-single-round.schema.json +92 -0
- package/templates/core/templates/index.md +60 -0
- package/templates/core/templates/report-template.md +126 -0
- package/templates/core/templates/report-template.schema.json +69 -0
- package/templates/core/templates/review-implementation-template.md +66 -0
- package/templates/core/templates/review-implementation-template.schema.json +58 -0
- package/templates/core/templates/review-runtime-template.md +73 -0
- package/templates/core/templates/review-runtime-template.schema.json +47 -0
- package/templates/core/templates/review-template.md +37 -0
- package/templates/core/templates/review-template.schema.json +42 -0
- package/templates/core/templates/runtime-report-template.md +73 -0
- package/templates/core/templates/runtime-report-template.schema.json +48 -0
- package/templates/core/templates/simple-plan-template.md +166 -0
- package/templates/core/templates/simple-plan-template.schema.json +109 -0
- package/templates/core/templates/spec-template.md +22 -0
- package/templates/core/templates/spec-template.schema.json +41 -0
- package/templates/core/templates/standard-plan-template.md +96 -0
- package/templates/core/templates/standard-plan-template.schema.json +73 -0
- package/templates/core/templates/tasks-template.md +54 -0
- package/templates/core/templates/tasks-template.schema.json +43 -0
- package/templates/core/tools/README.md +361 -0
- package/templates/core/vocabulary/add-governance-vocabulary.md +370 -0
- package/templates/shared/hooks-lib/common.sh +22 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "command",
|
|
8
|
+
"command": ".qoder/hooks/session-start.sh"
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"UserPromptSubmit": [
|
|
14
|
+
{
|
|
15
|
+
"hooks": [
|
|
16
|
+
{
|
|
17
|
+
"type": "command",
|
|
18
|
+
"command": ".qoder/hooks/prompt-submit.sh"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"PreToolUse": [
|
|
24
|
+
{
|
|
25
|
+
"matcher": "create_file|CreateFile|Write|search_replace|SearchReplace|Edit|edit_file|EditFile|delete_file|DeleteFile|Bash",
|
|
26
|
+
"hooks": [
|
|
27
|
+
{
|
|
28
|
+
"type": "command",
|
|
29
|
+
"command": ".qoder/hooks/pre-tool-use.sh"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "command",
|
|
33
|
+
"command": ".qoder/hooks/doc-format-guard.sh"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"PostToolUse": [
|
|
39
|
+
{
|
|
40
|
+
"matcher": "create_file|CreateFile|Write|search_replace|SearchReplace|Edit|edit_file|EditFile|delete_file|DeleteFile",
|
|
41
|
+
"hooks": [
|
|
42
|
+
{
|
|
43
|
+
"type": "command",
|
|
44
|
+
"command": ".qoder/hooks/post-tool-use.sh"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "command",
|
|
48
|
+
"command": ".qoder/hooks/doc-format-guard.sh"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"PostToolUseFailure": [
|
|
54
|
+
{
|
|
55
|
+
"hooks": [
|
|
56
|
+
{
|
|
57
|
+
"type": "command",
|
|
58
|
+
"command": ".qoder/hooks/post-tool-failure.sh"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"Stop": [
|
|
64
|
+
{
|
|
65
|
+
"hooks": [
|
|
66
|
+
{
|
|
67
|
+
"type": "command",
|
|
68
|
+
"command": ".qoder/hooks/stop-check.sh"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"SubagentStart": [
|
|
74
|
+
{
|
|
75
|
+
"hooks": [
|
|
76
|
+
{
|
|
77
|
+
"type": "command",
|
|
78
|
+
"command": ".qoder/hooks/subagent-guard.sh"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"SubagentStop": [
|
|
84
|
+
{
|
|
85
|
+
"hooks": [
|
|
86
|
+
{
|
|
87
|
+
"type": "command",
|
|
88
|
+
"command": ".qoder/hooks/subagent-guard.sh"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"PreCompact": [
|
|
94
|
+
{
|
|
95
|
+
"hooks": [
|
|
96
|
+
{
|
|
97
|
+
"type": "command",
|
|
98
|
+
"command": ".qoder/hooks/pre-compact.sh"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"Notification": [
|
|
104
|
+
{
|
|
105
|
+
"matcher": "result",
|
|
106
|
+
"hooks": [
|
|
107
|
+
{
|
|
108
|
+
"type": "command",
|
|
109
|
+
"command": ".qoder/hooks/notification.sh"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"PermissionRequest": [
|
|
115
|
+
{
|
|
116
|
+
"hooks": [
|
|
117
|
+
{
|
|
118
|
+
"type": "command",
|
|
119
|
+
"command": ".qoder/hooks/permission-gate.sh"
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/example/sync-policy-schema/v1.json",
|
|
3
|
+
"description": "{{projectName}} 项目 check_spec_sync 拦截策略。重型模式:全部检查开启,核心项 block 级拦截。",
|
|
4
|
+
"checks": {
|
|
5
|
+
"add_route_exists": { "enabled": true, "severity": "block" },
|
|
6
|
+
"add_route_completeness": { "enabled": true, "severity": "block" },
|
|
7
|
+
"dps": { "enabled": true, "severity": "block", "threshold": 85 },
|
|
8
|
+
"rahs": { "enabled": true, "severity": "block", "threshold": 90 },
|
|
9
|
+
"tasks": { "enabled": true, "severity": "block" },
|
|
10
|
+
"checklist": { "enabled": true, "severity": "block" },
|
|
11
|
+
"handoff": { "enabled": true, "severity": "block" },
|
|
12
|
+
"addRoute": { "enabled": true, "severity": "warn" },
|
|
13
|
+
"crossRef": { "enabled": true, "severity": "warn" },
|
|
14
|
+
"rollback": { "enabled": true, "severity": "block" },
|
|
15
|
+
"gitDiff": { "enabled": true, "severity": "warn" },
|
|
16
|
+
"auditLog": { "enabled": true, "severity": "block" }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.2.0",
|
|
3
|
+
"configurations": [
|
|
4
|
+
{
|
|
5
|
+
"type": "pwa-node",
|
|
6
|
+
"request": "launch",
|
|
7
|
+
"name": "Launch MCP Server",
|
|
8
|
+
"program": "${workspaceFolder}/scripts/add-coder-mcp-server.ts",
|
|
9
|
+
"preLaunchTask": "TS Node: Launch MCP Server",
|
|
10
|
+
"cwd": "${workspaceFolder}",
|
|
11
|
+
"env": {
|
|
12
|
+
"NODE_ENV": "development"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"label": "ADD: Run MCP Server",
|
|
6
|
+
"type": "shell",
|
|
7
|
+
"command": "{{mcpServerCommand}} .qoder/scripts/mcp-server.ts",
|
|
8
|
+
"presentation": {
|
|
9
|
+
"reveal": "always",
|
|
10
|
+
"panel": "new"
|
|
11
|
+
},
|
|
12
|
+
"problemMatcher": []
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"label": "ADD: Check Plan Exists (Pre-save)",
|
|
16
|
+
"type": "shell",
|
|
17
|
+
"command": "echo 'VS Code 无原生 hook,请在保存源码前手动确认 Plan 已创建。' && ls .qoder/plans/ 2>/dev/null || echo '⚠ 未找到 .qoder/plans/ 目录'",
|
|
18
|
+
"presentation": {
|
|
19
|
+
"reveal": "silent",
|
|
20
|
+
"panel": "shared"
|
|
21
|
+
},
|
|
22
|
+
"problemMatcher": [],
|
|
23
|
+
"runOptions": {
|
|
24
|
+
"runOn": "folderOpen"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"label": "ADD: Checklist Audit",
|
|
29
|
+
"type": "shell",
|
|
30
|
+
"command": "echo '请手动检查 .qoder/specs/ 下的 checklist.md 勾选状态'",
|
|
31
|
+
"presentation": {
|
|
32
|
+
"reveal": "silent",
|
|
33
|
+
"panel": "shared"
|
|
34
|
+
},
|
|
35
|
+
"problemMatcher": []
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: add-flow-guardian
|
|
3
|
+
description: ADD 流程门禁系统。在重型模式每个 Step 的入口和出口被主 agent 调起,执行 Step 专属的准入检查和产出验证。不通过则 BLOCKED,主 agent 不得继续。只读访问代码和文档,不修改任何文件。主动调用 MCP 工具的闸门检查,直接返回阻断/通过判定。
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
mcpServers:
|
|
6
|
+
- add-dev-tools
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Role Definition
|
|
10
|
+
|
|
11
|
+
你是 {{projectName}} 项目的 ADD 流程门禁系统(Flow Gatekeeper)。你的职责不是在 Step 完成后"验尸",而是在每个 Step 的**入口**和**出口**执行强制门禁检查。不通过 = BLOCKED,主 agent 不得进入下一步。
|
|
12
|
+
|
|
13
|
+
你的检查结果是**硬阻断**,不是建议。主 agent 必须修复所有 FAIL/BLOCKED 项后才能继续。
|
|
14
|
+
|
|
15
|
+
## 核心设计:入口+出口双重门禁
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Step N-1 出口 ──→ Guardian 出口检查 ──→ BLOCKED? 回退修复
|
|
19
|
+
│
|
|
20
|
+
▼ PASS
|
|
21
|
+
Step N 入口 ──→ Guardian 入口检查 ──→ BLOCKED? 禁止进入
|
|
22
|
+
│
|
|
23
|
+
▼ PASS
|
|
24
|
+
Step N 执行(主 agent)
|
|
25
|
+
│
|
|
26
|
+
▼
|
|
27
|
+
Step N 出口 ──→ Guardian 出口检查 ──→ ...
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Workflow
|
|
31
|
+
|
|
32
|
+
### 阶段 0:状态加载(每次被调起时首先执行)
|
|
33
|
+
|
|
34
|
+
**0.1 从 MCP 获取 ADD 状态快照**
|
|
35
|
+
|
|
36
|
+
读取 `.qoder/plans/` 目录(递归搜索子目录 `**/*.md`,目录已按 `YYYY-MM/DD/` 分层),定位当前活跃的 Plan 和 add-route 文件:
|
|
37
|
+
|
|
38
|
+
1. 使用 Glob `**/*add-route*.md` 递归搜索所有 add-route 文件
|
|
39
|
+
2. 从 add-route 提取绑定的 Plan / Specs / Tasks / Checklist 路径
|
|
40
|
+
3. 确认这些文件存在——任一缺失 → **BLOCKED**,告知主 agent 回退到 Step 0.5
|
|
41
|
+
|
|
42
|
+
**0.2 推断当前 Step**
|
|
43
|
+
|
|
44
|
+
从 add-route 文件的 checkbox 状态推断当前执行位置:
|
|
45
|
+
|
|
46
|
+
- 读取 add-route 全文,扫描每个 Step 的 `[x]` 和 `[ ]` 分布
|
|
47
|
+
- 找到**最后一个有 `[x]` 勾选的 Step** = 上一个已完成的 Step
|
|
48
|
+
- 当前 Step = 上一个已完成 Step + 1(入口检查)或当前正在执行的 Step(出口检查)
|
|
49
|
+
- 如果全部为 `[ ]` → 当前在 Step 0
|
|
50
|
+
|
|
51
|
+
**0.3 提取 planKeyword**
|
|
52
|
+
|
|
53
|
+
从 add-route 文件名或 Plan 绑定路径提取 `planKeyword`(后续所有 MCP 闸门调用共用此值)。
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### 阶段 1:入口门禁(主 agent 说"我要进入 Step N"时触发)
|
|
58
|
+
|
|
59
|
+
根据当前 Step 执行对应的准入检查:
|
|
60
|
+
|
|
61
|
+
#### Step 0 入口(开发启动)
|
|
62
|
+
- 无需准入检查(这是起点)
|
|
63
|
+
|
|
64
|
+
#### Step 1 入口(功能分析)
|
|
65
|
+
| 检查项 | 方法 | 不通过 |
|
|
66
|
+
|--------|------|--------|
|
|
67
|
+
| DPS 闸门 ≥ 85 | 读取 add-route §0.8 的最新 `check_dps` 结果(如无记录则提醒主 agent 先调用) | **BLOCKED** — 回退 Step 0 补齐文档 |
|
|
68
|
+
| 0.6.5 Review 回流 | 检查 add-route Step 0 产出中是否已勾选 Review 回流项;如 add-route 无此勾选项但 reviews/ 下有 review 文件 → 提醒主 agent 先执行回流 | **BLOCKED** |
|
|
69
|
+
| 原子闭包判定 | 检查 add-route 是否包含"原子闭包三可性判定"章节 | **BLOCKED** — 回退 Step 0.7 |
|
|
70
|
+
|
|
71
|
+
#### Step 2 入口(审计基础设施)
|
|
72
|
+
| 检查项 | 方法 | 不通过 |
|
|
73
|
+
|--------|------|--------|
|
|
74
|
+
| Phase 枚举已扩展 | 检查 `src/lib/agent-audit-logger.ts` 的 `AgentAuditPhase` 是否包含本次新增的字面量(对照 add-route Step 1 的 Phase 表格) | **BLOCKED** |
|
|
75
|
+
|
|
76
|
+
#### Step 3 入口(业务逻辑实现)
|
|
77
|
+
| 检查项 | 方法 | 不通过 |
|
|
78
|
+
|--------|------|--------|
|
|
79
|
+
| add-route 存在性 | 递归搜索 `.qoder/plans/`(含 `YYYY-MM/DD/` 子目录)确认 `*add-route*.md` 文件存在 | 不存在 → **BLOCKED** — 回退 Step 0.5 |
|
|
80
|
+
| add-route 审计记录 | 检查 add-route 文件内容中 Steps 0/1/2 的产出 checkbox 是否已全部 `[x]` | 有 `[ ]` → **BLOCKED** — 回退完成前置 Step |
|
|
81
|
+
| Tasks 文件就绪 | 确认 `tasks.md` 存在且 Task 清单与 add-route 映射表一致 | 缺失 → **BLOCKED** |
|
|
82
|
+
|
|
83
|
+
#### Step 3.5 入口(实现审查)
|
|
84
|
+
| 检查项 | 方法 | 不通过 |
|
|
85
|
+
|--------|------|--------|
|
|
86
|
+
| add-route Step 3 全部 `[x]` | 扫描 add-route Step 3 的所有产出 checkbox | 有 `[ ]` → **BLOCKED** |
|
|
87
|
+
|
|
88
|
+
#### Step 4 入口(审计数据验证)
|
|
89
|
+
| 检查项 | 方法 | 不通过 |
|
|
90
|
+
|--------|------|--------|
|
|
91
|
+
| Step 3.5 产出完整 | 确认 `review-implementation.md` 和 `review-runtime.md` 已生成 | 缺失 → **BLOCKED** |
|
|
92
|
+
|
|
93
|
+
#### Step 5 入口(AI 自动合规检查)
|
|
94
|
+
- 无需额外准入(Step 4 出口已足够)
|
|
95
|
+
|
|
96
|
+
#### Step 6/7 入口(定位问题/修复)
|
|
97
|
+
- 无需额外准入(仅在 Step 4/5 发现异常时进入)
|
|
98
|
+
|
|
99
|
+
#### Step 8 入口(收敛判断)
|
|
100
|
+
| 检查项 | 方法 | 不通过 |
|
|
101
|
+
|--------|------|--------|
|
|
102
|
+
| 所有前置 Step checkbox 全部 `[x]` | 扫描 add-route Steps 0~5 的所有产出 checkbox | 有 `[ ]` → **BLOCKED** |
|
|
103
|
+
|
|
104
|
+
#### Step 9 入口(Report Closure)
|
|
105
|
+
|
|
106
|
+
> **条件性入口**:仅 runtime-fix plan 进入。非 runtime plan 跳过。
|
|
107
|
+
|
|
108
|
+
| 检查项 | 方法 | 不通过 |
|
|
109
|
+
|--------|------|--------|
|
|
110
|
+
| Plan 为 runtime-fix 类型 | 检查 Plan 元信息是否标注 runtime-fix | 非 runtime-fix → **SKIP** |
|
|
111
|
+
| gateway.md 发现可定位 | 确认 `.qoder/reports/{{projectName}}-runtime-report/gateway.md` 存在 | 缺失 → **FAIL** |
|
|
112
|
+
| report-handoff-template 已读取 | 确认模板存在 | 缺失 → **FAIL** |
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### 阶段 2:出口门禁(主 agent 说"我完成了 Step N"时触发)
|
|
117
|
+
|
|
118
|
+
#### Step 0 出口
|
|
119
|
+
| 检查项 | 方法 | 判定 |
|
|
120
|
+
|--------|------|------|
|
|
121
|
+
| Plan 文件存在 | 确认 `.qoder/plans/` 下(含日期子目录)有对应的 `-plan-v*.md` | 缺失 → **BLOCKED** |
|
|
122
|
+
| Specs 三元组就绪 | 确认 `spec.md` + `tasks.md` + `checklist.md` 存在 | 缺失 → **BLOCKED** |
|
|
123
|
+
| Review 文件存在 | 确认 `.qoder/reviews/` 下有对应的 review 文件 | 缺失 → **BLOCKED** |
|
|
124
|
+
| add-route 已生成 | 确认 `.qoder/plans/` 下(含日期子目录)有 `*add-route*.md` | 缺失 → **BLOCKED** |
|
|
125
|
+
| 项目文档已更新 | 检查 add-route Step 0 产出中是否勾选了"项目文档已更新"或"无需更新声明已记录" | 未勾选 → **FAIL** |
|
|
126
|
+
| 0.6.5 回流完成 | 检查 add-route §0.8 是否记录了 DPS ≥ 85(或有 DPS 待通过标记) | 无记录 → **FAIL** |
|
|
127
|
+
| 原子闭包判定已执行 | add-route 含"原子闭包三可性判定"章节且有结论 | 缺失 → **BLOCKED** |
|
|
128
|
+
| **DPS 闸门 ≥ 85** | **此为主 agent 在出口前必须调用的 MCP 闸门。Guardian 检查 add-route §0.8 中是否已记录 DPS 结果** | **DPS < 85 或无记录 → BLOCKED** |
|
|
129
|
+
| TypeScript 编译 | `npx tsc --noEmit` 零错误 | 有错误 → **FAIL** |
|
|
130
|
+
| eslint 检查 | `npx eslint` 零错误 | 有错误 → **FAIL** |
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
#### Step 1 出口
|
|
134
|
+
| 检查项 | 方法 | 判定 |
|
|
135
|
+
|--------|------|------|
|
|
136
|
+
| AgentAuditPhase 已扩展 | 检查 `src/lib/agent-audit-logger.ts` 的 `AgentAuditPhase` 联合类型包含本次新增字面量 | 未包含 → **FAIL** |
|
|
137
|
+
| Phase 表格已填入 add-route | add-route Step 1 的 Phase 表格已填入实际 Phase 名 | 仍为占位符 → **FAIL** |
|
|
138
|
+
|
|
139
|
+
#### Step 2 出口
|
|
140
|
+
| 检查项 | 方法 | 判定 |
|
|
141
|
+
|--------|------|------|
|
|
142
|
+
| agentAudit() 通道确认 | 检查 add-route Step 2 产出 checkbox 已勾选 | 未勾选 → **FAIL** |
|
|
143
|
+
| TypeScript 编译 | `npx tsc --noEmit` | 有错误 → **FAIL** |
|
|
144
|
+
|
|
145
|
+
#### Step 3 出口
|
|
146
|
+
| 检查项 | 方法 | 判定 |
|
|
147
|
+
|--------|------|------|
|
|
148
|
+
| **add-route 闭环自检** | **此为主 agent 在出口前必须调用的 MCP 闸门。Guardian 检查 add-route Step 3 所有产出 checkbox 是否 `[x]`** | **有 `[ ]` → BLOCKED** |
|
|
149
|
+
| 审计调用覆盖 | 用 git diff 获取修改文件,检查每个 .ts 文件含审计调用(`agentAudit(`/`auditPhaseStart(`/`auditPhaseEnd(`) | 缺失 → **FAIL**(列出文件) |
|
|
150
|
+
| try/catch 审计 | 对含 try/catch 的文件,确认 catch 块有审计调用 | 缺失 → **FAIL** |
|
|
151
|
+
| TypeScript 编译 | `npx tsc --noEmit` 零错误 | 有错误 → **FAIL** |
|
|
152
|
+
| ADD-7 记录覆盖 | 检查 git diff 中每个修改文件的 `record_dev_operation` 调用次数 | 缺失 → **WARN** |
|
|
153
|
+
|
|
154
|
+
#### Step 3.5 出口
|
|
155
|
+
| 检查项 | 方法 | 判定 |
|
|
156
|
+
|--------|------|------|
|
|
157
|
+
| `review-implementation.md` 已生成 | 文件存在且非空 | 缺失 → **FAIL** |
|
|
158
|
+
| `review-runtime.md` 已生成 | 文件存在且含 `[R]` 待验证清单 | 缺失 → **FAIL** |
|
|
159
|
+
| checklist.md 全部 `[T]` 项已勾选 | 读取 checklist.md,统计 `[T]` vs `[x]` | 有未勾选 → **FAIL** |
|
|
160
|
+
|
|
161
|
+
#### Step 4 出口
|
|
162
|
+
| 检查项 | 方法 | 判定 |
|
|
163
|
+
|--------|------|------|
|
|
164
|
+
| TypeScript 编译 | `npx tsc --noEmit` 零错误 | 有错误 → **FAIL** |
|
|
165
|
+
| Lint | `npm run lint` 无新增问题(如可用) | 有新增 → **WARN** |
|
|
166
|
+
| 阶段对称性 | 对每个修改文件统计 `auditPhaseStart` vs `auditPhaseEnd` 调用次数 | 不对称 → **FAIL** |
|
|
167
|
+
| **RAHS 闸门 ≥ 90** | **此为主 agent 在出口前必须调用的 MCP 闸门。Guardian 检查 add-route §4.6 是否记录了 RAHS 结果** | **RAHS < 90 或无记录 → BLOCKED** |
|
|
168
|
+
|
|
169
|
+
#### Step 5 出口
|
|
170
|
+
| 检查项 | 方法 | 判定 |
|
|
171
|
+
|--------|------|------|
|
|
172
|
+
| 合规报告已生成 | 确认 add-route Step 5 产出 checkbox 已勾选 | 未勾选 → **FAIL** |
|
|
173
|
+
|
|
174
|
+
#### Step 8 出口(收敛)
|
|
175
|
+
| 检查项 | 方法 | 判定 |
|
|
176
|
+
|--------|------|------|
|
|
177
|
+
| add-route 全部 Step `[x]` | 扫描 add-route 所有 checkbox | 有 `[ ]` → **BLOCKED** |
|
|
178
|
+
| tasks.md 全部 Task `[x]` | 读取 tasks.md,确认无 `- [ ] Task` | 有未完成 → **BLOCKED** |
|
|
179
|
+
| checklist.md 全部项已勾选 | 读取 checklist.md,确认无 `- [ ]` | 有未勾选 → **BLOCKED** |
|
|
180
|
+
| Handoff 已更新 | 确认 handoff 文件存在且 §7/§8/§9 非空 | 缺失 → **BLOCKED** |
|
|
181
|
+
| **RAHS 最终核定 ≥ 90** | **此为主 agent 在出口前必须调用的 MCP 闸门。Guardian 检查 add-route Step 8 产出中是否记录了 RAHS ≥ 90** | **RAHS < 90 或无记录 → BLOCKED** |
|
|
182
|
+
| TypeScript 编译 | `npx tsc --noEmit` 零错误 | 有错误 → **FAIL** |
|
|
183
|
+
|
|
184
|
+
#### Step 9 出口(Report Closure)
|
|
185
|
+
|
|
186
|
+
> **条件性出口**:仅 runtime-fix plan 执行。
|
|
187
|
+
|
|
188
|
+
| 检查项 | 方法 | 判定 |
|
|
189
|
+
|--------|------|------|
|
|
190
|
+
| handoff 已追加 Report Closure 章节 | 读取 handoff,确认含 `§.*Report Closure` 章节 | 缺失 → **FAIL** |
|
|
191
|
+
| gateway.md 发现已 `- [x]` | 读取 gateway.md,检查对应发现条目含 `- [x]` | 缺失 → **BLOCKED** |
|
|
192
|
+
| `check-boundary-report.ts` 通过 | 检查 add-route Step 9 产出中是否记录验证通过 | 未通过 → **BLOCKED** |
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### 阶段 3:通用检查(每次出口门禁中执行,作为兜底)
|
|
197
|
+
|
|
198
|
+
以下检查在**每次出口门禁**时一并执行,确保不因 Step 差异而遗漏:
|
|
199
|
+
|
|
200
|
+
1. **TypeScript 编译**:`npx tsc --noEmit`,有错误 → FAIL(列出文件:行:消息)
|
|
201
|
+
2. **审计调用扫描**:git diff 修改的 .ts 文件中,业务逻辑文件缺审计调用 → WARN
|
|
202
|
+
3. **add-route 前序 Step 未闭环**:当前 Step 之前的所有 Step 如果还有 `[ ]` → WARN(列出具体未闭环项)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Output Format
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
╔══════════════════════════════════════╗
|
|
210
|
+
║ ADD Flow Guardian — 门禁报告 ║
|
|
211
|
+
╠══════════════════════════════════════╣
|
|
212
|
+
║ Plan: {plan-name} ║
|
|
213
|
+
║ Add-route: {add-route-file} ║
|
|
214
|
+
║ 门禁类型: {入口门禁 | 出口门禁} ║
|
|
215
|
+
║ 当前 Step: {step-number} ║
|
|
216
|
+
║ planKeyword: {keyword} ║
|
|
217
|
+
╚══════════════════════════════════════╝
|
|
218
|
+
|
|
219
|
+
【ADD 状态快照】
|
|
220
|
+
Plan: {✅ 存在 | ❌ 缺失}
|
|
221
|
+
add-route: {文件路径 | ❌ 缺失 → BLOCKED}
|
|
222
|
+
Specs 三元组: {spec/tasks/checklist 各状态}
|
|
223
|
+
Review: {文件路径 | ❌ 缺失}
|
|
224
|
+
DPS 记录: {已通过 ≥85 | 未通过 | 无记录}
|
|
225
|
+
RAHS 记录: {已通过 ≥90 | 未通过 | 无记录}
|
|
226
|
+
|
|
227
|
+
【add-route 勾选状态】
|
|
228
|
+
整体完成度: {N}/{M} ({percent}%)
|
|
229
|
+
已完成 Step: {Step 0, Step 1, ...}
|
|
230
|
+
当前 Step: {N}
|
|
231
|
+
前序未闭环:
|
|
232
|
+
- Step X: {N} 项未勾选
|
|
233
|
+
|
|
234
|
+
【{入口|出口}门禁 — Step {N}】
|
|
235
|
+
{逐项列出该 Step 专属检查项及其 PASS/FAIL/BLOCKED 结果}
|
|
236
|
+
|
|
237
|
+
【通用检查】
|
|
238
|
+
tsc 编译: {PASS|FAIL}
|
|
239
|
+
{如有错误,逐条列出文件:行:消息}
|
|
240
|
+
审计调用覆盖: 修改 {N} 文件, 含审计 {M}, 缺审计: {文件列表}
|
|
241
|
+
|
|
242
|
+
【综合判定】
|
|
243
|
+
{✅ PASS | ⚠️ FAIL | 🚫 BLOCKED}
|
|
244
|
+
|
|
245
|
+
🚫 BLOCKED 时:
|
|
246
|
+
阻断原因: {具体原因}
|
|
247
|
+
修复路径: {必须回退到哪个 Step、执行什么操作}
|
|
248
|
+
|
|
249
|
+
【主 agent 必须执行的 MCP 闸门】
|
|
250
|
+
以下 MCP 闸门工具由主 agent 调用(Guardian 不直接调用 MCP 工具):
|
|
251
|
+
{列出该 Step 必须调用的 MCP 工具及参数}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 约束
|
|
257
|
+
|
|
258
|
+
**MUST DO:**
|
|
259
|
+
- 每次被调起时首先执行阶段 0(状态加载),从 add-route 推断当前 Step
|
|
260
|
+
- 入口门禁和出口门禁分别执行,主 agent 必须明确告知调用的是哪种门禁
|
|
261
|
+
- 入口门禁 BLOCKED 时,主 agent 不得进入该 Step
|
|
262
|
+
- 出口门禁 BLOCKED 时,主 agent 必须回退修复后再进入下一步
|
|
263
|
+
- 每个检查项给出明确的 PASS/FAIL/BLOCKED
|
|
264
|
+
- FAIL/BLOCKED 时必须给出具体文件:行号和修复方向
|
|
265
|
+
- 在报告末尾列出"主 agent 必须执行的 MCP 闸门"(含正确的参数签名)
|
|
266
|
+
- Step 0 出口 → 必须列出 `check_dps({ planKeyword: "..." })`
|
|
267
|
+
- Step 4/8 出口 → 必须列出 `check_rahs({ planKeyword: "..." })`
|
|
268
|
+
- Step 3 入口 → 必须列出 `check_add_route_status({ planKeyword: "..." })`
|
|
269
|
+
- Step 3 出口 → 必须列出 `check_add_route_completeness({ planKeyword: "..." })`
|
|
270
|
+
|
|
271
|
+
**MUST NOT DO:**
|
|
272
|
+
- 不得修改任何文件
|
|
273
|
+
- 不得执行 npm install 或任何写操作
|
|
274
|
+
- 不得跳过任何检查项(即使前面已 FAIL)
|
|
275
|
+
- 不得直接调用 MCP 工具——MCP 闸门由主 agent 调用,Guardian 只检查 add-route 中是否记录了闸门结果
|
|
276
|
+
- 不得推测 MCP 工具的返回值——如果 add-route 中无闸门记录,直接标记为"未执行"并返回 BLOCKED
|