peaks-loop 4.1.3 → 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 +2 -2
- package/CHANGELOG.md +56 -0
- package/README-en.md +1 -1
- package/README.md +1 -1
- 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/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-emit-handoff-command.js +40 -3
- package/dist/cli/commands/code-gate-step-08-command.js +25 -9
- 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/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/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-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-from-dag.d.ts +27 -0
- package/dist/cli/commands/dispatch-from-dag.js +87 -257
- 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/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/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-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/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/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/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-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-terminalize-command.d.ts +3 -0
- package/dist/cli/commands/workflow-terminalize-command.js +56 -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/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 -657
- 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 +5 -5
|
@@ -1,211 +1,43 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { join, resolve } from 'node:path';
|
|
3
|
-
import { summarizeProjectStandardsInitResult, summarizeProjectStandardsUpdateResult } from '../../../services/standards/project-standards-service.js';
|
|
4
|
-
import { executeProjectStandardsInitIdeAware, executeProjectStandardsUpdateIdeAware } from '../../../services/standards/ide-aware-standards-service.js';
|
|
5
|
-
import { migrateStandards } from '../../../services/standards/migrate-service.js';
|
|
6
|
-
import { migrateClaudeRules } from '../../../services/standards/migrate-claude-rules-service.js';
|
|
7
|
-
import { lintLoopEngineeringGuidelines, EXPECTED_RED_LINE_IDS } from '../../../services/standards/loop-engineering-lint.js';
|
|
8
1
|
import { fail, ok } from 'peaks-loop-shared/result';
|
|
9
2
|
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export function runLoopEngineeringLint(projectRoot) {
|
|
21
|
-
const root = resolve(projectRoot);
|
|
22
|
-
const guidelinePath = join(root, LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH);
|
|
23
|
-
const data = {
|
|
24
|
-
category: LOOP_ENGINEERING_CATEGORY,
|
|
25
|
-
path: guidelinePath,
|
|
26
|
-
redLineCount: 0,
|
|
27
|
-
redLineIds: [],
|
|
28
|
-
findings: []
|
|
29
|
-
};
|
|
30
|
-
if (!existsSync(guidelinePath)) {
|
|
31
|
-
return {
|
|
32
|
-
ok: false,
|
|
33
|
-
code: 'LINT_FILE_NOT_FOUND',
|
|
34
|
-
message: `no ${LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH} under ${root}`,
|
|
35
|
-
data,
|
|
36
|
-
nextActions: [
|
|
37
|
-
`Pass --project pointing at a peaks-loop checkout (the lint reads its own guideline file).`
|
|
38
|
-
]
|
|
39
|
-
};
|
|
3
|
+
import { registerStandardsInitCommands } from './standards-init-command.js';
|
|
4
|
+
import { LOOP_ENGINEERING_CATEGORY, runLoopEngineeringLint } from './standards-lint.js';
|
|
5
|
+
import { registerStandardsMigrateCommand } from './standards-migrate-command.js';
|
|
6
|
+
export { LOOP_ENGINEERING_CATEGORY, LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH, runLoopEngineeringLint } from './standards-lint.js';
|
|
7
|
+
/** `standards lint` prints the pure lint result as a CLI envelope. */
|
|
8
|
+
function runStandardsLint(io, options) {
|
|
9
|
+
if (options.category !== LOOP_ENGINEERING_CATEGORY) {
|
|
10
|
+
printResult(io, fail('standards.lint', 'UNKNOWN_LINT_CATEGORY', `only --category ${LOOP_ENGINEERING_CATEGORY} is implemented`, { category: options.category }, [`Pass --category ${LOOP_ENGINEERING_CATEGORY}.`]), options.json);
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
return;
|
|
40
13
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
message: `${redLineIds.length} red line(s) present with all 4 sections (expected: ${EXPECTED_RED_LINE_IDS.join(', ')})`,
|
|
49
|
-
data: fullData,
|
|
50
|
-
nextActions: ['Any new red line must use the 4-section form or this lint will reject it.']
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
return {
|
|
54
|
-
ok: false,
|
|
55
|
-
code: 'STANDARDS_LINT_FAILED',
|
|
56
|
-
message: `guideline file failed the lint (${result.findings.length} finding(s))`,
|
|
57
|
-
data: { ...fullData, findings: result.findings },
|
|
58
|
-
nextActions: [
|
|
59
|
-
'Address every finding in data.findings, then re-run the lint.',
|
|
60
|
-
'Each red line must be a `## RL-N — <title>` heading with the 4 sections: Failure modes / Rewrite / Self-check / Out-of-scope.'
|
|
61
|
-
]
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
export function registerStandardsCommand(program, io) {
|
|
65
|
-
const standards = program
|
|
66
|
-
.command('standards')
|
|
67
|
-
.description('Manage project-local coding standards');
|
|
68
|
-
addJsonOption(standards
|
|
69
|
-
.command('init')
|
|
70
|
-
.description('Initialize project-local coding standards for Peaks skill preflight')
|
|
71
|
-
.requiredOption('--project <path>', 'target project root')
|
|
72
|
-
.option('--language <language>', 'standards language pack')
|
|
73
|
-
.option('--ide <id>', 'override IDE detection (e.g. claude-code, trae)')
|
|
74
|
-
.option('--dry-run', 'preview writes without changing files')
|
|
75
|
-
.option('--apply', 'write missing standards into the target project')).action((options) => {
|
|
76
|
-
if (options.dryRun === true && options.apply === true) {
|
|
77
|
-
printResult(io, fail('standards.init', 'INVALID_STANDARDS_INIT_FLAGS', 'Use either --dry-run or --apply, not both', {}, ['Run without --apply to preview writes, or omit --dry-run when applying standards']), options.json);
|
|
78
|
-
process.exitCode = 1;
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
const result = executeProjectStandardsInitIdeAware({
|
|
83
|
-
projectRoot: options.project,
|
|
84
|
-
...(options.language !== undefined ? { language: options.language } : {}),
|
|
85
|
-
...(options.ide !== undefined
|
|
86
|
-
? {
|
|
87
|
-
ideId: options.ide
|
|
88
|
-
}
|
|
89
|
-
: {}),
|
|
90
|
-
apply: options.apply === true
|
|
91
|
-
});
|
|
92
|
-
printResult(io, ok('standards.init', summarizeProjectStandardsInitResult(result)), options.json);
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
printResult(io, fail('standards.init', 'STANDARDS_INIT_FAILED', getErrorMessage(error), {}, [
|
|
96
|
-
'Check the project path and existing .claude/rules directory before retrying'
|
|
97
|
-
]), options.json);
|
|
98
|
-
process.exitCode = 1;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
addJsonOption(standards
|
|
102
|
-
.command('update')
|
|
103
|
-
.description('Append managed standards metadata to an existing CLAUDE.md without rewriting the body')
|
|
104
|
-
.requiredOption('--project <path>', 'target project root')
|
|
105
|
-
.option('--language <language>', 'standards language pack')
|
|
106
|
-
.option('--ide <id>', 'override IDE detection (e.g. claude-code, trae)')
|
|
107
|
-
.option('--dry-run', 'preview writes without changing files')
|
|
108
|
-
.option('--apply', 'append managed metadata to the target project')).action((options) => {
|
|
109
|
-
if (options.dryRun === true && options.apply === true) {
|
|
110
|
-
printResult(io, fail('standards.update', 'INVALID_STANDARDS_UPDATE_FLAGS', 'Use either --dry-run or --apply, not both', {}, [
|
|
111
|
-
'Run without --apply to preview writes, or omit --dry-run when applying standards updates'
|
|
112
|
-
]), options.json);
|
|
113
|
-
process.exitCode = 1;
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
try {
|
|
117
|
-
const result = executeProjectStandardsUpdateIdeAware({
|
|
118
|
-
projectRoot: options.project,
|
|
119
|
-
...(options.language !== undefined ? { language: options.language } : {}),
|
|
120
|
-
...(options.ide !== undefined
|
|
121
|
-
? {
|
|
122
|
-
ideId: options.ide
|
|
123
|
-
}
|
|
124
|
-
: {}),
|
|
125
|
-
apply: options.apply === true
|
|
126
|
-
});
|
|
127
|
-
const summary = summarizeProjectStandardsUpdateResult(result);
|
|
128
|
-
const response = summary.reviewSuggestions.length > 0
|
|
129
|
-
? fail('standards.update', 'STANDARDS_UPDATE_REVIEW_REQUIRED', 'Standards update requires manual review', summary, summary.reviewSuggestions)
|
|
130
|
-
: ok('standards.update', summary);
|
|
131
|
-
printResult(io, response, options.json);
|
|
132
|
-
if (summary.reviewSuggestions.length > 0) {
|
|
133
|
-
process.exitCode = 1;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
printResult(io, fail('standards.update', 'STANDARDS_UPDATE_FAILED', getErrorMessage(error), {}, [
|
|
138
|
-
'Check the project path, CLAUDE.md contents, and existing .claude/rules directory before retrying'
|
|
139
|
-
]), options.json);
|
|
140
|
-
process.exitCode = 1;
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
addJsonOption(standards
|
|
144
|
-
.command('migrate')
|
|
145
|
-
.description('Rewrite a consumer project CLAUDE.md to drop the legacy heartbeat block (slice 028). Dry-run by default; pass --apply to write. With --from-claude-rules, thins the 1.x .claude/rules/ tree to 2-line pointers and scaffolds .peaks/standards/ (slice 2026-06-12-standards-migrate-claude-rules).')
|
|
146
|
-
.option('--project <path>', 'target project root')
|
|
147
|
-
.option('--apply', 'rewrite the legacy block in place; default is dry-run')
|
|
148
|
-
.option('--from-claude-rules', 'thin .claude/rules/ to pointers and scaffold .peaks/standards/')).action((options) => {
|
|
149
|
-
const projectRoot = options.project ?? process.cwd();
|
|
150
|
-
if (options.fromClaudeRules === true) {
|
|
151
|
-
try {
|
|
152
|
-
const result = migrateClaudeRules({ projectRoot, apply: options.apply === true });
|
|
153
|
-
printResult(io, ok('standards.migrate', result.data, [], [...result.data.nextActions]), options.json);
|
|
154
|
-
}
|
|
155
|
-
catch (error) {
|
|
156
|
-
printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
|
|
157
|
-
backupPath: null,
|
|
158
|
-
thinnedFiles: [],
|
|
159
|
-
scaffoldedFiles: [],
|
|
160
|
-
preservedFiles: [],
|
|
161
|
-
wouldChange: false,
|
|
162
|
-
applied: false,
|
|
163
|
-
nextActions: []
|
|
164
|
-
}, [getErrorMessage(error)]), options.json);
|
|
165
|
-
process.exitCode = 1;
|
|
166
|
-
}
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
try {
|
|
170
|
-
const result = migrateStandards({ project: projectRoot, apply: options.apply === true });
|
|
171
|
-
printResult(io, ok('standards.migrate', result.data, [], result.data.nextActions), options.json);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
|
|
175
|
-
file: null,
|
|
176
|
-
foundOldBlock: false,
|
|
177
|
-
wouldChange: false,
|
|
178
|
-
applied: false,
|
|
179
|
-
before: null,
|
|
180
|
-
after: null,
|
|
181
|
-
nextActions: []
|
|
182
|
-
}, [getErrorMessage(error)]), options.json);
|
|
14
|
+
try {
|
|
15
|
+
const envelope = runLoopEngineeringLint(options.project ?? process.cwd());
|
|
16
|
+
const response = envelope.ok
|
|
17
|
+
? ok('standards.lint', envelope.data, [], envelope.nextActions)
|
|
18
|
+
: fail('standards.lint', envelope.code, envelope.message, envelope.data, envelope.nextActions);
|
|
19
|
+
printResult(io, response, options.json);
|
|
20
|
+
if (!envelope.ok) {
|
|
183
21
|
process.exitCode = 1;
|
|
184
22
|
}
|
|
185
|
-
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
printResult(io, fail('standards.lint', 'STANDARDS_LINT_ERROR', getErrorMessage(error), { category: options.category }, ['Verify the guideline file is readable.']), options.json);
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function registerStandardsLintCommand(standards, io) {
|
|
186
30
|
addJsonOption(standards
|
|
187
31
|
.command('lint')
|
|
188
32
|
.description('Lint a guideline file for structural completeness (the loop-engineering red lines)')
|
|
189
33
|
.requiredOption('--category <category>', `guideline category to lint (${LOOP_ENGINEERING_CATEGORY})`)
|
|
190
|
-
.option('--project <path>', 'project root holding .peaks/standards/ (default: cwd)')).action((options) =>
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
? ok('standards.lint', envelope.data, [], envelope.nextActions)
|
|
200
|
-
: fail('standards.lint', envelope.code, envelope.message, envelope.data, envelope.nextActions);
|
|
201
|
-
printResult(io, response, options.json);
|
|
202
|
-
if (!envelope.ok) {
|
|
203
|
-
process.exitCode = 1;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
printResult(io, fail('standards.lint', 'STANDARDS_LINT_ERROR', getErrorMessage(error), { category: options.category }, ['Verify the guideline file is readable.']), options.json);
|
|
208
|
-
process.exitCode = 1;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
34
|
+
.option('--project <path>', 'project root holding .peaks/standards/ (default: cwd)')).action((options) => runStandardsLint(io, options));
|
|
35
|
+
}
|
|
36
|
+
export function registerStandardsCommand(program, io) {
|
|
37
|
+
const standards = program
|
|
38
|
+
.command('standards')
|
|
39
|
+
.description('Manage project-local coding standards');
|
|
40
|
+
registerStandardsInitCommands(standards, io);
|
|
41
|
+
registerStandardsMigrateCommand(standards, io);
|
|
42
|
+
registerStandardsLintCommand(standards, io);
|
|
211
43
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { summarizeProjectStandardsInitResult, summarizeProjectStandardsUpdateResult } from '../../../services/standards/project-standards-service.js';
|
|
2
|
+
import { executeProjectStandardsInitIdeAware, executeProjectStandardsUpdateIdeAware } from '../../../services/standards/ide-aware-standards-service.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
5
|
+
/** The five flags `init` and `update` share, in registration order. */
|
|
6
|
+
function withWriteFlags(cmd, applyHelp) {
|
|
7
|
+
return cmd
|
|
8
|
+
.requiredOption('--project <path>', 'target project root')
|
|
9
|
+
.option('--language <language>', 'standards language pack')
|
|
10
|
+
.option('--ide <id>', 'override IDE detection (e.g. claude-code, trae)')
|
|
11
|
+
.option('--dry-run', 'preview writes without changing files')
|
|
12
|
+
.option('--apply', applyHelp);
|
|
13
|
+
}
|
|
14
|
+
/** The ide-aware request both verbs build from the same flag set. */
|
|
15
|
+
function buildIdeAwareRequest(options) {
|
|
16
|
+
return {
|
|
17
|
+
projectRoot: options.project,
|
|
18
|
+
...(options.language !== undefined ? { language: options.language } : {}),
|
|
19
|
+
...(options.ide !== undefined ? { ideId: options.ide } : {}),
|
|
20
|
+
apply: options.apply === true
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** `--dry-run --apply` together is ambiguous; refuse before doing any work. */
|
|
24
|
+
function refuseConflictingFlags(io, options, refusal) {
|
|
25
|
+
if (!(options.dryRun === true && options.apply === true))
|
|
26
|
+
return false;
|
|
27
|
+
printResult(io, fail(refusal.command, refusal.code, 'Use either --dry-run or --apply, not both', {}, refusal.nextActions), options.json);
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
function runStandardsInit(io, options) {
|
|
32
|
+
const refused = refuseConflictingFlags(io, options, {
|
|
33
|
+
command: 'standards.init',
|
|
34
|
+
code: 'INVALID_STANDARDS_INIT_FLAGS',
|
|
35
|
+
nextActions: [
|
|
36
|
+
'Run without --apply to preview writes, or omit --dry-run when applying standards'
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
if (refused)
|
|
40
|
+
return;
|
|
41
|
+
try {
|
|
42
|
+
const result = executeProjectStandardsInitIdeAware(buildIdeAwareRequest(options));
|
|
43
|
+
printResult(io, ok('standards.init', summarizeProjectStandardsInitResult(result)), options.json);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
printResult(io, fail('standards.init', 'STANDARDS_INIT_FAILED', getErrorMessage(error), {}, [
|
|
47
|
+
'Check the project path and existing .claude/rules directory before retrying'
|
|
48
|
+
]), options.json);
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function runStandardsUpdate(io, options) {
|
|
53
|
+
const refused = refuseConflictingFlags(io, options, {
|
|
54
|
+
command: 'standards.update',
|
|
55
|
+
code: 'INVALID_STANDARDS_UPDATE_FLAGS',
|
|
56
|
+
nextActions: [
|
|
57
|
+
'Run without --apply to preview writes, or omit --dry-run when applying standards updates'
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
if (refused)
|
|
61
|
+
return;
|
|
62
|
+
try {
|
|
63
|
+
const result = executeProjectStandardsUpdateIdeAware(buildIdeAwareRequest(options));
|
|
64
|
+
const summary = summarizeProjectStandardsUpdateResult(result);
|
|
65
|
+
const response = summary.reviewSuggestions.length > 0
|
|
66
|
+
? fail('standards.update', 'STANDARDS_UPDATE_REVIEW_REQUIRED', 'Standards update requires manual review', summary, summary.reviewSuggestions)
|
|
67
|
+
: ok('standards.update', summary);
|
|
68
|
+
printResult(io, response, options.json);
|
|
69
|
+
if (summary.reviewSuggestions.length > 0) {
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
printResult(io, fail('standards.update', 'STANDARDS_UPDATE_FAILED', getErrorMessage(error), {}, [
|
|
75
|
+
'Check the project path, CLAUDE.md contents, and existing .claude/rules directory before retrying'
|
|
76
|
+
]), options.json);
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function registerStandardsInitCommands(standards, io) {
|
|
81
|
+
addJsonOption(withWriteFlags(standards
|
|
82
|
+
.command('init')
|
|
83
|
+
.description('Initialize project-local coding standards for Peaks skill preflight'), 'write missing standards into the target project')).action((options) => runStandardsInit(io, options));
|
|
84
|
+
addJsonOption(withWriteFlags(standards
|
|
85
|
+
.command('update')
|
|
86
|
+
.description('Append managed standards metadata to an existing CLAUDE.md without rewriting the body'), 'append managed metadata to the target project')).action((options) => runStandardsUpdate(io, options));
|
|
87
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** The only `--category` this subcommand implements today. */
|
|
2
|
+
export declare const LOOP_ENGINEERING_CATEGORY = "loop-engineering";
|
|
3
|
+
/** Project-relative location of the file the `loop-engineering` lint reads. */
|
|
4
|
+
export declare const LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH = ".peaks/standards/loop-engineering-guidelines.md";
|
|
5
|
+
export interface StandardsLintEnvelope {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
code: string;
|
|
8
|
+
message: string;
|
|
9
|
+
data: {
|
|
10
|
+
category: string;
|
|
11
|
+
path: string;
|
|
12
|
+
redLineCount: number;
|
|
13
|
+
redLineIds: string[];
|
|
14
|
+
findings: string[];
|
|
15
|
+
};
|
|
16
|
+
nextActions: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Pure helper: read the loop-engineering guideline file under `projectRoot`
|
|
20
|
+
* and lint it. Kept out of the Commander action so unit tests can drive it
|
|
21
|
+
* without spawning a child process (same shape as
|
|
22
|
+
* `runReadinessLint` in skill-loop-engineering-readiness-commands.ts).
|
|
23
|
+
*/
|
|
24
|
+
export declare function runLoopEngineeringLint(projectRoot: string): StandardsLintEnvelope;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { lintLoopEngineeringGuidelines, EXPECTED_RED_LINE_IDS } from '../../../services/standards/loop-engineering-lint.js';
|
|
4
|
+
/** The only `--category` this subcommand implements today. */
|
|
5
|
+
export const LOOP_ENGINEERING_CATEGORY = 'loop-engineering';
|
|
6
|
+
/** Project-relative location of the file the `loop-engineering` lint reads. */
|
|
7
|
+
export const LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH = '.peaks/standards/loop-engineering-guidelines.md';
|
|
8
|
+
/**
|
|
9
|
+
* Pure helper: read the loop-engineering guideline file under `projectRoot`
|
|
10
|
+
* and lint it. Kept out of the Commander action so unit tests can drive it
|
|
11
|
+
* without spawning a child process (same shape as
|
|
12
|
+
* `runReadinessLint` in skill-loop-engineering-readiness-commands.ts).
|
|
13
|
+
*/
|
|
14
|
+
export function runLoopEngineeringLint(projectRoot) {
|
|
15
|
+
const root = resolve(projectRoot);
|
|
16
|
+
const guidelinePath = join(root, LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH);
|
|
17
|
+
const data = {
|
|
18
|
+
category: LOOP_ENGINEERING_CATEGORY,
|
|
19
|
+
path: guidelinePath,
|
|
20
|
+
redLineCount: 0,
|
|
21
|
+
redLineIds: [],
|
|
22
|
+
findings: []
|
|
23
|
+
};
|
|
24
|
+
if (!existsSync(guidelinePath)) {
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
code: 'LINT_FILE_NOT_FOUND',
|
|
28
|
+
message: `no ${LOOP_ENGINEERING_GUIDELINES_RELATIVE_PATH} under ${root}`,
|
|
29
|
+
data,
|
|
30
|
+
nextActions: [
|
|
31
|
+
`Pass --project pointing at a peaks-loop checkout (the lint reads its own guideline file).`
|
|
32
|
+
]
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const result = lintLoopEngineeringGuidelines(readFileSync(guidelinePath, 'utf-8'));
|
|
36
|
+
const redLineIds = result.redLines.map((rl) => rl.id);
|
|
37
|
+
const fullData = { ...data, redLineCount: redLineIds.length, redLineIds };
|
|
38
|
+
if (result.ok) {
|
|
39
|
+
return {
|
|
40
|
+
ok: true,
|
|
41
|
+
code: 'STANDARDS_LINT_OK',
|
|
42
|
+
message: `${redLineIds.length} red line(s) present with all 4 sections (expected: ${EXPECTED_RED_LINE_IDS.join(', ')})`,
|
|
43
|
+
data: fullData,
|
|
44
|
+
nextActions: ['Any new red line must use the 4-section form or this lint will reject it.']
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
ok: false,
|
|
49
|
+
code: 'STANDARDS_LINT_FAILED',
|
|
50
|
+
message: `guideline file failed the lint (${result.findings.length} finding(s))`,
|
|
51
|
+
data: { ...fullData, findings: result.findings },
|
|
52
|
+
nextActions: [
|
|
53
|
+
'Address every finding in data.findings, then re-run the lint.',
|
|
54
|
+
'Each red line must be a `## RL-N — <title>` heading with the 4 sections: Failure modes / Rewrite / Self-check / Out-of-scope.'
|
|
55
|
+
]
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { migrateStandards } from '../../../services/standards/migrate-service.js';
|
|
2
|
+
import { migrateClaudeRules } from '../../../services/standards/migrate-claude-rules-service.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
5
|
+
/** `--from-claude-rules`: thin `.claude/rules/` to pointers, scaffold `.peaks/standards/`. */
|
|
6
|
+
function runMigrateClaudeRules(io, options, projectRoot) {
|
|
7
|
+
try {
|
|
8
|
+
const result = migrateClaudeRules({ projectRoot, apply: options.apply === true });
|
|
9
|
+
printResult(io, ok('standards.migrate', result.data, [], [...result.data.nextActions]), options.json);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
|
|
13
|
+
backupPath: null,
|
|
14
|
+
thinnedFiles: [],
|
|
15
|
+
scaffoldedFiles: [],
|
|
16
|
+
preservedFiles: [],
|
|
17
|
+
wouldChange: false,
|
|
18
|
+
applied: false,
|
|
19
|
+
nextActions: []
|
|
20
|
+
}, [getErrorMessage(error)]), options.json);
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Default branch: rewrite the legacy heartbeat block in CLAUDE.md. */
|
|
25
|
+
function runMigrateLegacy(io, options, projectRoot) {
|
|
26
|
+
try {
|
|
27
|
+
const result = migrateStandards({ project: projectRoot, apply: options.apply === true });
|
|
28
|
+
printResult(io, ok('standards.migrate', result.data, [], result.data.nextActions), options.json);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
printResult(io, fail('standards.migrate', 'STANDARDS_MIGRATE_FAILED', getErrorMessage(error), {
|
|
32
|
+
file: null,
|
|
33
|
+
foundOldBlock: false,
|
|
34
|
+
wouldChange: false,
|
|
35
|
+
applied: false,
|
|
36
|
+
before: null,
|
|
37
|
+
after: null,
|
|
38
|
+
nextActions: []
|
|
39
|
+
}, [getErrorMessage(error)]), options.json);
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function registerStandardsMigrateCommand(standards, io) {
|
|
44
|
+
addJsonOption(standards
|
|
45
|
+
.command('migrate')
|
|
46
|
+
.description('Rewrite a consumer project CLAUDE.md to drop the legacy heartbeat block (slice 028). Dry-run by default; pass --apply to write. With --from-claude-rules, thins the 1.x .claude/rules/ tree to 2-line pointers and scaffolds .peaks/standards/ (slice 2026-06-12-standards-migrate-claude-rules).')
|
|
47
|
+
.option('--project <path>', 'target project root')
|
|
48
|
+
.option('--apply', 'rewrite the legacy block in place; default is dry-run')
|
|
49
|
+
.option('--from-claude-rules', 'thin .claude/rules/ to pointers and scaffold .peaks/standards/')).action((options) => {
|
|
50
|
+
const projectRoot = options.project ?? process.cwd();
|
|
51
|
+
if (options.fromClaudeRules === true) {
|
|
52
|
+
runMigrateClaudeRules(io, options, projectRoot);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
runMigrateLegacy(io, options, projectRoot);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
2
|
* Companion CLI to Part 14 (peaks cron init/list/run). The
|
|
4
3
|
* scheduler is a long-running background daemon that wakes up
|
|
5
4
|
* once per minute, reads `.peaks/cron/schedule.json`, and runs
|
|
@@ -25,6 +24,11 @@
|
|
|
25
24
|
* the scheduler to write its own pid. Or just run from
|
|
26
25
|
* `nohup peaks-cron-scheduler start &` if you don't need
|
|
27
26
|
* restart-on-crash.
|
|
27
|
+
*
|
|
28
|
+
* This file owns `registerCronSchedulerCommand`, `runSchedulerLoop` and the
|
|
29
|
+
* standalone entry shim the `bin/peaks-cron-scheduler.js` script loads; the
|
|
30
|
+
* four verb bodies live beside it, over the pid-file vocabulary in
|
|
31
|
+
* `cron-scheduler-shared.ts`.
|
|
28
32
|
*/
|
|
29
33
|
import type { Command } from 'commander';
|
|
30
34
|
import { type ProgramIO } from '../cli-helpers.js';
|