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
|
@@ -1,311 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
1
|
+
// src/cli/commands/openspec-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// The `openspec` parent command and the registration order of its verbs.
|
|
4
|
+
// The verb implementations live beside this file, one module per verb:
|
|
5
|
+
//
|
|
6
|
+
// openspec-command-shared.ts option shapes, flag translation, printers
|
|
7
|
+
// openspec-list-command.ts list
|
|
8
|
+
// openspec-show-command.ts show
|
|
9
|
+
// openspec-to-rd-command.ts to-rd
|
|
10
|
+
// openspec-render-command.ts render
|
|
11
|
+
// openspec-validate-command.ts validate
|
|
12
|
+
// openspec-archive-command.ts archive
|
|
13
|
+
// openspec-init-command.ts init
|
|
14
|
+
// openspec-from-doctor-command.ts from-doctor
|
|
15
|
+
//
|
|
16
|
+
// The order of the calls below IS the order commander registers the
|
|
17
|
+
// subcommands in, so it is part of the CLI's observable surface.
|
|
18
|
+
import { registerOpenSpecListCommand } from './openspec-list-command.js';
|
|
19
|
+
import { registerOpenSpecShowCommand } from './openspec-show-command.js';
|
|
20
|
+
import { registerOpenSpecToRdCommand } from './openspec-to-rd-command.js';
|
|
21
|
+
import { registerOpenSpecRenderCommand } from './openspec-render-command.js';
|
|
22
|
+
import { registerOpenSpecValidateCommand } from './openspec-validate-command.js';
|
|
23
|
+
import { registerOpenSpecArchiveCommand } from './openspec-archive-command.js';
|
|
24
|
+
import { registerOpenSpecInitCommand } from './openspec-init-command.js';
|
|
25
|
+
import { registerOpenSpecFromDoctorCommand } from './openspec-from-doctor-command.js';
|
|
27
26
|
export function registerOpenSpecCommands(program, io) {
|
|
28
27
|
const openspec = program
|
|
29
28
|
.command('openspec')
|
|
30
29
|
.description('Inspect OpenSpec changes inside the target project');
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
catch (error) {
|
|
40
|
-
printResult(io, fail('openspec.list', 'OPENSPEC_LIST_FAILED', getErrorMessage(error), {}, [
|
|
41
|
-
'Check the project path and openspec/ layout before retrying'
|
|
42
|
-
]), options.json);
|
|
43
|
-
process.exitCode = 1;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
addJsonOption(openspec
|
|
47
|
-
.command('show')
|
|
48
|
-
.description('Show parsed proposal and tasks progress for a single OpenSpec change')
|
|
49
|
-
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
50
|
-
.option('--project <path>', 'project root containing an openspec/ directory')).action(async (changeId, options) => {
|
|
51
|
-
try {
|
|
52
|
-
const detail = await loadOpenSpecChange(changeId, resolveScanOptions(options.project));
|
|
53
|
-
if (detail === null) {
|
|
54
|
-
printResult(io, fail('openspec.show', 'OPENSPEC_CHANGE_NOT_FOUND', `OpenSpec change ${changeId} was not found`, { changeId }, [`Verify openspec/changes/${changeId}/ exists`]), options.json);
|
|
55
|
-
process.exitCode = 1;
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
printResult(io, ok('openspec.show', detail), options.json);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
printResult(io, fail('openspec.show', 'OPENSPEC_SHOW_FAILED', getErrorMessage(error), { changeId }, [
|
|
62
|
-
'Check the project path and openspec/ layout before retrying'
|
|
63
|
-
]), options.json);
|
|
64
|
-
process.exitCode = 1;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
addJsonOption(openspec
|
|
68
|
-
.command('to-rd')
|
|
69
|
-
.description('Project an OpenSpec change into an RD/SC input shape (acceptance, what-changes, commit boundaries)')
|
|
70
|
-
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
71
|
-
.option('--project <path>', 'project root containing an openspec/ directory')).action(async (changeId, options) => {
|
|
72
|
-
try {
|
|
73
|
-
const projection = await projectOpenSpecToRdInput(changeId, resolveScanOptions(options.project));
|
|
74
|
-
if (projection === null) {
|
|
75
|
-
printResult(io, fail('openspec.to-rd', 'OPENSPEC_CHANGE_NOT_FOUND', `OpenSpec change ${changeId} was not found`, { changeId }, [`Verify openspec/changes/${changeId}/ exists`]), options.json);
|
|
76
|
-
process.exitCode = 1;
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
printResult(io, ok('openspec.to-rd', projection), options.json);
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
printResult(io, fail('openspec.to-rd', 'OPENSPEC_TO_RD_FAILED', getErrorMessage(error), { changeId }, [
|
|
83
|
-
'Check the project path and openspec/ layout before retrying'
|
|
84
|
-
]), options.json);
|
|
85
|
-
process.exitCode = 1;
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
addJsonOption(openspec
|
|
89
|
-
.command('render')
|
|
90
|
-
.description('Render an OpenSpec change pack from a JSON request file (dry-run by default)')
|
|
91
|
-
.requiredOption('--request <path>', 'path to a JSON file describing the render request')
|
|
92
|
-
.option('--project <path>', 'project root containing an openspec/ directory')
|
|
93
|
-
.option('--apply', 'write the rendered files into openspec/changes/<id>/')
|
|
94
|
-
.option('--overwrite', 'overwrite an existing change directory when --apply is set')).action(async (options) => {
|
|
95
|
-
try {
|
|
96
|
-
const request = await loadRenderRequest(options.request);
|
|
97
|
-
const scan = resolveScanOptions(options.project);
|
|
98
|
-
const renderOptions = {};
|
|
99
|
-
if (scan.openspecRoot !== undefined) {
|
|
100
|
-
renderOptions.openspecRoot = scan.openspecRoot;
|
|
101
|
-
}
|
|
102
|
-
if (options.apply === true) {
|
|
103
|
-
renderOptions.apply = true;
|
|
104
|
-
}
|
|
105
|
-
if (options.overwrite === true) {
|
|
106
|
-
renderOptions.overwrite = true;
|
|
107
|
-
}
|
|
108
|
-
const result = await renderOpenSpecChange(request, renderOptions);
|
|
109
|
-
printResult(io, ok('openspec.render', result), options.json);
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
printResult(io, fail('openspec.render', 'OPENSPEC_RENDER_FAILED', getErrorMessage(error), { requestPath: options.request }, ['Check the request JSON shape and the openspec root before retrying']), options.json);
|
|
113
|
-
process.exitCode = 1;
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
addJsonOption(openspec
|
|
117
|
-
.command('validate')
|
|
118
|
-
.description('Validate an OpenSpec change against internal lint rules (and optionally the external openspec CLI)')
|
|
119
|
-
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
120
|
-
.option('--project <path>', 'project root containing an openspec/ directory')
|
|
121
|
-
.option('--prefer-external', 'use the external openspec CLI when available, fall back to internal lint')).action(async (changeId, options) => {
|
|
122
|
-
try {
|
|
123
|
-
const scan = resolveScanOptions(options.project);
|
|
124
|
-
const validateOptions = {};
|
|
125
|
-
if (scan.openspecRoot !== undefined) {
|
|
126
|
-
validateOptions.openspecRoot = scan.openspecRoot;
|
|
127
|
-
}
|
|
128
|
-
if (options.preferExternal === true) {
|
|
129
|
-
validateOptions.preferExternal = true;
|
|
130
|
-
}
|
|
131
|
-
const result = await validateOpenSpecChange(changeId, validateOptions);
|
|
132
|
-
if (result === null) {
|
|
133
|
-
printResult(io, fail('openspec.validate', 'OPENSPEC_CHANGE_NOT_FOUND', `OpenSpec change ${changeId} was not found`, { changeId }, [`Verify openspec/changes/${changeId}/ exists`]), options.json);
|
|
134
|
-
process.exitCode = 1;
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
if (!result.valid) {
|
|
138
|
-
printResult(io, fail('openspec.validate', 'OPENSPEC_VALIDATE_INVALID', `OpenSpec change ${changeId} failed validation`, result, result.issues.map((issue) => `${issue.level}: ${issue.rule}: ${issue.message}`)), options.json);
|
|
139
|
-
process.exitCode = 1;
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
printResult(io, ok('openspec.validate', result, result.issues
|
|
143
|
-
.filter((issue) => issue.level === 'warning')
|
|
144
|
-
.map((issue) => `${issue.rule}: ${issue.message}`)), options.json);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
printResult(io, fail('openspec.validate', 'OPENSPEC_VALIDATE_FAILED', getErrorMessage(error), { changeId }, ['Check the project path and openspec/ layout before retrying']), options.json);
|
|
148
|
-
process.exitCode = 1;
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
addJsonOption(openspec
|
|
152
|
-
.command('archive')
|
|
153
|
-
.description('Move an OpenSpec change under openspec/changes/<archiveDir>/<id>/ (dry-run by default)')
|
|
154
|
-
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
155
|
-
.option('--project <path>', 'project root containing an openspec/ directory')
|
|
156
|
-
.option('--apply', 'actually move the change directory')
|
|
157
|
-
.option('--force', 'bypass the Pre-cond 2 Coverage Evidence gate (use only after confirming the gap is acceptable for this archive)')
|
|
158
|
-
.option('--coverage-summary <path>', 'override coverage-summary.json discovery (Fix-6B). Default: <projectRoot>/coverage/coverage-summary.json, then <projectRoot>/openspec/coverage-summary.json')
|
|
159
|
-
.option('--archive-dir <name>', 'archive subdirectory name (default: archive)')).action(async (changeId, options) => {
|
|
160
|
-
try {
|
|
161
|
-
const scan = resolveScanOptions(options.project);
|
|
162
|
-
const archiveOptions = {};
|
|
163
|
-
if (scan.openspecRoot !== undefined) {
|
|
164
|
-
archiveOptions.openspecRoot = scan.openspecRoot;
|
|
165
|
-
}
|
|
166
|
-
if (options.apply === true) {
|
|
167
|
-
archiveOptions.apply = true;
|
|
168
|
-
}
|
|
169
|
-
if (options.force === true) {
|
|
170
|
-
archiveOptions.force = true;
|
|
171
|
-
}
|
|
172
|
-
if (options.coverageSummary !== undefined) {
|
|
173
|
-
archiveOptions.coverageSummaryPath = options.coverageSummary;
|
|
174
|
-
}
|
|
175
|
-
if (options.archiveDir !== undefined) {
|
|
176
|
-
archiveOptions.archiveDirName = options.archiveDir;
|
|
177
|
-
}
|
|
178
|
-
const result = await archiveOpenSpecChange(changeId, archiveOptions);
|
|
179
|
-
if (result === null) {
|
|
180
|
-
printResult(io, fail('openspec.archive', 'OPENSPEC_CHANGE_NOT_FOUND', `OpenSpec change ${changeId} was not found`, { changeId }, [`Verify openspec/changes/${changeId}/ exists`]), options.json);
|
|
181
|
-
process.exitCode = 1;
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const warnings = [];
|
|
185
|
-
if (result.coverageGateBypassed === true) {
|
|
186
|
-
warnings.push('Coverage gate bypassed via --force; archived with at least one uncovered requirement.');
|
|
187
|
-
}
|
|
188
|
-
if (result.coverageMismatchBypassed === true) {
|
|
189
|
-
warnings.push('Coverage summary mismatch bypassed via --force; archived with at least one capability below 100%.');
|
|
190
|
-
}
|
|
191
|
-
printResult(io, ok('openspec.archive', result, warnings, result.applied ? [] : [`Re-run with --apply to move ${result.from} → ${result.to}`]), options.json);
|
|
192
|
-
}
|
|
193
|
-
catch (error) {
|
|
194
|
-
if (error instanceof OpenSpecArchiveError) {
|
|
195
|
-
printResult(io, fail('openspec.archive', error.code, getErrorMessage(error), error.detail, nextActionsForArchiveError(error.code)), options.json);
|
|
196
|
-
process.exitCode = 1;
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
printResult(io, fail('openspec.archive', 'OPENSPEC_ARCHIVE_FAILED', getErrorMessage(error), { changeId }, [
|
|
200
|
-
'Check the project path and openspec/ layout before retrying'
|
|
201
|
-
]), options.json);
|
|
202
|
-
process.exitCode = 1;
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
addJsonOption(openspec
|
|
206
|
-
.command('init')
|
|
207
|
-
.description('Scaffold the openspec/ directory in the target project (changes/, archive/, README.md, CHANGES.md). Idempotent — refuses to overwrite an existing openspec/')
|
|
208
|
-
.requiredOption('--project <path>', 'target project root')
|
|
209
|
-
.option('--apply', 'write files to disk (default: dry-run preview)', false)).action(async (options) => {
|
|
210
|
-
try {
|
|
211
|
-
const result = await executeOpenSpecInit({
|
|
212
|
-
projectRoot: options.project,
|
|
213
|
-
apply: options.apply === true
|
|
214
|
-
});
|
|
215
|
-
const nextActions = [];
|
|
216
|
-
if (result.alreadyInitialized) {
|
|
217
|
-
nextActions.push('openspec/ already exists; no files were created or modified.');
|
|
218
|
-
if (result.existingFiles.length > 0) {
|
|
219
|
-
nextActions.push(`Existing files preserved: ${result.existingFiles.join(', ')}`);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
else if (!result.apply) {
|
|
223
|
-
nextActions.push('Re-run with --apply to write the planned files to disk.');
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
nextActions.push('Run `peaks openspec render --request <path> --apply` to scaffold a first change proposal.');
|
|
227
|
-
}
|
|
228
|
-
printResult(io, ok('openspec.init', result, [], nextActions), options.json);
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
printResult(io, fail('openspec.init', 'OPENSPEC_INIT_FAILED', getErrorMessage(error), { projectRoot: options.project }, ['Verify the project path exists and is writable']), options.json);
|
|
232
|
-
process.exitCode = 1;
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
addJsonOption(openspec
|
|
236
|
-
.command('from-doctor')
|
|
237
|
-
.description('Slice L3.3: generate an OpenSpec change draft (proposal.md) from a peaks doctor finding')
|
|
238
|
-
.requiredOption('--project <path>', 'target project root')
|
|
239
|
-
.requiredOption('--check-id <id>', 'the doctor check id to draft from (e.g. L3:l3-memory-health)')).action(async (options) => {
|
|
240
|
-
try {
|
|
241
|
-
const report = await runDoctor();
|
|
242
|
-
const finding = report.checks.find((c) => c.id === options.checkId);
|
|
243
|
-
if (finding === undefined) {
|
|
244
|
-
printResult(io, fail('openspec.from-doctor', 'CHECK_NOT_FOUND', `No doctor check with id "${options.checkId}"`, { availableIds: report.checks.map((c) => c.id) }, ['Run peaks doctor --json to list available check ids']), options.json);
|
|
245
|
-
process.exitCode = 1;
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
if (finding.ok) {
|
|
249
|
-
printResult(io, fail('openspec.from-doctor', 'CHECK_ALREADY_PASSING', `Doctor check "${options.checkId}" is already passing; nothing to draft`, { checkId: options.checkId }, ['Pick a failing check from peaks doctor --json']), options.json);
|
|
250
|
-
process.exitCode = 1;
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
const doctorFinding = {
|
|
254
|
-
id: finding.id,
|
|
255
|
-
rule: finding.rule ?? finding.id,
|
|
256
|
-
detail: finding.message,
|
|
257
|
-
severity: 'fail'
|
|
258
|
-
};
|
|
259
|
-
const result = proposeFromDoctor({ projectRoot: options.project, finding: doctorFinding });
|
|
260
|
-
printResult(io, ok('openspec.from-doctor', result, [], [
|
|
261
|
-
`draft proposal written to ${result.proposalPath}`,
|
|
262
|
-
'Review + edit the draft, then run `peaks openspec validate <id>`'
|
|
263
|
-
]), options.json);
|
|
264
|
-
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
printResult(io, fail('openspec.from-doctor', 'OPENSPEC_FROM_DOCTOR_FAILED', getErrorMessage(error), { projectRoot: options.project, checkId: options.checkId }, ['Verify the project path and the check id']), options.json);
|
|
267
|
-
process.exitCode = 1;
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Per-error-code remediation hints for the archive gate.
|
|
273
|
-
* Centralized here so the catch block stays readable and the next-actions
|
|
274
|
-
* can be reviewed in isolation.
|
|
275
|
-
*/
|
|
276
|
-
function nextActionsForArchiveError(code) {
|
|
277
|
-
switch (code) {
|
|
278
|
-
case 'OPENSPEC_COVERAGE_GATE_PARTIAL':
|
|
279
|
-
return [
|
|
280
|
-
'Update the Coverage Evidence table to mark each failing requirement as covered',
|
|
281
|
-
'Or re-run with --force to bypass the gate after confirming the gap is acceptable'
|
|
282
|
-
];
|
|
283
|
-
case 'OPENSPEC_COVERAGE_GATE_FAILED':
|
|
284
|
-
return [
|
|
285
|
-
'Add the missing Coverage Evidence or Capability Mapping block to proposal.md (see error.message)',
|
|
286
|
-
'Or re-run with --force to bypass the gate after confirming the gap is acceptable'
|
|
287
|
-
];
|
|
288
|
-
case 'OPENSPEC_COVERAGE_EVIDENCE_MALFORMED':
|
|
289
|
-
return [
|
|
290
|
-
'Fix the proposal.md Coverage Evidence table — the heading exists but no parsable rows were found',
|
|
291
|
-
'Expected shape: | capability | requirement | status | testAnchor | with status in {covered, partial, uncovered}'
|
|
292
|
-
];
|
|
293
|
-
case 'OPENSPEC_COVERAGE_EVIDENCE_MISSING':
|
|
294
|
-
return [
|
|
295
|
-
'Run `pnpm test:coverage` (which invokes scripts/coverage-c8.mjs) to generate coverage-summary.json',
|
|
296
|
-
'Or pass --coverage-summary <path> to point at an existing summary',
|
|
297
|
-
'Or re-run with --force to bypass the gate'
|
|
298
|
-
];
|
|
299
|
-
case 'OPENSPEC_COVERAGE_EVIDENCE_STALE':
|
|
300
|
-
return [
|
|
301
|
-
'Re-run `pnpm test:coverage` to refresh coverage-summary.json',
|
|
302
|
-
'Or re-run with --force to bypass the gate after confirming the source delta is acceptable'
|
|
303
|
-
];
|
|
304
|
-
case 'OPENSPEC_COVERAGE_EVIDENCE_MISMATCH':
|
|
305
|
-
return [
|
|
306
|
-
'Inspect error.detail.mismatches[] — each entry lists the failing capability, file, and actual pct',
|
|
307
|
-
'Close the coverage gap (add tests or update the Capability Mapping block in proposal.md)',
|
|
308
|
-
'Or re-run with --force to bypass the gate after confirming the gap is acceptable'
|
|
309
|
-
];
|
|
310
|
-
}
|
|
30
|
+
registerOpenSpecListCommand(openspec, io);
|
|
31
|
+
registerOpenSpecShowCommand(openspec, io);
|
|
32
|
+
registerOpenSpecToRdCommand(openspec, io);
|
|
33
|
+
registerOpenSpecRenderCommand(openspec, io);
|
|
34
|
+
registerOpenSpecValidateCommand(openspec, io);
|
|
35
|
+
registerOpenSpecArchiveCommand(openspec, io);
|
|
36
|
+
registerOpenSpecInitCommand(openspec, io);
|
|
37
|
+
registerOpenSpecFromDoctorCommand(openspec, io);
|
|
311
38
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// src/cli/commands/openspec-from-doctor-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec from-doctor` — draft a change proposal from a failing
|
|
4
|
+
// `peaks doctor` check. Extracted from `openspec-commands.ts`; the registered
|
|
5
|
+
// name, description, options and envelopes are unchanged.
|
|
6
|
+
import { proposeFromDoctor } from '../../services/openspec/openspec-propose-from-doctor-service.js';
|
|
7
|
+
import { runDoctor } from '../../services/doctor/index.js';
|
|
8
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
9
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
10
|
+
import { failOpenSpec } from './openspec-command-shared.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve `--check-id` against the live doctor report. A missing id or an
|
|
13
|
+
* already-passing check both print their own envelope and return null; the
|
|
14
|
+
* caller stops without writing a draft.
|
|
15
|
+
*/
|
|
16
|
+
function draftFromDoctor(io, report, options) {
|
|
17
|
+
const finding = report.checks.find((c) => c.id === options.checkId);
|
|
18
|
+
if (finding === undefined) {
|
|
19
|
+
printResult(io, fail('openspec.from-doctor', 'CHECK_NOT_FOUND', `No doctor check with id "${options.checkId}"`, { availableIds: report.checks.map((c) => c.id) }, ['Run peaks doctor --json to list available check ids']), options.json);
|
|
20
|
+
process.exitCode = 1;
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (finding.ok) {
|
|
24
|
+
printResult(io, fail('openspec.from-doctor', 'CHECK_ALREADY_PASSING', `Doctor check "${options.checkId}" is already passing; nothing to draft`, { checkId: options.checkId }, ['Pick a failing check from peaks doctor --json']), options.json);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
id: finding.id,
|
|
30
|
+
rule: finding.rule ?? finding.id,
|
|
31
|
+
detail: finding.message,
|
|
32
|
+
severity: 'fail'
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function registerOpenSpecFromDoctorCommand(openspec, io) {
|
|
36
|
+
// Slice L3.3: from-doctor — auto-generate an OpenSpec change record
|
|
37
|
+
// (proposal.md) from a doctor finding. The LLM then reviews + edits
|
|
38
|
+
// the draft before peaks openspec validate will accept it.
|
|
39
|
+
addJsonOption(openspec
|
|
40
|
+
.command('from-doctor')
|
|
41
|
+
.description('Slice L3.3: generate an OpenSpec change draft (proposal.md) from a peaks doctor finding')
|
|
42
|
+
.requiredOption('--project <path>', 'target project root')
|
|
43
|
+
.requiredOption('--check-id <id>', 'the doctor check id to draft from (e.g. L3:l3-memory-health)')).action(async (options) => {
|
|
44
|
+
try {
|
|
45
|
+
const report = await runDoctor();
|
|
46
|
+
const finding = draftFromDoctor(io, report, options);
|
|
47
|
+
if (finding === null) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const result = proposeFromDoctor({ projectRoot: options.project, finding });
|
|
51
|
+
printResult(io, ok('openspec.from-doctor', result, [], [
|
|
52
|
+
`draft proposal written to ${result.proposalPath}`,
|
|
53
|
+
'Review + edit the draft, then run `peaks openspec validate <id>`'
|
|
54
|
+
]), options.json);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
failOpenSpec(io, 'openspec.from-doctor', {
|
|
58
|
+
code: 'OPENSPEC_FROM_DOCTOR_FAILED',
|
|
59
|
+
error,
|
|
60
|
+
data: { projectRoot: options.project, checkId: options.checkId },
|
|
61
|
+
nextActions: ['Verify the project path and the check id'],
|
|
62
|
+
json: options.json
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// src/cli/commands/openspec-init-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec init --project <root>`. Extracted from
|
|
4
|
+
// `openspec-commands.ts`; the registered name, description, options and
|
|
5
|
+
// envelopes are unchanged.
|
|
6
|
+
import { executeOpenSpecInit } from '../../services/openspec/openspec-init-service.js';
|
|
7
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
8
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
9
|
+
import { failOpenSpec } from './openspec-command-shared.js';
|
|
10
|
+
/** The `openspec.init` follow-up lines; one branch per scaffold outcome. */
|
|
11
|
+
function initNextActions(result) {
|
|
12
|
+
if (result.alreadyInitialized) {
|
|
13
|
+
const nextActions = ['openspec/ already exists; no files were created or modified.'];
|
|
14
|
+
if (result.existingFiles.length > 0) {
|
|
15
|
+
nextActions.push(`Existing files preserved: ${result.existingFiles.join(', ')}`);
|
|
16
|
+
}
|
|
17
|
+
return nextActions;
|
|
18
|
+
}
|
|
19
|
+
if (!result.apply) {
|
|
20
|
+
return ['Re-run with --apply to write the planned files to disk.'];
|
|
21
|
+
}
|
|
22
|
+
return [
|
|
23
|
+
'Run `peaks openspec render --request <path> --apply` to scaffold a first change proposal.'
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
export function registerOpenSpecInitCommand(openspec, io) {
|
|
27
|
+
addJsonOption(openspec
|
|
28
|
+
.command('init')
|
|
29
|
+
.description('Scaffold the openspec/ directory in the target project (changes/, archive/, README.md, CHANGES.md). Idempotent — refuses to overwrite an existing openspec/')
|
|
30
|
+
.requiredOption('--project <path>', 'target project root')
|
|
31
|
+
.option('--apply', 'write files to disk (default: dry-run preview)', false)).action(async (options) => {
|
|
32
|
+
try {
|
|
33
|
+
const result = await executeOpenSpecInit({
|
|
34
|
+
projectRoot: options.project,
|
|
35
|
+
apply: options.apply === true
|
|
36
|
+
});
|
|
37
|
+
printResult(io, ok('openspec.init', result, [], initNextActions(result)), options.json);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
failOpenSpec(io, 'openspec.init', {
|
|
41
|
+
code: 'OPENSPEC_INIT_FAILED',
|
|
42
|
+
error,
|
|
43
|
+
data: { projectRoot: options.project },
|
|
44
|
+
nextActions: ['Verify the project path exists and is writable'],
|
|
45
|
+
json: options.json
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/cli/commands/openspec-list-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec list`. Extracted from `openspec-commands.ts`; the registered
|
|
4
|
+
// name, description, options and envelopes are unchanged.
|
|
5
|
+
import { scanOpenSpec } from '../../services/openspec/openspec-scan-service.js';
|
|
6
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
8
|
+
import { failOpenSpec, OPENSPEC_PATH_HINT, resolveScanOptions } from './openspec-command-shared.js';
|
|
9
|
+
export function registerOpenSpecListCommand(openspec, io) {
|
|
10
|
+
addJsonOption(openspec
|
|
11
|
+
.command('list')
|
|
12
|
+
.description('List OpenSpec changes detected under <project>/openspec/changes')
|
|
13
|
+
.option('--project <path>', 'project root containing an openspec/ directory')).action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
const report = await scanOpenSpec(resolveScanOptions(options.project));
|
|
16
|
+
printResult(io, ok('openspec.list', report), options.json);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
failOpenSpec(io, 'openspec.list', {
|
|
20
|
+
code: 'OPENSPEC_LIST_FAILED',
|
|
21
|
+
error,
|
|
22
|
+
nextActions: OPENSPEC_PATH_HINT,
|
|
23
|
+
json: options.json
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// src/cli/commands/openspec-render-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec render --request <path>`. Extracted from
|
|
4
|
+
// `openspec-commands.ts`; the registered name, description, options and
|
|
5
|
+
// envelopes are unchanged.
|
|
6
|
+
import { renderOpenSpecChange } from '../../services/openspec/openspec-render-service.js';
|
|
7
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
8
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
9
|
+
import { failOpenSpec, loadRenderRequest, toRenderOptions } from './openspec-command-shared.js';
|
|
10
|
+
export function registerOpenSpecRenderCommand(openspec, io) {
|
|
11
|
+
addJsonOption(openspec
|
|
12
|
+
.command('render')
|
|
13
|
+
.description('Render an OpenSpec change pack from a JSON request file (dry-run by default)')
|
|
14
|
+
.requiredOption('--request <path>', 'path to a JSON file describing the render request')
|
|
15
|
+
.option('--project <path>', 'project root containing an openspec/ directory')
|
|
16
|
+
.option('--apply', 'write the rendered files into openspec/changes/<id>/')
|
|
17
|
+
.option('--overwrite', 'overwrite an existing change directory when --apply is set')).action(async (options) => {
|
|
18
|
+
try {
|
|
19
|
+
const request = await loadRenderRequest(options.request);
|
|
20
|
+
const result = await renderOpenSpecChange(request, toRenderOptions(options.project, options));
|
|
21
|
+
printResult(io, ok('openspec.render', result), options.json);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
failOpenSpec(io, 'openspec.render', {
|
|
25
|
+
code: 'OPENSPEC_RENDER_FAILED',
|
|
26
|
+
error,
|
|
27
|
+
data: { requestPath: options.request },
|
|
28
|
+
nextActions: ['Check the request JSON shape and the openspec root before retrying'],
|
|
29
|
+
json: options.json
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// src/cli/commands/openspec-show-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec show <changeId>`. Extracted from `openspec-commands.ts`; the
|
|
4
|
+
// registered name, description, options and envelopes are unchanged.
|
|
5
|
+
import { loadOpenSpecChange } from '../../services/openspec/openspec-scan-service.js';
|
|
6
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
8
|
+
import { failOpenSpec, OPENSPEC_PATH_HINT, printChangeNotFound, resolveScanOptions } from './openspec-command-shared.js';
|
|
9
|
+
export function registerOpenSpecShowCommand(openspec, io) {
|
|
10
|
+
addJsonOption(openspec
|
|
11
|
+
.command('show')
|
|
12
|
+
.description('Show parsed proposal and tasks progress for a single OpenSpec change')
|
|
13
|
+
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
14
|
+
.option('--project <path>', 'project root containing an openspec/ directory')).action(async (changeId, options) => {
|
|
15
|
+
try {
|
|
16
|
+
const detail = await loadOpenSpecChange(changeId, resolveScanOptions(options.project));
|
|
17
|
+
if (detail === null) {
|
|
18
|
+
printChangeNotFound(io, 'openspec.show', changeId, options.json);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
printResult(io, ok('openspec.show', detail), options.json);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
failOpenSpec(io, 'openspec.show', {
|
|
25
|
+
code: 'OPENSPEC_SHOW_FAILED',
|
|
26
|
+
error,
|
|
27
|
+
data: { changeId },
|
|
28
|
+
nextActions: OPENSPEC_PATH_HINT,
|
|
29
|
+
json: options.json
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// src/cli/commands/openspec-to-rd-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks openspec to-rd <changeId>`. Extracted from `openspec-commands.ts`; the
|
|
4
|
+
// registered name, description, options and envelopes are unchanged.
|
|
5
|
+
import { projectOpenSpecToRdInput } from '../../services/openspec/openspec-bridge-service.js';
|
|
6
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
8
|
+
import { failOpenSpec, OPENSPEC_PATH_HINT, printChangeNotFound, resolveScanOptions } from './openspec-command-shared.js';
|
|
9
|
+
export function registerOpenSpecToRdCommand(openspec, io) {
|
|
10
|
+
addJsonOption(openspec
|
|
11
|
+
.command('to-rd')
|
|
12
|
+
.description('Project an OpenSpec change into an RD/SC input shape (acceptance, what-changes, commit boundaries)')
|
|
13
|
+
.argument('<changeId>', 'OpenSpec change directory name under openspec/changes')
|
|
14
|
+
.option('--project <path>', 'project root containing an openspec/ directory')).action(async (changeId, options) => {
|
|
15
|
+
try {
|
|
16
|
+
const projection = await projectOpenSpecToRdInput(changeId, resolveScanOptions(options.project));
|
|
17
|
+
if (projection === null) {
|
|
18
|
+
printChangeNotFound(io, 'openspec.to-rd', changeId, options.json);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
printResult(io, ok('openspec.to-rd', projection), options.json);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
failOpenSpec(io, 'openspec.to-rd', {
|
|
25
|
+
code: 'OPENSPEC_TO_RD_FAILED',
|
|
26
|
+
error,
|
|
27
|
+
data: { changeId },
|
|
28
|
+
nextActions: OPENSPEC_PATH_HINT,
|
|
29
|
+
json: options.json
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|