@codewalla_india/openspec 1.3.1 → 1.3.2
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 -22
- package/README.md +272 -191
- package/bin/openspec.js +5 -5
- package/dist/cli/index.js +99 -62
- package/dist/commands/change.d.ts +0 -2
- package/dist/commands/change.js +107 -86
- package/dist/commands/config.js +14 -16
- package/dist/commands/doctor.js +9 -4
- package/dist/commands/feedback.js +79 -30
- package/dist/commands/modify.d.ts +26 -0
- package/dist/commands/modify.js +147 -0
- package/dist/commands/schema.js +170 -91
- package/dist/commands/show.js +5 -2
- package/dist/commands/spec.js +49 -29
- package/dist/commands/store.js +15 -21
- package/dist/commands/validate.d.ts +8 -0
- package/dist/commands/validate.js +43 -20
- package/dist/commands/workflow/index.d.ts +2 -2
- package/dist/commands/workflow/index.js +1 -1
- package/dist/commands/workflow/instructions.d.ts +6 -26
- package/dist/commands/workflow/instructions.js +183 -376
- package/dist/commands/workflow/new-change.d.ts +0 -4
- package/dist/commands/workflow/new-change.js +10 -28
- package/dist/commands/workflow/shared.d.ts +34 -19
- package/dist/commands/workflow/shared.js +34 -4
- package/dist/commands/workflow/status.js +10 -32
- package/dist/commands/workflow/templates.js +15 -5
- package/dist/commands/workset.d.ts +2 -2
- package/dist/commands/workset.js +19 -22
- package/dist/comprehension-quiz/fingerprint.d.ts +39 -0
- package/dist/comprehension-quiz/fingerprint.js +84 -0
- package/dist/comprehension-quiz/index.d.ts +42 -0
- package/dist/comprehension-quiz/index.js +47 -0
- package/dist/comprehension-quiz/pass-record.d.ts +44 -0
- package/dist/comprehension-quiz/pass-record.js +98 -0
- package/dist/comprehension-quiz/providers/anthropic.d.ts +34 -0
- package/dist/comprehension-quiz/providers/anthropic.js +53 -0
- package/dist/comprehension-quiz/providers/factory.d.ts +44 -0
- package/dist/comprehension-quiz/providers/factory.js +174 -0
- package/dist/comprehension-quiz/providers/interface.d.ts +59 -0
- package/dist/comprehension-quiz/providers/interface.js +63 -0
- package/dist/comprehension-quiz/providers/local.d.ts +34 -0
- package/dist/comprehension-quiz/providers/local.js +53 -0
- package/dist/comprehension-quiz/providers/ollama.d.ts +34 -0
- package/dist/comprehension-quiz/providers/ollama.js +53 -0
- package/dist/comprehension-quiz/providers/openai.d.ts +34 -0
- package/dist/comprehension-quiz/providers/openai.js +53 -0
- package/dist/comprehension-quiz/question-generator.d.ts +69 -0
- package/dist/comprehension-quiz/question-generator.js +141 -0
- package/dist/comprehension-quiz/quiz-executor.d.ts +70 -0
- package/dist/comprehension-quiz/quiz-executor.js +165 -0
- package/dist/comprehension-quiz/types.d.ts +115 -0
- package/dist/comprehension-quiz/types.js +11 -0
- package/dist/core/archive.d.ts +14 -1
- package/dist/core/archive.js +1350 -190
- package/dist/core/artifact-graph/graph.d.ts +28 -9
- package/dist/core/artifact-graph/graph.js +94 -43
- package/dist/core/artifact-graph/index.d.ts +1 -1
- package/dist/core/artifact-graph/index.js +1 -1
- package/dist/core/artifact-graph/instruction-loader.d.ts +30 -3
- package/dist/core/artifact-graph/instruction-loader.js +70 -12
- package/dist/core/artifact-graph/outputs.d.ts +1 -0
- package/dist/core/artifact-graph/outputs.js +67 -5
- package/dist/core/artifact-graph/resolver.d.ts +14 -0
- package/dist/core/artifact-graph/resolver.js +69 -15
- package/dist/core/artifact-graph/types.js +21 -3
- package/dist/core/available-tools.d.ts +2 -2
- package/dist/core/available-tools.js +14 -3
- package/dist/core/change-metadata/schema.d.ts +2 -0
- package/dist/core/change-metadata/schema.js +13 -0
- package/dist/core/change-status-policy.d.ts +10 -1
- package/dist/core/change-status-policy.js +30 -2
- package/dist/core/command-generation/adapters/amazon-q.d.ts +4 -0
- package/dist/core/command-generation/adapters/amazon-q.js +11 -5
- package/dist/core/command-generation/adapters/antigravity.js +6 -5
- package/dist/core/command-generation/adapters/auggie.js +7 -6
- package/dist/core/command-generation/adapters/bob.d.ts +5 -1
- package/dist/core/command-generation/adapters/bob.js +11 -10
- package/dist/core/command-generation/adapters/claude.d.ts +1 -1
- package/dist/core/command-generation/adapters/claude.js +12 -17
- package/dist/core/command-generation/adapters/cline.js +5 -5
- package/dist/core/command-generation/adapters/codebuddy.js +8 -7
- package/dist/core/command-generation/adapters/continue.js +8 -7
- package/dist/core/command-generation/adapters/costrict.js +7 -6
- package/dist/core/command-generation/adapters/crush.js +9 -9
- package/dist/core/command-generation/adapters/cursor.js +8 -8
- package/dist/core/command-generation/adapters/devin.d.ts +19 -0
- package/dist/core/command-generation/adapters/devin.js +36 -0
- package/dist/core/command-generation/adapters/factory.js +7 -6
- package/dist/core/command-generation/adapters/gemini.js +40 -5
- package/dist/core/command-generation/adapters/github-copilot.js +6 -5
- package/dist/core/command-generation/adapters/iflow.js +9 -8
- package/dist/core/command-generation/adapters/index.d.ts +4 -2
- package/dist/core/command-generation/adapters/index.js +4 -2
- package/dist/core/command-generation/adapters/junie.js +6 -5
- package/dist/core/command-generation/adapters/kilocode.js +1 -1
- package/dist/core/command-generation/adapters/kiro.js +6 -5
- package/dist/core/command-generation/adapters/lingma.js +9 -9
- package/dist/core/command-generation/adapters/oh-my-pi.d.ts +21 -0
- package/dist/core/command-generation/adapters/oh-my-pi.js +42 -0
- package/dist/core/command-generation/adapters/opencode.js +6 -8
- package/dist/core/command-generation/adapters/pi.d.ts +2 -2
- package/dist/core/command-generation/adapters/pi.js +7 -10
- package/dist/core/command-generation/adapters/qoder.js +9 -9
- package/dist/core/command-generation/adapters/qwen.d.ts +7 -3
- package/dist/core/command-generation/adapters/qwen.js +14 -9
- package/dist/core/command-generation/adapters/roocode.d.ts +4 -4
- package/dist/core/command-generation/adapters/roocode.js +9 -9
- package/dist/core/command-generation/adapters/trae.d.ts +13 -0
- package/dist/core/command-generation/adapters/trae.js +28 -0
- package/dist/core/command-generation/adapters/zcode.d.ts +16 -0
- package/dist/core/command-generation/adapters/zcode.js +33 -0
- package/dist/core/command-generation/generator.d.ts +8 -0
- package/dist/core/command-generation/generator.js +15 -1
- package/dist/core/command-generation/index.d.ts +1 -1
- package/dist/core/command-generation/index.js +1 -1
- package/dist/core/command-generation/invocation.d.ts +73 -0
- package/dist/core/command-generation/invocation.js +77 -0
- package/dist/core/command-generation/registry.js +8 -4
- package/dist/core/command-generation/types.d.ts +9 -2
- package/dist/core/command-generation/yaml.d.ts +20 -6
- package/dist/core/command-generation/yaml.js +31 -21
- package/dist/core/command-surface.d.ts +15 -0
- package/dist/core/command-surface.js +33 -0
- package/dist/core/completions/command-registry.js +16 -61
- package/dist/core/completions/generators/bash-generator.js +41 -41
- package/dist/core/completions/generators/fish-generator.js +7 -7
- package/dist/core/completions/generators/powershell-generator.js +44 -37
- package/dist/core/completions/generators/zsh-generator.js +33 -33
- package/dist/core/completions/installers/zsh-installer.d.ts +9 -0
- package/dist/core/completions/installers/zsh-installer.js +20 -4
- package/dist/core/completions/templates/bash-templates.js +24 -24
- package/dist/core/completions/templates/fish-templates.js +38 -38
- package/dist/core/completions/templates/powershell-templates.js +28 -28
- package/dist/core/completions/templates/zsh-templates.js +39 -39
- package/dist/core/config-prompts.d.ts +1 -1
- package/dist/core/config-prompts.js +14 -1
- package/dist/core/config-schema.d.ts +10 -1
- package/dist/core/config-schema.js +67 -1
- package/dist/core/config.d.ts +15 -0
- package/dist/core/config.js +46 -5
- package/dist/core/file-state.js +56 -24
- package/dist/core/github-copilot/cloud-agent.d.ts +95 -0
- package/dist/core/github-copilot/cloud-agent.js +497 -0
- package/dist/core/global-config.d.ts +16 -0
- package/dist/core/init.d.ts +58 -0
- package/dist/core/init.js +474 -73
- package/dist/core/legacy-cleanup.d.ts +59 -0
- package/dist/core/legacy-cleanup.js +253 -24
- package/dist/core/list.js +23 -16
- package/dist/core/migration.d.ts +73 -1
- package/dist/core/migration.js +360 -11
- package/dist/core/modify/conflict-detector.d.ts +26 -0
- package/dist/core/modify/conflict-detector.js +62 -0
- package/dist/core/modify/dependency-propagator.d.ts +38 -0
- package/dist/core/modify/dependency-propagator.js +103 -0
- package/dist/core/modify/history-tracker.d.ts +34 -0
- package/dist/core/modify/history-tracker.js +114 -0
- package/dist/core/modify/index.d.ts +7 -0
- package/dist/core/modify/index.js +7 -0
- package/dist/core/onboarding-commands.d.ts +30 -0
- package/dist/core/onboarding-commands.js +38 -0
- package/dist/core/openspec-root.js +18 -15
- package/dist/core/parsers/change-parser.d.ts +17 -2
- package/dist/core/parsers/change-parser.js +35 -21
- package/dist/core/parsers/code-fence.d.ts +15 -0
- package/dist/core/parsers/code-fence.js +49 -0
- package/dist/core/parsers/markdown-parser.d.ts +0 -3
- package/dist/core/parsers/markdown-parser.js +7 -60
- package/dist/core/parsers/requirement-blocks.d.ts +29 -0
- package/dist/core/parsers/requirement-blocks.js +150 -31
- package/dist/core/parsers/requirement-text.d.ts +48 -0
- package/dist/core/parsers/requirement-text.js +98 -0
- package/dist/core/parsers/spec-structure.d.ts +1 -1
- package/dist/core/parsers/spec-structure.js +20 -30
- package/dist/core/profile-sync-drift.d.ts +0 -8
- package/dist/core/profile-sync-drift.js +49 -50
- package/dist/core/profiles.d.ts +2 -2
- package/dist/core/profiles.js +2 -2
- package/dist/core/project-config.d.ts +27 -18
- package/dist/core/project-config.js +101 -34
- package/dist/core/references.js +42 -4
- package/dist/core/relationship-health.d.ts +8 -0
- package/dist/core/relationship-health.js +13 -0
- package/dist/core/root-selection.d.ts +9 -6
- package/dist/core/root-selection.js +42 -5
- package/dist/core/schemas/base.schema.js +7 -2
- package/dist/core/shared/allowed-tools.d.ts +12 -0
- package/dist/core/shared/allowed-tools.js +12 -0
- package/dist/core/shared/index.d.ts +1 -0
- package/dist/core/shared/index.js +1 -0
- package/dist/core/shared/skill-content-equivalence.d.ts +7 -0
- package/dist/core/shared/skill-content-equivalence.js +41 -0
- package/dist/core/shared/skill-generation.js +17 -13
- package/dist/core/shared/skill-paths.d.ts +13 -0
- package/dist/core/shared/skill-paths.js +23 -0
- package/dist/core/shared/tool-detection.d.ts +27 -7
- package/dist/core/shared/tool-detection.js +167 -37
- package/dist/core/shared-skill-target.d.ts +16 -0
- package/dist/core/shared-skill-target.js +156 -0
- package/dist/core/specs-apply.d.ts +80 -33
- package/dist/core/specs-apply.js +667 -145
- package/dist/core/store/git.d.ts +13 -0
- package/dist/core/store/git.js +24 -0
- package/dist/core/store/operations.js +20 -0
- package/dist/core/templates/skill-templates.d.ts +3 -2
- package/dist/core/templates/skill-templates.js +3 -2
- package/dist/core/templates/workflows/apply-change.d.ts +10 -0
- package/dist/core/templates/workflows/apply-change.js +186 -224
- package/dist/core/templates/workflows/archive-change.js +387 -260
- package/dist/core/templates/workflows/bulk-archive-change.js +655 -475
- package/dist/core/templates/workflows/continue-change.js +210 -219
- package/dist/core/templates/workflows/explore.js +479 -443
- package/dist/core/templates/workflows/feedback.js +97 -97
- package/dist/core/templates/workflows/ff-change.js +200 -191
- package/dist/core/templates/workflows/modify-change.d.ts +4 -1
- package/dist/core/templates/workflows/modify-change.js +237 -115
- package/dist/core/templates/workflows/new-change.js +127 -134
- package/dist/core/templates/workflows/onboard.js +548 -542
- package/dist/core/templates/workflows/propose.js +273 -217
- package/dist/core/templates/workflows/store-selection.d.ts +1 -1
- package/dist/core/templates/workflows/store-selection.js +1 -1
- package/dist/core/templates/workflows/sync-specs.js +500 -273
- package/dist/core/templates/workflows/update-change.d.ts +10 -0
- package/dist/core/templates/workflows/update-change.js +177 -0
- package/dist/core/templates/workflows/verify-change.js +324 -326
- package/dist/core/update.d.ts +40 -5
- package/dist/core/update.js +411 -96
- package/dist/core/validation/constants.d.ts +4 -1
- package/dist/core/validation/constants.js +4 -1
- package/dist/core/validation/plan-validator.d.ts +8 -0
- package/dist/core/validation/plan-validator.js +45 -0
- package/dist/core/validation/task-numbering.d.ts +16 -0
- package/dist/core/validation/task-numbering.js +57 -0
- package/dist/core/validation/validator.d.ts +27 -3
- package/dist/core/validation/validator.js +337 -48
- package/dist/core/version-check.d.ts +152 -0
- package/dist/core/version-check.js +731 -0
- package/dist/core/view.js +13 -18
- package/dist/prompts/searchable-multi-select.js +1 -1
- package/dist/telemetry/caller-detection.d.ts +27 -0
- package/dist/telemetry/caller-detection.js +85 -0
- package/dist/telemetry/caller-detection.test.d.ts +5 -0
- package/dist/telemetry/config.d.ts +48 -2
- package/dist/telemetry/config.js +113 -11
- package/dist/telemetry/config.test.d.ts +5 -0
- package/dist/telemetry/deduplication.d.ts +35 -0
- package/dist/telemetry/deduplication.js +82 -0
- package/dist/telemetry/deduplication.test.d.ts +5 -0
- package/dist/telemetry/identity.d.ts +62 -22
- package/dist/telemetry/identity.js +147 -102
- package/dist/telemetry/index.d.ts +126 -15
- package/dist/telemetry/index.js +569 -37
- package/dist/telemetry/sanitization.d.ts +40 -0
- package/dist/telemetry/sanitization.js +114 -0
- package/dist/telemetry/sanitization.test.d.ts +5 -0
- package/dist/telemetry/throttling.d.ts +20 -0
- package/dist/telemetry/throttling.js +70 -0
- package/dist/ui/welcome-screen.d.ts +9 -1
- package/dist/ui/welcome-screen.js +91 -38
- package/dist/utils/change-metadata.d.ts +43 -0
- package/dist/utils/change-metadata.js +123 -7
- package/dist/utils/change-utils.d.ts +10 -4
- package/dist/utils/change-utils.js +20 -13
- package/dist/utils/ci.d.ts +12 -0
- package/dist/utils/ci.js +16 -0
- package/dist/utils/command-references.d.ts +92 -6
- package/dist/utils/command-references.js +180 -7
- package/dist/utils/date.d.ts +8 -0
- package/dist/utils/date.js +13 -0
- package/dist/utils/file-system.d.ts +10 -0
- package/dist/utils/file-system.js +70 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/interactive.d.ts +23 -0
- package/dist/utils/interactive.js +32 -0
- package/dist/utils/item-discovery.d.ts +19 -0
- package/dist/utils/item-discovery.js +30 -48
- package/dist/utils/shell-detection.d.ts +1 -1
- package/dist/utils/shell-detection.js +64 -11
- package/dist/utils/spec-discovery.d.ts +40 -0
- package/dist/utils/spec-discovery.js +115 -0
- package/dist/utils/task-progress.d.ts +29 -1
- package/dist/utils/task-progress.js +109 -15
- package/package.json +96 -84
- package/schemas/spec-driven/schema.yaml +252 -184
- package/schemas/spec-driven/templates/design.md +19 -19
- package/schemas/spec-driven/templates/plan-template.md +91 -0
- package/schemas/spec-driven/templates/proposal.md +29 -24
- package/schemas/spec-driven/templates/spec.md +11 -8
- package/schemas/spec-driven/templates/tasks.md +9 -9
- package/scripts/postinstall.js +83 -83
- package/dist/core/command-generation/adapters/codex.d.ts +0 -16
- package/dist/core/command-generation/adapters/codex.js +0 -39
- package/dist/core/command-generation/adapters/windsurf.d.ts +0 -14
- package/dist/core/command-generation/adapters/windsurf.js +0 -38
- package/dist/core/comprehension/config.d.ts +0 -20
- package/dist/core/comprehension/config.js +0 -23
- package/dist/core/comprehension/fingerprint.d.ts +0 -14
- package/dist/core/comprehension/fingerprint.js +0 -33
- package/dist/core/comprehension/index.d.ts +0 -57
- package/dist/core/comprehension/index.js +0 -87
- package/dist/core/comprehension/pass-record.d.ts +0 -29
- package/dist/core/comprehension/pass-record.js +0 -64
- package/dist/core/comprehension/stats.d.ts +0 -35
- package/dist/core/comprehension/stats.js +0 -133
- package/dist/core/templates/workflows/comprehension-guidance.d.ts +0 -9
- package/dist/core/templates/workflows/comprehension-guidance.js +0 -73
- package/dist/core/templates/workflows/mcp-guidance.d.ts +0 -13
- package/dist/core/templates/workflows/mcp-guidance.js +0 -131
- package/dist/core/templates/workflows/user-prompt-guidance.d.ts +0 -16
- package/dist/core/templates/workflows/user-prompt-guidance.js +0 -48
- package/dist/telemetry/caller.d.ts +0 -5
- package/dist/telemetry/caller.js +0 -29
- package/dist/telemetry/client.d.ts +0 -27
- package/dist/telemetry/client.js +0 -127
- package/dist/telemetry/command-context.d.ts +0 -13
- package/dist/telemetry/command-context.js +0 -59
- package/dist/telemetry/comprehension.d.ts +0 -44
- package/dist/telemetry/comprehension.js +0 -105
- package/dist/telemetry/content.d.ts +0 -10
- package/dist/telemetry/content.js +0 -56
- package/dist/telemetry/git-stats.d.ts +0 -12
- package/dist/telemetry/git-stats.js +0 -69
- package/dist/telemetry/identify-cache.d.ts +0 -7
- package/dist/telemetry/identify-cache.js +0 -47
- package/dist/telemetry/input.d.ts +0 -17
- package/dist/telemetry/input.js +0 -68
- package/dist/telemetry/marker.d.ts +0 -37
- package/dist/telemetry/marker.js +0 -67
- package/dist/telemetry/workflow.d.ts +0 -85
- package/dist/telemetry/workflow.js +0 -318
- package/schemas/spec-driven/templates/plan.md +0 -19
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
## Context
|
|
2
|
-
|
|
3
|
-
<!--
|
|
4
|
-
|
|
5
|
-
## Goals / Non-Goals
|
|
6
|
-
|
|
7
|
-
**Goals:**
|
|
8
|
-
<!-- What this design aims to achieve -->
|
|
9
|
-
|
|
10
|
-
**Non-Goals:**
|
|
11
|
-
<!-- What is explicitly out of scope -->
|
|
12
|
-
|
|
13
|
-
## Decisions
|
|
14
|
-
|
|
15
|
-
<!-- Key design decisions
|
|
16
|
-
|
|
17
|
-
## Risks / Trade-offs
|
|
18
|
-
|
|
19
|
-
<!-- Known risks and trade-offs -->
|
|
1
|
+
## Context
|
|
2
|
+
|
|
3
|
+
<!-- Current state and constraints that shape the approach. See proposal.md for motivation - don't restate it -->
|
|
4
|
+
|
|
5
|
+
## Goals / Non-Goals
|
|
6
|
+
|
|
7
|
+
**Goals:**
|
|
8
|
+
<!-- What this design aims to achieve -->
|
|
9
|
+
|
|
10
|
+
**Non-Goals:**
|
|
11
|
+
<!-- What is explicitly out of scope -->
|
|
12
|
+
|
|
13
|
+
## Decisions
|
|
14
|
+
|
|
15
|
+
<!-- Key design decisions with rationale and alternatives considered -->
|
|
16
|
+
|
|
17
|
+
## Risks / Trade-offs
|
|
18
|
+
|
|
19
|
+
<!-- Known risks and trade-offs -->
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
## Code Map
|
|
2
|
+
|
|
3
|
+
<!-- List all files that will be created, modified, or deleted for this change -->
|
|
4
|
+
|
|
5
|
+
### Files to Create
|
|
6
|
+
<!-- List new files to be created with brief descriptions -->
|
|
7
|
+
<!-- Example:
|
|
8
|
+
- `src/core/new-feature.ts` - Core implementation of new feature
|
|
9
|
+
- `src/core/new-feature.test.ts` - Unit tests for new feature
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
### Files to Modify
|
|
13
|
+
<!-- List existing files that will be modified with brief descriptions -->
|
|
14
|
+
<!-- Example:
|
|
15
|
+
- `src/core/index.ts` - Export new feature module
|
|
16
|
+
- `src/cli/commands.ts` - Add CLI command for new feature
|
|
17
|
+
-->
|
|
18
|
+
|
|
19
|
+
### Files to Delete
|
|
20
|
+
<!-- List files that will be removed (if any) -->
|
|
21
|
+
<!-- Example:
|
|
22
|
+
- `src/legacy/old-feature.ts` - Remove deprecated feature
|
|
23
|
+
-->
|
|
24
|
+
|
|
25
|
+
## Implementation Order
|
|
26
|
+
|
|
27
|
+
<!-- Sequence the implementation work at file/module level -->
|
|
28
|
+
<!-- Use numbered steps with file references in parentheses -->
|
|
29
|
+
<!-- Example:
|
|
30
|
+
|
|
31
|
+
1. **Core Implementation** (new-feature.ts)
|
|
32
|
+
- Implement primary data structures
|
|
33
|
+
- Add main function logic
|
|
34
|
+
- Handle edge cases
|
|
35
|
+
|
|
36
|
+
2. **CLI Integration** (commands.ts)
|
|
37
|
+
- Add command registration
|
|
38
|
+
- Implement command handler
|
|
39
|
+
- Add help text
|
|
40
|
+
|
|
41
|
+
3. **Testing** (new-feature.test.ts)
|
|
42
|
+
- Write unit tests
|
|
43
|
+
- Add integration tests
|
|
44
|
+
- Verify coverage
|
|
45
|
+
-->
|
|
46
|
+
|
|
47
|
+
## Test Plan
|
|
48
|
+
|
|
49
|
+
<!-- Describe how to verify the change -->
|
|
50
|
+
<!-- Include test types: unit, integration, e2e, manual -->
|
|
51
|
+
<!-- Example:
|
|
52
|
+
|
|
53
|
+
### Unit Tests
|
|
54
|
+
- Test core function with valid inputs
|
|
55
|
+
- Test error handling for invalid inputs
|
|
56
|
+
- Test edge cases
|
|
57
|
+
|
|
58
|
+
### Integration Tests
|
|
59
|
+
- Test CLI command with real filesystem
|
|
60
|
+
- Test integration with existing modules
|
|
61
|
+
|
|
62
|
+
### Manual Tests
|
|
63
|
+
- Verify CLI command works as expected
|
|
64
|
+
- Check error messages are clear
|
|
65
|
+
-->
|
|
66
|
+
|
|
67
|
+
## Risks
|
|
68
|
+
|
|
69
|
+
<!-- Identify known risks with mitigations -->
|
|
70
|
+
<!-- Format: [Risk] → Mitigation -->
|
|
71
|
+
<!-- Example:
|
|
72
|
+
|
|
73
|
+
**Breaking Change Risk**
|
|
74
|
+
- [Risk] Existing users may rely on old behavior
|
|
75
|
+
- [Mitigation] Provide migration guide, add deprecation warning
|
|
76
|
+
|
|
77
|
+
**Performance Risk**
|
|
78
|
+
- [Risk] New feature may slow down existing operations
|
|
79
|
+
- [Mitigation] Add performance tests, optimize hot paths
|
|
80
|
+
-->
|
|
81
|
+
|
|
82
|
+
## Done Definition
|
|
83
|
+
|
|
84
|
+
<!-- Define objective criteria for completion -->
|
|
85
|
+
<!-- Example:
|
|
86
|
+
- All unit tests passing
|
|
87
|
+
- All integration tests passing
|
|
88
|
+
- Documentation updated
|
|
89
|
+
- Error messages are clear and actionable
|
|
90
|
+
- Performance requirements met
|
|
91
|
+
-->
|
|
@@ -1,24 +1,29 @@
|
|
|
1
|
-
## Why
|
|
2
|
-
|
|
3
|
-
<!-- Explain the motivation for this change. What problem does this solve? Why now? -->
|
|
4
|
-
|
|
5
|
-
## What Changes
|
|
6
|
-
|
|
7
|
-
<!-- Describe what will change. Be specific about new capabilities, modifications, or removals. -->
|
|
8
|
-
|
|
9
|
-
## Capabilities
|
|
10
|
-
|
|
11
|
-
### New Capabilities
|
|
12
|
-
<!-- Capabilities being introduced.
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
## Why
|
|
2
|
+
|
|
3
|
+
<!-- Explain the motivation for this change. What problem does this solve? Why now? -->
|
|
4
|
+
|
|
5
|
+
## What Changes
|
|
6
|
+
|
|
7
|
+
<!-- Describe what will change. Be specific about new capabilities, modifications, or removals. -->
|
|
8
|
+
|
|
9
|
+
## Capabilities
|
|
10
|
+
|
|
11
|
+
### New Capabilities
|
|
12
|
+
<!-- Capabilities being introduced. Use kebab-case for path segments you introduce
|
|
13
|
+
(e.g., user-auth or identity/user-auth) that follow the project's existing
|
|
14
|
+
spec organization. Each creates specs/<capability-path>/spec.md. -->
|
|
15
|
+
- `<capability-path>`: <brief description of what this capability covers>
|
|
16
|
+
|
|
17
|
+
### Modified Capabilities
|
|
18
|
+
<!-- Existing capabilities whose REQUIREMENTS are changing (not just implementation).
|
|
19
|
+
Only list here if spec-level behavior changes. Each needs a delta spec file.
|
|
20
|
+
Use the exact existing path under openspec/specs/. Leave empty if no requirement
|
|
21
|
+
changes. A change with no capabilities at all (pure refactor, tooling, docs)
|
|
22
|
+
must set `skip_specs: true` in its .openspec.yaml - openspec validate rejects
|
|
23
|
+
a zero-delta change without that marker. Do not invent a requirement just to
|
|
24
|
+
satisfy validation. -->
|
|
25
|
+
- `<existing-capability-path>`: <what requirement is changing>
|
|
26
|
+
|
|
27
|
+
## Impact
|
|
28
|
+
|
|
29
|
+
<!-- Affected code, APIs, dependencies, systems -->
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
##
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
## Purpose
|
|
2
|
+
<!-- New capabilities only: one or two sentences (50+ characters) on what this capability is for. Delete this section for an existing capability. -->
|
|
3
|
+
|
|
4
|
+
## ADDED Requirements
|
|
5
|
+
|
|
6
|
+
### Requirement: <!-- requirement name -->
|
|
7
|
+
<!-- requirement text -->
|
|
8
|
+
|
|
9
|
+
#### Scenario: <!-- scenario name -->
|
|
10
|
+
- **WHEN** <!-- condition -->
|
|
11
|
+
- **THEN** <!-- expected outcome -->
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
## 1. <!-- Task Group Name -->
|
|
2
|
-
|
|
3
|
-
- [ ] 1.1 <!-- Task description -->
|
|
4
|
-
- [ ] 1.2 <!-- Task description -->
|
|
5
|
-
|
|
6
|
-
## 2. <!-- Task Group Name -->
|
|
7
|
-
|
|
8
|
-
- [ ] 2.1 <!-- Task description -->
|
|
9
|
-
- [ ] 2.2 <!-- Task description -->
|
|
1
|
+
## 1. <!-- Task Group Name -->
|
|
2
|
+
|
|
3
|
+
- [ ] 1.1 <!-- Task description -->
|
|
4
|
+
- [ ] 1.2 <!-- Task description -->
|
|
5
|
+
|
|
6
|
+
## 2. <!-- Task Group Name -->
|
|
7
|
+
|
|
8
|
+
- [ ] 2.1 <!-- Task description -->
|
|
9
|
+
- [ ] 2.2 <!-- Task description -->
|
package/scripts/postinstall.js
CHANGED
|
@@ -1,83 +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
|
-
});
|
|
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
|
+
});
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Codex Command Adapter
|
|
3
|
-
*
|
|
4
|
-
* Formats commands for Codex following its frontmatter specification.
|
|
5
|
-
* Codex custom prompts live in the global home directory (~/.codex/prompts/)
|
|
6
|
-
* and are not shared through the repository. The CODEX_HOME env var can
|
|
7
|
-
* override the default ~/.codex location.
|
|
8
|
-
*/
|
|
9
|
-
import type { ToolCommandAdapter } from '../types.js';
|
|
10
|
-
/**
|
|
11
|
-
* Codex adapter for command generation.
|
|
12
|
-
* File path: <CODEX_HOME>/prompts/opsx-<id>.md (absolute, global)
|
|
13
|
-
* Frontmatter: description, argument-hint
|
|
14
|
-
*/
|
|
15
|
-
export declare const codexAdapter: ToolCommandAdapter;
|
|
16
|
-
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Codex Command Adapter
|
|
3
|
-
*
|
|
4
|
-
* Formats commands for Codex following its frontmatter specification.
|
|
5
|
-
* Codex custom prompts live in the global home directory (~/.codex/prompts/)
|
|
6
|
-
* and are not shared through the repository. The CODEX_HOME env var can
|
|
7
|
-
* override the default ~/.codex location.
|
|
8
|
-
*/
|
|
9
|
-
import os from 'os';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
/**
|
|
12
|
-
* Returns the Codex home directory.
|
|
13
|
-
* Respects the CODEX_HOME env var, defaulting to ~/.codex.
|
|
14
|
-
*/
|
|
15
|
-
function getCodexHome() {
|
|
16
|
-
const envHome = process.env.CODEX_HOME?.trim();
|
|
17
|
-
return path.resolve(envHome ? envHome : path.join(os.homedir(), '.codex'));
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Codex adapter for command generation.
|
|
21
|
-
* File path: <CODEX_HOME>/prompts/opsx-<id>.md (absolute, global)
|
|
22
|
-
* Frontmatter: description, argument-hint
|
|
23
|
-
*/
|
|
24
|
-
export const codexAdapter = {
|
|
25
|
-
toolId: 'codex',
|
|
26
|
-
getFilePath(commandId) {
|
|
27
|
-
return path.join(getCodexHome(), 'prompts', `opsx-${commandId}.md`);
|
|
28
|
-
},
|
|
29
|
-
formatFile(content) {
|
|
30
|
-
return `---
|
|
31
|
-
description: ${content.description}
|
|
32
|
-
argument-hint: command arguments
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
${content.body}
|
|
36
|
-
`;
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=codex.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Windsurf Command Adapter
|
|
3
|
-
*
|
|
4
|
-
* Formats commands for Windsurf following its frontmatter specification.
|
|
5
|
-
* Windsurf uses a similar format to Claude but may have different conventions.
|
|
6
|
-
*/
|
|
7
|
-
import type { ToolCommandAdapter } from '../types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Windsurf adapter for command generation.
|
|
10
|
-
* File path: .windsurf/workflows/opsx-<id>.md
|
|
11
|
-
* Frontmatter: name, description, category, tags
|
|
12
|
-
*/
|
|
13
|
-
export declare const windsurfAdapter: ToolCommandAdapter;
|
|
14
|
-
//# sourceMappingURL=windsurf.d.ts.map
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Windsurf Command Adapter
|
|
3
|
-
*
|
|
4
|
-
* Formats commands for Windsurf following its frontmatter specification.
|
|
5
|
-
* Windsurf uses a similar format to Claude but may have different conventions.
|
|
6
|
-
*/
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import { escapeYamlValue } from '../yaml.js';
|
|
9
|
-
/**
|
|
10
|
-
* Formats a tags array as a YAML array with proper escaping.
|
|
11
|
-
*/
|
|
12
|
-
function formatTagsArray(tags) {
|
|
13
|
-
const escapedTags = tags.map((tag) => escapeYamlValue(tag));
|
|
14
|
-
return `[${escapedTags.join(', ')}]`;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Windsurf adapter for command generation.
|
|
18
|
-
* File path: .windsurf/workflows/opsx-<id>.md
|
|
19
|
-
* Frontmatter: name, description, category, tags
|
|
20
|
-
*/
|
|
21
|
-
export const windsurfAdapter = {
|
|
22
|
-
toolId: 'windsurf',
|
|
23
|
-
getFilePath(commandId) {
|
|
24
|
-
return path.join('.windsurf', 'workflows', `opsx-${commandId}.md`);
|
|
25
|
-
},
|
|
26
|
-
formatFile(content) {
|
|
27
|
-
return `---
|
|
28
|
-
name: ${escapeYamlValue(content.name)}
|
|
29
|
-
description: ${escapeYamlValue(content.description)}
|
|
30
|
-
category: ${escapeYamlValue(content.category)}
|
|
31
|
-
tags: ${formatTagsArray(content.tags)}
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
${content.body}
|
|
35
|
-
`;
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=windsurf.js.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ProjectConfig } from '../project-config.js';
|
|
2
|
-
export interface ComprehensionConfig {
|
|
3
|
-
enabled: boolean;
|
|
4
|
-
thresholdPercent: number;
|
|
5
|
-
minQuestions: number;
|
|
6
|
-
maxQuestions: number;
|
|
7
|
-
}
|
|
8
|
-
export declare const DEFAULT_COMPREHENSION_CONFIG: ComprehensionConfig;
|
|
9
|
-
export interface ComprehensionConfigInput {
|
|
10
|
-
enabled?: boolean;
|
|
11
|
-
threshold_percent?: number;
|
|
12
|
-
min_questions?: number;
|
|
13
|
-
max_questions?: number;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Resolve comprehension settings from project config.
|
|
17
|
-
* Defaults apply when config is missing or fields are absent.
|
|
18
|
-
*/
|
|
19
|
-
export declare function resolveComprehensionConfig(projectConfig: ProjectConfig | null | undefined): ComprehensionConfig;
|
|
20
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_COMPREHENSION_CONFIG = {
|
|
2
|
-
enabled: true,
|
|
3
|
-
thresholdPercent: 80,
|
|
4
|
-
minQuestions: 5,
|
|
5
|
-
maxQuestions: 10,
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Resolve comprehension settings from project config.
|
|
9
|
-
* Defaults apply when config is missing or fields are absent.
|
|
10
|
-
*/
|
|
11
|
-
export function resolveComprehensionConfig(projectConfig) {
|
|
12
|
-
const raw = projectConfig?.comprehension;
|
|
13
|
-
if (!raw) {
|
|
14
|
-
return { ...DEFAULT_COMPREHENSION_CONFIG };
|
|
15
|
-
}
|
|
16
|
-
return {
|
|
17
|
-
enabled: raw.enabled ?? DEFAULT_COMPREHENSION_CONFIG.enabled,
|
|
18
|
-
thresholdPercent: raw.thresholdPercent ?? DEFAULT_COMPREHENSION_CONFIG.thresholdPercent,
|
|
19
|
-
minQuestions: raw.minQuestions ?? DEFAULT_COMPREHENSION_CONFIG.minQuestions,
|
|
20
|
-
maxQuestions: raw.maxQuestions ?? DEFAULT_COMPREHENSION_CONFIG.maxQuestions,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface ApplyArtifactFingerprintInput {
|
|
2
|
-
specPaths: string[];
|
|
3
|
-
tasksPath?: string | null;
|
|
4
|
-
planPath?: string | null;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* SHA-256 fingerprint of delta specs and optional plan/tasks file contents.
|
|
8
|
-
*/
|
|
9
|
-
export declare function fingerprintApplyArtifacts(input: ApplyArtifactFingerprintInput): string;
|
|
10
|
-
/**
|
|
11
|
-
* @deprecated Use fingerprintApplyArtifacts
|
|
12
|
-
*/
|
|
13
|
-
export declare function fingerprintSpecFiles(specPaths: string[], tasksPath?: string | null): string;
|
|
14
|
-
//# sourceMappingURL=fingerprint.d.ts.map
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
-
function hashFileContent(hash, label, filePath) {
|
|
4
|
-
hash.update(`${label}:`);
|
|
5
|
-
hash.update(filePath);
|
|
6
|
-
hash.update('\0');
|
|
7
|
-
hash.update(readFileSync(filePath, 'utf-8'));
|
|
8
|
-
hash.update('\0');
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* SHA-256 fingerprint of delta specs and optional plan/tasks file contents.
|
|
12
|
-
*/
|
|
13
|
-
export function fingerprintApplyArtifacts(input) {
|
|
14
|
-
const sorted = [...input.specPaths].sort();
|
|
15
|
-
const hash = createHash('sha256');
|
|
16
|
-
for (const specPath of sorted) {
|
|
17
|
-
hashFileContent(hash, 'spec', specPath);
|
|
18
|
-
}
|
|
19
|
-
if (input.planPath && existsSync(input.planPath)) {
|
|
20
|
-
hashFileContent(hash, 'plan', input.planPath);
|
|
21
|
-
}
|
|
22
|
-
if (input.tasksPath && existsSync(input.tasksPath)) {
|
|
23
|
-
hashFileContent(hash, 'tasks', input.tasksPath);
|
|
24
|
-
}
|
|
25
|
-
return hash.digest('hex');
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @deprecated Use fingerprintApplyArtifacts
|
|
29
|
-
*/
|
|
30
|
-
export function fingerprintSpecFiles(specPaths, tasksPath) {
|
|
31
|
-
return fingerprintApplyArtifacts({ specPaths, tasksPath });
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=fingerprint.js.map
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { ProjectConfig } from '../project-config.js';
|
|
2
|
-
import { type ComprehensionPassRecord } from './pass-record.js';
|
|
3
|
-
import { OPTIONS_PER_QUESTION, type ArtifactPresence, type QuestionAllocation } from './stats.js';
|
|
4
|
-
export { DEFAULT_COMPREHENSION_CONFIG, resolveComprehensionConfig, type ComprehensionConfig, } from './config.js';
|
|
5
|
-
export { fingerprintApplyArtifacts, fingerprintSpecFiles } from './fingerprint.js';
|
|
6
|
-
export { COMPREHENSION_PASS_FILENAME, COMPREHENSION_SESSION_FILENAME, buildPassRecord, deleteSessionRecord, isPassValid, readPassRecord, writePassRecord, type ComprehensionPassRecord, } from './pass-record.js';
|
|
7
|
-
export { computeQuestionAllocation, computeQuestionCount, computeSpecStats, countSpecStats, OPTIONS_PER_QUESTION, type ArtifactPresence, type QuestionAllocation, type QuestionCategory, type SpecStats, } from './stats.js';
|
|
8
|
-
export interface ComprehensionGateInfo {
|
|
9
|
-
required: boolean;
|
|
10
|
-
passed: boolean;
|
|
11
|
-
thresholdPercent: number;
|
|
12
|
-
bestScorePercent?: number;
|
|
13
|
-
questionCount: number;
|
|
14
|
-
questionAllocation: QuestionAllocation;
|
|
15
|
-
optionsPerQuestion: number;
|
|
16
|
-
requirementCount: number;
|
|
17
|
-
scenarioCount: number;
|
|
18
|
-
pendingTaskCount: number;
|
|
19
|
-
attempts?: number;
|
|
20
|
-
}
|
|
21
|
-
export interface ComprehensionGateOptions {
|
|
22
|
-
tasksPath?: string | null;
|
|
23
|
-
planPath?: string | null;
|
|
24
|
-
pendingTaskCount?: number;
|
|
25
|
-
artifactPresence?: ArtifactPresence;
|
|
26
|
-
}
|
|
27
|
-
export interface ComprehensionGateResult {
|
|
28
|
-
active: boolean;
|
|
29
|
-
passed: boolean;
|
|
30
|
-
info?: ComprehensionGateInfo;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Evaluate whether apply is blocked by the comprehension gate.
|
|
34
|
-
*/
|
|
35
|
-
export declare function checkComprehensionGate(changeDir: string, specPaths: string[], projectConfig: ProjectConfig | null | undefined, gateOptions?: ComprehensionGateOptions): ComprehensionGateResult;
|
|
36
|
-
export declare class ComprehensionPassError extends Error {
|
|
37
|
-
readonly score: number;
|
|
38
|
-
readonly threshold: number;
|
|
39
|
-
constructor(message: string, score: number, threshold: number);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Record a comprehension pass after quiz success.
|
|
43
|
-
*/
|
|
44
|
-
export declare function recordComprehensionPass(input: {
|
|
45
|
-
changeDir: string;
|
|
46
|
-
specPaths: string[];
|
|
47
|
-
tasksPath?: string | null;
|
|
48
|
-
planPath?: string | null;
|
|
49
|
-
projectConfig: ProjectConfig | null | undefined;
|
|
50
|
-
scorePercent: number;
|
|
51
|
-
attempt: number;
|
|
52
|
-
questionCount: number;
|
|
53
|
-
pendingTaskCount?: number;
|
|
54
|
-
artifactPresence?: ArtifactPresence;
|
|
55
|
-
}): ComprehensionPassRecord;
|
|
56
|
-
export { OPTIONS_PER_QUESTION as comprehensionOptionsPerQuestion };
|
|
57
|
-
//# sourceMappingURL=index.d.ts.map
|