@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,204 @@
1
+ ---
2
+ name: api-docs-generate
3
+ description: 从后端代码和 OpenAPI 规范自动生成 API 文档(api-reference/*.mdx),包含端点定义、请求参数、响应格式、使用示例等
4
+ version: 0.1.0
5
+ ---
6
+
7
+ # Skill: api-docs-generate
8
+
9
+ ## 功能
10
+
11
+ 从后端代码注释和 OpenAPI 规范自动生成 API 文档,输出到 waoooo-docs 的 api-reference 目录。
12
+
13
+ ## 何时调用
14
+
15
+ - API 开发完成后,需要生成 API 文档
16
+ - API 更新后,需要更新文档
17
+ - 用户说:"生成 API 文档"、"更新 API 文档"
18
+
19
+ ## 输入
20
+
21
+ - `backendPath` - 后端代码路径
22
+ - `endpoint` - API 端点(如 `/api/pricing/plans`)
23
+ - `openApiPath` - OpenAPI 规范文件路径(可选)
24
+
25
+ ## 输出
26
+
27
+ - `waoooo-docs/developer-docs/api-reference/rest-api/endpoints/<endpoint-name>.mdx`
28
+
29
+ ## 执行步骤
30
+
31
+ ### 1. 分析后端代码
32
+
33
+ ```bash
34
+ # 扫描 FastAPI 路由
35
+ - 查找 @router.get/post/put/delete 装饰器
36
+ - 提取路径参数、查询参数、请求体
37
+ - 提取响应模型
38
+ - 提取文档字符串
39
+ ```
40
+
41
+ ### 2. 读取 OpenAPI 规范(如果有)
42
+
43
+ ```bash
44
+ # 读取 OpenAPI JSON/YAML
45
+ - 提取端点定义
46
+ - 提取参数说明
47
+ - 提取响应示例
48
+ - 提取错误码
49
+ ```
50
+
51
+ ### 3. 生成文档
52
+
53
+ ```bash
54
+ # 使用模板生成
55
+ npx tsx .claude/skills/api-docs-generate/scripts/generate-api-docs.ts \
56
+ --backend-path <path> \
57
+ --endpoint <endpoint> \
58
+ --openapi-path <path>
59
+ ```
60
+
61
+ ### 4. 验证输出
62
+
63
+ - 检查文档是否生成
64
+ - 检查参数说明是否完整
65
+ - 检查代码示例是否正确
66
+
67
+ ## 使用示例
68
+
69
+ ### 示例 1:生成单个端点文档
70
+
71
+ ```
72
+ 用户: "生成 /api/pricing/plans 的 API 文档"
73
+
74
+ Agent 行动:
75
+ 1. 扫描后端代码: waoooo-service/api/routers/pricing.py
76
+ 2. 提取端点信息
77
+ 3. 生成文档: api-reference/rest-api/endpoints/get-pricing-plans.mdx
78
+ 4. 显示结果
79
+ ```
80
+
81
+ ### 示例 2:批量生成 API 文档
82
+
83
+ ```
84
+ 用户: "生成所有 pricing API 文档"
85
+
86
+ Agent 行动:
87
+ 1. 扫描 pricing 路由: waoooo-service/api/routers/pricing.py
88
+ 2. 找到所有端点(5个)
89
+ 3. 逐个生成文档
90
+ 4. 显示结果列表
91
+ ```
92
+
93
+ ### 示例 3:从 OpenAPI 规范生成
94
+
95
+ ```
96
+ 用户: "从 OpenAPI 规范生成 API 文档"
97
+
98
+ Agent 行动:
99
+ 1. 读取 OpenAPI 文件: openapi.json
100
+ 2. 提取所有端点
101
+ 3. 批量生成文档
102
+ 4. 显示结果
103
+ ```
104
+
105
+ ## 文档结构
106
+
107
+ 生成的文档包含以下章节:
108
+
109
+ 1. **端点定义** - 方法、路径、描述
110
+ 2. **认证要求** - 是否需要认证、权限要求
111
+ 3. **请求参数** - Path/Query/Body 参数说明
112
+ 4. **请求示例** - cURL、JavaScript、Python 示例
113
+ 5. **响应格式** - 成功响应、错误响应
114
+ 6. **错误码** - 可能的错误码和说明
115
+ 7. **相关端点** - 链接到相关 API
116
+
117
+ ## 模板文件
118
+
119
+ - `assets/templates/api.mdx` - API 文档模板(**使用 Mintlify 标准 API 格式**)
120
+
121
+ <Note>
122
+ **重要:使用 Mintlify 标准 API 格式**
123
+
124
+ 生成的 API 文档必须遵循 Mintlify 的标准 API 格式:
125
+
126
+ 1. **Frontmatter 格式**:
127
+ ```yaml
128
+ ---
129
+ title: 'API 端点标题'
130
+ api: 'HTTP方法 /api/v1/路径'
131
+ description: '一句话描述'
132
+ ---
133
+ ```
134
+
135
+ 2. **参数定义**:
136
+ - 使用 `<ParamField>` 组件(不是 `<Param>`)
137
+ - 支持 `header`、`path`、`query`、`body` 类型
138
+ - 示例:`<ParamField path="id" type="string" required>`
139
+
140
+ 3. **响应定义**:
141
+ - 使用 `<ResponseField>` 组件
142
+ - 示例:`<ResponseField name="data" type="object" required>`
143
+
144
+ 4. **代码示例**:
145
+ - 使用 `<RequestExample>` 和 `<ResponseExample>` 包裹
146
+ - 支持多语言:cURL、TypeScript、Python
147
+
148
+ 5. **提示组件**:
149
+ - `<Note>` - 一般说明
150
+ - `<Tip>` - 最佳实践
151
+ - `<Warning>` - 注意事项
152
+
153
+ 参考示例:`waoooo-docs/developer-docs/api-reference/rest-api/endpoints/auth-revoke-session.mdx`
154
+ </Note>
155
+
156
+ ## 错误处理
157
+
158
+ ### 错误 1:后端代码不存在
159
+
160
+ ```
161
+ ❌ 错误: 后端代码文件不存在
162
+ 📁 路径: waoooo-service/api/routers/pricing.py
163
+
164
+ 💡 建议:
165
+ 1. 检查后端代码路径是否正确
166
+ 2. 确认 API 已实现
167
+ 3. 检查文件名是否正确
168
+ ```
169
+
170
+ ### 错误 2:端点未找到
171
+
172
+ ```
173
+ ❌ 错误: 端点未找到
174
+ 🔍 端点: /api/pricing/plans
175
+
176
+ 💡 建议:
177
+ 1. 检查端点路径是否正确
178
+ 2. 确认 API 已实现
179
+ 3. 查看所有可用端点列表
180
+ ```
181
+
182
+ ### 错误 3:OpenAPI 规范格式错误
183
+
184
+ ```
185
+ ❌ 错误: OpenAPI 规范解析失败
186
+ 📁 文件: openapi.json
187
+
188
+ 💡 建议:
189
+ 1. 检查 JSON/YAML 格式是否正确
190
+ 2. 使用 OpenAPI 验证工具验证
191
+ 3. 重新生成 OpenAPI 规范
192
+ ```
193
+
194
+ ## 注意事项
195
+
196
+ 1. **文档与代码同步** - 生成的文档应该反映实际 API 实现
197
+ 2. **参数说明完整** - 确保所有参数都有清晰的说明
198
+ 3. **示例可运行** - 提供的代码示例应该可以直接运行
199
+ 4. **错误码准确** - 列出所有可能的错误码和场景
200
+
201
+ ## 相关 Skills
202
+
203
+ - `capability-docs-generate` - 生成能力文档
204
+ - `spec-generate` - 生成开发规范
@@ -0,0 +1,140 @@
1
+ ---
2
+ title: '[API 端点标题]'
3
+ api: 'HTTP方法 /api/v1/[路径]'
4
+ description: '[一句话描述端点功能]'
5
+ ---
6
+
7
+ [详细描述端点功能和用途,说明该端点的作用、适用场景等]
8
+
9
+ <Note>
10
+ 此端点**需要认证**,必须提供有效的 Bearer Token(JWT)。
11
+ </Note>
12
+
13
+ ## 认证
14
+
15
+ <ParamField header="Authorization" type="string" required>
16
+ Bearer Token(JWT),从用户登录后获取
17
+ </ParamField>
18
+
19
+ ## 路径参数
20
+
21
+ <ParamField path="[参数名]" type="string" required>
22
+ [参数说明]
23
+ </ParamField>
24
+
25
+ ## 查询参数
26
+
27
+ <ParamField query="[参数名]" type="string" default="[默认值]">
28
+ [参数说明]
29
+ </ParamField>
30
+
31
+ ## 请求体
32
+
33
+ <ParamField body="[字段名]" type="string" required>
34
+ [字段说明]
35
+ </ParamField>
36
+
37
+ ## Response
38
+
39
+ <ResponseField name="success" type="boolean" required>
40
+ 请求是否成功
41
+ </ResponseField>
42
+
43
+ <ResponseField name="data" type="object" required>
44
+ 响应数据对象
45
+ </ResponseField>
46
+
47
+ <ResponseField name="error" type="object">
48
+ 错误信息(仅在失败时返回)
49
+ </ResponseField>
50
+
51
+ <RequestExample>
52
+ ```bash cURL
53
+ curl -X POST "https://api.waoooo.com/api/v1/[路径]" \
54
+ -H "Authorization: Bearer <your_access_token>" \
55
+ -H "Content-Type: application/json" \
56
+ -d '{
57
+ "[字段名]": "[值]"
58
+ }'
59
+ ```
60
+
61
+ ```typescript TypeScript
62
+ const response = await fetch(
63
+ 'https://api.waoooo.com/api/v1/[路径]',
64
+ {
65
+ method: 'POST',
66
+ headers: {
67
+ 'Authorization': `Bearer ${accessToken}`,
68
+ 'Content-Type': 'application/json',
69
+ },
70
+ body: JSON.stringify({
71
+ [字段名]: '[值]',
72
+ }),
73
+ }
74
+ );
75
+
76
+ const data = await response.json();
77
+ console.log(data);
78
+ ```
79
+
80
+ ```python Python
81
+ import requests
82
+
83
+ response = requests.post(
84
+ 'https://api.waoooo.com/api/v1/[路径]',
85
+ headers={'Authorization': f'Bearer {access_token}'},
86
+ json={'[字段名]': '[值]'}
87
+ )
88
+
89
+ data = response.json()
90
+ print(data)
91
+ ```
92
+ </RequestExample>
93
+
94
+ <ResponseExample>
95
+ ```json 成功响应
96
+ {
97
+ "success": true,
98
+ "data": {
99
+ "id": "880e8400-e29b-41d4-a716-446655440001",
100
+ "[字段名]": "[值]"
101
+ }
102
+ }
103
+ ```
104
+
105
+ ```json 错误响应 (400)
106
+ {
107
+ "success": false,
108
+ "error": {
109
+ "code": "[错误码]",
110
+ "message": "[错误描述]"
111
+ }
112
+ }
113
+ ```
114
+
115
+ ```json 未授权 (401)
116
+ {
117
+ "detail": "Session revoked"
118
+ }
119
+ ```
120
+ </ResponseExample>
121
+
122
+ ## 使用场景
123
+
124
+ ### 1. [场景标题]
125
+
126
+ [场景描述]
127
+
128
+ ## 最佳实践
129
+
130
+ <Tip>
131
+ **[实践标题]**:[实践说明]
132
+ </Tip>
133
+
134
+ <Note>
135
+ **[建议标题]**:[建议说明]
136
+ </Note>
137
+
138
+ <Warning>
139
+ **[注意事项标题]**:[注意事项说明]
140
+ </Warning>
@@ -0,0 +1,308 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate API Documentation from Backend Code
4
+ *
5
+ * This script generates API endpoint documentation by:
6
+ * 1. Analyzing FastAPI router code
7
+ * 2. Extracting endpoint metadata (path, method, params, response)
8
+ * 3. Filling the api.mdx template with extracted data
9
+ * 4. Outputting to waoooo-docs/developer-docs/api-reference/endpoints/<endpoint>.mdx
10
+ * 5. Updating mint.json navigation
11
+ *
12
+ * Usage:
13
+ * npx tsx generate-api-docs.ts \
14
+ * --code <backend-code-path> \
15
+ * --endpoint <endpoint-name>
16
+ *
17
+ * Example:
18
+ * npx tsx generate-api-docs.ts \
19
+ * --code ../../../../../../waoooo-service/app/api/routers/payment.py \
20
+ * --endpoint create-payment
21
+ */
22
+
23
+ import fs from 'fs';
24
+ import path from 'path';
25
+ import { fileURLToPath } from 'url';
26
+
27
+ const __filename = fileURLToPath(import.meta.url);
28
+ const __dirname = path.dirname(__filename);
29
+
30
+ // ============================================================================
31
+ // Types
32
+ // ============================================================================
33
+
34
+ interface APIEndpointData {
35
+ title: string;
36
+ method: string;
37
+ path: string;
38
+ description: string;
39
+ requiresAuth: boolean;
40
+ pathParams: Array<{ name: string; type: string; description: string; required: boolean }>;
41
+ queryParams: Array<{ name: string; type: string; description: string; default?: string }>;
42
+ bodyParams: Array<{ name: string; type: string; description: string; required: boolean }>;
43
+ responseFields: Array<{ name: string; type: string; description: string; required: boolean }>;
44
+ errorCodes: Array<{ code: string; status: number; description: string }>;
45
+ examples: {
46
+ request: string;
47
+ response: string;
48
+ };
49
+ }
50
+
51
+ // ============================================================================
52
+ // CLI Arguments Parsing
53
+ // ============================================================================
54
+
55
+ function parseArgs(): {
56
+ codePath: string;
57
+ endpointName: string;
58
+ } {
59
+ const args = process.argv.slice(2);
60
+ const result: any = {};
61
+
62
+ for (let i = 0; i < args.length; i += 2) {
63
+ const key = args[i].replace('--', '');
64
+ const value = args[i + 1];
65
+ result[key] = value;
66
+ }
67
+
68
+ if (!result.code || !result.endpoint) {
69
+ console.error('❌ Missing required arguments');
70
+ console.error('Usage: generate-api-docs.ts --code <path> --endpoint <name>');
71
+ process.exit(1);
72
+ }
73
+
74
+ return {
75
+ codePath: result.code,
76
+ endpointName: result.endpoint,
77
+ };
78
+ }
79
+
80
+ // ============================================================================
81
+ // Code Analysis (FastAPI)
82
+ // ============================================================================
83
+
84
+ function analyzeEndpoint(codePath: string, endpointName: string): Partial<APIEndpointData> {
85
+ if (!fs.existsSync(codePath)) {
86
+ throw new Error(`Code file not found: ${codePath}`);
87
+ }
88
+
89
+ const code = fs.readFileSync(codePath, 'utf-8');
90
+
91
+ // Extract endpoint decorator (e.g., @router.post("/payment"))
92
+ const decoratorRegex = /@router\.(get|post|put|delete|patch)\s*\(\s*["']([^"']+)["']/g;
93
+ const matches = [...code.matchAll(decoratorRegex)];
94
+
95
+ // Find matching endpoint
96
+ let method = 'POST';
97
+ let apiPath = '/api/v1/unknown';
98
+ let description = '';
99
+
100
+ for (const match of matches) {
101
+ if (match[2].includes(endpointName) || endpointName.includes(match[2].replace(/[\/\{\}]/g, '-'))) {
102
+ method = match[1].toUpperCase();
103
+ apiPath = `/api/v1${match[2]}`;
104
+ break;
105
+ }
106
+ }
107
+
108
+ // Extract docstring
109
+ const docstringMatch = code.match(/"""([\s\S]*?)"""/);
110
+ if (docstringMatch) {
111
+ description = docstringMatch[1].trim().split('\n')[0];
112
+ }
113
+
114
+ // Extract Pydantic models for request/response
115
+ const modelRegex = /class\s+(\w+)\(BaseModel\):([\s\S]*?)(?=\nclass|\n@|\Z)/g;
116
+ const models = [...code.matchAll(modelRegex)];
117
+
118
+ const bodyParams: any[] = [];
119
+ const responseFields: any[] = [];
120
+
121
+ for (const model of models) {
122
+ const modelName = model[1];
123
+ const modelBody = model[2];
124
+
125
+ // Extract fields
126
+ const fieldRegex = /(\w+):\s*([\w\[\]]+)(?:\s*=\s*Field\((.*?)\))?/g;
127
+ const fields = [...modelBody.matchAll(fieldRegex)];
128
+
129
+ for (const field of fields) {
130
+ const fieldData = {
131
+ name: field[1],
132
+ type: field[2].replace('Optional[', '').replace(']', ''),
133
+ description: field[3] ? field[3].match(/description=["']([^"']+)["']/)?.[1] || '' : '',
134
+ required: !field[2].includes('Optional'),
135
+ };
136
+
137
+ // Heuristic: if model name contains "Request" or "Create", it's a body param
138
+ if (modelName.includes('Request') || modelName.includes('Create')) {
139
+ bodyParams.push(fieldData);
140
+ } else if (modelName.includes('Response') || modelName.includes('Result')) {
141
+ responseFields.push(fieldData);
142
+ }
143
+ }
144
+ }
145
+
146
+ return {
147
+ title: endpointName.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' '),
148
+ method,
149
+ path: apiPath,
150
+ description: description || `${endpointName} endpoint`,
151
+ requiresAuth: code.includes('Depends(get_current_user)') || code.includes('Depends(verify_token)'),
152
+ bodyParams,
153
+ responseFields,
154
+ };
155
+ }
156
+
157
+ // ============================================================================
158
+ // Template Filling
159
+ // ============================================================================
160
+
161
+ function fillTemplate(data: APIEndpointData): string {
162
+ const templatePath = path.join(__dirname, '../assets/templates/api.mdx');
163
+ let template = fs.readFileSync(templatePath, 'utf-8');
164
+
165
+ // Replace basic info
166
+ template = template.replace(/\[API 端点标题\]/g, data.title);
167
+ template = template.replace(/HTTP方法/g, data.method);
168
+ template = template.replace(/\/api\/v1\/\[路径\]/g, data.path);
169
+ template = template.replace(/\[一句话描述端点功能\]/g, data.description);
170
+
171
+ // Replace body params
172
+ if (data.bodyParams.length > 0) {
173
+ const bodyParamsText = data.bodyParams
174
+ .map(
175
+ p => `<ParamField body="${p.name}" type="${p.type}" ${p.required ? 'required' : ''}>
176
+ ${p.description}
177
+ </ParamField>`
178
+ )
179
+ .join('\n\n');
180
+ template = template.replace(
181
+ /<ParamField body="\[字段名\]"[\s\S]*?<\/ParamField>[\s\S]*?<ParamField body="\[字段名\]"[\s\S]*?<\/Expandable>\s*<\/ParamField>/m,
182
+ bodyParamsText
183
+ );
184
+ }
185
+
186
+ // Replace response fields
187
+ if (data.responseFields.length > 0) {
188
+ const responseFieldsText = data.responseFields
189
+ .map(
190
+ f => ` <ResponseField name="${f.name}" type="${f.type}" ${f.required ? 'required' : ''}>
191
+ ${f.description}
192
+ </ResponseField>`
193
+ )
194
+ .join('\n\n');
195
+ template = template.replace(
196
+ /<ResponseField name="id"[\s\S]*?<ResponseField name="created_at"[\s\S]*?<\/ResponseField>/m,
197
+ responseFieldsText
198
+ );
199
+ }
200
+
201
+ // Update last updated date
202
+ const today = new Date().toISOString().split('T')[0];
203
+ template = template.replace(/\*\*最后更新\*\*:\d{4}-\d{2}-\d{2}/, `**最后更新**:${today}`);
204
+
205
+ return template;
206
+ }
207
+
208
+ // ============================================================================
209
+ // Update mint.json (using universal utility)
210
+ // ============================================================================
211
+
212
+ function updateMintJson(endpointName: string, docsPath: string) {
213
+ const projectRoot = path.resolve(__dirname, '../../../../../');
214
+
215
+ // Calculate relative path
216
+ const relativePath = path.relative(
217
+ path.join(projectRoot, 'waoooo-docs'),
218
+ docsPath
219
+ ).replace(/\.mdx$/, '');
220
+
221
+ // Call universal update-mint-nav utility
222
+ const updateScript = path.join(__dirname, '../../../../src/scripts/update-mint-nav.ts');
223
+ const { execSync } = require('child_process');
224
+
225
+ try {
226
+ execSync(
227
+ `npx tsx "${updateScript}" --section "API Reference" --group "Endpoints" --page "${relativePath}"`,
228
+ { stdio: 'inherit' }
229
+ );
230
+ } catch (error) {
231
+ console.warn('⚠️ Failed to update mint.json');
232
+ }
233
+ }
234
+ } catch (error) {
235
+ console.warn('⚠️ Failed to update mint.json');
236
+ }
237
+ }
238
+
239
+ // ============================================================================
240
+ // Main
241
+ // ============================================================================
242
+
243
+ async function main() {
244
+ console.log('🚀 Generating API Documentation...\n');
245
+
246
+ const { codePath, endpointName } = parseArgs();
247
+
248
+ console.log('📥 Input:');
249
+ console.log(` - Code: ${codePath}`);
250
+ console.log(` - Endpoint: ${endpointName}\n`);
251
+
252
+ // Step 1: Analyze code
253
+ console.log('🔍 Step 1/4: Analyzing endpoint code...');
254
+ const endpointData = analyzeEndpoint(codePath, endpointName);
255
+ console.log('✅ Endpoint analyzed\n');
256
+
257
+ // Step 2: Fill template
258
+ console.log('📝 Step 2/4: Generating documentation...');
259
+ const apiData: APIEndpointData = {
260
+ title: endpointData.title || endpointName,
261
+ method: endpointData.method || 'POST',
262
+ path: endpointData.path || '/api/v1/unknown',
263
+ description: endpointData.description || '',
264
+ requiresAuth: endpointData.requiresAuth ?? true,
265
+ pathParams: endpointData.pathParams || [],
266
+ queryParams: endpointData.queryParams || [],
267
+ bodyParams: endpointData.bodyParams || [],
268
+ responseFields: endpointData.responseFields || [],
269
+ errorCodes: endpointData.errorCodes || [],
270
+ examples: endpointData.examples || { request: '', response: '' },
271
+ };
272
+
273
+ const output = fillTemplate(apiData);
274
+ console.log('✅ Documentation generated\n');
275
+
276
+ // Step 3: Write output
277
+ console.log('💾 Step 3/4: Writing file...');
278
+ const projectRoot = path.resolve(__dirname, '../../../../../');
279
+ const docsPath = path.join(
280
+ projectRoot,
281
+ 'waoooo-docs/developer-docs/api-reference/endpoints',
282
+ `${endpointName}.mdx`
283
+ );
284
+
285
+ fs.mkdirSync(path.dirname(docsPath), { recursive: true });
286
+ fs.writeFileSync(docsPath, output, 'utf-8');
287
+ console.log('✅ File written\n');
288
+
289
+ // Step 4: Update mint.json
290
+ console.log('🔧 Step 4/4: Updating mint.json...');
291
+ updateMintJson(endpointName, docsPath);
292
+ console.log('');
293
+
294
+ console.log('📂 Output:');
295
+ console.log(` ${docsPath}\n`);
296
+
297
+ console.log('🎉 Done!');
298
+ console.log('\n💡 Next steps:');
299
+ console.log(' 1. Review the generated documentation');
300
+ console.log(' 2. Fill in missing sections (examples, error codes, etc.)');
301
+ console.log(' 3. Test the API endpoint');
302
+ console.log(' 4. Commit the changes');
303
+ }
304
+
305
+ main().catch(error => {
306
+ console.error('❌ Error:', error.message);
307
+ process.exit(1);
308
+ });
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: ask
3
+ description: Async via ask, end turn immediately; use when user explicitly delegates to any AI provider (gemini/codex/opencode/droid); NOT for questions about the providers themselves.
4
+ metadata:
5
+ short-description: Ask AI provider asynchronously
6
+ ---
7
+
8
+ # Ask AI Provider (Async)
9
+
10
+ Send the user's request to specified AI provider asynchronously.
11
+
12
+ ## Usage
13
+
14
+ The first argument must be the provider name, followed by the message:
15
+ - `gemini` - Send to Gemini
16
+ - `codex` - Send to Codex
17
+ - `opencode` - Send to OpenCode
18
+ - `droid` - Send to Droid
19
+
20
+ ## Execution (MANDATORY)
21
+
22
+ ```
23
+ Bash(ask $PROVIDER "$MESSAGE")
24
+ ```
25
+
26
+ ## Rules
27
+
28
+ - After running the command, say "[Provider] processing..." and immediately end your turn.
29
+ - Do not wait for results or check status in the same turn.
30
+ - The task ID and log file path will be displayed for tracking.
31
+
32
+ ## Examples
33
+
34
+ - `/ask gemini What is 12+12?`
35
+ - `/ask codex Refactor this code`
36
+ - `/ask opencode Analyze this bug`
37
+ - `/ask droid Execute this task`
38
+
39
+ ## Notes
40
+
41
+ - `ask` already runs in background by default; no manual `nohup` is needed.
42
+ - If it fails, check backend health with the corresponding ping command (`ping <provider>` (e.g., `ping gemini`)).