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,59 @@
|
|
|
1
|
+
// src/cli/commands/web-stop-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks web stop` — stop this session's daemon and clear its records. Split
|
|
4
|
+
// out of `web-lifecycle-commands.ts`; the verb name, its options, the
|
|
5
|
+
// `stopped`-means-gone contract and the warning lines are unchanged.
|
|
6
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { stopDaemon } from '../../services/web/daemon-supervisor.js';
|
|
8
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
9
|
+
import { noSession, resolveSession } from './web-command-shared.js';
|
|
10
|
+
/** Everything `stop` did NOT clean, said out loud rather than left implicit. */
|
|
11
|
+
function stopWarnings(result) {
|
|
12
|
+
const warnings = [];
|
|
13
|
+
const stuck = result.pids.length - result.stopped;
|
|
14
|
+
if (stuck > 0) {
|
|
15
|
+
warnings.push(`${String(stuck)} daemon process(es) did not exit after the stop request; they are recorded, ` +
|
|
16
|
+
'so a later `peaks web stop` can try again');
|
|
17
|
+
}
|
|
18
|
+
if (result.orphanedPids.length > 0) {
|
|
19
|
+
warnings.push(`${String(result.orphanedPids.length)} daemon instance(s) are alive but could not be proven ` +
|
|
20
|
+
"to be this session's daemon (no authenticated identity); the processes were left running, " +
|
|
21
|
+
'because a pid that cannot be proven is never signalled, and their records are kept so ' +
|
|
22
|
+
'`peaks web status` and a later `stop` still see them');
|
|
23
|
+
}
|
|
24
|
+
return warnings;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Stop the daemon and clear its records. `stopped` counts the daemons whose
|
|
28
|
+
* process is confirmed GONE by return — not merely the ones we signalled — so a
|
|
29
|
+
* caller that checks the process table right after this returns is not racing
|
|
30
|
+
* the teardown (AC6).
|
|
31
|
+
*/
|
|
32
|
+
export async function runWebStop(io, asJson) {
|
|
33
|
+
const command = 'peaks.web.stop';
|
|
34
|
+
try {
|
|
35
|
+
const session = resolveSession();
|
|
36
|
+
if (session === null) {
|
|
37
|
+
printResult(io, noSession(command), asJson);
|
|
38
|
+
process.exitCode = 1;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const result = await stopDaemon(session.projectRoot, session.sessionId);
|
|
42
|
+
printResult(io, ok(command, {
|
|
43
|
+
stopped: result.stopped,
|
|
44
|
+
pids: [...result.pids],
|
|
45
|
+
orphanedPids: [...result.orphanedPids]
|
|
46
|
+
}, stopWarnings(result)), asJson);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
printResult(io, fail(command, 'WEB_STOP_FAILED', `peaks web stop failed: ${getErrorMessage(error)}`, {}, []), asJson);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function registerWebStopCommand(web, io) {
|
|
54
|
+
addJsonOption(web
|
|
55
|
+
.command('stop')
|
|
56
|
+
.description("Stop this session's web daemon and close its browser. Scoped to this project root and " +
|
|
57
|
+
'session; another worktree is untouched, and a process that cannot be proven to be this ' +
|
|
58
|
+
"session's daemon is left running rather than signalled.")).action((options) => runWebStop(io, options.json === true));
|
|
59
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WebOp } from '../../services/web/web-protocol.js';
|
|
2
|
+
export interface WebVerbSpec {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly op: WebOp;
|
|
5
|
+
readonly description: string;
|
|
6
|
+
readonly argument: {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly description: string;
|
|
9
|
+
} | null;
|
|
10
|
+
readonly takesProfile?: true;
|
|
11
|
+
readonly toArgs: (positional: readonly (string | undefined)[], profile: string | undefined) => Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The option text names the read-only half out loud: a caller who browses with a
|
|
15
|
+
* profile must not assume the profile was refreshed by it.
|
|
16
|
+
*/
|
|
17
|
+
export declare const PROFILE_OPTION_DESCRIPTION: string;
|
|
18
|
+
export declare const WEB_VERBS: readonly WebVerbSpec[];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// src/cli/commands/web-verb-specs.ts
|
|
2
|
+
//
|
|
3
|
+
// The six S1 `peaks web open|text|snap|click|shot|metrics` verbs, as data.
|
|
4
|
+
// Split out of `web-commands.ts`: the table is what `registerWebCommands`
|
|
5
|
+
// iterates, and keeping it beside the registration loop is what made that
|
|
6
|
+
// function's own body read as the whole command surface.
|
|
7
|
+
//
|
|
8
|
+
// `--profile <name>` is declared on `open` and nowhere else (design §2 lists it
|
|
9
|
+
// only there). Any other verb taking a profile would invent behaviour nobody
|
|
10
|
+
// asked for and multiply the isolation questions for no requested benefit.
|
|
11
|
+
/**
|
|
12
|
+
* The option text names the read-only half out loud: a caller who browses with a
|
|
13
|
+
* profile must not assume the profile was refreshed by it.
|
|
14
|
+
*/
|
|
15
|
+
export const PROFILE_OPTION_DESCRIPTION = 'navigate with a saved login profile (`peaks web login --profile <name>`): [a-z0-9._-], ' +
|
|
16
|
+
'1-64 chars, upper case folds to lower. The profile is READ-ONLY here — this run loads it ' +
|
|
17
|
+
'and never writes it back, so browser activity is not saved into it.';
|
|
18
|
+
export const WEB_VERBS = [
|
|
19
|
+
{
|
|
20
|
+
name: 'open',
|
|
21
|
+
op: 'open',
|
|
22
|
+
description: 'Navigate the dispatch browser context to <url>. With --profile, the page loads that ' +
|
|
23
|
+
'saved login.',
|
|
24
|
+
argument: { name: '<url>', description: 'absolute URL to load' },
|
|
25
|
+
takesProfile: true,
|
|
26
|
+
toArgs: (positional, profile) => ({
|
|
27
|
+
url: positional[0] ?? '',
|
|
28
|
+
...(profile === undefined ? {} : { profile })
|
|
29
|
+
})
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'text',
|
|
33
|
+
op: 'text',
|
|
34
|
+
description: 'Return the visible text of the page (or of [selector]), byte-capped.',
|
|
35
|
+
argument: { name: '[selector]', description: 'CSS selector (default: body)' },
|
|
36
|
+
toArgs: (positional) => ({ selector: positional[0] })
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'snap',
|
|
40
|
+
op: 'snap',
|
|
41
|
+
description: 'Return a pruned ARIA snapshot of the page (or of [selector]), byte-capped.',
|
|
42
|
+
argument: { name: '[selector]', description: 'CSS selector (default: body)' },
|
|
43
|
+
toArgs: (positional) => ({ selector: positional[0] })
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'click',
|
|
47
|
+
op: 'click',
|
|
48
|
+
description: 'Click the element matching <selector> in the dispatch browser context.',
|
|
49
|
+
argument: { name: '<selector>', description: 'CSS selector to click' },
|
|
50
|
+
toArgs: (positional) => ({ selector: positional[0] ?? '' })
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'shot',
|
|
54
|
+
op: 'shot',
|
|
55
|
+
description: 'Screenshot the page (or [selector]) into the session web/ directory.',
|
|
56
|
+
argument: { name: '[selector]', description: 'CSS selector (default: full page)' },
|
|
57
|
+
toArgs: (positional) => ({ selector: positional[0] })
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'metrics',
|
|
61
|
+
op: 'metrics',
|
|
62
|
+
description: 'Return Core Web Vitals for the dispatch page, or why they are unavailable.',
|
|
63
|
+
argument: null,
|
|
64
|
+
toArgs: () => ({})
|
|
65
|
+
}
|
|
66
|
+
];
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export interface WorkflowInitOptions {
|
|
2
|
+
readonly skill?: string;
|
|
3
|
+
readonly parentWorkflow?: string;
|
|
4
|
+
readonly workflowId?: string;
|
|
5
|
+
readonly project?: string;
|
|
6
|
+
readonly sessionId?: string;
|
|
7
|
+
readonly json?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkflowGraphShowOptions {
|
|
10
|
+
readonly workflow?: string;
|
|
11
|
+
readonly project?: string;
|
|
12
|
+
readonly sessionId?: string;
|
|
13
|
+
readonly json?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface WorkflowGraphListOptions {
|
|
16
|
+
readonly project?: string;
|
|
17
|
+
readonly sessionId?: string;
|
|
18
|
+
readonly json?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface WorkflowNodePrepareOptions {
|
|
21
|
+
readonly workflow?: string;
|
|
22
|
+
readonly node?: string;
|
|
23
|
+
readonly kind?: string;
|
|
24
|
+
readonly label?: string;
|
|
25
|
+
readonly dependsOn?: string;
|
|
26
|
+
readonly project?: string;
|
|
27
|
+
readonly sessionId?: string;
|
|
28
|
+
readonly json?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface WorkflowNodeAckOptions {
|
|
31
|
+
readonly workflow?: string;
|
|
32
|
+
readonly node?: string;
|
|
33
|
+
readonly project?: string;
|
|
34
|
+
readonly sessionId?: string;
|
|
35
|
+
readonly json?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface WorkflowNodeMarkLostOptions {
|
|
38
|
+
readonly workflow?: string;
|
|
39
|
+
readonly node?: string;
|
|
40
|
+
readonly reason?: string;
|
|
41
|
+
readonly project?: string;
|
|
42
|
+
readonly sessionId?: string;
|
|
43
|
+
readonly json?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface WorkflowTerminalizeOptions {
|
|
46
|
+
readonly workflow?: string;
|
|
47
|
+
readonly reason?: string;
|
|
48
|
+
readonly project?: string;
|
|
49
|
+
readonly sessionId?: string;
|
|
50
|
+
readonly requireConsumed?: boolean;
|
|
51
|
+
readonly json?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Base 36, so a `Date.now()` suffix stays short enough to read in a transcript.
|
|
55
|
+
* Named rather than inlined because two verbs generate ids this way.
|
|
56
|
+
*/
|
|
57
|
+
export declare const GENERATED_ID_RADIX = 36;
|
|
58
|
+
export declare function deriveCallerId(): string;
|
|
59
|
+
export declare function deriveProjectRoot(options: {
|
|
60
|
+
project?: string;
|
|
61
|
+
}): string;
|
|
62
|
+
/**
|
|
63
|
+
* The literal that means "no session could be resolved". Kept as a named
|
|
64
|
+
* constant because three call sites now have to ASK whether resolution
|
|
65
|
+
* failed rather than consume the value as if it were an id.
|
|
66
|
+
*/
|
|
67
|
+
export declare const UNKNOWN_SESSION_ID = "unknown-sid";
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the session id for every `workflow *` command.
|
|
70
|
+
*
|
|
71
|
+
* Tier order (matches the idiom every other command family in this CLI
|
|
72
|
+
* already uses — see `job-commands.ts:85`, `container-commands.ts:138`):
|
|
73
|
+
*
|
|
74
|
+
* 1. `--session-id <sid>` — explicit wins
|
|
75
|
+
* 2. `PEAKS_SESSION_ID` env var — scripted / sub-process callers
|
|
76
|
+
* 3. `getCurrentSessionId(projectRoot)` — this caller's OWN binding
|
|
77
|
+
* (`callers/<callerId>.json`) falling back to the project-global
|
|
78
|
+
* `.peaks/_runtime/session.json`, the same resolver `peaks session
|
|
79
|
+
* info --active` and `peaks session checkpoint` use
|
|
80
|
+
* 4. `unknown-sid` — nothing is bound
|
|
81
|
+
*
|
|
82
|
+
* Tier 3 was MISSING until 2026-09-15 (S6), and its absence is the whole
|
|
83
|
+
* defect: `workflow init` resolved on tiers 1–2 only, so with no flag and no
|
|
84
|
+
* env var it wrote the graph into `.peaks/_runtime/unknown-sid/graphs/`
|
|
85
|
+
* regardless of what the binding file said. `peaks workflow node prepare`
|
|
86
|
+
* then ran under the CORRECT session dir and reported `PEAKS_GRAPH_NOT_FOUND`
|
|
87
|
+
* — the graph it was asking for had been written one bucket over. The bucket
|
|
88
|
+
* accumulated artifacts from at least 4 distinct caller ids between 2026-09-01
|
|
89
|
+
* and 2026-09-15, i.e. it had never worked for anyone.
|
|
90
|
+
*
|
|
91
|
+
* The same prior-art sweep (`.peaks/memory/archived/2026-06-26-unknown-sid-root-cause.md`)
|
|
92
|
+
* converted six inline `?? 'unknown-sid'` sites to this 4-tier chain;
|
|
93
|
+
* `workflow-lifecycle-commands.ts` was missed. This is that site.
|
|
94
|
+
*
|
|
95
|
+
* The project root passed to tier 3 goes through the same `findProjectRoot`
|
|
96
|
+
* walk `session info` uses, so a command run from a SUBDIRECTORY of the
|
|
97
|
+
* project resolves the project's binding instead of `cwd`'s (which has none).
|
|
98
|
+
*/
|
|
99
|
+
export declare function deriveSessionId(options: {
|
|
100
|
+
sessionId?: string;
|
|
101
|
+
project?: string;
|
|
102
|
+
}): string;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// src/cli/commands/workflow-command-shared.ts
|
|
2
|
+
//
|
|
3
|
+
// What every `peaks workflow *` lifecycle verb shares: the option vocabulary,
|
|
4
|
+
// the caller/project/session derivation and the generated-id radix. Split out of
|
|
5
|
+
// `workflow-lifecycle-commands.ts`; the derivation tiers, the literal
|
|
6
|
+
// `unknown-sid` and every option name are unchanged.
|
|
7
|
+
import { getErrorMessage, fail } from 'peaks-loop-shared/result';
|
|
8
|
+
import { resolveCallerId } from '../../services/session/resolve-caller-id.js';
|
|
9
|
+
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
10
|
+
import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
|
|
11
|
+
/**
|
|
12
|
+
* Base 36, so a `Date.now()` suffix stays short enough to read in a transcript.
|
|
13
|
+
* Named rather than inlined because two verbs generate ids this way.
|
|
14
|
+
*/
|
|
15
|
+
export const GENERATED_ID_RADIX = 36;
|
|
16
|
+
export function deriveCallerId() {
|
|
17
|
+
try {
|
|
18
|
+
return resolveCallerId({});
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
// The thrown value is the `fail` envelope, not an `Error`: the callers'
|
|
22
|
+
// catch reads `.code` off it. Left as-is — changing the thrown type would
|
|
23
|
+
// change the envelope those callers render.
|
|
24
|
+
throw fail('workflow.init', 'PEAKS_CALLER_NOT_RESOLVED', getErrorMessage(err), { callerId: null }, ['Resolve the IDE session identity before running workflow commands.']);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function deriveProjectRoot(options) {
|
|
28
|
+
return options.project ?? process.cwd();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The literal that means "no session could be resolved". Kept as a named
|
|
32
|
+
* constant because three call sites now have to ASK whether resolution
|
|
33
|
+
* failed rather than consume the value as if it were an id.
|
|
34
|
+
*/
|
|
35
|
+
export const UNKNOWN_SESSION_ID = 'unknown-sid';
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the session id for every `workflow *` command.
|
|
38
|
+
*
|
|
39
|
+
* Tier order (matches the idiom every other command family in this CLI
|
|
40
|
+
* already uses — see `job-commands.ts:85`, `container-commands.ts:138`):
|
|
41
|
+
*
|
|
42
|
+
* 1. `--session-id <sid>` — explicit wins
|
|
43
|
+
* 2. `PEAKS_SESSION_ID` env var — scripted / sub-process callers
|
|
44
|
+
* 3. `getCurrentSessionId(projectRoot)` — this caller's OWN binding
|
|
45
|
+
* (`callers/<callerId>.json`) falling back to the project-global
|
|
46
|
+
* `.peaks/_runtime/session.json`, the same resolver `peaks session
|
|
47
|
+
* info --active` and `peaks session checkpoint` use
|
|
48
|
+
* 4. `unknown-sid` — nothing is bound
|
|
49
|
+
*
|
|
50
|
+
* Tier 3 was MISSING until 2026-09-15 (S6), and its absence is the whole
|
|
51
|
+
* defect: `workflow init` resolved on tiers 1–2 only, so with no flag and no
|
|
52
|
+
* env var it wrote the graph into `.peaks/_runtime/unknown-sid/graphs/`
|
|
53
|
+
* regardless of what the binding file said. `peaks workflow node prepare`
|
|
54
|
+
* then ran under the CORRECT session dir and reported `PEAKS_GRAPH_NOT_FOUND`
|
|
55
|
+
* — the graph it was asking for had been written one bucket over. The bucket
|
|
56
|
+
* accumulated artifacts from at least 4 distinct caller ids between 2026-09-01
|
|
57
|
+
* and 2026-09-15, i.e. it had never worked for anyone.
|
|
58
|
+
*
|
|
59
|
+
* The same prior-art sweep (`.peaks/memory/archived/2026-06-26-unknown-sid-root-cause.md`)
|
|
60
|
+
* converted six inline `?? 'unknown-sid'` sites to this 4-tier chain;
|
|
61
|
+
* `workflow-lifecycle-commands.ts` was missed. This is that site.
|
|
62
|
+
*
|
|
63
|
+
* The project root passed to tier 3 goes through the same `findProjectRoot`
|
|
64
|
+
* walk `session info` uses, so a command run from a SUBDIRECTORY of the
|
|
65
|
+
* project resolves the project's binding instead of `cwd`'s (which has none).
|
|
66
|
+
*/
|
|
67
|
+
export function deriveSessionId(options) {
|
|
68
|
+
if (typeof options.sessionId === 'string' && options.sessionId.length > 0)
|
|
69
|
+
return options.sessionId;
|
|
70
|
+
const fromEnv = process.env.PEAKS_SESSION_ID;
|
|
71
|
+
if (typeof fromEnv === 'string' && fromEnv.length > 0)
|
|
72
|
+
return fromEnv;
|
|
73
|
+
return (getCurrentSessionId(findProjectRoot(options.project ?? process.cwd()) ?? options.project ?? process.cwd()) ?? UNKNOWN_SESSION_ID);
|
|
74
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// src/cli/commands/workflow-graph-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks workflow graph show` / `graph list` — the workflow graph read
|
|
4
|
+
// commands. Split out of `workflow-lifecycle-commands.ts`; both verb names,
|
|
5
|
+
// their options and both envelope shapes are unchanged.
|
|
6
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { printResult } from '../cli-helpers.js';
|
|
8
|
+
import { readGraph } from '../../services/workflow/workflow-graph-store.js';
|
|
9
|
+
import { WORKFLOW_ID_REGEX } from '../../services/workflow/workflow-graph-types.js';
|
|
10
|
+
import { deriveProjectRoot, deriveSessionId, UNKNOWN_SESSION_ID } from './workflow-command-shared.js';
|
|
11
|
+
function runWorkflowGraphShow(io, options) {
|
|
12
|
+
const asJson = options.json === true;
|
|
13
|
+
try {
|
|
14
|
+
const sessionId = deriveSessionId(options);
|
|
15
|
+
const projectRoot = deriveProjectRoot(options);
|
|
16
|
+
const workflowId = options.workflow ?? '';
|
|
17
|
+
if (!workflowId || !WORKFLOW_ID_REGEX.test(workflowId)) {
|
|
18
|
+
throw new Error('workflowId is required');
|
|
19
|
+
}
|
|
20
|
+
const graph = readGraph({
|
|
21
|
+
projectRoot,
|
|
22
|
+
sessionId,
|
|
23
|
+
graphRef: `graphs/${workflowId}.json`,
|
|
24
|
+
workflowId
|
|
25
|
+
});
|
|
26
|
+
printResult(io, ok('workflow.graph.show', { envelopeVersion: '4.0.8', graph }), asJson);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const code = err.code ?? 'PEAKS_GRAPH_NOT_FOUND';
|
|
30
|
+
printResult(io, fail('workflow.graph.show', code, getErrorMessage(err), { graph: null }, []), asJson);
|
|
31
|
+
process.exitCode = 1;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function runWorkflowGraphList(io, options) {
|
|
35
|
+
const asJson = options.json === true;
|
|
36
|
+
try {
|
|
37
|
+
const sessionId = deriveSessionId(options);
|
|
38
|
+
if (sessionId === UNKNOWN_SESSION_ID) {
|
|
39
|
+
throw new Error('PEAKS_SESSION_NOT_BOUND: no session id');
|
|
40
|
+
}
|
|
41
|
+
const result = { envelopeVersion: '4.0.8', sessionId, graphs: [] };
|
|
42
|
+
printResult(io, ok('workflow.graph.list', result), asJson);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const code = err.code ?? 'PEAKS_SESSION_NOT_BOUND';
|
|
46
|
+
printResult(io, fail('workflow.graph.list', code, getErrorMessage(err), { graphs: [] }, []), asJson);
|
|
47
|
+
process.exitCode = 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function registerWorkflowGraphCommands(workflow, io) {
|
|
51
|
+
// Note: `.command('graph show')` and `.command('graph list')` each
|
|
52
|
+
// implicitly create a NEW `graph` parent under `workflow` in
|
|
53
|
+
// Commander v12 (no auto-reuse), so calling them in sequence throws
|
|
54
|
+
// "cannot add command 'graph' as already have command 'graph'" at
|
|
55
|
+
// startup. Reuse the first created `graph` parent for the second
|
|
56
|
+
// registration.
|
|
57
|
+
const graphCmd = workflow.command('graph').description('workflow graph read commands');
|
|
58
|
+
graphCmd
|
|
59
|
+
.command('show')
|
|
60
|
+
.description('Read a workflow graph.')
|
|
61
|
+
.option('--workflow <id>', 'workflow id')
|
|
62
|
+
.option('--session-id <sid>', 'session id')
|
|
63
|
+
.option('--project <path>', 'project root')
|
|
64
|
+
.option('--json', 'json output')
|
|
65
|
+
.action((options) => runWorkflowGraphShow(io, options));
|
|
66
|
+
graphCmd
|
|
67
|
+
.command('list')
|
|
68
|
+
.description('List workflow graphs (metadata only).')
|
|
69
|
+
.option('--session-id <sid>', 'session id')
|
|
70
|
+
.option('--project <path>', 'project root')
|
|
71
|
+
.option('--json', 'json output')
|
|
72
|
+
.action((options) => runWorkflowGraphList(io, options));
|
|
73
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// src/cli/commands/workflow-init-command.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks workflow init` — initialize a workflow graph + canonical lease + caller
|
|
4
|
+
// index. Split out of `workflow-lifecycle-commands.ts`; the verb name, its
|
|
5
|
+
// options, the session-binding refusal and the envelope shape are unchanged.
|
|
6
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
7
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
8
|
+
import { initWorkflow } from '../../services/workflow/workflow-presence-lifecycle.js';
|
|
9
|
+
import { WORKFLOW_ID_REGEX } from '../../services/workflow/workflow-graph-types.js';
|
|
10
|
+
import { deriveCallerId, deriveProjectRoot, deriveSessionId, GENERATED_ID_RADIX, UNKNOWN_SESSION_ID } from './workflow-command-shared.js';
|
|
11
|
+
/**
|
|
12
|
+
* Tier 3 resolving to `unknown-sid` means NO session is bound at all. A
|
|
13
|
+
* `workflow` subcommand that WRITES must fail loudly on that rather than
|
|
14
|
+
* create a bucket named after a failure — `graph list` already does (see its
|
|
15
|
+
* `PEAKS_SESSION_NOT_BOUND` guard); `init` did not.
|
|
16
|
+
*/
|
|
17
|
+
function buildSessionNotBoundEnvelope(sessionId, projectRoot) {
|
|
18
|
+
return fail('workflow.init', 'PEAKS_SESSION_NOT_BOUND', `No peaks session is bound for '${projectRoot}' (derived session id '${sessionId}'): --session-id, PEAKS_SESSION_ID and the project binding are all absent.`, { workflowId: null }, [
|
|
19
|
+
'Run `peaks workspace init --project <p>` to bind a session, then re-run.',
|
|
20
|
+
'Or pass `--session-id <sid>` explicitly.'
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
async function runWorkflowInit(io, options) {
|
|
24
|
+
const asJson = options.json === true;
|
|
25
|
+
try {
|
|
26
|
+
const callerId = deriveCallerId();
|
|
27
|
+
const projectRoot = deriveProjectRoot(options);
|
|
28
|
+
const sessionId = deriveSessionId(options);
|
|
29
|
+
if (sessionId === UNKNOWN_SESSION_ID) {
|
|
30
|
+
printResult(io, buildSessionNotBoundEnvelope(sessionId, projectRoot), asJson);
|
|
31
|
+
process.exitCode = 1;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const workflowId = options.workflowId ?? `wf-${Date.now().toString(GENERATED_ID_RADIX)}`;
|
|
35
|
+
if (!WORKFLOW_ID_REGEX.test(workflowId)) {
|
|
36
|
+
throw new Error(`workflowId shape invalid: ${workflowId}`);
|
|
37
|
+
}
|
|
38
|
+
const result = await initWorkflow({
|
|
39
|
+
projectRoot,
|
|
40
|
+
sessionId,
|
|
41
|
+
callerId,
|
|
42
|
+
skill: options.skill ?? 'peaks-code',
|
|
43
|
+
workflowId,
|
|
44
|
+
...(options.parentWorkflow ? { parentWorkflowId: options.parentWorkflow } : {})
|
|
45
|
+
});
|
|
46
|
+
printResult(io, ok('workflow.init', {
|
|
47
|
+
envelopeVersion: '4.0.8',
|
|
48
|
+
workflowId: result.workflowId,
|
|
49
|
+
graphRef: result.graphRef,
|
|
50
|
+
events: result.events
|
|
51
|
+
}), asJson);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const code = err.code ?? 'PEAKS_GRAPH_WRITE_FAILED';
|
|
55
|
+
printResult(io, fail('workflow.init', code, getErrorMessage(err), { workflowId: null }, []), asJson);
|
|
56
|
+
process.exitCode = 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function registerWorkflowInitCommand(workflow, io) {
|
|
60
|
+
addJsonOption(workflow
|
|
61
|
+
.command('init')
|
|
62
|
+
.description('Initialize a workflow graph + canonical lease + caller index.')
|
|
63
|
+
.requiredOption('--skill <name>', 'the skill owning this workflow (e.g. peaks-code)')
|
|
64
|
+
.option('--workflow-id <id>', 'optional explicit workflowId (auto-generated if omitted)')
|
|
65
|
+
.option('--parent-workflow <id>', 'parent workflowId for nested runs')
|
|
66
|
+
.option('--session-id <sid>', 'override session id (default: derived from session.json / env)')
|
|
67
|
+
.option('--project <path>', 'target project root (defaults to cwd)')).action((options) => runWorkflowInit(io, options));
|
|
68
|
+
}
|
|
@@ -5,65 +5,15 @@
|
|
|
5
5
|
* prepare / node ack / node mark-lost / terminalize`. All commands
|
|
6
6
|
* delegate to the canonical services. Each action emits the typed
|
|
7
7
|
* envelope via `ok` / `fail` so the LLM runner can branch on `code`.
|
|
8
|
+
*
|
|
9
|
+
* The verb implementations live beside this file, one module per verb group:
|
|
10
|
+
* `workflow-init-command.ts`, `workflow-graph-commands.ts`,
|
|
11
|
+
* `workflow-node-commands.ts`, `workflow-terminalize-command.ts`, with the
|
|
12
|
+
* option vocabulary and the caller / project / session derivation in
|
|
13
|
+
* `workflow-command-shared.ts`.
|
|
8
14
|
*/
|
|
9
15
|
import type { Command } from 'commander';
|
|
10
|
-
import {
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
readonly parentWorkflow?: string;
|
|
14
|
-
readonly workflowId?: string;
|
|
15
|
-
readonly project?: string;
|
|
16
|
-
readonly sessionId?: string;
|
|
17
|
-
readonly json?: boolean;
|
|
18
|
-
}
|
|
19
|
-
export interface WorkflowGraphShowOptions {
|
|
20
|
-
readonly workflow?: string;
|
|
21
|
-
readonly project?: string;
|
|
22
|
-
readonly sessionId?: string;
|
|
23
|
-
readonly json?: boolean;
|
|
24
|
-
}
|
|
25
|
-
export interface WorkflowGraphListOptions {
|
|
26
|
-
readonly project?: string;
|
|
27
|
-
readonly sessionId?: string;
|
|
28
|
-
readonly json?: boolean;
|
|
29
|
-
}
|
|
30
|
-
export interface WorkflowNodePrepareOptions {
|
|
31
|
-
readonly workflow?: string;
|
|
32
|
-
readonly node?: string;
|
|
33
|
-
readonly kind?: string;
|
|
34
|
-
readonly label?: string;
|
|
35
|
-
readonly dependsOn?: string;
|
|
36
|
-
readonly project?: string;
|
|
37
|
-
readonly sessionId?: string;
|
|
38
|
-
readonly json?: boolean;
|
|
39
|
-
}
|
|
40
|
-
export interface WorkflowNodeAckOptions {
|
|
41
|
-
readonly workflow?: string;
|
|
42
|
-
readonly node?: string;
|
|
43
|
-
readonly project?: string;
|
|
44
|
-
readonly sessionId?: string;
|
|
45
|
-
readonly json?: boolean;
|
|
46
|
-
}
|
|
47
|
-
export interface WorkflowNodeMarkLostOptions {
|
|
48
|
-
readonly workflow?: string;
|
|
49
|
-
readonly node?: string;
|
|
50
|
-
readonly reason?: string;
|
|
51
|
-
readonly project?: string;
|
|
52
|
-
readonly sessionId?: string;
|
|
53
|
-
readonly json?: boolean;
|
|
54
|
-
}
|
|
55
|
-
export interface WorkflowTerminalizeOptions {
|
|
56
|
-
readonly workflow?: string;
|
|
57
|
-
readonly reason?: string;
|
|
58
|
-
readonly project?: string;
|
|
59
|
-
readonly sessionId?: string;
|
|
60
|
-
readonly requireConsumed?: boolean;
|
|
61
|
-
readonly json?: boolean;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* The literal that means "no session could be resolved". Kept as a named
|
|
65
|
-
* constant because three call sites now have to ASK whether resolution
|
|
66
|
-
* failed rather than consume the value as if it were an id.
|
|
67
|
-
*/
|
|
68
|
-
export declare const UNKNOWN_SESSION_ID = "unknown-sid";
|
|
16
|
+
import type { ProgramIO } from '../cli-helpers.js';
|
|
17
|
+
export type { WorkflowGraphListOptions, WorkflowGraphShowOptions, WorkflowInitOptions, WorkflowNodeAckOptions, WorkflowNodeMarkLostOptions, WorkflowNodePrepareOptions, WorkflowTerminalizeOptions } from './workflow-command-shared.js';
|
|
18
|
+
export { UNKNOWN_SESSION_ID } from './workflow-command-shared.js';
|
|
69
19
|
export declare function registerWorkflowLifecycleCommand(parent: Command, io: ProgramIO): void;
|