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,100 @@
|
|
|
1
|
+
import { createRequestArtifact, VALID_REQUEST_TYPES } from '../../services/artifacts/request-artifact-service.js';
|
|
2
|
+
import { parseRole, parseRequestType, VALID_ROLES } from './request-format-helpers.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
5
|
+
const INIT_DESCRIPTION = 'Create the per-request artifact template for a Peaks role (dry-run by default)';
|
|
6
|
+
const INIT_ID_HELP = 'request id, e.g. 2026-05-23-add-foo. With --apply, also pre-creates the canonical change-id scope dir at .peaks/_runtime/change/<id>/ so sub-agents never write .peaks/_runtime/<id>/ at top level.';
|
|
7
|
+
const INIT_PROJECT_HELP = 'target project root';
|
|
8
|
+
const INIT_SESSION_HELP = 'override the default date-stamped session id';
|
|
9
|
+
const INIT_APPLY_HELP = 'write the artifact file (default: preview only)';
|
|
10
|
+
const INIT_CALLER_ID_HELP = 'Override the caller id for this invocation (D4 priority: flag beats env beats platform fallback). The resolved callerId is stamped on the artifact body and surfaced in the response envelope.';
|
|
11
|
+
const CALLER_ID_INVALID_HINTS = [
|
|
12
|
+
'Set --caller-id to a value matching ^[a-zA-Z0-9._-]{1,200}$',
|
|
13
|
+
'Or set PEAKS_CALLER_ID env var (or CLAUDE_CODE_SESSION_ID for Claude Code)'
|
|
14
|
+
];
|
|
15
|
+
function failInitSessionIdRequired(io, options) {
|
|
16
|
+
printResult(io, fail('request.init', 'SESSION_ID_REQUIRED', '--session-id is required: the CLI writes envelopes only to .peaks/_runtime/<sessionId>/... (one-axis layout)', { role: options.role, requestId: options.id }, ['Re-run with --session-id <sid>', 'Or run `peaks workspace init` to create a session first']), options.json);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
19
|
+
function buildInitServiceOptions(options, sessionId) {
|
|
20
|
+
// One-axis layout: --session-id is REQUIRED. The on-disk root
|
|
21
|
+
// is always `.peaks/_runtime/<sessionId>/<role>/...`. The user
|
|
22
|
+
// has forbidden the `.peaks/_runtime/<id>/` root layout — without an
|
|
23
|
+
// explicit session id, we cannot guarantee the artifact lands
|
|
24
|
+
// under `_runtime/`. See
|
|
25
|
+
// `.peaks/memory/2026-06-21-peaks-request-session-id-leaks-into-change-id.md`.
|
|
26
|
+
const serviceOptions = {
|
|
27
|
+
role: options.role,
|
|
28
|
+
requestId: options.id,
|
|
29
|
+
projectRoot: options.project
|
|
30
|
+
};
|
|
31
|
+
serviceOptions.sessionId = sessionId;
|
|
32
|
+
if (options.apply === true) {
|
|
33
|
+
serviceOptions.apply = true;
|
|
34
|
+
}
|
|
35
|
+
if (options.type !== undefined) {
|
|
36
|
+
serviceOptions.requestType = options.type;
|
|
37
|
+
}
|
|
38
|
+
return serviceOptions;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the caller id, or `null` when the refusal has already been printed
|
|
42
|
+
* and the exit code set. The CLI integration layer is the single entry point
|
|
43
|
+
* for the resolver; we do not pre-judge whether the caller passed a flag.
|
|
44
|
+
* D2 (no callerId available) and D5 (regex fail) both surface as
|
|
45
|
+
* `CALLER_ID_INVALID` with the inner `CallerIdError.source` propagated for
|
|
46
|
+
* caller-side audit. A non-`CallerIdError` propagates to the caller's catch.
|
|
47
|
+
*/
|
|
48
|
+
async function resolveInitCallerId(io, options) {
|
|
49
|
+
const { resolveCallerId, CallerIdError } = await import('../../services/session/resolve-caller-id.js');
|
|
50
|
+
try {
|
|
51
|
+
return resolveCallerId(options.callerId !== undefined ? { flagValue: options.callerId } : {});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error instanceof CallerIdError) {
|
|
55
|
+
// D2 (EX_USAGE, exit 64) = nothing usable; D5 (EX_DATAERR, exit 65)
|
|
56
|
+
// = something was passed but did not match the D1 regex.
|
|
57
|
+
const code = error.code === 'EX_USAGE' ? 64 : 65;
|
|
58
|
+
printResult(io, fail('request.init', 'CALLER_ID_INVALID', error.message, { source: error.source }, [
|
|
59
|
+
...CALLER_ID_INVALID_HINTS
|
|
60
|
+
]), options.json);
|
|
61
|
+
process.exitCode = code;
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function runRequestInit(options, io) {
|
|
68
|
+
try {
|
|
69
|
+
if (options.sessionId === undefined || options.sessionId.trim().length === 0) {
|
|
70
|
+
failInitSessionIdRequired(io, options);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const serviceOptions = buildInitServiceOptions(options, options.sessionId);
|
|
74
|
+
const callerId = await resolveInitCallerId(io, options);
|
|
75
|
+
if (callerId === null)
|
|
76
|
+
return;
|
|
77
|
+
serviceOptions.callerId = callerId;
|
|
78
|
+
const result = await createRequestArtifact(serviceOptions);
|
|
79
|
+
printResult(io, ok('request.init', result, [], result.applied ? [] : [`Re-run with --apply to write ${result.path}`]), options.json);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
printResult(io, fail('request.init', 'REQUEST_INIT_FAILED', getErrorMessage(error), { role: options.role, requestId: options.id }, ['Check role, request id, and project path before retrying']), options.json);
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function registerRequestInitCommand(request, io) {
|
|
87
|
+
addJsonOption(request
|
|
88
|
+
.command('init')
|
|
89
|
+
.description(INIT_DESCRIPTION)
|
|
90
|
+
.requiredOption('--role <role>', `target role (${VALID_ROLES.join(' | ')})`, parseRole)
|
|
91
|
+
.requiredOption('--id <request-id>', INIT_ID_HELP)
|
|
92
|
+
.requiredOption('--project <path>', INIT_PROJECT_HELP)
|
|
93
|
+
.option('--session-id <session>', INIT_SESSION_HELP)
|
|
94
|
+
.option('--apply', INIT_APPLY_HELP)
|
|
95
|
+
.option('--type <type>', `request type (${VALID_REQUEST_TYPES.join(' | ')}); default: feature`, parseRequestType)
|
|
96
|
+
// (D4 priority level 1). When set, the resolved callerId is surfaced
|
|
97
|
+
// in the JSON envelope; the on-disk artifact records it in the
|
|
98
|
+
// artifact body so future reads know which caller produced it.
|
|
99
|
+
.option('--caller-id <id>', INIT_CALLER_ID_HELP)).action((options) => runRequestInit(options, io));
|
|
100
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { lintRequestArtifact } from '../../services/artifacts/artifact-lint-service.js';
|
|
2
|
+
import { parseRole, VALID_ROLES } from './request-format-helpers.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
5
|
+
const LINT_DESCRIPTION = 'Scan a request artifact body for unfilled placeholders (<...>, TBD, bare bullets) before declaring it complete';
|
|
6
|
+
const LINT_REQUEST_ID_HELP = 'request id';
|
|
7
|
+
const LINT_PROJECT_HELP = 'target project root';
|
|
8
|
+
const LINT_SESSION_HELP = 'restrict to a specific session id';
|
|
9
|
+
function failLintNotFound(io, options, requestId) {
|
|
10
|
+
printResult(io, fail('request.lint', 'REQUEST_NOT_FOUND', `No artifact found for role=${options.role} requestId=${requestId}`, { role: options.role, requestId }, ['Verify the request id, role, and session id']), options.json);
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
}
|
|
13
|
+
async function runRequestLint(requestId, options, io) {
|
|
14
|
+
try {
|
|
15
|
+
const lintOptions = {
|
|
16
|
+
projectRoot: options.project,
|
|
17
|
+
role: options.role,
|
|
18
|
+
requestId
|
|
19
|
+
};
|
|
20
|
+
if (options.sessionId !== undefined) {
|
|
21
|
+
lintOptions.sessionId = options.sessionId;
|
|
22
|
+
}
|
|
23
|
+
const report = await lintRequestArtifact(lintOptions);
|
|
24
|
+
if (report === null) {
|
|
25
|
+
failLintNotFound(io, options, requestId);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const nextActions = [];
|
|
29
|
+
if (!report.ok) {
|
|
30
|
+
nextActions.push(`Fix ${report.findings.filter((f) => f.severity === 'error').length} error finding(s) before transitioning this artifact.`);
|
|
31
|
+
}
|
|
32
|
+
printResult(io, ok('request.lint', report, [], nextActions), options.json);
|
|
33
|
+
if (!report.ok) {
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
printResult(io, fail('request.lint', 'REQUEST_LINT_FAILED', getErrorMessage(error), { role: options.role, requestId }, ['Verify the artifact path before retrying']), options.json);
|
|
39
|
+
process.exitCode = 1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function registerRequestLintCommand(request, io) {
|
|
43
|
+
addJsonOption(request
|
|
44
|
+
.command('lint')
|
|
45
|
+
.description(LINT_DESCRIPTION)
|
|
46
|
+
.argument('<request-id>', LINT_REQUEST_ID_HELP)
|
|
47
|
+
.requiredOption('--role <role>', `target role (${VALID_ROLES.join(' | ')})`, parseRole)
|
|
48
|
+
.requiredOption('--project <path>', LINT_PROJECT_HELP)
|
|
49
|
+
.option('--session-id <session>', LINT_SESSION_HELP)).action((requestId, options) => runRequestLint(requestId, options, io));
|
|
50
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type RequestArtifactSummary } from '../../services/artifacts/request-artifact-service.js';
|
|
3
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
4
|
+
/**
|
|
5
|
+
* `request list`. `count` is the true total; `names` carries
|
|
6
|
+
* `role/requestId (state)` labels for the first N entries. The full `items`
|
|
7
|
+
* array (with paths + timestamps) is one flag away — omit `--summary`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildRequestListSummary(items: readonly RequestArtifactSummary[]): Record<string, unknown>;
|
|
10
|
+
export declare function registerRequestListCommand(request: Command, io: ProgramIO): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { listRequestArtifacts } from '../../services/artifacts/request-artifact-service.js';
|
|
2
|
+
import { boundedNames, fitSummaryToBytes } from '../../services/context/summary-view.js';
|
|
3
|
+
import { parseRole, VALID_ROLES } from './request-format-helpers.js';
|
|
4
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
5
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
6
|
+
const LIST_DESCRIPTION = 'List per-request artifacts under a project workspace';
|
|
7
|
+
const LIST_PROJECT_HELP = 'target project root';
|
|
8
|
+
const LIST_SESSION_HELP = 'limit to a specific session id';
|
|
9
|
+
const LIST_SUMMARY_HELP = 'emit counts + names-of-first-N only (≤ 2 KB) instead of the full item array; the default envelope is unchanged';
|
|
10
|
+
/**
|
|
11
|
+
* `request list`. `count` is the true total; `names` carries
|
|
12
|
+
* `role/requestId (state)` labels for the first N entries. The full `items`
|
|
13
|
+
* array (with paths + timestamps) is one flag away — omit `--summary`.
|
|
14
|
+
*/
|
|
15
|
+
export function buildRequestListSummary(items) {
|
|
16
|
+
const view = {
|
|
17
|
+
view: 'summary',
|
|
18
|
+
count: items.length,
|
|
19
|
+
items: boundedNames(items.map((i) => `${i.role}/${i.requestId} (${i.state})`))
|
|
20
|
+
};
|
|
21
|
+
return fitSummaryToBytes(view);
|
|
22
|
+
}
|
|
23
|
+
async function runRequestList(options, io) {
|
|
24
|
+
try {
|
|
25
|
+
const listOptions = {
|
|
26
|
+
projectRoot: options.project
|
|
27
|
+
};
|
|
28
|
+
if (options.sessionId !== undefined) {
|
|
29
|
+
listOptions.sessionId = options.sessionId;
|
|
30
|
+
}
|
|
31
|
+
if (options.role !== undefined) {
|
|
32
|
+
listOptions.role = options.role;
|
|
33
|
+
}
|
|
34
|
+
const items = await listRequestArtifacts(listOptions);
|
|
35
|
+
// Slice B: `--summary` is opt-in; the default `{count, items}` shape is
|
|
36
|
+
// byte-identical to before.
|
|
37
|
+
const data = options.summary === true ? buildRequestListSummary(items) : { count: items.length, items };
|
|
38
|
+
printResult(io, ok('request.list', data), options.json);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
printResult(io, fail('request.list', 'REQUEST_LIST_FAILED', getErrorMessage(error), { projectRoot: options.project }, ['Check project path before retrying']), options.json);
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function registerRequestListCommand(request, io) {
|
|
46
|
+
addJsonOption(request
|
|
47
|
+
.command('list')
|
|
48
|
+
.description(LIST_DESCRIPTION)
|
|
49
|
+
.requiredOption('--project <path>', LIST_PROJECT_HELP)
|
|
50
|
+
.option('--session-id <session>', LIST_SESSION_HELP)
|
|
51
|
+
.option('--role <role>', `limit to a single role (${VALID_ROLES.join(' | ')})`, parseRole)
|
|
52
|
+
.option('--summary', LIST_SUMMARY_HELP)).action((options) => runRequestList(options, io));
|
|
53
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { getRepairCycleStatus } from '../../services/artifacts/repair-cycle-service.js';
|
|
2
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
4
|
+
const REPAIR_STATUS_DESCRIPTION = 'Count RD↔QA repair cycles for a request from its RD artifact transition notes; reports cycle count and whether the 3-cycle cap is reached';
|
|
5
|
+
const REPAIR_STATUS_REQUEST_ID_HELP = 'request id';
|
|
6
|
+
const REPAIR_STATUS_PROJECT_HELP = 'target project root';
|
|
7
|
+
const REPAIR_STATUS_SESSION_HELP = 'restrict to a specific session id';
|
|
8
|
+
const REPAIR_STATUS_MAX_CYCLES_HELP = 'override the default max cycle cap (default 3)';
|
|
9
|
+
function resolveRepairMaxCycles(options) {
|
|
10
|
+
return options.maxCycles !== undefined && /^\d+$/.test(options.maxCycles)
|
|
11
|
+
? Number(options.maxCycles)
|
|
12
|
+
: 3;
|
|
13
|
+
}
|
|
14
|
+
function failRepairStatusNotFound(io, options, requestId) {
|
|
15
|
+
printResult(io, fail('request.repair-status', 'REQUEST_NOT_FOUND', `No RD artifact found for requestId=${requestId}`, { requestId }, ['Verify the request id and session id']), options.json);
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
}
|
|
18
|
+
function repairStatusNextActions(report) {
|
|
19
|
+
const nextActions = [];
|
|
20
|
+
if (report.atCap) {
|
|
21
|
+
nextActions.push(`Repair cap reached (${report.cycleCount}/${report.maxCycles}). Emit a blocked TXT handoff and stop the loop.`);
|
|
22
|
+
}
|
|
23
|
+
else if (report.cycleCount > 0) {
|
|
24
|
+
nextActions.push(`${report.remaining} repair cycle(s) remaining before block.`);
|
|
25
|
+
}
|
|
26
|
+
return nextActions;
|
|
27
|
+
}
|
|
28
|
+
async function runRequestRepairStatus(requestId, options, io) {
|
|
29
|
+
try {
|
|
30
|
+
const statusOptions = {
|
|
31
|
+
projectRoot: options.project,
|
|
32
|
+
requestId,
|
|
33
|
+
maxCycles: resolveRepairMaxCycles(options)
|
|
34
|
+
};
|
|
35
|
+
if (options.sessionId !== undefined) {
|
|
36
|
+
statusOptions.sessionId = options.sessionId;
|
|
37
|
+
}
|
|
38
|
+
const report = await getRepairCycleStatus(statusOptions);
|
|
39
|
+
if (report === null) {
|
|
40
|
+
failRepairStatusNotFound(io, options, requestId);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
printResult(io, ok('request.repair-status', report, [], repairStatusNextActions(report)), options.json);
|
|
44
|
+
if (report.atCap) {
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
printResult(io, fail('request.repair-status', 'REQUEST_REPAIR_STATUS_FAILED', getErrorMessage(error), { requestId }, ['Verify the artifact path before retrying']), options.json);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function registerRequestRepairStatusCommand(request, io) {
|
|
54
|
+
addJsonOption(request
|
|
55
|
+
.command('repair-status')
|
|
56
|
+
.description(REPAIR_STATUS_DESCRIPTION)
|
|
57
|
+
.argument('<request-id>', REPAIR_STATUS_REQUEST_ID_HELP)
|
|
58
|
+
.requiredOption('--project <path>', REPAIR_STATUS_PROJECT_HELP)
|
|
59
|
+
.option('--session-id <session>', REPAIR_STATUS_SESSION_HELP)
|
|
60
|
+
.option('--max-cycles <n>', REPAIR_STATUS_MAX_CYCLES_HELP)).action((requestId, options) => runRequestRepairStatus(requestId, options, io));
|
|
61
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { showRequestArtifact } from '../../services/artifacts/request-artifact-service.js';
|
|
2
|
+
import { applyPerArtifactFormat, inferArtifactName, parseRole, resolveDefaultFormat, VALID_ROLES } from './request-format-helpers.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
5
|
+
const SHOW_DESCRIPTION = 'Show a single per-request artifact, optionally scoped to a session. R3: default body format is per-artifact (PRD/tech-doc pretty; everything else compact); pass --pretty or --compact to override uniformly.';
|
|
6
|
+
const SHOW_REQUEST_ID_HELP = 'request id, e.g. 2026-05-23-add-foo';
|
|
7
|
+
const SHOW_PROJECT_HELP = 'target project root';
|
|
8
|
+
const SHOW_SESSION_HELP = 'restrict to a specific session id';
|
|
9
|
+
const SHOW_PRETTY_HELP = 'force the body to render pretty (overrides the per-artifact default)';
|
|
10
|
+
const SHOW_COMPACT_HELP = 'force the body to render compact (overrides the per-artifact default)';
|
|
11
|
+
function failShowNotFound(io, options, requestId) {
|
|
12
|
+
printResult(io, fail('request.show', 'REQUEST_NOT_FOUND', `No artifact found for role=${options.role} requestId=${requestId}`, { role: options.role, requestId }, ['Verify the request id, role, and session id']), options.json);
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
}
|
|
15
|
+
function buildShowPayload(result, options) {
|
|
16
|
+
// R3: pick the per-artifact default format and apply the override
|
|
17
|
+
// if either flag is set. Last-flag-wins if both are passed.
|
|
18
|
+
const override = options.compact === true ? 'compact' : options.pretty === true ? 'pretty' : null;
|
|
19
|
+
const artifactName = inferArtifactName(result, options.role);
|
|
20
|
+
const format = override ?? resolveDefaultFormat(artifactName);
|
|
21
|
+
const transformed = applyPerArtifactFormat(result, override ?? format);
|
|
22
|
+
return transformed === result ? { ...result, format } : transformed;
|
|
23
|
+
}
|
|
24
|
+
async function runRequestShow(requestId, options, io) {
|
|
25
|
+
try {
|
|
26
|
+
const showOptions = {
|
|
27
|
+
projectRoot: options.project,
|
|
28
|
+
role: options.role,
|
|
29
|
+
requestId
|
|
30
|
+
};
|
|
31
|
+
if (options.sessionId !== undefined) {
|
|
32
|
+
showOptions.sessionId = options.sessionId;
|
|
33
|
+
}
|
|
34
|
+
const result = await showRequestArtifact(showOptions);
|
|
35
|
+
if (result === null) {
|
|
36
|
+
failShowNotFound(io, options, requestId);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
printResult(io, ok('request.show', buildShowPayload(result, options)), options.json);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
printResult(io, fail('request.show', 'REQUEST_SHOW_FAILED', getErrorMessage(error), { role: options.role, requestId }, ['Check role, request id, and project path before retrying']), options.json);
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function registerRequestShowCommand(request, io) {
|
|
47
|
+
addJsonOption(request
|
|
48
|
+
.command('show')
|
|
49
|
+
.description(SHOW_DESCRIPTION)
|
|
50
|
+
.argument('<request-id>', SHOW_REQUEST_ID_HELP)
|
|
51
|
+
.requiredOption('--role <role>', `target role (${VALID_ROLES.join(' | ')})`, parseRole)
|
|
52
|
+
.requiredOption('--project <path>', SHOW_PROJECT_HELP)
|
|
53
|
+
.option('--session-id <session>', SHOW_SESSION_HELP)
|
|
54
|
+
.option('--pretty', SHOW_PRETTY_HELP)
|
|
55
|
+
.option('--compact', SHOW_COMPACT_HELP)).action((requestId, options) => runRequestShow(requestId, options, io));
|
|
56
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { transitionRequestArtifact } from '../../services/artifacts/request-artifact-service.js';
|
|
2
|
+
import { parseRole, parseStateForRole, VALID_ROLES } from './request-format-helpers.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
5
|
+
import { runTransitionPreflight } from './request-transition-preflight.js';
|
|
6
|
+
import { reportTransitionFailure } from './request-transition-failures.js';
|
|
7
|
+
import { buildPrdHandoffResult, collectQaHandoffHooks, preCompactNote } from './request-transition-hooks.js';
|
|
8
|
+
const TRANSITION_DESCRIPTION = 'Move a per-request artifact to a new state defined by its role state machine';
|
|
9
|
+
const TRANSITION_REQUEST_ID_HELP = 'request id, e.g. 2026-05-23-add-foo';
|
|
10
|
+
const TRANSITION_STATE_HELP = 'new state name; allowed values depend on role';
|
|
11
|
+
const TRANSITION_PROJECT_HELP = 'target project root';
|
|
12
|
+
const TRANSITION_SESSION_HELP = 'restrict to a specific session id';
|
|
13
|
+
const TRANSITION_REASON_HELP = 'reason appended as a transition note; required when --allow-incomplete is set';
|
|
14
|
+
const TRANSITION_ALLOW_INCOMPLETE_HELP = 'bypass artifact prerequisite checks; requires --reason and records the bypass in the artifact';
|
|
15
|
+
const TRANSITION_CONFIRM_HELP = 'skip the confirmation gate (for non-interactive / LLM contexts)';
|
|
16
|
+
const TRANSITION_FORCE_CONFIRM_HELP = 'bypass mode-enforced confirmation (use with caution)';
|
|
17
|
+
function buildTransitionOptions(requestId, role, newState, options) {
|
|
18
|
+
const transitionOptions = {
|
|
19
|
+
role,
|
|
20
|
+
requestId,
|
|
21
|
+
projectRoot: options.project,
|
|
22
|
+
newState
|
|
23
|
+
};
|
|
24
|
+
if (options.sessionId !== undefined) {
|
|
25
|
+
transitionOptions.sessionId = options.sessionId;
|
|
26
|
+
}
|
|
27
|
+
if (options.reason !== undefined) {
|
|
28
|
+
transitionOptions.reason = options.reason;
|
|
29
|
+
}
|
|
30
|
+
if (options.allowIncomplete === true) {
|
|
31
|
+
transitionOptions.allowIncomplete = true;
|
|
32
|
+
}
|
|
33
|
+
if (options.confirm === true) {
|
|
34
|
+
transitionOptions.confirmed = true;
|
|
35
|
+
}
|
|
36
|
+
if (options.forceConfirm === true) {
|
|
37
|
+
transitionOptions.forceConfirm = true;
|
|
38
|
+
}
|
|
39
|
+
return transitionOptions;
|
|
40
|
+
}
|
|
41
|
+
/** Type sanity check for PRD handoff. */
|
|
42
|
+
async function applyPrdTypeSanityCheck(transitionOptions, requestId, options) {
|
|
43
|
+
if (!(transitionOptions.role === 'prd' && transitionOptions.newState === 'handed-off'))
|
|
44
|
+
return;
|
|
45
|
+
const { showRequestArtifact: showForType } = await import('../../services/artifacts/request-artifact-service.js');
|
|
46
|
+
const showTypeOptions = {
|
|
47
|
+
projectRoot: options.project,
|
|
48
|
+
role: 'prd',
|
|
49
|
+
requestId
|
|
50
|
+
};
|
|
51
|
+
if (options.sessionId !== undefined) {
|
|
52
|
+
showTypeOptions.sessionId = options.sessionId;
|
|
53
|
+
}
|
|
54
|
+
const existing = await showForType(showTypeOptions);
|
|
55
|
+
if (existing !== null) {
|
|
56
|
+
transitionOptions.typeSanityCheck = {
|
|
57
|
+
projectRoot: options.project,
|
|
58
|
+
declaredType: existing.requestType
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function failTransitionNotFound(io, options, role, requestId) {
|
|
63
|
+
printResult(io, fail('request.transition', 'REQUEST_NOT_FOUND', `No artifact found for role=${role} requestId=${requestId}`, { role, requestId }, ['Verify the request id, role, and session id']), options.json);
|
|
64
|
+
process.exitCode = 1;
|
|
65
|
+
}
|
|
66
|
+
function printTransitionResult(io, options, result, hooks) {
|
|
67
|
+
const note = preCompactNote(hooks.preCompact);
|
|
68
|
+
printResult(io, ok('request.transition', {
|
|
69
|
+
...result,
|
|
70
|
+
preCompactCheckpoint: hooks.preCompact?.data ?? null,
|
|
71
|
+
codegraphRefresh: hooks.codegraphRefresh
|
|
72
|
+
}, [
|
|
73
|
+
...(note === null ? [] : [note]),
|
|
74
|
+
...(hooks.codegraphWarning === null ? [] : [hooks.codegraphWarning])
|
|
75
|
+
]), options.json);
|
|
76
|
+
}
|
|
77
|
+
async function runRequestTransition(requestId, options, io) {
|
|
78
|
+
try {
|
|
79
|
+
const role = options.role;
|
|
80
|
+
const newState = parseStateForRole(role, options.state);
|
|
81
|
+
const preflight = await runTransitionPreflight(io, requestId, role, options);
|
|
82
|
+
if (!preflight.proceed)
|
|
83
|
+
return;
|
|
84
|
+
const transitionOptions = buildTransitionOptions(requestId, role, newState, options);
|
|
85
|
+
await applyPrdTypeSanityCheck(transitionOptions, requestId, options);
|
|
86
|
+
const result = await transitionRequestArtifact(transitionOptions);
|
|
87
|
+
if (result === null) {
|
|
88
|
+
failTransitionNotFound(io, options, role, requestId);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const hooks = await collectQaHandoffHooks(role, newState, result.sessionId, options.project);
|
|
92
|
+
const handoff = await buildPrdHandoffResult({
|
|
93
|
+
role,
|
|
94
|
+
newState,
|
|
95
|
+
requestId,
|
|
96
|
+
options,
|
|
97
|
+
result
|
|
98
|
+
});
|
|
99
|
+
if (handoff !== null) {
|
|
100
|
+
printResult(io, handoff, options.json);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
printTransitionResult(io, options, result, hooks);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
reportTransitionFailure(io, options, requestId, error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function registerRequestTransitionCommand(request, io) {
|
|
110
|
+
addJsonOption(request
|
|
111
|
+
.command('transition')
|
|
112
|
+
.description(TRANSITION_DESCRIPTION)
|
|
113
|
+
.argument('<request-id>', TRANSITION_REQUEST_ID_HELP)
|
|
114
|
+
.requiredOption('--role <role>', `target role (${VALID_ROLES.join(' | ')})`, parseRole)
|
|
115
|
+
.requiredOption('--state <state>', TRANSITION_STATE_HELP)
|
|
116
|
+
.requiredOption('--project <path>', TRANSITION_PROJECT_HELP)
|
|
117
|
+
.option('--session-id <session>', TRANSITION_SESSION_HELP)
|
|
118
|
+
.option('--reason <text>', TRANSITION_REASON_HELP)
|
|
119
|
+
.option('--allow-incomplete', TRANSITION_ALLOW_INCOMPLETE_HELP)
|
|
120
|
+
.option('--confirm', TRANSITION_CONFIRM_HELP)
|
|
121
|
+
.option('--force-confirm', TRANSITION_FORCE_CONFIRM_HELP)).action((requestId, options) => runRequestTransition(requestId, options, io));
|
|
122
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
2
|
+
import type { RequestTransitionOptions } from './request-command-options.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a thrown transition error to its envelope. `InvalidArgumentError` is
|
|
5
|
+
* re-thrown: Commander raises it for an unparsable `--state`, and swallowing it
|
|
6
|
+
* here would report a usage error as a transition failure.
|
|
7
|
+
*/
|
|
8
|
+
export declare function reportTransitionFailure(io: ProgramIO, options: RequestTransitionOptions, requestId: string, error: unknown): void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Split out of `request-commands.ts`: the
|
|
2
|
+
// typed failure arms of `peaks request transition`. Each branch is a
|
|
3
|
+
// printer + exit-code pair, kept one per function so the dispatcher stays
|
|
4
|
+
// readable and every branch keeps setting `process.exitCode = 1`.
|
|
5
|
+
import { InvalidArgumentError } from 'commander';
|
|
6
|
+
import { PrerequisitesNotSatisfiedError, LintGateError, TypeSanityViolationError, FileSizeViolationError } from '../../services/artifacts/request-artifact-service.js';
|
|
7
|
+
import { ConfirmationRequiredError } from '../../services/mode/mode-enforcement.js';
|
|
8
|
+
import { fail } from 'peaks-loop-shared/result';
|
|
9
|
+
import { getErrorMessage, printResult } from '../cli-helpers.js';
|
|
10
|
+
function reportPrerequisitesFailure(io, options, error) {
|
|
11
|
+
// The `warnings` list is surfaced inside the 1-minor-release back-compat
|
|
12
|
+
// window (e.g. MUT_REPORT) so the operator sees both the hard-blocked
|
|
13
|
+
// `missing` paths and the soft-blocked ones. `warnings` is always present
|
|
14
|
+
// (possibly empty) to keep the response shape stable.
|
|
15
|
+
printResult(io, fail('request.transition', error.code, error.message, {
|
|
16
|
+
role: error.role,
|
|
17
|
+
newState: error.newState,
|
|
18
|
+
sessionId: error.sessionId,
|
|
19
|
+
missing: error.missing,
|
|
20
|
+
warnings: error.warnings
|
|
21
|
+
}, [
|
|
22
|
+
...error.missing.map((entry) => `Produce ${entry.path}: ${entry.description}`),
|
|
23
|
+
...error.warnings.map((w) => `Soft-blocked (v2.13.3 back-compat window): ${w.path} — ${w.message}`),
|
|
24
|
+
'Once every required artifact exists, rerun this transition.',
|
|
25
|
+
'For exceptional cases (docs-only / config-only change), bypass with: --allow-incomplete --reason "<justification>"'
|
|
26
|
+
]), options.json);
|
|
27
|
+
process.exitCode = 1;
|
|
28
|
+
}
|
|
29
|
+
function reportLintGateFailure(io, options, error) {
|
|
30
|
+
printResult(io, fail('request.transition', error.code, error.message, { role: error.role, newState: error.newState, errorCount: error.errorCount }, [
|
|
31
|
+
'Fix lint errors in the artifact before transitioning.',
|
|
32
|
+
'Run `peaks request lint --role <role> --id <rid> --project <path>` to see details.',
|
|
33
|
+
'Or bypass with: --allow-incomplete --reason "<justification>"'
|
|
34
|
+
]), options.json);
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
}
|
|
37
|
+
function reportTypeSanityFailure(io, options, error) {
|
|
38
|
+
printResult(io, fail('request.transition', error.code, error.message, {
|
|
39
|
+
declaredType: error.declaredType,
|
|
40
|
+
suggestedTypes: error.suggestedTypes,
|
|
41
|
+
rationale: error.rationale
|
|
42
|
+
}, [
|
|
43
|
+
`Re-classify the request — likely correct type: ${error.suggestedTypes.join(' | ')}`,
|
|
44
|
+
'Or, if the declared type is correct, surface the mismatch reason to the user.'
|
|
45
|
+
]), options.json);
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
}
|
|
48
|
+
function reportFileSizeFailure(io, options, error) {
|
|
49
|
+
printResult(io, fail('request.transition', error.code, error.message, { violations: error.violations }, [
|
|
50
|
+
...error.violations.map((v) => `Split ${v.file} (${v.lines} lines) below its ${v.cap}-line cap`),
|
|
51
|
+
'Or bypass with: --allow-incomplete --reason "<justification>"'
|
|
52
|
+
]), options.json);
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
}
|
|
55
|
+
function reportConfirmationFailure(io, options, requestId, error) {
|
|
56
|
+
printResult(io, fail('request.transition', 'CONFIRMATION_REQUIRED', error.message, { role: options.role, requestId, transitionKey: error.transitionKey, mode: error.mode }, [...error.nextActions]), options.json);
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Map a thrown transition error to its envelope. `InvalidArgumentError` is
|
|
61
|
+
* re-thrown: Commander raises it for an unparsable `--state`, and swallowing it
|
|
62
|
+
* here would report a usage error as a transition failure.
|
|
63
|
+
*/
|
|
64
|
+
export function reportTransitionFailure(io, options, requestId, error) {
|
|
65
|
+
if (error instanceof InvalidArgumentError) {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
if (error instanceof PrerequisitesNotSatisfiedError) {
|
|
69
|
+
reportPrerequisitesFailure(io, options, error);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (error instanceof LintGateError) {
|
|
73
|
+
reportLintGateFailure(io, options, error);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (error instanceof TypeSanityViolationError) {
|
|
77
|
+
reportTypeSanityFailure(io, options, error);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (error instanceof FileSizeViolationError) {
|
|
81
|
+
reportFileSizeFailure(io, options, error);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (error instanceof ConfirmationRequiredError) {
|
|
85
|
+
reportConfirmationFailure(io, options, requestId, error);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
printResult(io, fail('request.transition', 'REQUEST_TRANSITION_FAILED', getErrorMessage(error), { role: options.role, requestId }, ['Check role, request id, state, and project path before retrying']), options.json);
|
|
89
|
+
process.exitCode = 1;
|
|
90
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ResultEnvelope } from 'peaks-loop-shared/result';
|
|
2
|
+
import type { RequestArtifactRole, RequestArtifactState, transitionRequestArtifact } from '../../services/artifacts/request-artifact-service.js';
|
|
3
|
+
import { type CodegraphAutorefreshResult } from '../../services/codegraph/codegraph-autorefresh.js';
|
|
4
|
+
import type { RequestTransitionOptions } from './request-command-options.js';
|
|
5
|
+
export type TransitionResult = NonNullable<Awaited<ReturnType<typeof transitionRequestArtifact>>>;
|
|
6
|
+
export type TransitionHooks = {
|
|
7
|
+
preCompact: ResultEnvelope<unknown> | null;
|
|
8
|
+
codegraphRefresh: CodegraphAutorefreshResult | null;
|
|
9
|
+
codegraphWarning: string | null;
|
|
10
|
+
};
|
|
11
|
+
type PrdHandoffContext = {
|
|
12
|
+
role: RequestArtifactRole;
|
|
13
|
+
newState: RequestArtifactState;
|
|
14
|
+
requestId: string;
|
|
15
|
+
options: RequestTransitionOptions;
|
|
16
|
+
result: TransitionResult;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* The RD → QA slice-complete boundary. Set only for rd:qa-handoff; null
|
|
20
|
+
* otherwise. Best-effort and fail-silent — never blocks the transition.
|
|
21
|
+
*
|
|
22
|
+
* When transitioning across the RD → QA boundary (rd:qa-handoff), check the
|
|
23
|
+
* active session's context-fill ratio. If it is in the 0.85–0.95 pre-compact
|
|
24
|
+
* zone, write a checkpoint BEFORE the transition completes and attach
|
|
25
|
+
* `preCompactCheckpoint: true` to the response envelope. The LLM remains the
|
|
26
|
+
* decision-maker; this hook only surfaces the signal. At ratio ≥ 0.95 the
|
|
27
|
+
* auto-compact orchestrator ASKS the harness to compact and reports that it is
|
|
28
|
+
* waiting; it does not refuse anything, because peaks-loop has no executor for
|
|
29
|
+
* a running session and a refusal it cannot enforce only deadlocked the runner.
|
|
30
|
+
*
|
|
31
|
+
* A2 (2026-09-17): never BLOCKING is kept; never VISIBLE is not. A non-refresh
|
|
32
|
+
* while a codegraph store is in use becomes a warning line beside the
|
|
33
|
+
* transition's own notes. See `codegraphRefreshNotice` for why
|
|
34
|
+
* `no-codegraph-dir` stays silent.
|
|
35
|
+
*/
|
|
36
|
+
export declare function collectQaHandoffHooks(role: RequestArtifactRole, newState: RequestArtifactState, sessionId: string, project: string): Promise<TransitionHooks>;
|
|
37
|
+
/**
|
|
38
|
+
* Only fires when the handoff is missing; existing handoffs are not
|
|
39
|
+
* overwritten. Post-step after peaks-prd's businessGoal artifact transitions to
|
|
40
|
+
* `handed-off` (the canonical "complete" state in the prd state machine). The
|
|
41
|
+
* trigger is fire-and-forget: failure NEVER blocks the transition.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildPrdHandoffResult(ctx: PrdHandoffContext): Promise<ResultEnvelope<unknown> | null>;
|
|
44
|
+
/**
|
|
45
|
+
* The pre-compact signal rendered into the final envelope's `nextActions`.
|
|
46
|
+
* `null` when the hook did not trigger (zone is not pre-compact OR the
|
|
47
|
+
* transition is not a slice boundary).
|
|
48
|
+
*/
|
|
49
|
+
export declare function preCompactNote(preCompact: ResultEnvelope<unknown> | null): string | null;
|
|
50
|
+
export {};
|