@trench-craft/sds 1.0.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 (276) hide show
  1. package/README.en.md +522 -0
  2. package/README.md +566 -0
  3. package/dist/bin/sds.d.ts +3 -0
  4. package/dist/bin/sds.d.ts.map +1 -0
  5. package/dist/bin/sds.js +50 -0
  6. package/dist/bin/sds.js.map +1 -0
  7. package/dist/src/__tests__/cli.test.d.ts +2 -0
  8. package/dist/src/__tests__/cli.test.d.ts.map +1 -0
  9. package/dist/src/__tests__/cli.test.js +37 -0
  10. package/dist/src/__tests__/cli.test.js.map +1 -0
  11. package/dist/src/__tests__/e2e.test.d.ts +5 -0
  12. package/dist/src/__tests__/e2e.test.d.ts.map +1 -0
  13. package/dist/src/__tests__/e2e.test.js +143 -0
  14. package/dist/src/__tests__/e2e.test.js.map +1 -0
  15. package/dist/src/__tests__/graph.test.d.ts +5 -0
  16. package/dist/src/__tests__/graph.test.d.ts.map +1 -0
  17. package/dist/src/__tests__/graph.test.js +423 -0
  18. package/dist/src/__tests__/graph.test.js.map +1 -0
  19. package/dist/src/__tests__/openspec.test.d.ts +5 -0
  20. package/dist/src/__tests__/openspec.test.d.ts.map +1 -0
  21. package/dist/src/__tests__/openspec.test.js +172 -0
  22. package/dist/src/__tests__/openspec.test.js.map +1 -0
  23. package/dist/src/commands/apply.d.ts +4 -0
  24. package/dist/src/commands/apply.d.ts.map +1 -0
  25. package/dist/src/commands/apply.js +14 -0
  26. package/dist/src/commands/apply.js.map +1 -0
  27. package/dist/src/commands/archive.d.ts +4 -0
  28. package/dist/src/commands/archive.d.ts.map +1 -0
  29. package/dist/src/commands/archive.js +20 -0
  30. package/dist/src/commands/archive.js.map +1 -0
  31. package/dist/src/commands/cache.d.ts +4 -0
  32. package/dist/src/commands/cache.d.ts.map +1 -0
  33. package/dist/src/commands/cache.js +31 -0
  34. package/dist/src/commands/cache.js.map +1 -0
  35. package/dist/src/commands/config.d.ts +4 -0
  36. package/dist/src/commands/config.d.ts.map +1 -0
  37. package/dist/src/commands/config.js +29 -0
  38. package/dist/src/commands/config.js.map +1 -0
  39. package/dist/src/commands/e2e.d.ts +4 -0
  40. package/dist/src/commands/e2e.d.ts.map +1 -0
  41. package/dist/src/commands/e2e.js +65 -0
  42. package/dist/src/commands/e2e.js.map +1 -0
  43. package/dist/src/commands/graph.d.ts +4 -0
  44. package/dist/src/commands/graph.d.ts.map +1 -0
  45. package/dist/src/commands/graph.js +783 -0
  46. package/dist/src/commands/graph.js.map +1 -0
  47. package/dist/src/commands/init.d.ts +4 -0
  48. package/dist/src/commands/init.d.ts.map +1 -0
  49. package/dist/src/commands/init.js +15 -0
  50. package/dist/src/commands/init.js.map +1 -0
  51. package/dist/src/commands/project.d.ts +4 -0
  52. package/dist/src/commands/project.d.ts.map +1 -0
  53. package/dist/src/commands/project.js +6 -0
  54. package/dist/src/commands/project.js.map +1 -0
  55. package/dist/src/commands/propose.d.ts +4 -0
  56. package/dist/src/commands/propose.d.ts.map +1 -0
  57. package/dist/src/commands/propose.js +26 -0
  58. package/dist/src/commands/propose.js.map +1 -0
  59. package/dist/src/commands/registry.d.ts +4 -0
  60. package/dist/src/commands/registry.d.ts.map +1 -0
  61. package/dist/src/commands/registry.js +6 -0
  62. package/dist/src/commands/registry.js.map +1 -0
  63. package/dist/src/commands/skills-install.d.ts +4 -0
  64. package/dist/src/commands/skills-install.d.ts.map +1 -0
  65. package/dist/src/commands/skills-install.js +158 -0
  66. package/dist/src/commands/skills-install.js.map +1 -0
  67. package/dist/src/commands/skills.d.ts +4 -0
  68. package/dist/src/commands/skills.d.ts.map +1 -0
  69. package/dist/src/commands/skills.js +19 -0
  70. package/dist/src/commands/skills.js.map +1 -0
  71. package/dist/src/commands/verify.d.ts +4 -0
  72. package/dist/src/commands/verify.d.ts.map +1 -0
  73. package/dist/src/commands/verify.js +31 -0
  74. package/dist/src/commands/verify.js.map +1 -0
  75. package/dist/src/core/engine.d.ts +33 -0
  76. package/dist/src/core/engine.d.ts.map +1 -0
  77. package/dist/src/core/engine.js +87 -0
  78. package/dist/src/core/engine.js.map +1 -0
  79. package/dist/src/core/engine.test.d.ts +2 -0
  80. package/dist/src/core/engine.test.d.ts.map +1 -0
  81. package/dist/src/core/engine.test.js +13 -0
  82. package/dist/src/core/engine.test.js.map +1 -0
  83. package/dist/src/core/session-state.d.ts +18 -0
  84. package/dist/src/core/session-state.d.ts.map +1 -0
  85. package/dist/src/core/session-state.js +55 -0
  86. package/dist/src/core/session-state.js.map +1 -0
  87. package/dist/src/core/session-state.test.d.ts +2 -0
  88. package/dist/src/core/session-state.test.d.ts.map +1 -0
  89. package/dist/src/core/session-state.test.js +90 -0
  90. package/dist/src/core/session-state.test.js.map +1 -0
  91. package/dist/src/core/subagent-timeout.d.ts +18 -0
  92. package/dist/src/core/subagent-timeout.d.ts.map +1 -0
  93. package/dist/src/core/subagent-timeout.js +61 -0
  94. package/dist/src/core/subagent-timeout.js.map +1 -0
  95. package/dist/src/core/subagent-timeout.test.d.ts +2 -0
  96. package/dist/src/core/subagent-timeout.test.d.ts.map +1 -0
  97. package/dist/src/core/subagent-timeout.test.js +57 -0
  98. package/dist/src/core/subagent-timeout.test.js.map +1 -0
  99. package/dist/src/core/task-sync.d.ts +19 -0
  100. package/dist/src/core/task-sync.d.ts.map +1 -0
  101. package/dist/src/core/task-sync.js +62 -0
  102. package/dist/src/core/task-sync.js.map +1 -0
  103. package/dist/src/core/task-sync.test.d.ts +2 -0
  104. package/dist/src/core/task-sync.test.d.ts.map +1 -0
  105. package/dist/src/core/task-sync.test.js +84 -0
  106. package/dist/src/core/task-sync.test.js.map +1 -0
  107. package/dist/src/graph/advanced-performance.d.ts +137 -0
  108. package/dist/src/graph/advanced-performance.d.ts.map +1 -0
  109. package/dist/src/graph/advanced-performance.js +375 -0
  110. package/dist/src/graph/advanced-performance.js.map +1 -0
  111. package/dist/src/graph/database.d.ts +79 -0
  112. package/dist/src/graph/database.d.ts.map +1 -0
  113. package/dist/src/graph/database.js +305 -0
  114. package/dist/src/graph/database.js.map +1 -0
  115. package/dist/src/graph/engine.d.ts +43 -0
  116. package/dist/src/graph/engine.d.ts.map +1 -0
  117. package/dist/src/graph/engine.js +334 -0
  118. package/dist/src/graph/engine.js.map +1 -0
  119. package/dist/src/graph/exporter.d.ts +56 -0
  120. package/dist/src/graph/exporter.d.ts.map +1 -0
  121. package/dist/src/graph/exporter.js +273 -0
  122. package/dist/src/graph/exporter.js.map +1 -0
  123. package/dist/src/graph/index.d.ts +21 -0
  124. package/dist/src/graph/index.d.ts.map +1 -0
  125. package/dist/src/graph/index.js +14 -0
  126. package/dist/src/graph/index.js.map +1 -0
  127. package/dist/src/graph/layouts.d.ts +77 -0
  128. package/dist/src/graph/layouts.d.ts.map +1 -0
  129. package/dist/src/graph/layouts.js +368 -0
  130. package/dist/src/graph/layouts.js.map +1 -0
  131. package/dist/src/graph/parser.d.ts +47 -0
  132. package/dist/src/graph/parser.d.ts.map +1 -0
  133. package/dist/src/graph/parser.js +228 -0
  134. package/dist/src/graph/parser.js.map +1 -0
  135. package/dist/src/graph/performance.d.ts +90 -0
  136. package/dist/src/graph/performance.d.ts.map +1 -0
  137. package/dist/src/graph/performance.js +275 -0
  138. package/dist/src/graph/performance.js.map +1 -0
  139. package/dist/src/graph/semantic.d.ts +151 -0
  140. package/dist/src/graph/semantic.d.ts.map +1 -0
  141. package/dist/src/graph/semantic.js +402 -0
  142. package/dist/src/graph/semantic.js.map +1 -0
  143. package/dist/src/graph/types.d.ts +114 -0
  144. package/dist/src/graph/types.d.ts.map +1 -0
  145. package/dist/src/graph/types.js +5 -0
  146. package/dist/src/graph/types.js.map +1 -0
  147. package/dist/src/graph/visualizer.d.ts +50 -0
  148. package/dist/src/graph/visualizer.d.ts.map +1 -0
  149. package/dist/src/graph/visualizer.js +869 -0
  150. package/dist/src/graph/visualizer.js.map +1 -0
  151. package/dist/src/openspec/apply.d.ts +16 -0
  152. package/dist/src/openspec/apply.d.ts.map +1 -0
  153. package/dist/src/openspec/apply.js +140 -0
  154. package/dist/src/openspec/apply.js.map +1 -0
  155. package/dist/src/openspec/archive.d.ts +3 -0
  156. package/dist/src/openspec/archive.d.ts.map +1 -0
  157. package/dist/src/openspec/archive.js +17 -0
  158. package/dist/src/openspec/archive.js.map +1 -0
  159. package/dist/src/openspec/e2e-generate.d.ts +39 -0
  160. package/dist/src/openspec/e2e-generate.d.ts.map +1 -0
  161. package/dist/src/openspec/e2e-generate.js +315 -0
  162. package/dist/src/openspec/e2e-generate.js.map +1 -0
  163. package/dist/src/openspec/e2e-runner.d.ts +32 -0
  164. package/dist/src/openspec/e2e-runner.d.ts.map +1 -0
  165. package/dist/src/openspec/e2e-runner.js +208 -0
  166. package/dist/src/openspec/e2e-runner.js.map +1 -0
  167. package/dist/src/openspec/explore.d.ts +3 -0
  168. package/dist/src/openspec/explore.d.ts.map +1 -0
  169. package/dist/src/openspec/explore.js +20 -0
  170. package/dist/src/openspec/explore.js.map +1 -0
  171. package/dist/src/openspec/propose.d.ts +8 -0
  172. package/dist/src/openspec/propose.d.ts.map +1 -0
  173. package/dist/src/openspec/propose.js +124 -0
  174. package/dist/src/openspec/propose.js.map +1 -0
  175. package/dist/src/openspec/verify.d.ts +13 -0
  176. package/dist/src/openspec/verify.d.ts.map +1 -0
  177. package/dist/src/openspec/verify.js +156 -0
  178. package/dist/src/openspec/verify.js.map +1 -0
  179. package/dist/src/platform/claudecode.d.ts +2 -0
  180. package/dist/src/platform/claudecode.d.ts.map +1 -0
  181. package/dist/src/platform/claudecode.js +7 -0
  182. package/dist/src/platform/claudecode.js.map +1 -0
  183. package/dist/src/platform/codex.d.ts +2 -0
  184. package/dist/src/platform/codex.d.ts.map +1 -0
  185. package/dist/src/platform/codex.js +7 -0
  186. package/dist/src/platform/codex.js.map +1 -0
  187. package/dist/src/platform/opencode.d.ts +2 -0
  188. package/dist/src/platform/opencode.d.ts.map +1 -0
  189. package/dist/src/platform/opencode.js +7 -0
  190. package/dist/src/platform/opencode.js.map +1 -0
  191. package/dist/src/platform/router.d.ts +13 -0
  192. package/dist/src/platform/router.d.ts.map +1 -0
  193. package/dist/src/platform/router.js +57 -0
  194. package/dist/src/platform/router.js.map +1 -0
  195. package/dist/src/skills/cache.d.ts +16 -0
  196. package/dist/src/skills/cache.d.ts.map +1 -0
  197. package/dist/src/skills/cache.js +53 -0
  198. package/dist/src/skills/cache.js.map +1 -0
  199. package/dist/src/skills/discovery.d.ts +12 -0
  200. package/dist/src/skills/discovery.d.ts.map +1 -0
  201. package/dist/src/skills/discovery.js +61 -0
  202. package/dist/src/skills/discovery.js.map +1 -0
  203. package/dist/src/skills/loader.d.ts +12 -0
  204. package/dist/src/skills/loader.d.ts.map +1 -0
  205. package/dist/src/skills/loader.js +69 -0
  206. package/dist/src/skills/loader.js.map +1 -0
  207. package/dist/src/skills/registry.d.ts +23 -0
  208. package/dist/src/skills/registry.d.ts.map +1 -0
  209. package/dist/src/skills/registry.js +68 -0
  210. package/dist/src/skills/registry.js.map +1 -0
  211. package/dist/src/utils/fs.d.ts +5 -0
  212. package/dist/src/utils/fs.d.ts.map +1 -0
  213. package/dist/src/utils/fs.js +23 -0
  214. package/dist/src/utils/fs.js.map +1 -0
  215. package/dist/src/utils/logger.d.ts +7 -0
  216. package/dist/src/utils/logger.d.ts.map +1 -0
  217. package/dist/src/utils/logger.js +8 -0
  218. package/dist/src/utils/logger.js.map +1 -0
  219. package/dist/src/utils/yaml.d.ts +3 -0
  220. package/dist/src/utils/yaml.d.ts.map +1 -0
  221. package/dist/src/utils/yaml.js +8 -0
  222. package/dist/src/utils/yaml.js.map +1 -0
  223. package/package.json +62 -0
  224. package/registry/skills-registry.yaml +218 -0
  225. package/skills/core/brainstorming/SKILL.md +259 -0
  226. package/skills/core/brainstorming/scripts/frame-template.html +214 -0
  227. package/skills/core/brainstorming/scripts/helper.js +88 -0
  228. package/skills/core/brainstorming/scripts/server.cjs +338 -0
  229. package/skills/core/brainstorming/scripts/start-server.sh +153 -0
  230. package/skills/core/brainstorming/scripts/stop-server.sh +55 -0
  231. package/skills/core/brainstorming/skill.yaml +12 -0
  232. package/skills/core/brainstorming/spec-document-reviewer-prompt.md +48 -0
  233. package/skills/core/brainstorming/visual-companion.md +286 -0
  234. package/skills/core/claude-code-core/SKILL.md +164 -0
  235. package/skills/core/claude-code-core/skill.yaml +14 -0
  236. package/skills/core/claude-code-prompt/SKILL.md +283 -0
  237. package/skills/core/claude-code-prompt/skill.yaml +14 -0
  238. package/skills/core/claude-code-subagent/SKILL.md +168 -0
  239. package/skills/core/claude-code-subagent/skill.yaml +14 -0
  240. package/skills/core/e2e-generate/SKILL.md +147 -0
  241. package/skills/core/e2e-generate/skill.yaml +12 -0
  242. package/skills/core/ecc-agents-md-router/SKILL.md +90 -0
  243. package/skills/core/ecc-agents-md-router/skill.yaml +12 -0
  244. package/skills/core/ecc-context-injector/SKILL.md +69 -0
  245. package/skills/core/ecc-context-injector/skill.yaml +12 -0
  246. package/skills/core/existing-code-caveman/SKILL.md +340 -0
  247. package/skills/core/existing-code-caveman/skill.yaml +12 -0
  248. package/skills/core/opsx-apply/SKILL.md +121 -0
  249. package/skills/core/opsx-apply/skill.yaml +12 -0
  250. package/skills/core/opsx-archive/SKILL.md +83 -0
  251. package/skills/core/opsx-archive/skill.yaml +12 -0
  252. package/skills/core/opsx-explore/SKILL.md +101 -0
  253. package/skills/core/opsx-explore/skill.yaml +12 -0
  254. package/skills/core/opsx-propose/SKILL.md +131 -0
  255. package/skills/core/opsx-propose/skill.yaml +16 -0
  256. package/skills/core/opsx-verify/SKILL.md +109 -0
  257. package/skills/core/opsx-verify/skill.yaml +12 -0
  258. package/skills/core/subagent-driven-development/SKILL.md +157 -0
  259. package/skills/core/subagent-driven-development/code-quality-reviewer-prompt.md +64 -0
  260. package/skills/core/subagent-driven-development/implementer-prompt.md +122 -0
  261. package/skills/core/subagent-driven-development/skill.yaml +12 -0
  262. package/skills/core/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  263. package/skills/core/writing-plans/SKILL.md +268 -0
  264. package/skills/core/writing-plans/plan-document-reviewer-prompt.md +63 -0
  265. package/skills/core/writing-plans/skill.yaml +12 -0
  266. package/skills/locale/chinese-code-review/SKILL.md +17 -0
  267. package/skills/locale/chinese-code-review/skill.yaml +16 -0
  268. package/skills/locale/chinese-commit-conventions/SKILL.md +17 -0
  269. package/skills/locale/chinese-commit-conventions/skill.yaml +16 -0
  270. package/skills/locale/chinese-documentation/SKILL.md +17 -0
  271. package/skills/locale/chinese-documentation/skill.yaml +16 -0
  272. package/skills/locale/chinese-git-workflow/SKILL.md +17 -0
  273. package/skills/locale/chinese-git-workflow/skill.yaml +16 -0
  274. package/templates/agents-md.md +42 -0
  275. package/templates/claude-md.md +44 -0
  276. package/templates/codex-md.md +49 -0
