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,65 @@
|
|
|
1
|
+
// `peaks scan archetype` and `peaks scan existing-system` — the two
|
|
2
|
+
// filesystem-only project scans. Each `.action()` body lives here as a
|
|
3
|
+
// module-level named runner; registerScanProjectCommands keeps the command
|
|
4
|
+
// declarations (names, options, help text) in their original order.
|
|
5
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
6
|
+
import { scanArchetype } from '../../services/scan/archetype-service.js';
|
|
7
|
+
import { scanExistingSystem } from '../../services/scan/existing-system-service.js';
|
|
8
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
9
|
+
import { parsePositiveInt } from './scan-command-shared.js';
|
|
10
|
+
const DEFAULT_MAX_TOKENS = 40;
|
|
11
|
+
const DEFAULT_MAX_SAMPLES = 5;
|
|
12
|
+
const ARCHETYPE_DESCRIPTION = 'Detect project archetype, integration mode (three scenarios), frontend-only mode, and supporting signals from the filesystem (read-only)';
|
|
13
|
+
const EXISTING_SYSTEM_DESCRIPTION = 'Extract visual tokens (colors/spacing/typography/radii) and code conventions from a legacy project (read-only)';
|
|
14
|
+
async function runScanArchetype(options, io) {
|
|
15
|
+
try {
|
|
16
|
+
const report = await scanArchetype({ projectRoot: options.project });
|
|
17
|
+
const nextActions = [];
|
|
18
|
+
if (report.archetype === 'unknown') {
|
|
19
|
+
nextActions.push('Archetype could not be determined; surface to user before proceeding.');
|
|
20
|
+
}
|
|
21
|
+
else if (report.archetype === 'legacy-frontend' ||
|
|
22
|
+
report.archetype === 'legacy-fullstack' ||
|
|
23
|
+
report.archetype === 'frontend-monorepo') {
|
|
24
|
+
nextActions.push('Run `peaks scan existing-system --project <path>` to extract visual tokens and conventions.');
|
|
25
|
+
}
|
|
26
|
+
printResult(io, ok('scan.archetype', report, [], nextActions), options.json);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
printResult(io, fail('scan.archetype', 'SCAN_ARCHETYPE_FAILED', getErrorMessage(error), { projectRoot: options.project }, ['Verify the project path exists and is readable']), options.json);
|
|
30
|
+
process.exitCode = 1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function runScanExistingSystem(options, io) {
|
|
34
|
+
try {
|
|
35
|
+
const report = await scanExistingSystem({
|
|
36
|
+
projectRoot: options.project,
|
|
37
|
+
maxTokens: parsePositiveInt(options.maxTokens, DEFAULT_MAX_TOKENS),
|
|
38
|
+
maxSamplesPerKind: parsePositiveInt(options.maxSamples, DEFAULT_MAX_SAMPLES)
|
|
39
|
+
});
|
|
40
|
+
const nextActions = [];
|
|
41
|
+
if (!report.scanned) {
|
|
42
|
+
nextActions.push(report.scanSkippedReason ?? 'Extraction skipped.');
|
|
43
|
+
}
|
|
44
|
+
else if (report.inconsistencies.length > 0) {
|
|
45
|
+
nextActions.push('Surface inconsistencies in the TXT handoff before proceeding.');
|
|
46
|
+
}
|
|
47
|
+
printResult(io, ok('scan.existing-system', report, [], nextActions), options.json);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
printResult(io, fail('scan.existing-system', 'SCAN_EXISTING_SYSTEM_FAILED', getErrorMessage(error), { projectRoot: options.project }, ['Verify the project path exists and is readable']), options.json);
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function registerScanProjectCommands(scan, io) {
|
|
55
|
+
addJsonOption(scan
|
|
56
|
+
.command('archetype')
|
|
57
|
+
.description(ARCHETYPE_DESCRIPTION)
|
|
58
|
+
.requiredOption('--project <path>', 'target project root')).action((options) => runScanArchetype(options, io));
|
|
59
|
+
addJsonOption(scan
|
|
60
|
+
.command('existing-system')
|
|
61
|
+
.description(EXISTING_SYSTEM_DESCRIPTION)
|
|
62
|
+
.requiredOption('--project <path>', 'target project root')
|
|
63
|
+
.option('--max-tokens <n>', 'maximum tokens to return per category (default 40)')
|
|
64
|
+
.option('--max-samples <n>', 'maximum convention samples per kind (default 5)')).action((options) => runScanExistingSystem(options, io));
|
|
65
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// The four scope-check subcommands: `scan request-type-sanity`,
|
|
2
|
+
// `scan acceptance-coverage`, `scan diff-vs-scope` and `scan file-size`. Each
|
|
3
|
+
// `.action()` body is a module-level named runner here; the next-action
|
|
4
|
+
// builders and lookup-failure envelopes they use live in scan-scope-helpers.ts.
|
|
5
|
+
import { InvalidArgumentError } from 'commander';
|
|
6
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { getAcceptanceCoverage, isAcceptanceCoverageError } from '../../services/scan/acceptance-coverage-service.js';
|
|
8
|
+
import { checkTypeSanity } from '../../services/scan/type-sanity-service.js';
|
|
9
|
+
import { getDiffVsScope, isDiffScopeError } from '../../services/scan/diff-scope-service.js';
|
|
10
|
+
import { scanFileSize } from '../../services/scan/file-size-scan.js';
|
|
11
|
+
import { FILE_SIZE_CAP_DEFAULT, FILE_SIZE_CAP_TESTS } from '../../services/scan/file-size-policy.js';
|
|
12
|
+
import { VALID_REQUEST_TYPES } from '../../services/artifacts/artifact-prerequisites.js';
|
|
13
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
14
|
+
import { parseOptionalNonNegativeInt, parseRequestType } from './scan-command-shared.js';
|
|
15
|
+
import { acceptanceCoverageNextActions, diffVsScopeNextActions, printAcceptanceCoverageLookupFailure, printDiffVsScopeLookupFailure } from './scan-scope-helpers.js';
|
|
16
|
+
const REQUEST_TYPE_SANITY_DESCRIPTION = 'Cross-verify a declared --type against the actual git diff file mix (catches "feature mis-declared as docs" workflow violations)';
|
|
17
|
+
const ACCEPTANCE_COVERAGE_DESCRIPTION = 'Verify every PRD "Acceptance criteria" item has at least one linked QA test case (via `- **Acceptance:** A1, A2` field in qa/test-cases/<rid>.md)';
|
|
18
|
+
const DIFF_VS_SCOPE_DESCRIPTION = 'Verify every file in the git diff matches the RD artifact "Red-line scope" patterns; flags out-of-scope writes and unclassified files';
|
|
19
|
+
const FILE_SIZE_DESCRIPTION = 'Check git diff for files exceeding a line count threshold (karpathy-skills "Simplicity First"; tool output, lockfiles and append-only records such as CHANGELOG.md excluded)';
|
|
20
|
+
function runScanRequestTypeSanity(options, io) {
|
|
21
|
+
try {
|
|
22
|
+
const serviceOptions = {
|
|
23
|
+
projectRoot: options.project,
|
|
24
|
+
declaredType: options.type
|
|
25
|
+
};
|
|
26
|
+
if (options.baseRef !== undefined) {
|
|
27
|
+
serviceOptions.baseRef = options.baseRef;
|
|
28
|
+
}
|
|
29
|
+
const report = checkTypeSanity(serviceOptions);
|
|
30
|
+
const nextActions = [];
|
|
31
|
+
if (!report.consistent) {
|
|
32
|
+
nextActions.push(`Re-classify the request — likely correct type: ${report.suggestedTypes.join(' | ')}`);
|
|
33
|
+
nextActions.push('Or, if the declared type is correct, surface the mismatch reason to the user in the TXT handoff.');
|
|
34
|
+
}
|
|
35
|
+
if (!report.gitAvailable) {
|
|
36
|
+
nextActions.push('git not available; manual cross-check required.');
|
|
37
|
+
}
|
|
38
|
+
printResult(io, ok('scan.request-type-sanity', report, [], nextActions), options.json);
|
|
39
|
+
if (!report.consistent) {
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error instanceof InvalidArgumentError)
|
|
45
|
+
throw error;
|
|
46
|
+
printResult(io, fail('scan.request-type-sanity', 'REQUEST_TYPE_SANITY_FAILED', getErrorMessage(error), { projectRoot: options.project, type: options.type }, ['Verify the project path is a git repository or omit the check']), options.json);
|
|
47
|
+
process.exitCode = 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function runScanAcceptanceCoverage(options, io) {
|
|
51
|
+
try {
|
|
52
|
+
const coverageOptions = {
|
|
53
|
+
projectRoot: options.project,
|
|
54
|
+
requestId: options.rid
|
|
55
|
+
};
|
|
56
|
+
if (options.sessionId !== undefined) {
|
|
57
|
+
coverageOptions.sessionId = options.sessionId;
|
|
58
|
+
}
|
|
59
|
+
const result = await getAcceptanceCoverage(coverageOptions);
|
|
60
|
+
if (isAcceptanceCoverageError(result)) {
|
|
61
|
+
printAcceptanceCoverageLookupFailure(io, options, result);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const nextActions = acceptanceCoverageNextActions(result);
|
|
65
|
+
printResult(io, ok('scan.acceptance-coverage', result, [], nextActions), options.json);
|
|
66
|
+
if (!result.ok) {
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
printResult(io, fail('scan.acceptance-coverage', 'ACCEPTANCE_COVERAGE_FAILED', getErrorMessage(error), { requestId: options.rid }, ['Verify the project path and artifacts before retrying']), options.json);
|
|
72
|
+
process.exitCode = 1;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function runScanDiffVsScope(options, io) {
|
|
76
|
+
try {
|
|
77
|
+
const scopeOptions = {
|
|
78
|
+
projectRoot: options.project,
|
|
79
|
+
requestId: options.rid
|
|
80
|
+
};
|
|
81
|
+
if (options.sessionId !== undefined)
|
|
82
|
+
scopeOptions.sessionId = options.sessionId;
|
|
83
|
+
if (options.baseRef !== undefined)
|
|
84
|
+
scopeOptions.baseRef = options.baseRef;
|
|
85
|
+
const result = await getDiffVsScope(scopeOptions);
|
|
86
|
+
if (isDiffScopeError(result)) {
|
|
87
|
+
printDiffVsScopeLookupFailure(io, options);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const nextActions = diffVsScopeNextActions(result);
|
|
91
|
+
printResult(io, ok('scan.diff-vs-scope', result, [], nextActions), options.json);
|
|
92
|
+
if (!result.ok) {
|
|
93
|
+
process.exitCode = 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
printResult(io, fail('scan.diff-vs-scope', 'DIFF_VS_SCOPE_FAILED', getErrorMessage(error), { requestId: options.rid }, ['Verify the project path is a git repository and the RD artifact exists']), options.json);
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function runScanFileSize(options, io) {
|
|
102
|
+
try {
|
|
103
|
+
const threshold = parseOptionalNonNegativeInt(options.threshold);
|
|
104
|
+
const result = scanFileSize({
|
|
105
|
+
projectRoot: options.project,
|
|
106
|
+
...(options.baseRef !== undefined ? { baseRef: options.baseRef } : {}),
|
|
107
|
+
...(threshold !== undefined ? { threshold } : {})
|
|
108
|
+
});
|
|
109
|
+
const nextActions = [];
|
|
110
|
+
if (!result.ok) {
|
|
111
|
+
nextActions.push(`${result.violations.length} file(s) exceed their file-size cap. Split into smaller modules.`);
|
|
112
|
+
}
|
|
113
|
+
printResult(io, ok('scan.file-size', result, [], nextActions), options.json);
|
|
114
|
+
if (!result.ok) {
|
|
115
|
+
process.exitCode = 1;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
printResult(io, fail('scan.file-size', 'FILE_SIZE_SCAN_FAILED', getErrorMessage(error), { projectRoot: options.project }, ['Verify the project path is a git repository']), options.json);
|
|
120
|
+
process.exitCode = 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export function registerScanScopeCommands(scan, io) {
|
|
124
|
+
addJsonOption(scan
|
|
125
|
+
.command('request-type-sanity')
|
|
126
|
+
.description(REQUEST_TYPE_SANITY_DESCRIPTION)
|
|
127
|
+
.requiredOption('--project <path>', 'target project root')
|
|
128
|
+
.requiredOption('--type <type>', `declared request type (${VALID_REQUEST_TYPES.join(' | ')})`, parseRequestType)
|
|
129
|
+
.option('--base-ref <ref>', 'compare working tree against this git ref (default: HEAD)')).action((options) => runScanRequestTypeSanity(options, io));
|
|
130
|
+
addJsonOption(scan
|
|
131
|
+
.command('acceptance-coverage')
|
|
132
|
+
.description(ACCEPTANCE_COVERAGE_DESCRIPTION)
|
|
133
|
+
.requiredOption('--rid <request-id>', 'request id')
|
|
134
|
+
.requiredOption('--project <path>', 'target project root')
|
|
135
|
+
.option('--session-id <session>', 'restrict to a specific session id')).action((options) => runScanAcceptanceCoverage(options, io));
|
|
136
|
+
addJsonOption(scan
|
|
137
|
+
.command('diff-vs-scope')
|
|
138
|
+
.description(DIFF_VS_SCOPE_DESCRIPTION)
|
|
139
|
+
.requiredOption('--rid <request-id>', 'request id')
|
|
140
|
+
.requiredOption('--project <path>', 'target project root')
|
|
141
|
+
.option('--session-id <session>', 'restrict to a specific session id')
|
|
142
|
+
.option('--base-ref <ref>', 'compare working tree against this git ref (default: HEAD)')).action((options) => runScanDiffVsScope(options, io));
|
|
143
|
+
addJsonOption(scan
|
|
144
|
+
.command('file-size')
|
|
145
|
+
.description(FILE_SIZE_DESCRIPTION)
|
|
146
|
+
.requiredOption('--project <path>', 'target project root')
|
|
147
|
+
.option('--base-ref <ref>', 'compare working tree against this git ref (default: HEAD)')
|
|
148
|
+
.option('--threshold <n>', `line count applied to EVERY file (default: the file-size policy's per-directory cap — ${FILE_SIZE_CAP_DEFAULT} raw lines, ${FILE_SIZE_CAP_TESTS} under root tests/)`)).action((options) => runScanFileSize(options, io));
|
|
149
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AcceptanceCoverageError, AcceptanceCoverageReport } from '../../services/scan/acceptance-coverage-service.js';
|
|
2
|
+
import type { DiffScopeReport } from '../../services/scan/diff-scope-service.js';
|
|
3
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
4
|
+
import type { AcceptanceCoverageOptions, DiffVsScopeOptions } from './scan-command-shared.js';
|
|
5
|
+
export declare function acceptanceCoverageNextActions(result: AcceptanceCoverageReport): string[];
|
|
6
|
+
export declare function printAcceptanceCoverageLookupFailure(io: ProgramIO, options: AcceptanceCoverageOptions, result: AcceptanceCoverageError): void;
|
|
7
|
+
export declare function diffVsScopeNextActions(result: DiffScopeReport): string[];
|
|
8
|
+
export declare function printDiffVsScopeLookupFailure(io: ProgramIO, options: DiffVsScopeOptions): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Next-action builders and "artifact not found" envelopes for the scope-check
|
|
2
|
+
// subcommands (`scan acceptance-coverage`, `scan diff-vs-scope`). They live in
|
|
3
|
+
// their own module so the command/runners file stays a declaration + runner
|
|
4
|
+
// file: every message here is a pure function of the report it is handed.
|
|
5
|
+
import { fail } from 'peaks-loop-shared/result';
|
|
6
|
+
import { printResult } from '../cli-helpers.js';
|
|
7
|
+
export function acceptanceCoverageNextActions(result) {
|
|
8
|
+
const nextActions = [];
|
|
9
|
+
if (result.acceptanceItems.length === 0) {
|
|
10
|
+
nextActions.push('PRD has no "## Acceptance criteria" bullets. Fill them in before running the coverage check.');
|
|
11
|
+
}
|
|
12
|
+
if (result.uncovered.length > 0) {
|
|
13
|
+
nextActions.push(`${result.uncovered.length} acceptance item(s) have no linked test case. Add a "- **Acceptance:** ${result.uncovered.map((u) => u.id).join(', ')}" field to the relevant test cases.`);
|
|
14
|
+
}
|
|
15
|
+
if (result.invalidReferences.length > 0) {
|
|
16
|
+
nextActions.push(`${result.invalidReferences.length} test case(s) reference an acceptance id that does not exist in the PRD. Fix or remove these references.`);
|
|
17
|
+
}
|
|
18
|
+
if (result.unlinkedTestCases.length > 0) {
|
|
19
|
+
nextActions.push(`${result.unlinkedTestCases.length} test case(s) have no Acceptance: field. Link them to acceptance items, or document why they exist (e.g. defense-in-depth regressions).`);
|
|
20
|
+
}
|
|
21
|
+
return nextActions;
|
|
22
|
+
}
|
|
23
|
+
export function printAcceptanceCoverageLookupFailure(io, options, result) {
|
|
24
|
+
const code = result.kind === 'prd-not-found' ? 'PRD_NOT_FOUND' : 'TEST_CASES_NOT_FOUND';
|
|
25
|
+
const message = result.kind === 'prd-not-found'
|
|
26
|
+
? `PRD artifact for requestId=${options.rid} not found`
|
|
27
|
+
: `QA test-cases file not found at ${result.expectedPath}`;
|
|
28
|
+
printResult(io, fail('scan.acceptance-coverage', code, message, { requestId: options.rid }, [
|
|
29
|
+
result.kind === 'prd-not-found'
|
|
30
|
+
? 'Run `peaks request init --role prd --id <rid> --apply --type <type>` first.'
|
|
31
|
+
: 'Generate qa/test-cases/<rid>.md before running this check.'
|
|
32
|
+
]), options.json);
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
}
|
|
35
|
+
export function diffVsScopeNextActions(result) {
|
|
36
|
+
const nextActions = [];
|
|
37
|
+
if (!result.gitAvailable) {
|
|
38
|
+
nextActions.push('git not available; scope check skipped. Cross-check the diff manually.');
|
|
39
|
+
}
|
|
40
|
+
if (!result.patternsDeclared) {
|
|
41
|
+
nextActions.push('RD artifact has no in-scope or out-of-scope patterns under "## Red-line scope". Add concrete path/glob patterns (e.g. `src/services/login/**`) before re-running.');
|
|
42
|
+
}
|
|
43
|
+
if (result.violations.length > 0) {
|
|
44
|
+
nextActions.push(`${result.violations.length} file(s) match an explicit out-of-scope pattern. Revert these or expand the RD red-line scope with PRD approval.`);
|
|
45
|
+
}
|
|
46
|
+
if (result.unclassified.length > 0) {
|
|
47
|
+
nextActions.push(`${result.unclassified.length} changed file(s) do not match any declared scope pattern. Either add them to the in-scope list (if intentional) or revert them.`);
|
|
48
|
+
}
|
|
49
|
+
return nextActions;
|
|
50
|
+
}
|
|
51
|
+
export function printDiffVsScopeLookupFailure(io, options) {
|
|
52
|
+
printResult(io, fail('scan.diff-vs-scope', 'RD_NOT_FOUND', `RD artifact for requestId=${options.rid} not found`, { requestId: options.rid }, ['Run `peaks request init --role rd --id <rid> --apply --type <type>` first.']), options.json);
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// `peaks scan orphan` and `peaks scan karpathy` — the structural scans that
|
|
2
|
+
// report orphan kinds and Karpathy-guideline coverage. Both `.action()` bodies
|
|
3
|
+
// are module-level named runners; the format/json/markdown output tail is the
|
|
4
|
+
// shared emitScanReport.
|
|
5
|
+
import { InvalidArgumentError } from 'commander';
|
|
6
|
+
import { fail } from 'peaks-loop-shared/result';
|
|
7
|
+
import { scanOrphans, formatOrphanMarkdown } from '../../services/scan/orphan-service.js';
|
|
8
|
+
import { scanKarpathy, formatKarpathyMarkdown } from '../../services/scan/karpathy-service.js';
|
|
9
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
10
|
+
import { emitScanReport, parseKarpathyScope, parseOrphanScope, parseScanOutputFormat } from './scan-command-shared.js';
|
|
11
|
+
const ORPHAN_DESCRIPTION = 'Detect 4 kinds of orphans (export / import / CLI subcommand / doc endpoint) — karpathy §3 Surgical Changes';
|
|
12
|
+
const KARPATHY_DESCRIPTION = 'Surface-level scan of rd/karpathy-review.md for the 4 Karpathy guidelines (Think / Simplicity / Surgical / Goal) — karpathy §1 + §3';
|
|
13
|
+
function orphanNextActions(report) {
|
|
14
|
+
const nextActions = [];
|
|
15
|
+
const totalOrphans = report.counts.export +
|
|
16
|
+
report.counts.import +
|
|
17
|
+
report.counts.cliSubcommand +
|
|
18
|
+
report.counts.docEndpoint;
|
|
19
|
+
if (totalOrphans === 0) {
|
|
20
|
+
nextActions.push('No orphans detected in the requested scope. RD may proceed to commit.');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
nextActions.push(`Found ${totalOrphans} orphan(s): export=${report.counts.export} import=${report.counts.import} cliSubcommand=${report.counts.cliSubcommand} docEndpoint=${report.counts.docEndpoint}.`);
|
|
24
|
+
nextActions.push('Clean up before commit (karpathy §3 — remove what your changes made unused).');
|
|
25
|
+
nextActions.push('Re-run `peaks scan orphan --project <path>` after cleanup to confirm zero.');
|
|
26
|
+
}
|
|
27
|
+
return nextActions;
|
|
28
|
+
}
|
|
29
|
+
function karpathyNextActions(report) {
|
|
30
|
+
const nextActions = [];
|
|
31
|
+
if (report.gateAction === 'block') {
|
|
32
|
+
nextActions.push('Karpathy review file missing under scope=all. Per karpathy §1 Think Before Coding, the rd:qa-handoff gate wants rd/karpathy-review-<rid>.md; this scanner has no rid and reads only the back-compat name rd/karpathy-review.md, so it cannot go green on the rid-scoped name alone. `peaks request transition --state qa-handoff` is the authoritative gate.');
|
|
33
|
+
}
|
|
34
|
+
else if (report.gateAction === 'warn') {
|
|
35
|
+
nextActions.push(`Karpathy review emitted ${report.totalViolations} violation(s). Review the warnings and re-run after cleanup (karpathy §3 Surgical Changes).`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
nextActions.push('Karpathy-Gate passes. All 4 guideline sections present and no anti-patterns detected.');
|
|
39
|
+
}
|
|
40
|
+
return nextActions;
|
|
41
|
+
}
|
|
42
|
+
async function runScanOrphan(options, io) {
|
|
43
|
+
try {
|
|
44
|
+
const report = await scanOrphans({
|
|
45
|
+
projectRoot: options.project,
|
|
46
|
+
...(options.scope !== undefined ? { scope: options.scope } : {}),
|
|
47
|
+
...(options.strict !== undefined ? { strict: options.strict } : {})
|
|
48
|
+
});
|
|
49
|
+
emitScanReport(io, {
|
|
50
|
+
command: 'scan.orphan',
|
|
51
|
+
format: options.format,
|
|
52
|
+
json: options.json,
|
|
53
|
+
report,
|
|
54
|
+
nextActions: orphanNextActions(report),
|
|
55
|
+
renderMarkdown: () => formatOrphanMarkdown(report, {})
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error instanceof InvalidArgumentError)
|
|
60
|
+
throw error;
|
|
61
|
+
printResult(io, fail('scan.orphan', 'SCAN_ORPHAN_FAILED', getErrorMessage(error), { projectRoot: options.project }, [
|
|
62
|
+
'Verify the project path exists and is readable',
|
|
63
|
+
'Verify the project is a git repository (working-tree scope)'
|
|
64
|
+
]), options.json);
|
|
65
|
+
process.exitCode = 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function runScanKarpathy(options, io) {
|
|
69
|
+
try {
|
|
70
|
+
const report = await scanKarpathy({
|
|
71
|
+
projectRoot: options.project,
|
|
72
|
+
...(options.scope !== undefined ? { scope: options.scope } : {})
|
|
73
|
+
});
|
|
74
|
+
emitScanReport(io, {
|
|
75
|
+
command: 'scan.karpathy',
|
|
76
|
+
format: options.format,
|
|
77
|
+
json: options.json,
|
|
78
|
+
report,
|
|
79
|
+
nextActions: karpathyNextActions(report),
|
|
80
|
+
renderMarkdown: () => formatKarpathyMarkdown(report, {})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (error instanceof InvalidArgumentError)
|
|
85
|
+
throw error;
|
|
86
|
+
printResult(io, fail('scan.karpathy', 'SCAN_KARPATHY_FAILED', getErrorMessage(error), { projectRoot: options.project }, [
|
|
87
|
+
'Verify the project path exists and is readable',
|
|
88
|
+
'Verify the project is a readable directory'
|
|
89
|
+
]), options.json);
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function registerScanStructuralCommands(scan, io) {
|
|
94
|
+
// Slice 4/6 — karpathy-enforcement orphan-scan-cli
|
|
95
|
+
// Detects 4 kinds of orphans: export / import / CLI subcommand / doc
|
|
96
|
+
// endpoint. Read-only; never writes. karpathy §3 Surgical Changes.
|
|
97
|
+
addJsonOption(scan
|
|
98
|
+
.command('orphan')
|
|
99
|
+
.description(ORPHAN_DESCRIPTION)
|
|
100
|
+
.requiredOption('--project <path>', 'target project root')
|
|
101
|
+
.option('--format <fmt>', 'output format: md (default) | json', parseScanOutputFormat)
|
|
102
|
+
.option('--scope <scope>', 'scope: working-tree (default) | git-diff | all', parseOrphanScope)
|
|
103
|
+
.option('--strict', 'strict mode: report exportOrphans even outside working tree', false)).action((options) => runScanOrphan(options, io));
|
|
104
|
+
// Karpathy structural scan (Slice 5/6 — karpathy-enforcement 5-way fanout +
|
|
105
|
+
// hard Karpathy-Gate). Detects violation counts and section coverage for
|
|
106
|
+
// the 4 Karpathy-guidelines. Read-only; never writes. karpathy §3.
|
|
107
|
+
addJsonOption(scan
|
|
108
|
+
.command('karpathy')
|
|
109
|
+
.description(KARPATHY_DESCRIPTION)
|
|
110
|
+
.requiredOption('--project <path>', 'target project root')
|
|
111
|
+
.option('--format <fmt>', 'output format: md (default) | json', parseScanOutputFormat)
|
|
112
|
+
.option('--scope <scope>', 'scope: working-tree (default) | all', parseKarpathyScope)).action((options) => runScanKarpathy(options, io));
|
|
113
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Typed accessor over the flag map produced by `parseFlags`.
|
|
2
|
+
*
|
|
3
|
+
* `parseFlags` internally stores every flag with at least one value as a
|
|
4
|
+
* `string[]`. A flag with no following non-flag token (e.g. `--apply`,
|
|
5
|
+
* `--dry-run`) is recorded as `true`. This helper exposes three typed
|
|
6
|
+
* accessors so call-sites don't have to re-narrow `unknown` or
|
|
7
|
+
* `string | boolean | string[]` on every read:
|
|
8
|
+
*
|
|
9
|
+
* - `flags.list(name)` → `string[]` (always an array; a single
|
|
10
|
+
* occurrence is wrapped to a 1-element
|
|
11
|
+
* array at parse time)
|
|
12
|
+
* - `flags.bool(name)` → `boolean` (presence-of flag; missing
|
|
13
|
+
* flag is `false`)
|
|
14
|
+
* - `flags.maybeString(name)` → `string | undefined` (first value,
|
|
15
|
+
* or `undefined` if the flag was given
|
|
16
|
+
* as a bare boolean with no value)
|
|
17
|
+
*
|
|
18
|
+
* The dispatch layer (runSediment) was previously peppered with
|
|
19
|
+
* `typeof flags.x === "string"` / `Array.isArray(flags.x)` narrowing.
|
|
20
|
+
* With this helper the call-sites collapse to one-line reads and the
|
|
21
|
+
* raw flag map stops leaking across the runSediment boundary.
|
|
22
|
+
*/
|
|
23
|
+
export declare class ParsedFlags {
|
|
24
|
+
private readonly raw;
|
|
25
|
+
constructor(raw: Record<string, string[] | true>);
|
|
26
|
+
/** Always returns an array. Missing flag → []. Single-occurrence
|
|
27
|
+
* flag → a 1-element array (parseFlags normalizes this). */
|
|
28
|
+
list(name: string): string[];
|
|
29
|
+
/** Presence-of a bare boolean flag. Missing → false. */
|
|
30
|
+
bool(name: string): boolean;
|
|
31
|
+
/** First value of a flag, or `undefined` if the flag is absent or
|
|
32
|
+
* was given as a bare boolean. */
|
|
33
|
+
maybeString(name: string): string | undefined;
|
|
34
|
+
}
|
|
35
|
+
/** Parse an argv tail into positional args + flag map.
|
|
36
|
+
*
|
|
37
|
+
* Supports:
|
|
38
|
+
* --flag value → flags[flag] = [value, ...] (advance i by 1)
|
|
39
|
+
* --flag → flags[flag] = true (when next token starts with `--` or is undefined)
|
|
40
|
+
* --flag v1 --flag v2 → repeated `--flag` values are accumulated
|
|
41
|
+
*
|
|
42
|
+
* Internally stores all values as `string[]` (or `true` for a bare
|
|
43
|
+
* boolean flag). Use the `ParsedFlags` helper to read typed accessors.
|
|
44
|
+
*
|
|
45
|
+
* Repeatable flag handling (Task 15b): when the same `--key` appears
|
|
46
|
+
* consecutively (e.g. `--segment a --segment b --segment c`), values
|
|
47
|
+
* are accumulated into a single `string[]`. A single occurrence is
|
|
48
|
+
* normalized to a 1-element array so callers can use `.list(name)`
|
|
49
|
+
* uniformly without shape-narrowing on the call-site.
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseFlags(argv: string[]): {
|
|
52
|
+
positional: string[];
|
|
53
|
+
flags: ParsedFlags;
|
|
54
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// src/cli/commands/sediment-argv-flags.ts
|
|
2
|
+
//
|
|
3
|
+
// The argv tail parser `peaks skill sediment` drives every verb with: the raw
|
|
4
|
+
// flag map and the typed accessors over it. Split out of
|
|
5
|
+
// `sediment-commands.ts`, which re-exports both symbols so its public surface
|
|
6
|
+
// is unchanged.
|
|
7
|
+
/** Typed accessor over the flag map produced by `parseFlags`.
|
|
8
|
+
*
|
|
9
|
+
* `parseFlags` internally stores every flag with at least one value as a
|
|
10
|
+
* `string[]`. A flag with no following non-flag token (e.g. `--apply`,
|
|
11
|
+
* `--dry-run`) is recorded as `true`. This helper exposes three typed
|
|
12
|
+
* accessors so call-sites don't have to re-narrow `unknown` or
|
|
13
|
+
* `string | boolean | string[]` on every read:
|
|
14
|
+
*
|
|
15
|
+
* - `flags.list(name)` → `string[]` (always an array; a single
|
|
16
|
+
* occurrence is wrapped to a 1-element
|
|
17
|
+
* array at parse time)
|
|
18
|
+
* - `flags.bool(name)` → `boolean` (presence-of flag; missing
|
|
19
|
+
* flag is `false`)
|
|
20
|
+
* - `flags.maybeString(name)` → `string | undefined` (first value,
|
|
21
|
+
* or `undefined` if the flag was given
|
|
22
|
+
* as a bare boolean with no value)
|
|
23
|
+
*
|
|
24
|
+
* The dispatch layer (runSediment) was previously peppered with
|
|
25
|
+
* `typeof flags.x === "string"` / `Array.isArray(flags.x)` narrowing.
|
|
26
|
+
* With this helper the call-sites collapse to one-line reads and the
|
|
27
|
+
* raw flag map stops leaking across the runSediment boundary.
|
|
28
|
+
*/
|
|
29
|
+
export class ParsedFlags {
|
|
30
|
+
raw;
|
|
31
|
+
constructor(raw) {
|
|
32
|
+
this.raw = raw;
|
|
33
|
+
}
|
|
34
|
+
/** Always returns an array. Missing flag → []. Single-occurrence
|
|
35
|
+
* flag → a 1-element array (parseFlags normalizes this). */
|
|
36
|
+
list(name) {
|
|
37
|
+
const v = this.raw[name];
|
|
38
|
+
if (v === undefined)
|
|
39
|
+
return [];
|
|
40
|
+
if (v === true)
|
|
41
|
+
return [];
|
|
42
|
+
return v;
|
|
43
|
+
}
|
|
44
|
+
/** Presence-of a bare boolean flag. Missing → false. */
|
|
45
|
+
bool(name) {
|
|
46
|
+
const v = this.raw[name];
|
|
47
|
+
if (v === undefined)
|
|
48
|
+
return false;
|
|
49
|
+
// A flag given as `--name <value>` is also "present" (it just happens
|
|
50
|
+
// to carry values too). Existing call-sites that want `--dry-run`
|
|
51
|
+
// semantics care about presence, not whether values are attached.
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
/** First value of a flag, or `undefined` if the flag is absent or
|
|
55
|
+
* was given as a bare boolean. */
|
|
56
|
+
maybeString(name) {
|
|
57
|
+
const v = this.raw[name];
|
|
58
|
+
if (v === undefined)
|
|
59
|
+
return undefined;
|
|
60
|
+
if (v === true)
|
|
61
|
+
return undefined;
|
|
62
|
+
return v[0];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Parse an argv tail into positional args + flag map.
|
|
66
|
+
*
|
|
67
|
+
* Supports:
|
|
68
|
+
* --flag value → flags[flag] = [value, ...] (advance i by 1)
|
|
69
|
+
* --flag → flags[flag] = true (when next token starts with `--` or is undefined)
|
|
70
|
+
* --flag v1 --flag v2 → repeated `--flag` values are accumulated
|
|
71
|
+
*
|
|
72
|
+
* Internally stores all values as `string[]` (or `true` for a bare
|
|
73
|
+
* boolean flag). Use the `ParsedFlags` helper to read typed accessors.
|
|
74
|
+
*
|
|
75
|
+
* Repeatable flag handling (Task 15b): when the same `--key` appears
|
|
76
|
+
* consecutively (e.g. `--segment a --segment b --segment c`), values
|
|
77
|
+
* are accumulated into a single `string[]`. A single occurrence is
|
|
78
|
+
* normalized to a 1-element array so callers can use `.list(name)`
|
|
79
|
+
* uniformly without shape-narrowing on the call-site.
|
|
80
|
+
*/
|
|
81
|
+
export function parseFlags(argv) {
|
|
82
|
+
const positional = [];
|
|
83
|
+
const rawFlags = {};
|
|
84
|
+
for (let i = 0; i < argv.length; i++) {
|
|
85
|
+
// `as string`, not `!`: the loop bound is `argv.length`, so these reads are
|
|
86
|
+
// in range — the toolchain just cannot see that through the index signature.
|
|
87
|
+
const a = argv[i];
|
|
88
|
+
if (a.startsWith('--')) {
|
|
89
|
+
const k = a.slice(2);
|
|
90
|
+
const v = argv[i + 1];
|
|
91
|
+
if (v === undefined || v.startsWith('--')) {
|
|
92
|
+
rawFlags[k] = true;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Capture first value, then look ahead for `--k <value>` repeats.
|
|
96
|
+
const values = [v];
|
|
97
|
+
i += 2;
|
|
98
|
+
while (i < argv.length &&
|
|
99
|
+
argv[i] === `--${k}` &&
|
|
100
|
+
i + 1 < argv.length &&
|
|
101
|
+
!argv[i + 1].startsWith('--')) {
|
|
102
|
+
values.push(argv[i + 1]);
|
|
103
|
+
i += 2;
|
|
104
|
+
}
|
|
105
|
+
// Back up one — the outer for-loop will i++ past the flag, so the
|
|
106
|
+
// next iteration sees the next real token.
|
|
107
|
+
i--;
|
|
108
|
+
rawFlags[k] = values;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
positional.push(a);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { positional, flags: new ParsedFlags(rawFlags) };
|
|
116
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ParsedFlags } from './sediment-argv-flags.js';
|
|
2
|
+
/** The `{ ok, error?, data? }` envelope every sediment verb returns. */
|
|
3
|
+
export interface CliResult {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
error?: string;
|
|
6
|
+
data?: unknown;
|
|
7
|
+
}
|
|
8
|
+
/** One parsed argv tail: the pool home, the positionals and the flag accessors. */
|
|
9
|
+
export type SedimentContext = {
|
|
10
|
+
readonly home: string;
|
|
11
|
+
readonly positional: string[];
|
|
12
|
+
readonly flags: ParsedFlags;
|
|
13
|
+
};
|
|
14
|
+
/** A verb implementation. `runSediment` owns the error envelope around it. */
|
|
15
|
+
export type SedimentVerb = (ctx: SedimentContext) => CliResult | Promise<CliResult>;
|