@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.
- package/README.md +48 -0
- package/package.json +28 -0
- package/registry.json +431 -0
- package/skills/acceptance-review/SKILL.md +537 -0
- package/skills/all-plan/SKILL.md +19 -0
- package/skills/all-plan/references/flow.md +750 -0
- package/skills/api-docs-generate/SKILL.md +204 -0
- package/skills/api-docs-generate/assets/templates/api.mdx +140 -0
- package/skills/api-docs-generate/scripts/generate-api-docs.ts +308 -0
- package/skills/ask/SKILL.md +42 -0
- package/skills/autonew/SKILL.md +34 -0
- package/skills/capability-analyze/SKILL.md +300 -0
- package/skills/capability-analyze/scripts/analyze-capabilities.ts +531 -0
- package/skills/capability-docs-generate/SKILL.md +155 -0
- package/skills/capability-docs-generate/assets/templates/capability.mdx +271 -0
- package/skills/capability-docs-generate/scripts/generate-capability-docs.ts +358 -0
- package/skills/capability-tree-query/SKILL.md +112 -0
- package/skills/capability-tree-query/scripts/build-capability-tree.ts +402 -0
- package/skills/changelog-generator/SKILL.md +104 -0
- package/skills/continue/SKILL.md +39 -0
- package/skills/continue/agents/openai.yaml +3 -0
- package/skills/creating-skills/SKILL.md +158 -0
- package/skills/creating-skills/references/official_best_practices.md +128 -0
- package/skills/creating-skills/references/skill_examples.md +199 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +197 -0
- package/skills/docx/docx-js.md +350 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/ooxml/scripts/pack.py +159 -0
- package/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/docx/ooxml/scripts/validate.py +69 -0
- package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/docx/ooxml.md +610 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/document.py +1276 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/docx/scripts/utilities.py +374 -0
- package/skills/git-branch-create/SKILL.md +170 -0
- package/skills/git-branch-merge/SKILL.md +176 -0
- package/skills/git-commit/SKILL.md +56 -0
- package/skills/git-commit/references/commit_examples.md +311 -0
- package/skills/github-actions-trigger/SKILL.md +367 -0
- package/skills/github-issue-create/SKILL.md +294 -0
- package/skills/github-pr-creation/SKILL.md +137 -0
- package/skills/github-pr-creation/references/pr_templates.md +187 -0
- package/skills/github-pr-merge/SKILL.md +112 -0
- package/skills/github-pr-review/SKILL.md +110 -0
- package/skills/github-pr-review/references/severity_guide.md +168 -0
- package/skills/job-create/SKILL.md +294 -0
- package/skills/job-create/scripts/create-job.ts +105 -0
- package/skills/job-workflow/SKILL.md +212 -0
- package/skills/keyword-extract/SKILL.md +229 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/mdx-to-openspec/SKILL.md +827 -0
- package/skills/mdx-to-openspec/scripts/mdx-to-openspec.ts +320 -0
- package/skills/mounted/SKILL.md +20 -0
- package/skills/multi-model-review/SKILL.md +459 -0
- package/skills/notion-automation/SKILL.md +215 -0
- package/skills/openspec-review/SKILL.md +513 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +294 -0
- package/skills/pdf/forms.md +205 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/pdf/scripts/create_validation_image.py +41 -0
- package/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/pend/SKILL.md +33 -0
- package/skills/ping/SKILL.md +39 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +484 -0
- package/skills/pptx/html2pptx.md +625 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/pptx/ooxml.md +427 -0
- package/skills/pptx/scripts/html2pptx.js +979 -0
- package/skills/pptx/scripts/inventory.py +1020 -0
- package/skills/pptx/scripts/rearrange.py +231 -0
- package/skills/pptx/scripts/replace.py +385 -0
- package/skills/pptx/scripts/thumbnail.py +450 -0
- package/skills/progress-update/SKILL.md +394 -0
- package/skills/progress-update/scripts/update-progress.ts +221 -0
- package/skills/release-automation/SKILL.md +306 -0
- package/skills/requirement-parse/SKILL.md +212 -0
- package/skills/requirement-parse/scripts/infer-builder-config.ts +346 -0
- package/skills/requirement-parse/scripts/merge-requirements.ts +228 -0
- package/skills/requirement-parse/scripts/parse-docs.ts +206 -0
- package/skills/requirement-parse/scripts/parse-openspec.ts +168 -0
- package/skills/roadmap-docs-generate/SKILL.md +483 -0
- package/skills/roadmap-docs-generate/assets/templates/ROADMAP.mdx +75 -0
- package/skills/roadmap-docs-generate/assets/templates/ROADMAP.mdx.template +330 -0
- package/skills/roadmap-docs-generate/assets/templates/TODO.mdx +56 -0
- package/skills/roadmap-docs-generate/assets/templates/TODO.mdx.template +363 -0
- package/skills/roadmap-docs-generate/scripts/json-to-mdx.ts +445 -0
- package/skills/roadmap-docs-generate/scripts/json-to-mdx.ts.backup +411 -0
- package/skills/roadmap-generate/SKILL.md +396 -0
- package/skills/roadmap-generate/scripts/generate-roadmap.ts +496 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +356 -0
- package/skills/skill-creator/references/output-patterns.md +82 -0
- package/skills/skill-creator/references/workflows.md +28 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/spec-generate/SKILL.md +408 -0
- package/skills/spec-generate/scripts/generate-specs.ts +538 -0
- package/skills/spec-generate/scripts/generate-tasks.ts +174 -0
- package/skills/specs-review/SKILL.md +370 -0
- package/skills/task-execute/SKILL.md +399 -0
- package/skills/task-update-status/SKILL.md +349 -0
- package/skills/task-update-status/scripts/update-task-status.ts +192 -0
- package/skills/task-verify/SKILL.md +407 -0
- package/skills/ui-ux-pro-max/SKILL.md +386 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/vercel-automation/SKILL.md +226 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/worktree-manager/SKILL.md +725 -0
- package/skills/worktree-manager/config.json +15 -0
- package/skills/worktree-manager/scripts/allocate-ports.sh +100 -0
- package/skills/worktree-manager/scripts/cleanup.sh +185 -0
- package/skills/worktree-manager/scripts/launch-agent.sh +155 -0
- package/skills/worktree-manager/scripts/register.sh +125 -0
- package/skills/worktree-manager/scripts/release-ports.sh +48 -0
- package/skills/worktree-manager/scripts/status.sh +169 -0
- package/skills/worktree-manager/scripts/sync.sh +168 -0
- package/skills/worktree-manager/templates/worktree.json +23 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +289 -0
- 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 是数组
|