peaks-loop 4.1.2 → 4.1.4
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/.claude-plugin/marketplace.json +136 -47
- package/CHANGELOG.md +112 -0
- package/README-en.md +1 -1
- package/README.md +1 -1
- package/contracts/readonly-argv-whitelist.json +211 -0
- package/dist/cli/commands/asset-command-shared.d.ts +12 -0
- package/dist/cli/commands/asset-command-shared.js +45 -0
- package/dist/cli/commands/asset-commands.d.ts +6 -1
- package/dist/cli/commands/asset-commands.js +11 -372
- package/dist/cli/commands/asset-crystallize-command.d.ts +3 -0
- package/dist/cli/commands/asset-crystallize-command.js +60 -0
- package/dist/cli/commands/asset-crystallize-payload.d.ts +47 -0
- package/dist/cli/commands/asset-crystallize-payload.js +85 -0
- package/dist/cli/commands/asset-crystallize-runner.d.ts +3 -0
- package/dist/cli/commands/asset-crystallize-runner.js +133 -0
- package/dist/cli/commands/asset-dispose-command.d.ts +3 -0
- package/dist/cli/commands/asset-dispose-command.js +99 -0
- package/dist/cli/commands/asset-status-command.d.ts +3 -0
- package/dist/cli/commands/asset-status-command.js +100 -0
- package/dist/cli/commands/audit-artifact-runners.d.ts +16 -0
- package/dist/cli/commands/audit-artifact-runners.js +170 -0
- package/dist/cli/commands/audit-command-shared.d.ts +97 -0
- package/dist/cli/commands/audit-command-shared.js +60 -0
- package/dist/cli/commands/audit-commands.d.ts +7 -31
- package/dist/cli/commands/audit-commands.js +64 -473
- package/dist/cli/commands/audit-goal-runners.d.ts +17 -0
- package/dist/cli/commands/audit-goal-runners.js +114 -0
- package/dist/cli/commands/audit-red-lines-runners.d.ts +11 -0
- package/dist/cli/commands/audit-red-lines-runners.js +43 -0
- package/dist/cli/commands/audit-refusal-data.d.ts +23 -0
- package/dist/cli/commands/audit-refusal-data.js +69 -0
- package/dist/cli/commands/audit-static-runners.d.ts +13 -0
- package/dist/cli/commands/audit-static-runners.js +139 -0
- package/dist/cli/commands/await-runners.d.ts +11 -0
- package/dist/cli/commands/await-runners.js +148 -0
- package/dist/cli/commands/baseline-audit-command.d.ts +3 -0
- package/dist/cli/commands/baseline-audit-command.js +64 -0
- package/dist/cli/commands/baseline-command-shared.d.ts +23 -0
- package/dist/cli/commands/baseline-command-shared.js +39 -0
- package/dist/cli/commands/baseline-commands.js +33 -313
- package/dist/cli/commands/baseline-freeze-commands.d.ts +4 -0
- package/dist/cli/commands/baseline-freeze-commands.js +81 -0
- package/dist/cli/commands/baseline-guard-command.d.ts +3 -0
- package/dist/cli/commands/baseline-guard-command.js +52 -0
- package/dist/cli/commands/baseline-read-commands.d.ts +5 -0
- package/dist/cli/commands/baseline-read-commands.js +72 -0
- package/dist/cli/commands/baseline-rollback-commands.d.ts +4 -0
- package/dist/cli/commands/baseline-rollback-commands.js +88 -0
- package/dist/cli/commands/classify-downgrade-command.d.ts +9 -0
- package/dist/cli/commands/classify-downgrade-command.js +21 -0
- package/dist/cli/commands/classify-run-command.d.ts +9 -0
- package/dist/cli/commands/classify-run-command.js +73 -0
- package/dist/cli/commands/classify-signals.d.ts +5 -0
- package/dist/cli/commands/classify-signals.js +104 -0
- package/dist/cli/commands/code-auto-compact-command.d.ts +3 -0
- package/dist/cli/commands/code-auto-compact-command.js +124 -0
- package/dist/cli/commands/code-auto-compact-envelope.d.ts +22 -0
- package/dist/cli/commands/code-auto-compact-envelope.js +39 -0
- package/dist/cli/commands/code-context-audit-command.d.ts +3 -0
- package/dist/cli/commands/code-context-audit-command.js +68 -0
- package/dist/cli/commands/code-context-now-command.d.ts +3 -0
- package/dist/cli/commands/code-context-now-command.js +124 -0
- package/dist/cli/commands/code-context-now-envelope.d.ts +66 -0
- package/dist/cli/commands/code-context-now-envelope.js +136 -0
- package/dist/cli/commands/code-context-now-mapping.d.ts +27 -0
- package/dist/cli/commands/code-context-now-mapping.js +43 -0
- package/dist/cli/commands/code-emit-handoff-command.d.ts +3 -0
- package/dist/cli/commands/code-emit-handoff-command.js +136 -0
- package/dist/cli/commands/code-gate-step-08-command.d.ts +3 -0
- package/dist/cli/commands/code-gate-step-08-command.js +155 -0
- package/dist/cli/commands/code-post-compact-detect-command.d.ts +3 -0
- package/dist/cli/commands/code-post-compact-detect-command.js +50 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +9 -43
- package/dist/cli/commands/code-runtime-commands.js +20 -672
- package/dist/cli/commands/code-runtime-session.d.ts +1 -0
- package/dist/cli/commands/code-runtime-session.js +15 -0
- package/dist/cli/commands/codegraph-command-options.d.ts +22 -0
- package/dist/cli/commands/codegraph-command-options.js +22 -0
- package/dist/cli/commands/codegraph-commands.d.ts +2 -2
- package/dist/cli/commands/codegraph-commands.js +14 -397
- package/dist/cli/commands/codegraph-config-restore-command.d.ts +3 -0
- package/dist/cli/commands/codegraph-config-restore-command.js +200 -0
- package/dist/cli/commands/codegraph-proxy-commands.d.ts +10 -0
- package/dist/cli/commands/codegraph-proxy-commands.js +159 -0
- package/dist/cli/commands/codegraph-repair-commands.d.ts +3 -0
- package/dist/cli/commands/codegraph-repair-commands.js +94 -0
- package/dist/cli/commands/codegraph-status-command.d.ts +1 -1
- package/dist/cli/commands/codegraph-status-command.js +27 -214
- package/dist/cli/commands/codegraph-status-integrity.d.ts +44 -0
- package/dist/cli/commands/codegraph-status-integrity.js +121 -0
- package/dist/cli/commands/codegraph-status-json.d.ts +5 -0
- package/dist/cli/commands/codegraph-status-json.js +127 -0
- package/dist/cli/commands/compact-command.d.ts +6 -2
- package/dist/cli/commands/compact-command.js +12 -559
- package/dist/cli/commands/compact-dry-run-command.d.ts +3 -0
- package/dist/cli/commands/compact-dry-run-command.js +87 -0
- package/dist/cli/commands/compact-force-command.d.ts +3 -0
- package/dist/cli/commands/compact-force-command.js +98 -0
- package/dist/cli/commands/compact-harness-window-command.d.ts +3 -0
- package/dist/cli/commands/compact-harness-window-command.js +174 -0
- package/dist/cli/commands/compact-history-command.d.ts +3 -0
- package/dist/cli/commands/compact-history-command.js +89 -0
- package/dist/cli/commands/compact-read-commands.d.ts +3 -0
- package/dist/cli/commands/compact-read-commands.js +123 -0
- package/dist/cli/commands/compact-settle-command.d.ts +3 -0
- package/dist/cli/commands/compact-settle-command.js +130 -0
- package/dist/cli/commands/compact-shared.d.ts +9 -0
- package/dist/cli/commands/compact-shared.js +26 -0
- package/dist/cli/commands/container-command-shared.d.ts +60 -0
- package/dist/cli/commands/container-command-shared.js +52 -0
- package/dist/cli/commands/container-commands.d.ts +1 -1
- package/dist/cli/commands/container-commands.js +4 -216
- package/dist/cli/commands/container-release-command.d.ts +3 -0
- package/dist/cli/commands/container-release-command.js +105 -0
- package/dist/cli/commands/container-spawn-command.d.ts +3 -0
- package/dist/cli/commands/container-spawn-command.js +148 -0
- package/dist/cli/commands/context-check-command.d.ts +3 -0
- package/dist/cli/commands/context-check-command.js +81 -0
- package/dist/cli/commands/context-commands.d.ts +2 -7
- package/dist/cli/commands/context-commands.js +6 -276
- package/dist/cli/commands/context-layer-command.d.ts +3 -0
- package/dist/cli/commands/context-layer-command.js +34 -0
- package/dist/cli/commands/context-layer-fetchers.d.ts +15 -0
- package/dist/cli/commands/context-layer-fetchers.js +162 -0
- package/dist/cli/commands/context-status-command.d.ts +17 -0
- package/dist/cli/commands/context-status-command.js +41 -0
- package/dist/cli/commands/contract-write-command.d.ts +3 -0
- package/dist/cli/commands/contract-write-command.js +144 -0
- package/dist/cli/commands/core/doctor-bindings.d.ts +17 -0
- package/dist/cli/commands/core/doctor-bindings.js +30 -0
- package/dist/cli/commands/core/doctor-command.d.ts +4 -18
- package/dist/cli/commands/core/doctor-command.js +2 -323
- package/dist/cli/commands/core/doctor-logs.d.ts +8 -0
- package/dist/cli/commands/core/doctor-logs.js +32 -0
- package/dist/cli/commands/core/doctor-probes.d.ts +3 -0
- package/dist/cli/commands/core/doctor-probes.js +55 -0
- package/dist/cli/commands/core/doctor-run-command.d.ts +12 -0
- package/dist/cli/commands/core/doctor-run-command.js +172 -0
- package/dist/cli/commands/core/doctor-summary.d.ts +7 -0
- package/dist/cli/commands/core/doctor-summary.js +39 -0
- package/dist/cli/commands/core/memory-command-shared.d.ts +25 -0
- package/dist/cli/commands/core/memory-command-shared.js +20 -0
- package/dist/cli/commands/core/memory-command.d.ts +1 -1
- package/dist/cli/commands/core/memory-command.js +6 -227
- package/dist/cli/commands/core/memory-delegated-verbs.d.ts +4 -0
- package/dist/cli/commands/core/memory-delegated-verbs.js +178 -0
- package/dist/cli/commands/core/memory-extract-command.d.ts +3 -0
- package/dist/cli/commands/core/memory-extract-command.js +90 -0
- package/dist/cli/commands/core/memory-sync-command.d.ts +3 -0
- package/dist/cli/commands/core/memory-sync-command.js +38 -0
- package/dist/cli/commands/core/session-command.d.ts +1 -1
- package/dist/cli/commands/core/session-command.js +12 -206
- package/dist/cli/commands/core/session-info-command.d.ts +3 -0
- package/dist/cli/commands/core/session-info-command.js +142 -0
- package/dist/cli/commands/core/session-verb-commands.d.ts +5 -0
- package/dist/cli/commands/core/session-verb-commands.js +58 -0
- package/dist/cli/commands/core/skill-command.d.ts +1 -44
- package/dist/cli/commands/core/skill-command.js +13 -541
- package/dist/cli/commands/core/skill-context-verdict.d.ts +38 -0
- package/dist/cli/commands/core/skill-context-verdict.js +63 -0
- package/dist/cli/commands/core/skill-generated-config-notice.d.ts +41 -0
- package/dist/cli/commands/core/skill-generated-config-notice.js +75 -0
- package/dist/cli/commands/core/skill-heartbeat-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-heartbeat-commands.js +50 -0
- package/dist/cli/commands/core/skill-presence-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-presence-commands.js +123 -0
- package/dist/cli/commands/core/skill-presence-housekeeping-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-presence-housekeeping-commands.js +165 -0
- package/dist/cli/commands/core/skill-registry-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-registry-commands.js +117 -0
- package/dist/cli/commands/core/skill-runbook-command.d.ts +3 -0
- package/dist/cli/commands/core/skill-runbook-command.js +29 -0
- package/dist/cli/commands/core/standards-command.d.ts +1 -24
- package/dist/cli/commands/core/standards-command.js +33 -201
- package/dist/cli/commands/core/standards-init-command.d.ts +3 -0
- package/dist/cli/commands/core/standards-init-command.js +87 -0
- package/dist/cli/commands/core/standards-lint.d.ts +24 -0
- package/dist/cli/commands/core/standards-lint.js +57 -0
- package/dist/cli/commands/core/standards-migrate-command.d.ts +3 -0
- package/dist/cli/commands/core/standards-migrate-command.js +57 -0
- package/dist/cli/commands/cron-scheduler-commands.d.ts +5 -1
- package/dist/cli/commands/cron-scheduler-commands.js +36 -206
- package/dist/cli/commands/cron-scheduler-run-once-command.d.ts +7 -0
- package/dist/cli/commands/cron-scheduler-run-once-command.js +35 -0
- package/dist/cli/commands/cron-scheduler-shared.d.ts +6 -0
- package/dist/cli/commands/cron-scheduler-shared.js +48 -0
- package/dist/cli/commands/cron-scheduler-start-command.d.ts +7 -0
- package/dist/cli/commands/cron-scheduler-start-command.js +65 -0
- package/dist/cli/commands/cron-scheduler-status-command.d.ts +7 -0
- package/dist/cli/commands/cron-scheduler-status-command.js +46 -0
- package/dist/cli/commands/cron-scheduler-stop-command.d.ts +7 -0
- package/dist/cli/commands/cron-scheduler-stop-command.js +61 -0
- package/dist/cli/commands/dispatch-command-spec.d.ts +2 -0
- package/dist/cli/commands/dispatch-command-spec.js +62 -0
- package/dist/cli/commands/dispatch-commands.js +159 -775
- package/dist/cli/commands/dispatch-dag-envelope.d.ts +41 -0
- package/dist/cli/commands/dispatch-dag-envelope.js +49 -0
- package/dist/cli/commands/dispatch-dag-failure.d.ts +18 -0
- package/dist/cli/commands/dispatch-dag-failure.js +16 -0
- package/dist/cli/commands/dispatch-dag-preflight.d.ts +51 -0
- package/dist/cli/commands/dispatch-dag-preflight.js +105 -0
- package/dist/cli/commands/dispatch-dag-runners.d.ts +48 -0
- package/dist/cli/commands/dispatch-dag-runners.js +73 -0
- package/dist/cli/commands/dispatch-detached-branch.d.ts +3 -0
- package/dist/cli/commands/dispatch-detached-branch.js +58 -0
- package/dist/cli/commands/dispatch-envelope.d.ts +36 -0
- package/dist/cli/commands/dispatch-envelope.js +104 -0
- package/dist/cli/commands/dispatch-from-dag.d.ts +27 -0
- package/dist/cli/commands/dispatch-from-dag.js +87 -257
- package/dist/cli/commands/dispatch-isolation-lease.d.ts +17 -0
- package/dist/cli/commands/dispatch-isolation-lease.js +149 -0
- package/dist/cli/commands/dispatch-preflight.d.ts +7 -0
- package/dist/cli/commands/dispatch-preflight.js +105 -0
- package/dist/cli/commands/dispatch-prompt-blocks.d.ts +10 -0
- package/dist/cli/commands/dispatch-prompt-blocks.js +56 -0
- package/dist/cli/commands/dispatch-prompt-composition.d.ts +30 -0
- package/dist/cli/commands/dispatch-prompt-composition.js +171 -0
- package/dist/cli/commands/dispatch-record-write.d.ts +24 -0
- package/dist/cli/commands/dispatch-record-write.js +96 -0
- package/dist/cli/commands/dispatch-tool-call.d.ts +15 -0
- package/dist/cli/commands/dispatch-tool-call.js +128 -0
- package/dist/cli/commands/evolution-command-shared.d.ts +78 -0
- package/dist/cli/commands/evolution-command-shared.js +107 -0
- package/dist/cli/commands/evolution-commands.d.ts +11 -1
- package/dist/cli/commands/evolution-commands.js +19 -350
- package/dist/cli/commands/evolution-evaluate-command.d.ts +24 -0
- package/dist/cli/commands/evolution-evaluate-command.js +138 -0
- package/dist/cli/commands/evolution-propose-command.d.ts +23 -0
- package/dist/cli/commands/evolution-propose-command.js +145 -0
- package/dist/cli/commands/evolution-status-command.d.ts +17 -0
- package/dist/cli/commands/evolution-status-command.js +41 -0
- package/dist/cli/commands/evolution-verdict-commands.d.ts +30 -0
- package/dist/cli/commands/evolution-verdict-commands.js +100 -0
- package/dist/cli/commands/final-review-command-envelopes.d.ts +44 -0
- package/dist/cli/commands/final-review-command-envelopes.js +100 -0
- package/dist/cli/commands/final-review-command-shared.d.ts +52 -0
- package/dist/cli/commands/final-review-command-shared.js +35 -0
- package/dist/cli/commands/final-review-commands.d.ts +7 -27
- package/dist/cli/commands/final-review-commands.js +13 -240
- package/dist/cli/commands/final-review-prepare-command.d.ts +3 -0
- package/dist/cli/commands/final-review-prepare-command.js +200 -0
- package/dist/cli/commands/finalize-accumulator.d.ts +44 -0
- package/dist/cli/commands/finalize-accumulator.js +55 -0
- package/dist/cli/commands/finalize-branches.d.ts +34 -0
- package/dist/cli/commands/finalize-branches.js +119 -0
- package/dist/cli/commands/finalize-runners.d.ts +3 -0
- package/dist/cli/commands/finalize-runners.js +92 -0
- package/dist/cli/commands/finalize-selection.d.ts +65 -0
- package/dist/cli/commands/finalize-selection.js +35 -0
- package/dist/cli/commands/gate-commands.js +26 -8
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +23 -9
- package/dist/cli/commands/governance-classify-contract-commands.js +26 -269
- package/dist/cli/commands/hooks-command-shared.d.ts +42 -0
- package/dist/cli/commands/hooks-command-shared.js +32 -0
- package/dist/cli/commands/hooks-commands.d.ts +20 -0
- package/dist/cli/commands/hooks-commands.js +75 -309
- package/dist/cli/commands/hooks-install-envelopes.d.ts +6 -0
- package/dist/cli/commands/hooks-install-envelopes.js +144 -0
- package/dist/cli/commands/hooks-status-command.d.ts +3 -0
- package/dist/cli/commands/hooks-status-command.js +93 -0
- package/dist/cli/commands/hooks-uninstall-command.d.ts +3 -0
- package/dist/cli/commands/hooks-uninstall-command.js +43 -0
- package/dist/cli/commands/job-checkpoint-commands.d.ts +3 -0
- package/dist/cli/commands/job-checkpoint-commands.js +157 -0
- package/dist/cli/commands/job-command-shared.d.ts +109 -0
- package/dist/cli/commands/job-command-shared.js +72 -0
- package/dist/cli/commands/job-commands.d.ts +4 -64
- package/dist/cli/commands/job-commands.js +42 -552
- package/dist/cli/commands/job-cost-check-command.d.ts +3 -0
- package/dist/cli/commands/job-cost-check-command.js +41 -0
- package/dist/cli/commands/job-init-status-commands.d.ts +3 -0
- package/dist/cli/commands/job-init-status-commands.js +149 -0
- package/dist/cli/commands/job-run-commands.d.ts +3 -0
- package/dist/cli/commands/job-run-commands.js +97 -0
- package/dist/cli/commands/job-state-root.d.ts +35 -0
- package/dist/cli/commands/job-state-root.js +76 -0
- package/dist/cli/commands/loop-command-shared.d.ts +31 -0
- package/dist/cli/commands/loop-command-shared.js +15 -0
- package/dist/cli/commands/loop-commands.d.ts +12 -17
- package/dist/cli/commands/loop-commands.js +56 -238
- package/dist/cli/commands/loop-eval-capture-index.d.ts +4 -0
- package/dist/cli/commands/loop-eval-capture-index.js +44 -0
- package/dist/cli/commands/loop-eval-commands.d.ts +8 -5
- package/dist/cli/commands/loop-eval-commands.js +12 -626
- package/dist/cli/commands/loop-eval-eval-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-eval-command.js +168 -0
- package/dist/cli/commands/loop-eval-monotonic-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-monotonic-command.js +90 -0
- package/dist/cli/commands/loop-eval-parents.d.ts +7 -0
- package/dist/cli/commands/loop-eval-parents.js +20 -0
- package/dist/cli/commands/loop-eval-run-code.d.ts +7 -0
- package/dist/cli/commands/loop-eval-run-code.js +40 -0
- package/dist/cli/commands/loop-eval-run-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-run-command.js +113 -0
- package/dist/cli/commands/loop-eval-spec-commands.d.ts +3 -0
- package/dist/cli/commands/loop-eval-spec-commands.js +165 -0
- package/dist/cli/commands/loop-eval-spec-lint-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-spec-lint-command.js +42 -0
- package/dist/cli/commands/loop-eval-workflow-commands.d.ts +3 -0
- package/dist/cli/commands/loop-eval-workflow-commands.js +141 -0
- package/dist/cli/commands/loop-export-command.d.ts +3 -0
- package/dist/cli/commands/loop-export-command.js +73 -0
- package/dist/cli/commands/loop-goal-compose-command.d.ts +3 -0
- package/dist/cli/commands/loop-goal-compose-command.js +36 -0
- package/dist/cli/commands/loop-import-command.d.ts +3 -0
- package/dist/cli/commands/loop-import-command.js +86 -0
- package/dist/cli/commands/loop-placeholder-commands.d.ts +3 -0
- package/dist/cli/commands/loop-placeholder-commands.js +52 -0
- package/dist/cli/commands/mcp-commands.d.ts +10 -0
- package/dist/cli/commands/mcp-commands.js +157 -0
- package/dist/cli/commands/memory-command-shared.d.ts +59 -0
- package/dist/cli/commands/memory-command-shared.js +39 -0
- package/dist/cli/commands/memory-commands.d.ts +6 -79
- package/dist/cli/commands/memory-commands.js +19 -309
- package/dist/cli/commands/memory-ingest-command.d.ts +3 -0
- package/dist/cli/commands/memory-ingest-command.js +50 -0
- package/dist/cli/commands/memory-list-command.d.ts +16 -0
- package/dist/cli/commands/memory-list-command.js +129 -0
- package/dist/cli/commands/memory-reindex-command.d.ts +9 -0
- package/dist/cli/commands/memory-reindex-command.js +78 -0
- package/dist/cli/commands/memory-rotate-command.d.ts +3 -0
- package/dist/cli/commands/memory-rotate-command.js +55 -0
- package/dist/cli/commands/memory-search-command.d.ts +7 -0
- package/dist/cli/commands/memory-search-command.js +46 -0
- package/dist/cli/commands/openspec-archive-command.d.ts +3 -0
- package/dist/cli/commands/openspec-archive-command.js +55 -0
- package/dist/cli/commands/openspec-command-shared.d.ts +62 -0
- package/dist/cli/commands/openspec-command-shared.js +135 -0
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +33 -306
- package/dist/cli/commands/openspec-from-doctor-command.d.ts +3 -0
- package/dist/cli/commands/openspec-from-doctor-command.js +66 -0
- package/dist/cli/commands/openspec-init-command.d.ts +3 -0
- package/dist/cli/commands/openspec-init-command.js +49 -0
- package/dist/cli/commands/openspec-list-command.d.ts +3 -0
- package/dist/cli/commands/openspec-list-command.js +27 -0
- package/dist/cli/commands/openspec-render-command.d.ts +3 -0
- package/dist/cli/commands/openspec-render-command.js +33 -0
- package/dist/cli/commands/openspec-show-command.d.ts +3 -0
- package/dist/cli/commands/openspec-show-command.js +33 -0
- package/dist/cli/commands/openspec-to-rd-command.d.ts +3 -0
- package/dist/cli/commands/openspec-to-rd-command.js +33 -0
- package/dist/cli/commands/openspec-validate-command.d.ts +3 -0
- package/dist/cli/commands/openspec-validate-command.js +45 -0
- package/dist/cli/commands/playwright-browser-command.d.ts +8 -0
- package/dist/cli/commands/playwright-browser-command.js +61 -0
- package/dist/cli/commands/playwright-commands.d.ts +10 -62
- package/dist/cli/commands/playwright-commands.js +77 -400
- package/dist/cli/commands/playwright-envelope.d.ts +8 -0
- package/dist/cli/commands/playwright-envelope.js +29 -0
- package/dist/cli/commands/playwright-ls-stop-commands.d.ts +4 -0
- package/dist/cli/commands/playwright-ls-stop-commands.js +74 -0
- package/dist/cli/commands/playwright-session-store.d.ts +65 -0
- package/dist/cli/commands/playwright-session-store.js +189 -0
- package/dist/cli/commands/project-commands.d.ts +19 -0
- package/dist/cli/commands/project-commands.js +98 -259
- package/dist/cli/commands/project-context-command.d.ts +3 -0
- package/dist/cli/commands/project-context-command.js +44 -0
- package/dist/cli/commands/project-dashboard-command.d.ts +3 -0
- package/dist/cli/commands/project-dashboard-command.js +74 -0
- package/dist/cli/commands/project-knowledge-command.d.ts +3 -0
- package/dist/cli/commands/project-knowledge-command.js +48 -0
- package/dist/cli/commands/project-memories-show-command.d.ts +3 -0
- package/dist/cli/commands/project-memories-show-command.js +87 -0
- package/dist/cli/commands/project-memory-index-command.d.ts +3 -0
- package/dist/cli/commands/project-memory-index-command.js +31 -0
- package/dist/cli/commands/qa-archive-screenshots-command.d.ts +3 -0
- package/dist/cli/commands/qa-archive-screenshots-command.js +53 -0
- package/dist/cli/commands/qa-commands.d.ts +14 -87
- package/dist/cli/commands/qa-commands.js +17 -315
- package/dist/cli/commands/qa-context-prestep.d.ts +1 -0
- package/dist/cli/commands/qa-context-prestep.js +34 -0
- package/dist/cli/commands/qa-run-command.d.ts +3 -0
- package/dist/cli/commands/qa-run-command.js +105 -0
- package/dist/cli/commands/qa-run-options.d.ts +23 -0
- package/dist/cli/commands/qa-run-options.js +31 -0
- package/dist/cli/commands/qa-run-slice.d.ts +41 -0
- package/dist/cli/commands/qa-run-slice.js +145 -0
- package/dist/cli/commands/release-canary-command.d.ts +28 -0
- package/dist/cli/commands/release-canary-command.js +129 -0
- package/dist/cli/commands/release-command-shared.d.ts +13 -0
- package/dist/cli/commands/release-command-shared.js +18 -0
- package/dist/cli/commands/release-commands.d.ts +10 -18
- package/dist/cli/commands/release-commands.js +25 -298
- package/dist/cli/commands/release-done-command.d.ts +3 -0
- package/dist/cli/commands/release-done-command.js +64 -0
- package/dist/cli/commands/release-hotfix-command.d.ts +3 -0
- package/dist/cli/commands/release-hotfix-command.js +50 -0
- package/dist/cli/commands/release-plan-command.d.ts +3 -0
- package/dist/cli/commands/release-plan-command.js +33 -0
- package/dist/cli/commands/release-precheck-command.d.ts +3 -0
- package/dist/cli/commands/release-precheck-command.js +28 -0
- package/dist/cli/commands/release-promote-command.d.ts +3 -0
- package/dist/cli/commands/release-promote-command.js +34 -0
- package/dist/cli/commands/release-rollback-command.d.ts +3 -0
- package/dist/cli/commands/release-rollback-command.js +33 -0
- package/dist/cli/commands/release-watch-command.d.ts +3 -0
- package/dist/cli/commands/release-watch-command.js +44 -0
- package/dist/cli/commands/request-command-options.d.ts +49 -0
- package/dist/cli/commands/request-command-options.js +1 -0
- package/dist/cli/commands/request-commands.d.ts +3 -9
- package/dist/cli/commands/request-commands.js +17 -522
- package/dist/cli/commands/request-init-command.d.ts +3 -0
- package/dist/cli/commands/request-init-command.js +100 -0
- package/dist/cli/commands/request-lint-command.d.ts +3 -0
- package/dist/cli/commands/request-lint-command.js +50 -0
- package/dist/cli/commands/request-list-command.d.ts +10 -0
- package/dist/cli/commands/request-list-command.js +53 -0
- package/dist/cli/commands/request-repair-status-command.d.ts +3 -0
- package/dist/cli/commands/request-repair-status-command.js +61 -0
- package/dist/cli/commands/request-show-command.d.ts +3 -0
- package/dist/cli/commands/request-show-command.js +56 -0
- package/dist/cli/commands/request-transition-command.d.ts +3 -0
- package/dist/cli/commands/request-transition-command.js +122 -0
- package/dist/cli/commands/request-transition-failures.d.ts +8 -0
- package/dist/cli/commands/request-transition-failures.js +90 -0
- package/dist/cli/commands/request-transition-hooks.d.ts +50 -0
- package/dist/cli/commands/request-transition-hooks.js +115 -0
- package/dist/cli/commands/request-transition-preflight.d.ts +10 -0
- package/dist/cli/commands/request-transition-preflight.js +107 -0
- package/dist/cli/commands/scan-command-shared.d.ts +96 -0
- package/dist/cli/commands/scan-command-shared.js +83 -0
- package/dist/cli/commands/scan-commands.d.ts +3 -2
- package/dist/cli/commands/scan-commands.js +23 -463
- package/dist/cli/commands/scan-inventory-commands.d.ts +3 -0
- package/dist/cli/commands/scan-inventory-commands.js +96 -0
- package/dist/cli/commands/scan-project-commands.d.ts +3 -0
- package/dist/cli/commands/scan-project-commands.js +65 -0
- package/dist/cli/commands/scan-scope-commands.d.ts +3 -0
- package/dist/cli/commands/scan-scope-commands.js +149 -0
- package/dist/cli/commands/scan-scope-helpers.d.ts +8 -0
- package/dist/cli/commands/scan-scope-helpers.js +54 -0
- package/dist/cli/commands/scan-structural-commands.d.ts +3 -0
- package/dist/cli/commands/scan-structural-commands.js +113 -0
- package/dist/cli/commands/sediment-argv-flags.d.ts +54 -0
- package/dist/cli/commands/sediment-argv-flags.js +116 -0
- package/dist/cli/commands/sediment-command-shared.d.ts +15 -0
- package/dist/cli/commands/sediment-command-shared.js +5 -0
- package/dist/cli/commands/sediment-commands.d.ts +35 -59
- package/dist/cli/commands/sediment-commands.js +36 -590
- package/dist/cli/commands/sediment-pool-commands.d.ts +9 -0
- package/dist/cli/commands/sediment-pool-commands.js +185 -0
- package/dist/cli/commands/sediment-query-commands.d.ts +4 -0
- package/dist/cli/commands/sediment-query-commands.js +94 -0
- package/dist/cli/commands/sediment-release-commands.d.ts +8 -0
- package/dist/cli/commands/sediment-release-commands.js +232 -0
- package/dist/cli/commands/share-commands.d.ts +12 -68
- package/dist/cli/commands/share-commands.js +47 -556
- package/dist/cli/commands/share-error-hints.d.ts +14 -0
- package/dist/cli/commands/share-error-hints.js +38 -0
- package/dist/cli/commands/share-identity.d.ts +13 -0
- package/dist/cli/commands/share-identity.js +22 -0
- package/dist/cli/commands/share-record-paths.d.ts +37 -0
- package/dist/cli/commands/share-record-paths.js +68 -0
- package/dist/cli/commands/share-runners.d.ts +3 -0
- package/dist/cli/commands/share-runners.js +158 -0
- package/dist/cli/commands/shared-read-runners.d.ts +3 -0
- package/dist/cli/commands/shared-read-runners.js +51 -0
- package/dist/cli/commands/slice-check-command.d.ts +3 -0
- package/dist/cli/commands/slice-check-command.js +54 -0
- package/dist/cli/commands/slice-commands.d.ts +2 -22
- package/dist/cli/commands/slice-commands.js +18 -517
- package/dist/cli/commands/slice-decompose-artifacts.d.ts +18 -0
- package/dist/cli/commands/slice-decompose-artifacts.js +79 -0
- package/dist/cli/commands/slice-decompose-command.d.ts +3 -0
- package/dist/cli/commands/slice-decompose-command.js +123 -0
- package/dist/cli/commands/slice-list-commands.d.ts +3 -0
- package/dist/cli/commands/slice-list-commands.js +182 -0
- package/dist/cli/commands/slice-pick-command.d.ts +3 -0
- package/dist/cli/commands/slice-pick-command.js +60 -0
- package/dist/cli/commands/slice-plan-command.d.ts +24 -0
- package/dist/cli/commands/slice-plan-command.js +111 -0
- package/dist/cli/commands/sop-advance-command.d.ts +3 -0
- package/dist/cli/commands/sop-advance-command.js +160 -0
- package/dist/cli/commands/sop-check-command.d.ts +3 -0
- package/dist/cli/commands/sop-check-command.js +44 -0
- package/dist/cli/commands/sop-command-shared.d.ts +23 -0
- package/dist/cli/commands/sop-command-shared.js +18 -0
- package/dist/cli/commands/sop-commands.d.ts +15 -1
- package/dist/cli/commands/sop-commands.js +26 -240
- package/dist/cli/commands/sop-init-command.d.ts +3 -0
- package/dist/cli/commands/sop-init-command.js +51 -0
- package/dist/cli/commands/sop-lint-command.d.ts +3 -0
- package/dist/cli/commands/sop-lint-command.js +64 -0
- package/dist/cli/commands/sop-register-command.d.ts +3 -0
- package/dist/cli/commands/sop-register-command.js +48 -0
- package/dist/cli/commands/sop-registry-command.d.ts +3 -0
- package/dist/cli/commands/sop-registry-command.js +30 -0
- package/dist/cli/commands/statusline-command-shared.d.ts +73 -0
- package/dist/cli/commands/statusline-command-shared.js +90 -0
- package/dist/cli/commands/statusline-commands.d.ts +1 -19
- package/dist/cli/commands/statusline-commands.js +48 -287
- package/dist/cli/commands/statusline-compact-command.d.ts +4 -0
- package/dist/cli/commands/statusline-compact-command.js +54 -0
- package/dist/cli/commands/statusline-install-command.d.ts +3 -0
- package/dist/cli/commands/statusline-install-command.js +48 -0
- package/dist/cli/commands/statusline-render-command.d.ts +9 -0
- package/dist/cli/commands/statusline-render-command.js +55 -0
- package/dist/cli/commands/statusline-status-command.d.ts +3 -0
- package/dist/cli/commands/statusline-status-command.js +23 -0
- package/dist/cli/commands/statusline-uninstall-command.d.ts +3 -0
- package/dist/cli/commands/statusline-uninstall-command.js +23 -0
- package/dist/cli/commands/test-command-run-helpers.d.ts +27 -0
- package/dist/cli/commands/test-command-run-helpers.js +73 -0
- package/dist/cli/commands/test-command-runner-resolution.d.ts +57 -0
- package/dist/cli/commands/test-command-runner-resolution.js +183 -0
- package/dist/cli/commands/test-commands.d.ts +8 -56
- package/dist/cli/commands/test-commands.js +26 -249
- package/dist/cli/commands/vm-command-shared.d.ts +23 -0
- package/dist/cli/commands/vm-command-shared.js +23 -0
- package/dist/cli/commands/vm-commands.d.ts +1 -28
- package/dist/cli/commands/vm-commands.js +36 -270
- package/dist/cli/commands/vm-hypervisor-runtime.d.ts +15 -0
- package/dist/cli/commands/vm-hypervisor-runtime.js +64 -0
- package/dist/cli/commands/vm-release-command.d.ts +5 -0
- package/dist/cli/commands/vm-release-command.js +101 -0
- package/dist/cli/commands/vm-spawn-command.d.ts +5 -0
- package/dist/cli/commands/vm-spawn-command.js +177 -0
- package/dist/cli/commands/web-command-shared.d.ts +12 -0
- package/dist/cli/commands/web-command-shared.js +30 -0
- package/dist/cli/commands/web-commands.d.ts +7 -14
- package/dist/cli/commands/web-commands.js +6 -314
- package/dist/cli/commands/web-install-command.d.ts +10 -0
- package/dist/cli/commands/web-install-command.js +116 -0
- package/dist/cli/commands/web-lifecycle-commands.d.ts +9 -30
- package/dist/cli/commands/web-lifecycle-commands.js +14 -322
- package/dist/cli/commands/web-login-command.d.ts +14 -0
- package/dist/cli/commands/web-login-command.js +189 -0
- package/dist/cli/commands/web-op-payload.d.ts +22 -0
- package/dist/cli/commands/web-op-payload.js +89 -0
- package/dist/cli/commands/web-op-refusals.d.ts +37 -0
- package/dist/cli/commands/web-op-refusals.js +73 -0
- package/dist/cli/commands/web-op-runner.d.ts +14 -0
- package/dist/cli/commands/web-op-runner.js +166 -0
- package/dist/cli/commands/web-status-command.d.ts +4 -0
- package/dist/cli/commands/web-status-command.js +32 -0
- package/dist/cli/commands/web-stop-command.d.ts +10 -0
- package/dist/cli/commands/web-stop-command.js +59 -0
- package/dist/cli/commands/web-verb-specs.d.ts +18 -0
- package/dist/cli/commands/web-verb-specs.js +66 -0
- package/dist/cli/commands/workflow-command-shared.d.ts +102 -0
- package/dist/cli/commands/workflow-command-shared.js +74 -0
- package/dist/cli/commands/workflow-commands.d.ts +10 -1
- package/dist/cli/commands/workflow-commands.js +6 -594
- package/dist/cli/commands/workflow-gate-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-gate-commands.js +116 -0
- package/dist/cli/commands/workflow-graph-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-graph-commands.js +73 -0
- package/dist/cli/commands/workflow-init-command.d.ts +3 -0
- package/dist/cli/commands/workflow-init-command.js +68 -0
- package/dist/cli/commands/workflow-lifecycle-commands.d.ts +9 -59
- package/dist/cli/commands/workflow-lifecycle-commands.js +14 -348
- package/dist/cli/commands/workflow-node-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-node-commands.js +154 -0
- package/dist/cli/commands/workflow-plan-helpers.d.ts +48 -0
- package/dist/cli/commands/workflow-plan-helpers.js +103 -0
- package/dist/cli/commands/workflow-planning-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-planning-commands.js +56 -0
- package/dist/cli/commands/workflow-swarm-actions.d.ts +7 -0
- package/dist/cli/commands/workflow-swarm-actions.js +109 -0
- package/dist/cli/commands/workflow-swarm-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-swarm-commands.js +138 -0
- package/dist/cli/commands/workflow-tech-actions.d.ts +10 -0
- package/dist/cli/commands/workflow-tech-actions.js +150 -0
- package/dist/cli/commands/workflow-terminalize-command.d.ts +3 -0
- package/dist/cli/commands/workflow-terminalize-command.js +56 -0
- package/dist/cli/commands/workspace/init-actions.d.ts +10 -0
- package/dist/cli/commands/workspace/init-actions.js +199 -0
- package/dist/cli/commands/workspace/init-codegraph-stake.d.ts +10 -0
- package/dist/cli/commands/workspace/init-codegraph-stake.js +54 -0
- package/dist/cli/commands/workspace/init-command.d.ts +8 -124
- package/dist/cli/commands/workspace/init-command.js +59 -623
- package/dist/cli/commands/workspace/init-context.d.ts +58 -0
- package/dist/cli/commands/workspace/init-context.js +121 -0
- package/dist/cli/commands/workspace/init-envelope.d.ts +3 -0
- package/dist/cli/commands/workspace/init-envelope.js +34 -0
- package/dist/cli/commands/workspace/init-failures.d.ts +3 -0
- package/dist/cli/commands/workspace/init-failures.js +84 -0
- package/dist/cli/commands/workspace/init-hooks-decision.d.ts +24 -0
- package/dist/cli/commands/workspace/init-hooks-decision.js +189 -0
- package/dist/cli/commands/workspace/init-options.d.ts +102 -0
- package/dist/cli/commands/workspace/init-options.js +1 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +10 -6
- package/dist/cli/commands/worktree-lease-commands.js +42 -512
- package/dist/cli/commands/worktree-lease-gc-command.d.ts +12 -0
- package/dist/cli/commands/worktree-lease-gc-command.js +117 -0
- package/dist/cli/commands/worktree-lease-git.d.ts +22 -0
- package/dist/cli/commands/worktree-lease-git.js +48 -0
- package/dist/cli/commands/worktree-lease-list-command.d.ts +12 -0
- package/dist/cli/commands/worktree-lease-list-command.js +100 -0
- package/dist/cli/commands/worktree-lease-load.d.ts +37 -0
- package/dist/cli/commands/worktree-lease-load.js +28 -0
- package/dist/cli/commands/worktree-lease-release-command.d.ts +13 -0
- package/dist/cli/commands/worktree-lease-release-command.js +105 -0
- package/dist/cli/commands/worktree-lease-renew-command.d.ts +11 -0
- package/dist/cli/commands/worktree-lease-renew-command.js +99 -0
- package/dist/cli/commands/worktree-lease-session.d.ts +22 -0
- package/dist/cli/commands/worktree-lease-session.js +29 -0
- package/dist/cli/commands/worktree-lease-spawn-command.d.ts +11 -0
- package/dist/cli/commands/worktree-lease-spawn-command.js +119 -0
- package/dist/cli/commands/worktree-lease-status-command.d.ts +11 -0
- package/dist/cli/commands/worktree-lease-status-command.js +86 -0
- package/dist/cli/commands/worktree-lease-store.d.ts +19 -0
- package/dist/cli/commands/worktree-lease-store.js +24 -0
- package/dist/cli/program.js +5 -0
- package/dist/services/code/auto-compact-artifacts.d.ts +54 -0
- package/dist/services/code/auto-compact-artifacts.js +135 -0
- package/dist/services/code/auto-compact-attempt.d.ts +46 -0
- package/dist/services/code/auto-compact-attempt.js +88 -0
- package/dist/services/code/auto-compact-decision.d.ts +74 -0
- package/dist/services/code/auto-compact-decision.js +149 -0
- package/dist/services/code/auto-compact-dispatch-gate.d.ts +36 -0
- package/dist/services/code/auto-compact-dispatch-gate.js +86 -0
- package/dist/services/code/auto-compact-envelopes.d.ts +33 -0
- package/dist/services/code/auto-compact-envelopes.js +134 -0
- package/dist/services/code/auto-compact-history.d.ts +46 -0
- package/dist/services/code/auto-compact-history.js +17 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +11 -240
- package/dist/services/code/auto-compact-orchestrator.js +165 -686
- package/dist/services/code/auto-compact-run-types.d.ts +123 -0
- package/dist/services/code/auto-compact-run-types.js +1 -0
- package/dist/services/code/emit-handoff.d.ts +35 -1
- package/dist/services/code/emit-handoff.js +128 -7
- package/dist/services/code/step-08-gate.d.ts +28 -19
- package/dist/services/code/step-08-gate.js +92 -35
- package/dist/services/config/config-coercion.d.ts +7 -0
- package/dist/services/config/config-coercion.js +156 -0
- package/dist/services/config/config-file-io.d.ts +11 -0
- package/dist/services/config/config-file-io.js +61 -0
- package/dist/services/config/config-get.d.ts +2 -0
- package/dist/services/config/config-get.js +36 -0
- package/dist/services/config/config-global-loader.d.ts +15 -0
- package/dist/services/config/config-global-loader.js +111 -0
- package/dist/services/config/config-nested-path.d.ts +3 -0
- package/dist/services/config/config-nested-path.js +53 -0
- package/dist/services/config/config-primitives.d.ts +16 -0
- package/dist/services/config/config-primitives.js +24 -0
- package/dist/services/config/config-service.d.ts +9 -33
- package/dist/services/config/config-service.js +16 -665
- package/dist/services/config/config-validation.d.ts +19 -0
- package/dist/services/config/config-validation.js +152 -0
- package/dist/services/config/config-workspace.d.ts +10 -0
- package/dist/services/config/config-workspace.js +158 -0
- package/dist/services/distribution/mcp-install-runner.d.ts +21 -0
- package/dist/services/distribution/mcp-install-runner.js +59 -0
- package/dist/services/distribution/mcp-install.d.ts +95 -0
- package/dist/services/distribution/mcp-install.js +179 -0
- package/dist/services/distribution/plugin-manifest.d.ts +97 -0
- package/dist/services/distribution/plugin-manifest.js +126 -0
- package/dist/services/hooks/mcp-surface-gate.d.ts +19 -0
- package/dist/services/hooks/mcp-surface-gate.js +87 -0
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +4 -35
- package/dist/services/ide/adapters/claude-code-adapter.js +48 -171
- package/dist/services/ide/adapters/claude-code-local-state.d.ts +28 -0
- package/dist/services/ide/adapters/claude-code-local-state.js +112 -0
- package/dist/services/ide/adapters/claude-code-model-window.d.ts +37 -0
- package/dist/services/ide/adapters/claude-code-model-window.js +113 -0
- package/dist/services/ide/ide-mcp-install-types.d.ts +78 -0
- package/dist/services/ide/ide-mcp-install-types.js +104 -0
- package/dist/services/ide/ide-types.d.ts +45 -1
- package/dist/services/ide/mcp-tool-matcher.d.ts +34 -0
- package/dist/services/ide/mcp-tool-matcher.js +84 -0
- package/dist/services/lint/npx-resolver.js +7 -0
- package/dist/services/mcp/cli-executor.d.ts +36 -0
- package/dist/services/mcp/cli-executor.js +97 -0
- package/dist/services/mcp/json-rpc.d.ts +81 -0
- package/dist/services/mcp/json-rpc.js +116 -0
- package/dist/services/mcp/memory-tool.d.ts +3 -0
- package/dist/services/mcp/memory-tool.js +62 -0
- package/dist/services/mcp/server-main.d.ts +1 -0
- package/dist/services/mcp/server-main.js +66 -0
- package/dist/services/mcp/server.d.ts +22 -0
- package/dist/services/mcp/server.js +152 -0
- package/dist/services/mcp/surface.d.ts +62 -0
- package/dist/services/mcp/surface.js +198 -0
- package/dist/services/mcp/tool-core.d.ts +42 -0
- package/dist/services/mcp/tool-core.js +137 -0
- package/dist/services/mcp/tools.d.ts +13 -0
- package/dist/services/mcp/tools.js +58 -0
- package/dist/services/readonly-surface/argv-guard.d.ts +32 -0
- package/dist/services/readonly-surface/argv-guard.js +164 -0
- package/dist/services/readonly-surface/readonly-whitelist.d.ts +147 -0
- package/dist/services/readonly-surface/readonly-whitelist.js +107 -0
- package/dist/services/readonly-surface/whitelist-generator.d.ts +64 -0
- package/dist/services/readonly-surface/whitelist-generator.js +212 -0
- package/dist/services/skills/hooks-codegate-superpowers.d.ts +1 -0
- package/dist/services/skills/hooks-codegate-superpowers.js +26 -0
- package/dist/services/skills/hooks-settings-deny-list.d.ts +61 -0
- package/dist/services/skills/hooks-settings-deny-list.js +173 -0
- package/dist/services/skills/hooks-settings-envelopes.d.ts +20 -0
- package/dist/services/skills/hooks-settings-envelopes.js +79 -0
- package/dist/services/skills/hooks-settings-file-shape.d.ts +43 -0
- package/dist/services/skills/hooks-settings-file-shape.js +207 -0
- package/dist/services/skills/hooks-settings-paths.d.ts +34 -0
- package/dist/services/skills/hooks-settings-paths.js +75 -0
- package/dist/services/skills/hooks-settings-read-installed.d.ts +39 -0
- package/dist/services/skills/hooks-settings-read-installed.js +60 -0
- package/dist/services/skills/hooks-settings-service.d.ts +12 -212
- package/dist/services/skills/hooks-settings-service.js +71 -649
- package/dist/services/skills/hooks-settings-types.d.ts +139 -0
- package/dist/services/skills/hooks-settings-types.js +1 -0
- package/dist/services/workspace/claude-settings-template-merge.d.ts +89 -0
- package/dist/services/workspace/claude-settings-template-merge.js +243 -0
- package/dist/services/workspace/claude-settings-template.d.ts +29 -87
- package/dist/services/workspace/claude-settings-template.js +81 -236
- package/package.json +17 -6
- package/scripts/install-skills-bundles.mjs +233 -0
- package/scripts/install-skills-fs.mjs +148 -0
- package/scripts/install-skills-ide.mjs +279 -0
- package/scripts/install-skills-output-style-default.mjs +196 -0
- package/scripts/install-skills-output-styles.mjs +121 -0
- package/scripts/install-skills-report.mjs +42 -0
- package/scripts/install-skills-user-config.mjs +198 -0
- package/scripts/install-skills.mjs +36 -1066
- package/scripts/watch-tree.mjs +140 -0
- package/scripts/watch.mjs +4 -126
- package/skills/peaks-status/SKILL.md +31 -13
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// src/cli/commands/memory-list-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks memory list` — read `.peaks/memory/index.json`, optionally with fzf
|
|
4
|
+
// multi-select, plus the Slice B `--summary` view. Extracted from
|
|
5
|
+
// `memory-commands.ts`; the envelope, the flags and the exported symbol names
|
|
6
|
+
// are unchanged.
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
9
|
+
import { boundedNames, fitSummaryToBytes } from '../../services/context/summary-view.js';
|
|
10
|
+
import { pickFromList } from '../../services/fuzzy-matching/fzf-pick-service.js';
|
|
11
|
+
import { loadMemoryIndex } from '../../services/memory/memory-search-service.js';
|
|
12
|
+
import { printResult } from '../cli-helpers.js';
|
|
13
|
+
import { memoryFailure, resolveKindFilter, resolveMemoryProjectRoot } from './memory-command-shared.js';
|
|
14
|
+
/**
|
|
15
|
+
* Slice B: bounded view of `memory list`. `count` is the true total; `names`
|
|
16
|
+
* carries `name (kind)` labels for the first N entries.
|
|
17
|
+
*/
|
|
18
|
+
export function buildMemoryListSummary(data) {
|
|
19
|
+
const label = (e) => `${e.name} (${e.kind})`;
|
|
20
|
+
const view = {
|
|
21
|
+
view: 'summary',
|
|
22
|
+
indexPath: data.snapshot.indexPath,
|
|
23
|
+
version: data.snapshot.version,
|
|
24
|
+
updatedAt: data.snapshot.updatedAt,
|
|
25
|
+
total: data.entries.length,
|
|
26
|
+
kindFilter: data.kindFilter ?? null,
|
|
27
|
+
entries: boundedNames(data.entries.map(label))
|
|
28
|
+
};
|
|
29
|
+
if (data.pickedOutputPath !== null) {
|
|
30
|
+
view.picked = boundedNames(data.pickedEntries.map(label));
|
|
31
|
+
view.pickedOutputPath = data.pickedOutputPath;
|
|
32
|
+
view.fzfVersion = data.fzfVersion;
|
|
33
|
+
}
|
|
34
|
+
return fitSummaryToBytes(view);
|
|
35
|
+
}
|
|
36
|
+
export async function runMemoryList(io, options) {
|
|
37
|
+
const projectRoot = resolveMemoryProjectRoot(options.project);
|
|
38
|
+
try {
|
|
39
|
+
const snapshot = loadMemoryIndex(projectRoot);
|
|
40
|
+
const kindFilter = resolveKindFilter(options.kind);
|
|
41
|
+
const entries = kindFilter === undefined
|
|
42
|
+
? snapshot.entries
|
|
43
|
+
: snapshot.entries.filter((e) => e.kind === kindFilter);
|
|
44
|
+
const picked = await pickMemoryEntries(projectRoot, entries, kindFilter, options);
|
|
45
|
+
const data = memoryListData({ snapshot, entries, kindFilter, options, picked });
|
|
46
|
+
printResult(io, ok('memory.list', data, [], listNextActions(entries, picked)), options.json);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
printResult(io, memoryFailure({
|
|
50
|
+
command: 'memory.list',
|
|
51
|
+
fallbackCode: 'MEMORY_LIST_FAILED',
|
|
52
|
+
error,
|
|
53
|
+
projectRoot,
|
|
54
|
+
byCode: {
|
|
55
|
+
INDEX_MISSING: 'Run `peaks memory extract` to build the index from memory/*.md files'
|
|
56
|
+
}
|
|
57
|
+
}), options.json);
|
|
58
|
+
process.exitCode = 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** The pick notice and the empty-index notice, in that order. */
|
|
62
|
+
function listNextActions(entries, picked) {
|
|
63
|
+
const nextActions = [];
|
|
64
|
+
if (picked.pickedOutputPath !== null) {
|
|
65
|
+
nextActions.push(`Picked ${picked.pickedEntries.length} entr(ies); written to ${picked.pickedOutputPath}`);
|
|
66
|
+
}
|
|
67
|
+
if (entries.length === 0) {
|
|
68
|
+
nextActions.push('No entries match; run `peaks memory extract` to build the index from memory/*.md files.');
|
|
69
|
+
}
|
|
70
|
+
return nextActions;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Slice B: `--summary` swaps the full entry array for a bounded
|
|
74
|
+
* `{count, names}` view. The default (no flag) view is byte-identical to
|
|
75
|
+
* before — the flag is strictly opt-in.
|
|
76
|
+
*/
|
|
77
|
+
function memoryListData(input) {
|
|
78
|
+
const { snapshot, entries, kindFilter, options, picked } = input;
|
|
79
|
+
if (options.summary === true) {
|
|
80
|
+
return buildMemoryListSummary({ snapshot, entries, kindFilter, ...picked });
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
indexPath: snapshot.indexPath,
|
|
84
|
+
version: snapshot.version,
|
|
85
|
+
updatedAt: snapshot.updatedAt,
|
|
86
|
+
total: entries.length,
|
|
87
|
+
kindFilter: kindFilter ?? null,
|
|
88
|
+
entries,
|
|
89
|
+
...(options.pick === true
|
|
90
|
+
? {
|
|
91
|
+
picked: picked.pickedEntries,
|
|
92
|
+
pickedOutputPath: picked.pickedOutputPath,
|
|
93
|
+
fzfVersion: picked.fzfVersion
|
|
94
|
+
}
|
|
95
|
+
: {})
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** The `--pick` branch, or the unchanged entry list when the flag is absent. */
|
|
99
|
+
async function pickMemoryEntries(projectRoot, entries, kindFilter, options) {
|
|
100
|
+
if (options.pick !== true) {
|
|
101
|
+
return { pickedEntries: entries, pickedOutputPath: null, fzfVersion: null };
|
|
102
|
+
}
|
|
103
|
+
const outputPath = join(projectRoot, '.peaks', 'memory', 'picked.json');
|
|
104
|
+
const byName = new Map(entries.map((e) => [e.name, e]));
|
|
105
|
+
const result = await pickFromList({
|
|
106
|
+
items: entries,
|
|
107
|
+
formatLine: (entry) => `${entry.name} | ${entry.kind} | ${entry.description.slice(0, 60)}`,
|
|
108
|
+
parseLine: (line) => {
|
|
109
|
+
const parts = line.split('|').map((p) => p.trim());
|
|
110
|
+
if (parts.length < 1)
|
|
111
|
+
return null;
|
|
112
|
+
const name = parts[0];
|
|
113
|
+
if (name === undefined || name.length === 0)
|
|
114
|
+
return null;
|
|
115
|
+
return byName.get(name) ?? null;
|
|
116
|
+
},
|
|
117
|
+
outputPath,
|
|
118
|
+
meta: { kindFilter: kindFilter ?? null, totalCandidates: entries.length },
|
|
119
|
+
...(options.fzfBin !== undefined ? { fzfBin: options.fzfBin } : {}),
|
|
120
|
+
projectRoot,
|
|
121
|
+
multi: true,
|
|
122
|
+
prompt: 'memory> '
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
pickedEntries: [...result.picked],
|
|
126
|
+
pickedOutputPath: result.outputPath,
|
|
127
|
+
fzfVersion: result.fzfVersion
|
|
128
|
+
};
|
|
129
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type MemoryReindexReport } from '../../services/memory/project-memory-service.js';
|
|
2
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
3
|
+
import { type MemoryReindexCommandOptions } from './memory-command-shared.js';
|
|
4
|
+
/**
|
|
5
|
+
* `memory reindex`. The full report's arrays stay on disk / in the default
|
|
6
|
+
* envelope; this replaces them with `{count, names}` views (≤ 2 KB).
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildMemoryReindexSummary(report: MemoryReindexReport): Record<string, unknown>;
|
|
9
|
+
export declare function runMemoryReindex(io: ProgramIO, options: MemoryReindexCommandOptions): Promise<void>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/cli/commands/memory-reindex-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks memory reindex` — rebuild `.peaks/memory/index.json` from disk and
|
|
4
|
+
// regenerate `MEMORY.md`. Dry-run by default; `--apply` writes. Extracted from
|
|
5
|
+
// `memory-commands.ts`; the envelope, the flags and the exported symbol names
|
|
6
|
+
// are unchanged.
|
|
7
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
8
|
+
import { boundedNames, fitSummaryToBytes } from '../../services/context/summary-view.js';
|
|
9
|
+
import { executeMemoryReindex } from '../../services/memory/project-memory-service.js';
|
|
10
|
+
import { printResult } from '../cli-helpers.js';
|
|
11
|
+
import { memoryFailure, resolveMemoryProjectRoot } from './memory-command-shared.js';
|
|
12
|
+
/**
|
|
13
|
+
* `memory reindex`. The full report's arrays stay on disk / in the default
|
|
14
|
+
* envelope; this replaces them with `{count, names}` views (≤ 2 KB).
|
|
15
|
+
*/
|
|
16
|
+
export function buildMemoryReindexSummary(report) {
|
|
17
|
+
const view = {
|
|
18
|
+
view: 'summary',
|
|
19
|
+
apply: report.apply,
|
|
20
|
+
projectRoot: report.projectRoot,
|
|
21
|
+
memoryDir: report.memoryDir,
|
|
22
|
+
indexPath: report.indexPath,
|
|
23
|
+
memoryMdPath: report.memoryMdPath,
|
|
24
|
+
scannedFiles: report.scannedFiles,
|
|
25
|
+
indexed: report.indexed,
|
|
26
|
+
indexedByKind: report.indexedByKind,
|
|
27
|
+
unclassified: boundedNames(report.unclassified.map((u) => `${u.name}${u.rawKind === null ? '' : ` (${u.rawKind})`}`)),
|
|
28
|
+
nameConflicts: boundedNames(report.nameConflicts.map((c) => c.name)),
|
|
29
|
+
orphanIndex: boundedNames(report.orphanIndex.map((o) => o.name)),
|
|
30
|
+
orphanDisk: boundedNames(report.orphanDisk.map((p) => p.split(/[\\/]/).pop() ?? p)),
|
|
31
|
+
memoryMd: report.memoryMd,
|
|
32
|
+
writtenFiles: boundedNames(report.writtenFiles.map((p) => p.split(/[\\/]/).pop() ?? p))
|
|
33
|
+
};
|
|
34
|
+
return fitSummaryToBytes(view);
|
|
35
|
+
}
|
|
36
|
+
export async function runMemoryReindex(io, options) {
|
|
37
|
+
const projectRoot = resolveMemoryProjectRoot(options.project);
|
|
38
|
+
if (options.dryRun === true && options.apply === true) {
|
|
39
|
+
printResult(io, fail('memory.reindex', 'INVALID_MEMORY_REINDEX_FLAGS', 'Use either --dry-run or --apply, not both', {}, ['Run without --apply to preview the drift report, or pass --apply to rebuild']), options.json);
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const report = executeMemoryReindex({ projectRoot, apply: options.apply === true });
|
|
45
|
+
// Slice B: `--summary` keeps the scalar drift counts + names-of-first-N;
|
|
46
|
+
// the full report (with every unclassified/orphan path) stays available
|
|
47
|
+
// by omitting the flag. Default shape is unchanged.
|
|
48
|
+
const data = options.summary === true ? buildMemoryReindexSummary(report) : report;
|
|
49
|
+
printResult(io, ok('memory.reindex', data, [], reindexNextActions(report, options)), options.json);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
printResult(io, memoryFailure({
|
|
53
|
+
command: 'memory.reindex',
|
|
54
|
+
fallbackCode: 'MEMORY_REINDEX_FAILED',
|
|
55
|
+
error,
|
|
56
|
+
projectRoot,
|
|
57
|
+
suggestions: ['Check that the project has a readable .peaks/memory directory']
|
|
58
|
+
}), options.json);
|
|
59
|
+
process.exitCode = 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** The drift notices the report earns, in the report's own field order. */
|
|
63
|
+
function reindexNextActions(report, options) {
|
|
64
|
+
const nextActions = [];
|
|
65
|
+
if (options.apply !== true) {
|
|
66
|
+
nextActions.push('Preview only — re-run with --apply to rebuild index.json and regenerate MEMORY.md.');
|
|
67
|
+
}
|
|
68
|
+
if (report.unclassified.length > 0) {
|
|
69
|
+
nextActions.push(`${report.unclassified.length} file(s) have no resolvable kind; add \`metadata.type\` (or \`kind:\`) to index them.`);
|
|
70
|
+
}
|
|
71
|
+
if (report.orphanIndex.length > 0) {
|
|
72
|
+
nextActions.push(`${report.orphanIndex.length} previous index entry(ies) point at missing files; they are dropped from the rebuilt index.`);
|
|
73
|
+
}
|
|
74
|
+
if (report.nameConflicts.length > 0) {
|
|
75
|
+
nextActions.push(`${report.nameConflicts.length} name collision(s) across files; both entries are kept — rename one file to disambiguate.`);
|
|
76
|
+
}
|
|
77
|
+
return nextActions;
|
|
78
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// src/cli/commands/memory-rotate-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks memory rotate` — tier-driven retention for `.peaks/memory/`
|
|
4
|
+
// (sediment pruning policy, tier 1: archive, never delete). Dry-run by default;
|
|
5
|
+
// `--apply` moves tier-C candidates into `archived/`. Extracted from
|
|
6
|
+
// `memory-commands.ts`; the envelope, the flags and the exported symbol name
|
|
7
|
+
// are unchanged.
|
|
8
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
9
|
+
import { executeMemoryRotate } from '../../services/memory/memory-rotate-service.js';
|
|
10
|
+
import { printResult } from '../cli-helpers.js';
|
|
11
|
+
import { memoryFailure, resolveMemoryProjectRoot } from './memory-command-shared.js';
|
|
12
|
+
export async function runMemoryRotate(io, options) {
|
|
13
|
+
const projectRoot = resolveMemoryProjectRoot(options.project);
|
|
14
|
+
if (options.dryRun === true && options.apply === true) {
|
|
15
|
+
printResult(io, fail('memory.rotate', 'INVALID_MEMORY_ROTATE_FLAGS', 'Use either --dry-run or --apply, not both', {}, [
|
|
16
|
+
'Run without --apply to preview the rotation plan, or pass --apply to archive tier-C candidates'
|
|
17
|
+
]), options.json);
|
|
18
|
+
process.exitCode = 1;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const report = executeMemoryRotate({ projectRoot, apply: options.apply === true });
|
|
23
|
+
printResult(io, ok('memory.rotate', report, report.warnings, rotateNextActions(report, options)), options.json);
|
|
24
|
+
if (report.refused)
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
printResult(io, memoryFailure({
|
|
29
|
+
command: 'memory.rotate',
|
|
30
|
+
fallbackCode: 'MEMORY_ROTATE_FAILED',
|
|
31
|
+
error,
|
|
32
|
+
projectRoot,
|
|
33
|
+
suggestions: ['Check that the project has a readable .peaks/memory directory']
|
|
34
|
+
}), options.json);
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** The refusal / preview / exclusion / tier-D notices the plan earns, in order. */
|
|
39
|
+
function rotateNextActions(report, options) {
|
|
40
|
+
const nextActions = [];
|
|
41
|
+
if (report.refused) {
|
|
42
|
+
nextActions.push(`Refused to apply: ${report.refusalReasons.join('; ')}`);
|
|
43
|
+
}
|
|
44
|
+
else if (options.apply !== true) {
|
|
45
|
+
nextActions.push('Preview only — re-run with --apply to move the tier-C candidates into archived/.');
|
|
46
|
+
}
|
|
47
|
+
if (report.excluded.length > 0) {
|
|
48
|
+
nextActions.push(`${report.excluded.length} candidate(s) excluded by a safety gate (see \`excluded\`).`);
|
|
49
|
+
}
|
|
50
|
+
const deleteCandidates = report.candidates.filter((candidate) => candidate.action === 'delete-candidate');
|
|
51
|
+
if (deleteCandidates.length > 0) {
|
|
52
|
+
nextActions.push(`${deleteCandidates.length} tier-D file(s) are delete-candidates only; peaks never deletes them — remove by hand if you are sure.`);
|
|
53
|
+
}
|
|
54
|
+
return nextActions;
|
|
55
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
2
|
+
import { type MemorySearchCommandOptions } from './memory-command-shared.js';
|
|
3
|
+
/**
|
|
4
|
+
* Run the memory search subcommand. Extracted so unit tests can
|
|
5
|
+
* exercise the full envelope without spawning a subprocess.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runMemorySearch(io: ProgramIO, options: MemorySearchCommandOptions): Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// src/cli/commands/memory-search-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks memory search` — deterministic, local, zero-token fuzzy search over
|
|
4
|
+
// the memory index. Extracted from `memory-commands.ts`; the envelope, the
|
|
5
|
+
// flags and the exported symbol name are unchanged.
|
|
6
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { searchMemory } from '../../services/memory/memory-search-service.js';
|
|
8
|
+
import { printResult } from '../cli-helpers.js';
|
|
9
|
+
import { memoryFailure, resolveKindFilter, resolveMemoryProjectRoot } from './memory-command-shared.js';
|
|
10
|
+
/** The one action each named failure earns. */
|
|
11
|
+
const SEARCH_HINTS = {
|
|
12
|
+
INDEX_MISSING: 'Run `peaks memory extract --apply` to build the index from memory/*.md files',
|
|
13
|
+
EMPTY_QUERY: 'Use `peaks memory index` to list all entries'
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Run the memory search subcommand. Extracted so unit tests can
|
|
17
|
+
* exercise the full envelope without spawning a subprocess.
|
|
18
|
+
*/
|
|
19
|
+
export async function runMemorySearch(io, options) {
|
|
20
|
+
const projectRoot = resolveMemoryProjectRoot(options.project);
|
|
21
|
+
const kindFilter = resolveKindFilter(options.kind);
|
|
22
|
+
try {
|
|
23
|
+
const matches = searchMemory({
|
|
24
|
+
query: options.query,
|
|
25
|
+
projectRoot,
|
|
26
|
+
...(options.limit !== undefined ? { limit: options.limit } : {}),
|
|
27
|
+
...(kindFilter !== undefined ? { kind: kindFilter } : {})
|
|
28
|
+
});
|
|
29
|
+
printResult(io, ok('memory.search', {
|
|
30
|
+
query: options.query,
|
|
31
|
+
total: matches.length,
|
|
32
|
+
matches,
|
|
33
|
+
warnings: []
|
|
34
|
+
}, []), options.json);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
printResult(io, memoryFailure({
|
|
38
|
+
command: 'memory.search',
|
|
39
|
+
fallbackCode: 'MEMORY_SEARCH_FAILED',
|
|
40
|
+
error,
|
|
41
|
+
projectRoot,
|
|
42
|
+
byCode: SEARCH_HINTS
|
|
43
|
+
}), options.json);
|
|
44
|
+
process.exitCode = 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// src/cli/commands/openspec-archive-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec archive <changeId>`. Extracted from `openspec-commands.ts`;
|
|
4
|
+
// the registered name, description, options and envelopes are unchanged.
|
|
5
|
+
import { archiveOpenSpecChange, OpenSpecArchiveError } from '../../services/openspec/openspec-archive-service.js';
|
|
6
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
8
|
+
import { failOpenSpec, OPENSPEC_PATH_HINT, printArchiveError, printChangeNotFound, toArchiveOptions } from './openspec-command-shared.js';
|
|
9
|
+
/** The `--force` bypasses an archived run reports, in a fixed order. */
|
|
10
|
+
function archiveWarnings(result) {
|
|
11
|
+
const warnings = [];
|
|
12
|
+
if (result.coverageGateBypassed === true) {
|
|
13
|
+
warnings.push('Coverage gate bypassed via --force; archived with at least one uncovered requirement.');
|
|
14
|
+
}
|
|
15
|
+
if (result.coverageMismatchBypassed === true) {
|
|
16
|
+
warnings.push('Coverage summary mismatch bypassed via --force; archived with at least one capability below 100%.');
|
|
17
|
+
}
|
|
18
|
+
return warnings;
|
|
19
|
+
}
|
|
20
|
+
const ARCHIVE_DESCRIPTION = 'Move an OpenSpec change under openspec/changes/<archiveDir>/<id>/ (dry-run by default)';
|
|
21
|
+
const FORCE_DESCRIPTION = 'bypass the Pre-cond 2 Coverage Evidence gate (use only after confirming the gap is acceptable for this archive)';
|
|
22
|
+
const COVERAGE_SUMMARY_DESCRIPTION = 'override coverage-summary.json discovery (Fix-6B). Default: <projectRoot>/coverage/coverage-summary.json, then <projectRoot>/openspec/coverage-summary.json';
|
|
23
|
+
export function registerOpenSpecArchiveCommand(openspec, io) {
|
|
24
|
+
addJsonOption(openspec
|
|
25
|
+
.command('archive')
|
|
26
|
+
.description(ARCHIVE_DESCRIPTION)
|
|
27
|
+
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
28
|
+
.option('--project <path>', 'project root containing an openspec/ directory')
|
|
29
|
+
.option('--apply', 'actually move the change directory')
|
|
30
|
+
.option('--force', FORCE_DESCRIPTION)
|
|
31
|
+
.option('--coverage-summary <path>', COVERAGE_SUMMARY_DESCRIPTION)
|
|
32
|
+
.option('--archive-dir <name>', 'archive subdirectory name (default: archive)')).action(async (changeId, options) => {
|
|
33
|
+
try {
|
|
34
|
+
const result = await archiveOpenSpecChange(changeId, toArchiveOptions(options.project, options));
|
|
35
|
+
if (result === null) {
|
|
36
|
+
printChangeNotFound(io, 'openspec.archive', changeId, options.json);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
printResult(io, ok('openspec.archive', result, archiveWarnings(result), result.applied ? [] : [`Re-run with --apply to move ${result.from} → ${result.to}`]), options.json);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error instanceof OpenSpecArchiveError) {
|
|
43
|
+
printArchiveError(io, error, options.json);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
failOpenSpec(io, 'openspec.archive', {
|
|
47
|
+
code: 'OPENSPEC_ARCHIVE_FAILED',
|
|
48
|
+
error,
|
|
49
|
+
data: { changeId },
|
|
50
|
+
nextActions: OPENSPEC_PATH_HINT,
|
|
51
|
+
json: options.json
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { OpenSpecScanOptions } from '../../services/openspec/openspec-scan-service.js';
|
|
2
|
+
import type { OpenSpecArchiveError, OpenSpecArchiveOptions } from '../../services/openspec/openspec-archive-service.js';
|
|
3
|
+
import type { OpenSpecRenderOptions, OpenSpecRenderRequest } from '../../services/openspec/openspec-render-service.js';
|
|
4
|
+
import type { OpenSpecValidateOptions } from '../../services/openspec/openspec-validate-service.js';
|
|
5
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
6
|
+
export type OpenSpecListOptions = {
|
|
7
|
+
project?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type OpenSpecShowOptions = OpenSpecListOptions;
|
|
11
|
+
export type OpenSpecToRdOptions = OpenSpecListOptions;
|
|
12
|
+
export type OpenSpecRenderCommandOptions = OpenSpecListOptions & {
|
|
13
|
+
request: string;
|
|
14
|
+
apply?: boolean;
|
|
15
|
+
overwrite?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type OpenSpecValidateCommandOptions = OpenSpecListOptions & {
|
|
18
|
+
preferExternal?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type OpenSpecArchiveCommandOptions = OpenSpecListOptions & {
|
|
21
|
+
apply?: boolean;
|
|
22
|
+
force?: boolean;
|
|
23
|
+
coverageSummary?: string;
|
|
24
|
+
archiveDir?: string;
|
|
25
|
+
};
|
|
26
|
+
export type OpenSpecInitCommandOptions = {
|
|
27
|
+
project: string;
|
|
28
|
+
apply?: boolean;
|
|
29
|
+
json?: boolean;
|
|
30
|
+
};
|
|
31
|
+
/** The next action every path/layout failure carries. */
|
|
32
|
+
export declare const OPENSPEC_PATH_HINT: string[];
|
|
33
|
+
/** Everything a verb-specific catch needs to build its failure envelope. */
|
|
34
|
+
export type OpenSpecFailure = {
|
|
35
|
+
readonly code: string;
|
|
36
|
+
readonly error: unknown;
|
|
37
|
+
readonly nextActions: string[];
|
|
38
|
+
readonly json: boolean | undefined;
|
|
39
|
+
readonly data?: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
export declare function resolveScanOptions(project: string | undefined): OpenSpecScanOptions;
|
|
42
|
+
export declare function loadRenderRequest(requestPath: string): Promise<OpenSpecRenderRequest>;
|
|
43
|
+
/** Print a verb failure and mark the run failed. One call site per catch. */
|
|
44
|
+
export declare function failOpenSpec(io: ProgramIO, command: string, failure: OpenSpecFailure): void;
|
|
45
|
+
/** The `<changeId>` resolution every change-scoped verb shares. */
|
|
46
|
+
export declare function printChangeNotFound(io: ProgramIO, command: string, changeId: string, json: boolean | undefined): void;
|
|
47
|
+
/**
|
|
48
|
+
* Translate `--project` into the service option shape, carrying only the flags
|
|
49
|
+
* the caller actually set (a `false`/`undefined` flag must stay absent, not be
|
|
50
|
+
* written as `false`).
|
|
51
|
+
*/
|
|
52
|
+
export declare function toRenderOptions(project: string | undefined, options: OpenSpecRenderCommandOptions): OpenSpecRenderOptions;
|
|
53
|
+
export declare function toValidateOptions(project: string | undefined, options: OpenSpecValidateCommandOptions): OpenSpecValidateOptions;
|
|
54
|
+
export declare function toArchiveOptions(project: string | undefined, options: OpenSpecArchiveCommandOptions): OpenSpecArchiveOptions;
|
|
55
|
+
/**
|
|
56
|
+
* Per-error-code remediation hints for the archive gate.
|
|
57
|
+
* Centralized here so the catch block stays readable and the next-actions
|
|
58
|
+
* can be reviewed in isolation.
|
|
59
|
+
*/
|
|
60
|
+
export declare function nextActionsForArchiveError(code: OpenSpecArchiveError['code']): string[];
|
|
61
|
+
/** The `openspec.archive` failure envelope for the gate's own error class. */
|
|
62
|
+
export declare function printArchiveError(io: ProgramIO, error: OpenSpecArchiveError, json: boolean | undefined): void;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// src/cli/commands/openspec-command-shared.ts
|
|
2
|
+
//
|
|
3
|
+
// The option shapes, flag translation and envelope printers shared by every
|
|
4
|
+
// `peaks openspec <verb>` subcommand module. Split out of
|
|
5
|
+
// `openspec-commands.ts` so each verb can live in its own file without
|
|
6
|
+
// repeating the `fail(...)` boilerplate eight times.
|
|
7
|
+
import { readFile } from 'node:fs/promises';
|
|
8
|
+
import { getErrorMessage, printResult } from '../cli-helpers.js';
|
|
9
|
+
import { normalizePath } from '../../shared/path-utils.js';
|
|
10
|
+
import { fail } from 'peaks-loop-shared/result';
|
|
11
|
+
/** The next action every path/layout failure carries. */
|
|
12
|
+
export const OPENSPEC_PATH_HINT = [
|
|
13
|
+
'Check the project path and openspec/ layout before retrying'
|
|
14
|
+
];
|
|
15
|
+
export function resolveScanOptions(project) {
|
|
16
|
+
if (project === undefined) {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
return { openspecRoot: `${normalizePath(project).replace(/\/$/, '')}/openspec` };
|
|
20
|
+
}
|
|
21
|
+
export async function loadRenderRequest(requestPath) {
|
|
22
|
+
const raw = await readFile(requestPath, 'utf8');
|
|
23
|
+
const parsed = JSON.parse(raw);
|
|
24
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
25
|
+
throw new Error('Render request file must contain a JSON object');
|
|
26
|
+
}
|
|
27
|
+
return parsed;
|
|
28
|
+
}
|
|
29
|
+
/** Print a verb failure and mark the run failed. One call site per catch. */
|
|
30
|
+
export function failOpenSpec(io, command, failure) {
|
|
31
|
+
printResult(io, fail(command, failure.code, getErrorMessage(failure.error), failure.data ?? {}, failure.nextActions), failure.json);
|
|
32
|
+
process.exitCode = 1;
|
|
33
|
+
}
|
|
34
|
+
/** The `<changeId>` resolution every change-scoped verb shares. */
|
|
35
|
+
export function printChangeNotFound(io, command, changeId, json) {
|
|
36
|
+
printResult(io, fail(command, 'OPENSPEC_CHANGE_NOT_FOUND', `OpenSpec change ${changeId} was not found`, { changeId }, [`Verify openspec/changes/${changeId}/ exists`]), json);
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
}
|
|
39
|
+
const ROOT_KEY = 'openspecRoot';
|
|
40
|
+
/**
|
|
41
|
+
* Translate `--project` into the service option shape, carrying only the flags
|
|
42
|
+
* the caller actually set (a `false`/`undefined` flag must stay absent, not be
|
|
43
|
+
* written as `false`).
|
|
44
|
+
*/
|
|
45
|
+
export function toRenderOptions(project, options) {
|
|
46
|
+
const renderOptions = {};
|
|
47
|
+
const scan = resolveScanOptions(project);
|
|
48
|
+
if (scan.openspecRoot !== undefined) {
|
|
49
|
+
renderOptions[ROOT_KEY] = scan.openspecRoot;
|
|
50
|
+
}
|
|
51
|
+
if (options.apply === true) {
|
|
52
|
+
renderOptions.apply = true;
|
|
53
|
+
}
|
|
54
|
+
if (options.overwrite === true) {
|
|
55
|
+
renderOptions.overwrite = true;
|
|
56
|
+
}
|
|
57
|
+
return renderOptions;
|
|
58
|
+
}
|
|
59
|
+
export function toValidateOptions(project, options) {
|
|
60
|
+
const validateOptions = {};
|
|
61
|
+
const scan = resolveScanOptions(project);
|
|
62
|
+
if (scan.openspecRoot !== undefined) {
|
|
63
|
+
validateOptions[ROOT_KEY] = scan.openspecRoot;
|
|
64
|
+
}
|
|
65
|
+
if (options.preferExternal === true) {
|
|
66
|
+
validateOptions.preferExternal = true;
|
|
67
|
+
}
|
|
68
|
+
return validateOptions;
|
|
69
|
+
}
|
|
70
|
+
export function toArchiveOptions(project, options) {
|
|
71
|
+
const archiveOptions = {};
|
|
72
|
+
const scan = resolveScanOptions(project);
|
|
73
|
+
if (scan.openspecRoot !== undefined) {
|
|
74
|
+
archiveOptions[ROOT_KEY] = scan.openspecRoot;
|
|
75
|
+
}
|
|
76
|
+
if (options.apply === true) {
|
|
77
|
+
archiveOptions.apply = true;
|
|
78
|
+
}
|
|
79
|
+
if (options.force === true) {
|
|
80
|
+
archiveOptions.force = true;
|
|
81
|
+
}
|
|
82
|
+
if (options.coverageSummary !== undefined) {
|
|
83
|
+
archiveOptions.coverageSummaryPath = options.coverageSummary;
|
|
84
|
+
}
|
|
85
|
+
if (options.archiveDir !== undefined) {
|
|
86
|
+
archiveOptions.archiveDirName = options.archiveDir;
|
|
87
|
+
}
|
|
88
|
+
return archiveOptions;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Per-error-code remediation hints for the archive gate.
|
|
92
|
+
* Centralized here so the catch block stays readable and the next-actions
|
|
93
|
+
* can be reviewed in isolation.
|
|
94
|
+
*/
|
|
95
|
+
export function nextActionsForArchiveError(code) {
|
|
96
|
+
switch (code) {
|
|
97
|
+
case 'OPENSPEC_COVERAGE_GATE_PARTIAL':
|
|
98
|
+
return [
|
|
99
|
+
'Update the Coverage Evidence table to mark each failing requirement as covered',
|
|
100
|
+
'Or re-run with --force to bypass the gate after confirming the gap is acceptable'
|
|
101
|
+
];
|
|
102
|
+
case 'OPENSPEC_COVERAGE_GATE_FAILED':
|
|
103
|
+
return [
|
|
104
|
+
'Add the missing Coverage Evidence or Capability Mapping block to proposal.md (see error.message)',
|
|
105
|
+
'Or re-run with --force to bypass the gate after confirming the gap is acceptable'
|
|
106
|
+
];
|
|
107
|
+
case 'OPENSPEC_COVERAGE_EVIDENCE_MALFORMED':
|
|
108
|
+
return [
|
|
109
|
+
'Fix the proposal.md Coverage Evidence table — the heading exists but no parsable rows were found',
|
|
110
|
+
'Expected shape: | capability | requirement | status | testAnchor | with status in {covered, partial, uncovered}'
|
|
111
|
+
];
|
|
112
|
+
case 'OPENSPEC_COVERAGE_EVIDENCE_MISSING':
|
|
113
|
+
return [
|
|
114
|
+
'Run `pnpm test:coverage` (which invokes scripts/coverage-c8.mjs) to generate coverage-summary.json',
|
|
115
|
+
'Or pass --coverage-summary <path> to point at an existing summary',
|
|
116
|
+
'Or re-run with --force to bypass the gate'
|
|
117
|
+
];
|
|
118
|
+
case 'OPENSPEC_COVERAGE_EVIDENCE_STALE':
|
|
119
|
+
return [
|
|
120
|
+
'Re-run `pnpm test:coverage` to refresh coverage-summary.json',
|
|
121
|
+
'Or re-run with --force to bypass the gate after confirming the source delta is acceptable'
|
|
122
|
+
];
|
|
123
|
+
case 'OPENSPEC_COVERAGE_EVIDENCE_MISMATCH':
|
|
124
|
+
return [
|
|
125
|
+
'Inspect error.detail.mismatches[] — each entry lists the failing capability, file, and actual pct',
|
|
126
|
+
'Close the coverage gap (add tests or update the Capability Mapping block in proposal.md)',
|
|
127
|
+
'Or re-run with --force to bypass the gate after confirming the gap is acceptable'
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** The `openspec.archive` failure envelope for the gate's own error class. */
|
|
132
|
+
export function printArchiveError(io, error, json) {
|
|
133
|
+
printResult(io, fail('openspec.archive', error.code, getErrorMessage(error), error.detail, nextActionsForArchiveError(error.code)), json);
|
|
134
|
+
process.exitCode = 1;
|
|
135
|
+
}
|