peaks-loop 4.0.0-beta.9 → 4.0.1
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/CHANGELOG.md +910 -141
- package/README-en.md +26 -7
- package/README.md +75 -6
- package/agents/karpathy-reviewer.md +33 -0
- package/bin/peaks.js +0 -0
- package/dist/cli/cli-helpers.d.ts +31 -6
- package/dist/cli/cli-helpers.js +48 -25
- package/dist/cli/commands/_register.d.ts +3 -0
- package/dist/cli/commands/_register.js +139 -0
- package/dist/cli/commands/_super.d.ts +10 -0
- package/dist/cli/commands/_super.js +97 -0
- package/dist/cli/commands/adapter-commands-s2a.js +1 -1
- package/dist/cli/commands/asset-commands.js +33 -16
- package/dist/cli/commands/audit-commands.js +2 -2
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
- package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
- package/dist/cli/commands/bee-commands.js +1 -1
- package/dist/cli/commands/capability-commands.js +1 -1
- package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
- package/dist/cli/commands/changeset-commands.d.ts +13 -0
- package/dist/cli/commands/changeset-commands.js +46 -0
- package/dist/cli/commands/code-commands.d.ts +11 -1
- package/dist/cli/commands/code-commands.js +19 -699
- package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
- package/dist/cli/commands/code-job-shape-commands.js +164 -0
- package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
- package/dist/cli/commands/code-mode-gate-commands.js +223 -0
- package/dist/cli/commands/code-review-commands.js +2 -2
- package/dist/cli/commands/code-run-command.d.ts +12 -0
- package/dist/cli/commands/code-run-command.js +68 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
- package/dist/cli/commands/code-runtime-commands.js +391 -0
- package/dist/cli/commands/codegraph-commands.js +1 -1
- package/dist/cli/commands/compact-command.js +53 -1
- package/dist/cli/commands/complexity-commands.js +1 -1
- package/dist/cli/commands/config-commands.js +4 -75
- package/dist/cli/commands/container-commands.d.ts +28 -0
- package/dist/cli/commands/container-commands.js +221 -0
- package/dist/cli/commands/context-commands.js +3 -2
- package/dist/cli/commands/core/artifacts-command.js +1 -1
- package/dist/cli/commands/core/binding-commands.js +1 -1
- package/dist/cli/commands/core/doctor-command.js +63 -3
- package/dist/cli/commands/core/memory-command.js +1 -1
- package/dist/cli/commands/core/profile-command.js +1 -1
- package/dist/cli/commands/core/proxy-command.js +1 -1
- package/dist/cli/commands/core/session-command.js +9 -7
- package/dist/cli/commands/core/skill-command.js +7 -4
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/cron-commands.d.ts +57 -0
- package/dist/cli/commands/cron-commands.js +257 -0
- package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
- package/dist/cli/commands/cron-scheduler-commands.js +284 -0
- package/dist/cli/commands/dashboard-commands.d.ts +4 -0
- package/dist/cli/commands/dashboard-commands.js +10 -0
- package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
- package/dist/cli/commands/dashboard-long-run.js +122 -0
- package/dist/cli/commands/dashboard-summary.d.ts +12 -0
- package/dist/cli/commands/dashboard-summary.js +58 -0
- package/dist/cli/commands/dispatch-commands.d.ts +0 -7
- package/dist/cli/commands/dispatch-commands.js +372 -8
- package/dist/cli/commands/dispatch-from-dag.js +4 -1
- package/dist/cli/commands/doc-commands.js +1 -1
- package/dist/cli/commands/ecc-commands.d.ts +30 -0
- package/dist/cli/commands/ecc-commands.js +119 -0
- package/dist/cli/commands/evolution-commands.js +1 -1
- package/dist/cli/commands/feedback-commands.js +1 -1
- package/dist/cli/commands/final-review-commands.js +1 -1
- package/dist/cli/commands/fixture-commands.js +1 -1
- package/dist/cli/commands/fork-commands.js +1 -1
- package/dist/cli/commands/gate-commands.js +128 -6
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
- package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
- package/dist/cli/commands/heartbeat-commands.js +76 -5
- package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
- package/dist/cli/commands/heartbeat-watch-command.js +146 -0
- package/dist/cli/commands/hook-handle.js +1 -1
- package/dist/cli/commands/hooks-commands.js +126 -10
- package/dist/cli/commands/ide-commands.js +1 -1
- package/dist/cli/commands/impact-commands.js +1 -1
- package/dist/cli/commands/job-commands.js +34 -1
- package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
- package/dist/cli/commands/lease-metrics-commands.js +231 -0
- package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
- package/dist/cli/commands/lease-stats-commands.js +107 -0
- package/dist/cli/commands/legacy-commands.js +1 -1
- package/dist/cli/commands/log-commands.js +1 -1
- package/dist/cli/commands/loop-commands.js +1 -1
- package/dist/cli/commands/loop-eval-commands.js +1 -1
- package/dist/cli/commands/memory-commands.js +1 -1
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
- package/dist/cli/commands/mut-commands.d.ts +1 -1
- package/dist/cli/commands/mut-commands.js +1 -5
- package/dist/cli/commands/observability-commands.js +1 -1
- package/dist/cli/commands/openspec-commands.js +65 -4
- package/dist/cli/commands/perf-audit-commands.js +3 -3
- package/dist/cli/commands/perf-commands.js +1 -1
- package/dist/cli/commands/polyrepo-commands.js +1 -1
- package/dist/cli/commands/prd-blocks-commands.js +1 -1
- package/dist/cli/commands/prd-commands.js +4 -2
- package/dist/cli/commands/preferences-commands.js +23 -3
- package/dist/cli/commands/project-commands.js +1 -1
- package/dist/cli/commands/qa-business-review-commands.js +1 -1
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +39 -3
- package/dist/cli/commands/release-commands.d.ts +15 -0
- package/dist/cli/commands/release-commands.js +113 -21
- package/dist/cli/commands/request-commands.js +1 -1
- package/dist/cli/commands/retrospective-commands.js +1 -1
- package/dist/cli/commands/reviewer-commands.js +1 -1
- package/dist/cli/commands/role-commands.js +1 -1
- package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
- package/dist/cli/commands/runtime-commands-helpers.js +24 -0
- package/dist/cli/commands/runtime-commands.js +1 -2
- package/dist/cli/commands/sc-commands.js +4 -2
- package/dist/cli/commands/scan-commands.js +1 -1
- package/dist/cli/commands/security-audit-commands.js +3 -3
- package/dist/cli/commands/sediment-commands.js +10 -1
- package/dist/cli/commands/session-24h-mode.d.ts +26 -0
- package/dist/cli/commands/session-24h-mode.js +196 -0
- package/dist/cli/commands/share-commands.d.ts +19 -0
- package/dist/cli/commands/share-commands.js +121 -2
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
- package/dist/cli/commands/skill-search-commands.js +4 -1
- package/dist/cli/commands/slice-commands.js +1 -1
- package/dist/cli/commands/slice-integrate-commands.js +1 -1
- package/dist/cli/commands/slice-review-commands.js +1 -1
- package/dist/cli/commands/smoke-commands.js +1 -1
- package/dist/cli/commands/sop-commands.js +1 -1
- package/dist/cli/commands/spill-demo-command.d.ts +7 -0
- package/dist/cli/commands/spill-demo-command.js +29 -0
- package/dist/cli/commands/statusline-commands.d.ts +12 -0
- package/dist/cli/commands/statusline-commands.js +79 -17
- package/dist/cli/commands/sub-agent-commands.js +2 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
- package/dist/cli/commands/sub-agent-shared.js +24 -1
- package/dist/cli/commands/swarm-commands.d.ts +13 -0
- package/dist/cli/commands/swarm-commands.js +77 -0
- package/dist/cli/commands/tech-commands.d.ts +64 -0
- package/dist/cli/commands/tech-commands.js +195 -0
- package/dist/cli/commands/understand-commands.js +1 -1
- package/dist/cli/commands/upgrade-commands.d.ts +2 -0
- package/dist/cli/commands/upgrade-commands.js +40 -5
- package/dist/cli/commands/user-touchpoint-commands.js +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +1 -1
- package/dist/cli/commands/vm-commands.d.ts +31 -0
- package/dist/cli/commands/vm-commands.js +274 -0
- package/dist/cli/commands/workflow-commands.js +24 -1
- package/dist/cli/commands/workflow-plan-commands.js +1 -1
- package/dist/cli/commands/workspace/init-command.js +1 -1
- package/dist/cli/commands/workspace/migrate-command.js +1 -1
- package/dist/cli/commands/workspace/reconcile-command.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
- package/dist/cli/commands/worktree-auth-commands.js +652 -0
- package/dist/cli/index.js +58 -13
- package/dist/cli/program.d.ts +2 -2
- package/dist/cli/program.js +86 -281
- package/dist/services/24h-mode/decider.d.ts +103 -0
- package/dist/services/24h-mode/decider.js +144 -0
- package/dist/services/24h-mode/index.d.ts +12 -0
- package/dist/services/24h-mode/index.js +12 -0
- package/dist/services/24h-mode/state.d.ts +48 -0
- package/dist/services/24h-mode/state.js +51 -0
- package/dist/services/24h-mode/store.d.ts +27 -0
- package/dist/services/24h-mode/store.js +119 -0
- package/dist/services/artifacts/artifact-prerequisites.js +1 -1
- package/dist/services/artifacts/request-artifact-service.js +1 -1
- package/dist/services/artifacts/workspace-service.js +1 -1
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
- package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
- package/dist/services/audit/static-service.d.ts +32 -25
- package/dist/services/audit/static-service.js +30 -109
- package/dist/services/audit-independent/index.d.ts +2 -0
- package/dist/services/audit-independent/index.js +2 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
- package/dist/services/changeset/changeset-check-service.d.ts +22 -0
- package/dist/services/changeset/changeset-check-service.js +47 -0
- package/dist/services/code/auto-compact-modes.d.ts +30 -0
- package/dist/services/code/auto-compact-modes.js +38 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
- package/dist/services/code/auto-compact-orchestrator.js +101 -21
- package/dist/services/code/dag-orchestrator.d.ts +30 -1
- package/dist/services/code/dag-orchestrator.js +106 -1
- package/dist/services/code/status-line-renderer.d.ts +2 -0
- package/dist/services/code/status-line-renderer.js +21 -3
- package/dist/services/code-review/ocr-service.d.ts +1 -1
- package/dist/services/code-review/ocr-service.js +6 -3
- package/dist/services/compact-history/compact-history-service.d.ts +41 -0
- package/dist/services/compact-history/compact-history-service.js +62 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
- package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
- package/dist/services/config/config-service.d.ts +1 -12
- package/dist/services/config/config-service.js +3 -72
- package/dist/services/config/config-types.d.ts +2 -4
- package/dist/services/config/config-types.js +1 -1
- package/dist/services/container/container-lease.d.ts +67 -0
- package/dist/services/container/container-lease.js +135 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
- package/dist/services/context/auto-compact-dispatcher.js +32 -102
- package/dist/services/context/auto-compact-reader.js +1 -1
- package/dist/services/context/auto-compact-types.d.ts +27 -2
- package/dist/services/context/auto-compact-types.js +8 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
- package/dist/services/context/build-dispatch-system-prompt.js +117 -0
- package/dist/services/context/collector.d.ts +2 -2
- package/dist/services/context/context-builder.d.ts +4 -4
- package/dist/services/context/context-schema.d.ts +48 -48
- package/dist/services/context/ide-detect.d.ts +4 -0
- package/dist/services/context/ide-detect.js +24 -0
- package/dist/services/context/main-session-monitor.d.ts +1 -4
- package/dist/services/context/main-session-monitor.js +1 -24
- package/dist/services/context/memory-index-reader.d.ts +8 -0
- package/dist/services/context/memory-index-reader.js +57 -0
- package/dist/services/context/memory-lru-cache.d.ts +12 -0
- package/dist/services/context/memory-lru-cache.js +60 -0
- package/dist/services/context/memory-preflight-config.d.ts +19 -0
- package/dist/services/context/memory-preflight-config.js +25 -0
- package/dist/services/context/memory-preflight-service.d.ts +19 -0
- package/dist/services/context/memory-preflight-service.js +120 -0
- package/dist/services/context/spillover-store.d.ts +23 -0
- package/dist/services/context/spillover-store.js +155 -0
- package/dist/services/context/spillover-types.d.ts +18 -0
- package/dist/services/context/spillover-types.js +1 -0
- package/dist/services/crystallization/crystallization-service.d.ts +22 -5
- package/dist/services/crystallization/crystallization-service.js +8 -14
- package/dist/services/crystallization/crystallization-types.d.ts +6 -6
- package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
- package/dist/services/crystallization/index.d.ts +13 -0
- package/dist/services/crystallization/index.js +13 -0
- package/dist/services/dashboard/project-dashboard-service.js +2 -2
- package/dist/services/dispatch/await-batch.d.ts +70 -0
- package/dist/services/dispatch/await-batch.js +272 -0
- package/dist/services/dispatch/batch-counter.js +1 -1
- package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
- package/dist/services/dispatch/dispatch-record-writer.js +239 -9
- package/dist/services/dispatch/slice-dag.d.ts +46 -0
- package/dist/services/dispatch/slice-dag.js +6 -0
- package/dist/services/dispatch/stage-enum.d.ts +27 -0
- package/dist/services/dispatch/stage-enum.js +48 -0
- package/dist/services/dispatch/startup-timeout.d.ts +86 -0
- package/dist/services/dispatch/startup-timeout.js +97 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
- package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
- package/dist/services/dispatch/test-tool-detection.js +80 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
- package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
- package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
- package/dist/services/doctor/doctor-service/index.d.ts +48 -0
- package/dist/services/doctor/doctor-service/index.js +254 -0
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
- package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
- package/dist/services/doctor/doctor-service/types.d.ts +245 -0
- package/dist/services/doctor/doctor-service/types.js +15 -0
- package/dist/services/doctor/doctor-service.d.ts +15 -146
- package/dist/services/doctor/doctor-service.js +22 -926
- package/dist/services/doctor/index.d.ts +22 -0
- package/dist/services/doctor/index.js +22 -0
- package/dist/services/env/shell-probe.d.ts +71 -0
- package/dist/services/env/shell-probe.js +161 -0
- package/dist/services/evolution/evolution-types.d.ts +39 -39
- package/dist/services/final-review/final-review-service.d.ts +11 -1
- package/dist/services/final-review/index.d.ts +2 -0
- package/dist/services/final-review/index.js +1 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
- package/dist/services/hooks/auto-compact-hook-install.js +4 -5
- package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
- package/dist/services/hooks/worktree-authorization-gate.js +492 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
- package/dist/services/ide/adapters/qoder-adapter.js +57 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
- package/dist/services/ide/ide-registry.js +6 -0
- package/dist/services/ide/ide-types.d.ts +1 -1
- package/dist/services/job/job-types.d.ts +56 -56
- package/dist/services/job-snapshot/index.d.ts +8 -0
- package/dist/services/job-snapshot/index.js +7 -0
- package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
- package/dist/services/job-snapshot/types.d.ts +7 -0
- package/dist/services/job-snapshot/types.js +1 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
- package/dist/services/log/retention.d.ts +16 -0
- package/dist/services/log/retention.js +17 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
- package/dist/services/loop/loop-release-types.d.ts +24 -24
- package/dist/services/loop/monotonic-runner.d.ts +17 -11
- package/dist/services/loop/monotonic-runner.js +118 -79
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
- package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
- package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
- package/dist/services/memory/project-memory-service/index/search.js +194 -0
- package/dist/services/memory/project-memory-service/index.d.ts +9 -0
- package/dist/services/memory/project-memory-service/index.js +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
- package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
- package/dist/services/memory/project-memory-service/store/paths.js +116 -0
- package/dist/services/memory/project-memory-service/types.d.ts +128 -0
- package/dist/services/memory/project-memory-service/types.js +9 -0
- package/dist/services/memory/project-memory-service.d.ts +1 -167
- package/dist/services/memory/project-memory-service.js +19 -816
- package/dist/services/migrate-skill-name/schema.d.ts +2 -2
- package/dist/services/observability/aggregation.d.ts +27 -0
- package/dist/services/observability/aggregation.js +72 -0
- package/dist/services/observability/observability-service.d.ts +73 -7
- package/dist/services/observability/observability-service.js +87 -1
- package/dist/services/openspec/artifact-boundary.d.ts +138 -0
- package/dist/services/openspec/artifact-boundary.js +150 -0
- package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
- package/dist/services/openspec/coverage-evidence-reader.js +386 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
- package/dist/services/openspec/openspec-archive-service.js +320 -8
- package/dist/services/openspec/openspec-bridge-service.js +1 -1
- package/dist/services/openspec/openspec-init-service.js +1 -1
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-render-service.js +7 -4
- package/dist/services/openspec/openspec-scan-service.js +1 -1
- package/dist/services/openspec/openspec-validate-service.js +5 -4
- package/dist/services/preferences/preferences-service.js +10 -0
- package/dist/services/preferences/preferences-types.d.ts +13 -0
- package/dist/services/preferences/preferences-types.js +11 -0
- package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
- package/dist/services/qa/screenshot-archive-service.js +134 -0
- package/dist/services/rd/rd-service.js +10 -11
- package/dist/services/rd/types.d.ts +32 -32
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
- package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
- package/dist/services/recommendations/capability-seed-items.js +0 -1
- package/dist/services/recommendations/capability-seed-mappings.js +0 -1
- package/dist/services/recommendations/capability-seed-sources.js +0 -1
- package/dist/services/release/version-precheck-service.d.ts +51 -0
- package/dist/services/release/version-precheck-service.js +257 -0
- package/dist/services/scan/acceptance-coverage-service.js +1 -1
- package/dist/services/scan/archetype-service.js +1 -1
- package/dist/services/scan/existing-system-service.js +1 -1
- package/dist/services/scan/libraries-service.js +1 -1
- package/dist/services/sediment/json-schema.d.ts +40 -40
- package/dist/services/share/bundle-types.d.ts +12 -12
- package/dist/services/share/run-state-contract.d.ts +2 -2
- package/dist/services/skill/skill-search-service.d.ts +12 -7
- package/dist/services/skill/skill-search-service.js +8 -4
- package/dist/services/skillhub/migrations/001-initial.sql +71 -0
- package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
- package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
- package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
- package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
- package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
- package/dist/services/skills/hooks-settings-service.d.ts +75 -0
- package/dist/services/skills/hooks-settings-service.js +230 -2
- package/dist/services/skills/skill-registry.d.ts +1 -0
- package/dist/services/skills/skill-registry.js +6 -4
- package/dist/services/skills/skill-runbook-service.js +1 -1
- package/dist/services/slice/slice-check-service.js +1 -1
- package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
- package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
- package/dist/services/standards/missing-standards-detector.d.ts +25 -0
- package/dist/services/standards/missing-standards-detector.js +43 -12
- package/dist/services/tech/tech-change-id-service.d.ts +82 -0
- package/dist/services/tech/tech-change-id-service.js +117 -0
- package/dist/services/understand/understand-hybrid-service.js +1 -1
- package/dist/services/understand/understand-scan-service.js +2 -2
- package/dist/services/upgrade/upgrade-service.js +4 -3
- package/dist/services/verdict/envelopes.d.ts +2 -2
- package/dist/services/verdict/envelopes.js +2 -2
- package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
- package/dist/services/vm/vm-lease.d.ts +40 -0
- package/dist/services/vm/vm-lease.js +137 -0
- package/dist/services/workflow/autonomous-resume-writer.js +1 -1
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
- package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
- package/dist/services/workflow/pipeline-verify-service.js +42 -218
- package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-types.js +10 -0
- package/dist/services/workflow/plan-reader.d.ts +1 -1
- package/dist/services/workflow/plan-reader.js +1 -1
- package/dist/services/workflow/plan-refresher.d.ts +1 -1
- package/dist/services/workflow/plan-refresher.js +1 -1
- package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
- package/dist/services/workflow/plan-trigger-detector.js +1 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
- package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
- package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
- package/dist/services/workflow/workflow-autonomous-types.js +21 -0
- package/dist/services/workflow/workflow-router-service.js +18 -16
- package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
- package/dist/services/workflow/workflow-spec-lint.js +75 -0
- package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
- package/dist/services/workflow/workflow-spec-types.js +13 -0
- package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
- package/dist/services/workflow/workflow-spec-yaml.js +88 -0
- package/dist/services/workflow/workflow-spec.d.ts +11 -91
- package/dist/services/workflow/workflow-spec.js +16 -145
- package/dist/services/workspace/migrate-service.js +1 -1
- package/dist/services/workspace/workspace-service.js +1 -1
- package/dist/services/worktree/worktree-lease.d.ts +170 -0
- package/dist/services/worktree/worktree-lease.js +242 -0
- package/package.json +47 -51
- package/scripts/clean-dist.mjs +31 -1
- package/scripts/copy-templates.mjs +16 -0
- package/scripts/sync-version.mjs +53 -2
- package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
- package/skills/bee/peaks-prd/SKILL.md +16 -0
- package/skills/bee/peaks-prd/test-prompts.json +12 -0
- package/skills/bee/peaks-qa/SKILL.md +16 -1
- package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
- package/skills/bee/peaks-qa/test-prompts.json +12 -0
- package/skills/bee/peaks-rd/SKILL.md +29 -20
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
- package/skills/bee/peaks-rd/test-prompts.json +12 -0
- package/skills/bee/peaks-reviewer/SKILL.md +17 -0
- package/skills/bee/peaks-sc/SKILL.md +16 -0
- package/skills/bee/peaks-security-audit/SKILL.md +17 -0
- package/skills/bee/peaks-txt/SKILL.md +16 -0
- package/skills/bee/peaks-txt/test-prompts.json +12 -0
- package/skills/bee/peaks-ui/SKILL.md +49 -43
- package/skills/bee/peaks-ui/test-prompts.json +12 -0
- package/skills/peaks-code/SKILL.md +54 -109
- package/skills/peaks-code/references/boundaries.md +15 -1
- package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
- package/skills/peaks-code/references/external-skill-invocation.md +27 -0
- package/skills/peaks-code/references/lease-dashboard.html +224 -0
- package/skills/peaks-code/references/lease-stats.sample.json +26 -0
- package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
- package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
- package/skills/peaks-code/references/runbook.md +63 -1
- package/skills/peaks-code/references/startup-sequence.md +110 -0
- package/skills/peaks-code/references/step-0-8-gate.md +1 -1
- package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
- package/skills/peaks-code/references/worktree-governance.md +123 -0
- package/skills/peaks-code/test-prompts.json +12 -0
- package/skills/peaks-doctor/SKILL.md +1 -1
- package/skills/peaks-ide/SKILL.md +1 -1
- package/skills/peaks-solo/SKILL.md +21 -0
- package/skills/peaks-solo/references/triage-decision-table.md +6 -0
- package/skills/peaks-sop/test-prompts.json +17 -0
- package/dist/cli/commands/agent-commands.d.ts +0 -20
- package/dist/cli/commands/agent-commands.js +0 -48
- package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
- package/dist/cli/commands/classify-classify-commands.js +0 -151
- package/dist/cli/commands/contract-commands.d.ts +0 -26
- package/dist/cli/commands/contract-commands.js +0 -114
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
- package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
- package/dist/cli/commands/worker-commands.d.ts +0 -3
- package/dist/cli/commands/worker-commands.js +0 -52
- package/dist/services/agent/ecc-agent-service.d.ts +0 -47
- package/dist/services/agent/ecc-agent-service.js +0 -143
- package/dist/services/config/provider-service.d.ts +0 -48
- package/dist/services/config/provider-service.js +0 -143
- package/dist/services/context/dispatch-context-guard.d.ts +0 -27
- package/dist/services/context/dispatch-context-guard.js +0 -192
- package/dist/services/context/shared-channel.d.ts +0 -93
- package/dist/services/context/shared-channel.js +0 -308
- package/dist/services/filesystem/file-lock.d.ts +0 -11
- package/dist/services/filesystem/file-lock.js +0 -152
- package/dist/services/mut/assert-scanner.d.ts +0 -6
- package/dist/services/mut/assert-scanner.js +0 -116
- package/dist/services/mut/index.d.ts +0 -8
- package/dist/services/mut/index.js +0 -7
- package/dist/services/mut/mut-runner.d.ts +0 -39
- package/dist/services/mut/mut-runner.js +0 -29
- package/dist/services/mut/production-stryker.d.ts +0 -2
- package/dist/services/mut/production-stryker.js +0 -75
- package/dist/services/mut/report-builder.d.ts +0 -11
- package/dist/services/mut/report-builder.js +0 -110
- package/dist/services/mut/report-loader.d.ts +0 -31
- package/dist/services/mut/report-loader.js +0 -78
- package/dist/services/mut/thresholds.d.ts +0 -21
- package/dist/services/mut/thresholds.js +0 -22
- package/dist/services/mut/types.d.ts +0 -336
- package/dist/services/mut/types.js +0 -59
- package/dist/services/providers/minimax-provider-service.d.ts +0 -24
- package/dist/services/providers/minimax-provider-service.js +0 -143
- package/dist/services/providers/minimax-worker-service.d.ts +0 -21
- package/dist/services/providers/minimax-worker-service.js +0 -83
- package/dist/shared/fs.d.ts +0 -4
- package/dist/shared/fs.js +0 -26
- package/dist/shared/paths.d.ts +0 -6
- package/dist/shared/paths.js +0 -50
- package/dist/shared/result.d.ts +0 -22
- package/dist/shared/result.js +0 -46
- package/dist/shared/version.d.ts +0 -1
- package/dist/shared/version.js +0 -1
- package/examples/video-demo/README.md +0 -142
- package/examples/video-demo/out/en-closing-960.png +0 -0
- package/examples/video-demo/out/zh-closing-960.png +0 -0
- package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
- package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
- /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import type { SubAgentBatchResult } from '../../services/dispatch/sub-agent-dispatcher.js';
|
|
15
15
|
import type { HeadroomMode } from '../../services/context/headroom-client.js';
|
|
16
16
|
import type { HeartbeatStatus } from '../../services/dispatch/dispatch-record-writer.js';
|
|
17
|
+
export { probeShell, type ShellProbeReport, type ShellProbeOptions } from '../../services/env/shell-probe.js';
|
|
17
18
|
export declare const RECOMMENDED_ROLES = "rd | qa | ui | txt | qa-business | qa-perf | qa-security | qa-business-<*> | general-purpose";
|
|
18
19
|
export declare const HEARTBEAT_STATUSES: readonly HeartbeatStatus[];
|
|
19
20
|
export declare const HEADROOM_MODES: readonly HeadroomMode[];
|
|
@@ -30,6 +31,15 @@ export type DispatchOptions = {
|
|
|
30
31
|
headroomMode?: string;
|
|
31
32
|
force?: boolean;
|
|
32
33
|
fromDag?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Slice 2026-07-29-worktree-l2-extended Part 2.C: dispatch isolation mode.
|
|
36
|
+
* Only `worktree` is currently recognised. When set, dispatch
|
|
37
|
+
* auto-spawns a worktree lease (delegates to `peaks worktree spawn`)
|
|
38
|
+
* and injects `PEAKS_WORKTREE_LEASE_ID=<id>` into the dispatch
|
|
39
|
+
* envelope so the receiving sub-agent can write to the lease's
|
|
40
|
+
* worktree without needing a separate `peaks worktree auth grant`.
|
|
41
|
+
*/
|
|
42
|
+
isolation?: string;
|
|
33
43
|
json?: boolean;
|
|
34
44
|
};
|
|
35
45
|
export type HeartbeatOptions = {
|
|
@@ -1,6 +1,29 @@
|
|
|
1
|
+
// Slice 2026-07-29-dispatch-stall-governance / S6 — `probeShell` is
|
|
2
|
+
// re-exported here so the dispatch chokepoint (`dispatch-commands.ts`)
|
|
3
|
+
// and the sub-agent batch-sync wait can lazily acquire a typed
|
|
4
|
+
// shell-probe report without importing the env service at every
|
|
5
|
+
// call site. Codifies .peaks/memory/2026-07-27-windows-shell-pref.md
|
|
6
|
+
// at the dispatch / tool boundary (AC-6.2).
|
|
7
|
+
export { probeShell } from '../../services/env/shell-probe.js';
|
|
1
8
|
export const RECOMMENDED_ROLES = 'rd | qa | ui | txt | qa-business | qa-perf | qa-security | qa-business-<*> | general-purpose';
|
|
9
|
+
// Slice 2026-07-29-dispatch-stall-governance / S2 — align the per-
|
|
10
|
+
// heartbeat vocabulary with the dispatch record's aggregate status
|
|
11
|
+
// union. The CLI --status help, the writer's isHeartbeatStatus guard,
|
|
12
|
+
// and this constant must stay byte-identical (the parity test in
|
|
13
|
+
// tests/unit/dispatch/heartbeat-parity.test.ts pins it). Adding
|
|
14
|
+
// `cancelled` / `no-execution` closes AC-2.1; adding `never-started`
|
|
15
|
+
// and `unreadable` closes the S1 status surface.
|
|
2
16
|
export const HEARTBEAT_STATUSES = [
|
|
3
|
-
'queued',
|
|
17
|
+
'queued',
|
|
18
|
+
'running',
|
|
19
|
+
'finalizing',
|
|
20
|
+
'done',
|
|
21
|
+
'failed',
|
|
22
|
+
'stale',
|
|
23
|
+
'cancelled',
|
|
24
|
+
'no-execution',
|
|
25
|
+
'never-started',
|
|
26
|
+
'unreadable'
|
|
4
27
|
];
|
|
5
28
|
export const HEADROOM_MODES = ['balanced', 'aggressive', 'conservative'];
|
|
6
29
|
export const PROMPT_LIMIT_BYTES = 256 * 1024;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
3
|
+
export type SwarmPlanOptions = {
|
|
4
|
+
skill?: string;
|
|
5
|
+
changeId?: string;
|
|
6
|
+
goal: string;
|
|
7
|
+
maxWorkers?: string;
|
|
8
|
+
dryRun?: boolean;
|
|
9
|
+
codeMode?: string;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare function runSwarmPlan(io: ProgramIO, options: SwarmPlanOptions): Promise<void>;
|
|
13
|
+
export declare function registerSwarmCommands(program: Command, io: ProgramIO): void;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
2
|
+
import { getWorkspaceConfigForPath } from '../../services/config/config-service.js';
|
|
3
|
+
import { getLocalArtifactPath } from '../../services/artifacts/workspace-service.js';
|
|
4
|
+
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
5
|
+
import { planRdSwarmGraph } from '../../services/rd-swarm/rd-swarm-service.js';
|
|
6
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
7
|
+
import { mapServiceError } from './_cli-error-envelope.js';
|
|
8
|
+
function projectContext() {
|
|
9
|
+
const projectRoot = findProjectRoot(process.cwd()) ?? process.cwd();
|
|
10
|
+
const workspace = getWorkspaceConfigForPath(projectRoot);
|
|
11
|
+
return {
|
|
12
|
+
workspaceRoot: workspace ? getLocalArtifactPath(workspace) : projectRoot,
|
|
13
|
+
...(workspace ? { workspace } : {}),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export async function runSwarmPlan(io, options) {
|
|
17
|
+
if ((options.skill ?? 'rd') !== 'rd') {
|
|
18
|
+
printResult(io, fail('swarm.plan', 'UNSUPPORTED_SWARM_SKILL', `Unsupported skill ${options.skill}`, {}, ['Use --skill rd']), options.json);
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (options.dryRun === false) {
|
|
23
|
+
printResult(io, fail('swarm.plan', 'UNSUPPORTED_NON_DRY_RUN', 'Only dry-run planning is supported', {}, ['Rerun with --dry-run or omit --no-dry-run']), options.json);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (options.codeMode !== undefined && !['full-auto', 'guided', 'rnd'].includes(options.codeMode)) {
|
|
28
|
+
printResult(io, fail('swarm.plan', 'UNSUPPORTED_CODE_MODE', `Unsupported code mode ${options.codeMode}`, {}, ['Use --code-mode full-auto, guided, or rnd']), options.json);
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const maxWorkers = Number(options.maxWorkers ?? '25');
|
|
33
|
+
const changeId = options.changeId ?? 'ad-hoc-swarm';
|
|
34
|
+
try {
|
|
35
|
+
const context = projectContext();
|
|
36
|
+
const request = {
|
|
37
|
+
skill: 'rd',
|
|
38
|
+
changeId,
|
|
39
|
+
goal: options.goal,
|
|
40
|
+
maxWorkers,
|
|
41
|
+
dryRun: true,
|
|
42
|
+
workspaceRoot: context.workspaceRoot,
|
|
43
|
+
...(context.workspace ? { workspace: context.workspace } : {}),
|
|
44
|
+
requiresTechApproval: false,
|
|
45
|
+
};
|
|
46
|
+
const plan = planRdSwarmGraph(request);
|
|
47
|
+
if (!plan.available) {
|
|
48
|
+
const code = plan.blockedReasons[0] ?? 'SWARM_PLAN_BLOCKED';
|
|
49
|
+
printResult(io, fail('swarm.plan', code, 'RD swarm planning is blocked', plan, plan.nextActions), options.json);
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
printResult(io, ok('swarm.plan', plan), options.json);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const mapping = mapServiceError(error);
|
|
57
|
+
printResult(io, fail('swarm.plan', mapping.code, getErrorMessage(error), {}, [...mapping.nextActions]), options.json);
|
|
58
|
+
process.exitCode = 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function addSwarmPlanChangeIdOptions(command) {
|
|
62
|
+
return addJsonOption(command
|
|
63
|
+
.description('Plan a change-id-keyed RD swarm dry-run graph (slice rid-013).')
|
|
64
|
+
.requiredOption('--change-id <id>', 'change id matching [A-Za-z0-9][A-Za-z0-9._-]*')
|
|
65
|
+
.requiredOption('--goal <goal>', 'planning goal')
|
|
66
|
+
.option('--max-workers <count>', 'maximum worker count', '25')
|
|
67
|
+
.option('--dry-run', 'preview without writing files', true)
|
|
68
|
+
.option('--no-dry-run', 'unsupported: do not execute RD planning from this CLI')
|
|
69
|
+
.option('--code-mode <mode>', 'code mode: full-auto, guided, or rnd'));
|
|
70
|
+
}
|
|
71
|
+
export function registerSwarmCommands(program, io) {
|
|
72
|
+
const swarm = program.commands.find((candidate) => candidate.name() === 'swarm');
|
|
73
|
+
if (swarm) {
|
|
74
|
+
addSwarmPlanChangeIdOptions(swarm.command('plan-change-id')).action((options) => runSwarmPlan(io, options));
|
|
75
|
+
}
|
|
76
|
+
addSwarmPlanChangeIdOptions(program.command('swarm-plan-change-id')).action((options) => runSwarmPlan(io, options));
|
|
77
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tech-commands — change-id-axis CLI registration (rid-012).
|
|
3
|
+
*
|
|
4
|
+
* Adds two nested subcommands under the existing `peaks tech` parent:
|
|
5
|
+
*
|
|
6
|
+
* - `peaks tech plan-change-id --change-id <id> --goal ... [--swarm] [--dry-run] [--json]`
|
|
7
|
+
* - `peaks tech status-change-id --change-id <id> [--json]`
|
|
8
|
+
*
|
|
9
|
+
* These are ADDITIVE — the existing session-axis commands (`peaks tech plan`
|
|
10
|
+
* / `peaks tech status`) are untouched. The new subcommands reuse the
|
|
11
|
+
* rid-009 helpers (validateChangeId / planArtifactPath / buildWorkspaceUnavailable)
|
|
12
|
+
* via the consumer-side wrapper in
|
|
13
|
+
* `src/services/tech/tech-change-id-service.ts`.
|
|
14
|
+
*
|
|
15
|
+
* Hard ban:
|
|
16
|
+
* - Do NOT touch the existing `runTechPlan` / `runTechStatus` /
|
|
17
|
+
* `addTechPlanOptions` / `addTechStatusOptions` in `workflow-commands.ts`
|
|
18
|
+
* (B2 contract preservation rule from the rid-009 closure record).
|
|
19
|
+
*/
|
|
20
|
+
import type { Command } from 'commander';
|
|
21
|
+
import type { ProgramIO } from '../cli-helpers.js';
|
|
22
|
+
import type { WorkspaceConfig } from '../../services/config/config-types.js';
|
|
23
|
+
import { type TechChangeStatus, type WorkspaceConfig as _WorkspaceConfig } from '../../services/tech/tech-change-id-service.js';
|
|
24
|
+
export type { WorkspaceConfig };
|
|
25
|
+
export interface TechChangeIdPlanOptions {
|
|
26
|
+
changeId: string;
|
|
27
|
+
goal: string;
|
|
28
|
+
swarm?: boolean;
|
|
29
|
+
dryRun?: boolean;
|
|
30
|
+
json?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface TechChangeIdStatusOptions {
|
|
33
|
+
changeId: string;
|
|
34
|
+
json?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export type TechChangeIdPlanResult = {
|
|
37
|
+
available: true;
|
|
38
|
+
changeId: string;
|
|
39
|
+
goal: string;
|
|
40
|
+
swarm: boolean;
|
|
41
|
+
dryRun: true;
|
|
42
|
+
artifactRoot: string;
|
|
43
|
+
artifacts: {
|
|
44
|
+
taskGraph: string;
|
|
45
|
+
waveManifests: string[];
|
|
46
|
+
reviewChecklist: string;
|
|
47
|
+
approvalTemplate: string;
|
|
48
|
+
};
|
|
49
|
+
blockedReasons: string[];
|
|
50
|
+
nextActions: string[];
|
|
51
|
+
};
|
|
52
|
+
export type TechChangeIdStatusResult = TechChangeStatus;
|
|
53
|
+
export declare function addTechChangeIdPlanOptions(command: Command): Command;
|
|
54
|
+
export declare function addTechChangeIdStatusOptions(command: Command): Command;
|
|
55
|
+
/**
|
|
56
|
+
* Register the change-id-axis tech subcommands under the existing
|
|
57
|
+
* `peaks tech` parent command.
|
|
58
|
+
*
|
|
59
|
+
* The subcommand names are `plan-change-id` and `status-change-id` (NOT
|
|
60
|
+
* `plan` / `status`) to avoid colliding with the existing session-axis
|
|
61
|
+
* registrations at `workflow-commands.ts:441-445` (rid-012 risk register R6).
|
|
62
|
+
*/
|
|
63
|
+
export declare function registerTechCommands(program: Command, io: ProgramIO): void;
|
|
64
|
+
export type { _WorkspaceConfig };
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tech-commands — change-id-axis CLI registration (rid-012).
|
|
3
|
+
*
|
|
4
|
+
* Adds two nested subcommands under the existing `peaks tech` parent:
|
|
5
|
+
*
|
|
6
|
+
* - `peaks tech plan-change-id --change-id <id> --goal ... [--swarm] [--dry-run] [--json]`
|
|
7
|
+
* - `peaks tech status-change-id --change-id <id> [--json]`
|
|
8
|
+
*
|
|
9
|
+
* These are ADDITIVE — the existing session-axis commands (`peaks tech plan`
|
|
10
|
+
* / `peaks tech status`) are untouched. The new subcommands reuse the
|
|
11
|
+
* rid-009 helpers (validateChangeId / planArtifactPath / buildWorkspaceUnavailable)
|
|
12
|
+
* via the consumer-side wrapper in
|
|
13
|
+
* `src/services/tech/tech-change-id-service.ts`.
|
|
14
|
+
*
|
|
15
|
+
* Hard ban:
|
|
16
|
+
* - Do NOT touch the existing `runTechPlan` / `runTechStatus` /
|
|
17
|
+
* `addTechPlanOptions` / `addTechStatusOptions` in `workflow-commands.ts`
|
|
18
|
+
* (B2 contract preservation rule from the rid-009 closure record).
|
|
19
|
+
*/
|
|
20
|
+
import { addJsonOption, failUnsupportedNonDryRun, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
21
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
22
|
+
import { mapServiceError } from './_cli-error-envelope.js';
|
|
23
|
+
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
24
|
+
import { buildTechWorkspaceUnavailable, planTechArtifactPath, validateTechChangeId, } from '../../services/tech/tech-change-id-service.js';
|
|
25
|
+
function resolveChangeIdWorkspaceContext() {
|
|
26
|
+
try {
|
|
27
|
+
const projectRoot = findProjectRoot(process.cwd()) ?? process.cwd();
|
|
28
|
+
return { projectRoot };
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// --- Handlers -------------------------------------------------------------
|
|
35
|
+
function runTechChangeIdPlan(io, options) {
|
|
36
|
+
if (options.dryRun === false) {
|
|
37
|
+
failUnsupportedNonDryRun(io, 'tech.plan.change-id', options.json);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Validate change-id first — reject before any other work.
|
|
41
|
+
const validation = validateTechChangeId(options.changeId);
|
|
42
|
+
if (!validation.ok) {
|
|
43
|
+
printResult(io, fail('tech.plan.change-id', 'INVALID_CHANGE_ID', validation.error.message, { code: validation.error.code }, ['Use a change-id matching [A-Za-z0-9][A-Za-z0-9._-]*']), options.json);
|
|
44
|
+
process.exitCode = 1;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
if (!options.goal || !options.goal.trim()) {
|
|
49
|
+
throw new Error('Goal must be non-empty');
|
|
50
|
+
}
|
|
51
|
+
const ctx = resolveChangeIdWorkspaceContext();
|
|
52
|
+
if (!ctx.artifactWorkspacePath || !ctx.workspace) {
|
|
53
|
+
const unavailable = buildTechWorkspaceUnavailable({ mode: 'preview-only' });
|
|
54
|
+
const previewData = {
|
|
55
|
+
available: true,
|
|
56
|
+
changeId: validation.value.changeId,
|
|
57
|
+
goal: options.goal,
|
|
58
|
+
swarm: options.swarm ?? false,
|
|
59
|
+
dryRun: true,
|
|
60
|
+
artifactRoot: `${validation.value.changeId}/architecture`,
|
|
61
|
+
artifacts: {
|
|
62
|
+
taskGraph: `${validation.value.changeId}/architecture/tech-task-graph.json`,
|
|
63
|
+
waveManifests: [
|
|
64
|
+
`${validation.value.changeId}/architecture/waves/wave-1-scan.json`,
|
|
65
|
+
`${validation.value.changeId}/architecture/waves/wave-2-document.json`,
|
|
66
|
+
`${validation.value.changeId}/architecture/waves/wave-3-review.json`,
|
|
67
|
+
`${validation.value.changeId}/architecture/waves/wave-4-reducer.json`,
|
|
68
|
+
],
|
|
69
|
+
reviewChecklist: `${validation.value.changeId}/architecture/tech-review-checklist.md`,
|
|
70
|
+
approvalTemplate: `${validation.value.changeId}/architecture/tech-approval-record.template.md`,
|
|
71
|
+
},
|
|
72
|
+
blockedReasons: [unavailable.reason],
|
|
73
|
+
nextActions: [...unavailable.nextActions],
|
|
74
|
+
};
|
|
75
|
+
printResult(io, ok('tech.plan.change-id', previewData), options.json);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Workspace is configured — compute the real artifact paths via planTechArtifactPath.
|
|
79
|
+
const artifactWorkspacePath = ctx.artifactWorkspacePath;
|
|
80
|
+
const planResult = planTechArtifactPath({
|
|
81
|
+
changeId: validation.value.changeId,
|
|
82
|
+
workspaceRoot: artifactWorkspacePath,
|
|
83
|
+
requestId: 'change-id',
|
|
84
|
+
});
|
|
85
|
+
if (!planResult.ok) {
|
|
86
|
+
printResult(io, fail('tech.plan.change-id', 'INVALID_CHANGE_ID', planResult.error.message, { code: planResult.error.code }, ['Use a change-id matching [A-Za-z0-9][A-Za-z0-9._-]*']), options.json);
|
|
87
|
+
process.exitCode = 1;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const data = {
|
|
91
|
+
available: true,
|
|
92
|
+
changeId: validation.value.changeId,
|
|
93
|
+
goal: options.goal,
|
|
94
|
+
swarm: options.swarm ?? false,
|
|
95
|
+
dryRun: true,
|
|
96
|
+
artifactRoot: `${validation.value.changeId}/architecture`,
|
|
97
|
+
artifacts: flattenArtifacts(planResult.value),
|
|
98
|
+
blockedReasons: [],
|
|
99
|
+
nextActions: [],
|
|
100
|
+
};
|
|
101
|
+
printResult(io, ok('tech.plan.change-id', data), options.json);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const mapping = mapServiceError(error);
|
|
105
|
+
printResult(io, fail('tech.plan.change-id', mapping.code, getErrorMessage(error), {}, [...mapping.nextActions]), options.json);
|
|
106
|
+
process.exitCode = 1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function flattenArtifacts(value) {
|
|
110
|
+
return {
|
|
111
|
+
taskGraph: value.taskGraph.jsonSafeRelativePath,
|
|
112
|
+
waveManifests: value.waveManifests.map((w) => w.jsonSafeRelativePath),
|
|
113
|
+
reviewChecklist: value.reviewChecklist.jsonSafeRelativePath,
|
|
114
|
+
approvalTemplate: value.approvalTemplate.jsonSafeRelativePath,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function runTechChangeIdStatus(io, options) {
|
|
118
|
+
// Validate change-id first — reject before any fs read.
|
|
119
|
+
const validation = validateTechChangeId(options.changeId);
|
|
120
|
+
if (!validation.ok) {
|
|
121
|
+
printResult(io, fail('tech.status.change-id', 'INVALID_CHANGE_ID', validation.error.message, { code: validation.error.code }, ['Use a change-id matching [A-Za-z0-9][A-Za-z0-9._-]*']), options.json);
|
|
122
|
+
process.exitCode = 1;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const ctx = resolveChangeIdWorkspaceContext();
|
|
127
|
+
if (!ctx.artifactWorkspacePath || !ctx.workspace) {
|
|
128
|
+
const unavailable = buildTechWorkspaceUnavailable({ mode: 'blocked' });
|
|
129
|
+
const status = {
|
|
130
|
+
changeId: validation.value.changeId,
|
|
131
|
+
status: 'unavailable',
|
|
132
|
+
artifactRoot: `${validation.value.changeId}/architecture`,
|
|
133
|
+
requiredArtifacts: [],
|
|
134
|
+
missingArtifacts: [],
|
|
135
|
+
approvalRecord: null,
|
|
136
|
+
blockedReasons: [unavailable.reason],
|
|
137
|
+
nextActions: [...unavailable.nextActions],
|
|
138
|
+
};
|
|
139
|
+
printResult(io, ok('tech.status.change-id', status), options.json);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// Workspace is configured — return the approved shape with the computed artifact root.
|
|
143
|
+
const status = {
|
|
144
|
+
changeId: validation.value.changeId,
|
|
145
|
+
status: 'approved',
|
|
146
|
+
artifactRoot: `${validation.value.changeId}/architecture`,
|
|
147
|
+
requiredArtifacts: [],
|
|
148
|
+
missingArtifacts: [],
|
|
149
|
+
approvalRecord: `${validation.value.changeId}/architecture/tech-approval-record.md`,
|
|
150
|
+
blockedReasons: [],
|
|
151
|
+
nextActions: [],
|
|
152
|
+
};
|
|
153
|
+
printResult(io, ok('tech.status.change-id', status), options.json);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
printResult(io, fail('tech.status.change-id', 'TECH_STATUS_FAILED', getErrorMessage(error), {}, ['Verify the project setup']), options.json);
|
|
157
|
+
process.exitCode = 1;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// --- Option builders ------------------------------------------------------
|
|
161
|
+
export function addTechChangeIdPlanOptions(command) {
|
|
162
|
+
return addJsonOption(command
|
|
163
|
+
.description('Generate a change-id-keyed technical dry-run graph')
|
|
164
|
+
.requiredOption('--change-id <id>', 'change id matching [A-Za-z0-9][A-Za-z0-9._-]*')
|
|
165
|
+
.requiredOption('--goal <goal>', 'planning goal')
|
|
166
|
+
.option('--swarm', 'opt into swarm-oriented planning')
|
|
167
|
+
.option('--dry-run', 'preview without writing files', true)
|
|
168
|
+
.option('--no-dry-run', 'unsupported: do not execute tech planning from this CLI'));
|
|
169
|
+
}
|
|
170
|
+
export function addTechChangeIdStatusOptions(command) {
|
|
171
|
+
return addJsonOption(command
|
|
172
|
+
.description('Inspect change-id-keyed technical approval status')
|
|
173
|
+
.requiredOption('--change-id <id>', 'change id matching [A-Za-z0-9][A-Za-z0-9._-]*'));
|
|
174
|
+
}
|
|
175
|
+
// --- Registration ---------------------------------------------------------
|
|
176
|
+
/**
|
|
177
|
+
* Register the change-id-axis tech subcommands under the existing
|
|
178
|
+
* `peaks tech` parent command.
|
|
179
|
+
*
|
|
180
|
+
* The subcommand names are `plan-change-id` and `status-change-id` (NOT
|
|
181
|
+
* `plan` / `status`) to avoid colliding with the existing session-axis
|
|
182
|
+
* registrations at `workflow-commands.ts:441-445` (rid-012 risk register R6).
|
|
183
|
+
*/
|
|
184
|
+
export function registerTechCommands(program, io) {
|
|
185
|
+
const tech = program.commands.find((c) => c.name() === 'tech');
|
|
186
|
+
if (!tech) {
|
|
187
|
+
// The session-axis `peaks tech` parent is registered by
|
|
188
|
+
// `registerWorkflowCommands` before this function runs. If it is
|
|
189
|
+
// missing the caller has changed the wiring — fail loud so the
|
|
190
|
+
// breakage is noticed at startup, not at first invocation.
|
|
191
|
+
throw new Error('peaks tech parent command is not registered; ensure registerWorkflowCommands runs before registerTechCommands');
|
|
192
|
+
}
|
|
193
|
+
addTechChangeIdPlanOptions(tech.command('plan-change-id')).action((options) => runTechChangeIdPlan(io, options));
|
|
194
|
+
addTechChangeIdStatusOptions(tech.command('status-change-id')).action((options) => runTechChangeIdStatus(io, options));
|
|
195
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InvalidArgumentError } from 'commander';
|
|
2
2
|
import { scanUnderstandAnything, summarizeKnowledgeGraph } from '../../services/understand/understand-scan-service.js';
|
|
3
3
|
import { buildUnderstandContext } from '../../services/understand/understand-hybrid-service.js';
|
|
4
|
-
import { fail, ok } from '
|
|
4
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
5
5
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
6
6
|
function parsePositiveInteger(value) {
|
|
7
7
|
if (!/^\d+$/.test(value)) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* peaks upgrade * CLI surface — Slice: 1.x → 2.0 umbrella +
|
|
3
3
|
* Slice 3: --detect-1x flag.
|
|
4
|
+
* Fix-4: reject dangerous probe names passed positionally and expose
|
|
5
|
+
* --gitignore-migrate as a read-only probe.
|
|
4
6
|
*
|
|
5
7
|
* Per the "one-key completion" + "minimal-user-operation" tenets
|
|
6
8
|
* (2026-06-11), the user's typical upgrade path is
|
|
@@ -1,20 +1,39 @@
|
|
|
1
1
|
import { runUpgrade } from '../../services/upgrade/upgrade-service.js';
|
|
2
2
|
import { detect1xProjectState } from '../../services/upgrade/1x-detector-service.js';
|
|
3
|
+
import { migrateGitignoreFile } from '../../services/upgrade/gitignore-migrate-service.js';
|
|
3
4
|
import { initWorkspace } from '../../services/workspace/workspace-service.js';
|
|
4
5
|
import { ensureSessionWithRotation } from '../../services/session/session-manager.js';
|
|
5
6
|
import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
|
|
6
7
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
7
|
-
import { fail, ok } from '
|
|
8
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
9
|
+
const REJECTED_POSITIONALS = {
|
|
10
|
+
'1x-detector': '--detect-1x',
|
|
11
|
+
'gitignore-migrate': '--gitignore-migrate'
|
|
12
|
+
};
|
|
13
|
+
function isRejectedPositional(value) {
|
|
14
|
+
return value === '1x-detector' || value === 'gitignore-migrate';
|
|
15
|
+
}
|
|
8
16
|
export function registerUpgradeCommands(program, io) {
|
|
9
17
|
addJsonOption(program
|
|
10
|
-
.command('upgrade')
|
|
18
|
+
.command('upgrade', { hidden: true })
|
|
11
19
|
.description('Upgrade a peaks-loop 1.x project to 2.0. Umbrella that orquestrates 7 sub-commands: config-migrate / standards-migrate / memory-extract / hooks-install / skill-sync / audit-verify + write-upgrade-record. Per the "one-key completion" tenet, prefer letting `npm i -g peaks-loop@2.0` postinstall run this for you. Use `--detect-1x` for a read-only probe (no file writes) that the peaks-code skill uses to gate the 1.x → 2.0 AskUserQuestion.')
|
|
12
20
|
.option('--to <version>', 'target version (only "2.0" supported)', '2.0')
|
|
13
21
|
.option('--project <path>', 'project root to upgrade (default: cwd)')
|
|
14
22
|
.option('--auto', 'non-interactive: accept soft-fail on any sub-step (used by the postinstall hook)')
|
|
15
23
|
.option('--detect-1x', 'read-only probe: returns the 1.x state as JSON (no file writes); consumed by peaks-code Step 0.55 to gate the AskUserQuestion')
|
|
16
|
-
.option('--
|
|
24
|
+
.option('--gitignore-migrate', 'read-only probe: reports whether .gitignore needs the 1.x to 2.0 migration (no file writes)')
|
|
25
|
+
.option('--apply-init', 'slice 4 (slice 2026-06-13-selfheal-claude-settings-template): run initWorkspace so the drift-driven self-heal fires on the consumer-project .claude/settings.local.json and the offline .peaks/.claude-settings-template.json. Idempotent. Use after a peaks-loop version bump if you do not otherwise re-run init. Mutually exclusive with --detect-1x.')).action(async (options, command) => {
|
|
17
26
|
const projectRoot = options.project ?? process.cwd();
|
|
27
|
+
const positional = command.args[0];
|
|
28
|
+
if (isRejectedPositional(positional)) {
|
|
29
|
+
const replacementFlag = REJECTED_POSITIONALS[positional];
|
|
30
|
+
const message = `Positional \`${positional}\` is not supported because it could trigger the destructive upgrade umbrella. The documented read-only probe is \`${replacementFlag}\`.`;
|
|
31
|
+
printResult(io, fail('upgrade', 'UPGRADE_POSITIONAL_REJECTED', message, {}, [
|
|
32
|
+
`The LLM can coordinate the documented ${replacementFlag} read-only probe instead.`
|
|
33
|
+
]), options.json);
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
18
37
|
// Branch 1: --detect-1x (read-only probe)
|
|
19
38
|
if (options.detect1x === true) {
|
|
20
39
|
try {
|
|
@@ -36,7 +55,23 @@ export function registerUpgradeCommands(program, io) {
|
|
|
36
55
|
}
|
|
37
56
|
return;
|
|
38
57
|
}
|
|
39
|
-
// Branch 2: --
|
|
58
|
+
// Branch 2: --gitignore-migrate (read-only probe)
|
|
59
|
+
if (options.gitignoreMigrate === true) {
|
|
60
|
+
try {
|
|
61
|
+
const result = migrateGitignoreFile({ projectRoot, apply: false });
|
|
62
|
+
const envelope = ok('upgrade.gitignore-migrate', result, [], result.changed
|
|
63
|
+
? ['The upgrade umbrella can coordinate the required .gitignore migration.']
|
|
64
|
+
: ['No .gitignore migration is required.']);
|
|
65
|
+
printResult(io, envelope, options.json);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const message = getErrorMessage(error);
|
|
69
|
+
printResult(io, fail('upgrade.gitignore-migrate', 'GITIGNORE_MIGRATE_FAILED', message, { appliedWrite: false }, [message]), options.json);
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Branch 3: --apply-init (slice 4 — slice 2026-06-13-selfheal-claude-settings-template).
|
|
40
75
|
//
|
|
41
76
|
// The drift-driven self-heal inside initWorkspace only fires when
|
|
42
77
|
// the user invokes init. After a peaks-loop version bump, users who
|
|
@@ -94,7 +129,7 @@ export function registerUpgradeCommands(program, io) {
|
|
|
94
129
|
}
|
|
95
130
|
return;
|
|
96
131
|
}
|
|
97
|
-
// Branch
|
|
132
|
+
// Branch 4: the umbrella (existing behavior)
|
|
98
133
|
try {
|
|
99
134
|
const result = runUpgrade({ projectRoot, auto: options.auto === true });
|
|
100
135
|
const nextActions = [...result.nextActions];
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* "user 在循环里 = 业务/产品审阅者,不参与技术决策"
|
|
15
15
|
*/
|
|
16
16
|
import { aiAutoDecidesGates, classifyGate, COMMIT_BOUNDARY_ACTIONS_LIST, userMustReviewGates } from '../../services/code/user-touchpoint-classifier.js';
|
|
17
|
-
import { fail, ok } from '
|
|
17
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
18
18
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
19
19
|
export function registerUserTouchpointCommands(program, io) {
|
|
20
20
|
// G4 commands are registered as TOP-LEVEL commands (not sub-commands
|
|
@@ -3,7 +3,7 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { aggregateVerdict } from '../../services/verdict/verdict-aggregator.js';
|
|
4
4
|
import { parseKarpathyEnvelope, parseMutEnvelope, parseQaEnvelope, parseSecurityEnvelope, parsePerfEnvelope, envelopesToAggregatorInput } from '../../services/verdict/envelopes.js';
|
|
5
5
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
6
|
-
import { fail, ok } from '
|
|
6
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
7
7
|
const SECURITY_REL = 'audit/security.md';
|
|
8
8
|
const PERF_REL = 'audit/perf.md';
|
|
9
9
|
const KARPATHY_REL = 'rd/karpathy-review.md';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks vm spawn | release` — slice 2026-07-29-worktree-l2-extended Part 35.
|
|
3
|
+
*
|
|
4
|
+
* L4 VM isolation runtime. Parallels the design of
|
|
5
|
+
* `container-commands.ts` (Part 12, docker) and
|
|
6
|
+
* `worktree-auth-commands.ts` (Part 1-2, git worktree).
|
|
7
|
+
*
|
|
8
|
+
* Hypervisor dispatch:
|
|
9
|
+
* - `kvm` : `virsh create` + `virsh destroy` (Linux KVM via libvirt)
|
|
10
|
+
* - `hyperkit` : `hvftool create` + `hvftool stop` (macOS HyperKit)
|
|
11
|
+
* - `hyperv` : `hvc create` + `hvftool stop` (Windows Hyper-V via
|
|
12
|
+
* the operator-installed `hvc` shim)
|
|
13
|
+
*
|
|
14
|
+
* The runtime check: which hypervisor binary is on PATH +
|
|
15
|
+
* (for kvm) whether the host kernel exposes /dev/kvm. The
|
|
16
|
+
* spawn is fail-fast: if the requested hypervisor is not
|
|
17
|
+
* available, the CLI returns VM_RUNTIME_UNAVAILABLE with a
|
|
18
|
+
* remediation hint rather than falling through to a different
|
|
19
|
+
* hypervisor (the caller chose a specific mode for a reason).
|
|
20
|
+
*
|
|
21
|
+
* Each spawned VM runs `sleep infinity` as the entrypoint; the
|
|
22
|
+
* VM's working dir is mounted from the host path, and the
|
|
23
|
+
* `peaks.leaseId` / `peaks.rid` labels are propagated via
|
|
24
|
+
* cloud-init metadata. Real workloads are expected to use
|
|
25
|
+
* `peaks vm exec` (a follow-up rid) to run commands inside
|
|
26
|
+
* the VM; Part 35 ships the lease + spawn/release surface
|
|
27
|
+
* only.
|
|
28
|
+
*/
|
|
29
|
+
import type { Command } from 'commander';
|
|
30
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
31
|
+
export declare function registerVmCommand(program: Command, io: ProgramIO): void;
|