@waoooo/claude-skills 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 (264) hide show
  1. package/README.md +48 -0
  2. package/package.json +28 -0
  3. package/registry.json +431 -0
  4. package/skills/acceptance-review/SKILL.md +537 -0
  5. package/skills/all-plan/SKILL.md +19 -0
  6. package/skills/all-plan/references/flow.md +750 -0
  7. package/skills/api-docs-generate/SKILL.md +204 -0
  8. package/skills/api-docs-generate/assets/templates/api.mdx +140 -0
  9. package/skills/api-docs-generate/scripts/generate-api-docs.ts +308 -0
  10. package/skills/ask/SKILL.md +42 -0
  11. package/skills/autonew/SKILL.md +34 -0
  12. package/skills/capability-analyze/SKILL.md +300 -0
  13. package/skills/capability-analyze/scripts/analyze-capabilities.ts +531 -0
  14. package/skills/capability-docs-generate/SKILL.md +155 -0
  15. package/skills/capability-docs-generate/assets/templates/capability.mdx +271 -0
  16. package/skills/capability-docs-generate/scripts/generate-capability-docs.ts +358 -0
  17. package/skills/capability-tree-query/SKILL.md +112 -0
  18. package/skills/capability-tree-query/scripts/build-capability-tree.ts +402 -0
  19. package/skills/changelog-generator/SKILL.md +104 -0
  20. package/skills/continue/SKILL.md +39 -0
  21. package/skills/continue/agents/openai.yaml +3 -0
  22. package/skills/creating-skills/SKILL.md +158 -0
  23. package/skills/creating-skills/references/official_best_practices.md +128 -0
  24. package/skills/creating-skills/references/skill_examples.md +199 -0
  25. package/skills/docx/LICENSE.txt +30 -0
  26. package/skills/docx/SKILL.md +197 -0
  27. package/skills/docx/docx-js.md +350 -0
  28. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  29. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  30. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  31. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  32. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  33. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  34. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  35. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  36. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  37. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  38. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  39. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  40. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  41. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  42. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  43. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  44. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  45. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  46. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  47. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  48. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  49. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  50. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  51. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  52. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  53. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  54. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  55. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  56. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  57. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  58. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  59. package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  60. package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  61. package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  62. package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  63. package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  64. package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  65. package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  66. package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  67. package/skills/docx/ooxml/scripts/pack.py +159 -0
  68. package/skills/docx/ooxml/scripts/unpack.py +29 -0
  69. package/skills/docx/ooxml/scripts/validate.py +69 -0
  70. package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  71. package/skills/docx/ooxml/scripts/validation/base.py +951 -0
  72. package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  73. package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  74. package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  75. package/skills/docx/ooxml.md +610 -0
  76. package/skills/docx/scripts/__init__.py +1 -0
  77. package/skills/docx/scripts/document.py +1276 -0
  78. package/skills/docx/scripts/templates/comments.xml +3 -0
  79. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  80. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  81. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  82. package/skills/docx/scripts/templates/people.xml +3 -0
  83. package/skills/docx/scripts/utilities.py +374 -0
  84. package/skills/git-branch-create/SKILL.md +170 -0
  85. package/skills/git-branch-merge/SKILL.md +176 -0
  86. package/skills/git-commit/SKILL.md +56 -0
  87. package/skills/git-commit/references/commit_examples.md +311 -0
  88. package/skills/github-actions-trigger/SKILL.md +367 -0
  89. package/skills/github-issue-create/SKILL.md +294 -0
  90. package/skills/github-pr-creation/SKILL.md +137 -0
  91. package/skills/github-pr-creation/references/pr_templates.md +187 -0
  92. package/skills/github-pr-merge/SKILL.md +112 -0
  93. package/skills/github-pr-review/SKILL.md +110 -0
  94. package/skills/github-pr-review/references/severity_guide.md +168 -0
  95. package/skills/job-create/SKILL.md +294 -0
  96. package/skills/job-create/scripts/create-job.ts +105 -0
  97. package/skills/job-workflow/SKILL.md +212 -0
  98. package/skills/keyword-extract/SKILL.md +229 -0
  99. package/skills/mcp-builder/LICENSE.txt +202 -0
  100. package/skills/mcp-builder/SKILL.md +236 -0
  101. package/skills/mcp-builder/reference/evaluation.md +602 -0
  102. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  103. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  104. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  105. package/skills/mcp-builder/scripts/connections.py +151 -0
  106. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  107. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  108. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  109. package/skills/mdx-to-openspec/SKILL.md +827 -0
  110. package/skills/mdx-to-openspec/scripts/mdx-to-openspec.ts +320 -0
  111. package/skills/mounted/SKILL.md +20 -0
  112. package/skills/multi-model-review/SKILL.md +459 -0
  113. package/skills/notion-automation/SKILL.md +215 -0
  114. package/skills/openspec-review/SKILL.md +513 -0
  115. package/skills/pdf/LICENSE.txt +30 -0
  116. package/skills/pdf/SKILL.md +294 -0
  117. package/skills/pdf/forms.md +205 -0
  118. package/skills/pdf/reference.md +612 -0
  119. package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  120. package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  121. package/skills/pdf/scripts/check_fillable_fields.py +12 -0
  122. package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  123. package/skills/pdf/scripts/create_validation_image.py +41 -0
  124. package/skills/pdf/scripts/extract_form_field_info.py +152 -0
  125. package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  126. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  127. package/skills/pend/SKILL.md +33 -0
  128. package/skills/ping/SKILL.md +39 -0
  129. package/skills/pptx/LICENSE.txt +30 -0
  130. package/skills/pptx/SKILL.md +484 -0
  131. package/skills/pptx/html2pptx.md +625 -0
  132. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  133. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  134. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  135. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  136. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  137. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  138. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  139. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  140. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  141. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  142. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  143. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  144. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  145. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  146. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  147. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  148. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  149. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  150. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  151. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  152. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  153. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  154. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  155. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  156. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  157. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  158. package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  159. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  160. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  161. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  162. package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  163. package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  164. package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  165. package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  166. package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  167. package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  168. package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  169. package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  170. package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  171. package/skills/pptx/ooxml/scripts/pack.py +159 -0
  172. package/skills/pptx/ooxml/scripts/unpack.py +29 -0
  173. package/skills/pptx/ooxml/scripts/validate.py +69 -0
  174. package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  175. package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  176. package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  177. package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  178. package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  179. package/skills/pptx/ooxml.md +427 -0
  180. package/skills/pptx/scripts/html2pptx.js +979 -0
  181. package/skills/pptx/scripts/inventory.py +1020 -0
  182. package/skills/pptx/scripts/rearrange.py +231 -0
  183. package/skills/pptx/scripts/replace.py +385 -0
  184. package/skills/pptx/scripts/thumbnail.py +450 -0
  185. package/skills/progress-update/SKILL.md +394 -0
  186. package/skills/progress-update/scripts/update-progress.ts +221 -0
  187. package/skills/release-automation/SKILL.md +306 -0
  188. package/skills/requirement-parse/SKILL.md +212 -0
  189. package/skills/requirement-parse/scripts/infer-builder-config.ts +346 -0
  190. package/skills/requirement-parse/scripts/merge-requirements.ts +228 -0
  191. package/skills/requirement-parse/scripts/parse-docs.ts +206 -0
  192. package/skills/requirement-parse/scripts/parse-openspec.ts +168 -0
  193. package/skills/roadmap-docs-generate/SKILL.md +483 -0
  194. package/skills/roadmap-docs-generate/assets/templates/ROADMAP.mdx +75 -0
  195. package/skills/roadmap-docs-generate/assets/templates/ROADMAP.mdx.template +330 -0
  196. package/skills/roadmap-docs-generate/assets/templates/TODO.mdx +56 -0
  197. package/skills/roadmap-docs-generate/assets/templates/TODO.mdx.template +363 -0
  198. package/skills/roadmap-docs-generate/scripts/json-to-mdx.ts +445 -0
  199. package/skills/roadmap-docs-generate/scripts/json-to-mdx.ts.backup +411 -0
  200. package/skills/roadmap-generate/SKILL.md +396 -0
  201. package/skills/roadmap-generate/scripts/generate-roadmap.ts +496 -0
  202. package/skills/skill-creator/LICENSE.txt +202 -0
  203. package/skills/skill-creator/SKILL.md +356 -0
  204. package/skills/skill-creator/references/output-patterns.md +82 -0
  205. package/skills/skill-creator/references/workflows.md +28 -0
  206. package/skills/skill-creator/scripts/init_skill.py +303 -0
  207. package/skills/skill-creator/scripts/package_skill.py +110 -0
  208. package/skills/skill-creator/scripts/quick_validate.py +95 -0
  209. package/skills/spec-generate/SKILL.md +408 -0
  210. package/skills/spec-generate/scripts/generate-specs.ts +538 -0
  211. package/skills/spec-generate/scripts/generate-tasks.ts +174 -0
  212. package/skills/specs-review/SKILL.md +370 -0
  213. package/skills/task-execute/SKILL.md +399 -0
  214. package/skills/task-update-status/SKILL.md +349 -0
  215. package/skills/task-update-status/scripts/update-task-status.ts +192 -0
  216. package/skills/task-verify/SKILL.md +407 -0
  217. package/skills/ui-ux-pro-max/SKILL.md +386 -0
  218. package/skills/ui-ux-pro-max/data/charts.csv +26 -0
  219. package/skills/ui-ux-pro-max/data/colors.csv +97 -0
  220. package/skills/ui-ux-pro-max/data/icons.csv +101 -0
  221. package/skills/ui-ux-pro-max/data/landing.csv +31 -0
  222. package/skills/ui-ux-pro-max/data/products.csv +97 -0
  223. package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  224. package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  225. package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  226. package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  227. package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  228. package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  229. package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  230. package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  231. package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  232. package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  233. package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  234. package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  235. package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  236. package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  237. package/skills/ui-ux-pro-max/data/styles.csv +68 -0
  238. package/skills/ui-ux-pro-max/data/typography.csv +58 -0
  239. package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  240. package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  241. package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  242. package/skills/ui-ux-pro-max/scripts/core.py +253 -0
  243. package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  244. package/skills/ui-ux-pro-max/scripts/search.py +114 -0
  245. package/skills/vercel-automation/SKILL.md +226 -0
  246. package/skills/webapp-testing/LICENSE.txt +202 -0
  247. package/skills/webapp-testing/SKILL.md +96 -0
  248. package/skills/webapp-testing/examples/console_logging.py +35 -0
  249. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  250. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  251. package/skills/webapp-testing/scripts/with_server.py +106 -0
  252. package/skills/worktree-manager/SKILL.md +725 -0
  253. package/skills/worktree-manager/config.json +15 -0
  254. package/skills/worktree-manager/scripts/allocate-ports.sh +100 -0
  255. package/skills/worktree-manager/scripts/cleanup.sh +185 -0
  256. package/skills/worktree-manager/scripts/launch-agent.sh +155 -0
  257. package/skills/worktree-manager/scripts/register.sh +125 -0
  258. package/skills/worktree-manager/scripts/release-ports.sh +48 -0
  259. package/skills/worktree-manager/scripts/status.sh +169 -0
  260. package/skills/worktree-manager/scripts/sync.sh +168 -0
  261. package/skills/worktree-manager/templates/worktree.json +23 -0
  262. package/skills/xlsx/LICENSE.txt +30 -0
  263. package/skills/xlsx/SKILL.md +289 -0
  264. package/skills/xlsx/recalc.py +178 -0
