@superkou/openspec 1.4.1
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/LICENSE +22 -0
- package/README.md +213 -0
- package/bin/openspec.js +5 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.js +544 -0
- package/dist/commands/change.d.ts +35 -0
- package/dist/commands/change.js +277 -0
- package/dist/commands/completion.d.ts +72 -0
- package/dist/commands/completion.js +264 -0
- package/dist/commands/config.d.ts +36 -0
- package/dist/commands/config.js +611 -0
- package/dist/commands/context-store.d.ts +3 -0
- package/dist/commands/context-store.js +475 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.js +183 -0
- package/dist/commands/initiative.d.ts +13 -0
- package/dist/commands/initiative.js +318 -0
- package/dist/commands/schema.d.ts +6 -0
- package/dist/commands/schema.js +869 -0
- package/dist/commands/show.d.ts +14 -0
- package/dist/commands/show.js +132 -0
- package/dist/commands/spec.d.ts +15 -0
- package/dist/commands/spec.js +225 -0
- package/dist/commands/validate.d.ts +24 -0
- package/dist/commands/validate.js +294 -0
- package/dist/commands/workflow/index.d.ts +19 -0
- package/dist/commands/workflow/index.js +13 -0
- package/dist/commands/workflow/initiative-link.d.ts +24 -0
- package/dist/commands/workflow/initiative-link.js +47 -0
- package/dist/commands/workflow/instructions.d.ts +29 -0
- package/dist/commands/workflow/instructions.js +344 -0
- package/dist/commands/workflow/new-change.d.ts +17 -0
- package/dist/commands/workflow/new-change.js +141 -0
- package/dist/commands/workflow/schemas.d.ts +10 -0
- package/dist/commands/workflow/schemas.js +34 -0
- package/dist/commands/workflow/set-change.d.ts +13 -0
- package/dist/commands/workflow/set-change.js +87 -0
- package/dist/commands/workflow/shared.d.ts +59 -0
- package/dist/commands/workflow/shared.js +116 -0
- package/dist/commands/workflow/status.d.ts +14 -0
- package/dist/commands/workflow/status.js +90 -0
- package/dist/commands/workflow/templates.d.ts +16 -0
- package/dist/commands/workflow/templates.js +69 -0
- package/dist/commands/workspace/context-status.d.ts +4 -0
- package/dist/commands/workspace/context-status.js +59 -0
- package/dist/commands/workspace/open-target-selection.d.ts +13 -0
- package/dist/commands/workspace/open-target-selection.js +146 -0
- package/dist/commands/workspace/open-view.d.ts +62 -0
- package/dist/commands/workspace/open-view.js +249 -0
- package/dist/commands/workspace/open.d.ts +37 -0
- package/dist/commands/workspace/open.js +110 -0
- package/dist/commands/workspace/opener-selection.d.ts +11 -0
- package/dist/commands/workspace/opener-selection.js +98 -0
- package/dist/commands/workspace/operations.d.ts +29 -0
- package/dist/commands/workspace/operations.js +543 -0
- package/dist/commands/workspace/prompt-theme.d.ts +29 -0
- package/dist/commands/workspace/prompt-theme.js +24 -0
- package/dist/commands/workspace/registration.d.ts +13 -0
- package/dist/commands/workspace/registration.js +84 -0
- package/dist/commands/workspace/selection.d.ts +8 -0
- package/dist/commands/workspace/selection.js +104 -0
- package/dist/commands/workspace/setup-prompts.d.ts +13 -0
- package/dist/commands/workspace/setup-prompts.js +121 -0
- package/dist/commands/workspace/types.d.ts +103 -0
- package/dist/commands/workspace/types.js +36 -0
- package/dist/commands/workspace.d.ts +5 -0
- package/dist/commands/workspace.js +577 -0
- package/dist/core/archive.d.ts +11 -0
- package/dist/core/archive.js +318 -0
- package/dist/core/artifact-graph/graph.d.ts +56 -0
- package/dist/core/artifact-graph/graph.js +141 -0
- package/dist/core/artifact-graph/index.d.ts +9 -0
- package/dist/core/artifact-graph/index.js +14 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts +183 -0
- package/dist/core/artifact-graph/instruction-loader.js +256 -0
- package/dist/core/artifact-graph/outputs.d.ts +14 -0
- package/dist/core/artifact-graph/outputs.js +39 -0
- package/dist/core/artifact-graph/resolver.d.ts +81 -0
- package/dist/core/artifact-graph/resolver.js +257 -0
- package/dist/core/artifact-graph/schema.d.ts +13 -0
- package/dist/core/artifact-graph/schema.js +108 -0
- package/dist/core/artifact-graph/state.d.ts +12 -0
- package/dist/core/artifact-graph/state.js +31 -0
- package/dist/core/artifact-graph/types.d.ts +40 -0
- package/dist/core/artifact-graph/types.js +29 -0
- package/dist/core/available-tools.d.ts +17 -0
- package/dist/core/available-tools.js +43 -0
- package/dist/core/change-metadata/index.d.ts +2 -0
- package/dist/core/change-metadata/index.js +2 -0
- package/dist/core/change-metadata/schema.d.ts +18 -0
- package/dist/core/change-metadata/schema.js +28 -0
- package/dist/core/change-status-policy.d.ts +50 -0
- package/dist/core/change-status-policy.js +70 -0
- package/dist/core/collections/index.d.ts +3 -0
- package/dist/core/collections/index.js +3 -0
- package/dist/core/collections/initiatives/collection.d.ts +4 -0
- package/dist/core/collections/initiatives/collection.js +17 -0
- package/dist/core/collections/initiatives/index.d.ts +6 -0
- package/dist/core/collections/initiatives/index.js +6 -0
- package/dist/core/collections/initiatives/operations.d.ts +49 -0
- package/dist/core/collections/initiatives/operations.js +175 -0
- package/dist/core/collections/initiatives/resolution.d.ts +87 -0
- package/dist/core/collections/initiatives/resolution.js +374 -0
- package/dist/core/collections/initiatives/schema.d.ts +41 -0
- package/dist/core/collections/initiatives/schema.js +134 -0
- package/dist/core/collections/initiatives/templates.d.ts +12 -0
- package/dist/core/collections/initiatives/templates.js +90 -0
- package/dist/core/collections/runtime.d.ts +46 -0
- package/dist/core/collections/runtime.js +194 -0
- package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
- package/dist/core/command-generation/adapters/amazon-q.js +26 -0
- package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
- package/dist/core/command-generation/adapters/antigravity.js +26 -0
- package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
- package/dist/core/command-generation/adapters/auggie.js +27 -0
- package/dist/core/command-generation/adapters/bob.d.ts +14 -0
- package/dist/core/command-generation/adapters/bob.js +45 -0
- package/dist/core/command-generation/adapters/claude.d.ts +13 -0
- package/dist/core/command-generation/adapters/claude.js +50 -0
- package/dist/core/command-generation/adapters/cline.d.ts +14 -0
- package/dist/core/command-generation/adapters/cline.js +27 -0
- package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
- package/dist/core/command-generation/adapters/codebuddy.js +28 -0
- package/dist/core/command-generation/adapters/codex.d.ts +16 -0
- package/dist/core/command-generation/adapters/codex.js +39 -0
- package/dist/core/command-generation/adapters/continue.d.ts +13 -0
- package/dist/core/command-generation/adapters/continue.js +28 -0
- package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
- package/dist/core/command-generation/adapters/costrict.js +27 -0
- package/dist/core/command-generation/adapters/crush.d.ts +13 -0
- package/dist/core/command-generation/adapters/crush.js +30 -0
- package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
- package/dist/core/command-generation/adapters/cursor.js +44 -0
- package/dist/core/command-generation/adapters/factory.d.ts +13 -0
- package/dist/core/command-generation/adapters/factory.js +27 -0
- package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
- package/dist/core/command-generation/adapters/gemini.js +26 -0
- package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
- package/dist/core/command-generation/adapters/github-copilot.js +26 -0
- package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
- package/dist/core/command-generation/adapters/iflow.js +29 -0
- package/dist/core/command-generation/adapters/index.d.ts +32 -0
- package/dist/core/command-generation/adapters/index.js +32 -0
- package/dist/core/command-generation/adapters/junie.d.ts +13 -0
- package/dist/core/command-generation/adapters/junie.js +26 -0
- package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/kilocode.js +23 -0
- package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
- package/dist/core/command-generation/adapters/kiro.js +26 -0
- package/dist/core/command-generation/adapters/lingma.d.ts +13 -0
- package/dist/core/command-generation/adapters/lingma.js +30 -0
- package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
- package/dist/core/command-generation/adapters/opencode.js +29 -0
- package/dist/core/command-generation/adapters/pi.d.ts +18 -0
- package/dist/core/command-generation/adapters/pi.js +55 -0
- package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
- package/dist/core/command-generation/adapters/qoder.js +30 -0
- package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
- package/dist/core/command-generation/adapters/qwen.js +26 -0
- package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/roocode.js +27 -0
- package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
- package/dist/core/command-generation/adapters/windsurf.js +51 -0
- package/dist/core/command-generation/generator.d.ts +21 -0
- package/dist/core/command-generation/generator.js +27 -0
- package/dist/core/command-generation/index.d.ts +22 -0
- package/dist/core/command-generation/index.js +24 -0
- package/dist/core/command-generation/registry.d.ts +36 -0
- package/dist/core/command-generation/registry.js +98 -0
- package/dist/core/command-generation/types.d.ts +56 -0
- package/dist/core/command-generation/types.js +8 -0
- package/dist/core/completions/command-registry.d.ts +3 -0
- package/dist/core/completions/command-registry.js +961 -0
- package/dist/core/completions/completion-provider.d.ts +71 -0
- package/dist/core/completions/completion-provider.js +129 -0
- package/dist/core/completions/factory.d.ts +64 -0
- package/dist/core/completions/factory.js +75 -0
- package/dist/core/completions/generators/bash-generator.d.ts +35 -0
- package/dist/core/completions/generators/bash-generator.js +230 -0
- package/dist/core/completions/generators/fish-generator.d.ts +32 -0
- package/dist/core/completions/generators/fish-generator.js +160 -0
- package/dist/core/completions/generators/powershell-generator.d.ts +36 -0
- package/dist/core/completions/generators/powershell-generator.js +266 -0
- package/dist/core/completions/generators/zsh-generator.d.ts +47 -0
- package/dist/core/completions/generators/zsh-generator.js +274 -0
- package/dist/core/completions/installers/bash-installer.d.ts +87 -0
- package/dist/core/completions/installers/bash-installer.js +318 -0
- package/dist/core/completions/installers/fish-installer.d.ts +43 -0
- package/dist/core/completions/installers/fish-installer.js +143 -0
- package/dist/core/completions/installers/powershell-installer.d.ts +102 -0
- package/dist/core/completions/installers/powershell-installer.js +387 -0
- package/dist/core/completions/installers/zsh-installer.d.ts +117 -0
- package/dist/core/completions/installers/zsh-installer.js +421 -0
- package/dist/core/completions/shared-flags.d.ts +12 -0
- package/dist/core/completions/shared-flags.js +28 -0
- package/dist/core/completions/templates/bash-templates.d.ts +6 -0
- package/dist/core/completions/templates/bash-templates.js +30 -0
- package/dist/core/completions/templates/fish-templates.d.ts +7 -0
- package/dist/core/completions/templates/fish-templates.js +45 -0
- package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
- package/dist/core/completions/templates/powershell-templates.js +34 -0
- package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
- package/dist/core/completions/templates/zsh-templates.js +45 -0
- package/dist/core/completions/types.d.ts +101 -0
- package/dist/core/completions/types.js +2 -0
- package/dist/core/config-prompts.d.ts +9 -0
- package/dist/core/config-prompts.js +34 -0
- package/dist/core/config-schema.d.ts +86 -0
- package/dist/core/config-schema.js +213 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.js +39 -0
- package/dist/core/context-store/binding.d.ts +53 -0
- package/dist/core/context-store/binding.js +197 -0
- package/dist/core/context-store/errors.d.ts +20 -0
- package/dist/core/context-store/errors.js +22 -0
- package/dist/core/context-store/foundation.d.ts +55 -0
- package/dist/core/context-store/foundation.js +321 -0
- package/dist/core/context-store/index.d.ts +6 -0
- package/dist/core/context-store/index.js +6 -0
- package/dist/core/context-store/operations.d.ts +85 -0
- package/dist/core/context-store/operations.js +528 -0
- package/dist/core/context-store/registry.d.ts +45 -0
- package/dist/core/context-store/registry.js +229 -0
- package/dist/core/converters/json-converter.d.ts +6 -0
- package/dist/core/converters/json-converter.js +51 -0
- package/dist/core/global-config.d.ts +49 -0
- package/dist/core/global-config.js +124 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.js +7 -0
- package/dist/core/init.d.ts +37 -0
- package/dist/core/init.js +593 -0
- package/dist/core/legacy-cleanup.d.ts +162 -0
- package/dist/core/legacy-cleanup.js +514 -0
- package/dist/core/list.d.ts +9 -0
- package/dist/core/list.js +171 -0
- package/dist/core/migration.d.ts +23 -0
- package/dist/core/migration.js +108 -0
- package/dist/core/parsers/change-parser.d.ts +13 -0
- package/dist/core/parsers/change-parser.js +197 -0
- package/dist/core/parsers/markdown-parser.d.ts +26 -0
- package/dist/core/parsers/markdown-parser.js +227 -0
- package/dist/core/parsers/requirement-blocks.d.ts +37 -0
- package/dist/core/parsers/requirement-blocks.js +201 -0
- package/dist/core/parsers/spec-structure.d.ts +9 -0
- package/dist/core/parsers/spec-structure.js +88 -0
- package/dist/core/planning-home.d.ts +21 -0
- package/dist/core/planning-home.js +108 -0
- package/dist/core/profile-sync-drift.d.ts +38 -0
- package/dist/core/profile-sync-drift.js +200 -0
- package/dist/core/profiles.d.ts +26 -0
- package/dist/core/profiles.js +40 -0
- package/dist/core/project-config.d.ts +64 -0
- package/dist/core/project-config.js +223 -0
- package/dist/core/schemas/base.schema.d.ts +13 -0
- package/dist/core/schemas/base.schema.js +13 -0
- package/dist/core/schemas/change.schema.d.ts +73 -0
- package/dist/core/schemas/change.schema.js +31 -0
- package/dist/core/schemas/index.d.ts +4 -0
- package/dist/core/schemas/index.js +4 -0
- package/dist/core/schemas/spec.schema.d.ts +18 -0
- package/dist/core/schemas/spec.schema.js +15 -0
- package/dist/core/shared/index.d.ts +8 -0
- package/dist/core/shared/index.js +8 -0
- package/dist/core/shared/skill-generation.d.ts +49 -0
- package/dist/core/shared/skill-generation.js +96 -0
- package/dist/core/shared/tool-detection.d.ts +71 -0
- package/dist/core/shared/tool-detection.js +158 -0
- package/dist/core/specs-apply.d.ts +73 -0
- package/dist/core/specs-apply.js +392 -0
- package/dist/core/styles/palette.d.ts +7 -0
- package/dist/core/styles/palette.js +8 -0
- package/dist/core/templates/index.d.ts +8 -0
- package/dist/core/templates/index.js +9 -0
- package/dist/core/templates/skill-templates.d.ts +19 -0
- package/dist/core/templates/skill-templates.js +18 -0
- package/dist/core/templates/types.d.ts +19 -0
- package/dist/core/templates/types.js +5 -0
- package/dist/core/templates/workflows/apply-change.d.ts +10 -0
- package/dist/core/templates/workflows/apply-change.js +314 -0
- package/dist/core/templates/workflows/archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/archive-change.js +277 -0
- package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/bulk-archive-change.js +492 -0
- package/dist/core/templates/workflows/continue-change.d.ts +10 -0
- package/dist/core/templates/workflows/continue-change.js +234 -0
- package/dist/core/templates/workflows/explore.d.ts +10 -0
- package/dist/core/templates/workflows/explore.js +459 -0
- package/dist/core/templates/workflows/feedback.d.ts +9 -0
- package/dist/core/templates/workflows/feedback.js +108 -0
- package/dist/core/templates/workflows/ff-change.d.ts +10 -0
- package/dist/core/templates/workflows/ff-change.js +200 -0
- package/dist/core/templates/workflows/new-change.d.ts +10 -0
- package/dist/core/templates/workflows/new-change.js +143 -0
- package/dist/core/templates/workflows/onboard.d.ts +10 -0
- package/dist/core/templates/workflows/onboard.js +563 -0
- package/dist/core/templates/workflows/propose.d.ts +10 -0
- package/dist/core/templates/workflows/propose.js +218 -0
- package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
- package/dist/core/templates/workflows/sync-specs.js +290 -0
- package/dist/core/templates/workflows/verify-change.d.ts +10 -0
- package/dist/core/templates/workflows/verify-change.js +338 -0
- package/dist/core/update.d.ts +82 -0
- package/dist/core/update.js +557 -0
- package/dist/core/validation/constants.d.ts +34 -0
- package/dist/core/validation/constants.js +40 -0
- package/dist/core/validation/types.d.ts +18 -0
- package/dist/core/validation/types.js +2 -0
- package/dist/core/validation/validator.d.ts +43 -0
- package/dist/core/validation/validator.js +435 -0
- package/dist/core/view.d.ts +8 -0
- package/dist/core/view.js +168 -0
- package/dist/core/workspace/foundation.d.ts +67 -0
- package/dist/core/workspace/foundation.js +295 -0
- package/dist/core/workspace/index.d.ts +8 -0
- package/dist/core/workspace/index.js +8 -0
- package/dist/core/workspace/legacy-state.d.ts +28 -0
- package/dist/core/workspace/legacy-state.js +200 -0
- package/dist/core/workspace/link-input.d.ts +9 -0
- package/dist/core/workspace/link-input.js +32 -0
- package/dist/core/workspace/open-surface.d.ts +45 -0
- package/dist/core/workspace/open-surface.js +215 -0
- package/dist/core/workspace/openers.d.ts +21 -0
- package/dist/core/workspace/openers.js +124 -0
- package/dist/core/workspace/registry.d.ts +24 -0
- package/dist/core/workspace/registry.js +146 -0
- package/dist/core/workspace/skills.d.ts +57 -0
- package/dist/core/workspace/skills.js +334 -0
- package/dist/core/workspace/state-io.d.ts +10 -0
- package/dist/core/workspace/state-io.js +121 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/prompts/searchable-multi-select.d.ts +28 -0
- package/dist/prompts/searchable-multi-select.js +159 -0
- package/dist/telemetry/config.d.ts +38 -0
- package/dist/telemetry/config.js +136 -0
- package/dist/telemetry/index.d.ts +31 -0
- package/dist/telemetry/index.js +164 -0
- package/dist/ui/ascii-patterns.d.ts +16 -0
- package/dist/ui/ascii-patterns.js +133 -0
- package/dist/ui/welcome-screen.d.ts +10 -0
- package/dist/ui/welcome-screen.js +146 -0
- package/dist/utils/change-metadata.d.ts +54 -0
- package/dist/utils/change-metadata.js +141 -0
- package/dist/utils/change-utils.d.ts +71 -0
- package/dist/utils/change-utils.js +123 -0
- package/dist/utils/command-references.d.ts +18 -0
- package/dist/utils/command-references.js +20 -0
- package/dist/utils/file-system.d.ts +41 -0
- package/dist/utils/file-system.js +301 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/interactive.d.ts +18 -0
- package/dist/utils/interactive.js +21 -0
- package/dist/utils/item-discovery.d.ts +4 -0
- package/dist/utils/item-discovery.js +72 -0
- package/dist/utils/match.d.ts +3 -0
- package/dist/utils/match.js +22 -0
- package/dist/utils/shell-detection.d.ts +20 -0
- package/dist/utils/shell-detection.js +41 -0
- package/dist/utils/task-progress.d.ts +8 -0
- package/dist/utils/task-progress.js +36 -0
- package/package.json +85 -0
- package/schemas/spec-driven/schema.yaml +151 -0
- package/schemas/spec-driven/templates/design.md +19 -0
- package/schemas/spec-driven/templates/proposal.md +23 -0
- package/schemas/spec-driven/templates/spec.md +8 -0
- package/schemas/spec-driven/templates/tasks.md +9 -0
- package/schemas/workspace-planning/schema.yaml +72 -0
- package/schemas/workspace-planning/templates/design.md +33 -0
- package/schemas/workspace-planning/templates/proposal.md +28 -0
- package/schemas/workspace-planning/templates/spec.md +9 -0
- package/schemas/workspace-planning/templates/tasks.md +15 -0
- package/scripts/postinstall.js +83 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
name: spec-driven
|
|
2
|
+
version: 1
|
|
3
|
+
description: 默认 OpenSpec 工作流 — 提案 → 规格 → 设计 → 任务
|
|
4
|
+
artifacts:
|
|
5
|
+
- id: proposal
|
|
6
|
+
generates: proposal.md
|
|
7
|
+
description: 初始提案文档,说明变更的背景和目的
|
|
8
|
+
template: proposal.md
|
|
9
|
+
instruction: |
|
|
10
|
+
创建提案文档,说明为什么需要这个变更。
|
|
11
|
+
|
|
12
|
+
段落:
|
|
13
|
+
- **Why**:1-2 句话说明问题或机会。解决什么问题?为什么现在做?
|
|
14
|
+
- **What Changes**:变更列表。具体说明新增、修改或移除的内容。破坏性变更标注 **BREAKING**。
|
|
15
|
+
- **Capabilities**:标识哪些 spec 将被创建或修改:
|
|
16
|
+
- **New Capabilities**:新增的能力列表。每个将创建 `specs/<name>/spec.md`。使用 kebab-case 名称(如 `user-auth`、`data-export`)。
|
|
17
|
+
- **Modified Capabilities**:需求发生改变的既有能力。仅 spec 级别行为变更时填写(不涉及实现细节)。每个需要一份 delta spec 文件。查阅 `openspec/specs/` 下的既有 spec 名称。如无需求变更则留空。
|
|
18
|
+
- **Impact**:受影响的代码、API、依赖或系统。
|
|
19
|
+
|
|
20
|
+
重要:Capabilities 段落是 proposal 与 specs 之间的契约。填写前请先查阅既有 specs。
|
|
21
|
+
此处列出的每个 capability 后续都需要对应的 spec 文件。
|
|
22
|
+
|
|
23
|
+
保持简洁(1-2 页)。关注"为什么做"而不是"怎么做"——实现细节放在 design.md。
|
|
24
|
+
|
|
25
|
+
这是基础——specs、design、tasks 都以此为基础构建。
|
|
26
|
+
requires: []
|
|
27
|
+
|
|
28
|
+
- id: specs
|
|
29
|
+
generates: "specs/**/*.md"
|
|
30
|
+
description: 详细的变更规格说明
|
|
31
|
+
template: spec.md
|
|
32
|
+
instruction: |
|
|
33
|
+
创建规格文件,定义系统"应该做什么"。
|
|
34
|
+
|
|
35
|
+
为 proposal 的 Capabilities 中列出的每个 capability 创建一个 spec 文件。
|
|
36
|
+
- 新增能力:使用 proposal 中的 kebab-case 名称(specs/<capability>/spec.md)。
|
|
37
|
+
- 修改能力:使用 openspec/specs/ 中既有的 spec 文件夹名称,在 specs/<capability>/spec.md 创建 delta spec。
|
|
38
|
+
|
|
39
|
+
Delta 操作(使用 ## 标题):
|
|
40
|
+
- **ADDED Requirements**:新能力
|
|
41
|
+
- **MODIFIED Requirements**:行为变更 —— 必须包含完整的更新内容
|
|
42
|
+
- **REMOVED Requirements**:废弃功能 —— 必须包含 **Reason** 和 **Migration**
|
|
43
|
+
- **RENAMED Requirements**:仅名称变更 —— 使用 FROM:/TO: 格式
|
|
44
|
+
|
|
45
|
+
格式要求:
|
|
46
|
+
- 每个需求:`### Requirement: <名称>` 后跟描述
|
|
47
|
+
- 使用 SHALL/MUST 或中文的"必须"/"应当"来表述规范性需求
|
|
48
|
+
- 每个场景:`#### Scenario: <名称>` 使用 WHEN/THEN 格式
|
|
49
|
+
- **关键**:场景必须使用恰好 4 个 `#`(`####`)。使用 3 个 `#` 或列表格式会静默失败。
|
|
50
|
+
- 每个需求至少需要一个场景。
|
|
51
|
+
|
|
52
|
+
MODIFIED 需求工作流:
|
|
53
|
+
1. 在 openspec/specs/<capability>/spec.md 中找到既有需求
|
|
54
|
+
2. 复制整个需求块(从 `### Requirement:` 到所有场景)
|
|
55
|
+
3. 粘贴到 `## MODIFIED Requirements` 下并编辑为新的行为
|
|
56
|
+
4. 确保标题文本精确匹配(忽略空白差异)
|
|
57
|
+
|
|
58
|
+
常见错误:使用 MODIFIED 但只包含部分内容,归档时信息会丢失。
|
|
59
|
+
如果不修改既有行为只是新增关注点,请使用 ADDED。
|
|
60
|
+
|
|
61
|
+
示例:
|
|
62
|
+
```
|
|
63
|
+
## ADDED Requirements
|
|
64
|
+
|
|
65
|
+
### Requirement: 用户可导出数据
|
|
66
|
+
系统 SHALL 允许用户以 CSV 格式导出数据。
|
|
67
|
+
|
|
68
|
+
#### Scenario: 成功导出
|
|
69
|
+
- **WHEN** 用户点击"导出"按钮
|
|
70
|
+
- **THEN** 系统下载包含所有用户数据的 CSV 文件
|
|
71
|
+
|
|
72
|
+
## REMOVED Requirements
|
|
73
|
+
|
|
74
|
+
### Requirement: 旧版导出
|
|
75
|
+
**Reason**: 已被新版导出系统替代
|
|
76
|
+
**Migration**: 使用 /api/v2/export 新端点
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Specs 应该可测试——每个场景都是一个潜在的测试用例。
|
|
80
|
+
requires:
|
|
81
|
+
- proposal
|
|
82
|
+
|
|
83
|
+
- id: design
|
|
84
|
+
generates: design.md
|
|
85
|
+
description: 包含实现细节的技术设计文档
|
|
86
|
+
template: design.md
|
|
87
|
+
instruction: |
|
|
88
|
+
创建设计文档,说明如何实现变更。
|
|
89
|
+
|
|
90
|
+
何时需要 design.md(满足任一即创建):
|
|
91
|
+
- 跨层变更(多个服务/模块)或新架构模式
|
|
92
|
+
- 新增外部依赖或重大数据模型变更
|
|
93
|
+
- 涉及安全、性能或迁移复杂度
|
|
94
|
+
- 编码前需要先做技术决策来消除不确定性
|
|
95
|
+
|
|
96
|
+
段落:
|
|
97
|
+
- **Context**:背景、当前状态、约束条件、相关方
|
|
98
|
+
- **Goals / Non-Goals**:本设计的目标和明确排除的内容
|
|
99
|
+
- **Decisions**:关键技术选择及理由(为什么选 X 而非 Y?)。为每个决策包含被否决的备选方案。
|
|
100
|
+
- **Risks / Trade-offs**:已知限制和可能出错的地方。格式:[风险] → 缓解措施
|
|
101
|
+
- **Migration Plan**:部署步骤、回滚策略(如适用)
|
|
102
|
+
- **Open Questions**:待解决的决策或未知信息
|
|
103
|
+
|
|
104
|
+
聚焦于架构和方法,而非逐行实现细节。
|
|
105
|
+
引用 proposal 了解动机,引用 specs 了解需求。
|
|
106
|
+
|
|
107
|
+
好的设计文档阐述技术决策背后的"为什么"。
|
|
108
|
+
requires:
|
|
109
|
+
- proposal
|
|
110
|
+
|
|
111
|
+
- id: tasks
|
|
112
|
+
generates: tasks.md
|
|
113
|
+
description: 带勾选框的可执行任务清单
|
|
114
|
+
template: tasks.md
|
|
115
|
+
instruction: |
|
|
116
|
+
创建任务清单,将实现工作拆解为可执行的步骤。
|
|
117
|
+
|
|
118
|
+
**重要:严格遵循下方模板。** apply 阶段解析复选框格式来追踪进度。
|
|
119
|
+
未使用 `- [ ]` 格式的任务不会被追踪。
|
|
120
|
+
|
|
121
|
+
指引:
|
|
122
|
+
- 用 ## 编号标题分组相关任务
|
|
123
|
+
- 每个任务必须是复选框:`- [ ] X.Y 任务描述`
|
|
124
|
+
- 任务应足够小,一次工作会话内可完成
|
|
125
|
+
- 按依赖顺序排列任务(什么先做?)
|
|
126
|
+
|
|
127
|
+
示例:
|
|
128
|
+
```
|
|
129
|
+
## 1. 准备
|
|
130
|
+
|
|
131
|
+
- [ ] 1.1 创建新模块结构
|
|
132
|
+
- [ ] 1.2 添加依赖到 package.json
|
|
133
|
+
|
|
134
|
+
## 2. 核心实现
|
|
135
|
+
|
|
136
|
+
- [ ] 2.1 实现数据导出函数
|
|
137
|
+
- [ ] 2.2 添加 CSV 格式化工具
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
参考 specs 了解需要构建什么,参考 design 了解如何构建。
|
|
141
|
+
每个任务应可验证——完成即知。
|
|
142
|
+
requires:
|
|
143
|
+
- specs
|
|
144
|
+
- design
|
|
145
|
+
|
|
146
|
+
apply:
|
|
147
|
+
requires: [tasks]
|
|
148
|
+
tracks: tasks.md
|
|
149
|
+
instruction: |
|
|
150
|
+
阅读上下文文件,逐个完成待处理任务,完成后标记为已完成。
|
|
151
|
+
遇到阻塞或需要澄清时暂停。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## Why
|
|
2
|
+
|
|
3
|
+
<!-- 说明此变更的动机。解决什么问题?为什么现在做? -->
|
|
4
|
+
|
|
5
|
+
## What Changes
|
|
6
|
+
|
|
7
|
+
<!-- 描述将要发生的变化。具体说明新增、修改或移除了什么。 -->
|
|
8
|
+
|
|
9
|
+
## Capabilities
|
|
10
|
+
|
|
11
|
+
### New Capabilities
|
|
12
|
+
<!-- 引入的新能力。将 <name> 替换为 kebab-case 标识符(例如 user-auth、data-export、api-rate-limiting)。每个将创建 specs/<name>/spec.md -->
|
|
13
|
+
- `<name>`: <此能力覆盖范围的简要描述>
|
|
14
|
+
|
|
15
|
+
### Modified Capabilities
|
|
16
|
+
<!-- 需求发生变化的既有能力(不涉及实现细节)。
|
|
17
|
+
仅当 spec 级别行为变化时列出。每个需要 delta spec 文件。
|
|
18
|
+
使用 openspec/specs/ 中的既有 spec 名称。如无需求变更则留空。 -->
|
|
19
|
+
- `<existing-name>`: <哪些需求正在变化>
|
|
20
|
+
|
|
21
|
+
## Impact
|
|
22
|
+
|
|
23
|
+
<!-- 受影响的代码、API、依赖、系统 -->
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
name: workspace-planning
|
|
2
|
+
version: 1
|
|
3
|
+
description: Workspace planning workflow for cross-area changes
|
|
4
|
+
artifacts:
|
|
5
|
+
- id: proposal
|
|
6
|
+
generates: proposal.md
|
|
7
|
+
description: Shared workspace proposal with the product goal, scope, affected areas, and impact
|
|
8
|
+
template: proposal.md
|
|
9
|
+
instruction: |
|
|
10
|
+
Create the workspace-level proposal that captures the shared product goal once.
|
|
11
|
+
|
|
12
|
+
Sections:
|
|
13
|
+
- **Why**: Explain the product goal or problem in 1-2 concise paragraphs.
|
|
14
|
+
- **What Changes**: List the cross-area behavior, workflow, or capability changes.
|
|
15
|
+
- **Affected Areas**: Name known affected areas using registered workspace link names where applicable. If scope is still being explored, say what remains unresolved.
|
|
16
|
+
- **Capabilities**: Identify workspace-scoped capabilities that need specs. Area-specific requirements should later live under `specs/<area-or-repo>/<capability>/spec.md`.
|
|
17
|
+
- **Impact**: Summarize user-facing impact, planning impact, and likely implementation homes without creating repo-local artifacts.
|
|
18
|
+
|
|
19
|
+
Keep linked repos and folders as exploration context until an explicit implementation workflow selects an affected area.
|
|
20
|
+
requires: []
|
|
21
|
+
|
|
22
|
+
- id: specs
|
|
23
|
+
generates: "specs/**/*.md"
|
|
24
|
+
description: Workspace-scoped specs organized by affected area and capability
|
|
25
|
+
template: spec.md
|
|
26
|
+
instruction: |
|
|
27
|
+
Create workspace-scoped specification files that define WHAT should change.
|
|
28
|
+
|
|
29
|
+
Use `specs/<area-or-repo>/<capability>/spec.md` for area-specific requirements. The first path segment should be a registered workspace link name when a registered area owns the requirement. If the area is unresolved, use an exploratory area name and make the unresolved question explicit in the requirement or scenario.
|
|
30
|
+
|
|
31
|
+
These specs are planning artifacts under the workspace change root. Do not create repo-local spec files in linked repos during workspace planning.
|
|
32
|
+
|
|
33
|
+
Delta operations (use ## headers):
|
|
34
|
+
- **ADDED Requirements**: New workspace-scoped behavior.
|
|
35
|
+
- **MODIFIED Requirements**: Changed behavior; include the full updated requirement.
|
|
36
|
+
- **REMOVED Requirements**: Deprecated behavior with Reason and Migration.
|
|
37
|
+
- **RENAMED Requirements**: Name changes only; use FROM:/TO: format.
|
|
38
|
+
|
|
39
|
+
Each requirement must use SHALL/MUST language and include at least one `#### Scenario:` block.
|
|
40
|
+
requires:
|
|
41
|
+
- proposal
|
|
42
|
+
|
|
43
|
+
- id: design
|
|
44
|
+
generates: design.md
|
|
45
|
+
description: Cross-area technical design and coordination decisions
|
|
46
|
+
template: design.md
|
|
47
|
+
instruction: |
|
|
48
|
+
Create the cross-area design document for workspace planning.
|
|
49
|
+
|
|
50
|
+
Focus on decisions that affect multiple areas, handoffs between areas, shared constraints, sequencing risks, and how the workspace plan should stay the source of truth. Avoid line-by-line implementation details and do not instruct agents to edit linked repos until an explicit implementation workflow provides an allowed edit root.
|
|
51
|
+
requires:
|
|
52
|
+
- proposal
|
|
53
|
+
|
|
54
|
+
- id: tasks
|
|
55
|
+
generates: tasks.md
|
|
56
|
+
description: Coordination checklist for workspace planning and later affected-area implementation
|
|
57
|
+
template: tasks.md
|
|
58
|
+
instruction: |
|
|
59
|
+
Create the workspace coordination task list.
|
|
60
|
+
|
|
61
|
+
Group tasks by phase or affected area as useful. Each actionable item must be a checkbox using `- [ ]`. When implementation tasks are area-specific, name the affected area and keep the task at planning granularity until a later implementation workflow selects an allowed edit root.
|
|
62
|
+
requires:
|
|
63
|
+
- specs
|
|
64
|
+
- design
|
|
65
|
+
|
|
66
|
+
apply:
|
|
67
|
+
requires: [tasks]
|
|
68
|
+
tracks: tasks.md
|
|
69
|
+
instruction: |
|
|
70
|
+
Read the workspace planning context from status and instructions output before applying.
|
|
71
|
+
Select an affected area and confirm an allowed edit root before making implementation edits.
|
|
72
|
+
Until an explicit implementation context is available, treat linked repos and folders as read-only exploration context.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
## Context
|
|
2
|
+
|
|
3
|
+
Summarize the workspace planning context, relevant linked areas, and constraints.
|
|
4
|
+
|
|
5
|
+
## Goals / Non-Goals
|
|
6
|
+
|
|
7
|
+
**Goals:**
|
|
8
|
+
-
|
|
9
|
+
|
|
10
|
+
**Non-Goals:**
|
|
11
|
+
- Creating repo-local implementation artifacts before an affected area is selected.
|
|
12
|
+
|
|
13
|
+
## Decisions
|
|
14
|
+
|
|
15
|
+
### Decision: <title>
|
|
16
|
+
|
|
17
|
+
<decision and rationale>
|
|
18
|
+
|
|
19
|
+
Alternative considered: <alternative and why it was not chosen>
|
|
20
|
+
|
|
21
|
+
## Risks / Trade-offs
|
|
22
|
+
|
|
23
|
+
- <risk> -> <mitigation>
|
|
24
|
+
|
|
25
|
+
## Coordination Notes
|
|
26
|
+
|
|
27
|
+
- Affected areas:
|
|
28
|
+
- Open handoffs:
|
|
29
|
+
- Implementation entry criteria:
|
|
30
|
+
|
|
31
|
+
## Open Questions
|
|
32
|
+
|
|
33
|
+
-
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## Why
|
|
2
|
+
|
|
3
|
+
Describe the shared product goal, problem, or opportunity that makes this workspace-level change worth planning.
|
|
4
|
+
|
|
5
|
+
## What Changes
|
|
6
|
+
|
|
7
|
+
-
|
|
8
|
+
|
|
9
|
+
## Affected Areas
|
|
10
|
+
|
|
11
|
+
- Known:
|
|
12
|
+
- Unresolved:
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
|
|
16
|
+
### New Capabilities
|
|
17
|
+
|
|
18
|
+
-
|
|
19
|
+
|
|
20
|
+
### Modified Capabilities
|
|
21
|
+
|
|
22
|
+
-
|
|
23
|
+
|
|
24
|
+
## Impact
|
|
25
|
+
|
|
26
|
+
- Workspace planning:
|
|
27
|
+
- Linked repos or folders:
|
|
28
|
+
- User-facing behavior:
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
## ADDED Requirements
|
|
2
|
+
|
|
3
|
+
### Requirement: <workspace requirement name>
|
|
4
|
+
The workspace plan SHALL describe the required behavior and affected area without creating repo-local artifacts during planning.
|
|
5
|
+
|
|
6
|
+
#### Scenario: <scenario name>
|
|
7
|
+
- **GIVEN** <context>
|
|
8
|
+
- **WHEN** <action>
|
|
9
|
+
- **THEN** <observable result>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## 1. Workspace Planning
|
|
2
|
+
|
|
3
|
+
- [ ] 1.1 Confirm the shared product goal and unresolved scope questions.
|
|
4
|
+
- [ ] 1.2 Identify affected areas using registered workspace link names where applicable.
|
|
5
|
+
- [ ] 1.3 Review workspace-scoped specs and design before selecting implementation areas.
|
|
6
|
+
|
|
7
|
+
## 2. Affected Area Implementation
|
|
8
|
+
|
|
9
|
+
- [ ] 2.1 Select an affected area and confirm its allowed edit root before implementation.
|
|
10
|
+
- [ ] 2.2 Create or update repo-local implementation artifacts only after the area is selected.
|
|
11
|
+
|
|
12
|
+
## 3. Verification
|
|
13
|
+
|
|
14
|
+
- [ ] 3.1 Verify workspace planning artifacts remain the source of truth.
|
|
15
|
+
- [ ] 3.2 Record manual acceptance evidence and follow-up fixes.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Postinstall script that hints about shell completions
|
|
5
|
+
*
|
|
6
|
+
* Completion installation is opt-in: the user must run
|
|
7
|
+
* `openspec completion install` explicitly. This script only
|
|
8
|
+
* prints a one-line tip after npm install.
|
|
9
|
+
*
|
|
10
|
+
* The tip is suppressed when:
|
|
11
|
+
* - CI=true environment variable is set
|
|
12
|
+
* - OPENSPEC_NO_COMPLETIONS=1 environment variable is set
|
|
13
|
+
* - dist/ directory doesn't exist (dev setup scenario)
|
|
14
|
+
*
|
|
15
|
+
* The script never fails npm install - all errors are caught and handled gracefully.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { promises as fs } from 'fs';
|
|
19
|
+
import path from 'path';
|
|
20
|
+
import { fileURLToPath } from 'url';
|
|
21
|
+
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = path.dirname(__filename);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Check if we should skip installation
|
|
27
|
+
*/
|
|
28
|
+
function shouldSkipInstallation() {
|
|
29
|
+
// Skip in CI environments
|
|
30
|
+
if (process.env.CI === 'true' || process.env.CI === '1') {
|
|
31
|
+
return { skip: true, reason: 'CI environment detected' };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Skip if user opted out
|
|
35
|
+
if (process.env.OPENSPEC_NO_COMPLETIONS === '1') {
|
|
36
|
+
return { skip: true, reason: 'OPENSPEC_NO_COMPLETIONS=1 set' };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return { skip: false };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Check if dist/ directory exists
|
|
44
|
+
*/
|
|
45
|
+
async function distExists() {
|
|
46
|
+
const distPath = path.join(__dirname, '..', 'dist');
|
|
47
|
+
try {
|
|
48
|
+
const stat = await fs.stat(distPath);
|
|
49
|
+
return stat.isDirectory();
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Main function
|
|
57
|
+
*/
|
|
58
|
+
async function main() {
|
|
59
|
+
try {
|
|
60
|
+
// Check if we should skip
|
|
61
|
+
const skipCheck = shouldSkipInstallation();
|
|
62
|
+
if (skipCheck.skip) {
|
|
63
|
+
// Silent skip - no output
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Check if dist/ exists (skip silently if not - expected during dev setup)
|
|
68
|
+
if (!(await distExists())) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Completions are opt-in — just print a hint
|
|
73
|
+
console.log(`\nTip: Run 'openspec completion install' for shell completions`);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
// Fail gracefully - never break npm install
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Run main and handle any unhandled errors
|
|
80
|
+
main().catch(() => {
|
|
81
|
+
// Silent failure - never break npm install
|
|
82
|
+
process.exit(0);
|
|
83
|
+
});
|