mcp-probe-kit 3.0.24 → 3.2.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.
Files changed (142) hide show
  1. package/README.md +755 -779
  2. package/build/index.js +42 -41
  3. package/build/lib/__tests__/spec-validator.unit.test.js +115 -0
  4. package/build/lib/agents-md-template.js +32 -32
  5. package/build/lib/memory-orchestration.js +29 -8
  6. package/build/lib/skill-bridge.js +12 -12
  7. package/build/lib/spec-validator.d.ts +36 -0
  8. package/build/lib/spec-validator.js +103 -0
  9. package/build/lib/template-loader.js +149 -47
  10. package/build/lib/tool-annotations.d.ts +30 -0
  11. package/build/lib/tool-annotations.js +55 -0
  12. package/build/lib/toolset-manager.js +2 -0
  13. package/build/resources/index.d.ts +4 -0
  14. package/build/resources/index.js +4 -0
  15. package/build/resources/tool-params-guide.d.ts +571 -0
  16. package/build/resources/tool-params-guide.js +488 -0
  17. package/build/resources/ui-ux-data/guidelines/vercel-web-interface.json +1632 -1632
  18. package/build/resources/ui-ux-data/metadata.json +30 -30
  19. package/build/resources/ui-ux-data/shadcn/blocks.json +2541 -2541
  20. package/build/resources/ui-ux-data/shadcn/components.json +997 -997
  21. package/build/resources/ui-ux-data/themes/presets.json +483 -483
  22. package/build/schemas/index.d.ts +22 -22
  23. package/build/schemas/memory-tools.d.ts +0 -22
  24. package/build/schemas/memory-tools.js +0 -14
  25. package/build/schemas/project-tools.d.ts +22 -0
  26. package/build/schemas/project-tools.js +23 -0
  27. package/build/tools/analyze_project.d.ts +1 -0
  28. package/build/tools/analyze_project.js +527 -0
  29. package/build/tools/check_deps.d.ts +13 -0
  30. package/build/tools/check_deps.js +204 -0
  31. package/build/tools/check_spec.d.ts +7 -0
  32. package/build/tools/check_spec.js +81 -0
  33. package/build/tools/code_insight.js +41 -41
  34. package/build/tools/convert.d.ts +13 -0
  35. package/build/tools/convert.js +599 -0
  36. package/build/tools/css_order.d.ts +13 -0
  37. package/build/tools/css_order.js +81 -0
  38. package/build/tools/debug.d.ts +13 -0
  39. package/build/tools/debug.js +131 -0
  40. package/build/tools/design2code.d.ts +20 -0
  41. package/build/tools/design2code.js +426 -0
  42. package/build/tools/detect_shell.d.ts +6 -0
  43. package/build/tools/detect_shell.js +151 -0
  44. package/build/tools/explain.d.ts +13 -0
  45. package/build/tools/explain.js +390 -0
  46. package/build/tools/fix.d.ts +13 -0
  47. package/build/tools/fix.js +303 -0
  48. package/build/tools/fix_bug.js +161 -161
  49. package/build/tools/gen_mock.d.ts +22 -0
  50. package/build/tools/gen_mock.js +269 -0
  51. package/build/tools/gen_skill.d.ts +13 -0
  52. package/build/tools/gen_skill.js +560 -0
  53. package/build/tools/genapi.d.ts +13 -0
  54. package/build/tools/genapi.js +174 -0
  55. package/build/tools/genchangelog.d.ts +13 -0
  56. package/build/tools/genchangelog.js +250 -0
  57. package/build/tools/gencommit.js +60 -60
  58. package/build/tools/gendoc.d.ts +13 -0
  59. package/build/tools/gendoc.js +232 -0
  60. package/build/tools/genpr.d.ts +13 -0
  61. package/build/tools/genpr.js +194 -0
  62. package/build/tools/genreadme.d.ts +13 -0
  63. package/build/tools/genreadme.js +626 -0
  64. package/build/tools/gensql.d.ts +13 -0
  65. package/build/tools/gensql.js +320 -0
  66. package/build/tools/genui.d.ts +13 -0
  67. package/build/tools/genui.js +803 -0
  68. package/build/tools/index.d.ts +1 -1
  69. package/build/tools/index.js +1 -1
  70. package/build/tools/init_component_catalog.d.ts +22 -0
  71. package/build/tools/init_component_catalog.js +809 -0
  72. package/build/tools/init_project_context.js +432 -432
  73. package/build/tools/init_setting.d.ts +13 -0
  74. package/build/tools/init_setting.js +47 -0
  75. package/build/tools/perf.d.ts +13 -0
  76. package/build/tools/perf.js +409 -0
  77. package/build/tools/render_ui.d.ts +22 -0
  78. package/build/tools/render_ui.js +384 -0
  79. package/build/tools/resolve_conflict.d.ts +13 -0
  80. package/build/tools/resolve_conflict.js +349 -0
  81. package/build/tools/security_scan.d.ts +22 -0
  82. package/build/tools/security_scan.js +323 -0
  83. package/build/tools/split.d.ts +13 -0
  84. package/build/tools/split.js +599 -0
  85. package/build/tools/start_api.d.ts +13 -0
  86. package/build/tools/start_api.js +193 -0
  87. package/build/tools/start_bugfix.js +254 -243
  88. package/build/tools/start_doc.d.ts +13 -0
  89. package/build/tools/start_doc.js +207 -0
  90. package/build/tools/start_feature.js +162 -127
  91. package/build/tools/start_product.js +1 -1
  92. package/build/tools/start_refactor.d.ts +13 -0
  93. package/build/tools/start_refactor.js +188 -0
  94. package/build/tools/start_release.d.ts +13 -0
  95. package/build/tools/start_release.js +167 -0
  96. package/build/tools/start_review.d.ts +13 -0
  97. package/build/tools/start_review.js +175 -0
  98. package/build/tools/start_ui.js +426 -412
  99. package/build/tools/ui-ux-tools.js +290 -290
  100. package/build/utils/__tests__/vercel-guidelines-sync.unit.test.js +12 -12
  101. package/build/utils/themes-sync.js +8 -8
  102. package/package.json +81 -83
  103. package/build/lib/__tests__/memory-orchestration.unit.test.js +0 -88
  104. package/build/lib/__tests__/memory-payload.unit.test.js +0 -35
  105. package/build/lib/cursor-history-client.d.ts +0 -54
  106. package/build/lib/cursor-history-client.js +0 -240
  107. package/build/tools/__tests__/cursor-history.unit.test.js +0 -38
  108. package/build/tools/cursor_read_conversation.d.ts +0 -7
  109. package/build/tools/cursor_read_conversation.js +0 -36
  110. package/docs/.mcp-probe/layout.json +0 -11
  111. package/docs/CNAME +0 -1
  112. package/docs/assets/font/MaterialSymbolsOutlined.codepoints +0 -4102
  113. package/docs/assets/font/MaterialSymbolsOutlined.ttf +0 -0
  114. package/docs/assets/font/noto-sans-sc-400.ttf +0 -0
  115. package/docs/assets/font/noto-sans-sc-700.ttf +0 -0
  116. package/docs/assets/font/noto-sans-sc-900.ttf +0 -0
  117. package/docs/assets/js/i18n.js +0 -375
  118. package/docs/assets/js/tailwind.js +0 -83
  119. package/docs/assets/logo-zh.png +0 -0
  120. package/docs/assets/logo.png +0 -0
  121. package/docs/data/tools.js +0 -523
  122. package/docs/i18n/all-tools/en.json +0 -190
  123. package/docs/i18n/all-tools/ja.json +0 -171
  124. package/docs/i18n/all-tools/ko.json +0 -171
  125. package/docs/i18n/all-tools/zh-CN.json +0 -190
  126. package/docs/i18n/en.json +0 -626
  127. package/docs/i18n/ja.json +0 -602
  128. package/docs/i18n/ko.json +0 -602
  129. package/docs/i18n/zh-CN.json +0 -626
  130. package/docs/index.html +0 -327
  131. package/docs/memory-local-setup.md +0 -315
  132. package/docs/memory-local-setup.zh-CN.md +0 -283
  133. package/docs/pages/all-tools.html +0 -515
  134. package/docs/pages/examples.html +0 -717
  135. package/docs/pages/getting-started.html +0 -964
  136. package/docs/pages/migration.html +0 -308
  137. package/docs/specs/user-auth/design.md +0 -82
  138. package/docs/specs/user-auth/requirements.md +0 -52
  139. package/docs/specs/user-auth/tasks.md +0 -55
  140. /package/build/lib/__tests__/{memory-orchestration.unit.test.d.ts → spec-validator.unit.test.d.ts} +0 -0
  141. /package/build/{lib/__tests__/memory-payload.unit.test.d.ts → utils/design-docs-generator.d.ts} +0 -0
  142. /package/build/{tools/__tests__/cursor-history.unit.test.d.ts → utils/design-docs-generator.js} +0 -0
