@codewalla_india/openspec 1.0.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 +225 -0
- package/bin/openspec.js +5 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.js +548 -0
- package/dist/commands/change.d.ts +39 -0
- package/dist/commands/change.js +279 -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 +552 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.js +155 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.js +163 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.js +183 -0
- package/dist/commands/schema.d.ts +6 -0
- package/dist/commands/schema.js +869 -0
- package/dist/commands/shared-gather.d.ts +14 -0
- package/dist/commands/shared-gather.js +31 -0
- package/dist/commands/shared-output.d.ts +18 -0
- package/dist/commands/shared-output.js +61 -0
- package/dist/commands/show.d.ts +19 -0
- package/dist/commands/show.js +177 -0
- package/dist/commands/spec.d.ts +19 -0
- package/dist/commands/spec.js +236 -0
- package/dist/commands/store.d.ts +3 -0
- package/dist/commands/store.js +547 -0
- package/dist/commands/validate.d.ts +26 -0
- package/dist/commands/validate.js +330 -0
- package/dist/commands/workflow/index.d.ts +17 -0
- package/dist/commands/workflow/index.js +12 -0
- package/dist/commands/workflow/instructions.d.ts +45 -0
- package/dist/commands/workflow/instructions.js +500 -0
- package/dist/commands/workflow/new-change.d.ts +20 -0
- package/dist/commands/workflow/new-change.js +106 -0
- package/dist/commands/workflow/schemas.d.ts +10 -0
- package/dist/commands/workflow/schemas.js +34 -0
- package/dist/commands/workflow/shared.d.ts +84 -0
- package/dist/commands/workflow/shared.js +133 -0
- package/dist/commands/workflow/status.d.ts +16 -0
- package/dist/commands/workflow/status.js +92 -0
- package/dist/commands/workflow/templates.d.ts +16 -0
- package/dist/commands/workflow/templates.js +69 -0
- package/dist/commands/workset-input.d.ts +19 -0
- package/dist/commands/workset-input.js +112 -0
- package/dist/commands/workset-prompts.d.ts +12 -0
- package/dist/commands/workset-prompts.js +143 -0
- package/dist/commands/workset.d.ts +25 -0
- package/dist/commands/workset.js +446 -0
- package/dist/core/archive.d.ts +22 -0
- package/dist/core/archive.js +471 -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 +188 -0
- package/dist/core/artifact-graph/instruction-loader.js +233 -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 +19 -0
- package/dist/core/change-metadata/schema.js +30 -0
- package/dist/core/change-status-policy.d.ts +37 -0
- package/dist/core/change-status-policy.js +35 -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 +32 -0
- package/dist/core/command-generation/adapters/claude.d.ts +13 -0
- package/dist/core/command-generation/adapters/claude.js +37 -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 +31 -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 +42 -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 +38 -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/command-generation/yaml.d.ts +22 -0
- package/dist/core/command-generation/yaml.js +38 -0
- package/dist/core/completions/command-registry.d.ts +3 -0
- package/dist/core/completions/command-registry.js +778 -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 +276 -0
- package/dist/core/completions/installers/bash-installer.d.ts +87 -0
- package/dist/core/completions/installers/bash-installer.js +321 -0
- package/dist/core/completions/installers/fish-installer.d.ts +43 -0
- package/dist/core/completions/installers/fish-installer.js +151 -0
- package/dist/core/completions/installers/powershell-installer.d.ts +102 -0
- package/dist/core/completions/installers/powershell-installer.js +415 -0
- package/dist/core/completions/installers/zsh-installer.d.ts +117 -0
- package/dist/core/completions/installers/zsh-installer.js +424 -0
- package/dist/core/completions/shared-flags.d.ts +13 -0
- package/dist/core/completions/shared-flags.js +33 -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/comprehension/config.d.ts +20 -0
- package/dist/core/comprehension/config.js +23 -0
- package/dist/core/comprehension/fingerprint.d.ts +5 -0
- package/dist/core/comprehension/fingerprint.js +25 -0
- package/dist/core/comprehension/index.d.ts +49 -0
- package/dist/core/comprehension/index.js +78 -0
- package/dist/core/comprehension/pass-record.d.ts +29 -0
- package/dist/core/comprehension/pass-record.js +64 -0
- package/dist/core/comprehension/stats.d.ts +18 -0
- package/dist/core/comprehension/stats.js +41 -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 +87 -0
- package/dist/core/config-schema.js +239 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.js +39 -0
- package/dist/core/converters/json-converter.d.ts +6 -0
- package/dist/core/converters/json-converter.js +51 -0
- package/dist/core/file-state.d.ts +36 -0
- package/dist/core/file-state.js +112 -0
- package/dist/core/global-config.d.ts +51 -0
- package/dist/core/global-config.js +124 -0
- package/dist/core/id.d.ts +17 -0
- package/dist/core/id.js +30 -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 +613 -0
- package/dist/core/legacy-cleanup.d.ts +162 -0
- package/dist/core/legacy-cleanup.js +514 -0
- package/dist/core/list.d.ts +11 -0
- package/dist/core/list.js +185 -0
- package/dist/core/migration.d.ts +23 -0
- package/dist/core/migration.js +108 -0
- package/dist/core/openers.d.ts +77 -0
- package/dist/core/openers.js +251 -0
- package/dist/core/openspec-root.d.ts +45 -0
- package/dist/core/openspec-root.js +192 -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 +16 -0
- package/dist/core/planning-home.js +67 -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 +120 -0
- package/dist/core/project-config.js +406 -0
- package/dist/core/references.d.ts +63 -0
- package/dist/core/references.js +310 -0
- package/dist/core/relationship-health.d.ts +65 -0
- package/dist/core/relationship-health.js +64 -0
- package/dist/core/root-selection.d.ts +122 -0
- package/dist/core/root-selection.js +337 -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 +78 -0
- package/dist/core/specs-apply.js +394 -0
- package/dist/core/store/errors.d.ts +20 -0
- package/dist/core/store/errors.js +22 -0
- package/dist/core/store/foundation.d.ts +56 -0
- package/dist/core/store/foundation.js +251 -0
- package/dist/core/store/git.d.ts +23 -0
- package/dist/core/store/git.js +137 -0
- package/dist/core/store/index.d.ts +5 -0
- package/dist/core/store/index.js +5 -0
- package/dist/core/store/operations.d.ts +114 -0
- package/dist/core/store/operations.js +783 -0
- package/dist/core/store/registry.d.ts +58 -0
- package/dist/core/store/registry.js +275 -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 +337 -0
- package/dist/core/templates/workflows/archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/archive-change.js +278 -0
- package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
- package/dist/core/templates/workflows/bulk-archive-change.js +493 -0
- package/dist/core/templates/workflows/comprehension-guidance.d.ts +9 -0
- package/dist/core/templates/workflows/comprehension-guidance.js +58 -0
- package/dist/core/templates/workflows/continue-change.d.ts +10 -0
- package/dist/core/templates/workflows/continue-change.js +239 -0
- package/dist/core/templates/workflows/explore.d.ts +10 -0
- package/dist/core/templates/workflows/explore.js +464 -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 +205 -0
- package/dist/core/templates/workflows/mcp-guidance.d.ts +13 -0
- package/dist/core/templates/workflows/mcp-guidance.js +116 -0
- package/dist/core/templates/workflows/new-change.d.ts +10 -0
- package/dist/core/templates/workflows/new-change.js +148 -0
- package/dist/core/templates/workflows/onboard.d.ts +10 -0
- package/dist/core/templates/workflows/onboard.js +566 -0
- package/dist/core/templates/workflows/propose.d.ts +10 -0
- package/dist/core/templates/workflows/propose.js +228 -0
- package/dist/core/templates/workflows/store-selection.d.ts +8 -0
- package/dist/core/templates/workflows/store-selection.js +8 -0
- package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
- package/dist/core/templates/workflows/sync-specs.js +291 -0
- package/dist/core/templates/workflows/verify-change.d.ts +10 -0
- package/dist/core/templates/workflows/verify-change.js +346 -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 +44 -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/working-set.d.ts +47 -0
- package/dist/core/working-set.js +43 -0
- package/dist/core/worksets.d.ts +75 -0
- package/dist/core/worksets.js +245 -0
- package/dist/core/zod-issues.d.ts +4 -0
- package/dist/core/zod-issues.js +10 -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 +55 -0
- package/dist/utils/change-metadata.js +141 -0
- package/dist/utils/change-utils.d.ts +71 -0
- package/dist/utils/change-utils.js +138 -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 +320 -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 +84 -0
- package/schemas/spec-driven/schema.yaml +153 -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/scripts/postinstall.js +83 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type StoreBackendConfig, type StoreGitBackendConfig, type StorePathOptions, type StoreRegistryEntry, type StoreRegistryState } from './foundation.js';
|
|
2
|
+
export interface RegisterStoreInput extends StorePathOptions {
|
|
3
|
+
id: string;
|
|
4
|
+
localPath: string;
|
|
5
|
+
remote?: string;
|
|
6
|
+
branch?: string;
|
|
7
|
+
cwd?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResolveRegisteredStoreInput extends StorePathOptions {
|
|
10
|
+
id: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GetRegisteredStoreInput extends ResolveRegisteredStoreInput {
|
|
13
|
+
expectedBackend?: StoreGitBackendConfig;
|
|
14
|
+
}
|
|
15
|
+
export interface UnregisterStoreInput extends StorePathOptions {
|
|
16
|
+
id: string;
|
|
17
|
+
expectedBackend?: StoreGitBackendConfig;
|
|
18
|
+
beforeCommit?: (entry: RegisteredStoreEntry) => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export type ListRegisteredStoresOptions = StorePathOptions;
|
|
21
|
+
export interface RegisteredStoreEntry extends StoreRegistryEntry {
|
|
22
|
+
storeRoot: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolvedStore {
|
|
25
|
+
id: string;
|
|
26
|
+
storeRoot: string;
|
|
27
|
+
backend: StoreGitBackendConfig;
|
|
28
|
+
}
|
|
29
|
+
export interface StoreRegistrationCommit extends ResolvedStore {
|
|
30
|
+
metadataCreated: boolean;
|
|
31
|
+
registryUpdated: boolean;
|
|
32
|
+
alreadyRegistered: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface CommitStoreRegistrationInput extends StorePathOptions {
|
|
35
|
+
id: string;
|
|
36
|
+
backend: StoreGitBackendConfig;
|
|
37
|
+
writeMetadataIfMissing: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function getStoreRootForBackend(backend: StoreBackendConfig): string;
|
|
40
|
+
export declare function assertNoRegisteredStoreConflict(registry: StoreRegistryState | null, id: string, backend: StoreGitBackendConfig): void;
|
|
41
|
+
export declare function commitStoreRegistration(input: CommitStoreRegistrationInput): Promise<StoreRegistrationCommit>;
|
|
42
|
+
export declare function registerStore(input: RegisterStoreInput): Promise<ResolvedStore>;
|
|
43
|
+
export interface RegistrySnapshot {
|
|
44
|
+
/** null = the registry is unreadable; [] = empty or absent. */
|
|
45
|
+
entries: StoreRegistryEntry[] | null;
|
|
46
|
+
unreadable: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* One registry read serving every consumer in a command.
|
|
50
|
+
*/
|
|
51
|
+
export declare function readRegistrySnapshot(options?: {
|
|
52
|
+
globalDataDir?: string;
|
|
53
|
+
}): Promise<RegistrySnapshot>;
|
|
54
|
+
export declare function listRegisteredStores(options?: ListRegisteredStoresOptions): Promise<RegisteredStoreEntry[]>;
|
|
55
|
+
export declare function getRegisteredStore(input: GetRegisteredStoreInput): Promise<RegisteredStoreEntry>;
|
|
56
|
+
export declare function unregisterStoreRegistration(input: UnregisterStoreInput): Promise<RegisteredStoreEntry>;
|
|
57
|
+
export declare function resolveRegisteredStore(input: ResolveRegisteredStoreInput): Promise<ResolvedStore>;
|
|
58
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import { getStoreMetadataPath, getStoreMetadataDir, listStoreRegistryEntries, readStoreRegistryState, readOptionalStoreMetadataState, resolveGitStoreBackendConfig, updateStoreRegistryState, validateStoreId, writeStoreMetadataState, } from './foundation.js';
|
|
3
|
+
import { StoreError } from './errors.js';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { FileSystemUtils } from '../../utils/file-system.js';
|
|
6
|
+
export function getStoreRootForBackend(backend) {
|
|
7
|
+
switch (backend.type) {
|
|
8
|
+
case 'git':
|
|
9
|
+
return backend.local_path;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function normalizePathForComparison(targetPath) {
|
|
13
|
+
try {
|
|
14
|
+
return FileSystemUtils.canonicalizeExistingPath(targetPath);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Nonexistent (e.g. stale) paths still deserve a resolved compare;
|
|
18
|
+
// aligns with the operations.ts sibling fallback.
|
|
19
|
+
return path.resolve(targetPath);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function assertNoRegisteredStoreConflict(registry, id, backend) {
|
|
23
|
+
const nextPath = normalizePathForComparison(getStoreRootForBackend(backend));
|
|
24
|
+
for (const entry of listStoreRegistryEntries(registry ?? { version: 1, stores: {} })) {
|
|
25
|
+
const entryPath = normalizePathForComparison(getStoreRootForBackend(entry.backend));
|
|
26
|
+
if (entry.id === id && entryPath === nextPath) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (entry.id === id) {
|
|
30
|
+
throw new StoreError(`Store '${id}' is already registered at ${getStoreRootForBackend(entry.backend)}. One checkout per store id is supported on this machine.`, 'store_id_conflict', {
|
|
31
|
+
target: 'store.id',
|
|
32
|
+
fix: `Use the existing registration, or run openspec store unregister ${id} first to switch this id to a different checkout.`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (entryPath === nextPath) {
|
|
36
|
+
throw new StoreError(`Store path is already registered as '${entry.id}'.`, 'store_path_conflict', {
|
|
37
|
+
target: 'store.root',
|
|
38
|
+
fix: `Use the existing '${entry.id}' registration or choose a different path.`,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function withRegisteredStore(registry, id, backend) {
|
|
44
|
+
assertNoRegisteredStoreConflict(registry, id, backend);
|
|
45
|
+
const stores = {
|
|
46
|
+
...(registry?.stores ?? {}),
|
|
47
|
+
[id]: {
|
|
48
|
+
backend,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
version: 1,
|
|
53
|
+
stores: Object.fromEntries(Object.entries(stores).sort(([leftId], [rightId]) => leftId.localeCompare(rightId))),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function getRegisteredStoreOrThrow(registry, id) {
|
|
57
|
+
const entry = registry?.stores[id];
|
|
58
|
+
if (!entry) {
|
|
59
|
+
throw new StoreError(`Unknown store '${id}'`, 'store_not_found', {
|
|
60
|
+
target: 'store.id',
|
|
61
|
+
fix: 'Run openspec store list to see registered stores.',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
id,
|
|
66
|
+
backend: entry.backend,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Same checkout: type, canonical path, and branch — remote excluded. */
|
|
70
|
+
function sameCheckout(actual, expected) {
|
|
71
|
+
return (actual.type === expected.type &&
|
|
72
|
+
normalizePathForComparison(actual.local_path) ===
|
|
73
|
+
normalizePathForComparison(expected.local_path) &&
|
|
74
|
+
actual.branch === expected.branch);
|
|
75
|
+
}
|
|
76
|
+
function storeBackendsMatch(actual, expected) {
|
|
77
|
+
return sameCheckout(actual, expected) && actual.remote === expected.remote;
|
|
78
|
+
}
|
|
79
|
+
function assertExpectedRegisteredBackend(id, actual, expected) {
|
|
80
|
+
if (!expected || storeBackendsMatch(actual, expected))
|
|
81
|
+
return;
|
|
82
|
+
throw new StoreError(`Store '${id}' changed before cleanup completed.`, 'store_registry_changed', {
|
|
83
|
+
target: 'store.registry',
|
|
84
|
+
fix: 'Retry the cleanup command after reviewing the current store registration.',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function withoutRegisteredStore(registry, id, expectedBackend) {
|
|
88
|
+
const removed = getRegisteredStoreOrThrow(registry, id);
|
|
89
|
+
assertExpectedRegisteredBackend(id, removed.backend, expectedBackend);
|
|
90
|
+
const stores = { ...(registry?.stores ?? {}) };
|
|
91
|
+
delete stores[id];
|
|
92
|
+
return {
|
|
93
|
+
removed,
|
|
94
|
+
next: {
|
|
95
|
+
version: 1,
|
|
96
|
+
stores: Object.fromEntries(Object.entries(stores).sort(([leftId], [rightId]) => leftId.localeCompare(rightId))),
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function ensureStoreMetadata(storeRoot, id, options) {
|
|
101
|
+
const metadata = await readOptionalStoreMetadataState(storeRoot);
|
|
102
|
+
if (!metadata) {
|
|
103
|
+
if (!options.writeIfMissing) {
|
|
104
|
+
throw new StoreError(`Registered store '${id}' is missing metadata at ${getStoreMetadataPath(storeRoot)}`, 'store_metadata_missing', {
|
|
105
|
+
target: 'store.metadata',
|
|
106
|
+
fix: `Create ${getStoreMetadataPath(storeRoot)} or rerun "openspec store register <path>".`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
await writeStoreMetadataState(storeRoot, {
|
|
110
|
+
version: 1,
|
|
111
|
+
id,
|
|
112
|
+
});
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
if (metadata.id !== id) {
|
|
116
|
+
throw new StoreError(`Store metadata id '${metadata.id}' does not match registered id '${id}'`, 'store_metadata_id_mismatch', {
|
|
117
|
+
target: 'store.metadata',
|
|
118
|
+
fix: 'Repair the local registry or store metadata so the ids match.',
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
export async function commitStoreRegistration(input) {
|
|
124
|
+
const id = validateStoreId(input.id);
|
|
125
|
+
const backend = input.backend;
|
|
126
|
+
const storeRoot = getStoreRootForBackend(backend);
|
|
127
|
+
let metadataCreated = false;
|
|
128
|
+
let isRerun = false;
|
|
129
|
+
let registryUpdated = false;
|
|
130
|
+
try {
|
|
131
|
+
metadataCreated = await ensureStoreMetadata(storeRoot, id, {
|
|
132
|
+
writeIfMissing: input.writeMetadataIfMissing,
|
|
133
|
+
});
|
|
134
|
+
const registry = await readStoreRegistryState({
|
|
135
|
+
globalDataDir: input.globalDataDir,
|
|
136
|
+
});
|
|
137
|
+
const existing = registry?.stores[id];
|
|
138
|
+
const existingBackend = existing?.backend;
|
|
139
|
+
// Same checkout = a rerun for an already-registered store (the 1.3
|
|
140
|
+
// reporting contract), whether or not the observed remote changed;
|
|
141
|
+
// only a remote change needs the registry write (the refresh).
|
|
142
|
+
isRerun = existingBackend !== undefined && sameCheckout(existingBackend, backend);
|
|
143
|
+
const upToDate = isRerun && existingBackend !== undefined && storeBackendsMatch(existingBackend, backend);
|
|
144
|
+
if (!upToDate) {
|
|
145
|
+
await updateStoreRegistryState((registry) => withRegisteredStore(registry, id, backend), { globalDataDir: input.globalDataDir });
|
|
146
|
+
registryUpdated = true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (metadataCreated) {
|
|
151
|
+
// A concurrent registration may have read our metadata as
|
|
152
|
+
// pre-existing and committed against it - never delete metadata a
|
|
153
|
+
// committed registry entry depends on.
|
|
154
|
+
const current = await readStoreRegistryState({
|
|
155
|
+
globalDataDir: input.globalDataDir,
|
|
156
|
+
}).catch(() => null);
|
|
157
|
+
if (!current?.stores[id]) {
|
|
158
|
+
await fs.rm(getStoreMetadataPath(storeRoot), { force: true });
|
|
159
|
+
await fs.rmdir(getStoreMetadataDir(storeRoot)).catch(() => undefined);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
id,
|
|
166
|
+
storeRoot,
|
|
167
|
+
backend,
|
|
168
|
+
metadataCreated,
|
|
169
|
+
registryUpdated,
|
|
170
|
+
alreadyRegistered: isRerun,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export async function registerStore(input) {
|
|
174
|
+
const id = validateStoreId(input.id);
|
|
175
|
+
const backend = await resolveGitStoreBackendConfig({
|
|
176
|
+
localPath: input.localPath,
|
|
177
|
+
...(input.remote !== undefined ? { remote: input.remote } : {}),
|
|
178
|
+
...(input.branch !== undefined ? { branch: input.branch } : {}),
|
|
179
|
+
}, input.cwd);
|
|
180
|
+
const storeRoot = getStoreRootForBackend(backend);
|
|
181
|
+
const committed = await commitStoreRegistration({
|
|
182
|
+
id,
|
|
183
|
+
backend,
|
|
184
|
+
writeMetadataIfMissing: true,
|
|
185
|
+
...(input.globalDataDir ? { globalDataDir: input.globalDataDir } : {}),
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
id: committed.id,
|
|
189
|
+
storeRoot: committed.storeRoot,
|
|
190
|
+
backend: committed.backend,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* One registry read serving every consumer in a command.
|
|
195
|
+
*/
|
|
196
|
+
export async function readRegistrySnapshot(options = {}) {
|
|
197
|
+
try {
|
|
198
|
+
const registry = await readStoreRegistryState(options);
|
|
199
|
+
return {
|
|
200
|
+
entries: registry ? listStoreRegistryEntries(registry) : [],
|
|
201
|
+
unreadable: false,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return { entries: null, unreadable: true };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export async function listRegisteredStores(options = {}) {
|
|
209
|
+
const registry = await readStoreRegistryState(options);
|
|
210
|
+
if (!registry) {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
return listStoreRegistryEntries(registry).map((entry) => ({
|
|
214
|
+
...entry,
|
|
215
|
+
storeRoot: getStoreRootForBackend(entry.backend),
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
export async function getRegisteredStore(input) {
|
|
219
|
+
const id = validateStoreId(input.id);
|
|
220
|
+
const registry = await readStoreRegistryState({
|
|
221
|
+
globalDataDir: input.globalDataDir,
|
|
222
|
+
});
|
|
223
|
+
const entry = getRegisteredStoreOrThrow(registry, id);
|
|
224
|
+
assertExpectedRegisteredBackend(id, entry.backend, input.expectedBackend);
|
|
225
|
+
return {
|
|
226
|
+
...entry,
|
|
227
|
+
storeRoot: getStoreRootForBackend(entry.backend),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
export async function unregisterStoreRegistration(input) {
|
|
231
|
+
const id = validateStoreId(input.id);
|
|
232
|
+
let removed;
|
|
233
|
+
await updateStoreRegistryState(async (registry) => {
|
|
234
|
+
const result = withoutRegisteredStore(registry, id, input.expectedBackend);
|
|
235
|
+
const removedEntry = {
|
|
236
|
+
...result.removed,
|
|
237
|
+
storeRoot: getStoreRootForBackend(result.removed.backend),
|
|
238
|
+
};
|
|
239
|
+
await input.beforeCommit?.(removedEntry);
|
|
240
|
+
removed = result.removed;
|
|
241
|
+
return result.next;
|
|
242
|
+
}, { globalDataDir: input.globalDataDir });
|
|
243
|
+
if (!removed) {
|
|
244
|
+
throw new StoreError(`Unknown store '${id}'`, 'store_not_found', {
|
|
245
|
+
target: 'store.id',
|
|
246
|
+
fix: 'Run openspec store list to see registered stores.',
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
...removed,
|
|
251
|
+
storeRoot: getStoreRootForBackend(removed.backend),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
export async function resolveRegisteredStore(input) {
|
|
255
|
+
const id = validateStoreId(input.id);
|
|
256
|
+
const registry = await readStoreRegistryState({
|
|
257
|
+
globalDataDir: input.globalDataDir,
|
|
258
|
+
});
|
|
259
|
+
if (!registry) {
|
|
260
|
+
throw new StoreError('No store registry found', 'no_store_registry', {
|
|
261
|
+
target: 'store.id',
|
|
262
|
+
fix: 'Register a store with openspec store register <path>, then select it with --store <id>.',
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
const entry = getRegisteredStoreOrThrow(registry, id);
|
|
266
|
+
const backend = entry.backend;
|
|
267
|
+
const storeRoot = getStoreRootForBackend(backend);
|
|
268
|
+
await ensureStoreMetadata(storeRoot, id, { writeIfMissing: false });
|
|
269
|
+
return {
|
|
270
|
+
id,
|
|
271
|
+
storeRoot,
|
|
272
|
+
backend,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template exports for OpenSpec.
|
|
3
|
+
*
|
|
4
|
+
* The old config file templates (AGENTS.md, project.md, claude-template, etc.)
|
|
5
|
+
* have been removed. The skill-based workflow uses skill-templates.ts directly.
|
|
6
|
+
*/
|
|
7
|
+
export * from './skill-templates.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template exports for OpenSpec.
|
|
3
|
+
*
|
|
4
|
+
* The old config file templates (AGENTS.md, project.md, claude-template, etc.)
|
|
5
|
+
* have been removed. The skill-based workflow uses skill-templates.ts directly.
|
|
6
|
+
*/
|
|
7
|
+
// Re-export all skill templates and related types through the compatibility facade.
|
|
8
|
+
export * from './skill-templates.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Skill Templates
|
|
3
|
+
*
|
|
4
|
+
* Compatibility facade that re-exports split workflow template modules.
|
|
5
|
+
*/
|
|
6
|
+
export type { SkillTemplate, CommandTemplate } from './types.js';
|
|
7
|
+
export { getExploreSkillTemplate, getOpsxExploreCommandTemplate } from './workflows/explore.js';
|
|
8
|
+
export { getNewChangeSkillTemplate, getOpsxNewCommandTemplate } from './workflows/new-change.js';
|
|
9
|
+
export { getContinueChangeSkillTemplate, getOpsxContinueCommandTemplate } from './workflows/continue-change.js';
|
|
10
|
+
export { getApplyChangeSkillTemplate, getOpsxApplyCommandTemplate } from './workflows/apply-change.js';
|
|
11
|
+
export { getFfChangeSkillTemplate, getOpsxFfCommandTemplate } from './workflows/ff-change.js';
|
|
12
|
+
export { getSyncSpecsSkillTemplate, getOpsxSyncCommandTemplate } from './workflows/sync-specs.js';
|
|
13
|
+
export { getArchiveChangeSkillTemplate, getOpsxArchiveCommandTemplate } from './workflows/archive-change.js';
|
|
14
|
+
export { getBulkArchiveChangeSkillTemplate, getOpsxBulkArchiveCommandTemplate } from './workflows/bulk-archive-change.js';
|
|
15
|
+
export { getVerifyChangeSkillTemplate, getOpsxVerifyCommandTemplate } from './workflows/verify-change.js';
|
|
16
|
+
export { getOnboardSkillTemplate, getOpsxOnboardCommandTemplate } from './workflows/onboard.js';
|
|
17
|
+
export { getOpsxProposeSkillTemplate, getOpsxProposeCommandTemplate } from './workflows/propose.js';
|
|
18
|
+
export { getFeedbackSkillTemplate } from './workflows/feedback.js';
|
|
19
|
+
//# sourceMappingURL=skill-templates.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Skill Templates
|
|
3
|
+
*
|
|
4
|
+
* Compatibility facade that re-exports split workflow template modules.
|
|
5
|
+
*/
|
|
6
|
+
export { getExploreSkillTemplate, getOpsxExploreCommandTemplate } from './workflows/explore.js';
|
|
7
|
+
export { getNewChangeSkillTemplate, getOpsxNewCommandTemplate } from './workflows/new-change.js';
|
|
8
|
+
export { getContinueChangeSkillTemplate, getOpsxContinueCommandTemplate } from './workflows/continue-change.js';
|
|
9
|
+
export { getApplyChangeSkillTemplate, getOpsxApplyCommandTemplate } from './workflows/apply-change.js';
|
|
10
|
+
export { getFfChangeSkillTemplate, getOpsxFfCommandTemplate } from './workflows/ff-change.js';
|
|
11
|
+
export { getSyncSpecsSkillTemplate, getOpsxSyncCommandTemplate } from './workflows/sync-specs.js';
|
|
12
|
+
export { getArchiveChangeSkillTemplate, getOpsxArchiveCommandTemplate } from './workflows/archive-change.js';
|
|
13
|
+
export { getBulkArchiveChangeSkillTemplate, getOpsxBulkArchiveCommandTemplate } from './workflows/bulk-archive-change.js';
|
|
14
|
+
export { getVerifyChangeSkillTemplate, getOpsxVerifyCommandTemplate } from './workflows/verify-change.js';
|
|
15
|
+
export { getOnboardSkillTemplate, getOpsxOnboardCommandTemplate } from './workflows/onboard.js';
|
|
16
|
+
export { getOpsxProposeSkillTemplate, getOpsxProposeCommandTemplate } from './workflows/propose.js';
|
|
17
|
+
export { getFeedbackSkillTemplate } from './workflows/feedback.js';
|
|
18
|
+
//# sourceMappingURL=skill-templates.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core template types for skills and slash commands.
|
|
3
|
+
*/
|
|
4
|
+
export interface SkillTemplate {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
instructions: string;
|
|
8
|
+
license?: string;
|
|
9
|
+
compatibility?: string;
|
|
10
|
+
metadata?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface CommandTemplate {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
category: string;
|
|
16
|
+
tags: string[];
|
|
17
|
+
content: string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Template Workflow Modules
|
|
3
|
+
*
|
|
4
|
+
* This file is generated by splitting the legacy monolithic
|
|
5
|
+
* templates file into workflow-focused modules.
|
|
6
|
+
*/
|
|
7
|
+
import type { SkillTemplate, CommandTemplate } from '../types.js';
|
|
8
|
+
export declare function getApplyChangeSkillTemplate(): SkillTemplate;
|
|
9
|
+
export declare function getOpsxApplyCommandTemplate(): CommandTemplate;
|
|
10
|
+
//# sourceMappingURL=apply-change.d.ts.map
|