@@ -0,0 +1,283 @@
1
+ ---
2
+ id: "claude-code:prompt"
3
+ name: "Prompt 工程"
4
+ description: "构造和优化 AI 提示词"
5
+ category: "core"
6
+ phase: "always"
7
+ ---
8
+
9
+ # Claude Code Prompt 工程
10
+
11
+ 本技能提供构造和优化 AI 提示词的方法论,帮助用户更有效地与 Claude 交互。
12
+
13
+ ## 核心原则
14
+
15
+ ### 1. 清晰性
16
+
17
+ **明确表达意图:**
18
+ - 使用具体而非模糊的词汇
19
+ - 避免歧义和多义词
20
+ - 提供足够的上下文
21
+
22
+ **示例:**
23
+ ```
24
+ ❌ "帮我写个函数"
25
+ ✅ "编写一个 TypeScript 函数,接受用户 ID(字符串)作为参数,
26
+ 返回用户对象(包含 name、email、createdAt 字段),
27
+ 如果用户不存在则抛出 NotFoundError"
28
+ ```
29
+
30
+ ### 2. 结构化
31
+
32
+ **使用清晰的结构:**
33
+ - 分点列出需求
34
+ - 使用 Markdown 格式化
35
+ - 按重要性排序
36
+
37
+ **模板:**
38
+ ```markdown
39
+ ## 目标
40
+ [一句话描述最终目标]
41
+
42
+ ## 需求
43
+ 1. [需求 1]
44
+ 2. [需求 2]
45
+ 3. [需求 3]
46
+
47
+ ## 约束
48
+ - [约束 1]
49
+ - [约束 2]
50
+
51
+ ## 示例
52
+ [输入/输出示例]
53
+ ```
54
+
55
+ ### 3. 具体性
56
+
57
+ **提供具体细节:**
58
+ - 技术栈和版本
59
+ - 文件路径和位置
60
+ - 输入输出格式
61
+ - 错误处理要求
62
+
63
+ **示例:**
64
+ ```
65
+ ❌ "优化这段代码"
66
+ ✅ "优化 src/utils/parser.ts 中的 parseConfig 函数:
67
+ - 当前性能瓶颈在第 45-60 行的嵌套循环
68
+ - 目标:将时间复杂度从 O(n²) 降到 O(n log n)
69
+ - 保持现有的函数签名和返回类型不变
70
+ - 确保所有现有测试通过"
71
+ ```
72
+
73
+ ## Prompt 模式
74
+
75
+ ### 模式 1: 角色设定
76
+
77
+ ```markdown
78
+ 你是一位资深的 TypeScript 开发者,专注于:
79
+ - 类型安全
80
+ - 性能优化
81
+ - 代码可读性
82
+
83
+ 请以这个角色审查以下代码...
84
+ ```
85
+
86
+ ### 模式 2: 链式思考(Chain of Thought)
87
+
88
+ ```markdown
89
+ 请按以下步骤思考:
90
+
91
+ 1. **分析问题** - 理解需求和约束
92
+ 2. **设计方案** - 提出可能的解决方案
93
+ 3. **评估方案** - 比较优缺点
94
+ 4. **选择最优** - 给出推荐方案
95
+ 5. **实现细节** - 提供具体实现
96
+
97
+ 在每个步骤中明确你的推理过程。
98
+ ```
99
+
100
+ ### 模式 3: 少样本学习(Few-Shot)
101
+
102
+ ```markdown
103
+ ## 示例
104
+
105
+ 输入: "hello world"
106
+ 输出: "Hello World"
107
+
108
+ 输入: "foo bar baz"
109
+ 输出: "Foo Bar Baz"
110
+
111
+ 输入: "myVariableName"
112
+ 输出: "My Variable Name"
113
+
114
+ ## 任务
115
+
116
+ 请根据上述模式转换以下输入:
117
+ 输入: [你的输入]
118
+ ```
119
+
120
+ ### 模式 4: 约束满足
121
+
122
+ ```markdown
123
+ ## 需求
124
+ [主要需求]
125
+
126
+ ## 必须满足的约束
127
+ 1. [硬约束 1] - 不满足则方案无效
128
+ 2. [硬约束 2] - 不满足则方案无效
129
+
130
+ ## 优先满足的约束
131
+ 1. [软约束 1] - 尽量满足
132
+ 2. [软约束 2] - 尽量满足
133
+
134
+ ## 可选优化
135
+ 1. [优化 1] - 如果可能
136
+ 2. [优化 2] - 如果可能
137
+ ```
138
+
139
+ ## 优化技巧
140
+
141
+ ### 技巧 1: 迭代优化
142
+
143
+ ```
144
+ 第 1 轮: 提供基本需求,获取初始方案
145
+ 第 2 轮: 指出问题和不足,要求改进
146
+ 第 3 轮: 细化细节,要求优化
147
+ ...
148
+ ```
149
+
150
+ ### 技巧 2: 对比评估
151
+
152
+ ```markdown
153
+ 请提供 3 个不同的解决方案:
154
+
155
+ 方案 A: [侧重性能]
156
+ 方案 B: [侧重可读性]
157
+ 方案 C: [侧重可维护性]
158
+
159
+ 对每个方案分析:
160
+ - 优点
161
+ - 缺点
162
+ - 适用场景
163
+
164
+ 最后给出推荐。
165
+ ```
166
+
167
+ ### 技巧 3: 反向约束
168
+
169
+ ```markdown
170
+ 请确保你的方案:
171
+ - 不使用任何第三方库
172
+ - 不修改现有的 API 接口
173
+ - 不增加额外的配置文件
174
+ - 不引入新的依赖
175
+ ```
176
+
177
+ ### 技巧 4: 分步验证
178
+
179
+ ```markdown
180
+ 请按以下步骤完成任务:
181
+
182
+ 步骤 1: [任务描述]
183
+ 验证: [如何验证步骤 1 完成]
184
+
185
+ 步骤 2: [任务描述]
186
+ 验证: [如何验证步骤 2 完成]
187
+
188
+ 步骤 3: [任务描述]
189
+ 验证: [如何验证步骤 3 完成]
190
+ ```
191
+
192
+ ## 常见场景
193
+
194
+ ### 场景 1: 代码生成
195
+
196
+ ```markdown
197
+ ## 任务
198
+ 生成一个 [语言] 函数/类/模块
199
+
200
+ ## 规格
201
+ - 输入: [参数类型和含义]
202
+ - 输出: [返回类型和含义]
203
+ - 行为: [功能描述]
204
+
205
+ ## 约束
206
+ - [技术约束]
207
+ - [性能约束]
208
+ - [风格约束]
209
+
210
+ ## 示例
211
+ [输入输出示例]
212
+ ```
213
+
214
+ ### 场景 2: 代码审查
215
+
216
+ ```markdown
217
+ ## 审查范围
218
+ [文件路径和行号]
219
+
220
+ ## 关注点
221
+ - [ ] 安全性
222
+ - [ ] 性能
223
+ - [ ] 可读性
224
+ - [ ] 错误处理
225
+ - [ ] 测试覆盖
226
+
227
+ ## 标准
228
+ [团队的代码规范或最佳实践]
229
+ ```
230
+
231
+ ### 场景 3: 调试
232
+
233
+ ```markdown
234
+ ## 问题描述
235
+ [现象和期望行为]
236
+
237
+ ## 复现步骤
238
+ 1. [步骤 1]
239
+ 2. [步骤 2]
240
+ 3. [步骤 3]
241
+
242
+ ## 已尝试
243
+ - [尝试 1] - 结果: [失败原因]
244
+ - [尝试 2] - 结果: [失败原因]
245
+
246
+ ## 环境
247
+ - 操作系统: [OS]
248
+ - 运行时版本: [Node/Python/etc.]
249
+ - 依赖版本: [相关依赖]
250
+ ```
251
+
252
+ ### 场景 4: 架构设计
253
+
254
+ ```markdown
255
+ ## 背景
256
+ [项目背景和业务需求]
257
+
258
+ ## 需求
259
+ - [功能需求]
260
+ - [非功能需求: 性能、可扩展性、安全性等]
261
+
262
+ ## 约束
263
+ - [技术约束]
264
+ - [资源约束]
265
+ - [时间约束]
266
+
267
+ ## 期望输出
268
+ - 架构图
269
+ - 模块划分
270
+ - 接口定义
271
+ - 技术选型理由
272
+ ```
273
+
274
+ ## 红线
275
+
276
+ | 错误行为 | 正确做法 |
277
+ |---------|---------|
278
+ | 模糊的需求描述 | 提供具体、明确的需求 |
279
+ | 缺少上下文 | 提供足够的背景信息 |
280
+ | 一次性要求太多 | 分步骤、迭代地要求 |
281
+ | 忽略约束条件 | 明确列出所有约束 |
282
+ | 不验证输出 | 要求提供验证步骤 |
283
+ | 过度依赖单一 prompt | 使用多轮对话迭代优化 |
@@ -0,0 +1,14 @@
1
+ # skill.yaml
2
+ id: "claude-code:prompt"
3
+ version: "2.0.0"
4
+ name: "prompt-manager"
5
+ description: "构造和优化 AI 提示词"
6
+ category: "core"
7
+ phase: "always"
8
+ source: "claude-code"
9
+ trigger_conditions: []
10
+ dependencies: ["claude-code:core"]
11
+ inputs: []
12
+ outputs: []
13
+ size: "small"
14
+ cache_ttl: "30d"
@@ -0,0 +1,168 @@
1
+ ---
2
+ id: "claude-code:subagent"
3
+ name: "子代理调度"
4
+ description: "创建和管理子代理执行任务"
5
+ category: "core"
6
+ phase: "always"
7
+ ---
8
+
9
+ # Claude Code 子代理调度
10
+
11
+ 本技能提供创建和管理子代理(Subagent)的能力,用于并行执行独立任务。
12
+
13
+ ## 核心概念
14
+
15
+ ### 什么是子代理
16
+
17
+ 子代理是 Claude Code 会话中派生的独立执行单元,可以:
18
+ - 并行处理多个独立任务
19
+ - 拥有自己的上下文和工具访问权限
20
+ - 将结果返回给主代理
21
+
22
+ ### 何时使用子代理
23
+
24
+ **适合使用子代理的场景:**
25
+ - 2 个以上可以独立进行的任务
26
+ - 无共享状态的任务
27
+ - 无顺序依赖的任务
28
+ - 需要并行处理以提高效率
29
+
30
+ **不适合使用子代理的场景:**
31
+ - 任务之间有强依赖关系
32
+ - 需要共享状态或上下文
33
+ - 任务过于简单,调度开销不值得
34
+
35
+ ## 调度策略
36
+
37
+ ### 任务分解
38
+
39
+ 在调度子代理前,先将复杂任务分解为独立子任务:
40
+
41
+ 1. **识别独立性** - 分析任务之间的依赖关系
42
+ 2. **划分边界** - 确定每个子任务的输入和输出
43
+ 3. **分配资源** - 为每个子任务分配必要的上下文
44
+
45
+ ### 并行调度模式
46
+
47
+ ```yaml
48
+ # 模式 1: 扇出-汇聚(Fan-Out/Fan-In)
49
+ 主任务:
50
+ - 分解为 N 个子任务
51
+ - 并行派发给 N 个子代理
52
+ - 等待所有子代理完成
53
+ - 汇聚结果
54
+
55
+ # 模式 2: 流水线(Pipeline)
56
+ 阶段1 -> 阶段2 -> 阶段3
57
+ 每个阶段可以有多个并行子代理
58
+
59
+ # 模式 3: 工作池(Worker Pool)
60
+ 任务队列 -> 子代理池 -> 结果收集
61
+ 动态分配任务给空闲子代理
62
+ ```
63
+
64
+ ## 使用方式
65
+
66
+ ### 创建子代理
67
+
68
+ 在 Claude Code 中,使用 `dispatching-parallel-agents` 技能来调度子代理:
69
+
70
+ ```
71
+ 当面对 2 个以上可以独立进行、无共享状态或顺序依赖的任务时使用
72
+ ```
73
+
74
+ ### 子代理配置
75
+
76
+ 每个子代理可以配置:
77
+ - **任务描述** - 明确的输入和预期输出
78
+ - **上下文** - 必要的背景信息和文件路径
79
+ - **约束** - 时间限制、资源限制
80
+ - **验证标准** - 如何判断任务完成
81
+
82
+ ### 结果汇聚
83
+
84
+ 子代理完成后,主代理需要:
85
+ 1. **收集结果** - 从所有子代理获取输出
86
+ 2. **验证完整性** - 确保所有任务都已完成
87
+ 3. **处理错误** - 处理失败的子任务
88
+ 4. **整合输出** - 将结果合并为最终输出
89
+
90
+ ## 最佳实践
91
+
92
+ ### 任务粒度
93
+
94
+ - **不要太细** - 避免创建过多小子任务,增加调度开销
95
+ - **不要太粗** - 避免单个任务过大,失去并行优势
96
+ - **适中原则** - 每个子任务应该在 1-5 分钟内完成
97
+
98
+ ### 上下文管理
99
+
100
+ ```markdown
101
+ # 子代理上下文模板
102
+
103
+ ## 任务描述
104
+ [清晰描述任务目标]
105
+
106
+ ## 输入
107
+ - 文件路径: [相关文件]
108
+ - 数据: [必要数据]
109
+ - 约束: [限制条件]
110
+
111
+ ## 预期输出
112
+ - [输出格式和内容]
113
+
114
+ ## 验证标准
115
+ - [如何判断任务完成]
116
+ ```
117
+
118
+ ### 错误处理
119
+
120
+ 1. **超时处理** - 为子任务设置合理超时
121
+ 2. **重试策略** - 对于暂时性失败,允许重试
122
+ 3. **降级方案** - 子任务失败时的备选方案
123
+ 4. **日志记录** - 记录子代理的执行过程
124
+
125
+ ## 常见用例
126
+
127
+ ### 用例 1: 并行代码审查
128
+
129
+ ```
130
+ 主代理: 收到代码审查请求
131
+ ├─ 子代理1: 安全审查
132
+ ├─ 子代理2: 性能审查
133
+ ├─ 子代理3: 代码风格审查
134
+ └─ 子代理4: 测试覆盖审查
135
+ 主代理: 汇聚所有审查结果
136
+ ```
137
+
138
+ ### 用例 2: 多文件重构
139
+
140
+ ```
141
+ 主代理: 收到重构需求
142
+ ├─ 子代理1: 重构模块 A
143
+ ├─ 子代理2: 重构模块 B
144
+ ├─ 子代理3: 重构模块 C
145
+ └─ 子代理4: 更新测试
146
+ 主代理: 验证整体一致性
147
+ ```
148
+
149
+ ### 用例 3: 并行测试
150
+
151
+ ```
152
+ 主代理: 运行完整测试套件
153
+ ├─ 子代理1: 单元测试
154
+ ├─ 子代理2: 集成测试
155
+ ├─ 子代理3: E2E 测试
156
+ └─ 子代理4: 性能测试
157
+ 主代理: 生成测试报告
158
+ ```
159
+
160
+ ## 红线
161
+
162
+ | 错误行为 | 正确做法 |
163
+ |---------|---------|
164
+ | 创建过多子代理 | 控制并发数量,通常 3-5 个 |
165
+ | 忽略子代理失败 | 处理错误并提供降级方案 |
166
+ | 不验证结果 | 汇聚时验证每个子任务输出 |
167
+ | 共享可变状态 | 通过输入/输出传递数据 |
168
+ | 无超时限制 | 为每个子任务设置超时 |
@@ -0,0 +1,14 @@
1
+ # skill.yaml
2
+ id: "claude-code:subagent"
3
+ version: "2.0.0"
4
+ name: "subagent-dispatcher"
5
+ description: "创建和管理子代理执行任务"
6
+ category: "core"
7
+ phase: "always"
8
+ source: "claude-code"
9
+ trigger_conditions: []
10
+ dependencies: ["claude-code:core"]
11
+ inputs: []
12
+ outputs: []
13
+ size: "small"
14
+ cache_ttl: "30d"
@@ -0,0 +1,147 @@
1
+ ---
2
+ name: e2e-generate
3
+ description: "从 specs.md 驱动生成 E2E 测试需求、计划和代码骨架。在 opsx:apply 完成后、opsx:verify 之前使用。借鉴 prodready 的 E2E-as-first-class-citizen 设计。"
4
+ ---
5
+
6
+ # E2E 测试生成
7
+
8
+ 从规格文档驱动生成 E2E 测试,而非依赖实现者手写。
9
+
10
+ ## 触发条件
11
+
12
+ **触发**:
13
+ - opsx:apply 已完成,业务代码已实现
14
+ - 用户要求"生成 E2E 测试"或"跑 E2E"
15
+ - specs.md 中有 MUST/SHALL 级别的需求
16
+
17
+ **不触发**:
18
+ - ❌ specs.md 尚未生成
19
+ - ❌ 业务代码尚未实现
20
+
21
+ **开始时宣布:** "我正在使用 e2e-generate 技能生成 E2E 测试。"
22
+
23
+ ## SDS Workflow 位置
24
+
25
+ ```
26
+ Phase 4 Phase 5 Phase 6 Phase 7
27
+ opsx:apply → e2e-generate → opsx:verify → opsx:archive
28
+
29
+ ├── e2e/requirements.md(覆盖矩阵)
30
+ ├── e2e/plan.md(测试计划)
31
+ ├── e2e/tests/*.test.ts(测试骨架)
32
+ └── e2e/report.md(执行报告)
33
+ ```
34
+
35
+ ## 流程
36
+
37
+ ### 阶段 1:自动生成 E2E 需求
38
+
39
+ 从 specs.md 解析所有 MUST/SHALL/SHOULD 需求,为每个需求生成测试用例:
40
+
41
+ - **正向路径**:正常流程应该成功
42
+ - **反向路径**(MUST/SHALL):参数错误、权限不足等异常
43
+ - **边界情况**(MUST):空值、极值、并发等
44
+
45
+ 输出:`e2e/requirements.md`
46
+
47
+ ### 阶段 2:自动生成 E2E 计划
48
+
49
+ 输出:`e2e/plan.md`
50
+
51
+ ### 阶段 3:自动生成测试代码骨架
52
+
53
+ 为每个需求生成 fail-first 的测试文件。
54
+
55
+ 输出:`e2e/tests/*.test.ts`
56
+
57
+ ### 阶段 4:调度子代理填充测试代码
58
+
59
+ 使用以下模板调度子代理填充测试代码:
60
+
61
+ ```
62
+ spawn_agent:
63
+ description: "填充 E2E 测试代码"
64
+ message: |
65
+ 你正在为以下 E2E 测试需求填充测试代码。
66
+
67
+ ## E2E 需求文档
68
+ [e2e/requirements.md 的完整内容]
69
+
70
+ ## 测试代码骨架
71
+ [e2e/tests/*.test.ts 中需要填充的文件内容]
72
+
73
+ ## 业务代码
74
+ [相关的业务代码文件路径和内容]
75
+
76
+ ## 你的工作
77
+
78
+ 1. 阅读 E2E 需求文档,理解每个测试用例的预期行为
79
+ 2. 阅读业务代码,了解 API 接口和数据格式
80
+ 3. 填充每个测试文件中的 TODO:
81
+ - 设置测试数据(使用 beforeAll / beforeEach)
82
+ - 调用 API 或函数
83
+ - 编写断言(验证状态码、响应格式、业务逻辑)
84
+ 4. 移除 `expect(true).toBe(false)` fail-first 占位
85
+ 5. 运行测试确认可以通过
86
+
87
+ ## 要求
88
+
89
+ - 测试必须覆盖正向+反向+边界情况
90
+ - 测试数据必须独立,不依赖其他测试的执行顺序
91
+ - 每个测试必须可以单独运行
92
+ - 使用项目已有的测试工具和辅助函数
93
+ ```
94
+
95
+ ### 阶段 5:调度子代理执行测试并生成报告
96
+
97
+ ```
98
+ spawn_agent:
99
+ description: "执行 E2E 测试并生成报告"
100
+ message: |
101
+ 你正在执行 E2E 测试并生成执行报告。
102
+
103
+ ## 测试目录
104
+ e2e/tests/
105
+
106
+ ## 你的工作
107
+
108
+ 1. 运行所有 E2E 测试
109
+ 2. 收集测试结果(通过/失败/跳过)
110
+ 3. 对于失败的测试:
111
+ - 分析失败原因
112
+ - 记录错误信息
113
+ - 提供排查方向
114
+ 4. 生成执行报告到 e2e/report.md
115
+
116
+ ## 报告格式
117
+
118
+ # E2E 执行报告
119
+
120
+ **结果:** ✅/❌ X/Y 通过 (XX.X%)
121
+ **耗时:** Xs
122
+
123
+ | # | 测试用例 | 结果 | 耗时 |
124
+ |---|----------|------|------|
125
+ | 1 | TC-001: 用户注册 | ✅ | 123ms |
126
+
127
+ ## 失败分析(如有)
128
+ ### TC-XXX: [用例名]
129
+ **错误:** [错误信息]
130
+ **排查方向:** [建议]
131
+ ```
132
+
133
+ ## 与 prodready 的区别
134
+
135
+ | 维度 | prodready | TrenchCraft E2E |
136
+ |------|-----------|-----------------|
137
+ | 流水线 | 7 个独立阶段 | 1 个技能(3 步自动生成 + 2 步子代理) |
138
+ | 耗时 | ~27 分钟(含完整流水线) | ~3 分钟生成 + 按需填充 |
139
+ | 触发 | 固定阶段,不可跳过 | 可选,apply 后按需触发 |
140
+ | 灵活性 | 测试策略也走完整流水线 | 生成骨架后自由填充 |
141
+
142
+ ## 要点
143
+
144
+ - **specs.md 是唯一输入** — E2E 从规格驱动生成,不看实现代码
145
+ - **fail-first** — 生成的测试骨架默认失败,填充后才通过
146
+ - **覆盖矩阵** — requirements.md 清晰展示需求→测试的映射
147
+ - **可选阶段** — 不强制,小功能可以跳过
@@ -0,0 +1,12 @@
1
+ id: "e2e-generate"
2
+ version: "2.0.0"
3
+ name: "e2e-generate"
4
+ description: "从 specs.md 驱动生成 E2E 测试需求、计划和代码骨架"
5
+ category: "core"
6
+ phase: "phase-4"
7
+ source: "superpowers"
8
+ dependencies: ["opsx:apply"]
9
+ inputs: ["openspec/changes/{name}/specs.md"]
10
+ outputs: ["openspec/changes/{name}/e2e/requirements.md", "openspec/changes/{name}/e2e/plan.md", "openspec/changes/{name}/e2e/tests/"]
11
+ size: "medium"
12
+ cache_ttl: "7d"