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,52 @@
|
|
|
1
|
+
import type { FinalReviewOutput } from '../../services/final-review/final-review-types.js';
|
|
2
|
+
/** Whitelist of supported `--llm-provider` values for `peaks prepare-final-review`. */
|
|
3
|
+
export declare const SUPPORTED_LLM_PROVIDERS: readonly ["anthropic", "stub"];
|
|
4
|
+
export type SupportedLlmProvider = (typeof SUPPORTED_LLM_PROVIDERS)[number];
|
|
5
|
+
/**
|
|
6
|
+
* Default stays `stub` (unlike `peaks audit goal`, whose default is the real
|
|
7
|
+
* provider): the scaffold route is what CI and the registered e2e contract
|
|
8
|
+
* exercise without credentials, and the stub envelope is labelled
|
|
9
|
+
* `status: 'scaffold-only'` / `providerBinding: 'stub'` so it can never be
|
|
10
|
+
* read as a review.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_LLM_PROVIDER: SupportedLlmProvider;
|
|
13
|
+
export declare function isSupportedLlmProvider(value: string): value is SupportedLlmProvider;
|
|
14
|
+
export type FinalReviewStatus = 'scaffold-only' | 'review-complete' | 'not-applicable';
|
|
15
|
+
/**
|
|
16
|
+
* Which LLM produced this envelope. `unknown` is reserved for failure
|
|
17
|
+
* envelopes, where no binding was ever established.
|
|
18
|
+
*/
|
|
19
|
+
export type FinalReviewProviderBinding = 'stub' | 'anthropic-messages-api' | 'unknown';
|
|
20
|
+
export interface FinalReviewData {
|
|
21
|
+
readonly status: FinalReviewStatus;
|
|
22
|
+
readonly rid: string;
|
|
23
|
+
readonly sessionId: string;
|
|
24
|
+
readonly auditGoalPath: string;
|
|
25
|
+
readonly serviceWired: boolean;
|
|
26
|
+
readonly providerBinding: FinalReviewProviderBinding;
|
|
27
|
+
/** Model id the bound provider answered with (real-provider runs only). */
|
|
28
|
+
readonly model?: string;
|
|
29
|
+
/** The 4-dim review the service produced (real-provider runs only). */
|
|
30
|
+
readonly review?: FinalReviewOutput;
|
|
31
|
+
/**
|
|
32
|
+
* Environment variables that were absent when binding failed. Surfaced on
|
|
33
|
+
* `data` because `fail()` redacts `message` through
|
|
34
|
+
* `redactSensitiveErrorMessage`, whose catch-all pattern matches the words
|
|
35
|
+
* `token` / `api_key` and would blank out the very names an operator needs.
|
|
36
|
+
*/
|
|
37
|
+
readonly missingEnv?: readonly string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Empty placeholder used by `fail()` envelopes. `status` is
|
|
41
|
+
* `'not-applicable'` on the error path so consumers can tell
|
|
42
|
+
* "this is a placeholder on a failure" apart from "this is a real
|
|
43
|
+
* scaffold-only success".
|
|
44
|
+
*/
|
|
45
|
+
export declare function emptyFinalReviewData(rid: string, sessionId: string, auditGoalPath: string, missingEnv?: readonly string[]): FinalReviewData;
|
|
46
|
+
export type PrepareFinalReviewOptions = {
|
|
47
|
+
project: string;
|
|
48
|
+
sessionId: string;
|
|
49
|
+
llmProvider?: string;
|
|
50
|
+
base?: string;
|
|
51
|
+
json?: boolean;
|
|
52
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/cli/commands/final-review-command-shared.ts
|
|
2
|
+
//
|
|
3
|
+
// What `peaks prepare-final-review` reports: the envelope's data shape, its
|
|
4
|
+
// provider vocabulary, and the placeholder a failure carries. Split out of
|
|
5
|
+
// `final-review-commands.ts`; every value and every field name is unchanged.
|
|
6
|
+
/** Whitelist of supported `--llm-provider` values for `peaks prepare-final-review`. */
|
|
7
|
+
export const SUPPORTED_LLM_PROVIDERS = ['anthropic', 'stub'];
|
|
8
|
+
/**
|
|
9
|
+
* Default stays `stub` (unlike `peaks audit goal`, whose default is the real
|
|
10
|
+
* provider): the scaffold route is what CI and the registered e2e contract
|
|
11
|
+
* exercise without credentials, and the stub envelope is labelled
|
|
12
|
+
* `status: 'scaffold-only'` / `providerBinding: 'stub'` so it can never be
|
|
13
|
+
* read as a review.
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_LLM_PROVIDER = 'stub';
|
|
16
|
+
export function isSupportedLlmProvider(value) {
|
|
17
|
+
return SUPPORTED_LLM_PROVIDERS.includes(value);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Empty placeholder used by `fail()` envelopes. `status` is
|
|
21
|
+
* `'not-applicable'` on the error path so consumers can tell
|
|
22
|
+
* "this is a placeholder on a failure" apart from "this is a real
|
|
23
|
+
* scaffold-only success".
|
|
24
|
+
*/
|
|
25
|
+
export function emptyFinalReviewData(rid, sessionId, auditGoalPath, missingEnv) {
|
|
26
|
+
return {
|
|
27
|
+
status: 'not-applicable',
|
|
28
|
+
rid,
|
|
29
|
+
sessionId,
|
|
30
|
+
auditGoalPath,
|
|
31
|
+
serviceWired: false,
|
|
32
|
+
providerBinding: 'unknown',
|
|
33
|
+
...(missingEnv === undefined ? {} : { missingEnv })
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Exposes the `prepareFinalReview()` service (W2 T9 on
|
|
6
6
|
* `feature/slice-topology-multipass`) via the CLI surface. The service
|
|
7
|
-
* depends on an injected `LlmRunner`;
|
|
7
|
+
* depends on an injected `LlmRunner`; the binding lives in
|
|
8
|
+
* `final-review-prepare-command.ts`:
|
|
8
9
|
* - `--llm-provider stub` (default) returns a structured "scaffold ready"
|
|
9
10
|
* envelope WITHOUT calling the service, so CI can verify the route
|
|
10
11
|
* offline. It performs no review, and says so in every hint it emits.
|
|
@@ -23,33 +24,12 @@
|
|
|
23
24
|
* - `peaks audit goal` — propose a 6-dim goal from a human need
|
|
24
25
|
* - `peaks prepare-final-review` — produce a 4-dim review evidence
|
|
25
26
|
* pack for human acceptance
|
|
27
|
+
*
|
|
28
|
+
* This file is the registration module only; the run body it dispatches to
|
|
29
|
+
* lives in `final-review-prepare-command.ts` and the envelope vocabulary in
|
|
30
|
+
* `final-review-command-shared.ts`.
|
|
26
31
|
*/
|
|
27
32
|
import type { Command } from 'commander';
|
|
28
33
|
import { type ProgramIO } from '../cli-helpers.js';
|
|
29
|
-
import type { FinalReviewOutput } from '../../services/final-review/final-review-types.js';
|
|
30
|
-
export type FinalReviewStatus = 'scaffold-only' | 'review-complete' | 'not-applicable';
|
|
31
|
-
/**
|
|
32
|
-
* Which LLM produced this envelope. `unknown` is reserved for failure
|
|
33
|
-
* envelopes, where no binding was ever established.
|
|
34
|
-
*/
|
|
35
|
-
export type FinalReviewProviderBinding = 'stub' | 'anthropic-messages-api' | 'unknown';
|
|
36
|
-
export interface FinalReviewData {
|
|
37
|
-
readonly status: FinalReviewStatus;
|
|
38
|
-
readonly rid: string;
|
|
39
|
-
readonly sessionId: string;
|
|
40
|
-
readonly auditGoalPath: string;
|
|
41
|
-
readonly serviceWired: boolean;
|
|
42
|
-
readonly providerBinding: FinalReviewProviderBinding;
|
|
43
|
-
/** Model id the bound provider answered with (real-provider runs only). */
|
|
44
|
-
readonly model?: string;
|
|
45
|
-
/** The 4-dim review the service produced (real-provider runs only). */
|
|
46
|
-
readonly review?: FinalReviewOutput;
|
|
47
|
-
/**
|
|
48
|
-
* Environment variables that were absent when binding failed. Surfaced on
|
|
49
|
-
* `data` because `fail()` redacts `message` through
|
|
50
|
-
* `redactSensitiveErrorMessage`, whose catch-all pattern matches the words
|
|
51
|
-
* `token` / `api_key` and would blank out the very names an operator needs.
|
|
52
|
-
*/
|
|
53
|
-
readonly missingEnv?: readonly string[];
|
|
54
|
-
}
|
|
55
34
|
export declare function registerFinalReviewCommands(program: Command, io: ProgramIO): void;
|
|
35
|
+
export { emptyFinalReviewData, isSupportedLlmProvider, type FinalReviewData, type FinalReviewProviderBinding, type FinalReviewStatus, type PrepareFinalReviewOptions } from './final-review-command-shared.js';
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Exposes the `prepareFinalReview()` service (W2 T9 on
|
|
6
6
|
* `feature/slice-topology-multipass`) via the CLI surface. The service
|
|
7
|
-
* depends on an injected `LlmRunner`;
|
|
7
|
+
* depends on an injected `LlmRunner`; the binding lives in
|
|
8
|
+
* `final-review-prepare-command.ts`:
|
|
8
9
|
* - `--llm-provider stub` (default) returns a structured "scaffold ready"
|
|
9
10
|
* envelope WITHOUT calling the service, so CI can verify the route
|
|
10
11
|
* offline. It performs no review, and says so in every hint it emits.
|
|
@@ -23,91 +24,14 @@
|
|
|
23
24
|
* - `peaks audit goal` — propose a 6-dim goal from a human need
|
|
24
25
|
* - `peaks prepare-final-review` — produce a 4-dim review evidence
|
|
25
26
|
* pack for human acceptance
|
|
27
|
+
*
|
|
28
|
+
* This file is the registration module only; the run body it dispatches to
|
|
29
|
+
* lives in `final-review-prepare-command.ts` and the envelope vocabulary in
|
|
30
|
+
* `final-review-command-shared.ts`.
|
|
26
31
|
*/
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
31
|
-
import { fail, ok } from 'peaks-loop-shared/result';
|
|
32
|
-
import { createAnthropicRunner, LlmBindingError, LlmRequestError, resolveAnthropicConfig } from '../../services/llm/anthropic-runner.js';
|
|
33
|
-
import { IncompleteFinalReviewError, prepareFinalReview } from '../../services/final-review/final-review-service.js';
|
|
34
|
-
/** Whitelist of supported `--llm-provider` values for `peaks prepare-final-review`. */
|
|
35
|
-
const SUPPORTED_LLM_PROVIDERS = ['anthropic', 'stub'];
|
|
36
|
-
/**
|
|
37
|
-
* Default stays `stub` (unlike `peaks audit goal`, whose default is the real
|
|
38
|
-
* provider): the scaffold route is what CI and the registered e2e contract
|
|
39
|
-
* exercise without credentials, and the stub envelope is labelled
|
|
40
|
-
* `status: 'scaffold-only'` / `providerBinding: 'stub'` so it can never be
|
|
41
|
-
* read as a review.
|
|
42
|
-
*/
|
|
43
|
-
const DEFAULT_LLM_PROVIDER = 'stub';
|
|
44
|
-
function isSupportedLlmProvider(value) {
|
|
45
|
-
return SUPPORTED_LLM_PROVIDERS.includes(value);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Empty placeholder used by `fail()` envelopes. `status` is
|
|
49
|
-
* `'not-applicable'` on the error path so consumers can tell
|
|
50
|
-
* "this is a placeholder on a failure" apart from "this is a real
|
|
51
|
-
* scaffold-only success".
|
|
52
|
-
*/
|
|
53
|
-
function emptyFinalReviewData(rid, sessionId, auditGoalPath, missingEnv) {
|
|
54
|
-
return {
|
|
55
|
-
status: 'not-applicable',
|
|
56
|
-
rid,
|
|
57
|
-
sessionId,
|
|
58
|
-
auditGoalPath,
|
|
59
|
-
serviceWired: false,
|
|
60
|
-
providerBinding: 'unknown',
|
|
61
|
-
...(missingEnv === undefined ? {} : { missingEnv })
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
function validateProjectRoot(projectArg) {
|
|
65
|
-
const projectRoot = resolve(projectArg);
|
|
66
|
-
if (!existsSync(projectRoot)) {
|
|
67
|
-
return {
|
|
68
|
-
ok: false,
|
|
69
|
-
code: 'PROJECT_NOT_FOUND',
|
|
70
|
-
message: `project path does not exist: ${projectArg}`
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
let stat;
|
|
74
|
-
try {
|
|
75
|
-
stat = statSync(projectRoot);
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
return { ok: false, code: 'INVALID_PROJECT', message: getErrorMessage(error) };
|
|
79
|
-
}
|
|
80
|
-
if (!stat.isDirectory()) {
|
|
81
|
-
return {
|
|
82
|
-
ok: false,
|
|
83
|
-
code: 'INVALID_PROJECT',
|
|
84
|
-
message: `project path is not a directory: ${projectArg}`
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
return { ok: true, projectRoot };
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Validate the session id. Rejects empty, path-traversal (`..`), and
|
|
91
|
-
* any segment separator (`/`, `\`) so the caller cannot escape
|
|
92
|
-
* `.peaks/_runtime/<sessionId>/audit-goal/` via CLI flags.
|
|
93
|
-
*/
|
|
94
|
-
function validateSessionId(sessionId) {
|
|
95
|
-
if (sessionId.length === 0) {
|
|
96
|
-
return {
|
|
97
|
-
ok: false,
|
|
98
|
-
code: 'MISSING_REQUIRED_FLAG',
|
|
99
|
-
message: '`--session-id` is required and must be a non-empty string'
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
if (sessionId.includes('..') || sessionId.includes('/') || sessionId.includes('\\')) {
|
|
103
|
-
return {
|
|
104
|
-
ok: false,
|
|
105
|
-
code: 'INVALID_SESSION_ID',
|
|
106
|
-
message: '`--session-id` must not contain path-traversal or path-separator characters (rejected: "..", "/", "\\")'
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
return { ok: true, sessionId };
|
|
110
|
-
}
|
|
32
|
+
import { addJsonOption } from '../cli-helpers.js';
|
|
33
|
+
import { DEFAULT_LLM_PROVIDER, SUPPORTED_LLM_PROVIDERS } from './final-review-command-shared.js';
|
|
34
|
+
import { runPrepareFinalReview } from './final-review-prepare-command.js';
|
|
111
35
|
export function registerFinalReviewCommands(program, io) {
|
|
112
36
|
addJsonOption(program
|
|
113
37
|
.command('prepare-final-review <rid>')
|
|
@@ -115,159 +39,8 @@ export function registerFinalReviewCommands(program, io) {
|
|
|
115
39
|
.requiredOption('--project <path>', 'target project root')
|
|
116
40
|
.requiredOption('--session-id <sid>', 'session id whose .peaks/_runtime/<sid>/audit-goal/<rid>.json is the approved goal source')
|
|
117
41
|
.option('--llm-provider <name>', `LLM provider name: ${SUPPORTED_LLM_PROVIDERS.join(' | ')} (default: ${DEFAULT_LLM_PROVIDER} — performs no review)`, DEFAULT_LLM_PROVIDER)
|
|
118
|
-
.option('--base <ref>', 'base ref for the pre/post baseline diff (`existing-functionality-intact`); default: merge-base with origin/HEAD, then origin/main, then origin/master, then HEAD~1 — pass this explicitly when none of those resolve')).action(
|
|
119
|
-
// 1. Project root must exist and be a directory.
|
|
120
|
-
const projectValidation = validateProjectRoot(options.project);
|
|
121
|
-
if (!projectValidation.ok) {
|
|
122
|
-
printResult(io, fail('final-review.prepare', projectValidation.code, projectValidation.message, emptyFinalReviewData(rid, options.sessionId, ''), ['Verify the project path exists and is a directory']), options.json);
|
|
123
|
-
process.exitCode = 1;
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
// 2. Session id must be a safe single-segment string.
|
|
127
|
-
const sessionValidation = validateSessionId(options.sessionId);
|
|
128
|
-
if (!sessionValidation.ok) {
|
|
129
|
-
printResult(io, fail('final-review.prepare', sessionValidation.code, sessionValidation.message, emptyFinalReviewData(rid, options.sessionId, ''), [
|
|
130
|
-
'Pass a non-empty `--session-id` whose value is a single segment (no "..", "/", or "\\")'
|
|
131
|
-
]), options.json);
|
|
132
|
-
process.exitCode = 1;
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
// 3. Compute the audit-goal path the service WOULD read. We do this
|
|
136
|
-
// in two places: the pre-flight existence check (here) and the
|
|
137
|
-
// stub-path envelope (below). The service computes it identically
|
|
138
|
-
// at `src/services/final-review/final-review-service.ts:45-52`.
|
|
139
|
-
//
|
|
140
|
-
// Rid axis. The rid is the CLI positional and it is the FILENAME
|
|
141
|
-
// segment below, so it is checked here, at the join. Added 2026-09-14
|
|
142
|
-
// (repair R1): this join was a second-slot hole — the `--session-id`
|
|
143
|
-
// validation above passed and the rid slot escaped. Found by the
|
|
144
|
-
// widened rule D, not by a human reading the file.
|
|
145
|
-
if (!REQUEST_ID_PATTERN.test(rid)) {
|
|
146
|
-
printResult(io, fail('final-review.prepare', 'RID_INVALID', `Invalid request id: ${rid} (expected letters, digits, dots, underscores, or dashes)`, emptyFinalReviewData(rid, options.sessionId, ''), ['Pass the rid of the slice, e.g. 2026-09-14-some-slug']), options.json);
|
|
147
|
-
process.exitCode = 1;
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const auditGoalPath = join(projectValidation.projectRoot, '.peaks', '_runtime', sessionValidation.sessionId, 'audit-goal', `${rid}.json`);
|
|
151
|
-
// 4. Pre-flight: if the audit-goal file is missing, surface a 404
|
|
152
|
-
// BEFORE the stub/provider check so the caller learns the real
|
|
153
|
-
// reason their request can't proceed.
|
|
154
|
-
if (!existsSync(auditGoalPath)) {
|
|
155
|
-
printResult(io, fail('final-review.prepare', 'AUDIT_GOAL_NOT_FOUND', `audit-goal file not found at expected path: ${auditGoalPath}`, emptyFinalReviewData(rid, sessionValidation.sessionId, auditGoalPath), [
|
|
156
|
-
'Run `peaks audit goal --project <path> --need <text>` first to produce the approved goal JSON.',
|
|
157
|
-
'Confirm `--session-id` matches the session that wrote the goal.'
|
|
158
|
-
]), options.json);
|
|
159
|
-
process.exitCode = 1;
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
// 5. Provider check: unknown names fail loudly — a silent fallback to
|
|
163
|
-
// `stub` would hand the caller a scaffold envelope that reads as a
|
|
164
|
-
// review route, which is the defect class this gate exists to stop.
|
|
165
|
-
const provider = options.llmProvider ?? DEFAULT_LLM_PROVIDER;
|
|
166
|
-
if (!isSupportedLlmProvider(provider)) {
|
|
167
|
-
printResult(io, fail('final-review.prepare', 'LLM_PROVIDER_NOT_IMPLEMENTED', `LLM provider "${provider}" is not implemented. Supported providers: ${SUPPORTED_LLM_PROVIDERS.join(', ')}.`, emptyFinalReviewData(rid, sessionValidation.sessionId, auditGoalPath), [
|
|
168
|
-
`Re-run with \`--llm-provider anthropic\` for a real 4-dim review, or \`--llm-provider ${DEFAULT_LLM_PROVIDER}\` for an offline scaffold.`
|
|
169
|
-
]), options.json);
|
|
170
|
-
process.exitCode = 1;
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
// 6. Stub path: surface a structured "scaffold ready" envelope.
|
|
174
|
-
// We DO NOT call the service here — the stub runner answers the
|
|
175
|
-
// audit-goal shape, not the 4-dim review shape, so running it through
|
|
176
|
-
// `prepareFinalReview()` would only manufacture a malformed review.
|
|
177
|
-
// The envelope confirms the route is wired end-to-end and reports the
|
|
178
|
-
// audit-goal path the service WOULD read.
|
|
179
|
-
if (provider === 'stub') {
|
|
180
|
-
const data = {
|
|
181
|
-
status: 'scaffold-only',
|
|
182
|
-
rid,
|
|
183
|
-
sessionId: sessionValidation.sessionId,
|
|
184
|
-
auditGoalPath,
|
|
185
|
-
serviceWired: true,
|
|
186
|
-
providerBinding: 'stub'
|
|
187
|
-
};
|
|
188
|
-
const envelope = ok('final-review.prepare', data, [], [
|
|
189
|
-
'Stub provider: no 4-dim review was performed. This envelope only proves the route is wired and reachable.',
|
|
190
|
-
`Audit-goal file is present at: ${auditGoalPath}`,
|
|
191
|
-
'Re-run with `--llm-provider anthropic` to produce a real review.'
|
|
192
|
-
]);
|
|
193
|
-
printResult(io, envelope, options.json);
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
// 7. Real provider path: bind a real `LlmRunner` and run the service.
|
|
197
|
-
// Binding happens INSIDE the try so an absent credential surfaces as
|
|
198
|
-
// `LlmBindingError`'s own code instead of escaping as a crash. No
|
|
199
|
-
// envelope is emitted on that path — a "successful" empty review would
|
|
200
|
-
// be worse than an error.
|
|
201
|
-
try {
|
|
202
|
-
const config = resolveAnthropicConfig();
|
|
203
|
-
const llmRunner = createAnthropicRunner(config);
|
|
204
|
-
const review = await prepareFinalReview(rid, {
|
|
205
|
-
projectRoot: projectValidation.projectRoot,
|
|
206
|
-
sessionId: sessionValidation.sessionId,
|
|
207
|
-
llmRunner,
|
|
208
|
-
...(options.base === undefined ? {} : { baseRef: options.base })
|
|
209
|
-
});
|
|
210
|
-
const data = {
|
|
211
|
-
status: 'review-complete',
|
|
212
|
-
rid,
|
|
213
|
-
sessionId: sessionValidation.sessionId,
|
|
214
|
-
auditGoalPath,
|
|
215
|
-
serviceWired: true,
|
|
216
|
-
providerBinding: 'anthropic-messages-api',
|
|
217
|
-
model: config.model,
|
|
218
|
-
review
|
|
219
|
-
};
|
|
220
|
-
const envelope = ok('final-review.prepare', data, review.allPass
|
|
221
|
-
? []
|
|
222
|
-
: [
|
|
223
|
-
`Dimensions needing human attention: ${review.needsAttention.join(', ') || 'none flagged'}.`
|
|
224
|
-
], [
|
|
225
|
-
`4-dim review produced by anthropic-messages-api (model: ${config.model}).`,
|
|
226
|
-
`allPass: ${String(review.allPass)}.`
|
|
227
|
-
]);
|
|
228
|
-
printResult(io, envelope, options.json);
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
const code = finalReviewErrorCode(error);
|
|
232
|
-
printResult(io, fail('final-review.prepare', code, getErrorMessage(error), emptyFinalReviewData(rid, sessionValidation.sessionId, auditGoalPath, error instanceof LlmBindingError ? error.missingEnv : undefined), finalReviewNextActions(code)), options.json);
|
|
233
|
-
process.exitCode = 1;
|
|
234
|
-
}
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Map a thrown error to the CLI's error code. The LLM-layer errors already
|
|
239
|
-
* carry codes precise enough to act on (`LLM_CREDENTIAL_MISSING`,
|
|
240
|
-
* `LLM_REQUEST_FAILED`, …), so they are passed through rather than flattened
|
|
241
|
-
* into one opaque failure.
|
|
242
|
-
*/
|
|
243
|
-
function finalReviewErrorCode(error) {
|
|
244
|
-
if (error instanceof LlmBindingError ||
|
|
245
|
-
error instanceof LlmRequestError ||
|
|
246
|
-
error instanceof IncompleteFinalReviewError) {
|
|
247
|
-
return error.code;
|
|
248
|
-
}
|
|
249
|
-
return 'FINAL_REVIEW_FAILED';
|
|
250
|
-
}
|
|
251
|
-
function finalReviewNextActions(code) {
|
|
252
|
-
switch (code) {
|
|
253
|
-
case 'LLM_CREDENTIAL_MISSING':
|
|
254
|
-
return [
|
|
255
|
-
'Export ANTHROPIC_AUTH_TOKEN (or ANTHROPIC_API_KEY) in the environment that launches peaks, then re-run.',
|
|
256
|
-
'For an offline scaffold instead of a review, re-run with `--llm-provider stub` — it performs NO review.'
|
|
257
|
-
];
|
|
258
|
-
case 'LLM_MODEL_MISSING':
|
|
259
|
-
return [
|
|
260
|
-
'Export ANTHROPIC_MODEL (or CLAUDE_CODE_SUBAGENT_MODEL) in the environment that launches peaks, then re-run.'
|
|
261
|
-
];
|
|
262
|
-
case 'LLM_REQUEST_FAILED':
|
|
263
|
-
return [
|
|
264
|
-
'Check ANTHROPIC_BASE_URL and network reachability, then re-run — a transport failure produces no review.'
|
|
265
|
-
];
|
|
266
|
-
case 'INCOMPLETE_FINAL_REVIEW':
|
|
267
|
-
return [
|
|
268
|
-
'The LLM reply was not valid JSON or omitted a required dimension; re-run so the gate is never read as complete.'
|
|
269
|
-
];
|
|
270
|
-
default:
|
|
271
|
-
return ['Re-run with `--llm-provider stub` to validate the CLI route without a real LLM.'];
|
|
272
|
-
}
|
|
42
|
+
.option('--base <ref>', 'base ref for the pre/post baseline diff (`existing-functionality-intact`); default: merge-base with origin/HEAD, then origin/main, then origin/master, then HEAD~1 — pass this explicitly when none of those resolve')).action((rid, options) => runPrepareFinalReview(rid, options, io));
|
|
273
43
|
}
|
|
44
|
+
// Re-export for tests / external consumers: the envelope vocabulary and the
|
|
45
|
+
// types this command's surface is documented with.
|
|
46
|
+
export { emptyFinalReviewData, isSupportedLlmProvider } from './final-review-command-shared.js';
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// src/cli/commands/final-review-prepare-command.ts
|
|
2
|
+
//
|
|
3
|
+
// The body of `peaks prepare-final-review`: the two input validations, the
|
|
4
|
+
// audit-goal path resolution, the provider check, the stub scaffold route and
|
|
5
|
+
// the real-provider route. Split out of `final-review-commands.ts`; every
|
|
6
|
+
// envelope code, message, `data` field and next-action string is unchanged.
|
|
7
|
+
//
|
|
8
|
+
// The input validations and the `_runtime` join below live in ONE module on
|
|
9
|
+
// purpose: rule D is file-scoped, so a join whose id slot is checked two
|
|
10
|
+
// modules away is a join the guard cannot see.
|
|
11
|
+
import { existsSync, statSync } from 'node:fs';
|
|
12
|
+
import { join, resolve } from 'node:path';
|
|
13
|
+
import { REQUEST_ID_PATTERN } from '../../services/artifacts/request-artifact-service.js';
|
|
14
|
+
import { createAnthropicRunner, LlmBindingError, resolveAnthropicConfig } from '../../services/llm/anthropic-runner.js';
|
|
15
|
+
import { prepareFinalReview } from '../../services/final-review/final-review-service.js';
|
|
16
|
+
import { getErrorMessage } from '../cli-helpers.js';
|
|
17
|
+
import { DEFAULT_LLM_PROVIDER, isSupportedLlmProvider, SUPPORTED_LLM_PROVIDERS } from './final-review-command-shared.js';
|
|
18
|
+
import { emitPrepareFailure, emitReviewEnvelope, emitStubEnvelope, finalReviewErrorCode, finalReviewNextActions } from './final-review-command-envelopes.js';
|
|
19
|
+
function validateProjectRoot(projectArg) {
|
|
20
|
+
const projectRoot = resolve(projectArg);
|
|
21
|
+
if (!existsSync(projectRoot)) {
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
code: 'PROJECT_NOT_FOUND',
|
|
25
|
+
message: `project path does not exist: ${projectArg}`
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
let stat;
|
|
29
|
+
try {
|
|
30
|
+
stat = statSync(projectRoot);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return { ok: false, code: 'INVALID_PROJECT', message: getErrorMessage(error) };
|
|
34
|
+
}
|
|
35
|
+
if (!stat.isDirectory()) {
|
|
36
|
+
return {
|
|
37
|
+
ok: false,
|
|
38
|
+
code: 'INVALID_PROJECT',
|
|
39
|
+
message: `project path is not a directory: ${projectArg}`
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return { ok: true, projectRoot };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate the session id. Rejects empty, path-traversal (`..`), and
|
|
46
|
+
* any segment separator (`/`, `\`) so the caller cannot escape
|
|
47
|
+
* `.peaks/_runtime/<sessionId>/audit-goal/` via CLI flags.
|
|
48
|
+
*/
|
|
49
|
+
function validateSessionId(sessionId) {
|
|
50
|
+
if (sessionId.length === 0) {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
code: 'MISSING_REQUIRED_FLAG',
|
|
54
|
+
message: '`--session-id` is required and must be a non-empty string'
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (sessionId.includes('..') || sessionId.includes('/') || sessionId.includes('\\')) {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
code: 'INVALID_SESSION_ID',
|
|
61
|
+
message: '`--session-id` must not contain path-traversal or path-separator characters (rejected: "..", "/", "\\")'
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return { ok: true, sessionId };
|
|
65
|
+
}
|
|
66
|
+
/** The refusal for an audit goal the pre-flight did not find on disk. */
|
|
67
|
+
function auditGoalMissingRefusal(rid, sessionId, auditGoalPath) {
|
|
68
|
+
return {
|
|
69
|
+
rid,
|
|
70
|
+
code: 'AUDIT_GOAL_NOT_FOUND',
|
|
71
|
+
message: `audit-goal file not found at expected path: ${auditGoalPath}`,
|
|
72
|
+
sessionId,
|
|
73
|
+
auditGoalPath,
|
|
74
|
+
nextActions: [
|
|
75
|
+
'Run `peaks audit goal --project <path> --need <text>` first to produce the approved goal JSON.',
|
|
76
|
+
'Confirm `--session-id` matches the session that wrote the goal.'
|
|
77
|
+
]
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve the audit-goal path, or the refusal that replaces it.
|
|
82
|
+
*
|
|
83
|
+
* The `rid` axis is checked HERE, at the join: the rid is the CLI positional
|
|
84
|
+
* and it is the FILENAME segment, so the `--session-id` validation does not
|
|
85
|
+
* cover it (added 2026-09-14, repair R1 — a second-slot hole, found by the
|
|
86
|
+
* widened rule D rather than by a human reading the file).
|
|
87
|
+
*
|
|
88
|
+
* The audit-goal existence pre-flight sits here too, so the caller learns the
|
|
89
|
+
* real reason its request cannot proceed BEFORE the provider check.
|
|
90
|
+
*/
|
|
91
|
+
function resolveAuditGoalPath(rid, options, projectRoot) {
|
|
92
|
+
const sessionValidation = validateSessionId(options.sessionId);
|
|
93
|
+
if (!sessionValidation.ok) {
|
|
94
|
+
return {
|
|
95
|
+
rid,
|
|
96
|
+
code: sessionValidation.code,
|
|
97
|
+
message: sessionValidation.message,
|
|
98
|
+
sessionId: options.sessionId,
|
|
99
|
+
auditGoalPath: '',
|
|
100
|
+
nextActions: [
|
|
101
|
+
'Pass a non-empty `--session-id` whose value is a single segment (no "..", "/", or "\\")'
|
|
102
|
+
]
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (!REQUEST_ID_PATTERN.test(rid)) {
|
|
106
|
+
return {
|
|
107
|
+
rid,
|
|
108
|
+
code: 'RID_INVALID',
|
|
109
|
+
message: `Invalid request id: ${rid} (expected letters, digits, dots, underscores, or dashes)`,
|
|
110
|
+
sessionId: sessionValidation.sessionId,
|
|
111
|
+
auditGoalPath: '',
|
|
112
|
+
nextActions: ['Pass the rid of the slice, e.g. 2026-09-14-some-slug']
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const auditGoalPath = join(projectRoot, '.peaks', '_runtime', sessionValidation.sessionId, 'audit-goal', `${rid}.json`);
|
|
116
|
+
if (!existsSync(auditGoalPath)) {
|
|
117
|
+
return auditGoalMissingRefusal(rid, sessionValidation.sessionId, auditGoalPath);
|
|
118
|
+
}
|
|
119
|
+
return { projectRoot, sessionId: sessionValidation.sessionId, auditGoalPath };
|
|
120
|
+
}
|
|
121
|
+
/** Resolve the three inputs the run needs, or the refusal that replaces them. */
|
|
122
|
+
function resolvePrepareInputs(rid, options) {
|
|
123
|
+
const projectValidation = validateProjectRoot(options.project);
|
|
124
|
+
if (!projectValidation.ok) {
|
|
125
|
+
return {
|
|
126
|
+
rid,
|
|
127
|
+
code: projectValidation.code,
|
|
128
|
+
message: projectValidation.message,
|
|
129
|
+
sessionId: options.sessionId,
|
|
130
|
+
auditGoalPath: '',
|
|
131
|
+
nextActions: ['Verify the project path exists and is a directory']
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return resolveAuditGoalPath(rid, options, projectValidation.projectRoot);
|
|
135
|
+
}
|
|
136
|
+
function isRefusal(value) {
|
|
137
|
+
return !('projectRoot' in value);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Real provider path: bind a real `LlmRunner` and run the service.
|
|
141
|
+
*
|
|
142
|
+
* Binding happens INSIDE the try so an absent credential surfaces as
|
|
143
|
+
* `LlmBindingError`'s own code instead of escaping as a crash. No envelope is
|
|
144
|
+
* emitted on that path — a "successful" empty review would be worse than an
|
|
145
|
+
* error.
|
|
146
|
+
*/
|
|
147
|
+
async function runRealReview(io, rid, inputs, options) {
|
|
148
|
+
const { json } = options;
|
|
149
|
+
try {
|
|
150
|
+
const config = resolveAnthropicConfig();
|
|
151
|
+
const llmRunner = createAnthropicRunner(config);
|
|
152
|
+
const review = await prepareFinalReview(rid, {
|
|
153
|
+
projectRoot: inputs.projectRoot,
|
|
154
|
+
sessionId: inputs.sessionId,
|
|
155
|
+
llmRunner,
|
|
156
|
+
...(options.base === undefined ? {} : { baseRef: options.base })
|
|
157
|
+
});
|
|
158
|
+
emitReviewEnvelope(io, { rid, goal: inputs, model: config.model, review, json });
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
const code = finalReviewErrorCode(error);
|
|
162
|
+
emitPrepareFailure(io, json, {
|
|
163
|
+
rid,
|
|
164
|
+
code,
|
|
165
|
+
message: getErrorMessage(error),
|
|
166
|
+
sessionId: inputs.sessionId,
|
|
167
|
+
auditGoalPath: inputs.auditGoalPath,
|
|
168
|
+
nextActions: finalReviewNextActions(code)
|
|
169
|
+
}, error instanceof LlmBindingError ? error.missingEnv : undefined);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export async function runPrepareFinalReview(rid, options, io) {
|
|
173
|
+
const inputs = resolvePrepareInputs(rid, options);
|
|
174
|
+
if (isRefusal(inputs)) {
|
|
175
|
+
emitPrepareFailure(io, options.json, inputs);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Unknown provider names fail loudly — a silent fallback to `stub` would hand
|
|
179
|
+
// the caller a scaffold envelope that reads as a review route, which is the
|
|
180
|
+
// defect class this gate exists to stop.
|
|
181
|
+
const provider = options.llmProvider ?? DEFAULT_LLM_PROVIDER;
|
|
182
|
+
if (!isSupportedLlmProvider(provider)) {
|
|
183
|
+
emitPrepareFailure(io, options.json, {
|
|
184
|
+
rid,
|
|
185
|
+
code: 'LLM_PROVIDER_NOT_IMPLEMENTED',
|
|
186
|
+
message: `LLM provider "${provider}" is not implemented. Supported providers: ${SUPPORTED_LLM_PROVIDERS.join(', ')}.`,
|
|
187
|
+
sessionId: inputs.sessionId,
|
|
188
|
+
auditGoalPath: inputs.auditGoalPath,
|
|
189
|
+
nextActions: [
|
|
190
|
+
`Re-run with \`--llm-provider anthropic\` for a real 4-dim review, or \`--llm-provider ${DEFAULT_LLM_PROVIDER}\` for an offline scaffold.`
|
|
191
|
+
]
|
|
192
|
+
});
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (provider === 'stub') {
|
|
196
|
+
emitStubEnvelope(io, rid, inputs, options.json);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
await runRealReview(io, rid, inputs, options);
|
|
200
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DispatchRecord } from '../../services/dispatch/dispatch-record-writer.js';
|
|
2
|
+
import type { FinalizeSelection } from './finalize-selection.js';
|
|
3
|
+
interface FinalizedEntry {
|
|
4
|
+
recordPath: string;
|
|
5
|
+
requestId: string;
|
|
6
|
+
status: string;
|
|
7
|
+
}
|
|
8
|
+
interface SkippedEntry {
|
|
9
|
+
recordPath: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
12
|
+
interface FailedEntry {
|
|
13
|
+
recordPath: string;
|
|
14
|
+
error: string;
|
|
15
|
+
}
|
|
16
|
+
/** The sweep's three counters, threaded explicitly instead of closed over. */
|
|
17
|
+
export interface FinalizeAccumulator {
|
|
18
|
+
readonly finalized: FinalizedEntry[];
|
|
19
|
+
readonly skipped: SkippedEntry[];
|
|
20
|
+
readonly errors: FailedEntry[];
|
|
21
|
+
}
|
|
22
|
+
export interface MappedOutcome {
|
|
23
|
+
readonly status: 'done' | 'failed' | 'cancelled';
|
|
24
|
+
readonly outcome: 'success' | 'failed' | 'cancelled';
|
|
25
|
+
}
|
|
26
|
+
export declare const OUTCOME_MAP: Record<string, MappedOutcome>;
|
|
27
|
+
export declare function makeAccumulator(): FinalizeAccumulator;
|
|
28
|
+
/**
|
|
29
|
+
* N2 — one unreadable record must not abort the sweep.
|
|
30
|
+
*
|
|
31
|
+
* Skipping `active-dispatches.json` and `batch-*.counter.json` by FILENAME
|
|
32
|
+
* removed the two non-record files that happened to be in the directory, but a
|
|
33
|
+
* single stale or foreign `dispatch-*.json` (an old `version`, hand-edited
|
|
34
|
+
* JSON, a truncated write) still made `readRecord` throw from OUTSIDE any
|
|
35
|
+
* try/catch — and the throw escaped to the action's outer handler, so
|
|
36
|
+
* `--request-id` AND `--batch` both died with `FINALIZE_ERROR` and exit 1
|
|
37
|
+
* without touching a single healthy record.
|
|
38
|
+
*
|
|
39
|
+
* A record that cannot be read is now reported in `errors[]` and skipped;
|
|
40
|
+
* every other record is processed as before.
|
|
41
|
+
*/
|
|
42
|
+
export declare function tryReadRecord(recordPath: string, readRecord: (recordPath: string) => DispatchRecord, acc: FinalizeAccumulator): DispatchRecord | null;
|
|
43
|
+
export declare function buildFinalizeHints(acc: FinalizeAccumulator, selection: FinalizeSelection | null): string[];
|
|
44
|
+
export {};
|