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
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// src/cli/commands/codegraph-proxy-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// The `peaks codegraph` verbs that proxy one upstream invocation: `index`,
|
|
4
|
+
// `query`, `files`, `context` and `affected`. Split out of
|
|
5
|
+
// `codegraph-commands.ts`; the verb names, options and envelopes are
|
|
6
|
+
// unchanged.
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { writeCodegraphAffectedContext } from '../../services/codegraph/codegraph-service.js';
|
|
9
|
+
import { runCodegraphCommand } from './codegraph-command-runtime.js';
|
|
10
|
+
import { addProjectOption, parsePositiveInteger } from './codegraph-command-options.js';
|
|
11
|
+
/**
|
|
12
|
+
* The payload written into the codegraph-context envelope: the captured
|
|
13
|
+
* upstream stdout, parsed as JSON when `--json` asked for JSON and the text
|
|
14
|
+
* is parseable. A parse failure keeps the raw string, which the envelope
|
|
15
|
+
* renderer handles cleanly.
|
|
16
|
+
*/
|
|
17
|
+
function resolveAffectedPayload(json, rawStdout) {
|
|
18
|
+
if (json !== true || rawStdout.length === 0) {
|
|
19
|
+
return rawStdout;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(rawStdout);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return rawStdout;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Report the envelope write on stdout, unless `--json` owns stdout. */
|
|
29
|
+
function reportAffectedEnvelope(io, envelope, asJson) {
|
|
30
|
+
if (asJson === true)
|
|
31
|
+
return;
|
|
32
|
+
io.stdout(envelope.written
|
|
33
|
+
? `[codegraph-context] wrote ${envelope.path}\n`
|
|
34
|
+
: `[codegraph-context] skipped: ${envelope.warning}\n`);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Probes `.codegraph/` for the peaks-loop marker before invoking the
|
|
38
|
+
* upstream binary.
|
|
39
|
+
*
|
|
40
|
+
* - fresh → proceed to upstream init
|
|
41
|
+
* - noop-already-peaks-loop → skip upstream, emit warning
|
|
42
|
+
* - conflict-foreign-schema → exit 73 + CODEGRAPH_INIT_CONFLICT envelope
|
|
43
|
+
*
|
|
44
|
+
* On a successful upstream init, write the marker so the next run
|
|
45
|
+
* hits the noop branch instead of the conflict branch.
|
|
46
|
+
*
|
|
47
|
+
* Wraps the generic `runCodegraphCommand` and, after a successful
|
|
48
|
+
* upstream invocation, calls `writeCodegraphAffectedContext` so the
|
|
49
|
+
* RD / QA handoff can pick up `.peaks/_runtime/<sid>/rd/codegraph-context.md`
|
|
50
|
+
* without re-running the (5-30 s) codegraph query.
|
|
51
|
+
*
|
|
52
|
+
* The envelope write is gated by `--write-envelope` (default off) so
|
|
53
|
+
* ad-hoc CLI invocations don't silently mutate the user's session
|
|
54
|
+
* directory. peaks-code's RD dispatch hook flips the flag on.
|
|
55
|
+
*
|
|
56
|
+
* On no-session-binding, we surface a `warning` field instead of
|
|
57
|
+
* throwing — the upstream result is still printed so the caller
|
|
58
|
+
* always sees the affected list.
|
|
59
|
+
*/
|
|
60
|
+
async function runCodegraphAffectedCommand(io, files, options, asJson) {
|
|
61
|
+
// Capture stdout so we can re-emit it into the envelope payload.
|
|
62
|
+
// We still forward every line to the original `io.stdout` so the
|
|
63
|
+
// user sees the affected list as if the wrapper were transparent.
|
|
64
|
+
const capturedLines = [];
|
|
65
|
+
const captureIo = {
|
|
66
|
+
stdout: (chunk) => {
|
|
67
|
+
capturedLines.push(chunk);
|
|
68
|
+
io.stdout(chunk);
|
|
69
|
+
},
|
|
70
|
+
stderr: (chunk) => io.stderr(chunk)
|
|
71
|
+
};
|
|
72
|
+
await runCodegraphCommand(captureIo, 'codegraph.affected', {
|
|
73
|
+
subcommand: 'affected',
|
|
74
|
+
project: options.project,
|
|
75
|
+
files,
|
|
76
|
+
...(options.json === true ? { json: true } : {})
|
|
77
|
+
}, asJson);
|
|
78
|
+
if (!options.writeEnvelope) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// The user opted in via --write-envelope. Run the envelope writer
|
|
82
|
+
// unconditionally (graceful fallback when no session binding).
|
|
83
|
+
const envelope = writeCodegraphAffectedContext({
|
|
84
|
+
projectRoot: resolve(options.project),
|
|
85
|
+
rid: options.rid ?? process.env.PEAKS_RD_RID ?? 'unknown-rid',
|
|
86
|
+
files,
|
|
87
|
+
affectedPayload: resolveAffectedPayload(options.json, capturedLines.join('\n'))
|
|
88
|
+
});
|
|
89
|
+
reportAffectedEnvelope(io, envelope, asJson);
|
|
90
|
+
}
|
|
91
|
+
export function registerCodegraphIndexCommands(codegraph, io) {
|
|
92
|
+
addProjectOption(codegraph
|
|
93
|
+
.command('index')
|
|
94
|
+
.description('Index a project with codegraph')
|
|
95
|
+
.option('--force', 'force reindexing')
|
|
96
|
+
.option('--quiet', 'reduce upstream output')).action(async (options) => {
|
|
97
|
+
// `runCodegraphCommand` returns "upstream failed" for the one caller
|
|
98
|
+
// that ranks exit-code precedence (`status`); every other command just
|
|
99
|
+
// awaits it, so it is discarded here rather than leaked to commander.
|
|
100
|
+
await runCodegraphCommand(io, 'codegraph.index', {
|
|
101
|
+
subcommand: 'index',
|
|
102
|
+
project: options.project,
|
|
103
|
+
...(options.force === true ? { force: true } : {}),
|
|
104
|
+
...(options.quiet === true ? { quiet: true } : {})
|
|
105
|
+
}, options.peaksJson);
|
|
106
|
+
});
|
|
107
|
+
addProjectOption(codegraph
|
|
108
|
+
.command('query')
|
|
109
|
+
.description('Query codegraph')
|
|
110
|
+
.argument('<search>', 'search text')
|
|
111
|
+
.option('--json', 'forward JSON output flag to upstream codegraph')
|
|
112
|
+
.option('--limit <n>', 'maximum result count', parsePositiveInteger)).action(async (search, options) => {
|
|
113
|
+
await runCodegraphCommand(io, 'codegraph.query', {
|
|
114
|
+
subcommand: 'query',
|
|
115
|
+
project: options.project,
|
|
116
|
+
search,
|
|
117
|
+
...(options.json === true ? { json: true } : {}),
|
|
118
|
+
...(options.limit !== undefined ? { limit: options.limit } : {})
|
|
119
|
+
}, options.peaksJson);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
export function registerCodegraphFileCommands(codegraph, io) {
|
|
123
|
+
addProjectOption(codegraph
|
|
124
|
+
.command('files')
|
|
125
|
+
.description('List codegraph files')
|
|
126
|
+
.option('--json', 'forward JSON output flag to upstream codegraph')
|
|
127
|
+
.option('--max-depth <n>', 'maximum traversal depth', parsePositiveInteger)).action(async (options) => {
|
|
128
|
+
await runCodegraphCommand(io, 'codegraph.files', {
|
|
129
|
+
subcommand: 'files',
|
|
130
|
+
project: options.project,
|
|
131
|
+
...(options.json === true ? { json: true } : {}),
|
|
132
|
+
...(options.maxDepth !== undefined ? { maxDepth: options.maxDepth } : {})
|
|
133
|
+
}, options.peaksJson);
|
|
134
|
+
});
|
|
135
|
+
addProjectOption(codegraph
|
|
136
|
+
.command('context')
|
|
137
|
+
.description('Build task context with codegraph')
|
|
138
|
+
.argument('<task>', 'task text')).action(async (task, options) => {
|
|
139
|
+
await runCodegraphCommand(io, 'codegraph.context', { subcommand: 'context', project: options.project, task }, options.peaksJson);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
export function registerCodegraphAffectedCommand(codegraph, io) {
|
|
143
|
+
addProjectOption(codegraph
|
|
144
|
+
.command('affected')
|
|
145
|
+
.description('Find code affected by files')
|
|
146
|
+
.argument('<files...>', 'project-relative file paths')
|
|
147
|
+
.option('--json', 'forward JSON output flag to upstream codegraph')
|
|
148
|
+
.option('--rid <rid>', 'request id for the codegraph-context envelope (default: env PEAKS_RD_RID or "unknown-rid")')
|
|
149
|
+
.option('--write-envelope', 'write codegraph-context.md into the active session')).action((files, options) => runCodegraphAffectedCommand(io, files, options, options.peaksJson));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* The proxy verbs in registration order. `index` / `query` and `files` /
|
|
153
|
+
* `context` are paired because each pair shares a module-level helper set.
|
|
154
|
+
*/
|
|
155
|
+
export function registerCodegraphProxyCommands(codegraph, io) {
|
|
156
|
+
registerCodegraphIndexCommands(codegraph, io);
|
|
157
|
+
registerCodegraphFileCommands(codegraph, io);
|
|
158
|
+
registerCodegraphAffectedCommand(codegraph, io);
|
|
159
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// src/cli/commands/codegraph-repair-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks codegraph repair-exclude` and `peaks codegraph repair-index` — the
|
|
4
|
+
// explicit repair path, plus the registration of both verbs. Split out of
|
|
5
|
+
// `codegraph-commands.ts`; names, options and envelopes are unchanged.
|
|
6
|
+
import { repairCodegraphExcludeFromProject } from '../../services/codegraph/codegraph-exclude-repair.js';
|
|
7
|
+
import { resolveProjectRoot } from '../../services/codegraph/codegraph-service.js';
|
|
8
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
9
|
+
import { printResult } from '../cli-helpers.js';
|
|
10
|
+
import { printCodegraphFailure } from './codegraph-command-runtime.js';
|
|
11
|
+
import { addProjectOption } from './codegraph-command-options.js';
|
|
12
|
+
const REPAIR_MODES = {
|
|
13
|
+
exclude: {
|
|
14
|
+
commandId: 'codegraph.repair-exclude',
|
|
15
|
+
reindex: true,
|
|
16
|
+
noopNote: 'Nothing to repair in the codegraph config; nothing was written.'
|
|
17
|
+
},
|
|
18
|
+
index: {
|
|
19
|
+
commandId: 'codegraph.repair-index',
|
|
20
|
+
// 'force' is upstream's `clear()` + full re-index — the only documented
|
|
21
|
+
// way to drop rows for files deleted in an earlier commit.
|
|
22
|
+
reindex: 'force',
|
|
23
|
+
noopNote: 'The codegraph config already admits every supported tracked file and blocks none; the index was still rebuilt from scratch.'
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
// One sentence, the same shape in both modes, because both modes run the
|
|
27
|
+
// same repair — only the rebuild differs.
|
|
28
|
+
//
|
|
29
|
+
// The include clause this sentence used to carry is gone with the include
|
|
30
|
+
// axis (see `codegraph-exclude-repair.ts`), which also removed the reason the
|
|
31
|
+
// sentence was once split in two: there is a single axis left, and its own
|
|
32
|
+
// counter cannot be read as a verdict on another one.
|
|
33
|
+
function appliedRepairNote(report) {
|
|
34
|
+
return (`Removed ${report.rulesRemoved.length} exclude rule(s), recovering ${report.filesRecovered} tracked source file(s) that a rule had been hiding.` +
|
|
35
|
+
` Config backed up to ${report.backupPath ?? ''}.`);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Explicit repair path: reconcile the config's `exclude` rules → back it up →
|
|
39
|
+
* rewrite it → rebuild the index. Mirrors the automatic step `init` runs
|
|
40
|
+
* after a fresh upstream init, for workspaces that were already
|
|
41
|
+
* initialized before the integrity gate existed.
|
|
42
|
+
*/
|
|
43
|
+
async function runCodegraphRepairCommand(io, options, asJson, mode) {
|
|
44
|
+
const spec = REPAIR_MODES[mode];
|
|
45
|
+
let projectRoot;
|
|
46
|
+
try {
|
|
47
|
+
// `resolveProjectRoot`, not a hand-rolled `resolve` + `statSync`: it is
|
|
48
|
+
// the canonicalizer every codegraph invocation already goes through
|
|
49
|
+
// (`createCodegraphInvocation`), so the config path this verb reports
|
|
50
|
+
// and writes names the SAME directory the spawn and the other verbs use
|
|
51
|
+
// even when `--project` is a symlink, a short name or a differently
|
|
52
|
+
// cased alias. The error path is unchanged.
|
|
53
|
+
projectRoot = resolveProjectRoot(options.project);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
printCodegraphFailure(io, spec.commandId, error, asJson);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const report = await repairCodegraphExcludeFromProject(projectRoot, undefined, {
|
|
60
|
+
reindex: spec.reindex
|
|
61
|
+
});
|
|
62
|
+
// Where the notes go matters: `printResult` renders every `warnings`
|
|
63
|
+
// entry to stderr with a `warning: ` prefix, so a confirmation parked
|
|
64
|
+
// in the third slot reads as a problem — and a real warning parked
|
|
65
|
+
// there double-prefixes. Confirmations go to `nextActions`; only a
|
|
66
|
+
// genuine `report.warning` reaches `warnings`, verbatim.
|
|
67
|
+
const confirmations = [report.applied ? appliedRepairNote(report) : spec.noopNote];
|
|
68
|
+
if (report.applied || mode === 'index') {
|
|
69
|
+
confirmations.push('Re-run `peaks codegraph status --project <root>` to confirm the gap is closed.');
|
|
70
|
+
}
|
|
71
|
+
printResult(io, ok(spec.commandId, {
|
|
72
|
+
applied: report.applied,
|
|
73
|
+
rulesRemoved: report.rulesRemoved,
|
|
74
|
+
filesRecovered: report.filesRecovered,
|
|
75
|
+
configPath: report.configPath,
|
|
76
|
+
backupPath: report.backupPath,
|
|
77
|
+
reindexed: report.reindexed,
|
|
78
|
+
forcedRebuild: report.forcedRebuild,
|
|
79
|
+
warning: report.warning
|
|
80
|
+
}, report.warning === null ? [] : [report.warning], confirmations), asJson);
|
|
81
|
+
// A repair that could not run to completion (or could not reindex)
|
|
82
|
+
// must not report success to a shell.
|
|
83
|
+
if (report.warning !== null) {
|
|
84
|
+
process.exitCode = 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function registerCodegraphRepairCommands(codegraph, io) {
|
|
88
|
+
addProjectOption(codegraph
|
|
89
|
+
.command('repair-exclude')
|
|
90
|
+
.description('Drop config exclude rules that block tracked source files, then rebuild the index')).action((options) => runCodegraphRepairCommand(io, options, options.peaksJson, 'exclude'));
|
|
91
|
+
addProjectOption(codegraph
|
|
92
|
+
.command('repair-index')
|
|
93
|
+
.description('Drop config exclude rules that block tracked source files, then rebuild the index from scratch (drops rows for deleted files)')).action((options) => runCodegraphRepairCommand(io, options, options.peaksJson, 'index'));
|
|
94
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type ProgramIO } from '../cli-helpers.js';
|
|
2
1
|
import { type CommonCodegraphOptions } from './codegraph-command-runtime.js';
|
|
2
|
+
import type { ProgramIO } from '../cli-helpers.js';
|
|
3
3
|
export declare function attributeUpstreamUpToDateLine(stdout: string): string;
|
|
4
4
|
/**
|
|
5
5
|
* `peaks codegraph status` with an integrity gate.
|
|
@@ -4,17 +4,16 @@
|
|
|
4
4
|
// index coverage), its `--peaks-json` machine envelope, and the attribution
|
|
5
5
|
// of upstream's `[OK] Index is up to date` line.
|
|
6
6
|
//
|
|
7
|
-
// Extracted verbatim from `codegraph-commands.ts`
|
|
8
|
-
// line is byte-identical and no behaviour changed; `attributeUpstreamUpToDate
|
|
7
|
+
// Extracted verbatim from `codegraph-commands.ts`; `attributeUpstreamUpToDate
|
|
9
8
|
// Line` stays importable from `codegraph-commands.ts`, which re-exports it.
|
|
9
|
+
// The axis evaluation lives in `codegraph-status-integrity.ts` and the
|
|
10
|
+
// machine report in `codegraph-status-json.ts`.
|
|
10
11
|
import { resolve } from 'node:path';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { getErrorMessage, printResult, redactSensitiveErrorMessage } from '../cli-helpers.js';
|
|
17
|
-
import { localizeUpstreamCodegraphText, printCodegraphFailure, runCodegraphCommand } from './codegraph-command-runtime.js';
|
|
12
|
+
import { CODEGRAPH_INTEGRITY_EXIT_CODE } from '../../services/codegraph/codegraph-exclude-integrity.js';
|
|
13
|
+
import { codegraphIndexIntegrityExitCode } from '../../services/codegraph/codegraph-index-integrity.js';
|
|
14
|
+
import { runCodegraphCommand } from './codegraph-command-runtime.js';
|
|
15
|
+
import { emitIntegrityText, readStatusAxes } from './codegraph-status-integrity.js';
|
|
16
|
+
import { runCodegraphStatusJson } from './codegraph-status-json.js';
|
|
18
17
|
const ANSI_SGR_PATTERN = /\x1b\[[0-9;]*m/g;
|
|
19
18
|
/**
|
|
20
19
|
* Upstream `status` answers a different question than peaks-loop's
|
|
@@ -57,97 +56,20 @@ export function attributeUpstreamUpToDateLine(stdout) {
|
|
|
57
56
|
.join('\n');
|
|
58
57
|
}
|
|
59
58
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* EXIT-CODE PRECEDENCE (decided here, mirrored on the human path, pinned
|
|
66
|
-
* by tests on BOTH axes):
|
|
67
|
-
*
|
|
68
|
-
* 1. upstream failed → upstream's exit code. Ranked FIRST because
|
|
69
|
-
* every gate's remedy assumes upstream can run, and because the
|
|
70
|
-
* gate's own branches would otherwise MASK a real command failure:
|
|
71
|
-
* under the advisory default a gap exits 0, so a "gate first" order
|
|
72
|
-
* would turn "upstream failed + gap" into exit 0 — the gate hiding a
|
|
73
|
-
* failure. The gate verdicts stay in `data` verbatim, so ranking
|
|
74
|
-
* them lower hides nothing.
|
|
75
|
-
* 2. exclude gap → 74 (`CODEGRAPH_INDEX_INCOMPLETE`).
|
|
76
|
-
* 3. index not evaluated → 76 (`CODEGRAPH_INDEX_NOT_EVALUATED`): the
|
|
77
|
-
* axis was attempted and failed, which is NOT "verified clean".
|
|
78
|
-
* 4. index gap → 75 (`CODEGRAPH_INDEX_GAP`) in strict mode,
|
|
79
|
-
* 0 in the advisory default.
|
|
80
|
-
*
|
|
81
|
-
* The envelope still reports the finding in case 4 (`ok:false`, the same
|
|
82
|
-
* `code`, plus `indexIntegritySeverity: 'warning'`) — the policy governs
|
|
83
|
-
* the EXIT CODE, not whether the finding is visible. This mirrors the
|
|
84
|
-
* doctor's established convention: `ok:false` + `severity:'warning'`
|
|
85
|
-
* surfaces the finding without escalating the exit code.
|
|
59
|
+
* Gate precedence: exclude wins when both fire (it is the upstream cause,
|
|
60
|
+
* and repairing it also rebuilds the index the staleness axis is about).
|
|
61
|
+
* Then "not evaluated" outranks "gap", because an unmeasured axis must
|
|
62
|
+
* never be reported with the same status as a measured one. See
|
|
63
|
+
* `codegraphIndexIntegrityExitCode`.
|
|
86
64
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
printCodegraphFailure(io, 'codegraph.status', error, true);
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
const upstream = {
|
|
97
|
-
exitCode: result.exitCode,
|
|
98
|
-
stdout: localizeUpstreamCodegraphText(result.stdout).trimEnd(),
|
|
99
|
-
stderr: redactSensitiveErrorMessage(localizeUpstreamCodegraphText(result.stderr)).trimEnd()
|
|
100
|
-
};
|
|
101
|
-
const upstreamFailed = result.exitCode !== null && result.exitCode !== 0;
|
|
102
|
-
const data = {
|
|
103
|
-
upstream,
|
|
104
|
-
integrity,
|
|
105
|
-
integrityWarning,
|
|
106
|
-
indexIntegrity,
|
|
107
|
-
indexIntegrityWarning,
|
|
108
|
-
indexIntegrityVerdict: indexVerdict,
|
|
109
|
-
// Only meaningful where there IS a finding: a `clean` or `not-applicable`
|
|
110
|
-
// axis has no severity, and reporting `'warning'` there would read as
|
|
111
|
-
// "something was wrong but advisory".
|
|
112
|
-
indexIntegritySeverity: indexVerdict === 'gap' ? (strict ? 'error' : 'warning') : null
|
|
113
|
-
};
|
|
114
|
-
if (upstreamFailed) {
|
|
115
|
-
printResult(io, fail('codegraph.status', 'CODEGRAPH_COMMAND_FAILED', redactSensitiveErrorMessage(upstream.stderr ||
|
|
116
|
-
upstream.stdout ||
|
|
117
|
-
`codegraph exited with code ${String(result.exitCode)}`), data, ['Check the codegraph project path before retrying']), true);
|
|
118
|
-
}
|
|
119
|
-
else if (integrity?.gap === true) {
|
|
120
|
-
printResult(io, fail('codegraph.status', 'CODEGRAPH_INDEX_INCOMPLETE', `codegraph index is incomplete: ${integrity.excludedTrackedCount} of ${integrity.trackedSourceCount} tracked source files are excluded by ${integrity.rulesToRemove.length} rule(s).`, data, [
|
|
121
|
-
'Run `peaks codegraph repair-exclude --project <root>` to drop the offending rules and rebuild the index.'
|
|
122
|
-
]), true);
|
|
123
|
-
}
|
|
124
|
-
else if (indexVerdict === 'not-evaluated') {
|
|
125
|
-
// Distinct from the `ok` branch below on purpose: this axis produced
|
|
126
|
-
// NO verdict, and the envelope must not read as "index verified".
|
|
127
|
-
printResult(io, fail('codegraph.status', 'CODEGRAPH_INDEX_NOT_EVALUATED', `codegraph index integrity could not be evaluated: ${indexIntegrityWarning ?? 'unknown cause'}`, data, [
|
|
128
|
-
'The index was NOT measured — this is not a statement that the index is correct.',
|
|
129
|
-
'Re-run once the cause above is resolved.'
|
|
130
|
-
]), true);
|
|
131
|
-
}
|
|
132
|
-
else if (indexVerdict === 'gap') {
|
|
133
|
-
printResult(io, fail('codegraph.status', 'CODEGRAPH_INDEX_GAP', `codegraph index does not cover the repository: ${indexIntegrity?.includeGap.length ?? 0} extractor-supported tracked file(s) are not admitted by the config's include globs, and ${indexIntegrity?.deadRows.length ?? 0} index row(s) point at files that no longer exist.`, data, strict
|
|
134
|
-
? [
|
|
135
|
-
'The index must admit every extractor-supported tracked file and hold no row for a path that is gone.',
|
|
136
|
-
`Run \`${CODEGRAPH_REPAIR_INDEX_COMMAND}\` to drop the blocking exclude rules and rebuild the index without the stale rows.`
|
|
137
|
-
]
|
|
138
|
-
: [
|
|
139
|
-
'Advisory: this gap is reported as a warning and the command exits 0.',
|
|
140
|
-
`Set ${CODEGRAPH_INDEX_STRICT_ENV_VAR}=1 to make it blocking (exit ${CODEGRAPH_INDEX_INTEGRITY_EXIT_CODE}).`,
|
|
141
|
-
`Run \`${CODEGRAPH_REPAIR_INDEX_COMMAND}\` to drop the blocking exclude rules and rebuild the index without the stale rows.`
|
|
142
|
-
]), true);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
printResult(io, ok('codegraph.status', data), true);
|
|
65
|
+
function applyStatusExitCode(integrityGap, indexVerdict, strict) {
|
|
66
|
+
const indexExitCode = codegraphIndexIntegrityExitCode(indexVerdict, strict);
|
|
67
|
+
if (integrityGap) {
|
|
68
|
+
process.exitCode = CODEGRAPH_INTEGRITY_EXIT_CODE;
|
|
146
69
|
}
|
|
147
|
-
if (
|
|
148
|
-
process.exitCode =
|
|
70
|
+
else if (indexExitCode !== null) {
|
|
71
|
+
process.exitCode = indexExitCode;
|
|
149
72
|
}
|
|
150
|
-
return upstreamFailed;
|
|
151
73
|
}
|
|
152
74
|
/**
|
|
153
75
|
* `peaks codegraph status` with an integrity gate.
|
|
@@ -168,135 +90,26 @@ async function runCodegraphStatusJson(io, options, integrity, integrityWarning,
|
|
|
168
90
|
* (fresh) or `peaks codegraph repair-exclude` (explicit).
|
|
169
91
|
*/
|
|
170
92
|
export async function runCodegraphStatusCommand(io, options, asJson) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
let indexIntegrityWarning = null;
|
|
175
|
-
const projectRoot = resolve(options.project);
|
|
176
|
-
const strict = isCodegraphIndexStrictMode();
|
|
177
|
-
// R12-1: the two axes have DIFFERENT applicability predicates, and folding
|
|
178
|
-
// them into the config's alone is how a db-present / config-absent project
|
|
179
|
-
// came to exit 0 in SILENCE — under `PEAKS_CODEGRAPH_INDEX_STRICT=1` too.
|
|
180
|
-
// "Could not evaluate" is a verdict; it may not be spelled the same way as
|
|
181
|
-
// "verified clean" merely because the read happened to be gated out.
|
|
182
|
-
//
|
|
183
|
-
// - exclude axis: applicable iff `.codegraph/config.json` exists. The
|
|
184
|
-
// config IS the subject of that axis, so with no config there is no
|
|
185
|
-
// exclusion list in play — `not-applicable`, silent, as before.
|
|
186
|
-
// - index axis: applicable iff `.codegraph/codegraph.db` exists — the
|
|
187
|
-
// SAME predicate the doctor's `defaultProbe` uses
|
|
188
|
-
// (`isCodegraphInitialized` in
|
|
189
|
-
// `doctor-service/checks/codegraph-index-integrity.ts`), so the two
|
|
190
|
-
// consumers now agree about when the axis is evaluable at all. The
|
|
191
|
-
// index is the subject here and the config is only an INPUT it reads,
|
|
192
|
-
// so a missing config is "could not evaluate" (exit 76, `[FAIL]`),
|
|
193
|
-
// not "nothing to evaluate".
|
|
194
|
-
//
|
|
195
|
-
// The user's constraint holds either way: an absent config is LEGITIMATE
|
|
196
|
-
// for a project that never ran `peaks codegraph init` — with no db BOTH
|
|
197
|
-
// predicates are false and the command stays silent exactly as before.
|
|
198
|
-
const configPresent = isCodegraphExcludeConfigPresent(projectRoot);
|
|
199
|
-
const indexPresent = isCodegraphInitialized(projectRoot);
|
|
200
|
-
// The two axes are evaluated INDEPENDENTLY: an unreadable index must not
|
|
201
|
-
// blind the exclude verdict, and a malformed exclude list must not hide a
|
|
202
|
-
// stale index. Each failure degrades to its own warning.
|
|
203
|
-
if (configPresent || indexPresent) {
|
|
204
|
-
// Perf audit F1: both axes need the SAME tracked-file list and the SAME
|
|
205
|
-
// config, and reading them per-axis spawned `git ls-files` twice per
|
|
206
|
-
// command and re-ran the identical 32-glob `include` filter. Read once
|
|
207
|
-
// and hand the values to both inspectors through their deps seam.
|
|
208
|
-
let sharedInputs = null;
|
|
209
|
-
try {
|
|
210
|
-
sharedInputs = readCodegraphProjectInputs(projectRoot);
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
// One read, two blind axes — they consume exactly these two inputs,
|
|
214
|
-
// so a failure here blinds both. Report it on both, rather than
|
|
215
|
-
// letting the second axis re-run the same failing read to find out.
|
|
216
|
-
// Each axis claims the failure only where it was applicable at all:
|
|
217
|
-
// an unreadable CONFIG is not an exclude-axis finding on a project
|
|
218
|
-
// that has no config by design.
|
|
219
|
-
if (configPresent) {
|
|
220
|
-
integrityWarning = getErrorMessage(error);
|
|
221
|
-
}
|
|
222
|
-
if (indexPresent) {
|
|
223
|
-
indexIntegrityWarning = getErrorMessage(error);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (sharedInputs !== null) {
|
|
227
|
-
if (configPresent) {
|
|
228
|
-
try {
|
|
229
|
-
integrity = inspectCodegraphExcludeIntegrity(projectRoot, sharedInputs);
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
integrityWarning = getErrorMessage(error);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// The index axis needs an index. A config without `codegraph.db` is a
|
|
236
|
-
// pre-init / dangling state, not a defect: there are no rows to be
|
|
237
|
-
// stale and nothing `include` withheld from a graph that does not exist.
|
|
238
|
-
if (indexPresent) {
|
|
239
|
-
try {
|
|
240
|
-
indexIntegrity = inspectCodegraphIndexIntegrity(projectRoot, sharedInputs);
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
indexIntegrityWarning = getErrorMessage(error);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
const indexVerdict = resolveCodegraphIndexIntegrityVerdict(indexIntegrity, indexIntegrityWarning);
|
|
249
|
-
const indexGap = indexVerdict === 'gap';
|
|
93
|
+
const axes = readStatusAxes(resolve(options.project));
|
|
94
|
+
const integrityGap = axes.integrity?.gap === true;
|
|
95
|
+
const indexGap = axes.indexVerdict === 'gap';
|
|
250
96
|
if (asJson === true) {
|
|
251
|
-
const upstreamFailed = await runCodegraphStatusJson(io, options, integrity, integrityWarning, indexIntegrity, indexIntegrityWarning, indexVerdict, strict);
|
|
252
97
|
// Upstream failure outranks both gates — and it already set the exit
|
|
253
98
|
// code to upstream's (see `runCodegraphStatusJson`).
|
|
254
|
-
if (
|
|
99
|
+
if (await runCodegraphStatusJson(io, options, axes))
|
|
255
100
|
return;
|
|
256
|
-
}
|
|
257
101
|
}
|
|
258
102
|
else {
|
|
259
103
|
// Only when a gate found a gap: upstream's `[OK] Index is up
|
|
260
104
|
// to date` answers "consistent with the last scan", and printing it
|
|
261
105
|
// unqualified right above our verdict tells the reader two opposite
|
|
262
106
|
// things at once. Clean runs get no transform and stay byte-identical.
|
|
263
|
-
const upstreamFailed = await runCodegraphCommand(io, 'codegraph.status', { subcommand: 'status', project: options.project }, false,
|
|
264
|
-
|
|
265
|
-
io.stdout(`[WARN] codegraph exclude integrity not evaluated: ${integrityWarning}`);
|
|
266
|
-
}
|
|
267
|
-
else if (integrity !== null) {
|
|
268
|
-
for (const line of renderCodegraphExcludeIntegrityLines(integrity)) {
|
|
269
|
-
io.stdout(line);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
if (indexVerdict === 'not-evaluated') {
|
|
273
|
-
// `[FAIL]`, in every mode, because the command exits non-zero in
|
|
274
|
-
// every mode: the axis was attempted and failed, so this is not a
|
|
275
|
-
// statement about the index. Distinct wording from the gap line so
|
|
276
|
-
// the two can never be confused.
|
|
277
|
-
io.stdout(`[FAIL] codegraph index integrity could not be evaluated (the index was NOT measured): ${indexIntegrityWarning ?? 'unknown cause'}`);
|
|
278
|
-
}
|
|
279
|
-
else if (indexIntegrity !== null) {
|
|
280
|
-
for (const line of renderCodegraphIndexIntegrityLines(indexIntegrity, strict)) {
|
|
281
|
-
io.stdout(line);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
107
|
+
const upstreamFailed = await runCodegraphCommand(io, 'codegraph.status', { subcommand: 'status', project: options.project }, false, integrityGap || indexGap ? attributeUpstreamUpToDateLine : undefined);
|
|
108
|
+
emitIntegrityText(io, axes);
|
|
284
109
|
// Upstream failure outranks both gates — and it already set the exit
|
|
285
110
|
// code to upstream's.
|
|
286
|
-
if (upstreamFailed)
|
|
111
|
+
if (upstreamFailed)
|
|
287
112
|
return;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
// Gate precedence: exclude wins when both fire (it is the upstream cause,
|
|
291
|
-
// and repairing it also rebuilds the index the staleness axis is about).
|
|
292
|
-
// Then "not evaluated" outranks "gap", because an unmeasured axis must
|
|
293
|
-
// never be reported with the same status as a measured one. See
|
|
294
|
-
// `codegraphIndexIntegrityExitCode`.
|
|
295
|
-
const indexExitCode = codegraphIndexIntegrityExitCode(indexVerdict, strict);
|
|
296
|
-
if (integrity?.gap === true) {
|
|
297
|
-
process.exitCode = CODEGRAPH_INTEGRITY_EXIT_CODE;
|
|
298
|
-
}
|
|
299
|
-
else if (indexExitCode !== null) {
|
|
300
|
-
process.exitCode = indexExitCode;
|
|
301
113
|
}
|
|
114
|
+
applyStatusExitCode(integrityGap, axes.indexVerdict, axes.strict);
|
|
302
115
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type CodegraphExcludeIntegrityReport } from '../../services/codegraph/codegraph-exclude-integrity.js';
|
|
2
|
+
import { type CodegraphIndexIntegrityReport, type CodegraphIndexIntegrityVerdict } from '../../services/codegraph/codegraph-index-integrity.js';
|
|
3
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
4
|
+
/** Everything both the human and the machine branches of `status` report. */
|
|
5
|
+
export type CodegraphStatusAxes = {
|
|
6
|
+
readonly integrity: CodegraphExcludeIntegrityReport | null;
|
|
7
|
+
readonly integrityWarning: string | null;
|
|
8
|
+
readonly indexIntegrity: CodegraphIndexIntegrityReport | null;
|
|
9
|
+
readonly indexIntegrityWarning: string | null;
|
|
10
|
+
readonly indexVerdict: CodegraphIndexIntegrityVerdict;
|
|
11
|
+
readonly strict: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Read both axes for a project root.
|
|
15
|
+
*
|
|
16
|
+
* R12-1: the two axes have DIFFERENT applicability predicates, and folding
|
|
17
|
+
* them into the config's alone is how a db-present / config-absent project
|
|
18
|
+
* came to exit 0 in SILENCE — under `PEAKS_CODEGRAPH_INDEX_STRICT=1` too.
|
|
19
|
+
* "Could not evaluate" is a verdict; it may not be spelled the same way as
|
|
20
|
+
* "verified clean" merely because the read happened to be gated out.
|
|
21
|
+
*
|
|
22
|
+
* - exclude axis: applicable iff `.codegraph/config.json` exists. The
|
|
23
|
+
* config IS the subject of that axis, so with no config there is no
|
|
24
|
+
* exclusion list in play — `not-applicable`, silent, as before.
|
|
25
|
+
* - index axis: applicable iff `.codegraph/codegraph.db` exists — the
|
|
26
|
+
* SAME predicate the doctor's `defaultProbe` uses
|
|
27
|
+
* (`isCodegraphInitialized` in
|
|
28
|
+
* `doctor-service/checks/codegraph-index-integrity.ts`), so the two
|
|
29
|
+
* consumers now agree about when the axis is evaluable at all. The
|
|
30
|
+
* index is the subject here and the config is only an INPUT it reads,
|
|
31
|
+
* so a missing config is "could not evaluate" (exit 76, `[FAIL]`),
|
|
32
|
+
* not "nothing to evaluate".
|
|
33
|
+
*
|
|
34
|
+
* The user's constraint holds either way: an absent config is LEGITIMATE
|
|
35
|
+
* for a project that never ran `peaks codegraph init` — with no db BOTH
|
|
36
|
+
* predicates are false and the command stays silent exactly as before.
|
|
37
|
+
*
|
|
38
|
+
* The two axes are evaluated INDEPENDENTLY: an unreadable index must not
|
|
39
|
+
* blind the exclude verdict, and a malformed exclude list must not hide a
|
|
40
|
+
* stale index. Each failure degrades to its own warning.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readStatusAxes(projectRoot: string): CodegraphStatusAxes;
|
|
43
|
+
/** The human-readable axis report, printed only by the non-JSON branch. */
|
|
44
|
+
export declare function emitIntegrityText(io: ProgramIO, axes: CodegraphStatusAxes): void;
|