@zhuan-ai/zhuanspec 1.3.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 (210) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +461 -0
  3. package/README.zh.md +434 -0
  4. package/bin/zhuanspec.js +3 -0
  5. package/dist/cli/index.d.ts +2 -0
  6. package/dist/cli/index.js +356 -0
  7. package/dist/commands/artifact-workflow.d.ts +13 -0
  8. package/dist/commands/artifact-workflow.js +916 -0
  9. package/dist/commands/change.d.ts +35 -0
  10. package/dist/commands/change.js +277 -0
  11. package/dist/commands/completion.d.ts +72 -0
  12. package/dist/commands/completion.js +221 -0
  13. package/dist/commands/config.d.ts +8 -0
  14. package/dist/commands/config.js +198 -0
  15. package/dist/commands/show.d.ts +14 -0
  16. package/dist/commands/show.js +132 -0
  17. package/dist/commands/spec.d.ts +15 -0
  18. package/dist/commands/spec.js +225 -0
  19. package/dist/commands/validate.d.ts +24 -0
  20. package/dist/commands/validate.js +294 -0
  21. package/dist/core/archive.d.ts +30 -0
  22. package/dist/core/archive.js +438 -0
  23. package/dist/core/artifact-graph/graph.d.ts +56 -0
  24. package/dist/core/artifact-graph/graph.js +141 -0
  25. package/dist/core/artifact-graph/index.d.ts +7 -0
  26. package/dist/core/artifact-graph/index.js +13 -0
  27. package/dist/core/artifact-graph/instruction-loader.d.ts +134 -0
  28. package/dist/core/artifact-graph/instruction-loader.js +180 -0
  29. package/dist/core/artifact-graph/resolver.d.ts +61 -0
  30. package/dist/core/artifact-graph/resolver.js +187 -0
  31. package/dist/core/artifact-graph/schema.d.ts +13 -0
  32. package/dist/core/artifact-graph/schema.js +108 -0
  33. package/dist/core/artifact-graph/state.d.ts +12 -0
  34. package/dist/core/artifact-graph/state.js +54 -0
  35. package/dist/core/artifact-graph/types.d.ts +45 -0
  36. package/dist/core/artifact-graph/types.js +43 -0
  37. package/dist/core/completions/command-registry.d.ts +7 -0
  38. package/dist/core/completions/command-registry.js +362 -0
  39. package/dist/core/completions/completion-provider.d.ts +60 -0
  40. package/dist/core/completions/completion-provider.js +102 -0
  41. package/dist/core/completions/factory.d.ts +51 -0
  42. package/dist/core/completions/factory.js +57 -0
  43. package/dist/core/completions/generators/zsh-generator.d.ts +58 -0
  44. package/dist/core/completions/generators/zsh-generator.js +319 -0
  45. package/dist/core/completions/installers/zsh-installer.d.ts +136 -0
  46. package/dist/core/completions/installers/zsh-installer.js +449 -0
  47. package/dist/core/completions/types.d.ts +78 -0
  48. package/dist/core/completions/types.js +2 -0
  49. package/dist/core/config-schema.d.ts +76 -0
  50. package/dist/core/config-schema.js +200 -0
  51. package/dist/core/config.d.ts +16 -0
  52. package/dist/core/config.js +29 -0
  53. package/dist/core/configurators/agents.d.ts +8 -0
  54. package/dist/core/configurators/agents.js +15 -0
  55. package/dist/core/configurators/base.d.ts +7 -0
  56. package/dist/core/configurators/base.js +2 -0
  57. package/dist/core/configurators/claude.d.ts +8 -0
  58. package/dist/core/configurators/claude.js +15 -0
  59. package/dist/core/configurators/cline.d.ts +8 -0
  60. package/dist/core/configurators/cline.js +15 -0
  61. package/dist/core/configurators/codebuddy.d.ts +8 -0
  62. package/dist/core/configurators/codebuddy.js +15 -0
  63. package/dist/core/configurators/costrict.d.ts +8 -0
  64. package/dist/core/configurators/costrict.js +15 -0
  65. package/dist/core/configurators/iflow.d.ts +8 -0
  66. package/dist/core/configurators/iflow.js +15 -0
  67. package/dist/core/configurators/qoder.d.ts +30 -0
  68. package/dist/core/configurators/qoder.js +42 -0
  69. package/dist/core/configurators/qwen.d.ts +24 -0
  70. package/dist/core/configurators/qwen.js +37 -0
  71. package/dist/core/configurators/registry.d.ts +9 -0
  72. package/dist/core/configurators/registry.js +43 -0
  73. package/dist/core/configurators/slash/amazon-q.d.ts +9 -0
  74. package/dist/core/configurators/slash/amazon-q.js +46 -0
  75. package/dist/core/configurators/slash/antigravity.d.ts +9 -0
  76. package/dist/core/configurators/slash/antigravity.js +23 -0
  77. package/dist/core/configurators/slash/auggie.d.ts +9 -0
  78. package/dist/core/configurators/slash/auggie.js +31 -0
  79. package/dist/core/configurators/slash/base.d.ts +19 -0
  80. package/dist/core/configurators/slash/base.js +69 -0
  81. package/dist/core/configurators/slash/claude.d.ts +9 -0
  82. package/dist/core/configurators/slash/claude.js +37 -0
  83. package/dist/core/configurators/slash/cline.d.ts +9 -0
  84. package/dist/core/configurators/slash/cline.js +23 -0
  85. package/dist/core/configurators/slash/codebuddy.d.ts +9 -0
  86. package/dist/core/configurators/slash/codebuddy.js +37 -0
  87. package/dist/core/configurators/slash/codex.d.ts +14 -0
  88. package/dist/core/configurators/slash/codex.js +109 -0
  89. package/dist/core/configurators/slash/costrict.d.ts +9 -0
  90. package/dist/core/configurators/slash/costrict.js +31 -0
  91. package/dist/core/configurators/slash/crush.d.ts +9 -0
  92. package/dist/core/configurators/slash/crush.js +37 -0
  93. package/dist/core/configurators/slash/cursor.d.ts +9 -0
  94. package/dist/core/configurators/slash/cursor.js +37 -0
  95. package/dist/core/configurators/slash/factory.d.ts +10 -0
  96. package/dist/core/configurators/slash/factory.js +35 -0
  97. package/dist/core/configurators/slash/gemini.d.ts +9 -0
  98. package/dist/core/configurators/slash/gemini.js +22 -0
  99. package/dist/core/configurators/slash/github-copilot.d.ts +9 -0
  100. package/dist/core/configurators/slash/github-copilot.js +34 -0
  101. package/dist/core/configurators/slash/iflow.d.ts +9 -0
  102. package/dist/core/configurators/slash/iflow.js +37 -0
  103. package/dist/core/configurators/slash/kilocode.d.ts +9 -0
  104. package/dist/core/configurators/slash/kilocode.js +17 -0
  105. package/dist/core/configurators/slash/opencode.d.ts +12 -0
  106. package/dist/core/configurators/slash/opencode.js +72 -0
  107. package/dist/core/configurators/slash/qoder.d.ts +35 -0
  108. package/dist/core/configurators/slash/qoder.js +76 -0
  109. package/dist/core/configurators/slash/qwen.d.ts +32 -0
  110. package/dist/core/configurators/slash/qwen.js +49 -0
  111. package/dist/core/configurators/slash/registry.d.ts +8 -0
  112. package/dist/core/configurators/slash/registry.js +75 -0
  113. package/dist/core/configurators/slash/roocode.d.ts +9 -0
  114. package/dist/core/configurators/slash/roocode.js +23 -0
  115. package/dist/core/configurators/slash/toml-base.d.ts +10 -0
  116. package/dist/core/configurators/slash/toml-base.js +53 -0
  117. package/dist/core/configurators/slash/windsurf.d.ts +9 -0
  118. package/dist/core/configurators/slash/windsurf.js +23 -0
  119. package/dist/core/converters/json-converter.d.ts +6 -0
  120. package/dist/core/converters/json-converter.js +51 -0
  121. package/dist/core/global-config.d.ts +39 -0
  122. package/dist/core/global-config.js +115 -0
  123. package/dist/core/index.d.ts +2 -0
  124. package/dist/core/index.js +3 -0
  125. package/dist/core/init.d.ts +60 -0
  126. package/dist/core/init.js +861 -0
  127. package/dist/core/list.d.ts +9 -0
  128. package/dist/core/list.js +171 -0
  129. package/dist/core/parsers/change-parser.d.ts +13 -0
  130. package/dist/core/parsers/change-parser.js +193 -0
  131. package/dist/core/parsers/markdown-parser.d.ts +22 -0
  132. package/dist/core/parsers/markdown-parser.js +187 -0
  133. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  134. package/dist/core/parsers/requirement-blocks.js +201 -0
  135. package/dist/core/project-config.d.ts +34 -0
  136. package/dist/core/project-config.js +79 -0
  137. package/dist/core/schemas/base.schema.d.ts +13 -0
  138. package/dist/core/schemas/base.schema.js +13 -0
  139. package/dist/core/schemas/change.schema.d.ts +73 -0
  140. package/dist/core/schemas/change.schema.js +31 -0
  141. package/dist/core/schemas/index.d.ts +4 -0
  142. package/dist/core/schemas/index.js +4 -0
  143. package/dist/core/schemas/spec.schema.d.ts +18 -0
  144. package/dist/core/schemas/spec.schema.js +15 -0
  145. package/dist/core/skill-discovery.d.ts +24 -0
  146. package/dist/core/skill-discovery.js +153 -0
  147. package/dist/core/specs-apply.d.ts +73 -0
  148. package/dist/core/specs-apply.js +384 -0
  149. package/dist/core/styles/palette.d.ts +7 -0
  150. package/dist/core/styles/palette.js +8 -0
  151. package/dist/core/templates/agents-root-stub.d.ts +2 -0
  152. package/dist/core/templates/agents-root-stub.js +17 -0
  153. package/dist/core/templates/agents-template.d.ts +2 -0
  154. package/dist/core/templates/agents-template.js +706 -0
  155. package/dist/core/templates/claude-template.d.ts +2 -0
  156. package/dist/core/templates/claude-template.js +2 -0
  157. package/dist/core/templates/cline-template.d.ts +2 -0
  158. package/dist/core/templates/cline-template.js +2 -0
  159. package/dist/core/templates/costrict-template.d.ts +2 -0
  160. package/dist/core/templates/costrict-template.js +2 -0
  161. package/dist/core/templates/index.d.ts +17 -0
  162. package/dist/core/templates/index.js +37 -0
  163. package/dist/core/templates/project-template.d.ts +8 -0
  164. package/dist/core/templates/project-template.js +32 -0
  165. package/dist/core/templates/skill-templates.d.ts +103 -0
  166. package/dist/core/templates/skill-templates.js +2131 -0
  167. package/dist/core/templates/slash-command-templates.d.ts +4 -0
  168. package/dist/core/templates/slash-command-templates.js +81 -0
  169. package/dist/core/update.d.ts +4 -0
  170. package/dist/core/update.js +88 -0
  171. package/dist/core/validation/constants.d.ts +34 -0
  172. package/dist/core/validation/constants.js +40 -0
  173. package/dist/core/validation/types.d.ts +18 -0
  174. package/dist/core/validation/types.js +2 -0
  175. package/dist/core/validation/validator.d.ts +33 -0
  176. package/dist/core/validation/validator.js +409 -0
  177. package/dist/core/view.d.ts +8 -0
  178. package/dist/core/view.js +168 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.js +3 -0
  181. package/dist/utils/change-metadata.d.ts +47 -0
  182. package/dist/utils/change-metadata.js +130 -0
  183. package/dist/utils/change-utils.d.ts +51 -0
  184. package/dist/utils/change-utils.js +100 -0
  185. package/dist/utils/file-system.d.ts +19 -0
  186. package/dist/utils/file-system.js +177 -0
  187. package/dist/utils/index.d.ts +4 -0
  188. package/dist/utils/index.js +5 -0
  189. package/dist/utils/interactive.d.ts +18 -0
  190. package/dist/utils/interactive.js +21 -0
  191. package/dist/utils/item-discovery.d.ts +4 -0
  192. package/dist/utils/item-discovery.js +72 -0
  193. package/dist/utils/match.d.ts +3 -0
  194. package/dist/utils/match.js +22 -0
  195. package/dist/utils/shell-detection.d.ts +20 -0
  196. package/dist/utils/shell-detection.js +41 -0
  197. package/dist/utils/task-progress.d.ts +8 -0
  198. package/dist/utils/task-progress.js +36 -0
  199. package/package.json +81 -0
  200. package/schemas/spec-driven/schema.yaml +205 -0
  201. package/schemas/spec-driven/templates/design.md +19 -0
  202. package/schemas/spec-driven/templates/proposal.md +43 -0
  203. package/schemas/spec-driven/templates/spec.md +8 -0
  204. package/schemas/spec-driven/templates/tasks.md +25 -0
  205. package/schemas/tdd/schema.yaml +213 -0
  206. package/schemas/tdd/templates/docs.md +0 -0
  207. package/schemas/tdd/templates/implementation.md +11 -0
  208. package/schemas/tdd/templates/spec.md +11 -0
  209. package/schemas/tdd/templates/test.md +11 -0
  210. package/scripts/postinstall.js +147 -0
