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,42 @@
|
|
|
1
|
+
import { lintSpecFile } from '../../services/loop/spec-service.js';
|
|
2
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { loopSpecParent } from './loop-eval-parents.js';
|
|
5
|
+
export function registerLoopSpecLintCommand(program, io) {
|
|
6
|
+
const spec = loopSpecParent(program);
|
|
7
|
+
addJsonOption(spec
|
|
8
|
+
.command('lint')
|
|
9
|
+
.description('Slice E.2: schema-validate a spec.yaml file (path required).')
|
|
10
|
+
.argument('<file>', 'path to spec.yaml')
|
|
11
|
+
.option('--rid <rid>', 'override the rid embedded in the spec (default: inferred from path)')).action((file, options) => runLoopSpecLint(file, options, io));
|
|
12
|
+
}
|
|
13
|
+
function reportLoopSpecLintFailure(io, error, file, asJson) {
|
|
14
|
+
printResult(io, fail('loop.spec.lint', 'LOOP_SPEC_LINT_FAILED', getErrorMessage(error), { file }, [
|
|
15
|
+
'Verify the file path and rid flag.'
|
|
16
|
+
]), asJson);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
19
|
+
function runLoopSpecLint(file, options, io) {
|
|
20
|
+
try {
|
|
21
|
+
const result = lintSpecFile(file, options.rid);
|
|
22
|
+
if (result.spec === null) {
|
|
23
|
+
printResult(io, fail('loop.spec.lint', 'SPEC_LINT_FAILED', result.report.errors.join('; '), { file, raw: result.raw.slice(0, 200) }, ['Verify the file path and YAML syntax.']), options.json);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
printResult(io, ok('loop.spec.lint', {
|
|
28
|
+
file,
|
|
29
|
+
spec: result.spec,
|
|
30
|
+
lint: {
|
|
31
|
+
ok: result.report.ok,
|
|
32
|
+
errors: result.report.errors,
|
|
33
|
+
warnings: result.report.warnings
|
|
34
|
+
}
|
|
35
|
+
}, [], []), options.json);
|
|
36
|
+
if (!result.report.ok)
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
reportLoopSpecLintFailure(io, error, file, options.json);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
2
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
|
+
import { resolveWorkflow, planWorkflow, planWorkflowRun } from '../../services/workflow/workflow-loader.js';
|
|
4
|
+
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
5
|
+
import { workflowCommandParent } from './loop-eval-parents.js';
|
|
6
|
+
export function registerWorkflowEvalWorkflowCommands(program, io) {
|
|
7
|
+
const workflow = workflowCommandParent(program);
|
|
8
|
+
// peaks workflow run <id>
|
|
9
|
+
addJsonOption(workflow
|
|
10
|
+
.command('run')
|
|
11
|
+
.description('Slice A.3: replay a captured workflow (.peaks/workflows/<id>.yaml) deterministically. Returns the run-plan order + per-phase status without re-deriving the phase plan.')
|
|
12
|
+
.argument('<id>', 'workflow id (matches .peaks/workflows/<id>.yaml)')
|
|
13
|
+
.requiredOption('--session <sid>', 'session id (from peaks workspace init)')
|
|
14
|
+
.option('--project <path>', 'project root (default: cwd)')).action((id, options) => runWorkflowRun(id, options, io));
|
|
15
|
+
// peaks workflow graph <id> (dry-run graph render)
|
|
16
|
+
// Renamed from `plan` to `graph` to avoid collision with the existing
|
|
17
|
+
// `peaks workflow plan <read|refresh|detect-trigger>` family registered
|
|
18
|
+
// Reuse the existing `graph` parent if `registerWorkflowLifecycleCommand`
|
|
19
|
+
// already created one (it owns `peaks workflow graph show|list`).
|
|
20
|
+
const existingGraph = workflow.commands.find((c) => c.name() === 'graph');
|
|
21
|
+
const graphParent = existingGraph ??
|
|
22
|
+
workflow
|
|
23
|
+
.command('graph')
|
|
24
|
+
.description('workflow graph read commands (slice A.3 dry-run + slice 4.0.8 lifecycle)');
|
|
25
|
+
addJsonOption(graphParent
|
|
26
|
+
.description('Slice A.3 dry-run: render the workflow graph (phases + parallel groups + evaluators + budget). No phase is executed.')
|
|
27
|
+
.argument('<id>', 'workflow id')
|
|
28
|
+
.requiredOption('--session <sid>', 'session id')
|
|
29
|
+
.option('--project <path>', 'project root (default: cwd)')).action((id, options) => runWorkflowGraph(id, options, io));
|
|
30
|
+
// peaks workflow lint <id>
|
|
31
|
+
addJsonOption(workflow
|
|
32
|
+
.command('lint')
|
|
33
|
+
.description('Slice A.3: validate a workflow spec (phases / gates / evaluators / parallel groups / budget).')
|
|
34
|
+
.argument('<id>', 'workflow id')
|
|
35
|
+
.requiredOption('--session <sid>', 'session id')
|
|
36
|
+
.option('--project <path>', 'project root (default: cwd)')).action((id, options) => runWorkflowLint(id, options, io));
|
|
37
|
+
}
|
|
38
|
+
function reportWorkflowRunFailure(io, error, sessionId, asJson) {
|
|
39
|
+
printResult(io, fail('workflow.run', 'WORKFLOW_RUN_FAILED', getErrorMessage(error), { sessionId }, [
|
|
40
|
+
'Verify the workflow id and session binding.'
|
|
41
|
+
]), asJson);
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
}
|
|
44
|
+
function reportWorkflowGraphFailure(io, error, sessionId, asJson) {
|
|
45
|
+
printResult(io, fail('workflow.graph', 'WORKFLOW_GRAPH_FAILED', getErrorMessage(error), { sessionId }, [
|
|
46
|
+
'Verify the workflow id and session binding.'
|
|
47
|
+
]), asJson);
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
}
|
|
50
|
+
function reportWorkflowLintFailure(io, error, sessionId, asJson) {
|
|
51
|
+
printResult(io, fail('workflow.lint', 'WORKFLOW_LINT_FAILED', getErrorMessage(error), { sessionId }, [
|
|
52
|
+
'Verify the workflow file syntax.'
|
|
53
|
+
]), asJson);
|
|
54
|
+
process.exitCode = 1;
|
|
55
|
+
}
|
|
56
|
+
function workflowRunData(sessionId, resolved, runPlan) {
|
|
57
|
+
return {
|
|
58
|
+
sessionId,
|
|
59
|
+
workflow: { id: resolved.spec.id, label: resolved.spec.label, source: resolved.source },
|
|
60
|
+
runPlan,
|
|
61
|
+
lintWarnings: resolved.lint.warnings
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function workflowGraphData(sessionId, graph, resolved) {
|
|
65
|
+
return {
|
|
66
|
+
sessionId,
|
|
67
|
+
graph,
|
|
68
|
+
lintWarnings: resolved.lint.warnings
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function runWorkflowRun(id, options, io) {
|
|
72
|
+
try {
|
|
73
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
74
|
+
const resolved = resolveWorkflow(projectRoot, id);
|
|
75
|
+
if (resolved.source.kind === 'missing') {
|
|
76
|
+
printResult(io, fail('workflow.run', 'WORKFLOW_NOT_FOUND', `workflow "${id}" not found`, { sessionId: options.session }, [`peaks workflow lint ${id} --session ${options.session} --json`]), options.json);
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!resolved.lint.ok) {
|
|
81
|
+
printResult(io, fail('workflow.run', 'WORKFLOW_LINT_FAILED', `workflow "${id}" has ${resolved.lint.errors.length} lint error(s): ${resolved.lint.errors.join('; ')}`, resolved.lint, [`peaks workflow lint ${id} --session ${options.session} --json`]), options.json);
|
|
82
|
+
process.exitCode = 1;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const runPlan = planWorkflowRun(resolved.spec);
|
|
86
|
+
const data = workflowRunData(options.session, resolved, runPlan);
|
|
87
|
+
const actions = [
|
|
88
|
+
`Run \`peaks workflow plan ${id} --session ${options.session} --json\` to preview the graph.`
|
|
89
|
+
];
|
|
90
|
+
printResult(io, ok('workflow.run', data, [], actions), options.json);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
reportWorkflowRunFailure(io, error, options.session, options.json);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function runWorkflowGraph(id, options, io) {
|
|
97
|
+
try {
|
|
98
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
99
|
+
const resolved = resolveWorkflow(projectRoot, id);
|
|
100
|
+
if (resolved.source.kind === 'missing') {
|
|
101
|
+
printResult(io, fail('workflow.graph', 'WORKFLOW_NOT_FOUND', `workflow "${id}" not found`, { sessionId: options.session }, [`Create .peaks/workflows/${id}.yaml or use the bundled default-fullauto-md.`]), options.json);
|
|
102
|
+
process.exitCode = 1;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (!resolved.lint.ok) {
|
|
106
|
+
printResult(io, fail('workflow.graph', 'WORKFLOW_LINT_FAILED', `workflow "${id}" has ${resolved.lint.errors.length} lint error(s): ${resolved.lint.errors.join('; ')}`, resolved.lint, [`peaks workflow lint ${id} --session ${options.session} --json`]), options.json);
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const graph = planWorkflow(resolved.spec, resolved.source);
|
|
111
|
+
const data = workflowGraphData(options.session, graph, resolved);
|
|
112
|
+
const actions = [
|
|
113
|
+
`Run \`peaks workflow run ${id} --session ${options.session} --json\` to materialize the run-plan order.`
|
|
114
|
+
];
|
|
115
|
+
printResult(io, ok('workflow.graph', data, [], actions), options.json);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
reportWorkflowGraphFailure(io, error, options.session, options.json);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function runWorkflowLint(id, options, io) {
|
|
122
|
+
try {
|
|
123
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
124
|
+
const resolved = resolveWorkflow(projectRoot, id);
|
|
125
|
+
if (resolved.source.kind === 'missing') {
|
|
126
|
+
printResult(io, fail('workflow.lint', 'WORKFLOW_NOT_FOUND', `workflow "${id}" not found`, { sessionId: options.session }, [`Create .peaks/workflows/${id}.yaml`]), options.json);
|
|
127
|
+
process.exitCode = 1;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
printResult(io, ok('workflow.lint', {
|
|
131
|
+
sessionId: options.session,
|
|
132
|
+
source: resolved.source,
|
|
133
|
+
lint: resolved.lint
|
|
134
|
+
}, [], []), options.json);
|
|
135
|
+
if (!resolved.lint.ok)
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
reportWorkflowLintFailure(io, error, options.session, options.json);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// src/cli/commands/loop-export-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks loop export` (M7, spec §7A.2) — export a loop_release as a
|
|
4
|
+
// `peaks.bundle/1` tarball, hard-blocked when the source has `shareable=false`.
|
|
5
|
+
// Extracted from `loop-commands.ts`; the registered name, description, options,
|
|
6
|
+
// refusal codes and envelope are unchanged.
|
|
7
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
10
|
+
import { openStateDb } from '../../services/skillhub/sqlite-store.js';
|
|
11
|
+
import { BundleAssetNotFoundError, BundleNotShareableError, writeBundle } from '../../services/share/bundle-writer.js';
|
|
12
|
+
import { printResult } from '../cli-helpers.js';
|
|
13
|
+
import { LOOP_EXPORT_IMPORT_OPTS, resolveLoopProjectRoot } from './loop-command-shared.js';
|
|
14
|
+
export function registerLoopExportCommand(loop, io) {
|
|
15
|
+
LOOP_EXPORT_IMPORT_OPTS(loop
|
|
16
|
+
.command('export')
|
|
17
|
+
.description('M7: export a loop_release as a peaks.bundle/1 tarball (spec §7A.2 / §10 RL-9). Refuses to export when shareable=false.')
|
|
18
|
+
.requiredOption('--loop <id>', 'loop_release id (kebab-case)')
|
|
19
|
+
.requiredOption('--out <path>', 'output .tar.gz path')).action((options) => {
|
|
20
|
+
const asJson = options.json === true;
|
|
21
|
+
try {
|
|
22
|
+
const result = exportLoopBundle(options);
|
|
23
|
+
printResult(io, ok('loop.export', {
|
|
24
|
+
outPath: result.outPath,
|
|
25
|
+
kind: result.kind,
|
|
26
|
+
assetId: result.assetId,
|
|
27
|
+
importedAs: 'candidate'
|
|
28
|
+
}, [], [
|
|
29
|
+
`Receiver must run \`peaks loop import --in ${result.outPath}\` to land this bundle, then run an independent evolution_evaluation before any promote.`
|
|
30
|
+
]), asJson);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
const refusal = exportRefusal(error, options.loop) ??
|
|
34
|
+
fail('loop.export', 'LOOP_EXPORT_FAILED', getErrorMessage(error), { ok: false, loop: options.loop }, ['Verify --loop id and --out path.']);
|
|
35
|
+
printResult(io, refusal, asJson);
|
|
36
|
+
process.exitCode = 1;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Open `<projectRoot>/.peaks/state.db` (creating `.peaks/`) and write the bundle. */
|
|
41
|
+
function exportLoopBundle(options) {
|
|
42
|
+
const projectRoot = resolveLoopProjectRoot(options.project);
|
|
43
|
+
if (!existsSync(join(projectRoot, '.peaks'))) {
|
|
44
|
+
mkdirSync(join(projectRoot, '.peaks'), { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
const db = openStateDb(join(projectRoot, '.peaks', 'state.db'));
|
|
47
|
+
try {
|
|
48
|
+
return writeBundle({
|
|
49
|
+
db,
|
|
50
|
+
blobsDir: join(projectRoot, '.peaks', 'blobs'),
|
|
51
|
+
kind: 'loop',
|
|
52
|
+
id: options.loop,
|
|
53
|
+
outPath: options.out
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
db.close();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** The two named refusals `writeBundle` raises, or `null` for anything else. */
|
|
61
|
+
function exportRefusal(error, loop) {
|
|
62
|
+
if (error instanceof BundleNotShareableError) {
|
|
63
|
+
return fail('loop.export', error.code, error.message, { ok: false, loop }, [
|
|
64
|
+
'Set shareable=true on the loop_release row, or share via desktop_visible=false.'
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
if (error instanceof BundleAssetNotFoundError) {
|
|
68
|
+
return fail('loop.export', error.code, error.message, { ok: false, loop }, [
|
|
69
|
+
'Verify the loop id with `peaks asset status --loop <id>`.'
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// src/cli/commands/loop-goal-compose-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks goal compose` — registered as a TOP-LEVEL command (not under
|
|
4
|
+
// `peaks loop`) because IDE adapters expose it as `goalCommand` and the
|
|
5
|
+
// sub-agent dispatch path consumes it. Extracted from `loop-commands.ts`; the
|
|
6
|
+
// registered name, description, options and envelope are unchanged.
|
|
7
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
8
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
9
|
+
const GOAL_COMPOSE_SUMMARY = 'goal.compose is a thin facade; the LLM-side UX layer decomposes the goal into sub-agent tasks.';
|
|
10
|
+
export function registerLoopGoalComposeCommand(program, io) {
|
|
11
|
+
addJsonOption(program
|
|
12
|
+
.command('goal')
|
|
13
|
+
.description('14.5: compose an autonomous goal (returns the goal envelope that the LLM-side UX layer feeds to peaks sub-agent dispatch)')
|
|
14
|
+
.requiredOption('--project <path>', 'target project root')
|
|
15
|
+
.requiredOption('--goal <text>', 'the high-level goal to compose')).action((options) => {
|
|
16
|
+
try {
|
|
17
|
+
printResult(io, ok('goal.compose', goalComposePayload(options), [], [GOAL_COMPOSE_SUMMARY]), options.json);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
printResult(io, fail('goal.compose', 'GOAL_COMPOSE_FAILED', getErrorMessage(error), { project: options.project, goal: options.goal }, ['Verify the project path and --goal value']), options.json);
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** The placeholder body; the LLM-side UX layer decomposes `goal` into tasks. */
|
|
26
|
+
function goalComposePayload(options) {
|
|
27
|
+
return {
|
|
28
|
+
project: options.project,
|
|
29
|
+
goal: options.goal,
|
|
30
|
+
status: 'placeholder',
|
|
31
|
+
nextSteps: [
|
|
32
|
+
'The composed goal is consumed by peaks sub-agent dispatch.',
|
|
33
|
+
'The hermes + openclaw IDE adapters (Slice #0.7) surface this as a goalCommand.'
|
|
34
|
+
]
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// src/cli/commands/loop-import-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks loop import` (M7, spec §7A.2) — extract a `peaks.bundle/1` tarball and
|
|
4
|
+
// land it as `candidate` only; promotion needs an evolution_evaluation row.
|
|
5
|
+
// Extracted from `loop-commands.ts`; the registered name, description, options,
|
|
6
|
+
// refusal codes and envelope are unchanged.
|
|
7
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
10
|
+
import { openStateDb } from '../../services/skillhub/sqlite-store.js';
|
|
11
|
+
import { BundleImportToStableForbiddenError, BundleMajorVersionMismatchError, BundleMalformedError, BundleSchemaVersionsMismatchError, readBundle } from '../../services/share/bundle-reader.js';
|
|
12
|
+
import { printResult } from '../cli-helpers.js';
|
|
13
|
+
import { LOOP_EXPORT_IMPORT_OPTS, resolveLoopProjectRoot } from './loop-command-shared.js';
|
|
14
|
+
export function registerLoopImportCommand(loop, io) {
|
|
15
|
+
LOOP_EXPORT_IMPORT_OPTS(loop
|
|
16
|
+
.command('import')
|
|
17
|
+
.description('M7: import a peaks.bundle/1 tarball. Lands as candidate only — promotion requires an evolution_evaluation row (spec §7A.2 / §10 RL-9 / AC-25 / AC-26).')
|
|
18
|
+
.requiredOption('--in <path>', 'input .tar.gz path')
|
|
19
|
+
.option('--as <id>', 'optional rename for the loop id when landing')).action((options) => {
|
|
20
|
+
const asJson = options.json === true;
|
|
21
|
+
try {
|
|
22
|
+
const result = importLoopBundle(options);
|
|
23
|
+
printResult(io, ok('loop.import', {
|
|
24
|
+
assetId: result.assetId,
|
|
25
|
+
kind: result.kind,
|
|
26
|
+
importedAs: result.importedAs,
|
|
27
|
+
warnings: result.warnings,
|
|
28
|
+
evidenceBriefCount: result.evidenceBriefCount
|
|
29
|
+
}, result.warnings, [
|
|
30
|
+
'Run an independent evaluation against this release before promoting; peaks loop promote refuses without an evolution_evaluation row.'
|
|
31
|
+
]), asJson);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
const refusal = importRefusal(error, options.in) ??
|
|
35
|
+
fail('loop.import', 'LOOP_IMPORT_FAILED', getErrorMessage(error), { ok: false, inPath: options.in }, ['Verify the bundle path and integrity.']);
|
|
36
|
+
printResult(io, refusal, asJson);
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Open `<projectRoot>/.peaks/state.db` (creating `.peaks/`) and read the bundle in. */
|
|
42
|
+
function importLoopBundle(options) {
|
|
43
|
+
const projectRoot = resolveLoopProjectRoot(options.project);
|
|
44
|
+
if (!existsSync(join(projectRoot, '.peaks'))) {
|
|
45
|
+
mkdirSync(join(projectRoot, '.peaks'), { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
const db = openStateDb(join(projectRoot, '.peaks', 'state.db'));
|
|
48
|
+
try {
|
|
49
|
+
return readBundle({
|
|
50
|
+
db,
|
|
51
|
+
blobsDir: join(projectRoot, '.peaks', 'blobs'),
|
|
52
|
+
inPath: options.in,
|
|
53
|
+
...(options.as !== undefined ? { asName: options.as } : {})
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
db.close();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The four named bundle refusals, each with the action its reader earned, or
|
|
62
|
+
* `null` for anything else. The `data` each carries differs (`receivedMajor` on
|
|
63
|
+
* a version mismatch, `inPath` on a malformed bundle), so the branches are a
|
|
64
|
+
* flat guard chain rather than a table with a `data` callback.
|
|
65
|
+
*/
|
|
66
|
+
function importRefusal(error, inPath) {
|
|
67
|
+
if (error instanceof BundleMajorVersionMismatchError) {
|
|
68
|
+
return fail('loop.import', error.code, error.message, { ok: false, receivedMajor: error.receivedMajor }, ['Use the matching peaks.bundle/<major> reader; this peaks build only supports major=1.']);
|
|
69
|
+
}
|
|
70
|
+
if (error instanceof BundleSchemaVersionsMismatchError) {
|
|
71
|
+
return fail('loop.import', error.code, error.message, { ok: false }, [
|
|
72
|
+
'Source bundle did not declare the canonical schema versions; refuse the bundle.'
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
if (error instanceof BundleImportToStableForbiddenError) {
|
|
76
|
+
return fail('loop.import', error.code, error.message, { ok: false }, [
|
|
77
|
+
'Bundles always land as candidate; promotion to stable requires an evolution_evaluation row (AC-26).'
|
|
78
|
+
]);
|
|
79
|
+
}
|
|
80
|
+
if (error instanceof BundleMalformedError) {
|
|
81
|
+
return fail('loop.import', error.code, error.message, { ok: false, inPath }, [
|
|
82
|
+
'Re-export from the source via `peaks loop export`.'
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/cli/commands/loop-placeholder-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks loop preflight|detect-pattern|check-consistency` — the three 14.x
|
|
4
|
+
// placeholder facades. They differ only in their verb, the list of things the
|
|
5
|
+
// LLM-side UX layer should run instead, and the one-line note on the envelope;
|
|
6
|
+
// three copies of the same builder is what pushed `registerLoopCommands` past
|
|
7
|
+
// the per-function line cap. Extracted from `loop-commands.ts` as one table;
|
|
8
|
+
// every registered name, description, option and envelope is unchanged.
|
|
9
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
10
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
11
|
+
const PLACEHOLDERS = [
|
|
12
|
+
{
|
|
13
|
+
verb: 'preflight',
|
|
14
|
+
command: 'loop.preflight',
|
|
15
|
+
description: '14.2: pre-run sanity checks (placeholder; future slice runs peaks doctor + peaks audit before each loop iter)',
|
|
16
|
+
nextSteps: [
|
|
17
|
+
'For each L4 loop iteration, call peaks doctor + peaks audit to surface regressions.',
|
|
18
|
+
'A future slice will inline the preflight checks (not just placeholder).'
|
|
19
|
+
],
|
|
20
|
+
summary: 'loop.preflight is a thin facade; the LLM-side UX layer composes peaks doctor + peaks audit.'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
verb: 'detect-pattern',
|
|
24
|
+
command: 'loop.detect-pattern',
|
|
25
|
+
description: '14.3: detect repeating patterns across past sessions (placeholder; future slice uses peaks retrospective search)',
|
|
26
|
+
nextSteps: [
|
|
27
|
+
'Run peaks retrospective search --limit 50 to surface high-frequency patterns.',
|
|
28
|
+
'A future slice will rank by frequency + LLM confidence.'
|
|
29
|
+
],
|
|
30
|
+
summary: 'loop.detect-pattern is a thin facade; the LLM-side UX layer composes peaks retrospective search.'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
verb: 'check-consistency',
|
|
34
|
+
command: 'loop.check-consistency',
|
|
35
|
+
description: '14.4: verify state consistency (placeholder; future slice compares .peaks/_runtime across sessions)',
|
|
36
|
+
nextSteps: [
|
|
37
|
+
'Compare .peaks/_runtime/<sid>/session.json across recent sessions for drift.',
|
|
38
|
+
'A future slice will report drift with severity (warn / fail).'
|
|
39
|
+
],
|
|
40
|
+
summary: 'loop.check-consistency is a thin facade; the LLM-side UX layer composes the drift scan.'
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
export function registerLoopPlaceholderCommands(loop, io) {
|
|
44
|
+
for (const spec of PLACEHOLDERS) {
|
|
45
|
+
addJsonOption(loop
|
|
46
|
+
.command(spec.verb)
|
|
47
|
+
.description(spec.description)
|
|
48
|
+
.requiredOption('--project <path>', 'target project root')).action((options) => {
|
|
49
|
+
printResult(io, ok(spec.command, { project: options.project, status: 'placeholder', nextSteps: [...spec.nextSteps] }, [], [spec.summary]), options.json);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
3
|
+
/** Absolute path of the MCP server's process entry. */
|
|
4
|
+
export declare function mcpServerEntryPath(): string;
|
|
5
|
+
/** The exact command this launcher will spawn, resolved without spawning it. */
|
|
6
|
+
export declare function mcpServeInvocation(entry?: string): {
|
|
7
|
+
command: string;
|
|
8
|
+
args: string[];
|
|
9
|
+
};
|
|
10
|
+
export declare function registerMcpCommands(program: Command, io: ProgramIO): void;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// src/cli/commands/mcp-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks mcp` — the command family around the read-only MCP surface. This slice
|
|
4
|
+
// delivers `serve`; `install` / `uninstall` / `status` are the distribution
|
|
5
|
+
// slice's (spec §12, segment ③).
|
|
6
|
+
//
|
|
7
|
+
// WHY THIS FILE DOES NOT IMPORT THE SERVER. The design's load-bearing invariant
|
|
8
|
+
// is that `src/services/mcp/` is a DELETABLE PIPE (spec §1): remove it and the
|
|
9
|
+
// CLI is unchanged, the interceptor is unchanged, and a harness that used MCP
|
|
10
|
+
// simply falls back to Bash. That invariant is an assertion about import edges,
|
|
11
|
+
// and it is enforced by `tests/unit/standards/no-mcp-source-import.test.ts` —
|
|
12
|
+
// which reports an edge from any module outside the MCP root, this file
|
|
13
|
+
// included. So the server is reached the way the design says a server is
|
|
14
|
+
// reached: as a PROCESS, by path.
|
|
15
|
+
//
|
|
16
|
+
// The path is computed here rather than asked for, because asking would be the
|
|
17
|
+
// import. `SOURCE_TREE` / `TREE_DIR` are the same two facts every other
|
|
18
|
+
// self-spawn in this tree derives the same way (see `daemon-supervisor.ts`):
|
|
19
|
+
// this file's own extension says which tree it was loaded from, and its own
|
|
20
|
+
// directory says where that tree is.
|
|
21
|
+
import { spawn } from 'node:child_process';
|
|
22
|
+
import { dirname, extname, join, resolve } from 'node:path';
|
|
23
|
+
import { fileURLToPath } from 'node:url';
|
|
24
|
+
import { installMcpForAdapter, resolveMcpServerArgv, spawnMcpInstallRunner, uninstallMcpForAdapter } from '../../services/distribution/mcp-install.js';
|
|
25
|
+
import { detectIdeFromContext } from '../../services/ide/hook-translator.js';
|
|
26
|
+
import { resolveIdeOptionHelp, tryGetAdapter } from '../../services/ide/ide-registry.js';
|
|
27
|
+
import { interpreterArgs } from '../../services/web/daemon-supervisor.js';
|
|
28
|
+
import { printResult } from '../cli-helpers.js';
|
|
29
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
30
|
+
/** This file's directory — `<root>/src/cli/commands` or `<root>/dist/cli/commands`. */
|
|
31
|
+
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
32
|
+
/** `<root>/src` or `<root>/dist`. */
|
|
33
|
+
const TREE_DIR = resolve(MODULE_DIR, '..', '..');
|
|
34
|
+
/** Compiled trees run `.js` under node; the source tree is TypeScript. */
|
|
35
|
+
const SOURCE_TREE = extname(fileURLToPath(import.meta.url)) === '.ts';
|
|
36
|
+
/** Absolute path of the MCP server's process entry. */
|
|
37
|
+
export function mcpServerEntryPath() {
|
|
38
|
+
return join(TREE_DIR, 'services', 'mcp', SOURCE_TREE ? 'server-main.ts' : 'server-main.js');
|
|
39
|
+
}
|
|
40
|
+
/** The exact command this launcher will spawn, resolved without spawning it. */
|
|
41
|
+
export function mcpServeInvocation(entry = mcpServerEntryPath()) {
|
|
42
|
+
return { command: process.execPath, args: interpreterArgs(entry) };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Hand the process over to the MCP server: the child inherits all three standard
|
|
46
|
+
* streams, so the harness's stdin/stdout pipe IS the server's pipe and this
|
|
47
|
+
* process adds a frame of indirection and nothing else.
|
|
48
|
+
*/
|
|
49
|
+
function runMcpServe(io, options) {
|
|
50
|
+
const invocation = mcpServeInvocation();
|
|
51
|
+
const child = spawn(invocation.command, invocation.args, {
|
|
52
|
+
stdio: 'inherit',
|
|
53
|
+
cwd: options.project ?? process.cwd(),
|
|
54
|
+
// Windows contract: a spawned child must not allocate a console window.
|
|
55
|
+
windowsHide: true
|
|
56
|
+
});
|
|
57
|
+
child.on('error', (error) => {
|
|
58
|
+
printResult(io, fail('mcp.serve', 'MCP_SERVE_SPAWN_FAILED', `Could not start the MCP server: ${error.message}`, {
|
|
59
|
+
entry: invocation.args.at(-1) ?? ''
|
|
60
|
+
}, ['Check that the build is present, or run `pnpm build`']), options.json === true);
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
});
|
|
63
|
+
child.on('exit', (code, signal) => {
|
|
64
|
+
// The child's status IS this command's status — an MCP client reads the
|
|
65
|
+
// server's exit, so masking it would be the only lie this launcher told.
|
|
66
|
+
if (signal !== null) {
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
process.exitCode = code ?? 0;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function registerMcpCommands(program, io) {
|
|
74
|
+
const mcp = program
|
|
75
|
+
.command('mcp')
|
|
76
|
+
.description('Serve peaks-loop read-only capabilities over MCP (stdio)');
|
|
77
|
+
mcp
|
|
78
|
+
.command('serve')
|
|
79
|
+
.description('Run the read-only MCP server on stdio until the caller closes it')
|
|
80
|
+
.option('--project <path>', 'project the server runs the CLI in (default: current directory)')
|
|
81
|
+
.action((options) => {
|
|
82
|
+
runMcpServe(io, options);
|
|
83
|
+
});
|
|
84
|
+
registerMcpRegistrationCommands(mcp, io);
|
|
85
|
+
}
|
|
86
|
+
function resolveTargetAdapter(options) {
|
|
87
|
+
const ide = options.ide !== undefined && options.ide.length > 0
|
|
88
|
+
? options.ide
|
|
89
|
+
: detectIdeFromContext({ env: process.env, cwd: process.cwd(), parsedStdin: null });
|
|
90
|
+
const adapter = tryGetAdapter(ide);
|
|
91
|
+
return adapter === undefined ? { kind: 'unsupported', ide } : { kind: 'adapter', adapter };
|
|
92
|
+
}
|
|
93
|
+
/** One envelope line per adapter: what was registered, or why nothing was. */
|
|
94
|
+
function reportRegistration(result, verb) {
|
|
95
|
+
if (result.skipped) {
|
|
96
|
+
return `${result.ideId}: skipped — ${result.reason}`;
|
|
97
|
+
}
|
|
98
|
+
const { report } = result;
|
|
99
|
+
return `${result.ideId}: ${verb} ${report.ok ? 'ok' : 'FAILED'} — ${report.detail}`;
|
|
100
|
+
}
|
|
101
|
+
/** The `data` BOTH envelopes carry, so the failure path is never a thinner shape. */
|
|
102
|
+
function registrationEnvelopeData(result, verb) {
|
|
103
|
+
return {
|
|
104
|
+
ide: result.ideId,
|
|
105
|
+
skipped: result.skipped,
|
|
106
|
+
summary: reportRegistration(result, verb),
|
|
107
|
+
registration: result
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function runMcpRegistration(io, verb, options) {
|
|
111
|
+
const target = resolveTargetAdapter(options);
|
|
112
|
+
if (target.kind === 'unsupported') {
|
|
113
|
+
printResult(io, fail(`mcp.${verb}`, 'MCP_HARNESS_UNSUPPORTED', `No adapter is registered for harness '${target.ide}'.`, { ide: target.ide }, ['Pass --ide with a registered adapter id']), options.json === true);
|
|
114
|
+
process.exitCode = 1;
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const { adapter } = target;
|
|
118
|
+
const serverArgv = resolveMcpServerArgv();
|
|
119
|
+
const result = verb === 'install'
|
|
120
|
+
? installMcpForAdapter(adapter, serverArgv, spawnMcpInstallRunner)
|
|
121
|
+
: uninstallMcpForAdapter(adapter, serverArgv, spawnMcpInstallRunner);
|
|
122
|
+
const report = result.skipped ? undefined : result.report;
|
|
123
|
+
if (report !== undefined && !report.ok) {
|
|
124
|
+
printResult(io, fail(`mcp.${verb}`, 'MCP_REGISTRATION_FAILED', report.detail, registrationEnvelopeData(result, verb), ['Run the harness command by hand to see its own error']), options.json === true);
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
printResult(io, ok(`mcp.${verb}`, registrationEnvelopeData(result, verb)), options.json === true);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* `peaks mcp install` / `peaks mcp uninstall` — the distribution half of the MCP
|
|
132
|
+
* surface, and an explicit pair on purpose (spec §8.3 Q19): an uninstall that
|
|
133
|
+
* only ran from a package manager's hook is skipped whenever the manager decides
|
|
134
|
+
* to skip it, and the leftover registration then makes the NEXT install fail on
|
|
135
|
+
* a duplicate. Neither command starts a process; they register one.
|
|
136
|
+
*/
|
|
137
|
+
function registerMcpRegistrationCommands(mcp, io) {
|
|
138
|
+
mcp
|
|
139
|
+
.command('install')
|
|
140
|
+
.description('Register the peaks MCP server with the detected harness. Removes the name ' +
|
|
141
|
+
'from every declared scope first, because the harness registers non-idempotently. ' +
|
|
142
|
+
'A harness whose adapter declares no registration entry is skipped, not failed.')
|
|
143
|
+
.option('--ide <id>', resolveIdeOptionHelp())
|
|
144
|
+
.option('--json', 'JSON envelope output')
|
|
145
|
+
.action((options) => {
|
|
146
|
+
runMcpRegistration(io, 'install', options);
|
|
147
|
+
});
|
|
148
|
+
mcp
|
|
149
|
+
.command('uninstall')
|
|
150
|
+
.description('Remove the peaks MCP registration from the harness, sweeping every scope it ' +
|
|
151
|
+
'may hold. Explicit, because no package-manager hook is relied on.')
|
|
152
|
+
.option('--ide <id>', resolveIdeOptionHelp())
|
|
153
|
+
.option('--json', 'JSON envelope output')
|
|
154
|
+
.action((options) => {
|
|
155
|
+
runMcpRegistration(io, 'uninstall', options);
|
|
156
|
+
});
|
|
157
|
+
}
|