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,58 @@
|
|
|
1
|
+
import { type WorkspaceInitReport } from '../../../services/workspace/workspace-service.js';
|
|
2
|
+
import { type BootstrapProjectScanEnvelope } from '../../../services/prd/project-scan-bootstrap-service.js';
|
|
3
|
+
import type { WorkspaceInitOptions, WorkspaceInitRotation } from './init-options.js';
|
|
4
|
+
/** Everything one `peaks workspace init` run carries into its envelope phase. */
|
|
5
|
+
export type WorkspaceInitContext = {
|
|
6
|
+
options: WorkspaceInitOptions;
|
|
7
|
+
projectRoot: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
rotation: WorkspaceInitRotation;
|
|
10
|
+
report: WorkspaceInitReport;
|
|
11
|
+
projectScanEnvelope: BootstrapProjectScanEnvelope | null;
|
|
12
|
+
projectScanError: string | null;
|
|
13
|
+
};
|
|
14
|
+
type InitTarget = {
|
|
15
|
+
projectRoot: string;
|
|
16
|
+
sessionId: string;
|
|
17
|
+
rotation: WorkspaceInitRotation;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the project root and the session id. Two paths:
|
|
21
|
+
* - explicit --session-id: use it as the requested binding target
|
|
22
|
+
* (ConflictingSessionError fires if it conflicts with an in-flight
|
|
23
|
+
* session, unless --allow-session-rebind is set)
|
|
24
|
+
* - omitted: defer to ensureSession(), which reuses an existing
|
|
25
|
+
* binding or auto-generates a fresh one. The init then writes
|
|
26
|
+
* .peaks/_runtime/session.json so the binding sticks.
|
|
27
|
+
*
|
|
28
|
+
* Before that: canonicalise the project root. If the user (or the
|
|
29
|
+
* LLM via "$(pwd)") passed a sub-directory of a real git repo
|
|
30
|
+
* (e.g. prompt-project/prompt-project/ inside the outer
|
|
31
|
+
* prompt-project/.git), promote the path to the git root. Without
|
|
32
|
+
* this, peaks would build a parallel .peaks/ tree under the
|
|
33
|
+
* nested sub-folder and silently break the project-binding model
|
|
34
|
+
* (the same regression that produced prompt-project/.peaks/ in
|
|
35
|
+
* the 5/27-5/29 sessions). When startPath is not inside any
|
|
36
|
+
* git repo, the helper falls through to the cwd verbatim.
|
|
37
|
+
* `resolveWritableProjectRoot` = `resolveCanonicalProjectRoot` plus the
|
|
38
|
+
* home-directory refusal. It has to be this one, and it has to run here:
|
|
39
|
+
* `ensureSessionWithRotation` below WRITES (it mints/binds a session), so
|
|
40
|
+
* a guard placed after it would leave a `.peaks/_runtime/` tree in the
|
|
41
|
+
* user's home even though the init was refused.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveInitTarget(options: WorkspaceInitOptions): Promise<InitTarget>;
|
|
44
|
+
export declare function runInitWorkspace(options: WorkspaceInitOptions, projectRoot: string, sessionId: string): Promise<WorkspaceInitReport>;
|
|
45
|
+
/**
|
|
46
|
+
* After the workspace dir is initialized, also bootstrap the
|
|
47
|
+
* `.peaks/project-scan/` artifact tree (project-scan.md + 4
|
|
48
|
+
* bundled audit/business templates). Idempotent — when the user
|
|
49
|
+
* re-runs `workspace init`, the existing files are kept (their
|
|
50
|
+
* sediment is user-authored). Pass `--no-project-scan-bootstrap`
|
|
51
|
+
* to skip, or `--force-project-scan-templates` to overwrite the
|
|
52
|
+
* 4 bundled templates anyway.
|
|
53
|
+
*/
|
|
54
|
+
export declare function bootstrapProjectScanForInit(options: WorkspaceInitOptions, projectRoot: string): Promise<{
|
|
55
|
+
envelope: BootstrapProjectScanEnvelope | null;
|
|
56
|
+
error: string | null;
|
|
57
|
+
}>;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// Split out of `workspace/init-command.ts`:
|
|
2
|
+
// project-root + session resolution, the `initWorkspace` call itself, and the
|
|
3
|
+
// optional `.peaks/project-scan/` bootstrap.
|
|
4
|
+
import { resolveWritableProjectRoot } from '../../../services/config/config-safety.js';
|
|
5
|
+
import { initWorkspace } from '../../../services/workspace/workspace-service.js';
|
|
6
|
+
import { ensureSessionWithRotation } from '../../../services/session/session-manager.js';
|
|
7
|
+
import { bootstrapProjectScan } from '../../../services/prd/project-scan-bootstrap-service.js';
|
|
8
|
+
import { getErrorMessage } from '../../cli-helpers.js';
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the project root and the session id. Two paths:
|
|
11
|
+
* - explicit --session-id: use it as the requested binding target
|
|
12
|
+
* (ConflictingSessionError fires if it conflicts with an in-flight
|
|
13
|
+
* session, unless --allow-session-rebind is set)
|
|
14
|
+
* - omitted: defer to ensureSession(), which reuses an existing
|
|
15
|
+
* binding or auto-generates a fresh one. The init then writes
|
|
16
|
+
* .peaks/_runtime/session.json so the binding sticks.
|
|
17
|
+
*
|
|
18
|
+
* Before that: canonicalise the project root. If the user (or the
|
|
19
|
+
* LLM via "$(pwd)") passed a sub-directory of a real git repo
|
|
20
|
+
* (e.g. prompt-project/prompt-project/ inside the outer
|
|
21
|
+
* prompt-project/.git), promote the path to the git root. Without
|
|
22
|
+
* this, peaks would build a parallel .peaks/ tree under the
|
|
23
|
+
* nested sub-folder and silently break the project-binding model
|
|
24
|
+
* (the same regression that produced prompt-project/.peaks/ in
|
|
25
|
+
* the 5/27-5/29 sessions). When startPath is not inside any
|
|
26
|
+
* git repo, the helper falls through to the cwd verbatim.
|
|
27
|
+
* `resolveWritableProjectRoot` = `resolveCanonicalProjectRoot` plus the
|
|
28
|
+
* home-directory refusal. It has to be this one, and it has to run here:
|
|
29
|
+
* `ensureSessionWithRotation` below WRITES (it mints/binds a session), so
|
|
30
|
+
* a guard placed after it would leave a `.peaks/_runtime/` tree in the
|
|
31
|
+
* user's home even though the init was refused.
|
|
32
|
+
*/
|
|
33
|
+
export async function resolveInitTarget(options) {
|
|
34
|
+
const projectRoot = resolveWritableProjectRoot(options.project);
|
|
35
|
+
let sessionId;
|
|
36
|
+
let rotation = {
|
|
37
|
+
previousSessionId: null,
|
|
38
|
+
reason: null
|
|
39
|
+
};
|
|
40
|
+
if (options.sessionId !== undefined && options.sessionId.length > 0) {
|
|
41
|
+
sessionId = options.sessionId;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const result = await ensureSessionWithRotation(projectRoot, {
|
|
45
|
+
// Commander translates `--no-rotate-on-outer-mismatch` into
|
|
46
|
+
// `options.rotateOnOuterMismatch = false` (the `--no-` prefix
|
|
47
|
+
// is consumed and the remainder becomes the JS property name,
|
|
48
|
+
// with the boolean value flipped). The pre-slice-014 anti-
|
|
49
|
+
// pattern (reading `options.<flag-with-no-prefix> === true`)
|
|
50
|
+
// is NOT used here. The default (no flag) leaves
|
|
51
|
+
// `options.rotateOnOuterMismatch` undefined, which is not
|
|
52
|
+
// equal to `false`, so the default is "rotate on mismatch"
|
|
53
|
+
// (the new auto-roll).
|
|
54
|
+
skipRotateOnOuterMismatch: options.rotateOnOuterMismatch === false
|
|
55
|
+
});
|
|
56
|
+
sessionId = result.sessionId;
|
|
57
|
+
rotation = {
|
|
58
|
+
previousSessionId: result.previousSessionId,
|
|
59
|
+
reason: result.rotationReason
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return { projectRoot, sessionId, rotation };
|
|
63
|
+
}
|
|
64
|
+
export async function runInitWorkspace(options, projectRoot, sessionId) {
|
|
65
|
+
return initWorkspace({
|
|
66
|
+
projectRoot,
|
|
67
|
+
sessionId,
|
|
68
|
+
allowSessionRebind: options.allowSessionRebind === true,
|
|
69
|
+
// Commander translates `--no-claude-hooks` into
|
|
70
|
+
// `options.claudeHooks = false`. The default (no flag) leaves
|
|
71
|
+
// `options.claudeHooks` undefined, which is not equal to
|
|
72
|
+
// `false`, so the default is "install hooks" (the bypass is
|
|
73
|
+
// on). Pass `--no-claude-hooks` to opt out.
|
|
74
|
+
noClaudeHooks: options.claudeHooks === false,
|
|
75
|
+
// auto-apply for the missing-standards scaffold. Default false
|
|
76
|
+
// — only the diagnostic is emitted. Pass --init-standards to
|
|
77
|
+
// also run `executeProjectStandardsInit({ apply: true })`.
|
|
78
|
+
initStandards: options.initStandards === true
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* After the workspace dir is initialized, also bootstrap the
|
|
83
|
+
* `.peaks/project-scan/` artifact tree (project-scan.md + 4
|
|
84
|
+
* bundled audit/business templates). Idempotent — when the user
|
|
85
|
+
* re-runs `workspace init`, the existing files are kept (their
|
|
86
|
+
* sediment is user-authored). Pass `--no-project-scan-bootstrap`
|
|
87
|
+
* to skip, or `--force-project-scan-templates` to overwrite the
|
|
88
|
+
* 4 bundled templates anyway.
|
|
89
|
+
*/
|
|
90
|
+
export async function bootstrapProjectScanForInit(options, projectRoot) {
|
|
91
|
+
if (options.projectScanBootstrap === false) {
|
|
92
|
+
// Explicit opt-out. The envelope stays null; the JSON
|
|
93
|
+
// response carries `projectScan: { skipped: true, ... }` so
|
|
94
|
+
// callers can distinguish "skipped by flag" from "skipped by
|
|
95
|
+
// idempotency".
|
|
96
|
+
return {
|
|
97
|
+
envelope: {
|
|
98
|
+
created: false,
|
|
99
|
+
skipped: true,
|
|
100
|
+
templatesBooted: 0,
|
|
101
|
+
templatesSkipped: 0,
|
|
102
|
+
projectScanPath: `${projectRoot}/.peaks/project-scan/project-scan.md`,
|
|
103
|
+
durationMs: 0
|
|
104
|
+
},
|
|
105
|
+
error: null
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const envelope = await bootstrapProjectScan({
|
|
110
|
+
projectRoot,
|
|
111
|
+
...(options.forceProjectScanTemplates === true ? { forceTemplates: true } : {})
|
|
112
|
+
});
|
|
113
|
+
return { envelope, error: null };
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
// Don't fail init over a project-scan issue — the workspace
|
|
117
|
+
// is already initialized and the user has the JSON envelope.
|
|
118
|
+
// Surface the failure as a warning so the LLM can decide.
|
|
119
|
+
return { envelope: null, error: getErrorMessage(error) };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { WorkspaceInitContext } from './init-context.js';
|
|
2
|
+
import type { CodegraphAutoStakeOutcome, FirstTimeHooksInstallOutcome } from './init-options.js';
|
|
3
|
+
export declare function buildInitEnvelopeData(ctx: WorkspaceInitContext, hooksOutcome: FirstTimeHooksInstallOutcome, codegraphAutoOutcome: CodegraphAutoStakeOutcome | null): Record<string, unknown>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function buildInitEnvelopeData(ctx, hooksOutcome, codegraphAutoOutcome) {
|
|
2
|
+
const { report, rotation, projectScanEnvelope, projectScanError } = ctx;
|
|
3
|
+
return {
|
|
4
|
+
...report,
|
|
5
|
+
// JSON envelope so the LLM and the human both see the swap.
|
|
6
|
+
// Field is omitted (not null) when no rotation fired.
|
|
7
|
+
...(rotation.previousSessionId !== null && rotation.reason !== null
|
|
8
|
+
? {
|
|
9
|
+
rotation: {
|
|
10
|
+
previousSessionId: rotation.previousSessionId,
|
|
11
|
+
reason: rotation.reason
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
: {}),
|
|
15
|
+
hooksInstall: {
|
|
16
|
+
decision: hooksOutcome.decision,
|
|
17
|
+
action: hooksOutcome.action,
|
|
18
|
+
scope: hooksOutcome.scope,
|
|
19
|
+
...(hooksOutcome.reason !== undefined ? { reason: hooksOutcome.reason } : {})
|
|
20
|
+
},
|
|
21
|
+
...(codegraphAutoOutcome !== null ? { codegraphAutoStake: codegraphAutoOutcome } : {}),
|
|
22
|
+
// for the .peaks/project-scan/ bootstrap. Always present
|
|
23
|
+
// (even when skipped / errored) so downstream readers can
|
|
24
|
+
// rely on the shape.
|
|
25
|
+
...(projectScanEnvelope !== null
|
|
26
|
+
? {
|
|
27
|
+
projectScan: {
|
|
28
|
+
...projectScanEnvelope,
|
|
29
|
+
...(projectScanError !== null ? { error: projectScanError } : {})
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
: {})
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Split out of `workspace/init-command.ts`: the
|
|
2
|
+
// typed failure arms of `peaks workspace init`. Each arm is a printer +
|
|
3
|
+
// exit-code pair; the dispatcher preserves the original branch order.
|
|
4
|
+
import { InvalidSessionIdError, ConflictingSessionError, LegacyChangeIdSiblingError } from '../../../services/workspace/workspace-service.js';
|
|
5
|
+
import { UnsafeProjectRootError } from '../../../services/config/config-safety.js';
|
|
6
|
+
import { fail } from 'peaks-loop-shared/result';
|
|
7
|
+
import { getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
8
|
+
/**
|
|
9
|
+
* A typed refusal, not a crash: "you are standing in your home directory, which
|
|
10
|
+
* is not a project" is a thing the caller can fix in one step, and the envelope
|
|
11
|
+
* has to say which directory was refused and what to pass instead.
|
|
12
|
+
* `WORKSPACE_INIT_FAILED` below would have buried it as an unexplained failure.
|
|
13
|
+
*/
|
|
14
|
+
function reportUnsafeProjectRoot(io, error, options) {
|
|
15
|
+
printResult(io, fail('workspace.init', 'UNSAFE_PROJECT_ROOT', error.message, {
|
|
16
|
+
resolvedProjectRoot: error.projectRoot,
|
|
17
|
+
projectOption: options.project ?? null
|
|
18
|
+
}, [
|
|
19
|
+
'Pass --project <path-to-your-project> instead of a path that resolves to your home directory.',
|
|
20
|
+
'This command creates .peaks/, .gitignore, .claude/settings.local.json and a codegraph index; none of those belong in $HOME.',
|
|
21
|
+
'If you meant to initialize the current directory, cd into a project directory first — peaks will not write into the home directory itself.'
|
|
22
|
+
]), options.json);
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
}
|
|
25
|
+
function reportInvalidSessionId(io, error, options) {
|
|
26
|
+
printResult(io, fail('workspace.init', error.code, error.message, { sessionId: options.sessionId }, [
|
|
27
|
+
'Use a date-prefixed kebab slug like 2026-05-25-add-user-auth'
|
|
28
|
+
]), options.json);
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
}
|
|
31
|
+
function reportConflictingSession(io, error, options) {
|
|
32
|
+
printResult(io, fail('workspace.init', error.code, error.message, {
|
|
33
|
+
existingSessionId: error.existingSessionId,
|
|
34
|
+
requestedSessionId: error.requestedSessionId
|
|
35
|
+
}, [
|
|
36
|
+
`Finish or abandon session "${error.existingSessionId}" first, then re-run workspace init.`,
|
|
37
|
+
'Or pass --allow-session-rebind to override the binding (overwrites the prior binding).'
|
|
38
|
+
]), options.json);
|
|
39
|
+
process.exitCode = 1;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Slice 2.8.3: a 2.8.0-era orphan `.peaks/_runtime/<change-id>/` was found at
|
|
43
|
+
* top level. The CLI surfaces the migration steps verbatim from the error
|
|
44
|
+
* message plus three concrete nextActions so the user (or LLM driver) has an
|
|
45
|
+
* unambiguous recovery path. We do NOT auto-migrate because the legacy sibling
|
|
46
|
+
* dir may contain user-authored content.
|
|
47
|
+
*/
|
|
48
|
+
function reportLegacyChangeIdSibling(io, error, options) {
|
|
49
|
+
printResult(io, fail('workspace.init', error.code, error.message, {
|
|
50
|
+
sessionId: error.sessionId,
|
|
51
|
+
legacyPath: error.legacyPath
|
|
52
|
+
}, [
|
|
53
|
+
`Inspect ${error.legacyPath} for any user-authored content you want to keep.`,
|
|
54
|
+
`Move any desired files into .peaks/_runtime/<sessionId>/<role>/ (gitignored), then delete ${error.legacyPath}.`,
|
|
55
|
+
`Re-run \`peaks workspace init --project <path>\` to bind a fresh session.`
|
|
56
|
+
]), options.json);
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
}
|
|
59
|
+
function reportGenericInitFailure(io, error, options) {
|
|
60
|
+
// The `LegacyChangeIdBindingError` catch branch is gone — the change-id
|
|
61
|
+
// binding file at `.peaks/_runtime/current-change` is no longer written by
|
|
62
|
+
// init, so there is no legacy binding to detect.
|
|
63
|
+
printResult(io, fail('workspace.init', 'WORKSPACE_INIT_FAILED', getErrorMessage(error), { projectRoot: options.project, sessionId: options.sessionId }, ['Verify the project path exists and is writable']), options.json);
|
|
64
|
+
process.exitCode = 1;
|
|
65
|
+
}
|
|
66
|
+
export function reportWorkspaceInitFailure(io, error, options) {
|
|
67
|
+
if (error instanceof UnsafeProjectRootError) {
|
|
68
|
+
reportUnsafeProjectRoot(io, error, options);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (error instanceof InvalidSessionIdError) {
|
|
72
|
+
reportInvalidSessionId(io, error, options);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (error instanceof ConflictingSessionError) {
|
|
76
|
+
reportConflictingSession(io, error, options);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (error instanceof LegacyChangeIdSiblingError) {
|
|
80
|
+
reportLegacyChangeIdSibling(io, error, options);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
reportGenericInitFailure(io, error, options);
|
|
84
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { FirstTimeHooksInstallOutcome, ResolveFirstTimeHooksInstallOptions } from './init-options.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the first-time "install peaks hooks" decision for this project.
|
|
4
|
+
* Decision tree:
|
|
5
|
+
*
|
|
6
|
+
* 1. Read the sticky marker.
|
|
7
|
+
* - Marker present:
|
|
8
|
+
* - marker.decision === 'installed' AND hooks are present → action: marker-honored, no side effects
|
|
9
|
+
* - marker.decision === 'installed' AND hooks are MISSING → re-install, action: reinstalled
|
|
10
|
+
* - marker.decision === 'skipped' → action: marker-honored, no install
|
|
11
|
+
* - Marker absent:
|
|
12
|
+
* - hooks already present → write a fresh 'installed' marker, action: already-installed
|
|
13
|
+
* - otherwise:
|
|
14
|
+
* - explicit --install-hooks=auto → install + marker, action: first-decision
|
|
15
|
+
* - explicit --install-hooks=skip → marker only, action: first-decision
|
|
16
|
+
* - explicit --install-hooks=ask OR default in TTY:
|
|
17
|
+
* - jsonMode → silently auto-install (LLM cannot answer), action: first-decision
|
|
18
|
+
* - TTY → prompt; on yes install + marker, on no marker-only
|
|
19
|
+
* - default in non-TTY → auto-install, action: first-decision
|
|
20
|
+
*
|
|
21
|
+
* Project scope is the only supported scope here; global scope is reserved
|
|
22
|
+
* for explicit `peaks hooks install --global` invocations.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveFirstTimeHooksInstall(options: ResolveFirstTimeHooksInstallOptions): Promise<FirstTimeHooksInstallOutcome>;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// Split out of `workspace/init-command.ts`:
|
|
2
|
+
// the first-time "install peaks hooks" decision. The original function was 127
|
|
3
|
+
// code lines with a complexity of 19; the marker / auto / prompt paths are now
|
|
4
|
+
// one function each so every branch stays inside the 50-code-line cap.
|
|
5
|
+
import { applyHookInstall, readHookStatus } from '../../../services/skills/hooks-settings-service.js';
|
|
6
|
+
import { getErrorMessage } from '../../cli-helpers.js';
|
|
7
|
+
import { readDecisionMarker, writeDecisionMarker, promptYesNo } from './helpers.js';
|
|
8
|
+
const PROMPT_TEXT = '\nPeaks-Cli: install the PreToolUse hooks for this project now?\n' +
|
|
9
|
+
' → Bash matcher: `peaks gate enforce` (SOP gate enforcement)\n' +
|
|
10
|
+
'The gate-enforce hook runs on every Claude Code tool call without further prompting. The decision is sticky\n' +
|
|
11
|
+
'(recorded in .peaks/.peaks-init-hooks-decision.json) and re-runs of `workspace init` will\n' +
|
|
12
|
+
'honour it. Re-run with --install-hooks=skip or --install-hooks=auto to override.\n\n' +
|
|
13
|
+
'Install now? [Y/n]: ';
|
|
14
|
+
/**
|
|
15
|
+
* readHookStatus can throw (e.g. .claude is a symlink → safety check rejects).
|
|
16
|
+
* Treat any throw as "hooks status unknown → treat as not-installed" so the
|
|
17
|
+
* function still reaches the install path; the install will surface the same
|
|
18
|
+
* error in a more specific reason field.
|
|
19
|
+
*/
|
|
20
|
+
function readHookStatusOrUnknown(projectRoot) {
|
|
21
|
+
try {
|
|
22
|
+
return readHookStatus('project', projectRoot);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
// Fall through to the install path; the failure will be captured below.
|
|
26
|
+
void error;
|
|
27
|
+
return { installed: false };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function resolveWithExistingMarker(projectRoot, existingMarker, hookStatus) {
|
|
31
|
+
if (existingMarker.decision === 'installed' && !hookStatus.installed) {
|
|
32
|
+
try {
|
|
33
|
+
applyHookInstall('project', projectRoot);
|
|
34
|
+
return {
|
|
35
|
+
decision: 'installed',
|
|
36
|
+
action: 'reinstalled',
|
|
37
|
+
scope: 'project',
|
|
38
|
+
reason: 'marker-said-installed-hooks-missing'
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return {
|
|
43
|
+
decision: existingMarker.decision,
|
|
44
|
+
action: 'marker-honored',
|
|
45
|
+
scope: 'project',
|
|
46
|
+
reason: `reinstall-failed: ${getErrorMessage(error)}`
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
decision: existingMarker.decision,
|
|
52
|
+
action: 'marker-honored',
|
|
53
|
+
scope: existingMarker.scope
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The reason code distinguishes the path the user took to reach auto-install:
|
|
58
|
+
* - explicit-auto: user passed --install-hooks=auto
|
|
59
|
+
* - json-mode: no --install-hooks flag, but --json was set
|
|
60
|
+
* - non-tty-default: no flag, no --json, stdin is not a TTY
|
|
61
|
+
*/
|
|
62
|
+
function autoInstallHooks(projectRoot, explicitMode, jsonMode) {
|
|
63
|
+
let autoReason;
|
|
64
|
+
if (explicitMode === 'auto') {
|
|
65
|
+
autoReason = 'explicit-auto';
|
|
66
|
+
}
|
|
67
|
+
else if (jsonMode) {
|
|
68
|
+
autoReason = 'json-mode';
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
autoReason = 'non-tty-default';
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
applyHookInstall('project', projectRoot);
|
|
75
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
76
|
+
return {
|
|
77
|
+
decision: 'installed',
|
|
78
|
+
action: 'first-decision',
|
|
79
|
+
scope: 'project',
|
|
80
|
+
reason: autoReason
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// Auto-install failed: still record the decision so we do not keep retrying
|
|
85
|
+
// every workspace init. The user can fix the underlying problem and run
|
|
86
|
+
// `peaks hooks install` manually.
|
|
87
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
88
|
+
return {
|
|
89
|
+
decision: 'installed',
|
|
90
|
+
action: 'first-decision',
|
|
91
|
+
scope: 'project',
|
|
92
|
+
reason: `install-failed: ${getErrorMessage(error)}`
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** `ask` mode in a TTY: prompt once and record the answer sticky. */
|
|
97
|
+
async function promptForHooksInstall(projectRoot) {
|
|
98
|
+
process.stderr.write(PROMPT_TEXT);
|
|
99
|
+
const answer = await promptYesNo('');
|
|
100
|
+
if (answer === null) {
|
|
101
|
+
// TTY disappeared mid-prompt (rare): treat as skip + write marker.
|
|
102
|
+
writeDecisionMarker(projectRoot, 'skipped');
|
|
103
|
+
return {
|
|
104
|
+
decision: 'skipped',
|
|
105
|
+
action: 'first-decision',
|
|
106
|
+
scope: 'project',
|
|
107
|
+
reason: 'tty-prompt-aborted'
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (!answer) {
|
|
111
|
+
writeDecisionMarker(projectRoot, 'skipped');
|
|
112
|
+
return {
|
|
113
|
+
decision: 'skipped',
|
|
114
|
+
action: 'first-decision',
|
|
115
|
+
scope: 'project',
|
|
116
|
+
reason: 'user-answered-no'
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
applyHookInstall('project', projectRoot);
|
|
121
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
122
|
+
return {
|
|
123
|
+
decision: 'installed',
|
|
124
|
+
action: 'first-decision',
|
|
125
|
+
scope: 'project',
|
|
126
|
+
reason: 'user-answered-yes'
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
131
|
+
return {
|
|
132
|
+
decision: 'installed',
|
|
133
|
+
action: 'first-decision',
|
|
134
|
+
scope: 'project',
|
|
135
|
+
reason: `install-failed: ${getErrorMessage(error)}`
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Resolve the first-time "install peaks hooks" decision for this project.
|
|
141
|
+
* Decision tree:
|
|
142
|
+
*
|
|
143
|
+
* 1. Read the sticky marker.
|
|
144
|
+
* - Marker present:
|
|
145
|
+
* - marker.decision === 'installed' AND hooks are present → action: marker-honored, no side effects
|
|
146
|
+
* - marker.decision === 'installed' AND hooks are MISSING → re-install, action: reinstalled
|
|
147
|
+
* - marker.decision === 'skipped' → action: marker-honored, no install
|
|
148
|
+
* - Marker absent:
|
|
149
|
+
* - hooks already present → write a fresh 'installed' marker, action: already-installed
|
|
150
|
+
* - otherwise:
|
|
151
|
+
* - explicit --install-hooks=auto → install + marker, action: first-decision
|
|
152
|
+
* - explicit --install-hooks=skip → marker only, action: first-decision
|
|
153
|
+
* - explicit --install-hooks=ask OR default in TTY:
|
|
154
|
+
* - jsonMode → silently auto-install (LLM cannot answer), action: first-decision
|
|
155
|
+
* - TTY → prompt; on yes install + marker, on no marker-only
|
|
156
|
+
* - default in non-TTY → auto-install, action: first-decision
|
|
157
|
+
*
|
|
158
|
+
* Project scope is the only supported scope here; global scope is reserved
|
|
159
|
+
* for explicit `peaks hooks install --global` invocations.
|
|
160
|
+
*/
|
|
161
|
+
export async function resolveFirstTimeHooksInstall(options) {
|
|
162
|
+
const { projectRoot, jsonMode } = options;
|
|
163
|
+
const existingMarker = readDecisionMarker(projectRoot);
|
|
164
|
+
const hookStatus = readHookStatusOrUnknown(projectRoot);
|
|
165
|
+
if (existingMarker !== null) {
|
|
166
|
+
return resolveWithExistingMarker(projectRoot, existingMarker, hookStatus);
|
|
167
|
+
}
|
|
168
|
+
// No marker yet — first decision.
|
|
169
|
+
if (hookStatus.installed) {
|
|
170
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
171
|
+
return { decision: 'installed', action: 'already-installed', scope: 'project' };
|
|
172
|
+
}
|
|
173
|
+
// Determine effective mode (explicit flag wins; default depends on TTY + jsonMode).
|
|
174
|
+
const explicitMode = options.explicitMode;
|
|
175
|
+
const effectiveMode = explicitMode ?? (jsonMode ? 'auto' : process.stdin.isTTY === true ? 'ask' : 'auto');
|
|
176
|
+
if (effectiveMode === 'skip') {
|
|
177
|
+
writeDecisionMarker(projectRoot, 'skipped');
|
|
178
|
+
return {
|
|
179
|
+
decision: 'skipped',
|
|
180
|
+
action: 'first-decision',
|
|
181
|
+
scope: 'project',
|
|
182
|
+
reason: 'explicit-skip'
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
if (effectiveMode === 'auto' || jsonMode) {
|
|
186
|
+
return autoInstallHooks(projectRoot, explicitMode, jsonMode);
|
|
187
|
+
}
|
|
188
|
+
return promptForHooksInstall(projectRoot);
|
|
189
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { HooksDecision } from './helpers.js';
|
|
2
|
+
export type WorkspaceInitOptions = {
|
|
3
|
+
project: string;
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
allowSessionRebind?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* flag is `--no-rotate-on-outer-mismatch`; commander strips the
|
|
9
|
+
* `--no-` prefix and assigns the boolean to this property (default
|
|
10
|
+
* `true`, set to `false` when the flag is passed). The wrapper
|
|
11
|
+
* reads this as `=== false` to opt out. The presence file still
|
|
12
|
+
* records `outerSessionMismatch` regardless of the flag's value.
|
|
13
|
+
*/
|
|
14
|
+
rotateOnOuterMismatch?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* How to handle the first-time "install peaks hooks" prompt.
|
|
17
|
+
* - ask (default in TTY): prompt the user once, sticky-marker the answer
|
|
18
|
+
* - auto (default in --json / non-TTY): install silently, sticky-marker installed
|
|
19
|
+
* - skip: write sticky-marker skipped, do not install
|
|
20
|
+
* After the first decision the sticky marker wins, regardless of --install-hooks
|
|
21
|
+
* (re-runs respect the recorded decision; only re-install when the marker says
|
|
22
|
+
* installed but the hooks have been removed out from under us).
|
|
23
|
+
*/
|
|
24
|
+
installHooks?: 'ask' | 'auto' | 'skip';
|
|
25
|
+
/**
|
|
26
|
+
* Slice 2.0.1-bug3-fact-forcing-bypass: opt out of writing the
|
|
27
|
+
* consumer-project `.claude/settings.local.json` file. Default
|
|
28
|
+
* (commander `--no-` prefix) is `true`; pass `--no-claude-hooks` to
|
|
29
|
+
* set this to `false`. The wrapper reads this as `=== false` to
|
|
30
|
+
* skip the materialization. The bypass is documented in
|
|
31
|
+
* `peaks-code/references/anchoring-and-session-info.md`.
|
|
32
|
+
*/
|
|
33
|
+
claudeHooks?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* auto-scaffold `.claude/rules/{common,<language>}/` when missing.
|
|
36
|
+
* Default `false` — the diagnostic fires but no write happens.
|
|
37
|
+
* Set to `true` (via `--init-standards`) to also run
|
|
38
|
+
* `executeProjectStandardsInit({ projectRoot, apply: true })`.
|
|
39
|
+
*/
|
|
40
|
+
initStandards?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* commander-style `--no-project-scan-bootstrap` opt-out. Default
|
|
43
|
+
* (no flag) leaves this `undefined` (treated as `true`). Pass the
|
|
44
|
+
* flag to set `options.projectScanBootstrap === false`, which the
|
|
45
|
+
* caller reads as `=== false` to skip the bootstrap call.
|
|
46
|
+
*/
|
|
47
|
+
projectScanBootstrap?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* `--force-project-scan-templates` flag. Default (no flag)
|
|
50
|
+
* leaves this `undefined`. Pass the flag to set
|
|
51
|
+
* `options.forceProjectScanTemplates === true`, which forces the
|
|
52
|
+
* bootstrap service to overwrite the 4 bundled audit/business
|
|
53
|
+
* templates even when they already exist (sediment is preserved
|
|
54
|
+
* otherwise).
|
|
55
|
+
*/
|
|
56
|
+
forceProjectScanTemplates?: boolean;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Outcome of the first-time "install peaks hooks" decision attached to
|
|
60
|
+
* `peaks workspace init`. Reported in the response data so the LLM and
|
|
61
|
+
* the human both see what happened.
|
|
62
|
+
*/
|
|
63
|
+
export type FirstTimeHooksInstallOutcome = {
|
|
64
|
+
/** The decision recorded (or already on file) in the sticky marker. */
|
|
65
|
+
decision: HooksDecision;
|
|
66
|
+
/**
|
|
67
|
+
* What the install path actually did this call.
|
|
68
|
+
* - first-decision: we recorded a brand-new sticky marker (and may have installed)
|
|
69
|
+
* - reinstalled: the marker said installed but the hooks were missing — we re-applied
|
|
70
|
+
* - marker-honored: the marker already existed; we did not touch the hooks
|
|
71
|
+
* - already-installed: the hooks were already present and the marker does not exist yet
|
|
72
|
+
* (we write a fresh marker to lock in the answer for next time)
|
|
73
|
+
*/
|
|
74
|
+
action: 'first-decision' | 'reinstalled' | 'marker-honored' | 'already-installed';
|
|
75
|
+
scope: 'project' | 'global';
|
|
76
|
+
/**
|
|
77
|
+
* Why the action was the way it was (e.g. "stdin-not-tty", "user-answered-no",
|
|
78
|
+
* "marker-installed-hooks-missing"). Surfaced for forensics.
|
|
79
|
+
*/
|
|
80
|
+
reason?: string;
|
|
81
|
+
};
|
|
82
|
+
export type ResolveFirstTimeHooksInstallOptions = {
|
|
83
|
+
projectRoot: string;
|
|
84
|
+
/**
|
|
85
|
+
* Explicit mode from the --install-hooks flag. When omitted, the default
|
|
86
|
+
* is "ask" in TTY mode and "auto" otherwise (see `defaultMode` logic).
|
|
87
|
+
*/
|
|
88
|
+
explicitMode?: 'ask' | 'auto' | 'skip' | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Whether the caller is in --json mode. In --json mode we never prompt
|
|
91
|
+
* (the LLM cannot answer an interactive question) — we silently treat
|
|
92
|
+
* "ask" as "auto" and proceed.
|
|
93
|
+
*/
|
|
94
|
+
jsonMode: boolean;
|
|
95
|
+
};
|
|
96
|
+
export type WorkspaceInitRotation = {
|
|
97
|
+
previousSessionId: string | null;
|
|
98
|
+
reason: 'outer-session-mismatch' | null;
|
|
99
|
+
};
|
|
100
|
+
export type CodegraphAutoStakeOutcome = {
|
|
101
|
+
status: 'fresh' | 'noop' | 'conflict';
|
|
102
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
* list / gc / lease-status read and mutate the same on-disk lease store.
|
|
10
10
|
* They coexist with `peaks worktree auth grant|revoke|status` (the L2 hook
|
|
11
11
|
* gate surface) on the shared `peaks worktree` parent command.
|
|
12
|
+
*
|
|
13
|
+
* Each sub-command now lives in its own `worktree-lease-<name>-command.ts`
|
|
14
|
+
* sibling (registrar + runner + helpers), with the shared pieces in
|
|
15
|
+
* `worktree-lease-session.ts` (session / project-root resolution),
|
|
16
|
+
* `worktree-lease-load.ts` (single-lease loader), `worktree-lease-store.ts`
|
|
17
|
+
* (lease-store reader) and `worktree-lease-git.ts` (best-effort git
|
|
18
|
+
* helpers). This module keeps the registration entry point and re-exports
|
|
19
|
+
* the two resolvers the rest of the CLI imports from this path. Command
|
|
20
|
+
* names, options, envelopes, error codes and exit codes are unchanged.
|
|
12
21
|
*/
|
|
13
22
|
import type { Command } from 'commander';
|
|
14
23
|
import { type ProgramIO } from '../cli-helpers.js';
|
|
15
|
-
export
|
|
16
|
-
session?: string;
|
|
17
|
-
}, projectRoot: string): string;
|
|
18
|
-
export declare function resolveProjectRoot(options: {
|
|
19
|
-
project?: string;
|
|
20
|
-
}): string;
|
|
24
|
+
export { resolveProjectRoot, resolveSessionId } from './worktree-lease-session.js';
|
|
21
25
|
export declare function registerWorktreeLeaseCommands(auth: Command, io: ProgramIO): void;
|