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
|
@@ -0,0 +1,274 @@
|
|
|
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 { execSync } from 'node:child_process';
|
|
30
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
31
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
32
|
+
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
33
|
+
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
34
|
+
import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
|
|
35
|
+
import { atomicWriteJson } from '../../services/ide/shared/atomic-json.js';
|
|
36
|
+
import { DEFAULT_VM_IMAGE, deserializeVmLease, finalizeVmLease, generateVmLeaseId, markVmReleased, ttlForVmRole, vmLeaseFilePath } from '../../services/vm/vm-lease.js';
|
|
37
|
+
function joinPathSession(projectRoot, sessionId) {
|
|
38
|
+
return `${projectRoot.replace(/[\\/]+$/, '')}/.peaks/_runtime/${sessionId}`;
|
|
39
|
+
}
|
|
40
|
+
function resolveTtlMs(raw, role) {
|
|
41
|
+
if (typeof raw !== 'string' || raw.length === 0)
|
|
42
|
+
return ttlForVmRole(role);
|
|
43
|
+
const parsed = Number.parseInt(raw, 10);
|
|
44
|
+
if (!Number.isInteger(parsed) || parsed <= 0)
|
|
45
|
+
return ttlForVmRole(role);
|
|
46
|
+
return parsed;
|
|
47
|
+
}
|
|
48
|
+
function detectHypervisor(requested) {
|
|
49
|
+
let binary;
|
|
50
|
+
switch (requested) {
|
|
51
|
+
case 'kvm':
|
|
52
|
+
binary = 'virsh';
|
|
53
|
+
break;
|
|
54
|
+
case 'hyperkit':
|
|
55
|
+
binary = 'hvftool';
|
|
56
|
+
break;
|
|
57
|
+
case 'hyperv':
|
|
58
|
+
binary = 'hvc';
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const v = execSync(`${binary} --version`, { stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8' });
|
|
63
|
+
if (requested === 'kvm' && !existsSync('/dev/kvm')) {
|
|
64
|
+
return { ok: false, stderr: 'KVM kernel module not loaded (/dev/kvm absent)' };
|
|
65
|
+
}
|
|
66
|
+
return { ok: true, binary: `${binary} (${v.trim().split('\n')[0] ?? ''})` };
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return { ok: false, stderr: err.message };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function spawnVmWithHypervisor(args) {
|
|
73
|
+
if (args.hypervisor === 'kvm') {
|
|
74
|
+
// virsh create expects a domain XML file. We emit a minimal
|
|
75
|
+
// XML with the image, mount, and our peaks labels.
|
|
76
|
+
const xml = `<?xml version="1.0"?>
|
|
77
|
+
<domain type="kvm">
|
|
78
|
+
<name>peaks-${args.leaseId}</name>
|
|
79
|
+
<metadata><peaks:label xmlns:peaks="urn:peaks">peaks.leaseId=${args.leaseId};peaks.rid=${args.rid}</peaks:label></metadata>
|
|
80
|
+
<memory>1048576</memory>
|
|
81
|
+
<vcpu>1</vcpu>
|
|
82
|
+
<os><type arch="x86_64">hvm</type></os>
|
|
83
|
+
<devices>
|
|
84
|
+
<disk type="file"><source file="${args.image}"/><target dev="vda"/></disk>
|
|
85
|
+
<filesystem type="mount"><source dir="${args.mount}"/><target dir="/work"/></filesystem>
|
|
86
|
+
</devices>
|
|
87
|
+
</domain>`;
|
|
88
|
+
const xmlPath = `${args.workdir}/.peaks-vm-${args.leaseId}.xml`;
|
|
89
|
+
require('node:fs').writeFileSync(xmlPath, xml, 'utf8');
|
|
90
|
+
const out = execSync(`virsh create ${xmlPath}`, { cwd: args.workdir, stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8' });
|
|
91
|
+
return { vmId: out.trim() };
|
|
92
|
+
}
|
|
93
|
+
if (args.hypervisor === 'hyperkit') {
|
|
94
|
+
const out = execSync(`hvftool create --image ${args.image} --mount ${args.mount}:/work --label peaks.leaseId=${args.leaseId} --label peaks.rid=${args.rid} --entrypoint sleep -- infinity`, { cwd: args.workdir, stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8' });
|
|
95
|
+
return { vmId: out.trim() };
|
|
96
|
+
}
|
|
97
|
+
// hyperv: the hvc shim writes a vhdx + emits the new VM id.
|
|
98
|
+
const out = execSync(`hvc create --image ${args.image} --mount ${args.mount} --label peaks.leaseId=${args.leaseId} --label peaks.rid=${args.rid}`, { cwd: args.workdir, stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8' });
|
|
99
|
+
return { vmId: out.trim() };
|
|
100
|
+
}
|
|
101
|
+
function destroyVmWithHypervisor(args) {
|
|
102
|
+
try {
|
|
103
|
+
if (args.hypervisor === 'kvm') {
|
|
104
|
+
execSync(`virsh destroy ${args.vmId}`, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
105
|
+
}
|
|
106
|
+
else if (args.hypervisor === 'hyperkit') {
|
|
107
|
+
execSync(`hvftool stop ${args.vmId}`, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
execSync(`hvc stop ${args.vmId}`, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export function registerVmCommand(program, io) {
|
|
119
|
+
const cmd = program.command('vm').description('L4 VM isolation: spawn/release VM leases via kvm | hyperkit | hyperv (Part 35; pairs with --isolation vm on dispatch).');
|
|
120
|
+
addJsonOption(cmd.command('spawn')
|
|
121
|
+
.description('Spawn a VM via the requested hypervisor (kvm | hyperkit | hyperv) and write a VM lease. ' +
|
|
122
|
+
'Default TTL is role-aware (rd=30m / qa=15m / ui=1h); pass --ttl <ms> to override. ' +
|
|
123
|
+
'Default image is `peaks-base:22-slim`; pass --image <name> to override.')
|
|
124
|
+
.requiredOption('--rid <rid>', 'peaks request id the lease is associated with')
|
|
125
|
+
.requiredOption('--role <role>', 'sub-agent role (rd | qa | ui | sc | prd | general-purpose)')
|
|
126
|
+
.requiredOption('--purpose <text>', 'why this VM was spawned (audit log)')
|
|
127
|
+
.option('--hypervisor <name>', 'hypervisor to use: kvm | hyperkit | hyperv (default: auto-detect from host)')
|
|
128
|
+
.option('--image <name>', `container image / vhdx to boot (default ${DEFAULT_VM_IMAGE})`)
|
|
129
|
+
.option('--ttl <ms>', 'time-to-live in ms (default role-aware; override with positive number)')
|
|
130
|
+
.option('--mount <path>', 'host path to mount as the VM working dir (default: <projectRoot>)')
|
|
131
|
+
.option('--session <sid>', 'override session id')
|
|
132
|
+
.option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
|
|
133
|
+
try {
|
|
134
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
135
|
+
const sessionId = options.session ?? process.env.PEAKS_SESSION_ID ?? getCurrentSessionId(projectRoot) ?? 'unknown-sid';
|
|
136
|
+
// Pick hypervisor: explicit > auto-detect.
|
|
137
|
+
const explicit = options.hypervisor;
|
|
138
|
+
const detected = explicit
|
|
139
|
+
? explicit
|
|
140
|
+
: (() => {
|
|
141
|
+
if (existsSync('/dev/kvm'))
|
|
142
|
+
return 'kvm';
|
|
143
|
+
// No platform detector for hyperkit / hyperv — those
|
|
144
|
+
// require explicit --hypervisor.
|
|
145
|
+
return null;
|
|
146
|
+
})();
|
|
147
|
+
if (detected === null) {
|
|
148
|
+
printResult(io, fail('vm.spawn', 'VM_HYPERVISOR_UNSPECIFIED', 'No --hypervisor given and the host does not advertise /dev/kvm. Pass --hypervisor hyperkit|hyperv to force one.', { rid: options.rid, sessionId }, [
|
|
149
|
+
'Linux KVM: ensure /dev/kvm exists and the kvm kernel module is loaded.',
|
|
150
|
+
'macOS HyperKit: install hvftool (brew install hyperkit) and pass --hypervisor hyperkit.',
|
|
151
|
+
'Windows Hyper-V: install the hvc shim and pass --hypervisor hyperv.'
|
|
152
|
+
]), options.json);
|
|
153
|
+
process.exitCode = 1;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const probe = detectHypervisor(detected);
|
|
157
|
+
if (!probe.ok) {
|
|
158
|
+
printResult(io, fail('vm.spawn', 'VM_RUNTIME_UNAVAILABLE', `${detected} runtime not available: ${probe.stderr}`, { rid: options.rid, hypervisor: detected, sessionId }, [
|
|
159
|
+
`Install the ${detected} runtime binary on PATH.`,
|
|
160
|
+
'The dispatch fail-fast prevents fallback to a different hypervisor (caller chose this mode for a reason).'
|
|
161
|
+
]), options.json);
|
|
162
|
+
process.exitCode = 1;
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const leaseId = generateVmLeaseId();
|
|
166
|
+
const now = Date.now();
|
|
167
|
+
const ttlMs = resolveTtlMs(options.ttl, options.role);
|
|
168
|
+
const image = options.image ?? DEFAULT_VM_IMAGE;
|
|
169
|
+
const mount = options.mount ?? projectRoot;
|
|
170
|
+
let spawnResult;
|
|
171
|
+
try {
|
|
172
|
+
spawnResult = spawnVmWithHypervisor({
|
|
173
|
+
hypervisor: detected,
|
|
174
|
+
image,
|
|
175
|
+
mount,
|
|
176
|
+
leaseId,
|
|
177
|
+
rid: options.rid,
|
|
178
|
+
workdir: projectRoot
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
printResult(io, fail('vm.spawn', 'VM_SPAWN_FAILED', getErrorMessage(err), { rid: options.rid, hypervisor: detected, image, sessionId }, [
|
|
183
|
+
'Verify the image / vhdx is reachable on the host.',
|
|
184
|
+
`For ${detected}: the spawn helper expects domain XML / hvftool args / hvc shim.`
|
|
185
|
+
]), options.json);
|
|
186
|
+
process.exitCode = 1;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const lease = finalizeVmLease({
|
|
190
|
+
leaseId,
|
|
191
|
+
rid: options.rid,
|
|
192
|
+
role: options.role,
|
|
193
|
+
path: mount,
|
|
194
|
+
hypervisor: detected,
|
|
195
|
+
image,
|
|
196
|
+
vmId: spawnResult.vmId,
|
|
197
|
+
createdAt: now,
|
|
198
|
+
expiresAt: now + ttlMs,
|
|
199
|
+
purpose: options.purpose
|
|
200
|
+
});
|
|
201
|
+
atomicWriteJson(vmLeaseFilePath(joinPathSession(projectRoot, sessionId), leaseId), lease);
|
|
202
|
+
printResult(io, ok('vm.spawn', {
|
|
203
|
+
lease,
|
|
204
|
+
sessionId,
|
|
205
|
+
projectRoot,
|
|
206
|
+
hypervisor: detected,
|
|
207
|
+
runtime: probe.binary,
|
|
208
|
+
ttlMs,
|
|
209
|
+
nextActions: [
|
|
210
|
+
`VM domain id: ${spawnResult.vmId}`,
|
|
211
|
+
`Image: ${image}`,
|
|
212
|
+
`Lease expires at: ${new Date(lease.expiresAt).toISOString()}`,
|
|
213
|
+
'Run `peaks vm release --lease-id <lease-id>` when done',
|
|
214
|
+
'For inside-the-VM exec, a follow-up rid adds `peaks vm exec` (Part 35 ships lease + spawn/release only).'
|
|
215
|
+
]
|
|
216
|
+
}, [], []), options.json);
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
printResult(io, fail('vm.spawn', 'SPAWN_FAILED', getErrorMessage(err), { rid: options.rid, sessionId: options.session ?? process.env.PEAKS_SESSION_ID ?? 'unknown-sid' }, [
|
|
220
|
+
'See error message; if the lease was not written, retry after fixing the underlying issue.'
|
|
221
|
+
]), options.json);
|
|
222
|
+
process.exitCode = 1;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
addJsonOption(cmd.command('release')
|
|
226
|
+
.description('Transition a VM lease to released and run the hypervisor destroy command. Idempotent on already-released leases.')
|
|
227
|
+
.requiredOption('--lease-id <id>', 'lease id returned by `peaks vm spawn`')
|
|
228
|
+
.option('--session <sid>', 'override session id')
|
|
229
|
+
.option('--project <path>', 'project root (default: findProjectRoot(cwd))')).action((options) => {
|
|
230
|
+
try {
|
|
231
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
232
|
+
const sessionId = options.session ?? process.env.PEAKS_SESSION_ID ?? getCurrentSessionId(projectRoot) ?? 'unknown-sid';
|
|
233
|
+
const file = vmLeaseFilePath(joinPathSession(projectRoot, sessionId), options.leaseId);
|
|
234
|
+
if (!existsSync(file)) {
|
|
235
|
+
printResult(io, fail('vm.release', 'LEASE_NOT_FOUND', `no VM lease on disk at ${file}`, { leaseId: options.leaseId, file }, [
|
|
236
|
+
'Run `peaks vm list` (follow-up) to inspect active leases.',
|
|
237
|
+
'For a never-spawned lease, this is a no-op.'
|
|
238
|
+
]), options.json);
|
|
239
|
+
process.exitCode = 1;
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
let lease;
|
|
243
|
+
try {
|
|
244
|
+
lease = deserializeVmLease(readFileSync(file, 'utf8'));
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
printResult(io, fail('vm.release', 'LEASE_FILE_INVALID', getErrorMessage(err), { leaseId: options.leaseId, file }, [
|
|
248
|
+
'Delete the malformed lease file manually and re-spawn.'
|
|
249
|
+
]), options.json);
|
|
250
|
+
process.exitCode = 1;
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (lease.status === 'released') {
|
|
254
|
+
printResult(io, ok('vm.release', { lease, sessionId, projectRoot, alreadyReleased: true }, [], [`Lease ${lease.leaseId} already released; nothing to do.`]), options.json);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const destroyed = destroyVmWithHypervisor({ hypervisor: lease.hypervisor, vmId: lease.vmId });
|
|
258
|
+
const released = markVmReleased(lease);
|
|
259
|
+
atomicWriteJson(file, released);
|
|
260
|
+
printResult(io, ok('vm.release', { lease: released, sessionId, projectRoot, vmDestroyed: destroyed }, destroyed ? [] : [`${lease.hypervisor} destroy command failed; the lease was marked released anyway.`], [
|
|
261
|
+
`Lease ${lease.leaseId} marked released.`,
|
|
262
|
+
destroyed
|
|
263
|
+
? `${lease.hypervisor} domain ${lease.vmId} stopped.`
|
|
264
|
+
: `Manual \`${lease.hypervisor} stop ${lease.vmId}\` may be needed.`
|
|
265
|
+
]), options.json);
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
printResult(io, fail('vm.release', 'RELEASE_FAILED', getErrorMessage(err), { leaseId: options.leaseId, sessionId: options.session ?? process.env.PEAKS_SESSION_ID ?? 'unknown-sid' }, [
|
|
269
|
+
'Verify the lease id and re-run.'
|
|
270
|
+
]), options.json);
|
|
271
|
+
process.exitCode = 1;
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
@@ -13,13 +13,22 @@ import { getSessionDir } from '../../services/session/getSessionDir.js';
|
|
|
13
13
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
14
14
|
import { verifyPipeline } from '../../services/workflow/pipeline-verify-service.js';
|
|
15
15
|
import { applySkip, detectCallerKind } from '../../services/workflow/workflow-skip-service.js';
|
|
16
|
-
import { fail, ok } from '
|
|
16
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
17
17
|
import { addJsonOption, failUnsupportedNonDryRun, getErrorMessage, isRecommendationWorkflow, printResult } from '../cli-helpers.js';
|
|
18
18
|
// Slice 015 — typed error → envelope code routing. Used by the four
|
|
19
19
|
// catch sites below (tech.plan / workflow.route / workflow.autonomous /
|
|
20
20
|
// swarm.plan) so provider-config errors surface as `INVALID_PROVIDERS`
|
|
21
21
|
// instead of being silently re-labelled `INVALID_GOAL`.
|
|
22
22
|
import { mapServiceError } from './_cli-error-envelope.js';
|
|
23
|
+
// Slice rid-012 — change-id-axis tech subcommands (`peaks tech plan-change-id` /
|
|
24
|
+
// `peaks tech status-change-id`). Additive; the existing session-axis
|
|
25
|
+
// `peaks tech plan` / `peaks tech status` registrations are untouched.
|
|
26
|
+
import { registerTechCommands } from './tech-commands.js';
|
|
27
|
+
import { registerSwarmCommands } from './swarm-commands.js';
|
|
28
|
+
// Slice rid-014 — autonomous RD swarm planner (`peaks workflow autonomous`).
|
|
29
|
+
// Additive; the existing rid-013 `registerSwarmCommands` and rid-012
|
|
30
|
+
// `registerTechCommands` registrations are byte-for-byte untouched.
|
|
31
|
+
import { registerAutonomousSwarmCommands } from './autonomous-swarm-commands.js';
|
|
23
32
|
// Plan 1 / Task 9 — auto-build peaks-context before peaks-rd runs.
|
|
24
33
|
import { buildContext } from '../../services/context/context-builder.js';
|
|
25
34
|
// Plan 1 / Task 10 — production fetcher (replaces mockFetcher).
|
|
@@ -360,6 +369,10 @@ export function registerWorkflowCommands(program, io) {
|
|
|
360
369
|
addTechStatusOptions(tech.command('status')).action((options) => runTechStatus(io, options));
|
|
361
370
|
addTechPlanOptions(program.command('tech-plan')).action((options) => runTechPlan(io, options));
|
|
362
371
|
addTechStatusOptions(program.command('tech-status')).action((options) => runTechStatus(io, options));
|
|
372
|
+
// Slice rid-012 — add the change-id-axis tech subcommands
|
|
373
|
+
// (`peaks tech plan-change-id` / `peaks tech status-change-id`).
|
|
374
|
+
// Additive; the session-axis registrations above are byte-for-byte untouched.
|
|
375
|
+
registerTechCommands(program, io);
|
|
363
376
|
const workflow = program.command('workflow').description('Plan workflow routing dry-run graphs');
|
|
364
377
|
addWorkflowRouteOptions(workflow.command('route'), 'Plan a workflow routing dry-run summary').action((options) => runWorkflowRoute(io, options));
|
|
365
378
|
addWorkflowRouteOptions(program.command('route'), 'Plan a workflow routing dry-run summary').action((options) => runWorkflowRoute(io, options));
|
|
@@ -456,9 +469,19 @@ export function registerWorkflowCommands(program, io) {
|
|
|
456
469
|
process.exitCode = 1;
|
|
457
470
|
}
|
|
458
471
|
});
|
|
472
|
+
// Slice rid-013 — `peaks swarm plan-change-id` is delegated to
|
|
473
|
+
// `registerSwarmCommands` (a thin wrapper around the new
|
|
474
|
+
// `planRdSwarmGraph` service). The legacy `peaks swarm plan` /
|
|
475
|
+
// `peaks swarm-plan` registrations above stay in-place for back-compat
|
|
476
|
+
// with the existing test suite (`tests/unit/cli-program.workflow.test.ts`).
|
|
459
477
|
const swarm = program.command('swarm').description('Plan RD swarm dry-run graphs');
|
|
460
478
|
addSwarmPlanOptions(swarm.command('plan'), true).action(async (options) => { await runSwarmPlan(io, options); });
|
|
461
479
|
addSwarmPlanOptions(program.command('swarm-plan'), false).action(async (options) => { await runSwarmPlan(io, options); });
|
|
480
|
+
registerSwarmCommands(program, io);
|
|
481
|
+
// Slice rid-014 — autonomous RD swarm planner. Additive; the rid-013
|
|
482
|
+
// `registerSwarmCommands` and rid-012 `registerTechCommands` calls
|
|
483
|
+
// above are byte-for-byte untouched.
|
|
484
|
+
registerAutonomousSwarmCommands(program, io);
|
|
462
485
|
// Slice #13 Swarm Algorithm Upgrade — 4 additional subcommands.
|
|
463
486
|
// (peaks swarm plan above is slice #13.1; the 4 below are 13.2-13.5).
|
|
464
487
|
addJsonOption(swarm.command('pipeline')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fail, getErrorMessage } from '
|
|
1
|
+
import { fail, getErrorMessage } from 'peaks-loop-shared/result';
|
|
2
2
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
3
3
|
import { readPlan } from '../../services/workflow/plan-reader.js';
|
|
4
4
|
import { refreshPlan } from '../../services/workflow/plan-refresher.js';
|
|
@@ -25,7 +25,7 @@ import { ensureSessionWithRotation } from '../../../services/session/session-man
|
|
|
25
25
|
import { resolveCanonicalProjectRoot } from '../../../services/config/config-service.js';
|
|
26
26
|
import { applyHookInstall, readHookStatus } from '../../../services/skills/hooks-settings-service.js';
|
|
27
27
|
import { clearStalePresenceOnRotation } from '../../../services/skills/skill-presence-service.js';
|
|
28
|
-
import { fail, ok } from '
|
|
28
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
29
29
|
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
30
30
|
import { hasStandardsCheckedMarker, markStandardsChecked } from '../../../services/standards/missing-standards-detector.js';
|
|
31
31
|
import { bootstrapProjectScan } from '../../../services/prd/project-scan-bootstrap-service.js';
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { migrateWorkspace } from '../../../services/workspace/migrate-service.js';
|
|
10
10
|
import { resolveCanonicalProjectRoot } from '../../../services/config/config-service.js';
|
|
11
|
-
import { fail, ok } from '
|
|
11
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
12
12
|
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
13
13
|
export function registerWorkspaceMigrateCommand(workspace, io) {
|
|
14
14
|
addJsonOption(workspace
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { reconcileWorkspace } from '../../../services/workspace/reconcile-service.js';
|
|
13
13
|
import { resolveCanonicalProjectRoot } from '../../../services/config/config-service.js';
|
|
14
|
-
import { fail, ok } from '
|
|
14
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
15
15
|
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
16
16
|
// Inlined from the original 925-line workspace-commands.ts; the import
|
|
17
17
|
// path '../../../shared/duration.js' did not exist and the constants
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks worktree auth <grant|revoke|status>` — slice 2026-07-27-worktree-user-auth.
|
|
3
|
+
*
|
|
4
|
+
* Records (or revokes / inspects) a current-task user authorization for
|
|
5
|
+
* a worktree-mutating operation. The PreToolUse gate
|
|
6
|
+
* (`src/services/hooks/worktree-authorization-gate.ts`) reads the
|
|
7
|
+
* resulting file before allowing `git worktree ...`, `git stash ...`,
|
|
8
|
+
* or `Agent(isolation: worktree)` tool calls.
|
|
9
|
+
*
|
|
10
|
+
* Sub-commands:
|
|
11
|
+
* - grant : append a one-shot (or multi-use) authorization
|
|
12
|
+
* - revoke : remove all unconsumed grants
|
|
13
|
+
* - status : list current grants + fingerprint
|
|
14
|
+
*
|
|
15
|
+
* Default TTL: 5 min, single-use. Multi-use is opt-in via --multi.
|
|
16
|
+
* Default operation: `git-worktree` (the most common ask). Specify
|
|
17
|
+
* `--operation agent-isolation-worktree` or `--operation git-stash-mutating`
|
|
18
|
+
* when authorizing a different shape.
|
|
19
|
+
*
|
|
20
|
+
* This command is invoked by the LLM after the user has explicitly
|
|
21
|
+
* authorized the operation in the current task. It must NOT be invoked
|
|
22
|
+
* autonomously without a user prompt that names the operation. The
|
|
23
|
+
* command itself does not enforce user confirmation — that is the
|
|
24
|
+
* peaks-code orchestrator's responsibility (see
|
|
25
|
+
* `skills/peaks-code/SKILL.md` "Worktree authorization" red line).
|
|
26
|
+
*/
|
|
27
|
+
import { Command } from 'commander';
|
|
28
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
29
|
+
export declare function registerWorktreeAuthCommand(program: Command, io: ProgramIO): void;
|