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,152 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
* `peaks skill sediment <verb>` — Sediment pool CLI primitives.
|
|
3
|
-
*
|
|
4
|
-
* Slices 2026-07-04-cli-15a (Task 15a) and 2026-07-04-cli-15b (Task 15b)
|
|
5
|
-
* of the 18-verb plan. This file implements 8 of 18 verbs:
|
|
6
|
-
*
|
|
7
|
-
* Task 15a:
|
|
8
|
-
* add-segment — scaffold ~/.peaks/skills/segments/<name>/SKILL.md
|
|
9
|
-
* add-bee — write ~/.peaks/skills/bees/<name>/manifest.json
|
|
10
|
-
* list — read index.json via readPool
|
|
11
|
-
* rebuild-index — rewrite index.json from filesystem state
|
|
12
|
-
*
|
|
13
|
-
* Task 15b:
|
|
14
|
-
* refine-bee — append a NL-described patch to an existing bee manifest
|
|
15
|
-
* clone-bee — duplicate an existing bee to a new name, status reset
|
|
16
|
-
* promote — flip candidate → stable when PromotionGate passes
|
|
17
|
-
* retire — flip → retired, optionally record a reason
|
|
18
|
-
*
|
|
19
|
-
* Other verbs (dispose / releases / release-show / release-diff / export /
|
|
20
|
-
* import / gc-blobs / search / recent / show) return
|
|
21
|
-
* `{ ok: false, error: "UNKNOWN_VERB: …" }` until Tasks 15c / 15d fill them.
|
|
22
|
-
*
|
|
23
|
-
* The CLI boundary is runSediment(argv, { home }): it returns a
|
|
24
|
-
* `{ ok, error?, data? }` envelope so program.ts can render the result
|
|
25
|
-
* as JSON via peaks-cli's existing printResult primitive.
|
|
26
|
-
*/
|
|
27
|
-
import { writeFileSync, mkdirSync, readFileSync, existsSync, readdirSync, rmSync } from 'node:fs';
|
|
28
|
-
import { join, basename } from 'node:path';
|
|
29
|
-
import { SYSTEM_PATH_FORBIDDEN, assertNotSystemPath, resolveSegmentsDir, resolveStateDbPath, resolveBlobsDir, resolveUserBeesDir, resolveUserBeeDir } from '../../services/sediment/pool-paths.js';
|
|
1
|
+
import { SYSTEM_PATH_FORBIDDEN } from '../../services/sediment/pool-paths.js';
|
|
30
2
|
import { peaksHome } from '../../services/sop/sop-paths.js';
|
|
31
|
-
import { writeBeeManifest } from '../../services/sediment/pool-write.js';
|
|
32
|
-
import { readPool } from '../../services/sediment/pool-read.js';
|
|
33
|
-
import { rebuildIndexFromFs } from '../../services/sediment/pool-rebuild-index.js';
|
|
34
|
-
import { evaluateGate } from '../../services/sediment/promotion-gate.js';
|
|
35
3
|
import { printCliEnvelope } from '../cli-helpers.js';
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* `
|
|
46
|
-
*
|
|
47
|
-
* accessors so call-sites don't have to re-narrow `unknown` or
|
|
48
|
-
* `string | boolean | string[]` on every read:
|
|
49
|
-
*
|
|
50
|
-
* - `flags.list(name)` → `string[]` (always an array; a single
|
|
51
|
-
* occurrence is wrapped to a 1-element
|
|
52
|
-
* array at parse time)
|
|
53
|
-
* - `flags.bool(name)` → `boolean` (presence-of flag; missing
|
|
54
|
-
* flag is `false`)
|
|
55
|
-
* - `flags.maybeString(name)` → `string | undefined` (first value,
|
|
56
|
-
* or `undefined` if the flag was given
|
|
57
|
-
* as a bare boolean with no value)
|
|
58
|
-
*
|
|
59
|
-
* The dispatch layer (runSediment) was previously peppered with
|
|
60
|
-
* `typeof flags.x === "string"` / `Array.isArray(flags.x)` narrowing.
|
|
61
|
-
* With this helper the call-sites collapse to one-line reads and the
|
|
62
|
-
* raw flag map stops leaking across the runSediment boundary.
|
|
63
|
-
*/
|
|
64
|
-
export class ParsedFlags {
|
|
65
|
-
raw;
|
|
66
|
-
constructor(raw) {
|
|
67
|
-
this.raw = raw;
|
|
68
|
-
}
|
|
69
|
-
/** Always returns an array. Missing flag → []. Single-occurrence
|
|
70
|
-
* flag → a 1-element array (parseFlags normalizes this). */
|
|
71
|
-
list(name) {
|
|
72
|
-
const v = this.raw[name];
|
|
73
|
-
if (v === undefined)
|
|
74
|
-
return [];
|
|
75
|
-
if (v === true)
|
|
76
|
-
return [];
|
|
77
|
-
return v;
|
|
78
|
-
}
|
|
79
|
-
/** Presence-of a bare boolean flag. Missing → false. */
|
|
80
|
-
bool(name) {
|
|
81
|
-
const v = this.raw[name];
|
|
82
|
-
if (v === undefined)
|
|
83
|
-
return false;
|
|
84
|
-
// A flag given as `--name <value>` is also "present" (it just happens
|
|
85
|
-
// to carry values too). Existing call-sites that want `--dry-run`
|
|
86
|
-
// semantics care about presence, not whether values are attached.
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
/** First value of a flag, or `undefined` if the flag is absent or
|
|
90
|
-
* was given as a bare boolean. */
|
|
91
|
-
maybeString(name) {
|
|
92
|
-
const v = this.raw[name];
|
|
93
|
-
if (v === undefined)
|
|
94
|
-
return undefined;
|
|
95
|
-
if (v === true)
|
|
96
|
-
return undefined;
|
|
97
|
-
return v[0];
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/** Parse an argv tail into positional args + flag map.
|
|
101
|
-
*
|
|
102
|
-
* Supports:
|
|
103
|
-
* --flag value → flags[flag] = [value, ...] (advance i by 1)
|
|
104
|
-
* --flag → flags[flag] = true (when next token starts with `--` or is undefined)
|
|
105
|
-
* --flag v1 --flag v2 → repeated `--flag` values are accumulated
|
|
106
|
-
*
|
|
107
|
-
* Internally stores all values as `string[]` (or `true` for a bare
|
|
108
|
-
* boolean flag). Use the `ParsedFlags` helper to read typed accessors.
|
|
109
|
-
*
|
|
110
|
-
* Repeatable flag handling (Task 15b): when the same `--key` appears
|
|
111
|
-
* consecutively (e.g. `--segment a --segment b --segment c`), values
|
|
112
|
-
* are accumulated into a single `string[]`. A single occurrence is
|
|
113
|
-
* normalized to a 1-element array so callers can use `.list(name)`
|
|
114
|
-
* uniformly without shape-narrowing on the call-site.
|
|
4
|
+
import { parseFlags } from './sediment-argv-flags.js';
|
|
5
|
+
import { addBee, addSegment, cloneBee, listPool, promote, rebuildIndex, refineBee, retire } from './sediment-pool-commands.js';
|
|
6
|
+
import { dispose, exportVerb, gcBlobsVerb, importVerb, releaseDiffVerb, releaseShow, releases } from './sediment-release-commands.js';
|
|
7
|
+
import { recent, search, show } from './sediment-query-commands.js';
|
|
8
|
+
// Re-exported so the split is invisible to importers of THIS path.
|
|
9
|
+
export { ParsedFlags, parseFlags } from './sediment-argv-flags.js';
|
|
10
|
+
/**
|
|
11
|
+
* Every verb the pool answers, keyed by the first positional. A `Map` rather
|
|
12
|
+
* than an object literal on purpose: `Object.prototype` names
|
|
13
|
+
* (`toString`, `constructor`, …) would otherwise resolve to an inherited
|
|
14
|
+
* function and dispatch a verb that does not exist.
|
|
115
15
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
i += 2;
|
|
137
|
-
}
|
|
138
|
-
// Back up one — the outer for-loop will i++ past the flag, so the
|
|
139
|
-
// next iteration sees the next real token.
|
|
140
|
-
i--;
|
|
141
|
-
rawFlags[k] = values;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
positional.push(a);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return { positional, flags: new ParsedFlags(rawFlags) };
|
|
149
|
-
}
|
|
16
|
+
const VERBS = new Map([
|
|
17
|
+
['add-segment', addSegment],
|
|
18
|
+
['add-bee', addBee],
|
|
19
|
+
['list', listPool],
|
|
20
|
+
['rebuild-index', rebuildIndex],
|
|
21
|
+
['refine-bee', refineBee],
|
|
22
|
+
['clone-bee', cloneBee],
|
|
23
|
+
['promote', promote],
|
|
24
|
+
['retire', retire],
|
|
25
|
+
['dispose', dispose],
|
|
26
|
+
['releases', releases],
|
|
27
|
+
['release-show', releaseShow],
|
|
28
|
+
['release-diff', releaseDiffVerb],
|
|
29
|
+
['export', exportVerb],
|
|
30
|
+
['import', importVerb],
|
|
31
|
+
['gc-blobs', gcBlobsVerb],
|
|
32
|
+
['search', search],
|
|
33
|
+
['recent', recent],
|
|
34
|
+
['show', show]
|
|
35
|
+
]);
|
|
150
36
|
/** Dispatch a sediment verb argv to the matching implementation.
|
|
151
37
|
*
|
|
152
38
|
* Returns { ok: true, data? } on success and { ok: false, error }
|
|
@@ -158,451 +44,11 @@ export async function runSediment(argv, { home }) {
|
|
|
158
44
|
const { positional, flags } = parseFlags(argv);
|
|
159
45
|
const verb = positional[0];
|
|
160
46
|
try {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (!name)
|
|
165
|
-
return { ok: false, error: 'MISSING_ARG: name' };
|
|
166
|
-
const description = flags.maybeString('describe') ?? '';
|
|
167
|
-
const segDir = join(resolveSegmentsDir({ home }), name);
|
|
168
|
-
// Soft-protection guard: refuse to write under any `.system` path
|
|
169
|
-
// segment. Mirrors the same guard in writeBeeManifest.
|
|
170
|
-
assertNotSystemPath(segDir);
|
|
171
|
-
mkdirSync(segDir, { recursive: true });
|
|
172
|
-
writeFileSync(join(segDir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\n`);
|
|
173
|
-
rebuildIndexFromFs({ home });
|
|
174
|
-
return { ok: true };
|
|
175
|
-
}
|
|
176
|
-
case 'add-bee': {
|
|
177
|
-
const name = positional[1];
|
|
178
|
-
if (!name)
|
|
179
|
-
return { ok: false, error: 'MISSING_ARG: name' };
|
|
180
|
-
// Collect --segment values; the brief uses repeatable --segment
|
|
181
|
-
// flags (one token per segment). parseFlags now returns a
|
|
182
|
-
// 1-element array for a single occurrence and a longer array
|
|
183
|
-
// for repeated keys, so .list() returns a uniform string[].
|
|
184
|
-
const segList = flags.list('segment');
|
|
185
|
-
const description = flags.maybeString('description') ?? '';
|
|
186
|
-
const m = {
|
|
187
|
-
schemaVersion: 'peaks.bee/1',
|
|
188
|
-
name,
|
|
189
|
-
source: 'user',
|
|
190
|
-
promotion_status: 'candidate',
|
|
191
|
-
description,
|
|
192
|
-
segments: segList.map((s) => ({
|
|
193
|
-
name: s,
|
|
194
|
-
inputs: [],
|
|
195
|
-
outputs: [],
|
|
196
|
-
sideEffects: []
|
|
197
|
-
})),
|
|
198
|
-
entrypoint: { preamble: `## ${name}`, refs: [] },
|
|
199
|
-
promotion: {
|
|
200
|
-
minCycles: 1,
|
|
201
|
-
requiresHumanApproval: true,
|
|
202
|
-
requiresSmokeTest: true
|
|
203
|
-
},
|
|
204
|
-
createdBy: 'llm',
|
|
205
|
-
lastTouchedAt: new Date().toISOString()
|
|
206
|
-
};
|
|
207
|
-
// writeBeeManifest runs zod validation + SYSTEM_PATH_FORBIDDEN
|
|
208
|
-
// guard internally.
|
|
209
|
-
writeBeeManifest({ home }, m);
|
|
210
|
-
rebuildIndexFromFs({ home });
|
|
211
|
-
return { ok: true };
|
|
212
|
-
}
|
|
213
|
-
case 'list': {
|
|
214
|
-
const idx = readPool({ home });
|
|
215
|
-
return { ok: true, data: idx.entries };
|
|
216
|
-
}
|
|
217
|
-
case 'rebuild-index': {
|
|
218
|
-
const idx = rebuildIndexFromFs({ home });
|
|
219
|
-
return { ok: true, data: idx };
|
|
220
|
-
}
|
|
221
|
-
// --- Task 15b verbs ---
|
|
222
|
-
case 'refine-bee': {
|
|
223
|
-
const name = positional[1];
|
|
224
|
-
if (!name)
|
|
225
|
-
return { ok: false, error: 'MISSING_ARG: refine-bee requires <name>' };
|
|
226
|
-
const patch = flags.maybeString('patch') ?? '';
|
|
227
|
-
if (!patch)
|
|
228
|
-
return { ok: false, error: 'MISSING_ARG: refine-bee requires --patch' };
|
|
229
|
-
const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
230
|
-
if (!existsSync(manifestPath))
|
|
231
|
-
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
232
|
-
const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
233
|
-
// Append patch note to description, preserving prior content. Cap at
|
|
234
|
-
// 1000 chars to avoid unbounded growth.
|
|
235
|
-
const ts = new Date().toISOString();
|
|
236
|
-
const note = `[refine ${ts}] ${patch}`;
|
|
237
|
-
m.description = (m.description + (m.description ? '\n' : '') + note).slice(0, 1000);
|
|
238
|
-
m.lastTouchedAt = ts;
|
|
239
|
-
// promotion_status is preserved (do not touch it here).
|
|
240
|
-
writeBeeManifest({ home }, m);
|
|
241
|
-
rebuildIndexFromFs({ home });
|
|
242
|
-
return { ok: true };
|
|
243
|
-
}
|
|
244
|
-
case 'clone-bee': {
|
|
245
|
-
const name = positional[1];
|
|
246
|
-
if (!name)
|
|
247
|
-
return { ok: false, error: 'MISSING_ARG: clone-bee requires <name>' };
|
|
248
|
-
const asName = flags.maybeString('as') ?? '';
|
|
249
|
-
if (!asName)
|
|
250
|
-
return { ok: false, error: 'MISSING_ARG: clone-bee requires --as <new-name>' };
|
|
251
|
-
const srcPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
252
|
-
if (!existsSync(srcPath))
|
|
253
|
-
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
254
|
-
const src = JSON.parse(readFileSync(srcPath, 'utf-8'));
|
|
255
|
-
// Fresh id, reset promotion_status to candidate, rename. The source
|
|
256
|
-
// manifest is unchanged on disk.
|
|
257
|
-
const clone = {
|
|
258
|
-
...src,
|
|
259
|
-
name: asName,
|
|
260
|
-
promotion_status: 'candidate',
|
|
261
|
-
lastTouchedAt: new Date().toISOString()
|
|
262
|
-
};
|
|
263
|
-
writeBeeManifest({ home }, clone);
|
|
264
|
-
rebuildIndexFromFs({ home });
|
|
265
|
-
return { ok: true };
|
|
266
|
-
}
|
|
267
|
-
case 'promote': {
|
|
268
|
-
const name = positional[1];
|
|
269
|
-
if (!name)
|
|
270
|
-
return { ok: false, error: 'MISSING_ARG: promote requires <name>' };
|
|
271
|
-
const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
272
|
-
if (!existsSync(manifestPath))
|
|
273
|
-
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
274
|
-
const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
275
|
-
if (m.source === 'system')
|
|
276
|
-
return { ok: false, error: 'PROMOTION_SYSTEM_REFUSED' };
|
|
277
|
-
// Evaluate the PromotionGate (Task 5). The CLI is a thin shim; the
|
|
278
|
-
// humanApproved / smokeTestPresent inputs default to "true" here
|
|
279
|
-
// because the LLM-driven peaks-maker workflow has already obtained
|
|
280
|
-
// those approvals before calling promote.
|
|
281
|
-
const gate = evaluateGate({ home }, m, {
|
|
282
|
-
humanApproved: true,
|
|
283
|
-
smokeTestPresent: m.promotion.requiresSmokeTest
|
|
284
|
-
});
|
|
285
|
-
if (!gate.ok) {
|
|
286
|
-
return {
|
|
287
|
-
ok: false,
|
|
288
|
-
error: `PROMOTION_GATE_FAILED: ${gate.failedSubconditions.join(',')}`
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
m.promotion_status = 'stable';
|
|
292
|
-
m.lastTouchedAt = new Date().toISOString();
|
|
293
|
-
writeBeeManifest({ home }, m);
|
|
294
|
-
rebuildIndexFromFs({ home });
|
|
295
|
-
return { ok: true };
|
|
296
|
-
}
|
|
297
|
-
case 'retire': {
|
|
298
|
-
const name = positional[1];
|
|
299
|
-
if (!name)
|
|
300
|
-
return { ok: false, error: 'MISSING_ARG: retire requires <name>' };
|
|
301
|
-
const reason = flags.maybeString('reason') ?? '';
|
|
302
|
-
const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
303
|
-
if (!existsSync(manifestPath))
|
|
304
|
-
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
305
|
-
const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
306
|
-
if (m.source === 'system')
|
|
307
|
-
return { ok: false, error: 'RETIRE_SYSTEM_REFUSED' };
|
|
308
|
-
m.promotion_status = 'retired';
|
|
309
|
-
if (reason) {
|
|
310
|
-
const ts = new Date().toISOString();
|
|
311
|
-
const note = `[retire ${ts}] ${reason}`;
|
|
312
|
-
m.description = (m.description + (m.description ? '\n' : '') + note).slice(0, 1000);
|
|
313
|
-
}
|
|
314
|
-
m.lastTouchedAt = new Date().toISOString();
|
|
315
|
-
writeBeeManifest({ home }, m);
|
|
316
|
-
rebuildIndexFromFs({ home });
|
|
317
|
-
return { ok: true };
|
|
318
|
-
}
|
|
319
|
-
// --- Task 15c verbs ---
|
|
320
|
-
case 'dispose': {
|
|
321
|
-
const name = positional[1];
|
|
322
|
-
if (!name)
|
|
323
|
-
return { ok: false, error: 'MISSING_ARG: dispose requires <name>' };
|
|
324
|
-
const decision = flags.maybeString('decision') ?? '';
|
|
325
|
-
if (decision !== 'destroy' && decision !== 'retain') {
|
|
326
|
-
return { ok: false, error: 'MISSING_ARG: dispose requires --decision destroy|retain' };
|
|
327
|
-
}
|
|
328
|
-
const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
329
|
-
if (!existsSync(manifestPath))
|
|
330
|
-
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
331
|
-
const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
332
|
-
// System bees: silently destroy; refuse retain (Task 9 contract).
|
|
333
|
-
if (m.source === 'system') {
|
|
334
|
-
if (decision === 'retain')
|
|
335
|
-
return { ok: false, error: 'RETAIN_SYSTEM_REFUSED' };
|
|
336
|
-
return { ok: true, data: { systemDestroyed: true } };
|
|
337
|
-
}
|
|
338
|
-
// User bee destroy: remove the manifest dir from the pool. The
|
|
339
|
-
// scratch materialization is cleaned up by the dispatch flow
|
|
340
|
-
// (its concern), but the pool's bees/<name>/manifest.json entry
|
|
341
|
-
// is removed here so the index reflects reality on next read.
|
|
342
|
-
if (decision === 'destroy') {
|
|
343
|
-
const beeDir = resolveUserBeeDir({ home }, name);
|
|
344
|
-
rmSync(beeDir, { recursive: true, force: true });
|
|
345
|
-
rebuildIndexFromFs({ home });
|
|
346
|
-
return { ok: true, data: { userDestroyed: true, path: beeDir } };
|
|
347
|
-
}
|
|
348
|
-
// User bee retain: open state.db, call retainRelease.
|
|
349
|
-
const version = flags.maybeString('version') ?? '0.1.0';
|
|
350
|
-
const scratchDir = flags.maybeString('scratch') ?? join(home, 'scratch');
|
|
351
|
-
if (!existsSync(scratchDir))
|
|
352
|
-
return { ok: false, error: 'SCRATCH_NOT_FOUND' };
|
|
353
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
354
|
-
const blobsDir = resolveBlobsDir({ home });
|
|
355
|
-
mkdirSync(blobsDir, { recursive: true });
|
|
356
|
-
const db = openStateDb(stateDbPath);
|
|
357
|
-
try {
|
|
358
|
-
retainRelease({ db, blobsDir, scratchDir, manifest: m, version });
|
|
359
|
-
}
|
|
360
|
-
finally {
|
|
361
|
-
db.close();
|
|
362
|
-
}
|
|
363
|
-
return { ok: true, data: { retained: true, version } };
|
|
364
|
-
}
|
|
365
|
-
case 'releases': {
|
|
366
|
-
const beeName = positional[1];
|
|
367
|
-
if (!beeName)
|
|
368
|
-
return { ok: false, error: 'MISSING_ARG: releases requires <bee-name>' };
|
|
369
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
370
|
-
const db = openStateDb(stateDbPath);
|
|
371
|
-
try {
|
|
372
|
-
const rows = db
|
|
373
|
-
.prepare('SELECT id, bee_name, version, source, archived_at, archived_by FROM bee_release WHERE bee_name = ? ORDER BY archived_at DESC')
|
|
374
|
-
.all(beeName);
|
|
375
|
-
return { ok: true, data: rows };
|
|
376
|
-
}
|
|
377
|
-
finally {
|
|
378
|
-
db.close();
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
case 'release-show': {
|
|
382
|
-
const beeName = positional[1];
|
|
383
|
-
const version = flags.maybeString('version') ?? '';
|
|
384
|
-
if (!beeName || !version) {
|
|
385
|
-
return {
|
|
386
|
-
ok: false,
|
|
387
|
-
error: 'MISSING_ARG: release-show requires <bee-name> and --version'
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
391
|
-
const db = openStateDb(stateDbPath);
|
|
392
|
-
try {
|
|
393
|
-
// Cast the row to the typed interface from skillhub/types.ts so
|
|
394
|
-
// downstream consumers (LLM agents in peaks-maker, CLI JSON
|
|
395
|
-
// renderers) get a structural shape rather than
|
|
396
|
-
// Record<string, unknown>. Minor #12 fix.
|
|
397
|
-
const row = db
|
|
398
|
-
.prepare('SELECT * FROM bee_release WHERE bee_name = ? AND version = ?')
|
|
399
|
-
.get(beeName, version);
|
|
400
|
-
if (!row)
|
|
401
|
-
return { ok: false, error: 'VERSION_NOT_FOUND' };
|
|
402
|
-
const id = row.id;
|
|
403
|
-
const manifest = db.prepare('SELECT * FROM bee_manifest WHERE release_id = ?').get(id);
|
|
404
|
-
const segments = db
|
|
405
|
-
.prepare('SELECT * FROM bee_segment_ref WHERE release_id = ?')
|
|
406
|
-
.all(id);
|
|
407
|
-
const files = db
|
|
408
|
-
.prepare('SELECT * FROM bee_file WHERE release_id = ?')
|
|
409
|
-
.all(id);
|
|
410
|
-
return { ok: true, data: { release: row, manifest, segments, files } };
|
|
411
|
-
}
|
|
412
|
-
finally {
|
|
413
|
-
db.close();
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
case 'release-diff': {
|
|
417
|
-
const beeName = positional[1];
|
|
418
|
-
const fromVersion = flags.maybeString('from') ?? '';
|
|
419
|
-
const toVersion = flags.maybeString('to') ?? '';
|
|
420
|
-
if (!beeName || !fromVersion || !toVersion) {
|
|
421
|
-
return {
|
|
422
|
-
ok: false,
|
|
423
|
-
error: 'MISSING_ARG: release-diff requires <bee-name> and --from and --to'
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
427
|
-
const db = openStateDb(stateDbPath);
|
|
428
|
-
try {
|
|
429
|
-
const diff = releaseDiff({ db, beeName, fromVersion, toVersion });
|
|
430
|
-
return { ok: true, data: diff };
|
|
431
|
-
}
|
|
432
|
-
catch (e) {
|
|
433
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
434
|
-
return { ok: false, error: msg };
|
|
435
|
-
}
|
|
436
|
-
finally {
|
|
437
|
-
db.close();
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
// --- Task 15d verbs ---
|
|
441
|
-
case 'export': {
|
|
442
|
-
const beeName = positional[1];
|
|
443
|
-
const version = flags.maybeString('version') ?? '';
|
|
444
|
-
const outPath = flags.maybeString('out') ?? '';
|
|
445
|
-
if (!beeName || !version || !outPath) {
|
|
446
|
-
return { ok: false, error: 'MISSING_ARG: export requires <bee-name>, --version, --out' };
|
|
447
|
-
}
|
|
448
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
449
|
-
const blobsDir = resolveBlobsDir({ home });
|
|
450
|
-
const db = openStateDb(stateDbPath);
|
|
451
|
-
try {
|
|
452
|
-
exportRelease({ db, blobsDir, beeName, version, outPath });
|
|
453
|
-
}
|
|
454
|
-
catch (e) {
|
|
455
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
456
|
-
return { ok: false, error: msg };
|
|
457
|
-
}
|
|
458
|
-
finally {
|
|
459
|
-
db.close();
|
|
460
|
-
}
|
|
461
|
-
// M7 (spec §7A.2 / §10 RL-9): `peaks skill sediment export` is
|
|
462
|
-
// an ALIAS of `peaks loop export` for one release cycle. Emit
|
|
463
|
-
// the deprecation warning to stderr so downstream tooling can
|
|
464
|
-
// upgrade. Future slice removes the alias.
|
|
465
|
-
process.stderr.write("warning: 'peaks skill sediment export' is deprecated; use 'peaks loop export' or 'peaks bee export' (peaks.bundle/1, spec §7A.2)\n");
|
|
466
|
-
return { ok: true, data: { outPath } };
|
|
467
|
-
}
|
|
468
|
-
case 'import': {
|
|
469
|
-
const bundlePath = positional[1];
|
|
470
|
-
const asNameRaw = flags.maybeString('as');
|
|
471
|
-
const asName = asNameRaw && asNameRaw.length > 0 ? asNameRaw : undefined;
|
|
472
|
-
if (!bundlePath)
|
|
473
|
-
return { ok: false, error: 'MISSING_ARG: import requires <bundle-path>' };
|
|
474
|
-
if (!existsSync(bundlePath))
|
|
475
|
-
return { ok: false, error: 'BUNDLE_NOT_FOUND' };
|
|
476
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
477
|
-
const blobsDir = resolveBlobsDir({ home });
|
|
478
|
-
mkdirSync(blobsDir, { recursive: true });
|
|
479
|
-
const db = openStateDb(stateDbPath);
|
|
480
|
-
try {
|
|
481
|
-
if (asName !== undefined) {
|
|
482
|
-
importRelease({ db, blobsDir, inPath: bundlePath, asName });
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
importRelease({ db, blobsDir, inPath: bundlePath });
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
catch (e) {
|
|
489
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
490
|
-
return { ok: false, error: msg };
|
|
491
|
-
}
|
|
492
|
-
finally {
|
|
493
|
-
db.close();
|
|
494
|
-
}
|
|
495
|
-
// M7 (spec §7A.2): `peaks skill sediment import` is an ALIAS of
|
|
496
|
-
// `peaks loop import` for one release cycle. Emit the
|
|
497
|
-
// deprecation warning so downstream tooling can upgrade.
|
|
498
|
-
process.stderr.write("warning: 'peaks skill sediment import' is deprecated; use 'peaks loop import' or 'peaks bee import' (peaks.bundle/1, spec §7A.2)\n");
|
|
499
|
-
return { ok: true, data: { asName: asName ?? basename(bundlePath) } };
|
|
500
|
-
}
|
|
501
|
-
case 'gc-blobs': {
|
|
502
|
-
const dryRun = flags.bool('dry-run');
|
|
503
|
-
const stateDbPath = resolveStateDbPath({ home });
|
|
504
|
-
const blobsDir = resolveBlobsDir({ home });
|
|
505
|
-
const db = openStateDb(stateDbPath);
|
|
506
|
-
try {
|
|
507
|
-
const removed = gcBlobs({ db, blobsDir, dryRun });
|
|
508
|
-
return { ok: true, data: { removed } };
|
|
509
|
-
}
|
|
510
|
-
catch (e) {
|
|
511
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
512
|
-
return { ok: false, error: msg };
|
|
513
|
-
}
|
|
514
|
-
finally {
|
|
515
|
-
db.close();
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
case 'search': {
|
|
519
|
-
const query = positional[1] ?? flags.maybeString('q') ?? '';
|
|
520
|
-
if (!query)
|
|
521
|
-
return { ok: false, error: 'MISSING_ARG: search requires <query>' };
|
|
522
|
-
const beesDir = resolveUserBeesDir({ home });
|
|
523
|
-
const matches = [];
|
|
524
|
-
const warnings = [];
|
|
525
|
-
if (existsSync(beesDir)) {
|
|
526
|
-
const q = query.toLowerCase();
|
|
527
|
-
for (const name of readdirSync(beesDir)) {
|
|
528
|
-
const manifestPath = join(beesDir, name, 'manifest.json');
|
|
529
|
-
if (!existsSync(manifestPath))
|
|
530
|
-
continue;
|
|
531
|
-
let m;
|
|
532
|
-
try {
|
|
533
|
-
m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
534
|
-
}
|
|
535
|
-
catch (e) {
|
|
536
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
537
|
-
warnings.push(`skipped ${name}: ${msg}`);
|
|
538
|
-
continue;
|
|
539
|
-
}
|
|
540
|
-
const haystack = `${m.name ?? ''} ${m.description ?? ''}`.toLowerCase();
|
|
541
|
-
if (haystack.includes(q)) {
|
|
542
|
-
matches.push({
|
|
543
|
-
name: m.name,
|
|
544
|
-
description: m.description,
|
|
545
|
-
source: m.source,
|
|
546
|
-
promotion_status: m.promotion_status
|
|
547
|
-
});
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
return { ok: true, data: { matches, warnings } };
|
|
552
|
-
}
|
|
553
|
-
case 'recent': {
|
|
554
|
-
const sinceRaw = flags.maybeString('since') ?? '7d';
|
|
555
|
-
const m = sinceRaw.match(/^(\d+)d$/);
|
|
556
|
-
if (!m)
|
|
557
|
-
return { ok: false, error: 'MISSING_ARG: recent requires --since Nd (e.g. 7d)' };
|
|
558
|
-
const sinceDays = parseInt(m[1], 10);
|
|
559
|
-
const cutoff = new Date(Date.now() - sinceDays * 24 * 60 * 60 * 1000).toISOString();
|
|
560
|
-
const beesDir = resolveUserBeesDir({ home });
|
|
561
|
-
const matches = [];
|
|
562
|
-
const warnings = [];
|
|
563
|
-
if (existsSync(beesDir)) {
|
|
564
|
-
for (const name of readdirSync(beesDir)) {
|
|
565
|
-
const manifestPath = join(beesDir, name, 'manifest.json');
|
|
566
|
-
if (!existsSync(manifestPath))
|
|
567
|
-
continue;
|
|
568
|
-
let b;
|
|
569
|
-
try {
|
|
570
|
-
b = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
571
|
-
}
|
|
572
|
-
catch (e) {
|
|
573
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
574
|
-
warnings.push(`skipped ${name}: ${msg}`);
|
|
575
|
-
continue;
|
|
576
|
-
}
|
|
577
|
-
if (typeof b.lastTouchedAt === 'string' && b.lastTouchedAt >= cutoff) {
|
|
578
|
-
matches.push({
|
|
579
|
-
name: b.name,
|
|
580
|
-
lastTouchedAt: b.lastTouchedAt,
|
|
581
|
-
promotion_status: b.promotion_status
|
|
582
|
-
});
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
return { ok: true, data: { matches, warnings } };
|
|
587
|
-
}
|
|
588
|
-
case 'show': {
|
|
589
|
-
const name = positional[1];
|
|
590
|
-
if (!name)
|
|
591
|
-
return { ok: false, error: 'MISSING_ARG: show requires <name>' };
|
|
592
|
-
const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
593
|
-
if (!existsSync(manifestPath))
|
|
594
|
-
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
595
|
-
try {
|
|
596
|
-
return { ok: true, data: JSON.parse(readFileSync(manifestPath, 'utf-8')) };
|
|
597
|
-
}
|
|
598
|
-
catch (e) {
|
|
599
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
600
|
-
return { ok: false, error: `MANIFEST_CORRUPT: ${msg}` };
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
default:
|
|
604
|
-
return { ok: false, error: `UNKNOWN_VERB: ${verb ?? ''}` };
|
|
47
|
+
const handler = verb === undefined ? undefined : VERBS.get(verb);
|
|
48
|
+
if (handler === undefined) {
|
|
49
|
+
return { ok: false, error: `UNKNOWN_VERB: ${verb ?? ''}` };
|
|
605
50
|
}
|
|
51
|
+
return await handler({ home, positional, flags });
|
|
606
52
|
}
|
|
607
53
|
catch (e) {
|
|
608
54
|
if (e instanceof SYSTEM_PATH_FORBIDDEN) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CliResult, SedimentContext } from './sediment-command-shared.js';
|
|
2
|
+
export declare function addSegment(ctx: SedimentContext): CliResult;
|
|
3
|
+
export declare function addBee(ctx: SedimentContext): CliResult;
|
|
4
|
+
export declare function listPool(ctx: SedimentContext): CliResult;
|
|
5
|
+
export declare function rebuildIndex(ctx: SedimentContext): CliResult;
|
|
6
|
+
export declare function refineBee(ctx: SedimentContext): CliResult;
|
|
7
|
+
export declare function cloneBee(ctx: SedimentContext): CliResult;
|
|
8
|
+
export declare function promote(ctx: SedimentContext): CliResult;
|
|
9
|
+
export declare function retire(ctx: SedimentContext): CliResult;
|