@@ -0,0 +1,827 @@
1
+ # Skill: mdx-to-openspec
2
+
3
+ ## 功能
4
+
5
+ 从 MDX 需求文档生成 OpenSpec 提案(proposal.md, tasks.md, design.md)。
6
+
7
+ **重要**:OpenSpec 没有 `create` 命令,需要手动创建目录和文件。
8
+
9
+ ## 何时调用
10
+
11
+ - 用户提供了 MDX 文档
12
+ - 需要生成结构化的 OpenSpec
13
+ - 在创建 Job 之后,解析需求之前
14
+
15
+ ## 输入
16
+
17
+ - `mdxPath` - MDX 文档路径
18
+ - `changeName` - OpenSpec change 名称(kebab-case, verb-led,例如:refactor-pricing-frontend)
19
+ - `openspecRoot` - OpenSpec 根目录(默认:`../../../../waoooo/openspec`)
20
+
21
+ ## 输出
22
+
23
+ - `openspec/changes/<change-name>/` - OpenSpec 目录
24
+ - `proposal.md` - 提案文档(必须)
25
+ - `tasks.md` - 任务列表(必须)
26
+ - `design.md` - 设计文档(可选)
27
+ - `specs/` - 规范变更目录(可选)
28
+
29
+ ## 执行步骤
30
+
31
+ ### 0. 检查现有 OpenSpec(必须先执行)
32
+
33
+ **在创建之前,必须先检查是否有类似的 OpenSpec!**
34
+
35
+ **步骤**:
36
+
37
+ 1. **读取配置获取路径**
38
+ ```typescript
39
+ // 从 project.config.json 读取
40
+ const config = getProjectConfig();
41
+ const openspecRoot = config.openspec.root; // OpenSpec 数据目录
42
+ const workspaceRoot = config.openspec.workspaceRoot; // OpenSpec CLI 工作目录
43
+ ```
44
+
45
+ 2. **尝试使用 openspec CLI**
46
+ ```bash
47
+ bash(
48
+ command="openspec list",
49
+ workdir=workspaceRoot // 从配置读取
50
+ )
51
+ ```
52
+
53
+ 3. **如果失败(未初始化),直接读取目录**
54
+ ```bash
55
+ bash(
56
+ command="ls -la changes/",
57
+ workdir=openspecRoot // 从配置读取
58
+ )
59
+ ```
60
+
61
+ **重要说明**:
62
+ - **所有路径都从 `project.config.json` 读取**,不要硬编码
63
+ - `openspec` CLI 需要在 `workspaceRoot` 运行(有 `.openspec/` 配置)
64
+ - OpenSpec 数据在 `openspecRoot`(`changes/` 和 `specs/` 目录)
65
+ - 如果 `openspec list` 失败,fallback 到直接读取目录
66
+
67
+ **检查内容**:
68
+ - 是否有相同或类似的 change-name?
69
+ - 是否有相同的功能或目标?
70
+ - 是否有冲突的变更?
71
+
72
+ **如果发现类似的 OpenSpec**:
73
+
74
+ 1. **读取现有 OpenSpec 详情**
75
+ ```bash
76
+ # 读取所有相关 OpenSpec 的 proposal.md
77
+ Read(filePath="<openspecRoot>/changes/<change-name>/proposal.md")
78
+ ```
79
+
80
+ 2. **智能相似度检测**
81
+
82
+ **检测维度**:
83
+ - **关键词匹配**:比较 MDX keywords 和 OpenSpec keywords 的重合度
84
+ - **目标相似度**:比较 MDX 的目标和 OpenSpec 的 Why/What Changes
85
+ - **任务重叠度**:比较 MDX 的任务列表和 OpenSpec 的 tasks.md
86
+
87
+ **相似度判断**:
88
+ ```
89
+ 关键词重合度 > 70%
90
+ AND
91
+ (目标描述相似 OR 任务列表重叠 > 50%)
92
+ → 判定为相同任务
93
+ ```
94
+
95
+ 3. **自动决策(基于相似度)**
96
+
97
+ **场景 1:高度相似(相似度 > 80%)**
98
+ ```
99
+ ✅ 发现高度相似的 OpenSpec: pricing-frontend-refactor
100
+
101
+ 📊 相似度分析:
102
+ - 关键词重合: 85% (pricing, frontend, refactor, membership)
103
+ - 目标相似度: 90% (都是重构前端架构)
104
+ - 任务重叠: 75% (重命名包、三层架构)
105
+
106
+ 📋 自动决策: 使用现有 OpenSpec
107
+
108
+ 原因: 内容高度相似,很可能是同一个任务
109
+
110
+ 📂 路径: openspec/changes/pricing-frontend-refactor/
111
+
112
+ ⏭️ 跳过创建步骤,直接解析 OpenSpec
113
+ ```
114
+
115
+ **场景 2:中度相似(50% < 相似度 < 80%)**
116
+ ```
117
+ ⚠️ 发现中度相似的 OpenSpec: pricing-frontend-refactor
118
+
119
+ 📊 相似度分析:
120
+ - 关键词重合: 60% (pricing, frontend)
121
+ - 目标相似度: 50% (都涉及前端,但目标不完全相同)
122
+ - 任务重叠: 40%
123
+
124
+ 📋 自动决策: 创建新的 OpenSpec
125
+
126
+ 原因: 相似度不够高,可能是不同的任务
127
+
128
+ 💡 建议: 使用更具体的 change-name 以区分
129
+ - 当前: pricing-phase-1.5-refactor
130
+ - 现有: pricing-frontend-refactor
131
+
132
+ ✅ 继续创建新的 OpenSpec
133
+ ```
134
+
135
+ **场景 3:低度相似(相似度 < 50%)**
136
+ ```
137
+ ℹ️ 发现相关的 OpenSpec: pricing-backend-api
138
+
139
+ 📊 相似度分析:
140
+ - 关键词重合: 30% (pricing)
141
+ - 目标相似度: 20%
142
+ - 任务重叠: 10%
143
+
144
+ 📋 自动决策: 创建新的 OpenSpec
145
+
146
+ 原因: 相似度低,明显是不同的任务
147
+
148
+ ✅ 继续创建新的 OpenSpec
149
+ ```
150
+
151
+ 4. **相似度计算方法**
152
+
153
+ ```typescript
154
+ // 伪代码
155
+ function calculateSimilarity(mdx, openspec) {
156
+ // 1. 关键词重合度
157
+ const keywordOverlap =
158
+ intersection(mdx.keywords, openspec.keywords).length /
159
+ union(mdx.keywords, openspec.keywords).length;
160
+
161
+ // 2. 目标相似度(文本相似度)
162
+ const goalSimilarity =
163
+ cosineSimilarity(mdx.goal, openspec.why + openspec.whatChanges);
164
+
165
+ // 3. 任务重叠度
166
+ const taskOverlap =
167
+ intersection(mdx.tasks, openspec.tasks).length /
168
+ union(mdx.tasks, openspec.tasks).length;
169
+
170
+ // 加权平均
171
+ return keywordOverlap * 0.4 + goalSimilarity * 0.3 + taskOverlap * 0.3;
172
+ }
173
+ ```
174
+
175
+ **重要**:
176
+ - **基于内容相似度判断**,而不是只看名字
177
+ - **自动决策**,避免阻塞流程
178
+ - **透明化决策过程**,显示相似度分析结果
179
+ - **阈值可调**,根据实际情况优化
180
+ - 是否使用不同的 change-name?
181
+
182
+ **如果没有类似的 OpenSpec**:
183
+ - 继续执行步骤 1
184
+
185
+ ### 1. 读取 MDX 文档
186
+
187
+ ```bash
188
+ # 使用 Read 工具读取 MDX 内容
189
+ Read(filePath=<mdx-path>)
190
+ ```
191
+
192
+ **提取信息**:
193
+ - **keywords**(必须):
194
+ - 优先从 frontmatter 的 `keywords` 字段提取
195
+ - 如果没有,从标题和内容中自动提取关键词
196
+ - 提取规则:功能名称、模块名称、技术栈、操作类型(如 refactor, add, update)
197
+ - 文档标题
198
+ - Phase 描述
199
+ - 任务列表
200
+ - 背景和目标
201
+
202
+ ### 2. 创建 OpenSpec 目录
203
+
204
+ ```bash
205
+ # 使用 Bash 工具创建目录
206
+ cd <openspec-root>
207
+ mkdir -p changes/<change-name>/specs
208
+ ```
209
+
210
+ **目录结构**(参考 `openspec/AGENTS.md` 第 159 行):
211
+ ```
212
+ changes/<change-name>/
213
+ ├── proposal.md # 必须
214
+ ├── tasks.md # 必须
215
+ ├── design.md # 可选
216
+ └── specs/ # 可选
217
+ ```
218
+
219
+ ### 3. 创建 proposal.md
220
+
221
+ ```bash
222
+ # 使用 Write 工具创建 proposal.md
223
+ Write(
224
+ filePath="<openspec-root>/changes/<change-name>/proposal.md",
225
+ content="<从 MDX 提取的内容>"
226
+ )
227
+ ```
228
+
229
+ **格式**(参考 `openspec/AGENTS.md` 第 161-175 行):
230
+ ```markdown
231
+ ---
232
+ keywords: [从 MDX frontmatter 提取的 keywords]
233
+ ---
234
+
235
+ # Change: [简短描述]
236
+
237
+ ## Why
238
+ [1-2 句话说明问题/机会]
239
+
240
+ ## What Changes
241
+ - [变更列表]
242
+ - [标记破坏性变更为 **BREAKING**]
243
+
244
+ ## Impact
245
+ - Affected specs: [影响的能力]
246
+ - Affected code: [关键文件/系统]
247
+ ```
248
+
249
+ **从 MDX 提取**:
250
+ - **keywords**:
251
+ - 优先从 MDX frontmatter 的 `keywords` 字段提取
252
+ - 如果 MDX 没有 keywords,从标题、描述、内容中自动提取
253
+ - 提取规则:功能名称、模块名称、技术栈、操作类型
254
+ - 示例:[pricing, 定价, membership, 会员, refactor, 重构, frontend, 前端]
255
+ - **Why**: 从 MDX 的背景部分提取
256
+ - **What Changes**: 从 Phase 描述提取
257
+ - **Impact**: 从任务列表推断
258
+
259
+ **重要**:
260
+ - frontmatter 中的 keywords 是必须的,用于后续的能力匹配
261
+ - 如果 MDX 没有 keywords,必须自动提取,不能留空
262
+ - keywords 应该包含:功能名称、相关模块、技术栈等
263
+
264
+ ### 4. 创建 tasks.md
265
+
266
+ ```bash
267
+ # 使用 Write 工具创建 tasks.md
268
+ Write(
269
+ filePath="<openspec-root>/changes/<change-name>/tasks.md",
270
+ content="<从 MDX 提取的任务列表>"
271
+ )
272
+ ```
273
+
274
+ **格式**(参考 `openspec/AGENTS.md` 第 198-205 行):
275
+ ```markdown
276
+ ## 1. Implementation
277
+ - [ ] 1.1 任务 1
278
+ - [ ] 1.2 任务 2
279
+ - [ ] 1.3 任务 3
280
+
281
+ ## 2. Testing
282
+ - [ ] 2.1 测试 1
283
+ - [ ] 2.2 测试 2
284
+ ```
285
+
286
+ **从 MDX 提取**:
287
+ - 从 Phase 的任务列表提取
288
+ - 按顺序编号
289
+ - 添加 checkbox `- [ ]`
290
+
291
+ ### 5. 创建 design.md(可选)
292
+
293
+ **仅在以下情况创建**(参考 `openspec/AGENTS.md` 第 207-212 行):
294
+ - 跨服务/模块的变更
295
+ - 新的架构模式
296
+ - 复杂的技术决策
297
+ - 安全、性能或迁移复杂性
298
+
299
+ **对于 Phase 1.5 前端架构重构**:
300
+ - ✅ 需要 design.md(因为是架构重构)
301
+
302
+ ```bash
303
+ # 使用 Write 工具创建 design.md
304
+ Write(
305
+ filePath="<openspec-root>/changes/<change-name>/design.md",
306
+ content="<设计文档内容>"
307
+ )
308
+ ```
309
+
310
+ **格式**(参考 `openspec/AGENTS.md` 第 214-235 行):
311
+ ```markdown
312
+ ## Context
313
+ [背景、约束、相关方]
314
+
315
+ ## Goals / Non-Goals
316
+ - Goals: [...]
317
+ - Non-Goals: [...]
318
+
319
+ ## Decisions
320
+ - Decision: [决策和原因]
321
+ - Alternatives considered: [备选方案 + 理由]
322
+
323
+ ## Risks / Trade-offs
324
+ - [风险] → 缓解措施
325
+
326
+ ## Migration Plan
327
+ [步骤、回滚]
328
+
329
+ ## Open Questions
330
+ - [...]
331
+ ```
332
+
333
+ ### 6. 验证输出
334
+
335
+ ```bash
336
+ # 使用 Bash 工具验证
337
+ cd <openspec-root>
338
+ openspec validate <change-name> --strict
339
+ ```
340
+
341
+ **检查**:
342
+ - proposal.md 是否存在且格式正确
343
+ - tasks.md 是否存在且格式正确
344
+ - 如果有 design.md,格式是否正确
345
+ - 如果有 specs/,是否包含正确的 delta 文件
346
+
347
+ ## 使用示例
348
+
349
+ ### 示例 1:从 MDX 生成 OpenSpec
350
+
351
+ ```
352
+ Agent 调用 mdx-to-openspec:
353
+ 输入:
354
+ - mdxPath: /path/to/pricing-system.mdx
355
+ - changeName: refactor-pricing-frontend
356
+ - openspecRoot: ../../../../waoooo/openspec
357
+
358
+ 执行:
359
+ 🔧 步骤 1: 读取 MDX
360
+ ⏳ 读取: pricing-system.mdx
361
+ ✅ 提取了 keywords: [pricing, 定价, membership, 会员]
362
+ ✅ 提取了标题: 定价系统
363
+ ✅ 提取了 Phase 1.5 内容
364
+
365
+ 🔧 步骤 2: 创建目录
366
+ ⏳ 运行: mkdir -p changes/refactor-pricing-frontend/specs
367
+ ✅ 目录已创建
368
+
369
+ 🔧 步骤 3: 创建 proposal.md
370
+ ⏳ 从 MDX 提取内容
371
+ ✅ 生成: proposal.md
372
+ - keywords: [pricing, 定价, membership, 会员, payment, 支付]
373
+ - Why: 当前包名错误,架构混乱
374
+ - What Changes: 重命名包,按三层架构重构
375
+ - Impact: 影响 packages/membership, apps/*
376
+
377
+ 🔧 步骤 4: 创建 tasks.md
378
+ ⏳ 从 MDX 提取任务列表
379
+ ✅ 生成: tasks.md (8 个任务)
380
+
381
+ 🔧 步骤 5: 创建 design.md
382
+ ⏳ 生成架构设计文档
383
+ ✅ 生成: design.md
384
+ - Context: L1 三层架构
385
+ - Decisions: 如何拆分原子层、混合层、拼装层
386
+ - Migration Plan: 重构步骤
387
+
388
+ 🔧 步骤 6: 验证
389
+ ⏳ 运行: openspec validate refactor-pricing-frontend --strict
390
+ ✅ 验证通过
391
+
392
+ 显示结果:
393
+ ✅ OpenSpec 已生成
394
+
395
+ 📂 位置:
396
+ openspec/changes/refactor-pricing-frontend/
397
+
398
+ 📄 文件:
399
+ - proposal.md (提案文档)
400
+ - tasks.md (8 个任务)
401
+ - design.md (架构设计)
402
+ - specs/ (空目录,如需要可添加 delta)
403
+
404
+ 💡 下一步:
405
+ 1. Review OpenSpec 内容
406
+ 2. 如需修改,手动编辑文件
407
+ 3. 运行: openspec validate refactor-pricing-frontend --strict
408
+ 4. 继续 Product Builder 流程
409
+ ```
410
+
411
+ ## 错误处理
412
+
413
+ ### 错误 1:已存在类似的 OpenSpec
414
+
415
+ **智能相似度检测逻辑**:
416
+
417
+ ```
418
+ 检测到 OpenSpec → 读取 proposal.md → 计算相似度 → 自动决策
419
+ ```
420
+
421
+ **相似度计算**:
422
+ - **关键词重合度**:比较 keywords 数组
423
+ - **目标相似度**:比较 Why/What Changes 的文本内容
424
+ - **任务重叠度**:比较 tasks.md 的任务列表
425
+
426
+ **决策规则**:
427
+ - 相似度 > 80% → 使用现有 OpenSpec
428
+ - 50% < 相似度 < 80% → 创建新的(可能是相关但不同的任务)
429
+ - 相似度 < 50% → 创建新的(明显不同的任务)
430
+
431
+ **示例 1:高度相似(使用现有)**
432
+ ```
433
+ ✅ 发现高度相似的 OpenSpec: pricing-frontend-refactor
434
+
435
+ 📊 相似度: 85%
436
+ - 关键词: 85% (pricing, frontend, refactor, membership)
437
+ - 目标: 90% (重构前端架构)
438
+ - 任务: 75% (重命名包、三层架构)
439
+
440
+ 📋 决策: 使用现有 OpenSpec
441
+
442
+ 📂 路径: openspec/changes/pricing-frontend-refactor/
443
+
444
+ ⏭️ 跳过创建,直接解析
445
+ ```
446
+
447
+ **示例 2:中度相似(创建新的)**
448
+ ```
449
+ ⚠️ 发现中度相似的 OpenSpec: pricing-backend-api
450
+
451
+ 📊 相似度: 60%
452
+ - 关键词: 60% (pricing, api)
453
+ - 目标: 50% (都涉及 pricing,但前端 vs 后端)
454
+ - 任务: 40%
455
+
456
+ 📋 决策: 创建新的 OpenSpec
457
+
458
+ 原因: 相似度不够高,可能是不同任务
459
+
460
+ 💡 建议 change-name: pricing-frontend-phase-1.5
461
+
462
+ ✅ 继续创建
463
+ ```
464
+
465
+ **示例 3:低度相似(创建新的)**
466
+ ```
467
+ ℹ️ 发现相关 OpenSpec: user-profile-update
468
+
469
+ 📊 相似度: 20%
470
+ - 关键词: 10% (frontend)
471
+ - 目标: 15%
472
+ - 任务: 5%
473
+
474
+ 📋 决策: 创建新的 OpenSpec
475
+
476
+ ✅ 继续创建
477
+ ```
478
+
479
+ ### 错误 2:目录已存在
480
+
481
+ **自动决策逻辑**:
482
+
483
+ ```
484
+ 目录已存在 → 检查是否有完整的 OpenSpec 文件
485
+
486
+ 有完整文件(proposal.md + tasks.md)→ 使用现有 OpenSpec
487
+
488
+ 文件不完整或损坏 → 覆盖并重新创建
489
+ ```
490
+
491
+ **示例**:
492
+ ```
493
+ ⚠️ OpenSpec 目录已存在: openspec/changes/refactor-pricing-frontend/
494
+
495
+ 🔍 检查文件完整性...
496
+ ✅ proposal.md (存在)
497
+ ✅ tasks.md (存在)
498
+ ✅ design.md (存在)
499
+
500
+ 📋 自动决策: 使用现有 OpenSpec
501
+
502
+ ⏭️ 跳过创建步骤
503
+ ```
504
+
505
+ **重要**:
506
+ - 默认使用现有 OpenSpec(如果完整)
507
+ - 避免覆盖用户已编辑的内容
508
+ - 如果文件损坏,自动重新创建
509
+
510
+ ### 错误 3:MDX 文档不存在
511
+
512
+ ```
513
+ ❌ 错误: MDX 文档不存在
514
+ 📂 路径: <mdx-path>
515
+
516
+ 💡 建议:
517
+ 1. 检查路径是否正确
518
+ 2. 使用绝对路径
519
+ 3. 或使用文档搜索功能查找
520
+ ```
521
+
522
+ ### 错误 4:验证失败
523
+
524
+ ```
525
+ ❌ 错误: OpenSpec 验证失败
526
+ 🔍 原因: <验证错误信息>
527
+
528
+ 💡 建议:
529
+ 1. 检查 proposal.md 格式
530
+ 2. 检查 tasks.md 格式
531
+ 3. 运行: openspec validate <change-name> --strict
532
+ 4. 查看详细错误信息
533
+ ```
534
+
535
+ ### 错误 5:change-name 命名不规范
536
+
537
+ ```
538
+ ❌ 错误: change-name 命名不规范
539
+ 📝 当前: pricing_frontend_refactor
540
+
541
+ 💡 正确格式:
542
+ - 使用 kebab-case (小写 + 连字符)
543
+ - 使用 verb-led 前缀:
544
+ - refactor-* (重构)
545
+ - add-* (新增)
546
+ - update-* (更新)
547
+ - remove-* (删除)
548
+ - fix-* (修复)
549
+
550
+ 建议的名称:
551
+ - refactor-pricing-frontend
552
+ - refactor-pricing-frontend-architecture
553
+ - refactor-pricing-l1-structure
554
+ ```
555
+
556
+ 你想选择哪个选项?
557
+ ```
558
+
559
+ ### 错误 2:MDX 文档不存在
560
+
561
+ ```
562
+ ❌ 错误: MDX 文档不存在
563
+ 📂 路径: <mdx-path>
564
+
565
+ 💡 建议:
566
+ 1. 检查路径是否正确
567
+ 2. 使用绝对路径
568
+ 3. 或使用文档搜索功能查找
569
+ ```
570
+
571
+ ### 错误 3:验证失败
572
+
573
+ ```
574
+ ❌ 错误: OpenSpec 验证失败
575
+ 🔍 原因: <验证错误信息>
576
+
577
+ 💡 建议:
578
+ 1. 检查 proposal.md 格式
579
+ 2. 检查 tasks.md 格式
580
+ 3. 运行: openspec validate <change-name> --strict
581
+ 4. 查看详细错误信息
582
+ ```
583
+
584
+ ## 相关命令
585
+
586
+ - `openspec list` - 列出所有 changes
587
+ - `openspec show <change-name>` - 查看 change 详情
588
+ - `openspec validate <change-name> --strict` - 验证 change
589
+ - `openspec archive <change-name>` - 归档 change
590
+
591
+ ## 注意事项
592
+
593
+ 1. **OpenSpec 没有 `create` 命令** - 必须手动创建目录和文件
594
+ 2. **change-name 命名规范** - kebab-case, verb-led (refactor-, add-, update-, remove-)
595
+ 3. **proposal.md 和 tasks.md 是必须的** - design.md 和 specs/ 是可选的
596
+ 4. **验证是必须的** - 创建后必须运行 `openspec validate --strict`
597
+ 5. **从 MDX 提取内容** - 不要自己编造,要从 MDX 中提取真实内容
598
+
599
+ ## 执行步骤
600
+
601
+ ### 1. 读取 MDX 文档
602
+
603
+ ```bash
604
+ # 使用 Read 工具读取 MDX 内容
605
+ Read(filePath=<mdx-path>)
606
+ ```
607
+
608
+ **提取信息**:
609
+ - frontmatter 中的 keywords
610
+ - 文档标题
611
+ - 主要内容(Phase 描述、任务列表等)
612
+
613
+ ### 2. 创建 OpenSpec 目录结构
614
+
615
+ **注意**:OpenSpec 没有 `create` 命令,需要手动创建目录。
616
+
617
+ ```bash
618
+ # 使用 Bash 工具创建目录
619
+ cd <openspec-root-dir>
620
+ mkdir -p openspec/changes/<change-name>/specs
621
+ ```
622
+
623
+ **目录结构**:
624
+ ```
625
+ openspec/changes/<change-name>/
626
+ ├── proposal.md # 提案文档
627
+ ├── tasks.md # 任务列表
628
+ ├── design.md # 设计文档(可选)
629
+ └── specs/ # 规范变更(如果需要)
630
+ ```
631
+
632
+ ### 3. 创建 proposal.md
633
+
634
+ ```bash
635
+ # 使用 Write 工具创建 proposal.md
636
+ Write(
637
+ filePath="openspec/changes/<change-name>/proposal.md",
638
+ content="<从 MDX 提取的内容>"
639
+ )
640
+ ```
641
+
642
+ **内容格式**(参考 `openspec/AGENTS.md`):
643
+ ```markdown
644
+ ---
645
+ keywords: [从 MDX frontmatter 提取的 keywords]
646
+ ---
647
+
648
+ # Change: [简短描述]
649
+
650
+ ## Why
651
+ [1-2 句话说明问题/机会]
652
+
653
+ ## What Changes
654
+ - [变更列表]
655
+ - [标记破坏性变更为 **BREAKING**]
656
+
657
+ ## Impact
658
+ - Affected specs: [影响的能力]
659
+ - Affected code: [关键文件/系统]
660
+ ```
661
+
662
+ **从 MDX 提取**:
663
+ - **keywords**:
664
+ - 优先从 MDX frontmatter 的 `keywords` 字段提取
665
+ - 如果 MDX 没有 keywords,从标题、描述、内容中自动提取
666
+ - 提取规则:功能名称、模块名称、技术栈、操作类型
667
+ - 示例:[pricing, 定价, membership, 会员, refactor, 重构, frontend, 前端]
668
+ - **Why**: 从 MDX 的背景部分提取
669
+ - **What Changes**: 从 Phase 描述提取
670
+ - **Impact**: 从任务列表推断
671
+
672
+ ### 4. 创建 tasks.md
673
+
674
+ ```bash
675
+ # 使用 Write 工具创建 tasks.md
676
+ Write(
677
+ filePath="openspec/changes/<change-name>/tasks.md",
678
+ content="<从 MDX 提取的任务列表>"
679
+ )
680
+ ```
681
+
682
+ **内容格式**:
683
+ ```markdown
684
+ ## 1. Implementation
685
+ - [ ] 1.1 任务 1
686
+ - [ ] 1.2 任务 2
687
+ - [ ] 1.3 任务 3
688
+
689
+ ## 2. Testing
690
+ - [ ] 2.1 测试 1
691
+ - [ ] 2.2 测试 2
692
+ ```
693
+
694
+ ### 5. 创建 design.md(可选)
695
+
696
+ **仅在以下情况创建**:
697
+ - 跨服务/模块的变更
698
+ - 新的架构模式
699
+ - 复杂的技术决策
700
+
701
+ ```bash
702
+ # 使用 Write 工具创建 design.md
703
+ Write(
704
+ filePath="openspec/changes/<change-name>/design.md",
705
+ content="<设计文档内容>"
706
+ )
707
+ ```
708
+
709
+ ### 6. 验证输出
710
+
711
+ ```bash
712
+ # 使用 Bash 工具验证
713
+ cd <openspec-root-dir>
714
+ openspec validate <change-name> --strict
715
+ ```
716
+
717
+ **检查**:
718
+ - OpenSpec 目录是否创建
719
+ - proposal.md, tasks.md 是否存在
720
+ - 格式是否正确
721
+
722
+ ## 使用示例
723
+
724
+ ### 示例 1:从 MDX 生成 OpenSpec
725
+
726
+ ```
727
+ Agent 调用 mdx-to-openspec:
728
+ 输入:
729
+ - mdxPath: /path/to/pricing-system.mdx
730
+ - changeName: pricing-system
731
+
732
+ 执行:
733
+ 🔧 步骤 1: 读取 MDX
734
+ ⏳ 读取: pricing-system.mdx
735
+ ✅ 提取了 keywords: [pricing, 定价, membership, 会员]
736
+ ✅ 提取了标题: Pricing System Phase 1.5
737
+ ✅ 提取了内容: 1500 words
738
+
739
+ 🔧 步骤 2: 调用 openspec create
740
+ ⏳ 运行: openspec create pricing-system
741
+ ✅ 创建: openspec/changes/001-pricing-system/
742
+ ✅ 生成: proposal.md (模板)
743
+ ✅ 生成: design.md (模板)
744
+ ✅ 生成: tasks.md (模板)
745
+
746
+ 🔧 步骤 3: 填充 proposal.md
747
+ ⏳ 填充 frontmatter (keywords)
748
+ ⏳ 填充背景(从 MDX 提取)
749
+ ⏳ 填充目标(从 MDX 提取)
750
+ ⏳ 填充价值(从 MDX 提取)
751
+ ⏳ 填充范围(从 MDX 提取)
752
+ ✅ proposal.md 已填充
753
+
754
+ 显示结果:
755
+ ✅ OpenSpec 已生成
756
+
757
+ 📂 位置:
758
+ openspec/changes/001-pricing-system/
759
+
760
+ 📄 文件:
761
+ - proposal.md (已填充 MDX 内容)
762
+ - design.md (模板,需要手动完善)
763
+ - tasks.md (模板,需要手动完善)
764
+
765
+ 💡 下一步:
766
+ 1. 查看生成的 OpenSpec
767
+ 2. 手动完善 design.md 和 tasks.md
768
+ 3. 批准: openspec approve 001-pricing-system
769
+ 4. 继续 Product Builder 流程
770
+ ```
771
+
772
+ ## 错误处理
773
+
774
+ ### 错误 1:openspec 命令不存在
775
+
776
+ ```
777
+ ❌ 错误: openspec 命令不存在
778
+ 🔍 原因: OpenSpec CLI 未安装或不在 PATH 中
779
+
780
+ 💡 建议:
781
+ 1. 检查 OpenSpec 是否安装
782
+ 2. 检查 PATH 配置
783
+ 3. 或手动创建 OpenSpec 目录结构
784
+ ```
785
+
786
+ ### 错误 2:MDX 文档不存在
787
+
788
+ ```
789
+ ❌ 错误: MDX 文档不存在
790
+ 📂 路径: <mdx-path>
791
+
792
+ 💡 建议:
793
+ 1. 检查路径是否正确
794
+ 2. 使用绝对路径
795
+ 3. 或使用文档搜索功能查找
796
+ ```
797
+
798
+ ### 错误 3:OpenSpec 目录已存在
799
+
800
+ ```
801
+ ⚠️ 警告: OpenSpec 目录已存在
802
+ 📂 路径: openspec/changes/001-pricing-system/
803
+
804
+ 💡 选项:
805
+ 1. 使用现有 OpenSpec(跳过创建)
806
+ 2. 删除现有 OpenSpec(重新创建)
807
+ 3. 使用不同的 change 名称
808
+ ```
809
+
810
+ ## 相关命令
811
+
812
+ - `openspec create <name>` - 创建新的 OpenSpec 提案
813
+ - `openspec list` - 列出所有 OpenSpec
814
+ - `openspec approve <id>` - 批准 OpenSpec
815
+ - `openspec archive <id>` - 归档 OpenSpec
816
+
817
+ ## 注意事项
818
+
819
+ 1. **使用 OpenSpec 的标准命令** - 不要重新发明轮子
820
+ 2. **只填充 proposal.md** - design.md 和 tasks.md 需要手动完善
821
+ 3. **keywords 处理逻辑**:
822
+ - 优先使用 MDX frontmatter 的 keywords
823
+ - 如果 MDX 没有 keywords,从标题和内容中自动提取
824
+ - 确保 proposal.md 的 frontmatter 包含 keywords(不能为空)
825
+ 4. **生成后需要人工 review** - OpenSpec 是标准化的中间格式
826
+ 5. **批准后才能继续开发流程** - 确保 OpenSpec 质量
827
+ 6. **frontmatter 格式必须正确** - 使用 YAML 格式,keywords 是数组