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,160 @@
|
|
|
1
|
+
// src/cli/commands/sop-advance-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks sop advance` — advance a SOP to a phase, enforcing the gate-bypass
|
|
4
|
+
// policy. Split out of `sop-commands.ts`; every refusal code, message, `data`
|
|
5
|
+
// field, next-action string and exit code is unchanged.
|
|
6
|
+
import { mkdirSync } from 'node:fs';
|
|
7
|
+
import { advanceSop, SopAdvanceError, SopGateBlockedError, SopPhaseSkipError } from '../../services/sop/sop-advance-service.js';
|
|
8
|
+
import { sopStateDir } from '../../services/sop/sop-paths.js';
|
|
9
|
+
import { getSkillPresence } from '../../services/skills/skill-presence-service.js';
|
|
10
|
+
import { isBypassLimitReached, MAX_BYPASSES_PER_SESSION, recordBypass } from '../../services/mode/bypass-tracker.js';
|
|
11
|
+
import { addJsonOption, getErrorMessage } from '../cli-helpers.js';
|
|
12
|
+
import { printSopFailure, printSopOk } from './sop-command-shared.js';
|
|
13
|
+
/**
|
|
14
|
+
* The bypass policy `request transition` also runs: a bypass needs a reason,
|
|
15
|
+
* and in assisted/strict mode (resolved from the target project) it needs an
|
|
16
|
+
* explicit `--confirm` and counts against the per-SOP bypass cap.
|
|
17
|
+
*
|
|
18
|
+
* Returns false when a refusal envelope was printed and the caller must stop.
|
|
19
|
+
*/
|
|
20
|
+
function enforceBypassPolicy(io, options) {
|
|
21
|
+
if (options.allowIncomplete !== true)
|
|
22
|
+
return true;
|
|
23
|
+
if (options.reason === undefined || options.reason.trim().length === 0) {
|
|
24
|
+
printSopFailure(io, {
|
|
25
|
+
json: options.json,
|
|
26
|
+
command: 'sop.advance',
|
|
27
|
+
code: 'BYPASS_REASON_REQUIRED',
|
|
28
|
+
message: '--allow-incomplete requires --reason explaining why the gates are skipped',
|
|
29
|
+
data: { id: options.id, to: options.to },
|
|
30
|
+
nextActions: ['Add --reason "<short justification>" or satisfy the gates']
|
|
31
|
+
});
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (options.forceConfirm === true)
|
|
35
|
+
return true;
|
|
36
|
+
const presence = getSkillPresence(options.project);
|
|
37
|
+
if (presence?.mode !== 'assisted' && presence?.mode !== 'strict')
|
|
38
|
+
return true;
|
|
39
|
+
if (options.confirm !== true) {
|
|
40
|
+
printSopFailure(io, {
|
|
41
|
+
json: options.json,
|
|
42
|
+
command: 'sop.advance',
|
|
43
|
+
code: 'ALLOW_INCOMPLETE_RESTRICTED',
|
|
44
|
+
message: `--allow-incomplete requires --confirm in ${presence.mode} mode`,
|
|
45
|
+
data: { id: options.id, mode: presence.mode },
|
|
46
|
+
nextActions: ['Add --confirm to bypass non-interactively']
|
|
47
|
+
});
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
// The bypass counter is keyed to the per-project SOP run-state dir (not a
|
|
51
|
+
// session); the shared cap constant is reused. Keying it per-project means a
|
|
52
|
+
// bypass in one project never consumes another project's budget. The state
|
|
53
|
+
// dir may not exist yet (no successful advance has written state.json), so
|
|
54
|
+
// ensure it before the counter writes its file.
|
|
55
|
+
const bypassRoot = sopStateDir(options.project, options.id);
|
|
56
|
+
mkdirSync(bypassRoot, { recursive: true });
|
|
57
|
+
if (isBypassLimitReached(bypassRoot)) {
|
|
58
|
+
printSopFailure(io, {
|
|
59
|
+
json: options.json,
|
|
60
|
+
command: 'sop.advance',
|
|
61
|
+
code: 'BYPASS_LIMIT_REACHED',
|
|
62
|
+
message: `gate bypass limit reached (${MAX_BYPASSES_PER_SESSION} bypasses per SOP)`,
|
|
63
|
+
data: { id: options.id, limit: MAX_BYPASSES_PER_SESSION },
|
|
64
|
+
nextActions: ['Satisfy the gates instead of bypassing']
|
|
65
|
+
});
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
// A dry-run preview must not consume a bypass.
|
|
69
|
+
if (options.dryRun !== true) {
|
|
70
|
+
recordBypass(bypassRoot);
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/** The three typed refusals `advanceSop` can raise, then the generic one. */
|
|
75
|
+
function emitAdvanceError(io, options, error) {
|
|
76
|
+
if (error instanceof SopGateBlockedError) {
|
|
77
|
+
printSopFailure(io, {
|
|
78
|
+
json: options.json,
|
|
79
|
+
command: 'sop.advance',
|
|
80
|
+
code: error.code,
|
|
81
|
+
message: error.message,
|
|
82
|
+
data: { id: options.id, to: options.to, blockedGates: error.blockedGates },
|
|
83
|
+
nextActions: [
|
|
84
|
+
'Satisfy the blocking gates, or bypass with --allow-incomplete --reason "<why>"'
|
|
85
|
+
]
|
|
86
|
+
});
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (error instanceof SopPhaseSkipError) {
|
|
90
|
+
printSopFailure(io, {
|
|
91
|
+
json: options.json,
|
|
92
|
+
command: 'sop.advance',
|
|
93
|
+
code: error.code,
|
|
94
|
+
message: error.message,
|
|
95
|
+
data: {
|
|
96
|
+
id: options.id,
|
|
97
|
+
to: options.to,
|
|
98
|
+
fromPhase: error.fromPhase,
|
|
99
|
+
expectedNext: error.expectedNext
|
|
100
|
+
},
|
|
101
|
+
nextActions: [
|
|
102
|
+
`Advance to "${error.expectedNext}" first, or bypass with --allow-incomplete --reason "<why>"`
|
|
103
|
+
]
|
|
104
|
+
});
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
printSopFailure(io, {
|
|
108
|
+
json: options.json,
|
|
109
|
+
command: 'sop.advance',
|
|
110
|
+
code: error instanceof SopAdvanceError ? error.code : 'SOP_ADVANCE_FAILED',
|
|
111
|
+
message: getErrorMessage(error),
|
|
112
|
+
data: { id: options.id, to: options.to },
|
|
113
|
+
nextActions: ['Verify the SOP id and phase with peaks sop lint']
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function runSopAdvance(io, options) {
|
|
117
|
+
try {
|
|
118
|
+
if (!enforceBypassPolicy(io, options))
|
|
119
|
+
return;
|
|
120
|
+
const advanceOptions = {
|
|
121
|
+
projectRoot: options.project,
|
|
122
|
+
id: options.id,
|
|
123
|
+
toPhase: options.to
|
|
124
|
+
};
|
|
125
|
+
if (options.allowCommands === true)
|
|
126
|
+
advanceOptions.allowCommands = true;
|
|
127
|
+
if (options.allowIncomplete === true)
|
|
128
|
+
advanceOptions.allowIncomplete = true;
|
|
129
|
+
if (options.reason !== undefined)
|
|
130
|
+
advanceOptions.reason = options.reason;
|
|
131
|
+
if (options.dryRun === true)
|
|
132
|
+
advanceOptions.dryRun = true;
|
|
133
|
+
const result = await advanceSop(advanceOptions);
|
|
134
|
+
printSopOk(io, {
|
|
135
|
+
json: options.json,
|
|
136
|
+
command: 'sop.advance',
|
|
137
|
+
data: result,
|
|
138
|
+
nextActions: result.applied
|
|
139
|
+
? []
|
|
140
|
+
: ['Gates passed; re-run without --dry-run to record the advance']
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
emitAdvanceError(io, options, error);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export function registerSopAdvanceCommand(sop, io) {
|
|
148
|
+
addJsonOption(sop
|
|
149
|
+
.command('advance')
|
|
150
|
+
.description('Advance a SOP to a phase; gates guarding that phase must pass (or be explicitly bypassed)')
|
|
151
|
+
.requiredOption('--id <sop-id>', 'SOP id')
|
|
152
|
+
.requiredOption('--to <phase>', 'phase to advance into')
|
|
153
|
+
.option('--project <path>', 'project whose run-state advances (default: current directory)', '.')
|
|
154
|
+
.option('--allow-commands', 'permit evaluating command-type gates')
|
|
155
|
+
.option('--allow-incomplete', 'bypass the phase gates AND phase-order check (requires --reason)')
|
|
156
|
+
.option('--reason <text>', 'justification recorded when bypassing gates')
|
|
157
|
+
.option('--confirm', 'skip interactive confirmation for a bypass in assisted/strict mode')
|
|
158
|
+
.option('--force-confirm', 'bypass mode-enforced confirmation (use with caution)')
|
|
159
|
+
.option('--dry-run', 'evaluate gates without recording the advance in state.json')).action((options) => runSopAdvance(io, options));
|
|
160
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// src/cli/commands/sop-check-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks sop check` — evaluate a single SOP gate. Split out of
|
|
4
|
+
// `sop-commands.ts`; the verb name, its options, its envelope fields and its
|
|
5
|
+
// next-action strings are unchanged.
|
|
6
|
+
import { checkGate, SopCheckError } from '../../services/sop/sop-check-service.js';
|
|
7
|
+
import { addJsonOption, getErrorMessage } from '../cli-helpers.js';
|
|
8
|
+
import { printSopFailure, printSopOk } from './sop-command-shared.js';
|
|
9
|
+
async function runSopCheck(io, options) {
|
|
10
|
+
try {
|
|
11
|
+
const checkOptions = {
|
|
12
|
+
projectRoot: options.project,
|
|
13
|
+
id: options.id,
|
|
14
|
+
gateId: options.gate
|
|
15
|
+
};
|
|
16
|
+
if (options.allowCommands === true) {
|
|
17
|
+
checkOptions.allowCommands = true;
|
|
18
|
+
}
|
|
19
|
+
printSopOk(io, {
|
|
20
|
+
json: options.json,
|
|
21
|
+
command: 'sop.check',
|
|
22
|
+
data: await checkGate(checkOptions)
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
printSopFailure(io, {
|
|
27
|
+
json: options.json,
|
|
28
|
+
command: 'sop.check',
|
|
29
|
+
code: error instanceof SopCheckError ? error.code : 'SOP_CHECK_FAILED',
|
|
30
|
+
message: getErrorMessage(error),
|
|
31
|
+
data: { id: options.id, gateId: options.gate },
|
|
32
|
+
nextActions: ['Verify the SOP id and gate id with peaks sop lint']
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function registerSopCheckCommand(sop, io) {
|
|
37
|
+
addJsonOption(sop
|
|
38
|
+
.command('check')
|
|
39
|
+
.description('Evaluate a single SOP gate (returns pass / fail / blocked)')
|
|
40
|
+
.requiredOption('--id <sop-id>', 'SOP id')
|
|
41
|
+
.requiredOption('--gate <gate-id>', 'gate id within the SOP')
|
|
42
|
+
.option('--project <path>', 'project the gate evaluates against (default: current directory)', '.')
|
|
43
|
+
.option('--allow-commands', 'permit evaluating command-type gates')).action((options) => runSopCheck(io, options));
|
|
44
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
2
|
+
/** The `--project` / `--json` pair every verb in this family declares. */
|
|
3
|
+
export type SopBaseOptions = {
|
|
4
|
+
project?: string;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/** The fields a family success envelope carries. */
|
|
8
|
+
export type SopOutcome = {
|
|
9
|
+
readonly json: boolean | undefined;
|
|
10
|
+
readonly command: string;
|
|
11
|
+
readonly data: unknown;
|
|
12
|
+
readonly nextActions?: readonly string[];
|
|
13
|
+
};
|
|
14
|
+
/** The fields a family failure envelope carries. */
|
|
15
|
+
export type SopFailure = SopOutcome & {
|
|
16
|
+
readonly code: string;
|
|
17
|
+
readonly message: string;
|
|
18
|
+
readonly data: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
/** Print the family's success envelope. */
|
|
21
|
+
export declare function printSopOk(io: ProgramIO, outcome: SopOutcome): void;
|
|
22
|
+
/** Print the family's failure envelope and mark the process failed. */
|
|
23
|
+
export declare function printSopFailure(io: ProgramIO, failure: SopFailure): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// src/cli/commands/sop-command-shared.ts
|
|
2
|
+
//
|
|
3
|
+
// What every `peaks sop *` verb emits: the success envelope and the failure
|
|
4
|
+
// envelope, both with the family's `ok`/`fail` shape and the `--json` switch.
|
|
5
|
+
// Split out of `sop-commands.ts`; no envelope field or exit code changed.
|
|
6
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { printResult } from '../cli-helpers.js';
|
|
8
|
+
/** Print the family's success envelope. */
|
|
9
|
+
export function printSopOk(io, outcome) {
|
|
10
|
+
printResult(io, ok(outcome.command, outcome.data, [], [...(outcome.nextActions ?? [])]), outcome.json ?? false);
|
|
11
|
+
}
|
|
12
|
+
/** Print the family's failure envelope and mark the process failed. */
|
|
13
|
+
export function printSopFailure(io, failure) {
|
|
14
|
+
printResult(io, fail(failure.command, failure.code, failure.message, failure.data, [
|
|
15
|
+
...(failure.nextActions ?? [])
|
|
16
|
+
]), failure.json ?? false);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks sop` — author and validate user-defined SOP skills.
|
|
3
|
+
*
|
|
4
|
+
* - `peaks sop init` — scaffold a SOP (manifest + SKILL.md)
|
|
5
|
+
* - `peaks sop lint` — validate the manifest
|
|
6
|
+
* - `peaks sop register` — record the SOP's gates in the gate registry
|
|
7
|
+
* - `peaks sop registry` — list registered SOPs and gates
|
|
8
|
+
* - `peaks sop check` — evaluate one gate
|
|
9
|
+
* - `peaks sop advance` — advance to a phase, enforcing the bypass policy
|
|
10
|
+
*
|
|
11
|
+
* Registration order is the user's reading order and is what the whole-registry
|
|
12
|
+
* render pins; each verb's implementation lives beside this file, one module
|
|
13
|
+
* per verb, over the shared envelope helpers in `sop-command-shared.ts`.
|
|
14
|
+
*/
|
|
1
15
|
import type { Command } from 'commander';
|
|
2
|
-
import {
|
|
16
|
+
import type { ProgramIO } from '../cli-helpers.js';
|
|
3
17
|
export declare function registerSopCommands(program: Command, io: ProgramIO): void;
|
|
@@ -1,243 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `peaks sop` — author and validate user-defined SOP skills.
|
|
3
|
+
*
|
|
4
|
+
* - `peaks sop init` — scaffold a SOP (manifest + SKILL.md)
|
|
5
|
+
* - `peaks sop lint` — validate the manifest
|
|
6
|
+
* - `peaks sop register` — record the SOP's gates in the gate registry
|
|
7
|
+
* - `peaks sop registry` — list registered SOPs and gates
|
|
8
|
+
* - `peaks sop check` — evaluate one gate
|
|
9
|
+
* - `peaks sop advance` — advance to a phase, enforcing the bypass policy
|
|
10
|
+
*
|
|
11
|
+
* Registration order is the user's reading order and is what the whole-registry
|
|
12
|
+
* render pins; each verb's implementation lives beside this file, one module
|
|
13
|
+
* per verb, over the shared envelope helpers in `sop-command-shared.ts`.
|
|
14
|
+
*/
|
|
15
|
+
import { registerSopInitCommand } from './sop-init-command.js';
|
|
16
|
+
import { registerSopLintCommand } from './sop-lint-command.js';
|
|
17
|
+
import { registerSopRegisterCommand } from './sop-register-command.js';
|
|
18
|
+
import { registerSopRegistryCommand } from './sop-registry-command.js';
|
|
19
|
+
import { registerSopCheckCommand } from './sop-check-command.js';
|
|
20
|
+
import { registerSopAdvanceCommand } from './sop-advance-command.js';
|
|
11
21
|
export function registerSopCommands(program, io) {
|
|
12
22
|
const sop = program.command('sop').description('Author and validate user-defined SOP skills');
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.option('--project <path>', 'scaffold into the repo (<path>/.peaks/sops, committed & team-shared) instead of global')).action(async (options) => {
|
|
20
|
-
try {
|
|
21
|
-
const initOptions = { id: options.id };
|
|
22
|
-
if (options.name !== undefined) {
|
|
23
|
-
initOptions.name = options.name;
|
|
24
|
-
}
|
|
25
|
-
if (options.apply === true) {
|
|
26
|
-
initOptions.apply = true;
|
|
27
|
-
}
|
|
28
|
-
if (options.project !== undefined) {
|
|
29
|
-
initOptions.projectRoot = options.project;
|
|
30
|
-
}
|
|
31
|
-
const result = await initSop(initOptions);
|
|
32
|
-
// Side-effecting scaffold returns explicit next steps so the user doesn't
|
|
33
|
-
// have to recall the runbook: applied → edit then lint; preview → apply.
|
|
34
|
-
const nextActions = result.applied
|
|
35
|
-
? [
|
|
36
|
-
`Edit ${result.manifestPath} to define your real phases and gates`,
|
|
37
|
-
`peaks sop lint --id ${result.id} --json`
|
|
38
|
-
]
|
|
39
|
-
: [`Re-run with --apply to write ${result.manifestPath}`];
|
|
40
|
-
printResult(io, ok('sop.init', result, [], nextActions), options.json);
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
printResult(io, fail('sop.init', 'SOP_INIT_FAILED', getErrorMessage(error), { id: options.id }, [
|
|
44
|
-
'Check the SOP id before retrying'
|
|
45
|
-
]), options.json);
|
|
46
|
-
process.exitCode = 1;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
addJsonOption(sop
|
|
50
|
-
.command('lint')
|
|
51
|
-
.description('Validate a SOP manifest (id namespace, phases, gate ids, check fields)')
|
|
52
|
-
.requiredOption('--id <sop-id>', 'SOP id to lint')
|
|
53
|
-
.option('--allow-commands', 'permit command-type gates (they run shell-less processes)')
|
|
54
|
-
.option('--project <path>', 'lint the project-layer SOP (<path>/.peaks/sops) instead of global')).action(async (options) => {
|
|
55
|
-
try {
|
|
56
|
-
const lintOptions = { id: options.id };
|
|
57
|
-
if (options.allowCommands === true) {
|
|
58
|
-
lintOptions.allowCommands = true;
|
|
59
|
-
}
|
|
60
|
-
if (options.project !== undefined) {
|
|
61
|
-
lintOptions.projectRoot = options.project;
|
|
62
|
-
}
|
|
63
|
-
const result = await lintSop(lintOptions);
|
|
64
|
-
if (result === null) {
|
|
65
|
-
printResult(io, fail('sop.lint', 'SOP_NOT_FOUND', `No SOP found for id "${options.id}"`, { id: options.id }, ['Run peaks sop init --id <sop-id> --apply first']), options.json);
|
|
66
|
-
process.exitCode = 1;
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
printResult(io, result.ok
|
|
70
|
-
? ok('sop.lint', result)
|
|
71
|
-
: fail('sop.lint', 'SOP_LINT_FAILED', `${result.findings.filter((f) => f.severity === 'error').length} lint error(s) in SOP "${options.id}"`, result, ['Fix the reported findings, then re-run peaks sop lint']), options.json);
|
|
72
|
-
if (!result.ok) {
|
|
73
|
-
process.exitCode = 1;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
printResult(io, fail('sop.lint', 'SOP_LINT_ERROR', getErrorMessage(error), { id: options.id }, [
|
|
78
|
-
'Check the SOP id before retrying'
|
|
79
|
-
]), options.json);
|
|
80
|
-
process.exitCode = 1;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
addJsonOption(sop
|
|
84
|
-
.command('register')
|
|
85
|
-
.description('Validate a SOP and record its gates in the gate registry (global, or --project for the repo)')
|
|
86
|
-
.requiredOption('--id <sop-id>', 'SOP id to register')
|
|
87
|
-
.option('--allow-commands', 'permit command-type gates when validating')
|
|
88
|
-
.option('--dry-run', 'preview the registration without writing registry.json')
|
|
89
|
-
.option('--project <path>', 'register into the repo (<path>/.peaks/sops, committed & team-shared) instead of global')).action(async (options) => {
|
|
90
|
-
try {
|
|
91
|
-
const registerOptions = { id: options.id };
|
|
92
|
-
if (options.allowCommands === true) {
|
|
93
|
-
registerOptions.allowCommands = true;
|
|
94
|
-
}
|
|
95
|
-
if (options.dryRun === true) {
|
|
96
|
-
registerOptions.dryRun = true;
|
|
97
|
-
}
|
|
98
|
-
if (options.project !== undefined) {
|
|
99
|
-
registerOptions.projectRoot = options.project;
|
|
100
|
-
}
|
|
101
|
-
const result = await registerSop(registerOptions);
|
|
102
|
-
printResult(io, ok('sop.register', result, [], result.applied ? [] : ['Re-run without --dry-run to write registry.json']), options.json);
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
const code = error instanceof SopRegisterError ? error.code : 'SOP_REGISTER_FAILED';
|
|
106
|
-
printResult(io, fail('sop.register', code, getErrorMessage(error), { id: options.id }, [
|
|
107
|
-
'Run peaks sop lint to see why the SOP is not registrable'
|
|
108
|
-
]), options.json);
|
|
109
|
-
process.exitCode = 1;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
addJsonOption(sop
|
|
113
|
-
.command('registry')
|
|
114
|
-
.description('List registered SOPs and gates (global; merges in the cwd project layer by default)')
|
|
115
|
-
.option('--project <path>', 'also include and prefer the repo layer (<path>/.peaks/sops) (default: current directory)', '.')).action(async (options) => {
|
|
116
|
-
try {
|
|
117
|
-
const registry = await readRegistry(options.project);
|
|
118
|
-
printResult(io, ok('sop.registry', registry), options.json);
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
printResult(io, fail('sop.registry', 'SOP_REGISTRY_FAILED', getErrorMessage(error), {}, [
|
|
122
|
-
'The global registry may be corrupted; inspect ~/.peaks/sops/registry.json'
|
|
123
|
-
]), options.json);
|
|
124
|
-
process.exitCode = 1;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
addJsonOption(sop
|
|
128
|
-
.command('check')
|
|
129
|
-
.description('Evaluate a single SOP gate (returns pass / fail / blocked)')
|
|
130
|
-
.requiredOption('--id <sop-id>', 'SOP id')
|
|
131
|
-
.requiredOption('--gate <gate-id>', 'gate id within the SOP')
|
|
132
|
-
.option('--project <path>', 'project the gate evaluates against (default: current directory)', '.')
|
|
133
|
-
.option('--allow-commands', 'permit evaluating command-type gates')).action(async (options) => {
|
|
134
|
-
try {
|
|
135
|
-
const checkOptions = {
|
|
136
|
-
projectRoot: options.project,
|
|
137
|
-
id: options.id,
|
|
138
|
-
gateId: options.gate
|
|
139
|
-
};
|
|
140
|
-
if (options.allowCommands === true) {
|
|
141
|
-
checkOptions.allowCommands = true;
|
|
142
|
-
}
|
|
143
|
-
const result = await checkGate(checkOptions);
|
|
144
|
-
printResult(io, ok('sop.check', result), options.json);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
const code = error instanceof SopCheckError ? error.code : 'SOP_CHECK_FAILED';
|
|
148
|
-
printResult(io, fail('sop.check', code, getErrorMessage(error), { id: options.id, gateId: options.gate }, [
|
|
149
|
-
'Verify the SOP id and gate id with peaks sop lint'
|
|
150
|
-
]), options.json);
|
|
151
|
-
process.exitCode = 1;
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
addJsonOption(sop
|
|
155
|
-
.command('advance')
|
|
156
|
-
.description('Advance a SOP to a phase; gates guarding that phase must pass (or be explicitly bypassed)')
|
|
157
|
-
.requiredOption('--id <sop-id>', 'SOP id')
|
|
158
|
-
.requiredOption('--to <phase>', 'phase to advance into')
|
|
159
|
-
.option('--project <path>', 'project whose run-state advances (default: current directory)', '.')
|
|
160
|
-
.option('--allow-commands', 'permit evaluating command-type gates')
|
|
161
|
-
.option('--allow-incomplete', 'bypass the phase gates AND phase-order check (requires --reason)')
|
|
162
|
-
.option('--reason <text>', 'justification recorded when bypassing gates')
|
|
163
|
-
.option('--confirm', 'skip interactive confirmation for a bypass in assisted/strict mode')
|
|
164
|
-
.option('--force-confirm', 'bypass mode-enforced confirmation (use with caution)')
|
|
165
|
-
.option('--dry-run', 'evaluate gates without recording the advance in state.json')).action(async (options) => {
|
|
166
|
-
try {
|
|
167
|
-
// Bypass policy mirrors `request transition`: a bypass needs a reason, and
|
|
168
|
-
// in assisted/strict mode (resolved from the target project) it needs an
|
|
169
|
-
// explicit --confirm and counts against the per-SOP bypass cap.
|
|
170
|
-
if (options.allowIncomplete === true &&
|
|
171
|
-
(options.reason === undefined || options.reason.trim().length === 0)) {
|
|
172
|
-
printResult(io, fail('sop.advance', 'BYPASS_REASON_REQUIRED', '--allow-incomplete requires --reason explaining why the gates are skipped', { id: options.id, to: options.to }, ['Add --reason "<short justification>" or satisfy the gates']), options.json);
|
|
173
|
-
process.exitCode = 1;
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
if (options.allowIncomplete === true && options.forceConfirm !== true) {
|
|
177
|
-
const presence = getSkillPresence(options.project);
|
|
178
|
-
if (presence?.mode === 'assisted' || presence?.mode === 'strict') {
|
|
179
|
-
if (options.confirm !== true) {
|
|
180
|
-
printResult(io, fail('sop.advance', 'ALLOW_INCOMPLETE_RESTRICTED', `--allow-incomplete requires --confirm in ${presence.mode} mode`, { id: options.id, mode: presence.mode }, ['Add --confirm to bypass non-interactively']), options.json);
|
|
181
|
-
process.exitCode = 1;
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
// The bypass counter is keyed to the per-project SOP run-state dir (not
|
|
185
|
-
// a session); the shared cap constant is reused. Keying it per-project
|
|
186
|
-
// means a bypass in one project never consumes another project's budget.
|
|
187
|
-
const bypassRoot = sopStateDir(options.project, options.id);
|
|
188
|
-
// The per-project state dir may not exist yet (no successful advance has
|
|
189
|
-
// written state.json), so ensure it before the counter writes its file.
|
|
190
|
-
mkdirSync(bypassRoot, { recursive: true });
|
|
191
|
-
if (isBypassLimitReached(bypassRoot)) {
|
|
192
|
-
printResult(io, fail('sop.advance', 'BYPASS_LIMIT_REACHED', `gate bypass limit reached (${MAX_BYPASSES_PER_SESSION} bypasses per SOP)`, { id: options.id, limit: MAX_BYPASSES_PER_SESSION }, ['Satisfy the gates instead of bypassing']), options.json);
|
|
193
|
-
process.exitCode = 1;
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
// A dry-run preview must not consume a bypass.
|
|
197
|
-
if (options.dryRun !== true) {
|
|
198
|
-
recordBypass(bypassRoot);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
const advanceOptions = {
|
|
203
|
-
projectRoot: options.project,
|
|
204
|
-
id: options.id,
|
|
205
|
-
toPhase: options.to
|
|
206
|
-
};
|
|
207
|
-
if (options.allowCommands === true)
|
|
208
|
-
advanceOptions.allowCommands = true;
|
|
209
|
-
if (options.allowIncomplete === true)
|
|
210
|
-
advanceOptions.allowIncomplete = true;
|
|
211
|
-
if (options.reason !== undefined)
|
|
212
|
-
advanceOptions.reason = options.reason;
|
|
213
|
-
if (options.dryRun === true)
|
|
214
|
-
advanceOptions.dryRun = true;
|
|
215
|
-
const result = await advanceSop(advanceOptions);
|
|
216
|
-
printResult(io, ok('sop.advance', result, [], result.applied ? [] : ['Gates passed; re-run without --dry-run to record the advance']), options.json);
|
|
217
|
-
}
|
|
218
|
-
catch (error) {
|
|
219
|
-
if (error instanceof SopGateBlockedError) {
|
|
220
|
-
printResult(io, fail('sop.advance', error.code, error.message, { id: options.id, to: options.to, blockedGates: error.blockedGates }, ['Satisfy the blocking gates, or bypass with --allow-incomplete --reason "<why>"']), options.json);
|
|
221
|
-
process.exitCode = 1;
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
if (error instanceof SopPhaseSkipError) {
|
|
225
|
-
printResult(io, fail('sop.advance', error.code, error.message, {
|
|
226
|
-
id: options.id,
|
|
227
|
-
to: options.to,
|
|
228
|
-
fromPhase: error.fromPhase,
|
|
229
|
-
expectedNext: error.expectedNext
|
|
230
|
-
}, [
|
|
231
|
-
`Advance to "${error.expectedNext}" first, or bypass with --allow-incomplete --reason "<why>"`
|
|
232
|
-
]), options.json);
|
|
233
|
-
process.exitCode = 1;
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
const code = error instanceof SopAdvanceError ? error.code : 'SOP_ADVANCE_FAILED';
|
|
237
|
-
printResult(io, fail('sop.advance', code, getErrorMessage(error), { id: options.id, to: options.to }, [
|
|
238
|
-
'Verify the SOP id and phase with peaks sop lint'
|
|
239
|
-
]), options.json);
|
|
240
|
-
process.exitCode = 1;
|
|
241
|
-
}
|
|
242
|
-
});
|
|
23
|
+
registerSopInitCommand(sop, io);
|
|
24
|
+
registerSopLintCommand(sop, io);
|
|
25
|
+
registerSopRegisterCommand(sop, io);
|
|
26
|
+
registerSopRegistryCommand(sop, io);
|
|
27
|
+
registerSopCheckCommand(sop, io);
|
|
28
|
+
registerSopAdvanceCommand(sop, io);
|
|
243
29
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// src/cli/commands/sop-init-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks sop init` — scaffold a user-authored SOP (manifest + SKILL.md).
|
|
4
|
+
// Split out of `sop-commands.ts`; the verb name, its options, its envelope
|
|
5
|
+
// fields and its next-action strings are unchanged.
|
|
6
|
+
import { initSop } from '../../services/sop/sop-service.js';
|
|
7
|
+
import { addJsonOption, getErrorMessage } from '../cli-helpers.js';
|
|
8
|
+
import { printSopFailure, printSopOk } from './sop-command-shared.js';
|
|
9
|
+
async function runSopInit(io, options) {
|
|
10
|
+
try {
|
|
11
|
+
const initOptions = { id: options.id };
|
|
12
|
+
if (options.name !== undefined) {
|
|
13
|
+
initOptions.name = options.name;
|
|
14
|
+
}
|
|
15
|
+
if (options.apply === true) {
|
|
16
|
+
initOptions.apply = true;
|
|
17
|
+
}
|
|
18
|
+
if (options.project !== undefined) {
|
|
19
|
+
initOptions.projectRoot = options.project;
|
|
20
|
+
}
|
|
21
|
+
const result = await initSop(initOptions);
|
|
22
|
+
// Side-effecting scaffold returns explicit next steps so the user doesn't
|
|
23
|
+
// have to recall the runbook: applied → edit then lint; preview → apply.
|
|
24
|
+
const nextActions = result.applied
|
|
25
|
+
? [
|
|
26
|
+
`Edit ${result.manifestPath} to define your real phases and gates`,
|
|
27
|
+
`peaks sop lint --id ${result.id} --json`
|
|
28
|
+
]
|
|
29
|
+
: [`Re-run with --apply to write ${result.manifestPath}`];
|
|
30
|
+
printSopOk(io, { json: options.json, command: 'sop.init', data: result, nextActions });
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
printSopFailure(io, {
|
|
34
|
+
json: options.json,
|
|
35
|
+
command: 'sop.init',
|
|
36
|
+
code: 'SOP_INIT_FAILED',
|
|
37
|
+
message: getErrorMessage(error),
|
|
38
|
+
data: { id: options.id },
|
|
39
|
+
nextActions: ['Check the SOP id before retrying']
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function registerSopInitCommand(sop, io) {
|
|
44
|
+
addJsonOption(sop
|
|
45
|
+
.command('init')
|
|
46
|
+
.description('Scaffold a user-authored SOP (manifest + SKILL.md); global by default, --project commits it into a repo')
|
|
47
|
+
.requiredOption('--id <sop-id>', 'SOP id (lowercase kebab, e.g. team-release)')
|
|
48
|
+
.option('--name <name>', 'human-readable SOP name (defaults to the id)')
|
|
49
|
+
.option('--apply', 'write the SOP files (default: preview only)')
|
|
50
|
+
.option('--project <path>', 'scaffold into the repo (<path>/.peaks/sops, committed & team-shared) instead of global')).action((options) => runSopInit(io, options));
|
|
51
|
+
}
|