@@ -25,6 +25,15 @@ const EMBEDDED_TEMPLATES = {
25
25
 
26
26
  {description}
27
27
 
28
+ > 用一段话点明"做什么、给谁用、解决什么问题"。
29
+
30
+ ## 历史经验与坑(来自记忆库)
31
+
32
+ > 开干前先看 start_feature 注入的「⚠️ 历史坑 / ♻️ 可复用经验」,把与本功能相关的条目落到这里;没有就写"暂无"。
33
+
34
+ - **可复用经验**: [填写:可直接复用的历史模式/做法]
35
+ - **必须规避的坑**: [填写:历史同类问题的根因与规避方式]
36
+
28
37
  ## 术语定义
29
38
 
30
39
  - **[术语1]**: [填写:定义]
@@ -32,44 +41,68 @@ const EMBEDDED_TEMPLATES = {
32
41
 
33
42
  ---
34
43
 
44
+ ## 范围边界
45
+
46
+ **In Scope(本次要做)**
47
+ - [填写:明确纳入本次的能力点]
48
+
49
+ **Out of Scope(本次不做,避免过度实现)**
50
+ - [填写:明确排除的能力点;没有就写"暂无"]
51
+
52
+ ---
53
+
35
54
  ## 需求列表
36
55
 
37
- ### 需求 1: [填写:需求标题]
56
+ > 每条需求一个稳定 ID(FR-1、FR-2…)。该 ID 会被 design.md 与 tasks.md 引用,三处必须一致。
38
57
 
58
+ ### FR-1: [填写:需求标题]
59
+
60
+ **优先级:** [填写:Must / Should / Could](MoSCoW)
39
61
  **用户故事:** 作为 [填写:角色],我想要 [填写:功能],以便 [填写:目标]。
40
62
 
41
- #### 验收标准
63
+ #### 验收标准(EARS)
42
64
 
43
65
  1. WHEN [填写:触发条件] THEN 系统 SHALL [填写:响应]
44
66
  2. WHILE [填写:状态条件] THE 系统 SHALL [填写:响应]
45
67
  3. IF [填写:异常条件] THEN 系统 SHALL [填写:处理方式]
46
68
 
47
- ---
69
+ ### FR-2: [填写:需求标题]
48
70
 
49
- ## 非功能需求
71
+ **优先级:** [填写:Must / Should / Could]
72
+ **用户故事:** 作为 [填写:角色],我想要 [填写:功能],以便 [填写:目标]。
50
73
 
51
- ### 性能要求
52
- - [填写:性能相关需求]
74
+ #### 验收标准(EARS)
53
75
 
54
- ### 安全要求
55
- - [填写:安全相关需求]
76
+ 1. WHEN [填写:触发条件] THEN 系统 SHALL [填写:响应]
77
+ 2. IF [填写:异常条件] THEN 系统 SHALL [填写:处理方式]
56
78
 
57
- ### 兼容性要求
58
- - [填写:兼容性相关需求]
79
+ > 按实际拆分增减 FR-n;每条需求应可独立验收。
80
+
81
+ ---
82
+
83
+ ## 非功能需求
84
+
85
+ - **NFR-1(性能)**: [填写:尽量给可量化指标]
86
+ - **NFR-2(安全)**: [填写:安全相关需求]
87
+ - **NFR-3(兼容性)**: [填写:兼容性相关需求]
59
88
 
60
89
  ---
61
90
 
62
91
  ## 依赖关系
63
92
 
64
- - [填写:列出与其他功能的依赖]
93
+ - [填写:列出与其他功能/模块/外部服务的依赖]
65
94
 
66
95
  ---
67
96
 
68
97
  ## 检查清单
69
98
 
99
+ - [ ] 已消化记忆库的历史经验,并逐条规避「历史坑」
70
100
  - [ ] 需求覆盖核心场景与边界场景
71
- - [ ] 验收标准使用 EARS 格式
72
- - [ ] 非功能需求明确
101
+ - [ ] 每条需求有唯一 ID(FR-n),将在 design.md / tasks.md 中被引用
102
+ - [ ] 验收标准使用 EARS 格式且可测
103
+ - [ ] 已标注优先级(MoSCoW)
104
+ - [ ] 范围边界(In/Out of Scope)明确
105
+ - [ ] 非功能需求明确、尽量可量化
73
106
  - [ ] 依赖关系完整
74
107
  `,
75
108
  'specs/feature/guided/design.md': `# 设计文档:{feature_name}
@@ -78,7 +111,10 @@ const EMBEDDED_TEMPLATES = {
78
111
 
79
112
  {description}
80
113
 
81
- 本设计文档描述 {feature_name} 功能的技术实现方案。
114
+ 本设计描述 {feature_name} 功能的技术实现方案。
115
+
116
+ **对应需求:** [填写:本设计覆盖的需求 ID,如 FR-1, FR-2, NFR-1]
117
+ > 设计应覆盖 requirements.md 的全部 FR;某条 FR 不在本设计范围请在此注明原因。
82
118
 
83
119
  ---
84
120
 
@@ -86,13 +122,13 @@ const EMBEDDED_TEMPLATES = {
86
122
 
87
123
  ### 技术选型
88
124
 
89
- | 类别 | 选择 | 理由 |
90
- |------|------|------|
91
- | [填写:类别] | [填写:技术] | [填写:选择理由] |
125
+ | 类别 | 选择 | 理由 | 关联需求 |
126
+ |------|------|------|----------|
127
+ | [填写:类别] | [填写:技术] | [填写:选择理由] | [填写:FR-n] |
92
128
 
93
129
  ### 架构设计
94
130
 
95
- [填写:描述功能的架构设计,参考项目现有架构]
131
+ [填写:描述功能的架构设计,参考项目现有架构与目录约定]
96
132
 
97
133
  \`\`\`
98
134
  [填写:架构图或流程图,使用 ASCII 或 Mermaid]
@@ -102,19 +138,27 @@ const EMBEDDED_TEMPLATES = {
102
138
 
103
139
  ## 数据模型
104
140
 
105
- [填写:如果功能涉及数据存储,描述数据模型]
141
+ [填写:若涉及数据存储,给出实体/字段/类型/约束;无则写"不涉及"]
142
+
143
+ | 实体/字段 | 类型 | 约束 | 说明 |
144
+ |-----------|------|------|------|
145
+ | [填写] | [填写] | [填写] | [填写] |
106
146
 
107
147
  ---
108
148
 
109
149
  ## API 设计
110
150
 
111
- [填写:如果功能涉及 API,描述 API 设计]
151
+ [填写:若涉及对外接口/函数契约,给出签名与出入参;无则写"不涉及"]
152
+
153
+ | 方法/函数 | 路径/签名 | 入参 | 出参 | 关联需求 |
154
+ |-----------|-----------|------|------|----------|
155
+ | [填写] | [填写] | [填写] | [填写] | [填写:FR-n] |
112
156
 
113
157
  ---
114
158
 
115
159
  ## 文件结构
116
160
 
117
- [填写:描述功能涉及的文件和目录]
161
+ [填写:对照项目上下文与代码图谱列出新增/修改的真实文件路径,勿臆造]
118
162
 
119
163
  \`\`\`
120
164
  [项目目录]/
@@ -127,7 +171,7 @@ const EMBEDDED_TEMPLATES = {
127
171
 
128
172
  ## 设计决策
129
173
 
130
- ### 决策 1: [填写:决策标题]
174
+ ### 决策 1: [填写:决策标题](关联需求: [填写:FR-n])
131
175
 
132
176
  **问题**: [填写:描述面临的问题]
133
177
 
@@ -141,6 +185,12 @@ const EMBEDDED_TEMPLATES = {
141
185
 
142
186
  ---
143
187
 
188
+ ## 测试策略
189
+
190
+ [填写:如何验证本设计满足各 FR 的验收标准——单测/集成/手测要点]
191
+
192
+ ---
193
+
144
194
  ## 风险评估
145
195
 
146
196
  | 风险 | 影响 | 缓解措施 |
@@ -152,24 +202,30 @@ const EMBEDDED_TEMPLATES = {
152
202
  ## 检查清单
153
203
 
154
204
  - [ ] 技术方案与现有架构一致
155
- - [ ] 数据模型与接口定义清晰
156
- - [ ] 关键设计决策已记录
205
+ - [ ] requirements.md 中每条 FR 都被本设计覆盖(或注明不涉及)
206
+ - [ ] 文件结构对照真实代码库,路径可定位
207
+ - [ ] 数据模型 / 接口契约清晰(含类型与约束)
208
+ - [ ] 关键设计决策已记录并关联需求
209
+ - [ ] 测试策略可验证验收标准
157
210
  `,
158
211
  'specs/feature/guided/tasks.md': `# 任务清单:{feature_name}
159
212
 
160
213
  ## 概述
161
214
 
162
- 实现 {feature_name} 功能的任务分解。
215
+ 实现 {feature_name} 功能的任务分解。每条任务都要回链到需求(FR)与设计章节,确保不漏、不越界。
163
216
 
164
217
  ---
165
218
 
166
219
  ## 任务列表
167
220
 
221
+ > 每条任务:动词开头、单一明确、可在一次提交内完成,并标注 _需求_ 与 _设计_。
222
+ > 示例:2.1 实现登录接口 POST /api/login — _需求: FR-1_ | _设计: API 设计_
223
+
168
224
  ### 阶段 1: 准备工作
169
225
 
170
226
  - [ ] 1.1 [填写:任务标题]
171
227
  - [填写:具体操作说明]
172
- - _需求: [填写:对应的需求编号]_
228
+ - _需求: [填写:FR-n]_ | _设计: [填写:design.md 章节]_
173
229
 
174
230
  ---
175
231
 
@@ -177,15 +233,18 @@ const EMBEDDED_TEMPLATES = {
177
233
 
178
234
  - [ ] 2.1 [填写:任务标题]
179
235
  - [填写:具体操作说明]
180
- - _需求: [填写:对应的需求编号]_
236
+ - _需求: [填写:FR-n]_ | _设计: [填写:design.md 章节]_
237
+ - [ ] 2.2 [填写:任务标题]
238
+ - [填写:具体操作说明]
239
+ - _需求: [填写:FR-n]_ | _设计: [填写:design.md 章节]_
181
240
 
182
241
  ---
183
242
 
184
243
  ### 阶段 3: 集成测试
185
244
 
186
- - [ ] 3.1 [填写:任务标题]
245
+ - [ ] 3.1 [填写:任务标题(对照验收标准逐条核验)]
187
246
  - [填写:具体操作说明]
188
- - _需求: [填写:对应的需求编号]_
247
+ - _需求: [填写:FR-n]_ | _设计: [填写:design.md 章节]_
189
248
 
190
249
  ---
191
250
 
@@ -197,6 +256,17 @@ const EMBEDDED_TEMPLATES = {
197
256
 
198
257
  ---
199
258
 
259
+ ## 需求覆盖矩阵
260
+
261
+ > 自检:每条 FR 至少对应一个任务;每个任务都能追到某条 FR。空缺即风险。
262
+
263
+ | 需求 ID | 设计章节 | 任务编号 | 状态 |
264
+ |---------|----------|----------|------|
265
+ | [填写:FR-1] | [填写:design 章节] | [填写:1.1, 2.1] | 未开始 |
266
+ | [填写:FR-2] | [填写:design 章节] | [填写:2.2] | 未开始 |
267
+
268
+ ---
269
+
200
270
  ## 文件变更清单
201
271
 
202
272
  | 文件 | 操作 | 说明 |
@@ -207,9 +277,11 @@ const EMBEDDED_TEMPLATES = {
207
277
 
208
278
  ## 检查清单
209
279
 
210
- - [ ] 任务分阶段合理
280
+ - [ ] 任务分阶段合理,粒度可在单次提交内完成
211
281
  - [ ] 每项任务可执行且可验证
212
- - [ ] 任务与需求一一对应
282
+ - [ ] 每条任务都回链到 FR 与 design 章节
283
+ - [ ] 需求覆盖矩阵已填,无遗漏的 FR
284
+ - [ ] 阶段 3 包含"对照验收标准核验"
213
285
  `,
214
286
  'specs/feature/strict/requirements.md': `# 需求文档:{feature_name}
215
287
 
@@ -217,24 +289,43 @@ const EMBEDDED_TEMPLATES = {
217
289
 
218
290
  {description}
219
291
 
292
+ ## 历史经验与坑(来自记忆库)
293
+
294
+ > 把 start_feature 注入的相关「坑 / 可复用经验」落到这里;无则写"暂无"。
295
+
296
+ - **可复用经验**: [填写]
297
+ - **必须规避的坑**: [填写]
298
+
299
+ ---
300
+
301
+ ## 范围边界
302
+
303
+ - **In Scope**: [填写:本次纳入]
304
+ - **Out of Scope**: [填写:本次排除;无则写"暂无"]
305
+
220
306
  ---
221
307
 
222
308
  ## 需求列表
223
309
 
224
- ### 需求 1: [填写:需求标题]
310
+ > 每条需求一个稳定 ID(FR-n),design.md 与 tasks.md 引用时必须一致。
225
311
 
312
+ ### FR-1: [填写:需求标题]
313
+
314
+ **优先级:** [填写:Must / Should / Could]
226
315
  **用户故事:** 作为 [填写:角色],我想要 [填写:功能],以便 [填写:目标]。
227
316
 
228
- #### 验收标准
317
+ #### 验收标准(EARS)
229
318
 
230
319
  1. WHEN [填写:触发条件] THEN 系统 SHALL [填写:响应]
231
320
  2. IF [填写:异常条件] THEN 系统 SHALL [填写:处理方式]
232
321
 
322
+ > 按需增加 FR-2、FR-3…
323
+
233
324
  ---
234
325
 
235
326
  ## 非功能需求
236
327
 
237
- - [填写:性能/安全/兼容性]
328
+ - **NFR-1**: [填写:性能/安全/兼容性,尽量可量化]
238
329
 
239
330
  ---
240
331
 
@@ -248,15 +339,17 @@ const EMBEDDED_TEMPLATES = {
248
339
 
249
340
  {description}
250
341
 
342
+ **对应需求:** [填写:覆盖的 FR/NFR ID,如 FR-1, FR-2]
343
+
251
344
  ---
252
345
 
253
346
  ## 技术方案
254
347
 
255
348
  ### 技术选型
256
349
 
257
- | 类别 | 选择 | 理由 |
258
- |------|------|------|
259
- | [填写:类别] | [填写:技术] | [填写:理由] |
350
+ | 类别 | 选择 | 理由 | 关联需求 |
351
+ |------|------|------|----------|
352
+ | [填写:类别] | [填写:技术] | [填写:理由] | [填写:FR-n] |
260
353
 
261
354
  ### 架构设计
262
355
 
@@ -266,27 +359,27 @@ const EMBEDDED_TEMPLATES = {
266
359
 
267
360
  ## 数据模型
268
361
 
269
- [填写:数据结构或表设计]
362
+ [填写:数据结构或表设计(字段/类型/约束);无则写"不涉及"]
270
363
 
271
364
  ---
272
365
 
273
366
  ## API 设计
274
367
 
275
- | 方法 | 路径 | 描述 |
276
- |------|------|------|
277
- | [填写:GET/POST/...] | [填写:/path] | [填写:描述] |
368
+ | 方法/函数 | 路径/签名 | 入参/出参 | 关联需求 |
369
+ |------|------|------|----------|
370
+ | [填写:GET/POST/...] | [填写:/path] | [填写] | [填写:FR-n] |
278
371
 
279
372
  ---
280
373
 
281
374
  ## 文件结构
282
375
 
283
- [填写:涉及的文件]
376
+ [填写:对照真实代码库列出新增/修改文件,勿臆造路径]
284
377
 
285
378
  ---
286
379
 
287
380
  ## 设计决策
288
381
 
289
- ### 决策 1: [填写:决策标题]
382
+ ### 决策 1: [填写:决策标题](关联需求: [填写:FR-n])
290
383
 
291
384
  **问题**: [填写:问题]
292
385
  **选项**: [填写:选项]
@@ -304,7 +397,7 @@ const EMBEDDED_TEMPLATES = {
304
397
 
305
398
  ## 概述
306
399
 
307
- 实现 {feature_name} 的任务分解。
400
+ 实现 {feature_name} 的任务分解;每条任务回链 FR 与 design 章节。
308
401
 
309
402
  ---
310
403
 
@@ -312,19 +405,20 @@ const EMBEDDED_TEMPLATES = {
312
405
 
313
406
  ### 阶段 1: 准备工作
314
407
 
315
- - [ ] 1.1 [填写:任务标题]
408
+ - [ ] 1.1 [填写:任务标题] — _需求: [填写:FR-n]_ | _设计: [填写:章节]_
316
409
 
317
410
  ---
318
411
 
319
412
  ### 阶段 2: 核心实现
320
413
 
321
- - [ ] 2.1 [填写:任务标题]
414
+ - [ ] 2.1 [填写:任务标题] — _需求: [填写:FR-n]_ | _设计: [填写:章节]_
415
+ - [ ] 2.2 [填写:任务标题] — _需求: [填写:FR-n]_ | _设计: [填写:章节]_
322
416
 
323
417
  ---
324
418
 
325
419
  ### 阶段 3: 集成测试
326
420
 
327
- - [ ] 3.1 [填写:任务标题]
421
+ - [ ] 3.1 [填写:任务标题(对照验收标准核验)] — _需求: [填写:FR-n]_
328
422
 
329
423
  ---
330
424
 
@@ -336,6 +430,14 @@ const EMBEDDED_TEMPLATES = {
336
430
 
337
431
  ---
338
432
 
433
+ ## 需求覆盖矩阵
434
+
435
+ | 需求 ID | 设计章节 | 任务编号 | 状态 |
436
+ |---------|----------|----------|------|
437
+ | [填写:FR-1] | [填写:design 章节] | [填写:任务号] | 未开始 |
438
+
439
+ ---
440
+
339
441
  ## 文件变更清单
340
442
 
341
443
  | 文件 | 操作 | 说明 |
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 工具注解(MCP Tool Annotations)集中映射
3
+ *
4
+ * 注解是给客户端的「提示」(非安全保证):客户端据此决定是否自动放行、是否提示用户等。
5
+ * - readOnlyHint: 工具不改动其环境(不写用户源码/项目状态)
6
+ * - idempotentHint: 相同入参重复调用无额外副作用
7
+ * - destructiveHint: 可能做破坏性更新(仅在非只读时有意义)
8
+ * - openWorldHint: 会与外部实体交互(HTTP/外部进程),结果可能非确定
9
+ *
10
+ * 分类:
11
+ * - 只读指南型:仅基于输入/内嵌数据计算并返回指南/计划,不碰用户源码、不触外部
12
+ * - 只读+openWorld:查 Qdrant / 跑 gitnexus 分析 / 结果随仓库或外部变化
13
+ * - 写型:落盘 / 写记忆 / 写缓存(均为非破坏性追加,destructive=false)
14
+ */
15
+ export interface ToolAnnotations {
16
+ title?: string;
17
+ readOnlyHint?: boolean;
18
+ destructiveHint?: boolean;
19
+ idempotentHint?: boolean;
20
+ openWorldHint?: boolean;
21
+ }
22
+ export declare const TOOL_ANNOTATIONS: Record<string, ToolAnnotations>;
23
+ /**
24
+ * 把注解合并进工具定义(用于 ListTools 返回前)。
25
+ */
26
+ export declare function withToolAnnotations<T extends {
27
+ name: string;
28
+ }>(tool: T): T & {
29
+ annotations?: ToolAnnotations;
30
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * 工具注解(MCP Tool Annotations)集中映射
3
+ *
4
+ * 注解是给客户端的「提示」(非安全保证):客户端据此决定是否自动放行、是否提示用户等。
5
+ * - readOnlyHint: 工具不改动其环境(不写用户源码/项目状态)
6
+ * - idempotentHint: 相同入参重复调用无额外副作用
7
+ * - destructiveHint: 可能做破坏性更新(仅在非只读时有意义)
8
+ * - openWorldHint: 会与外部实体交互(HTTP/外部进程),结果可能非确定
9
+ *
10
+ * 分类:
11
+ * - 只读指南型:仅基于输入/内嵌数据计算并返回指南/计划,不碰用户源码、不触外部
12
+ * - 只读+openWorld:查 Qdrant / 跑 gitnexus 分析 / 结果随仓库或外部变化
13
+ * - 写型:落盘 / 写记忆 / 写缓存(均为非破坏性追加,destructive=false)
14
+ */
15
+ export const TOOL_ANNOTATIONS = {
16
+ // —— 只读指南型(可安全自动放行)——
17
+ init_project: { title: '初始化项目', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
18
+ gencommit: { title: '生成提交信息', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
19
+ code_review: { title: '代码审查', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
20
+ gentest: { title: '生成测试', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
21
+ refactor: { title: '重构建议', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
22
+ fix_bug: { title: 'Bug 真因分析指南', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
23
+ add_feature: { title: '生成功能规格模板', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
24
+ estimate: { title: '工作量估算', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
25
+ check_spec: { title: '规格完整性校验', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
26
+ interview: { title: '需求访谈', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
27
+ ask_user: { title: '向用户提问', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
28
+ git_work_report: { title: 'Git 工作报告指南', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
29
+ ui_design_system: { title: '生成设计系统', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
30
+ ui_search: { title: '搜索 UI/UX 数据', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
31
+ start_product: { title: '产品设计编排', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
32
+ // 返回脚本/文件内容 + delegated plan,由 Agent 落盘 .ralph/——工具自身不写
33
+ start_ralph: { title: 'Ralph 循环开发编排', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
34
+ // 只读扫描本地代码、返回候选模式;不写记忆(存储是 memorize_asset 的事)
35
+ scan_and_extract_patterns: { title: '扫描并提取模式', readOnlyHint: true, idempotentHint: true, openWorldHint: false },
36
+ // —— 只读 + 触外部 / 非确定 ——
37
+ search_memory: { title: '检索共享记忆', readOnlyHint: true, idempotentHint: false, openWorldHint: true },
38
+ read_memory_asset: { title: '读取记忆资产', readOnlyHint: true, idempotentHint: true, openWorldHint: true },
39
+ start_ui: { title: 'UI 开发编排', readOnlyHint: true, idempotentHint: false, openWorldHint: true },
40
+ start_onboard: { title: '项目上手编排', readOnlyHint: true, idempotentHint: false, openWorldHint: true },
41
+ code_insight: { title: '代码图谱洞察', readOnlyHint: true, idempotentHint: false, openWorldHint: true },
42
+ start_feature: { title: '新功能开发编排', readOnlyHint: true, idempotentHint: false, openWorldHint: true },
43
+ start_bugfix: { title: 'Bug 修复编排', readOnlyHint: true, idempotentHint: false, openWorldHint: true },
44
+ // —— 写型(工具自身落盘 / 写记忆 / 写缓存,非破坏)——
45
+ init_project_context: { title: '生成项目上下文', readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false }, // 自己写 docs/.mcp-probe/layout.json(其余为指令)
46
+ memorize_asset: { title: '沉淀记忆资产', readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, // 写 Qdrant
47
+ sync_ui_data: { title: '同步 UI 数据', readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, // 下载 + 写缓存
48
+ };
49
+ /**
50
+ * 把注解合并进工具定义(用于 ListTools 返回前)。
51
+ */
52
+ export function withToolAnnotations(tool) {
53
+ const annotations = TOOL_ANNOTATIONS[tool.name];
54
+ return annotations ? { ...tool, annotations } : tool;
55
+ }
@@ -21,6 +21,7 @@ export const TOOLSET_DEFINITIONS = {
21
21
  'refactor',
22
22
  'fix_bug',
23
23
  'add_feature',
24
+ 'check_spec',
24
25
  'init_project',
25
26
  'init_project_context',
26
27
  'estimate',
@@ -42,6 +43,7 @@ export const TOOLSET_DEFINITIONS = {
42
43
  'refactor',
43
44
  'fix_bug',
44
45
  'add_feature',
46
+ 'check_spec',
45
47
  'init_project',
46
48
  'init_project_context',
47
49
  'estimate',
@@ -0,0 +1,4 @@
1
+ /**
2
+ * MCP Resources 统一导出
3
+ */
4
+ export { getToolParamsGuide } from "./tool-params-guide.js";
@@ -0,0 +1,4 @@
1
+ /**
2
+ * MCP Resources 统一导出
3
+ */
4
+ export { getToolParamsGuide } from "./tool-params-guide.js";