@@ -0,0 +1,706 @@
1
+ export const agentsTemplate = `# ZhuanSpec 使用说明
2
+
3
+ 面向使用 ZhuanSpec 进行规范驱动开发的 AI 编程助手的说明文档。
4
+
5
+ ## 快速检查清单
6
+
7
+ - 搜索现有工作:\`zhuanspec spec list --long\`、\`zhuanspec list\`(仅使用 \`rg\` 进行全文搜索)
8
+ - 确定范围:新功能 vs 修改现有功能
9
+ - 选择唯一的 \`change-id\`:kebab-case 格式,动词开头(\`add-\`、\`update-\`、\`remove-\`、\`refactor-\`)
10
+ - 搭建结构:\`proposal.md\`、\`tasks.md\`、\`design.md\`(仅在需要时),以及每个受影响功能的规范增量
11
+ - 编写增量:使用 \`## ADDED|MODIFIED|REMOVED|RENAMED Requirements\`;每个要求至少包含一个 \`#### Scenario:\`
12
+ - 验证:运行 \`zhuanspec validate [change-id] --strict\` 并修复问题
13
+ - 请求批准:在提案获得批准之前不要开始实施
14
+
15
+ ## 三阶段工作流
16
+
17
+ ### 阶段 1:创建变更
18
+ 在以下情况下创建提案:
19
+ - 添加功能或特性
20
+ - 进行破坏性更改(API、schema)
21
+ - 更改架构或模式
22
+ - 优化性能(改变行为)
23
+ - 更新安全模式
24
+
25
+ 触发词示例:
26
+ - "帮我创建一个变更提案"
27
+ - "帮我规划一个变更"
28
+ - "帮我创建一个提案"
29
+ - "我想创建一个规范提案"
30
+ - "我想创建一个规范"
31
+
32
+ 宽松匹配指导:
33
+ - 包含以下之一:\`proposal\`、\`change\`、\`spec\`
34
+ - 与以下之一组合:\`create\`、\`plan\`、\`make\`、\`start\`、\`help\`
35
+
36
+ 跳过提案的情况:
37
+ - Bug 修复(恢复预期行为)
38
+ - 拼写错误、格式、注释
39
+ - 依赖更新(非破坏性)
40
+ - 配置更改
41
+ - 现有行为的测试
42
+
43
+ **工作流**
44
+ 0. 审查 \`zhuanspec/project.md\`、\`zhuanspec list\` 和 \`zhuanspec list --specs\` 以了解当前上下文。
45
+ 1. **强制澄清检查(必须首先执行)**:分析用户请求,识别所有不确定或模糊的方面(范围、技术选择、实现细节、数据获取来源、服务分层、依赖关系、优先级、验收标准等......)。如果发现任何模糊之处,必须停止并使用**选项式交互**(如 \`AskQuestion\` 工具)提问,获得明确答复后才能继续。严禁在不确定的情况下自行推测或创建提案,严禁要求用户手动输入大段文字。
46
+ 2. 选择一个唯一的动词开头的 \`change-id\`,并在 \`zhuanspec/changes/<id>/\` 下搭建 \`proposal.md\`、\`tasks.md\`、可选的 \`design.md\` 和规范增量。
47
+ 3. 使用 \`## ADDED|MODIFIED|REMOVED Requirements\` 起草规范增量,每个要求至少包含一个 \`#### Scenario:\`。
48
+ 4. 运行 \`zhuanspec validate <id> --strict\` 并在分享提案之前解决所有问题。
49
+
50
+ ### 阶段 2:实施变更
51
+ 将这些步骤作为待办事项跟踪,逐一完成。
52
+ 1. **阅读 proposal.md** - 了解要构建的内容
53
+ 2. **阅读 design.md**(如果存在) - 审查技术决策
54
+ 3. **阅读 tasks.md** - 获取实施清单
55
+ 4. **按顺序实施任务** - 按顺序完成。如果任务标注了 \`@skill:<skill-name>\`,直接调用对应 skill
56
+ 5. **确认完成** - 在更新状态之前确保 \`tasks.md\` 中的每个项目都已完成
57
+ 6. **更新清单** - 所有工作完成后,将每个任务设置为 \`- [x]\`,以便列表反映实际情况
58
+ 7. **代码审查**(可选) - 基于生成的上下文文件审查已实施的代码,检查:
59
+ - 代码规范和约定合规性
60
+ - 逻辑正确性
61
+ - 性能问题和潜在瓶颈
62
+ - 安全性问题
63
+ - 最佳实践遵循情况
64
+ - 对于 Java 代码:特别关注 Java 特定的模式、约定和潜在问题
65
+ - 此步骤是可选的,如果跳过不会阻塞工作流
66
+ - 如果发现问题,应在归档之前解决
67
+ 8. **批准门槛** - 在提案经过审查和批准之前不要开始实施
68
+
69
+ ### 阶段 3:归档变更
70
+ 部署后,创建单独的 PR:
71
+ - 将 \`changes/[name]/\` → \`changes/archive/YYYY-MM-DD-[name]/\`
72
+ - 如果功能已更改,更新 \`specs/\`
73
+ - 对于仅工具类的变更,使用 \`zhuanspec archive <change-id> --skip-specs --yes\`(始终显式传递变更 ID)
74
+ - 运行 \`zhuanspec validate --strict\` 以确认归档的变更通过检查
75
+
76
+ ## 执行任何任务之前
77
+
78
+ **上下文检查清单:**
79
+ - [ ] 在 \`specs/[capability]/spec.md\` 中阅读相关规范
80
+ - [ ] 检查 \`changes/\` 中的待处理变更是否存在冲突
81
+ - [ ] 阅读 \`zhuanspec/project.md\` 了解约定
82
+ - [ ] 运行 \`zhuanspec list\` 查看活动变更
83
+ - [ ] 运行 \`zhuanspec list --specs\` 查看现有功能
84
+
85
+ **创建规范之前:**
86
+ - 始终检查功能是否已存在
87
+ - 优先修改现有规范而不是创建重复项
88
+ - 使用 \`zhuanspec show [spec]\` 审查当前状态
89
+ - **强制澄清要求**:如果请求有任何不明确、模糊或不确定的方面,必须停止并使用**选项式交互**提问。严禁在不确定的情况下自行推测、假设或继续创建文件。严禁要求用户手动输入大段文字回答。
90
+
91
+ ## 强制澄清工作流
92
+
93
+ 在创建任何提案文件之前,必须执行强制澄清检查。这是不可跳过的步骤。
94
+
95
+ **重要原则:先查阅后询问,避免过度询问**
96
+
97
+ 在询问之前,必须先查阅以下来源,只有在确实无法从这些来源确定时才询问:
98
+ - 现有规范(\`zhuanspec/specs/\`)
99
+ - 项目约定(\`zhuanspec/project.md\`)
100
+ - 代码库结构和现有模式
101
+ - 上下文文件和相关变更
102
+
103
+ ### 何时需要澄清
104
+
105
+ 在以下情况下,**且无法从现有规范、项目约定、代码库结构中确定时**,必须停止并提问(包括但不限于):
106
+ - **范围不明确**:用户请求的范围边界不清楚(例如:"改进性能"、"优化代码")
107
+ - **技术选择不明确**:有多种实现方式,但用户未指定偏好,且无法从现有代码模式中确定(例如:使用哪种数据库、哪种框架)
108
+ - **优先级不明确**:多个需求但未说明优先级或顺序
109
+ - **验收标准不明确**:不清楚如何判断完成或成功
110
+ - **实现细节不明确**:不清楚如何实现或实现细节不明确,且无法从代码库分析中确定(例如:如何获取数据、如何处理错误、如何优化性能)
111
+ - **代码改动位置不明确**:不清楚需要修改哪些文件、在哪些位置进行修改,且无法从代码库结构分析中确定
112
+ - **代码分层架构不明确**:如果涉及服务分层(如 4 层架构、3 层架构等),不清楚各层的职责和改动位置,且无法从现有代码结构或规范中确定
113
+ - **数据获取来源不明确**:不清楚从哪里获取数据,且无法从现有代码或规范中确定(例如:从数据库、API、文件、外部服务、历史逻辑复用)
114
+ - **服务分层不明确**:不清楚服务分层,且无法从现有代码结构或规范中确定(例如:前端、后端、数据库、API、服务、4层架构、3层架构、2层架构、领域模型)
115
+ - **依赖关系不明确**:不清楚依赖关系,且无法从代码库分析中确定(例如:依赖哪些服务、依赖哪些库、依赖哪些组件)
116
+ - **上下文信息缺失**:缺少必要的背景信息来理解需求,且无法从现有规范或代码中获取
117
+ - **歧义性表述**:用户请求可以用多种方式理解,且无法从上下文确定
118
+ - **其他不明确**:其他不明确的情况,且无法从现有来源确定
119
+
120
+ ### 何时不需要澄清
121
+
122
+ 在以下情况下,**不应询问**,应直接使用从现有来源获取的信息:
123
+ - **信息已明确**:用户请求中已经明确说明了相关信息
124
+ - **可从规范获取**:信息可以从现有规范(\`zhuanspec/specs/\`)中获取
125
+ - **可从项目约定获取**:信息可以从项目约定(\`zhuanspec/project.md\`)中获取
126
+ - **可从代码库分析获取**:信息可以通过分析代码库结构、现有模式、相关文件获取
127
+ - **可从上下文获取**:信息可以从上下文文件、相关变更、历史记录中获取
128
+ - **符合常见模式**:实现方式符合项目中的常见模式或最佳实践,无需特别询问
129
+
130
+ **原则**:如果可以通过查阅现有来源确定信息,就不要询问用户,以提高效率。
131
+
132
+ ### 澄清问题格式
133
+
134
+ **必须使用选项式交互,严禁要求用户手动输入文字回答。**
135
+
136
+ 使用编辑器提供的结构化问答工具(如 Cursor 的 \`AskQuestion\` 工具、Claude Code 的交互式选择等)向用户提问,将每个澄清问题转化为带预设选项的选择题:
137
+
138
+ **格式要求:**
139
+ - 每个问题提供 2-5 个预设选项
140
+ - 每个问题末尾包含一个"其他"选项,以覆盖未列出的情况
141
+ - 允许用户多选(当问题可能有多个答案时设置 \`allow_multiple: true\`)
142
+ - 选项文本要简洁明了,必要时附带简短说明
143
+ - 如果有多个独立的澄清问题,合并到同一次问答交互中(一次性展示多个问题)
144
+
145
+ **标准格式模板:**
146
+
147
+ \`\`\`
148
+ 使用 AskQuestion 工具提问,结构如下:
149
+
150
+ 问题 1: "关于 [不确定的方面]:[具体问题]"
151
+ 选项:
152
+ A) [选项1 - 简短说明]
153
+ B) [选项2 - 简短说明]
154
+ C) [选项3 - 简短说明]
155
+ D) 其他(请在后续补充说明)
156
+
157
+ 问题 2: "关于 [另一个方面]:[具体问题]"
158
+ 选项:
159
+ A) [选项1]
160
+ B) [选项2]
161
+ C) 其他
162
+ \`\`\`
163
+
164
+ **工具调用示例(Cursor AskQuestion):**
165
+ \`\`\`json
166
+ {
167
+ "questions": [
168
+ {
169
+ "id": "scope",
170
+ "prompt": "关于改进范围:您希望改进哪些方面?",
171
+ "options": [
172
+ {"id": "security", "label": "安全性(如双因素认证)"},
173
+ {"id": "ux", "label": "用户体验(如简化流程)"},
174
+ {"id": "performance", "label": "性能(如响应时间优化)"},
175
+ {"id": "other", "label": "其他"}
176
+ ],
177
+ "allow_multiple": true
178
+ },
179
+ {
180
+ "id": "priority",
181
+ "prompt": "如果有多个改进点,优先级如何?",
182
+ "options": [
183
+ {"id": "security_first", "label": "安全性优先"},
184
+ {"id": "ux_first", "label": "用户体验优先"},
185
+ {"id": "all_equal", "label": "同等重要,一起做"}
186
+ ]
187
+ }
188
+ ]
189
+ }
190
+ \`\`\`
191
+
192
+ **原则:**
193
+ - 永远不要让用户从零开始输入答案,总是提供可选的选项
194
+ - 选项应覆盖最常见的答案场景
195
+ - "其他"选项作为兜底,确保不遗漏特殊情况
196
+ - 用户选择"其他"后,再针对性地追问细节
197
+
198
+ ### 禁止行为
199
+
200
+ 在遇到模糊需求时,**严禁**以下行为:
201
+ - ❌ 自行推测用户意图
202
+ - ❌ 基于"最佳猜测"创建提案
203
+ - ❌ 假设用户想要什么
204
+ - ❌ 跳过澄清直接创建文件
205
+ - ❌ 使用模糊的表述来掩盖不确定性
206
+ - ❌ 要求用户手动输入大段文字来回答澄清问题(必须使用选项式交互)
207
+
208
+ ### 澄清流程
209
+
210
+ 1. **查阅现有来源**:首先查阅现有规范、项目约定、代码库结构、上下文文件等,尝试从这些来源获取所需信息
211
+ 2. **识别模糊点**:仔细分析用户请求,列出所有不确定的方面,**但排除那些可以从现有来源确定的方面**
212
+ 3. **判断是否需要询问**:对于每个不确定的方面,判断是否可以从现有来源确定:
213
+ - 如果可以确定,则使用从现有来源获取的信息,不询问
214
+ - 如果无法确定,则标记为需要询问
215
+ 4. **构造选项式问题**:将所有需要询问的模糊点转化为带预设选项的选择题,尽量合并到一次交互中
216
+ 5. **使用工具提问**:调用编辑器的结构化问答工具(如 \`AskQuestion\`)一次性展示所有问题和选项,等待用户选择
217
+ 6. **等待用户选择**:必须等待用户选择答案,不能继续
218
+ 7. **处理"其他"选项**:如果用户选择了"其他",再针对该问题追问具体细节(仍优先使用选项式,如确实无法预设则允许简短文字输入)
219
+ 8. **确认理解**:在开始创建文件前,简要总结理解以确保准确
220
+ 9. **开始创建**:只有在所有必要的模糊点都明确后,才能开始创建提案文件
221
+
222
+ ### 示例
223
+
224
+ **用户请求**:"改进登录功能"
225
+
226
+ **分析过程**:
227
+ 1. 首先查阅现有规范(\`zhuanspec/specs/\`)中是否有登录相关的规范
228
+ 2. 查阅项目约定(\`zhuanspec/project.md\`)了解项目架构和约定
229
+ 3. 分析代码库结构,了解现有的登录实现方式
230
+ 4. 如果从这些来源无法确定改进范围,则使用选项式交互询问
231
+
232
+ **必须使用选项式交互提问**(仅在无法从现有来源确定时):
233
+
234
+ \`\`\`json
235
+ {
236
+ "questions": [
237
+ {
238
+ "id": "improvement_scope",
239
+ "prompt": "您希望改进登录功能的哪些方面?",
240
+ "options": [
241
+ {"id": "security", "label": "安全性(如添加双因素认证)"},
242
+ {"id": "ux", "label": "用户体验(如简化登录流程)"},
243
+ {"id": "performance", "label": "性能(如优化登录响应时间)"},
244
+ {"id": "other", "label": "其他"}
245
+ ],
246
+ "allow_multiple": true
247
+ },
248
+ {
249
+ "id": "tech_preference",
250
+ "prompt": "您有特定的技术偏好吗?",
251
+ "options": [
252
+ {"id": "jwt", "label": "JWT Token 认证"},
253
+ {"id": "session", "label": "Session 认证"},
254
+ {"id": "oauth", "label": "OAuth 第三方集成"},
255
+ {"id": "no_preference", "label": "无偏好,由你推荐"},
256
+ {"id": "other", "label": "其他"}
257
+ ]
258
+ },
259
+ {
260
+ "id": "priority",
261
+ "prompt": "如果有多个改进点,优先级如何?",
262
+ "options": [
263
+ {"id": "security_first", "label": "安全性优先"},
264
+ {"id": "ux_first", "label": "用户体验优先"},
265
+ {"id": "perf_first", "label": "性能优先"},
266
+ {"id": "all_equal", "label": "同等重要,一起做"}
267
+ ]
268
+ }
269
+ ]
270
+ }
271
+ \`\`\`
272
+
273
+ **实现细节相关示例**(仅在无法从代码库分析确定时询问):
274
+
275
+ **用户请求**:"重构用户认证服务"
276
+
277
+ **如果无法从代码库分析确定,使用选项式交互提问**:
278
+
279
+ \`\`\`json
280
+ {
281
+ "questions": [
282
+ {
283
+ "id": "change_scope",
284
+ "prompt": "重构涉及哪些改动?",
285
+ "options": [
286
+ {"id": "modify_existing", "label": "修改现有认证服务类"},
287
+ {"id": "new_service", "label": "创建新的服务层"},
288
+ {"id": "both", "label": "两者都涉及"},
289
+ {"id": "other", "label": "其他"}
290
+ ]
291
+ },
292
+ {
293
+ "id": "layer_scope",
294
+ "prompt": "改动应该在哪些层进行?",
295
+ "options": [
296
+ {"id": "controller", "label": "Controller 层"},
297
+ {"id": "service", "label": "Service 层"},
298
+ {"id": "repository", "label": "Repository 层"},
299
+ {"id": "all", "label": "全部层"}
300
+ ],
301
+ "allow_multiple": true
302
+ },
303
+ {
304
+ "id": "refactor_strategy",
305
+ "prompt": "重构策略偏好?",
306
+ "options": [
307
+ {"id": "incremental", "label": "渐进式重构(逐步替换)"},
308
+ {"id": "rewrite", "label": "完全重写"},
309
+ {"id": "strangler", "label": "绞杀者模式(新旧并行后切换)"},
310
+ {"id": "no_preference", "label": "无偏好,由你推荐"}
311
+ ]
312
+ }
313
+ ]
314
+ }
315
+ \`\`\`
316
+
317
+ **注意**:如果可以从现有代码结构、规范或项目约定中确定这些信息,则不应询问,直接使用从现有来源获取的信息。
318
+
319
+ ### 搜索指导
320
+ - 枚举规范:\`zhuanspec spec list --long\`(或使用 \`--json\` 用于脚本)
321
+ - 枚举变更:\`zhuanspec list\`(或 \`zhuanspec change list --json\` - 已弃用但可用)
322
+ - 显示详细信息:
323
+ - 规范:\`zhuanspec show <spec-id> --type spec\`(使用 \`--json\` 进行过滤)
324
+ - 变更:\`zhuanspec show <change-id> --json --deltas-only\`
325
+ - 全文搜索(使用 ripgrep):\`rg -n "Requirement:|Scenario:" zhuanspec/specs\`
326
+
327
+ ## 快速开始
328
+
329
+ ### CLI 命令
330
+
331
+ \`\`\`bash
332
+ # 基本命令
333
+ zhuanspec list # 列出活动变更
334
+ zhuanspec list --specs # 列出规范
335
+ zhuanspec show [item] # 显示变更或规范
336
+ zhuanspec validate [item] # 验证变更或规范
337
+ zhuanspec archive <change-id> [--yes|-y] # 部署后归档(添加 --yes 用于非交互式运行)
338
+
339
+ # 项目管理
340
+ zhuanspec init [path] # 初始化 ZhuanSpec
341
+ zhuanspec update [path] # 更新说明文件
342
+
343
+ # 交互模式
344
+ zhuanspec show # 提示选择
345
+ zhuanspec validate # 批量验证模式
346
+
347
+ # 调试
348
+ zhuanspec show [change] --json --deltas-only
349
+ zhuanspec validate [change] --strict
350
+ \`\`\`
351
+
352
+ ### 命令标志
353
+
354
+ - \`--json\` - 机器可读输出
355
+ - \`--type change|spec\` - 消除项目歧义
356
+ - \`--strict\` - 全面验证
357
+ - \`--no-interactive\` - 禁用提示
358
+ - \`--skip-specs\` - 归档时不更新规范
359
+ - \`--yes\`/\`-y\` - 跳过确认提示(非交互式归档)
360
+
361
+ ## 目录结构
362
+
363
+ \`\`\`
364
+ zhuanspec/
365
+ ├── project.md # 项目约定
366
+ ├── specs/ # 当前真实状态 - 已构建的内容
367
+ │ └── [capability]/ # 单一聚焦的功能
368
+ │ ├── spec.md # 要求和场景
369
+ │ └── design.md # 技术模式
370
+ ├── changes/ # 提案 - 应该更改的内容
371
+ │ ├── [change-name]/
372
+ │ │ ├── proposal.md # 原因、内容、影响
373
+ │ │ ├── tasks.md # 实施清单
374
+ │ │ ├── design.md # 技术决策(可选;见标准)
375
+ │ │ └── specs/ # 增量变更
376
+ │ │ └── [capability]/
377
+ │ │ └── spec.md # ADDED/MODIFIED/REMOVED
378
+ │ └── archive/ # 已完成的变更
379
+ \`\`\`
380
+
381
+ ## 创建变更提案
382
+
383
+ ### 决策树
384
+
385
+ \`\`\`
386
+ 新请求?
387
+ ├─ 修复恢复规范行为的 Bug? → 直接修复
388
+ ├─ 拼写错误/格式/注释? → 直接修复
389
+ ├─ 新功能/能力? → 创建提案
390
+ ├─ 破坏性更改? → 创建提案
391
+ ├─ 架构更改? → 创建提案
392
+ └─ 不明确? → 创建提案(更安全)
393
+ \`\`\`
394
+
395
+ ### 提案结构
396
+
397
+ 1. **创建目录:** \`changes/[change-id]/\`(kebab-case,动词开头,唯一)
398
+
399
+ 2. **编写 proposal.md:**
400
+ \`\`\`markdown
401
+ # Change: [变更的简要描述]
402
+
403
+ ## Why
404
+ [关于问题/机会的 1-2 句话]
405
+
406
+ ## What Changes
407
+ - [变更的要点列表]
408
+ - [用 **BREAKING** 标记破坏性更改]
409
+
410
+ ## Impact
411
+ - Affected specs: [列出功能]
412
+ - Affected code: [关键文件/系统]
413
+ \`\`\`
414
+
415
+ 3. **创建规范增量:** \`specs/[capability]/spec.md\`
416
+ \`\`\`markdown
417
+ ## ADDED Requirements
418
+ ### Requirement: New Feature
419
+ The system SHALL provide...
420
+
421
+ #### Scenario: Success case
422
+ - **WHEN** user performs action
423
+ - **THEN** expected result
424
+
425
+ ## MODIFIED Requirements
426
+ ### Requirement: Existing Feature
427
+ [完整的修改后要求]
428
+
429
+ ## REMOVED Requirements
430
+ ### Requirement: Old Feature
431
+ **Reason**: [移除原因]
432
+ **Migration**: [如何处理]
433
+ \`\`\`
434
+ 如果多个功能受到影响,在 \`changes/[change-id]/specs/<capability>/spec.md\` 下创建多个增量文件——每个功能一个。
435
+
436
+ 4. **创建 tasks.md:**
437
+
438
+ 先运行 \`zhuanspec skills list --json\` 发现当前环境中可用的 skill 及其 description,然后基于语义匹配在任务中标注真实 skill 名称:
439
+
440
+ \`\`\`markdown
441
+ ## 1. Implementation
442
+ - [ ] 1.1 Create database schema @skill:java-db-schema-standards
443
+ - [ ] 1.2 Implement RPC interface @skill:java-scf-rpc-usage-skill
444
+ - [ ] 1.3 Add frontend component @skill:kf-fe-frontend-dev
445
+ - [ ] 1.4 Write tests @skill:generate-mockito-unit-test-skill
446
+ \`\`\`
447
+ > **@skill 标签**:创建 tasks.md 前,运行 \`zhuanspec skills list --json\` 发现可用 skill 及其 description。基于 skill description 进行语义匹配:
448
+ > - 仔细阅读每个 skill 的 description,理解其具体功能和适用场景
449
+ > - 只有当任务功能与 skill description 明确匹配时才标注
450
+ > - 简单的代码修改(如增删枚举值)应匹配通用编码规范 skill,而非架构级 skill
451
+ > - 避免仅因文件名或路径关键词而错误匹配
452
+ > - 使用真实 skill 名称标注,支持多个 skill(\`@skill:name1,name2\`)
453
+ > - Apply 阶段 AI 根据标签直接调用对应 skill。无可用 skill 时可省略。
454
+
455
+ 5. **在需要时创建 design.md:**
456
+ 如果以下任何情况适用,则创建 \`design.md\`;否则省略:
457
+ - 横切变更(多个服务/模块)或新的架构模式
458
+ - 新的外部依赖或重要的数据模型更改
459
+ - 安全性、性能或迁移复杂性
460
+ - 在编码之前从技术决策中受益的模糊性
461
+
462
+ 最小 \`design.md\` 骨架:
463
+ \`\`\`markdown
464
+ ## Context
465
+ [背景、约束、利益相关者]
466
+
467
+ ## Goals / Non-Goals
468
+ - Goals: [...]
469
+ - Non-Goals: [...]
470
+
471
+ ## Decisions
472
+ - Decision: [内容和原因]
473
+ - Alternatives considered: [选项 + 理由]
474
+
475
+ ## Risks / Trade-offs
476
+ - [风险] → 缓解措施
477
+
478
+ ## Migration Plan
479
+ [步骤、回滚]
480
+
481
+ ## Open Questions
482
+ - [...]
483
+ \`\`\`
484
+
485
+ ## 规范文件格式
486
+
487
+ ### 关键:场景格式
488
+
489
+ **正确**(使用 #### 标题):
490
+ \`\`\`markdown
491
+ #### Scenario: User login success
492
+ - **WHEN** valid credentials provided
493
+ - **THEN** return JWT token
494
+ \`\`\`
495
+
496
+ **错误**(不要使用项目符号或粗体):
497
+ \`\`\`markdown
498
+ - **Scenario: User login** ❌
499
+ **Scenario**: User login ❌
500
+ ### Scenario: User login ❌
501
+ \`\`\`
502
+
503
+ 每个要求必须至少有一个场景。
504
+
505
+ ### 要求措辞
506
+ - 对规范性要求使用 SHALL/MUST(除非有意非规范性,否则避免使用 should/may)
507
+
508
+ ### 增量操作
509
+
510
+ - \`## ADDED Requirements\` - 新功能
511
+ - \`## MODIFIED Requirements\` - 更改的行为
512
+ - \`## REMOVED Requirements\` - 已弃用的功能
513
+ - \`## RENAMED Requirements\` - 名称更改
514
+
515
+ 标题使用 \`trim(header)\` 匹配 - 忽略空白。
516
+
517
+ #### 何时使用 ADDED vs MODIFIED
518
+ - ADDED:引入一个新的功能或子功能,可以独立作为要求。当更改是正交的(例如,添加"斜杠命令配置")而不是改变现有要求的语义时,优先使用 ADDED。
519
+ - MODIFIED:更改现有要求的行为、范围或验收标准。始终粘贴完整的、更新的要求内容(标题 + 所有场景)。归档器将用您在此处提供的内容替换整个要求;部分增量将丢失先前的详细信息。
520
+ - RENAMED:仅在名称更改时使用。如果您还更改行为,请使用 RENAMED(名称)加上 MODIFIED(内容),引用新名称。
521
+
522
+ 常见陷阱:使用 MODIFIED 添加新关注点而不包含先前的文本。这会在归档时导致详细信息丢失。如果您没有明确更改现有要求,请在 ADDED 下添加新要求。
523
+
524
+ 正确编写 MODIFIED 要求:
525
+ 1) 在 \`zhuanspec/specs/<capability>/spec.md\` 中找到现有要求。
526
+ 2) 复制整个要求块(从 \`### Requirement: ...\` 到其场景)。
527
+ 3) 将其粘贴到 \`## MODIFIED Requirements\` 下并编辑以反映新行为。
528
+ 4) 确保标题文本完全匹配(忽略空白)并至少保留一个 \`#### Scenario:\`。
529
+
530
+ RENAMED 示例:
531
+ \`\`\`markdown
532
+ ## RENAMED Requirements
533
+ - FROM: \`### Requirement: Login\`
534
+ - TO: \`### Requirement: User Authentication\`
535
+ \`\`\`
536
+
537
+ ## 故障排除
538
+
539
+ ### 常见错误
540
+
541
+ **"变更必须至少有一个增量"**
542
+ - 检查 \`changes/[name]/specs/\` 是否存在 .md 文件
543
+ - 验证文件具有操作前缀(## ADDED Requirements)
544
+
545
+ **"要求必须至少有一个场景"**
546
+ - 检查场景是否使用 \`#### Scenario:\` 格式(4 个井号)
547
+ - 不要对场景标题使用项目符号或粗体
548
+
549
+ **静默场景解析失败**
550
+ - 需要精确格式:\`#### Scenario: Name\`
551
+ - 使用以下命令调试:\`zhuanspec show [change] --json --deltas-only\`
552
+
553
+ ### 验证提示
554
+
555
+ \`\`\`bash
556
+ # 始终使用严格模式进行全面检查
557
+ zhuanspec validate [change] --strict
558
+
559
+ # 调试增量解析
560
+ zhuanspec show [change] --json | jq '.deltas'
561
+
562
+ # 检查特定要求
563
+ zhuanspec show [spec] --json -r 1
564
+ \`\`\`
565
+
566
+ ## 理想路径脚本
567
+
568
+ \`\`\`bash
569
+ # 1) 探索当前状态
570
+ zhuanspec spec list --long
571
+ zhuanspec list
572
+ # 可选全文搜索:
573
+ # rg -n "Requirement:|Scenario:" zhuanspec/specs
574
+ # rg -n "^#|Requirement:" zhuanspec/changes
575
+
576
+ # 2) 选择变更 ID 并搭建
577
+ CHANGE=add-two-factor-auth
578
+ mkdir -p zhuanspec/changes/\$CHANGE/{specs/auth}
579
+ printf "## Why\\n...\\n\\n## What Changes\\n- ...\\n\\n## Impact\\n- ...\\n" > zhuanspec/changes/\$CHANGE/proposal.md
580
+ printf "## 1. Implementation\\n- [ ] 1.1 ...\\n" > zhuanspec/changes/\$CHANGE/tasks.md
581
+
582
+ # 3) 添加增量(示例)
583
+ cat > zhuanspec/changes/\$CHANGE/specs/auth/spec.md << 'EOF'
584
+ ## ADDED Requirements
585
+ ### Requirement: 双因素认证
586
+ 用户 MUST 在登录时提供第二个认证因素。
587
+
588
+ #### Scenario: 需要 OTP
589
+ - **WHEN** 提供了有效凭据
590
+ - **THEN** 需要 OTP 挑战
591
+ EOF
592
+
593
+ # 4) 验证
594
+ zhuanspec validate \$CHANGE --strict
595
+ \`\`\`
596
+
597
+ ## Multi-Capability Example
598
+
599
+ \`\`\`
600
+ zhuanspec/changes/add-2fa-notify/
601
+ ├── proposal.md
602
+ ├── tasks.md
603
+ └── specs/
604
+ ├── auth/
605
+ │ └── spec.md # ADDED: 双因素认证
606
+ └── notifications/
607
+ └── spec.md # ADDED: OTP 邮件通知
608
+ \`\`\`
609
+
610
+ auth/spec.md
611
+ \`\`\`markdown
612
+ ## ADDED Requirements
613
+ ### Requirement: 双因素认证
614
+ ...
615
+ \`\`\`
616
+
617
+ notifications/spec.md
618
+ \`\`\`markdown
619
+ ## ADDED Requirements
620
+ ### Requirement: OTP 邮件通知
621
+ ...
622
+ \`\`\`
623
+
624
+ ## 最佳实践
625
+
626
+ ### 简单优先
627
+ - 默认新增代码 <100 行
628
+ - 单文件实现,直到证明不足
629
+ - 避免没有明确理由的框架
630
+ - 选择无聊但经过验证的模式
631
+
632
+ ### 复杂性触发条件
633
+ 仅在以下情况下添加复杂性:
634
+ - 性能数据表明当前解决方案太慢
635
+ - 具体的规模要求(>1000 用户,>100MB 数据)
636
+ - 多个经过验证的用例需要抽象
637
+
638
+ ### 清晰的引用
639
+ - 使用 \`file.ts:42\` 格式表示代码位置
640
+ - 将规范引用为 \`specs/auth/spec.md\`
641
+ - 链接相关变更和 PR
642
+
643
+ ### 功能命名
644
+ - 使用动词-名词:\`user-auth\`、\`payment-capture\`
645
+ - 每个功能单一目的
646
+ - 10 分钟可理解性规则
647
+ - 如果描述需要"AND",则拆分
648
+
649
+ ### 变更 ID 命名
650
+ - 使用 kebab-case,简短且描述性:\`add-two-factor-auth\`
651
+ - 优先使用动词开头的前缀:\`add-\`、\`update-\`、\`remove-\`、\`refactor-\`
652
+ - 确保唯一性;如果已使用,追加 \`-2\`、\`-3\` 等
653
+
654
+ ## 工具选择指南
655
+
656
+ | 任务 | 工具 | 原因 |
657
+ |------|------|-----|
658
+ | 按模式查找文件 | Glob | 快速模式匹配 |
659
+ | 搜索代码内容 | Grep | 优化的正则表达式搜索 |
660
+ | 读取特定文件 | Read | 直接文件访问 |
661
+ | 探索未知范围 | Task | 多步骤调查 |
662
+
663
+ ## 错误恢复
664
+
665
+ ### 变更冲突
666
+ 1. 运行 \`zhuanspec list\` 查看活动变更
667
+ 2. 检查重叠的规范
668
+ 3. 与变更所有者协调
669
+ 4. 考虑合并提案
670
+
671
+ ### 验证失败
672
+ 1. 使用 \`--strict\` 标志运行
673
+ 2. 检查 JSON 输出以获取详细信息
674
+ 3. 验证规范文件格式
675
+ 4. 确保场景格式正确
676
+
677
+ ### 缺少上下文
678
+ 1. 首先阅读 project.md
679
+ 2. 检查相关规范
680
+ 3. 审查最近的归档
681
+ 4. 请求澄清
682
+
683
+ ## 快速参考
684
+
685
+ ### 阶段指示器
686
+ - \`changes/\` - 已提议,尚未构建
687
+ - \`specs/\` - 已构建并部署
688
+ - \`archive/\` - 已完成的变更
689
+
690
+ ### 文件用途
691
+ - \`proposal.md\` - 原因和内容
692
+ - \`tasks.md\` - 实施步骤
693
+ - \`design.md\` - 技术决策
694
+ - \`spec.md\` - 要求和行为
695
+
696
+ ### CLI 要点
697
+ \`\`\`bash
698
+ zhuanspec list # 正在进行什么?
699
+ zhuanspec show [item] # 查看详细信息
700
+ zhuanspec validate --strict # 是否正确?
701
+ zhuanspec archive <change-id> [--yes|-y] # 标记完成(添加 --yes 用于自动化)
702
+ \`\`\`
703
+
704
+ 记住:规范是真相。变更是提案。保持它们同步。
705
+ `;
706
+ //# sourceMappingURL=agents-template.js.map