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,185 @@
|
|
|
1
|
+
// src/cli/commands/sediment-pool-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// The `peaks skill sediment` verbs that read or write the bee pool itself:
|
|
4
|
+
// `add-segment`, `add-bee`, `list`, `rebuild-index`, `refine-bee`,
|
|
5
|
+
// `clone-bee`, `promote`, `retire`. Split out of `sediment-commands.ts`;
|
|
6
|
+
// every verb's args, envelope and error strings are unchanged.
|
|
7
|
+
import { writeFileSync, mkdirSync, readFileSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { assertNotSystemPath, resolveSegmentsDir, resolveUserBeesDir } from '../../services/sediment/pool-paths.js';
|
|
10
|
+
import { writeBeeManifest } from '../../services/sediment/pool-write.js';
|
|
11
|
+
import { readPool } from '../../services/sediment/pool-read.js';
|
|
12
|
+
import { rebuildIndexFromFs } from '../../services/sediment/pool-rebuild-index.js';
|
|
13
|
+
import { evaluateGate } from '../../services/sediment/promotion-gate.js';
|
|
14
|
+
/** Longest `description` the pool will store; a patch appends under this cap. */
|
|
15
|
+
const DESCRIPTION_MAX_CHARS = 1000;
|
|
16
|
+
export function addSegment(ctx) {
|
|
17
|
+
const { home, positional, flags } = ctx;
|
|
18
|
+
const name = positional[1];
|
|
19
|
+
if (!name)
|
|
20
|
+
return { ok: false, error: 'MISSING_ARG: name' };
|
|
21
|
+
const description = flags.maybeString('describe') ?? '';
|
|
22
|
+
const segDir = join(resolveSegmentsDir({ home }), name);
|
|
23
|
+
// Soft-protection guard: refuse to write under any `.system` path
|
|
24
|
+
// segment. Mirrors the same guard in writeBeeManifest.
|
|
25
|
+
assertNotSystemPath(segDir);
|
|
26
|
+
mkdirSync(segDir, { recursive: true });
|
|
27
|
+
writeFileSync(join(segDir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\n`);
|
|
28
|
+
rebuildIndexFromFs({ home });
|
|
29
|
+
return { ok: true };
|
|
30
|
+
}
|
|
31
|
+
export function addBee(ctx) {
|
|
32
|
+
const { home, positional, flags } = ctx;
|
|
33
|
+
const name = positional[1];
|
|
34
|
+
if (!name)
|
|
35
|
+
return { ok: false, error: 'MISSING_ARG: name' };
|
|
36
|
+
// Collect --segment values; the brief uses repeatable --segment
|
|
37
|
+
// flags (one token per segment). parseFlags now returns a
|
|
38
|
+
// 1-element array for a single occurrence and a longer array
|
|
39
|
+
// for repeated keys, so .list() returns a uniform string[].
|
|
40
|
+
const segList = flags.list('segment');
|
|
41
|
+
const description = flags.maybeString('description') ?? '';
|
|
42
|
+
const m = {
|
|
43
|
+
schemaVersion: 'peaks.bee/1',
|
|
44
|
+
name,
|
|
45
|
+
source: 'user',
|
|
46
|
+
promotion_status: 'candidate',
|
|
47
|
+
description,
|
|
48
|
+
segments: segList.map((s) => ({
|
|
49
|
+
name: s,
|
|
50
|
+
inputs: [],
|
|
51
|
+
outputs: [],
|
|
52
|
+
sideEffects: []
|
|
53
|
+
})),
|
|
54
|
+
entrypoint: { preamble: `## ${name}`, refs: [] },
|
|
55
|
+
promotion: {
|
|
56
|
+
minCycles: 1,
|
|
57
|
+
requiresHumanApproval: true,
|
|
58
|
+
requiresSmokeTest: true
|
|
59
|
+
},
|
|
60
|
+
createdBy: 'llm',
|
|
61
|
+
lastTouchedAt: new Date().toISOString()
|
|
62
|
+
};
|
|
63
|
+
// writeBeeManifest runs zod validation + SYSTEM_PATH_FORBIDDEN
|
|
64
|
+
// guard internally.
|
|
65
|
+
writeBeeManifest({ home }, m);
|
|
66
|
+
rebuildIndexFromFs({ home });
|
|
67
|
+
return { ok: true };
|
|
68
|
+
}
|
|
69
|
+
export function listPool(ctx) {
|
|
70
|
+
const idx = readPool({ home: ctx.home });
|
|
71
|
+
return { ok: true, data: idx.entries };
|
|
72
|
+
}
|
|
73
|
+
export function rebuildIndex(ctx) {
|
|
74
|
+
const idx = rebuildIndexFromFs({ home: ctx.home });
|
|
75
|
+
return { ok: true, data: idx };
|
|
76
|
+
}
|
|
77
|
+
/** Read a bee's manifest, or null when it is absent. */
|
|
78
|
+
function readManifest(manifestPath) {
|
|
79
|
+
if (!existsSync(manifestPath))
|
|
80
|
+
return null;
|
|
81
|
+
return JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
82
|
+
}
|
|
83
|
+
function beeManifestPath(home, name) {
|
|
84
|
+
return join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
85
|
+
}
|
|
86
|
+
/** Append a `[tag timestamp] text` note to a description under the length cap. */
|
|
87
|
+
function appendNote(description, tag, text, ts) {
|
|
88
|
+
const note = `[${tag} ${ts}] ${text}`;
|
|
89
|
+
return (description + (description ? '\n' : '') + note).slice(0, DESCRIPTION_MAX_CHARS);
|
|
90
|
+
}
|
|
91
|
+
export function refineBee(ctx) {
|
|
92
|
+
const { home, positional, flags } = ctx;
|
|
93
|
+
const name = positional[1];
|
|
94
|
+
if (!name)
|
|
95
|
+
return { ok: false, error: 'MISSING_ARG: refine-bee requires <name>' };
|
|
96
|
+
const patch = flags.maybeString('patch') ?? '';
|
|
97
|
+
if (!patch)
|
|
98
|
+
return { ok: false, error: 'MISSING_ARG: refine-bee requires --patch' };
|
|
99
|
+
const m = readManifest(beeManifestPath(home, name));
|
|
100
|
+
if (m === null)
|
|
101
|
+
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
102
|
+
// Append patch note to description, preserving prior content. Cap at
|
|
103
|
+
// 1000 chars to avoid unbounded growth.
|
|
104
|
+
const ts = new Date().toISOString();
|
|
105
|
+
m.description = appendNote(m.description, 'refine', patch, ts);
|
|
106
|
+
m.lastTouchedAt = ts;
|
|
107
|
+
// promotion_status is preserved (do not touch it here).
|
|
108
|
+
writeBeeManifest({ home }, m);
|
|
109
|
+
rebuildIndexFromFs({ home });
|
|
110
|
+
return { ok: true };
|
|
111
|
+
}
|
|
112
|
+
export function cloneBee(ctx) {
|
|
113
|
+
const { home, positional, flags } = ctx;
|
|
114
|
+
const name = positional[1];
|
|
115
|
+
if (!name)
|
|
116
|
+
return { ok: false, error: 'MISSING_ARG: clone-bee requires <name>' };
|
|
117
|
+
const asName = flags.maybeString('as') ?? '';
|
|
118
|
+
if (!asName)
|
|
119
|
+
return { ok: false, error: 'MISSING_ARG: clone-bee requires --as <new-name>' };
|
|
120
|
+
const src = readManifest(beeManifestPath(home, name));
|
|
121
|
+
if (src === null)
|
|
122
|
+
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
123
|
+
// Fresh id, reset promotion_status to candidate, rename. The source
|
|
124
|
+
// manifest is unchanged on disk.
|
|
125
|
+
const clone = {
|
|
126
|
+
...src,
|
|
127
|
+
name: asName,
|
|
128
|
+
promotion_status: 'candidate',
|
|
129
|
+
lastTouchedAt: new Date().toISOString()
|
|
130
|
+
};
|
|
131
|
+
writeBeeManifest({ home }, clone);
|
|
132
|
+
rebuildIndexFromFs({ home });
|
|
133
|
+
return { ok: true };
|
|
134
|
+
}
|
|
135
|
+
export function promote(ctx) {
|
|
136
|
+
const { home, positional } = ctx;
|
|
137
|
+
const name = positional[1];
|
|
138
|
+
if (!name)
|
|
139
|
+
return { ok: false, error: 'MISSING_ARG: promote requires <name>' };
|
|
140
|
+
const m = readManifest(beeManifestPath(home, name));
|
|
141
|
+
if (m === null)
|
|
142
|
+
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
143
|
+
if (m.source === 'system')
|
|
144
|
+
return { ok: false, error: 'PROMOTION_SYSTEM_REFUSED' };
|
|
145
|
+
// Evaluate the PromotionGate (Task 5). The CLI is a thin shim; the
|
|
146
|
+
// humanApproved / smokeTestPresent inputs default to "true" here
|
|
147
|
+
// because the LLM-driven peaks-maker workflow has already obtained
|
|
148
|
+
// those approvals before calling promote.
|
|
149
|
+
const gate = evaluateGate({ home }, m, {
|
|
150
|
+
humanApproved: true,
|
|
151
|
+
smokeTestPresent: m.promotion.requiresSmokeTest
|
|
152
|
+
});
|
|
153
|
+
if (!gate.ok) {
|
|
154
|
+
return {
|
|
155
|
+
ok: false,
|
|
156
|
+
error: `PROMOTION_GATE_FAILED: ${gate.failedSubconditions.join(',')}`
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
m.promotion_status = 'stable';
|
|
160
|
+
m.lastTouchedAt = new Date().toISOString();
|
|
161
|
+
writeBeeManifest({ home }, m);
|
|
162
|
+
rebuildIndexFromFs({ home });
|
|
163
|
+
return { ok: true };
|
|
164
|
+
}
|
|
165
|
+
export function retire(ctx) {
|
|
166
|
+
const { home, positional, flags } = ctx;
|
|
167
|
+
const name = positional[1];
|
|
168
|
+
if (!name)
|
|
169
|
+
return { ok: false, error: 'MISSING_ARG: retire requires <name>' };
|
|
170
|
+
const reason = flags.maybeString('reason') ?? '';
|
|
171
|
+
const m = readManifest(beeManifestPath(home, name));
|
|
172
|
+
if (m === null)
|
|
173
|
+
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
174
|
+
if (m.source === 'system')
|
|
175
|
+
return { ok: false, error: 'RETIRE_SYSTEM_REFUSED' };
|
|
176
|
+
m.promotion_status = 'retired';
|
|
177
|
+
if (reason) {
|
|
178
|
+
const ts = new Date().toISOString();
|
|
179
|
+
m.description = appendNote(m.description, 'retire', reason, ts);
|
|
180
|
+
}
|
|
181
|
+
m.lastTouchedAt = new Date().toISOString();
|
|
182
|
+
writeBeeManifest({ home }, m);
|
|
183
|
+
rebuildIndexFromFs({ home });
|
|
184
|
+
return { ok: true };
|
|
185
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CliResult, SedimentContext } from './sediment-command-shared.js';
|
|
2
|
+
export declare function search(ctx: SedimentContext): CliResult;
|
|
3
|
+
export declare function recent(ctx: SedimentContext): CliResult;
|
|
4
|
+
export declare function show(ctx: SedimentContext): CliResult;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// src/cli/commands/sediment-query-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// The read-only `peaks skill sediment` verbs: `search`, `recent`, `show`.
|
|
4
|
+
// Split out of `sediment-commands.ts`; every verb's args, envelope and error
|
|
5
|
+
// strings are unchanged.
|
|
6
|
+
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { resolveUserBeesDir } from '../../services/sediment/pool-paths.js';
|
|
9
|
+
/** Milliseconds in one day, for `recent --since <N>d`. */
|
|
10
|
+
const MILLISECONDS_PER_DAY = 86_400_000;
|
|
11
|
+
/** `e instanceof Error ? e.message : String(e)` — the pool's error text. */
|
|
12
|
+
function errorText(e) {
|
|
13
|
+
return e instanceof Error ? e.message : String(e);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Walk `beesDir` and hand every readable bee manifest to `visit`. A manifest
|
|
17
|
+
* that cannot be parsed is reported as a warning and skipped, exactly as the
|
|
18
|
+
* per-verb inline loops did.
|
|
19
|
+
*/
|
|
20
|
+
function eachManifest(beesDir, warnings, visit) {
|
|
21
|
+
if (!existsSync(beesDir))
|
|
22
|
+
return;
|
|
23
|
+
for (const name of readdirSync(beesDir)) {
|
|
24
|
+
const manifestPath = join(beesDir, name, 'manifest.json');
|
|
25
|
+
if (!existsSync(manifestPath))
|
|
26
|
+
continue;
|
|
27
|
+
let manifest;
|
|
28
|
+
try {
|
|
29
|
+
manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
warnings.push(`skipped ${name}: ${errorText(e)}`);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
visit(name, manifest);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function search(ctx) {
|
|
39
|
+
const { home, positional, flags } = ctx;
|
|
40
|
+
const query = positional[1] ?? flags.maybeString('q') ?? '';
|
|
41
|
+
if (!query)
|
|
42
|
+
return { ok: false, error: 'MISSING_ARG: search requires <query>' };
|
|
43
|
+
const q = query.toLowerCase();
|
|
44
|
+
const matches = [];
|
|
45
|
+
const warnings = [];
|
|
46
|
+
eachManifest(resolveUserBeesDir({ home }), warnings, (_name, m) => {
|
|
47
|
+
const haystack = `${m.name ?? ''} ${m.description ?? ''}`.toLowerCase();
|
|
48
|
+
if (haystack.includes(q)) {
|
|
49
|
+
matches.push({
|
|
50
|
+
name: m.name,
|
|
51
|
+
description: m.description,
|
|
52
|
+
source: m.source,
|
|
53
|
+
promotion_status: m.promotion_status
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return { ok: true, data: { matches, warnings } };
|
|
58
|
+
}
|
|
59
|
+
export function recent(ctx) {
|
|
60
|
+
const { home, flags } = ctx;
|
|
61
|
+
const sinceRaw = flags.maybeString('since') ?? '7d';
|
|
62
|
+
const m = sinceRaw.match(/^(\d+)d$/);
|
|
63
|
+
if (!m)
|
|
64
|
+
return { ok: false, error: 'MISSING_ARG: recent requires --since Nd (e.g. 7d)' };
|
|
65
|
+
const sinceDays = parseInt(m[1], 10);
|
|
66
|
+
const cutoff = new Date(Date.now() - sinceDays * MILLISECONDS_PER_DAY).toISOString();
|
|
67
|
+
const matches = [];
|
|
68
|
+
const warnings = [];
|
|
69
|
+
eachManifest(resolveUserBeesDir({ home }), warnings, (_name, b) => {
|
|
70
|
+
if (typeof b.lastTouchedAt === 'string' && b.lastTouchedAt >= cutoff) {
|
|
71
|
+
matches.push({
|
|
72
|
+
name: b.name,
|
|
73
|
+
lastTouchedAt: b.lastTouchedAt,
|
|
74
|
+
promotion_status: b.promotion_status
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return { ok: true, data: { matches, warnings } };
|
|
79
|
+
}
|
|
80
|
+
export function show(ctx) {
|
|
81
|
+
const { home, positional } = ctx;
|
|
82
|
+
const name = positional[1];
|
|
83
|
+
if (!name)
|
|
84
|
+
return { ok: false, error: 'MISSING_ARG: show requires <name>' };
|
|
85
|
+
const manifestPath = join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
86
|
+
if (!existsSync(manifestPath))
|
|
87
|
+
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
88
|
+
try {
|
|
89
|
+
return { ok: true, data: JSON.parse(readFileSync(manifestPath, 'utf-8')) };
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
return { ok: false, error: `MANIFEST_CORRUPT: ${errorText(e)}` };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CliResult, SedimentContext } from './sediment-command-shared.js';
|
|
2
|
+
export declare function dispose(ctx: SedimentContext): CliResult;
|
|
3
|
+
export declare function releases(ctx: SedimentContext): CliResult;
|
|
4
|
+
export declare function releaseShow(ctx: SedimentContext): CliResult;
|
|
5
|
+
export declare function releaseDiffVerb(ctx: SedimentContext): CliResult;
|
|
6
|
+
export declare function exportVerb(ctx: SedimentContext): CliResult;
|
|
7
|
+
export declare function importVerb(ctx: SedimentContext): CliResult;
|
|
8
|
+
export declare function gcBlobsVerb(ctx: SedimentContext): CliResult;
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// src/cli/commands/sediment-release-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// The `peaks skill sediment` verbs that act on retained releases:
|
|
4
|
+
// `dispose`, `releases`, `release-show`, `release-diff`, `export`, `import`,
|
|
5
|
+
// `gc-blobs`. Split out of `sediment-commands.ts`; every verb's args,
|
|
6
|
+
// envelope, stderr warning and error strings are unchanged.
|
|
7
|
+
import { mkdirSync, existsSync, readFileSync, rmSync } from 'node:fs';
|
|
8
|
+
import { join, basename } from 'node:path';
|
|
9
|
+
import { resolveStateDbPath, resolveBlobsDir, resolveUserBeesDir, resolveUserBeeDir } from '../../services/sediment/pool-paths.js';
|
|
10
|
+
import { rebuildIndexFromFs } from '../../services/sediment/pool-rebuild-index.js';
|
|
11
|
+
import { openStateDb } from '../../services/skillhub/sqlite-store.js';
|
|
12
|
+
import { retainRelease } from '../../services/skillhub/release-retain.js';
|
|
13
|
+
import { releaseDiff } from '../../services/skillhub/release-diff.js';
|
|
14
|
+
import { exportRelease } from '../../services/skillhub/release-export.js';
|
|
15
|
+
import { importRelease } from '../../services/skillhub/release-import.js';
|
|
16
|
+
import { gcBlobs } from '../../services/skillhub/release-gc-blobs.js';
|
|
17
|
+
const DEFAULT_RELEASE_VERSION = '0.1.0';
|
|
18
|
+
function beeManifestPath(home, name) {
|
|
19
|
+
return join(resolveUserBeesDir({ home }), name, 'manifest.json');
|
|
20
|
+
}
|
|
21
|
+
function readManifest(manifestPath) {
|
|
22
|
+
if (!existsSync(manifestPath))
|
|
23
|
+
return null;
|
|
24
|
+
return JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
25
|
+
}
|
|
26
|
+
/** `e instanceof Error ? e.message : String(e)` — the pool's error text. */
|
|
27
|
+
function errorText(e) {
|
|
28
|
+
return e instanceof Error ? e.message : String(e);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* User bee destroy: remove the manifest dir from the pool. The scratch
|
|
32
|
+
* materialization is cleaned up by the dispatch flow (its concern), but the
|
|
33
|
+
* pool's bees/<name>/manifest.json entry is removed here so the index reflects
|
|
34
|
+
* reality on next read.
|
|
35
|
+
*/
|
|
36
|
+
function destroyUserBee(home, name) {
|
|
37
|
+
const beeDir = resolveUserBeeDir({ home }, name);
|
|
38
|
+
rmSync(beeDir, { recursive: true, force: true });
|
|
39
|
+
rebuildIndexFromFs({ home });
|
|
40
|
+
return { ok: true, data: { userDestroyed: true, path: beeDir } };
|
|
41
|
+
}
|
|
42
|
+
/** User bee retain: open state.db, call retainRelease. */
|
|
43
|
+
function retainUserBee(home, manifest, flags) {
|
|
44
|
+
const version = flags.maybeString('version') ?? DEFAULT_RELEASE_VERSION;
|
|
45
|
+
const scratchDir = flags.maybeString('scratch') ?? join(home, 'scratch');
|
|
46
|
+
if (!existsSync(scratchDir))
|
|
47
|
+
return { ok: false, error: 'SCRATCH_NOT_FOUND' };
|
|
48
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
49
|
+
const blobsDir = resolveBlobsDir({ home });
|
|
50
|
+
mkdirSync(blobsDir, { recursive: true });
|
|
51
|
+
const db = openStateDb(stateDbPath);
|
|
52
|
+
try {
|
|
53
|
+
retainRelease({ db, blobsDir, scratchDir, manifest, version });
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
db.close();
|
|
57
|
+
}
|
|
58
|
+
return { ok: true, data: { retained: true, version } };
|
|
59
|
+
}
|
|
60
|
+
export function dispose(ctx) {
|
|
61
|
+
const { home, positional, flags } = ctx;
|
|
62
|
+
const name = positional[1];
|
|
63
|
+
if (!name)
|
|
64
|
+
return { ok: false, error: 'MISSING_ARG: dispose requires <name>' };
|
|
65
|
+
const decision = flags.maybeString('decision') ?? '';
|
|
66
|
+
if (decision !== 'destroy' && decision !== 'retain') {
|
|
67
|
+
return { ok: false, error: 'MISSING_ARG: dispose requires --decision destroy|retain' };
|
|
68
|
+
}
|
|
69
|
+
const m = readManifest(beeManifestPath(home, name));
|
|
70
|
+
if (m === null)
|
|
71
|
+
return { ok: false, error: 'BEE_NOT_FOUND' };
|
|
72
|
+
// System bees: silently destroy; refuse retain (Task 9 contract).
|
|
73
|
+
if (m.source === 'system') {
|
|
74
|
+
if (decision === 'retain')
|
|
75
|
+
return { ok: false, error: 'RETAIN_SYSTEM_REFUSED' };
|
|
76
|
+
return { ok: true, data: { systemDestroyed: true } };
|
|
77
|
+
}
|
|
78
|
+
return decision === 'destroy' ? destroyUserBee(home, name) : retainUserBee(home, m, flags);
|
|
79
|
+
}
|
|
80
|
+
const RELEASES_SQL = 'SELECT id, bee_name, version, source, archived_at, archived_by FROM bee_release WHERE bee_name = ? ORDER BY archived_at DESC';
|
|
81
|
+
export function releases(ctx) {
|
|
82
|
+
const { home, positional } = ctx;
|
|
83
|
+
const beeName = positional[1];
|
|
84
|
+
if (!beeName)
|
|
85
|
+
return { ok: false, error: 'MISSING_ARG: releases requires <bee-name>' };
|
|
86
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
87
|
+
const db = openStateDb(stateDbPath);
|
|
88
|
+
try {
|
|
89
|
+
const rows = db.prepare(RELEASES_SQL).all(beeName);
|
|
90
|
+
return { ok: true, data: rows };
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
db.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function releaseShow(ctx) {
|
|
97
|
+
const { home, positional, flags } = ctx;
|
|
98
|
+
const beeName = positional[1];
|
|
99
|
+
const version = flags.maybeString('version') ?? '';
|
|
100
|
+
if (!beeName || !version) {
|
|
101
|
+
return {
|
|
102
|
+
ok: false,
|
|
103
|
+
error: 'MISSING_ARG: release-show requires <bee-name> and --version'
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
107
|
+
const db = openStateDb(stateDbPath);
|
|
108
|
+
try {
|
|
109
|
+
// Cast the row to the typed interface from skillhub/types.ts so
|
|
110
|
+
// downstream consumers (LLM agents in peaks-maker, CLI JSON
|
|
111
|
+
// renderers) get a structural shape rather than
|
|
112
|
+
// Record<string, unknown>. Minor #12 fix.
|
|
113
|
+
const row = db
|
|
114
|
+
.prepare('SELECT * FROM bee_release WHERE bee_name = ? AND version = ?')
|
|
115
|
+
.get(beeName, version);
|
|
116
|
+
if (!row)
|
|
117
|
+
return { ok: false, error: 'VERSION_NOT_FOUND' };
|
|
118
|
+
const id = row.id;
|
|
119
|
+
const manifest = db.prepare('SELECT * FROM bee_manifest WHERE release_id = ?').get(id);
|
|
120
|
+
const segments = db
|
|
121
|
+
.prepare('SELECT * FROM bee_segment_ref WHERE release_id = ?')
|
|
122
|
+
.all(id);
|
|
123
|
+
const files = db
|
|
124
|
+
.prepare('SELECT * FROM bee_file WHERE release_id = ?')
|
|
125
|
+
.all(id);
|
|
126
|
+
return { ok: true, data: { release: row, manifest, segments, files } };
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
db.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
export function releaseDiffVerb(ctx) {
|
|
133
|
+
const { home, positional, flags } = ctx;
|
|
134
|
+
const beeName = positional[1];
|
|
135
|
+
const fromVersion = flags.maybeString('from') ?? '';
|
|
136
|
+
const toVersion = flags.maybeString('to') ?? '';
|
|
137
|
+
if (!beeName || !fromVersion || !toVersion) {
|
|
138
|
+
return {
|
|
139
|
+
ok: false,
|
|
140
|
+
error: 'MISSING_ARG: release-diff requires <bee-name> and --from and --to'
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
144
|
+
const db = openStateDb(stateDbPath);
|
|
145
|
+
try {
|
|
146
|
+
const diff = releaseDiff({ db, beeName, fromVersion, toVersion });
|
|
147
|
+
return { ok: true, data: diff };
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
return { ok: false, error: errorText(e) };
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
db.close();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export function exportVerb(ctx) {
|
|
157
|
+
const { home, positional, flags } = ctx;
|
|
158
|
+
const beeName = positional[1];
|
|
159
|
+
const version = flags.maybeString('version') ?? '';
|
|
160
|
+
const outPath = flags.maybeString('out') ?? '';
|
|
161
|
+
if (!beeName || !version || !outPath) {
|
|
162
|
+
return { ok: false, error: 'MISSING_ARG: export requires <bee-name>, --version, --out' };
|
|
163
|
+
}
|
|
164
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
165
|
+
const blobsDir = resolveBlobsDir({ home });
|
|
166
|
+
const db = openStateDb(stateDbPath);
|
|
167
|
+
try {
|
|
168
|
+
exportRelease({ db, blobsDir, beeName, version, outPath });
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
return { ok: false, error: errorText(e) };
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
db.close();
|
|
175
|
+
}
|
|
176
|
+
// M7 (spec §7A.2 / §10 RL-9): `peaks skill sediment export` is
|
|
177
|
+
// an ALIAS of `peaks loop export` for one release cycle. Emit
|
|
178
|
+
// the deprecation warning to stderr so downstream tooling can
|
|
179
|
+
// upgrade. Future slice removes the alias.
|
|
180
|
+
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");
|
|
181
|
+
return { ok: true, data: { outPath } };
|
|
182
|
+
}
|
|
183
|
+
export function importVerb(ctx) {
|
|
184
|
+
const { home, positional, flags } = ctx;
|
|
185
|
+
const bundlePath = positional[1];
|
|
186
|
+
const asNameRaw = flags.maybeString('as');
|
|
187
|
+
const asName = asNameRaw && asNameRaw.length > 0 ? asNameRaw : undefined;
|
|
188
|
+
if (!bundlePath)
|
|
189
|
+
return { ok: false, error: 'MISSING_ARG: import requires <bundle-path>' };
|
|
190
|
+
if (!existsSync(bundlePath))
|
|
191
|
+
return { ok: false, error: 'BUNDLE_NOT_FOUND' };
|
|
192
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
193
|
+
const blobsDir = resolveBlobsDir({ home });
|
|
194
|
+
mkdirSync(blobsDir, { recursive: true });
|
|
195
|
+
const db = openStateDb(stateDbPath);
|
|
196
|
+
try {
|
|
197
|
+
if (asName !== undefined) {
|
|
198
|
+
importRelease({ db, blobsDir, inPath: bundlePath, asName });
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
importRelease({ db, blobsDir, inPath: bundlePath });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
return { ok: false, error: errorText(e) };
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
db.close();
|
|
209
|
+
}
|
|
210
|
+
// M7 (spec §7A.2): `peaks skill sediment import` is an ALIAS of
|
|
211
|
+
// `peaks loop import` for one release cycle. Emit the
|
|
212
|
+
// deprecation warning so downstream tooling can upgrade.
|
|
213
|
+
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");
|
|
214
|
+
return { ok: true, data: { asName: asName ?? basename(bundlePath) } };
|
|
215
|
+
}
|
|
216
|
+
export function gcBlobsVerb(ctx) {
|
|
217
|
+
const { home, flags } = ctx;
|
|
218
|
+
const dryRun = flags.bool('dry-run');
|
|
219
|
+
const stateDbPath = resolveStateDbPath({ home });
|
|
220
|
+
const blobsDir = resolveBlobsDir({ home });
|
|
221
|
+
const db = openStateDb(stateDbPath);
|
|
222
|
+
try {
|
|
223
|
+
const removed = gcBlobs({ db, blobsDir, dryRun });
|
|
224
|
+
return { ok: true, data: { removed } };
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
return { ok: false, error: errorText(e) };
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
db.close();
|
|
231
|
+
}
|
|
232
|
+
}
|