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,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autonomous-swarm-service — slice rid-014.
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* Build a dry-run-only autonomous RD swarm planner that turns a
|
|
6
|
+
* user-supplied goal + change-id + mode into a *resumable* plan:
|
|
7
|
+
* goal package (done / resume conditions), capability reuse list,
|
|
8
|
+
* checkpoint queue, worker-queue placeholders (no spawn), evidence
|
|
9
|
+
* requirements, and resume instructions.
|
|
10
|
+
*
|
|
11
|
+
* Reuse (per rid-014 plan §1):
|
|
12
|
+
* - `validateChangeId` + `planArtifactPath` + `buildWorkspaceUnavailable`
|
|
13
|
+
* from `src/services/openspec/artifact-boundary.ts` (rid-009).
|
|
14
|
+
* - `getTechStatus` from `src/services/tech/tech-service.ts` (rid-012).
|
|
15
|
+
* - `planRdSwarmGraph` shape from `src/services/rd-swarm/rd-swarm-service.ts`
|
|
16
|
+
* (rid-013) — composed as the workerQueue feed.
|
|
17
|
+
*
|
|
18
|
+
* Style:
|
|
19
|
+
* - Named function exports — matches `rd-swarm-service.ts` + `artifact-boundary.ts`.
|
|
20
|
+
* - Hand-rolled `Result<T, E>` unions — no `neverthrow` dep.
|
|
21
|
+
* - Pure path math + intentional capability fs reads (no side effects).
|
|
22
|
+
* - No real workers, no MCP install, no settings mutation, no target-repo edit.
|
|
23
|
+
*
|
|
24
|
+
* Hard ban:
|
|
25
|
+
* - MUST NOT install / invoke / import any external skill or MCP server.
|
|
26
|
+
* - MUST NOT launch workers or mutate the target repo.
|
|
27
|
+
* - MUST NOT touch `src/services/openspec/artifact-boundary.ts`,
|
|
28
|
+
* `src/services/tech/`, or `src/services/rd-swarm/`.
|
|
29
|
+
*/
|
|
30
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
31
|
+
import { join } from 'node:path';
|
|
32
|
+
import { validateChangeId, planArtifactPath, buildWorkspaceUnavailable, } from '../openspec/artifact-boundary.js';
|
|
33
|
+
import { planRdSwarmGraph } from '../rd-swarm/rd-swarm-service.js';
|
|
34
|
+
const MAX_CAPABILITY_ENTRIES = 50;
|
|
35
|
+
const MIN_WORKERS = 25;
|
|
36
|
+
const MAX_WORKERS = 40;
|
|
37
|
+
export function buildAutonomousGoalPackage(input) {
|
|
38
|
+
const trimmedGoal = input.goal.trim();
|
|
39
|
+
if (!trimmedGoal) {
|
|
40
|
+
throw new Error('Goal must be non-empty');
|
|
41
|
+
}
|
|
42
|
+
const id = validateChangeId(input.changeId);
|
|
43
|
+
if (!id.ok) {
|
|
44
|
+
throw new Error(id.error.message);
|
|
45
|
+
}
|
|
46
|
+
const trimmedChangeId = id.value.changeId;
|
|
47
|
+
const doneCondition = input.mode === 'code'
|
|
48
|
+
? 'All checkpoints verified; reducer-report.md committed; validation-report.md and coverage-report.md pass.'
|
|
49
|
+
: 'All team-mode checkpoints verified; team review artifacts persisted; reducer summary committed.';
|
|
50
|
+
const resumeCondition = 'Re-read the persisted Peaks artifacts (NOT session state); verify the latest checkpoint; re-verify evidence before continuing.';
|
|
51
|
+
const nonGoals = [
|
|
52
|
+
'Real worker spawning (dry-run only — autonomyMode is hard-coded to dry-run).',
|
|
53
|
+
'No external skill / MCP installation — capability entries are metadata-only.',
|
|
54
|
+
'No target-repo source edits — artifacts land under .peaks/changes/<id>/.',
|
|
55
|
+
];
|
|
56
|
+
const riskNotes = [
|
|
57
|
+
'Treating /goal as durable would leak session state across runs; goalCommand is non-durable.',
|
|
58
|
+
'Worker queue is capped at 40; coordinate via checkpoints, not raw fan-out.',
|
|
59
|
+
];
|
|
60
|
+
const goalCommand = {
|
|
61
|
+
marker: '/goal',
|
|
62
|
+
nonDurable: true,
|
|
63
|
+
notes: 'Read-only marker; never persisted as run state. Re-derive from the goal-package on every resume.',
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
changeId: trimmedChangeId,
|
|
67
|
+
goal: trimmedGoal,
|
|
68
|
+
mode: input.mode,
|
|
69
|
+
autonomyMode: 'dry-run',
|
|
70
|
+
nonGoals,
|
|
71
|
+
doneCondition,
|
|
72
|
+
resumeCondition,
|
|
73
|
+
riskNotes,
|
|
74
|
+
goalCommand,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function readWorkspaceConfigArtifacts(workspaceRoot) {
|
|
78
|
+
// Read the project's workspace config file if present; the rd-swarm
|
|
79
|
+
// service expects a `workspace` field carrying the resolved config so
|
|
80
|
+
// its `getTechStatus` fallback can query the canonical path.
|
|
81
|
+
const configPath = join(workspaceRoot, '.peaks', 'workspace.json');
|
|
82
|
+
if (!existsSync(configPath))
|
|
83
|
+
return {};
|
|
84
|
+
try {
|
|
85
|
+
const raw = readFileSync(configPath, 'utf8');
|
|
86
|
+
const parsed = JSON.parse(raw);
|
|
87
|
+
return parsed.workspace ? { workspace: parsed.workspace } : {};
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return {};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function planSwarmArtifactPath(input) {
|
|
94
|
+
const result = planArtifactPath({
|
|
95
|
+
changeId: input.changeId,
|
|
96
|
+
workspaceRoot: input.workspaceRoot,
|
|
97
|
+
role: 'swarm',
|
|
98
|
+
requestId: input.requestId,
|
|
99
|
+
template: input.template,
|
|
100
|
+
});
|
|
101
|
+
if (!result.ok) {
|
|
102
|
+
return `${input.changeId}/swarm/${input.template.replace('<changeId>/swarm/', '')}`;
|
|
103
|
+
}
|
|
104
|
+
return result.value.jsonSafeRelativePath;
|
|
105
|
+
}
|
|
106
|
+
function deriveCheckpoints(goal, changeId, workspaceRoot) {
|
|
107
|
+
const requestId = 'autonomous';
|
|
108
|
+
return [
|
|
109
|
+
{
|
|
110
|
+
id: 'checkpoint-1-goal-package',
|
|
111
|
+
name: 'Goal package verified',
|
|
112
|
+
evidencePath: planSwarmArtifactPath({
|
|
113
|
+
changeId,
|
|
114
|
+
workspaceRoot,
|
|
115
|
+
requestId,
|
|
116
|
+
template: `<changeId>/swarm/evidence/goal-package.md`,
|
|
117
|
+
}),
|
|
118
|
+
status: 'pending',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: 'checkpoint-2-capability-reuse',
|
|
122
|
+
name: 'Capability reuse parsed',
|
|
123
|
+
evidencePath: planSwarmArtifactPath({
|
|
124
|
+
changeId,
|
|
125
|
+
workspaceRoot,
|
|
126
|
+
requestId,
|
|
127
|
+
template: `<changeId>/swarm/evidence/capability-reuse.md`,
|
|
128
|
+
}),
|
|
129
|
+
status: 'pending',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: 'checkpoint-3-worker-queue',
|
|
133
|
+
name: 'Worker queue composed',
|
|
134
|
+
evidencePath: planSwarmArtifactPath({
|
|
135
|
+
changeId,
|
|
136
|
+
workspaceRoot,
|
|
137
|
+
requestId,
|
|
138
|
+
template: `<changeId>/swarm/evidence/worker-queue.md`,
|
|
139
|
+
}),
|
|
140
|
+
status: 'pending',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'checkpoint-4-evidence-reports',
|
|
144
|
+
name: 'Validation + coverage + reducer reports generated',
|
|
145
|
+
evidencePath: planSwarmArtifactPath({
|
|
146
|
+
changeId,
|
|
147
|
+
workspaceRoot,
|
|
148
|
+
requestId,
|
|
149
|
+
template: `<changeId>/swarm/evidence/evidence-summary.md`,
|
|
150
|
+
}),
|
|
151
|
+
status: 'pending',
|
|
152
|
+
},
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
function deriveEvidenceRequirements(changeId, workspaceRoot) {
|
|
156
|
+
const requestId = 'autonomous';
|
|
157
|
+
return [
|
|
158
|
+
{
|
|
159
|
+
id: 'evidence-validation-report',
|
|
160
|
+
kind: 'validation-report',
|
|
161
|
+
path: planSwarmArtifactPath({
|
|
162
|
+
changeId,
|
|
163
|
+
workspaceRoot,
|
|
164
|
+
requestId,
|
|
165
|
+
template: `<changeId>/swarm/evidence/validation-report.md`,
|
|
166
|
+
}),
|
|
167
|
+
required: true,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: 'evidence-coverage-report',
|
|
171
|
+
kind: 'coverage-report',
|
|
172
|
+
path: planSwarmArtifactPath({
|
|
173
|
+
changeId,
|
|
174
|
+
workspaceRoot,
|
|
175
|
+
requestId,
|
|
176
|
+
template: `<changeId>/swarm/evidence/coverage-report.md`,
|
|
177
|
+
}),
|
|
178
|
+
required: true,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: 'evidence-reducer-report',
|
|
182
|
+
kind: 'reducer-report',
|
|
183
|
+
path: planSwarmArtifactPath({
|
|
184
|
+
changeId,
|
|
185
|
+
workspaceRoot,
|
|
186
|
+
requestId,
|
|
187
|
+
template: `<changeId>/swarm/reducer-report.md`,
|
|
188
|
+
}),
|
|
189
|
+
required: true,
|
|
190
|
+
},
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
function workerQueueFromGraph(graph) {
|
|
194
|
+
return graph.tasks.map((task) => ({
|
|
195
|
+
taskId: task.taskId,
|
|
196
|
+
wave: task.wave,
|
|
197
|
+
status: 'planned',
|
|
198
|
+
briefPath: `${graph.artifactRoot}/${task.outputs[0]}`,
|
|
199
|
+
dependsOn: [...task.dependsOn],
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
function localTechStatus(workspaceRoot, changeId, workspace) {
|
|
203
|
+
// Direct fs probe matching `rd-swarm-service.ts#localTechStatus` so the
|
|
204
|
+
// autonomous-swarm composer sees the same per-file presence check that
|
|
205
|
+
// the rd-swarm planner uses. The `getTechStatus` service wrapper requires
|
|
206
|
+
// a fully-configured `workspace` (the workspace-only contract); the
|
|
207
|
+
// rd-swarm planner's fs probe is the cross-mode fallback.
|
|
208
|
+
const root = join(workspaceRoot, changeId, 'rd', 'architecture');
|
|
209
|
+
const required = ['frontend-tech-doc.md', 'backend-tech-doc.md', 'tech-approval-record.md'];
|
|
210
|
+
const missing = required.filter((name) => !existsSync(join(root, name)));
|
|
211
|
+
if (missing.length > 0) {
|
|
212
|
+
return missing.includes('tech-approval-record.md') && missing.length === 1 ? 'missing-approval' : 'missing';
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
return readFileSync(join(root, 'tech-approval-record.md'), 'utf8').split(/\r?\n/).some((line) => line.trim() === 'status: approved') ? 'approved' : 'not-approved';
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return 'not-approved';
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
export function planCapabilityReuse(input) {
|
|
222
|
+
const docsDir = join(input.workspaceRoot, 'docs');
|
|
223
|
+
const warnings = [];
|
|
224
|
+
const entries = [];
|
|
225
|
+
if (!existsSync(docsDir)) {
|
|
226
|
+
return { entries, truncated: false, warnings };
|
|
227
|
+
}
|
|
228
|
+
const files = [
|
|
229
|
+
{ source: 'accessRepo.md', trustLevel: 'internal' },
|
|
230
|
+
{ source: 'mcpServer.md', trustLevel: 'external' },
|
|
231
|
+
];
|
|
232
|
+
for (const file of files) {
|
|
233
|
+
const fullPath = join(docsDir, file.source);
|
|
234
|
+
if (!existsSync(fullPath))
|
|
235
|
+
continue;
|
|
236
|
+
let raw;
|
|
237
|
+
try {
|
|
238
|
+
raw = readFileSync(fullPath, 'utf8');
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
// Match markdown bullets of the form `- name: purpose` or `* name: purpose`.
|
|
244
|
+
const lines = raw.split(/\r?\n/);
|
|
245
|
+
for (const line of lines) {
|
|
246
|
+
if (entries.length >= MAX_CAPABILITY_ENTRIES)
|
|
247
|
+
break;
|
|
248
|
+
const match = line.match(/^\s*[-*]\s+([A-Za-z0-9._-]+)\s*:\s*(.+?)\s*$/);
|
|
249
|
+
if (!match)
|
|
250
|
+
continue;
|
|
251
|
+
const name = match[1];
|
|
252
|
+
const purpose = match[2];
|
|
253
|
+
if (!name || !purpose)
|
|
254
|
+
continue;
|
|
255
|
+
entries.push({
|
|
256
|
+
source: file.source,
|
|
257
|
+
purpose,
|
|
258
|
+
trustLevel: file.trustLevel,
|
|
259
|
+
activation: `metadata-only — read from ${file.source}, never invoked`,
|
|
260
|
+
risk: file.source === 'mcpServer.md' ? 'external' : 'internal',
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const truncated = entries.length >= MAX_CAPABILITY_ENTRIES;
|
|
265
|
+
if (truncated) {
|
|
266
|
+
warnings.push('TRUNCATED');
|
|
267
|
+
}
|
|
268
|
+
return { entries, truncated, warnings };
|
|
269
|
+
}
|
|
270
|
+
export function buildResumeInstructions(plan) {
|
|
271
|
+
const steps = [
|
|
272
|
+
'Re-read artifact paths under .peaks/changes/<changeId>/swarm/ — do not trust session state.',
|
|
273
|
+
'Verify the latest checkpoint (status: verified | pending | failed) before continuing.',
|
|
274
|
+
'Re-verify evidence: validation-report.md, coverage-report.md, reducer-report.md.',
|
|
275
|
+
'Re-derive the goal package from the persisted request; the /goal marker is non-durable.',
|
|
276
|
+
];
|
|
277
|
+
const checkpointStates = plan.checkpoints.map((checkpoint) => ({
|
|
278
|
+
id: checkpoint.id,
|
|
279
|
+
status: checkpoint.status,
|
|
280
|
+
}));
|
|
281
|
+
return {
|
|
282
|
+
summary: plan.available
|
|
283
|
+
? 'Plan is available; resume by re-deriving the goal package and verifying the next pending checkpoint.'
|
|
284
|
+
: 'Plan is blocked; resume by re-running planAutonomousRdSwarm and addressing the gateStatus / blockedReasons.',
|
|
285
|
+
steps,
|
|
286
|
+
checkpointStates,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
export function planAutonomousRdSwarm(input) {
|
|
290
|
+
const id = validateChangeId(input.changeId);
|
|
291
|
+
if (!id.ok) {
|
|
292
|
+
const blocked = {
|
|
293
|
+
changeId: input.changeId,
|
|
294
|
+
goal: input.goal.trim(),
|
|
295
|
+
mode: input.mode,
|
|
296
|
+
autonomyMode: 'dry-run',
|
|
297
|
+
available: false,
|
|
298
|
+
goalPackage: buildAutonomousGoalPackage(input),
|
|
299
|
+
capabilityReuse: planCapabilityReuse({ workspaceRoot: input.workspaceRoot }),
|
|
300
|
+
checkpoints: deriveCheckpoints(input.goal, input.changeId, input.workspaceRoot),
|
|
301
|
+
workerQueue: [],
|
|
302
|
+
evidence: deriveEvidenceRequirements(input.changeId, input.workspaceRoot),
|
|
303
|
+
artifactRoot: `${input.changeId}/swarm`,
|
|
304
|
+
gateStatus: { techApprovalRequired: input.requiresTechApproval === true, techStatus: 'unavailable', ...(input.requiresTechApproval === true ? {} : { skipReason: 'tech-gate-not-required' }) },
|
|
305
|
+
blockedReasons: [id.error.code],
|
|
306
|
+
nextActions: [id.error.message],
|
|
307
|
+
resumeInstructions: {
|
|
308
|
+
summary: 'Plan is blocked; resume after fixing the change-id format.',
|
|
309
|
+
steps: [],
|
|
310
|
+
checkpointStates: [],
|
|
311
|
+
},
|
|
312
|
+
};
|
|
313
|
+
return blocked;
|
|
314
|
+
}
|
|
315
|
+
const trimmedGoal = input.goal.trim();
|
|
316
|
+
if (!trimmedGoal) {
|
|
317
|
+
const blocked = {
|
|
318
|
+
changeId: id.value.changeId,
|
|
319
|
+
goal: trimmedGoal,
|
|
320
|
+
mode: input.mode,
|
|
321
|
+
autonomyMode: 'dry-run',
|
|
322
|
+
available: false,
|
|
323
|
+
goalPackage: buildAutonomousGoalPackage(input),
|
|
324
|
+
capabilityReuse: planCapabilityReuse({ workspaceRoot: input.workspaceRoot }),
|
|
325
|
+
checkpoints: deriveCheckpoints(input.goal, id.value.changeId, input.workspaceRoot),
|
|
326
|
+
workerQueue: [],
|
|
327
|
+
evidence: deriveEvidenceRequirements(id.value.changeId, input.workspaceRoot),
|
|
328
|
+
artifactRoot: `${id.value.changeId}/swarm`,
|
|
329
|
+
gateStatus: { techApprovalRequired: input.requiresTechApproval === true, techStatus: 'unavailable', ...(input.requiresTechApproval === true ? {} : { skipReason: 'tech-gate-not-required' }) },
|
|
330
|
+
blockedReasons: ['INVALID_GOAL'],
|
|
331
|
+
nextActions: ['Use a non-empty goal'],
|
|
332
|
+
resumeInstructions: {
|
|
333
|
+
summary: 'Plan is blocked; resume by providing a non-empty goal.',
|
|
334
|
+
steps: [],
|
|
335
|
+
checkpointStates: [],
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
return blocked;
|
|
339
|
+
}
|
|
340
|
+
const changeId = id.value.changeId;
|
|
341
|
+
const workspaceArtifacts = readWorkspaceConfigArtifacts(input.workspaceRoot);
|
|
342
|
+
const requested = input.maxWorkers;
|
|
343
|
+
if (!Number.isInteger(requested) || requested < 1) {
|
|
344
|
+
const blocked = {
|
|
345
|
+
changeId,
|
|
346
|
+
goal: trimmedGoal,
|
|
347
|
+
mode: input.mode,
|
|
348
|
+
autonomyMode: 'dry-run',
|
|
349
|
+
available: false,
|
|
350
|
+
goalPackage: buildAutonomousGoalPackage(input),
|
|
351
|
+
capabilityReuse: planCapabilityReuse({ workspaceRoot: input.workspaceRoot }),
|
|
352
|
+
checkpoints: deriveCheckpoints(trimmedGoal, changeId, input.workspaceRoot),
|
|
353
|
+
workerQueue: [],
|
|
354
|
+
evidence: deriveEvidenceRequirements(changeId, input.workspaceRoot),
|
|
355
|
+
artifactRoot: `${changeId}/swarm`,
|
|
356
|
+
gateStatus: { techApprovalRequired: input.requiresTechApproval === true, techStatus: 'unavailable', ...(input.requiresTechApproval === true ? {} : { skipReason: 'tech-gate-not-required' }) },
|
|
357
|
+
blockedReasons: ['INVALID_MAX_WORKERS'],
|
|
358
|
+
nextActions: ['Use a positive integer for max-workers.'],
|
|
359
|
+
resumeInstructions: {
|
|
360
|
+
summary: 'Plan is blocked; resume by setting a positive max-workers value.',
|
|
361
|
+
steps: [],
|
|
362
|
+
checkpointStates: [],
|
|
363
|
+
},
|
|
364
|
+
};
|
|
365
|
+
return blocked;
|
|
366
|
+
}
|
|
367
|
+
const target = Math.min(requested, MAX_WORKERS);
|
|
368
|
+
const requiresTechApproval = input.requiresTechApproval === true;
|
|
369
|
+
let graph;
|
|
370
|
+
try {
|
|
371
|
+
graph = planRdSwarmGraph({
|
|
372
|
+
skill: 'rd',
|
|
373
|
+
changeId,
|
|
374
|
+
goal: trimmedGoal,
|
|
375
|
+
maxWorkers: target,
|
|
376
|
+
dryRun: true,
|
|
377
|
+
workspaceRoot: input.workspaceRoot,
|
|
378
|
+
requiresTechApproval,
|
|
379
|
+
...(workspaceArtifacts.workspace ? { workspace: workspaceArtifacts.workspace } : {}),
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
graph = {
|
|
384
|
+
changeId,
|
|
385
|
+
goal: trimmedGoal,
|
|
386
|
+
available: false,
|
|
387
|
+
workerTarget: target,
|
|
388
|
+
waves: [],
|
|
389
|
+
tasks: [],
|
|
390
|
+
conflictGroups: [],
|
|
391
|
+
artifactRoot: `${changeId}/swarm`,
|
|
392
|
+
outputs: { taskGraph: `${changeId}/swarm/task-graph.json`, waveManifests: [], workerBriefs: [], reducerReport: `${changeId}/swarm/reducer-report.md` },
|
|
393
|
+
gateStatus: { techApprovalRequired: requiresTechApproval, techStatus: 'unavailable', ...(requiresTechApproval ? {} : { skipReason: 'tech-gate-not-required' }) },
|
|
394
|
+
blockedReasons: [],
|
|
395
|
+
nextActions: [],
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
const blockedReasons = [...graph.blockedReasons];
|
|
399
|
+
if (requested < MIN_WORKERS && !blockedReasons.includes('SMALL_SCOPE')) {
|
|
400
|
+
blockedReasons.push('SMALL_SCOPE');
|
|
401
|
+
}
|
|
402
|
+
if (requested > MAX_WORKERS && !blockedReasons.includes('WORKER_CAP_EXCEEDED')) {
|
|
403
|
+
blockedReasons.push('WORKER_CAP_EXCEEDED');
|
|
404
|
+
}
|
|
405
|
+
const techStatus = localTechStatus(input.workspaceRoot, changeId, workspaceArtifacts.workspace);
|
|
406
|
+
const gateStatus = {
|
|
407
|
+
techApprovalRequired: requiresTechApproval,
|
|
408
|
+
techStatus,
|
|
409
|
+
...(requiresTechApproval ? {} : { skipReason: 'tech-gate-not-required' }),
|
|
410
|
+
};
|
|
411
|
+
const available = graph.available && !blockedReasons.includes('SMALL_SCOPE') && !blockedReasons.includes('INVALID_MAX_WORKERS');
|
|
412
|
+
const nextActions = [];
|
|
413
|
+
if (blockedReasons.includes('WORKER_CAP_EXCEEDED')) {
|
|
414
|
+
nextActions.push('Worker target was capped at 40.');
|
|
415
|
+
}
|
|
416
|
+
if (requiresTechApproval && techStatus !== 'approved') {
|
|
417
|
+
nextActions.push('Review and approve the technical plan before running the autonomous swarm.');
|
|
418
|
+
}
|
|
419
|
+
const goalPackage = buildAutonomousGoalPackage(input);
|
|
420
|
+
const capabilityReuse = planCapabilityReuse({ workspaceRoot: input.workspaceRoot });
|
|
421
|
+
const checkpoints = deriveCheckpoints(trimmedGoal, changeId, input.workspaceRoot);
|
|
422
|
+
const evidence = deriveEvidenceRequirements(changeId, input.workspaceRoot);
|
|
423
|
+
const workerQueue = workerQueueFromGraph(graph);
|
|
424
|
+
const draft = {
|
|
425
|
+
changeId,
|
|
426
|
+
goal: trimmedGoal,
|
|
427
|
+
mode: input.mode,
|
|
428
|
+
autonomyMode: 'dry-run',
|
|
429
|
+
available,
|
|
430
|
+
goalPackage,
|
|
431
|
+
capabilityReuse,
|
|
432
|
+
checkpoints,
|
|
433
|
+
workerQueue,
|
|
434
|
+
evidence,
|
|
435
|
+
artifactRoot: `${changeId}/swarm`,
|
|
436
|
+
gateStatus,
|
|
437
|
+
blockedReasons,
|
|
438
|
+
nextActions,
|
|
439
|
+
resumeInstructions: { summary: '', steps: [], checkpointStates: [] },
|
|
440
|
+
};
|
|
441
|
+
draft.resumeInstructions = buildResumeInstructions(draft);
|
|
442
|
+
return draft;
|
|
443
|
+
}
|
|
444
|
+
// Re-export the workspace-unavailable response so the CLI can map an
|
|
445
|
+
// unconfigured artifact workspace to the standard envelope.
|
|
446
|
+
export { buildWorkspaceUnavailable };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rid-011 — peaks changeset check hard gate (Phase 4 slice 2).
|
|
3
|
+
*
|
|
4
|
+
* Module path: src/services/changeset/changeset-check-service.ts
|
|
5
|
+
* Mirror of publish.yml gate-changeset step (lines 220-243). Hard-gate,
|
|
6
|
+
* no warning mode, no opt-out. Auto-wired as step 0 of `peaks release
|
|
7
|
+
* canary` and `peaks release hotfix` BEFORE the rid-010 precheck guard.
|
|
8
|
+
*
|
|
9
|
+
* Decoupling note: rid-010 Layer C (`runChangesetStaged`) is ad-hoc
|
|
10
|
+
* precheck (warning by default, --strict upgrade); rid-011 hard gate is
|
|
11
|
+
* unconditional. Both filters inspect `.changeset/*.md` (excluding
|
|
12
|
+
* README.md) but with different policy semantics.
|
|
13
|
+
*/
|
|
14
|
+
export type ChangesetGateState = 'staged-empty' | 'staged-present' | 'dir-missing';
|
|
15
|
+
export interface ChangesetHardGateEnvelope {
|
|
16
|
+
readonly ok: boolean;
|
|
17
|
+
readonly state: ChangesetGateState;
|
|
18
|
+
readonly stagedFiles: readonly string[];
|
|
19
|
+
readonly root: string;
|
|
20
|
+
readonly snapshotAt: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function runChangesetHardGate(projectRoot: string): ChangesetHardGateEnvelope;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rid-011 — peaks changeset check hard gate (Phase 4 slice 2).
|
|
3
|
+
*
|
|
4
|
+
* Module path: src/services/changeset/changeset-check-service.ts
|
|
5
|
+
* Mirror of publish.yml gate-changeset step (lines 220-243). Hard-gate,
|
|
6
|
+
* no warning mode, no opt-out. Auto-wired as step 0 of `peaks release
|
|
7
|
+
* canary` and `peaks release hotfix` BEFORE the rid-010 precheck guard.
|
|
8
|
+
*
|
|
9
|
+
* Decoupling note: rid-010 Layer C (`runChangesetStaged`) is ad-hoc
|
|
10
|
+
* precheck (warning by default, --strict upgrade); rid-011 hard gate is
|
|
11
|
+
* unconditional. Both filters inspect `.changeset/*.md` (excluding
|
|
12
|
+
* README.md) but with different policy semantics.
|
|
13
|
+
*/
|
|
14
|
+
import { readdirSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
export function runChangesetHardGate(projectRoot) {
|
|
17
|
+
const dir = join(projectRoot, '.changeset');
|
|
18
|
+
let files;
|
|
19
|
+
try {
|
|
20
|
+
files = readdirSync(dir);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err.code === 'ENOENT') {
|
|
24
|
+
return {
|
|
25
|
+
ok: true,
|
|
26
|
+
state: 'dir-missing',
|
|
27
|
+
stagedFiles: [],
|
|
28
|
+
root: projectRoot,
|
|
29
|
+
snapshotAt: new Date().toISOString()
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Unexpected I/O — fail closed (do NOT silently report clean).
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
const staged = files
|
|
36
|
+
.filter((f) => f.endsWith('.md') && f !== 'README.md')
|
|
37
|
+
.sort();
|
|
38
|
+
const ok = staged.length === 0;
|
|
39
|
+
const state = ok ? 'staged-empty' : 'staged-present';
|
|
40
|
+
return {
|
|
41
|
+
ok,
|
|
42
|
+
state,
|
|
43
|
+
stagedFiles: staged,
|
|
44
|
+
root: projectRoot,
|
|
45
|
+
snapshotAt: new Date().toISOString()
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 2026-07-28 — auto-compact mode table for 24h long-run awareness.
|
|
3
|
+
*
|
|
4
|
+
* The default `'standard'` mode preserves the v2.13.0 zero-pause contract
|
|
5
|
+
* thresholds (preCompact=0.85, redLine=0.95). The `'partial'` mode fires
|
|
6
|
+
* earlier for 24h long-run scenarios where the user has explicitly
|
|
7
|
+
* opted into higher compaction cadence via `peaks session 24h-mode`.
|
|
8
|
+
*
|
|
9
|
+
* Slice 2026-07-29-context-evaluation-accuracy Part 22: a new
|
|
10
|
+
* `autoFire` tier is added between soft-warn and preCompact. peaks-loop
|
|
11
|
+
* preempts and runs `peaks compact auto --execute` itself when
|
|
12
|
+
* context crosses `autoFire`; the LLM is NOT asked to "decide"
|
|
13
|
+
* (the LLM-judged 0.85–0.95 zone was the source of false-positive
|
|
14
|
+
* "context too low" reports at 60%+ free — the LLM was guessing).
|
|
15
|
+
*
|
|
16
|
+
* The mode only changes the THRESHOLDS at which the orchestrator fires.
|
|
17
|
+
* The actual partial-compaction behaviour (dropping low-priority context
|
|
18
|
+
* layers) is a follow-up slice; for now `partial` mode is logged +
|
|
19
|
+
* decision-emitted, no separate compaction pathway.
|
|
20
|
+
*/
|
|
21
|
+
export type AutoCompactMode = 'standard' | 'partial';
|
|
22
|
+
export declare const AUTO_COMPACT_THRESHOLDS: Readonly<Record<AutoCompactMode, {
|
|
23
|
+
readonly autoFire: number;
|
|
24
|
+
readonly preCompact: number;
|
|
25
|
+
readonly redLine: number;
|
|
26
|
+
}>>;
|
|
27
|
+
export declare function thresholdFor(mode: AutoCompactMode, kind: 'autoFire' | 'preCompact' | 'redLine'): number;
|
|
28
|
+
export declare function isValidMode(value: string): value is AutoCompactMode;
|
|
29
|
+
export declare function describeMode(mode: AutoCompactMode): string;
|
|
30
|
+
export declare function isPartialModeEligible(contextPercent: number): boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 2026-07-28 — auto-compact mode table for 24h long-run awareness.
|
|
3
|
+
*
|
|
4
|
+
* The default `'standard'` mode preserves the v2.13.0 zero-pause contract
|
|
5
|
+
* thresholds (preCompact=0.85, redLine=0.95). The `'partial'` mode fires
|
|
6
|
+
* earlier for 24h long-run scenarios where the user has explicitly
|
|
7
|
+
* opted into higher compaction cadence via `peaks session 24h-mode`.
|
|
8
|
+
*
|
|
9
|
+
* Slice 2026-07-29-context-evaluation-accuracy Part 22: a new
|
|
10
|
+
* `autoFire` tier is added between soft-warn and preCompact. peaks-loop
|
|
11
|
+
* preempts and runs `peaks compact auto --execute` itself when
|
|
12
|
+
* context crosses `autoFire`; the LLM is NOT asked to "decide"
|
|
13
|
+
* (the LLM-judged 0.85–0.95 zone was the source of false-positive
|
|
14
|
+
* "context too low" reports at 60%+ free — the LLM was guessing).
|
|
15
|
+
*
|
|
16
|
+
* The mode only changes the THRESHOLDS at which the orchestrator fires.
|
|
17
|
+
* The actual partial-compaction behaviour (dropping low-priority context
|
|
18
|
+
* layers) is a follow-up slice; for now `partial` mode is logged +
|
|
19
|
+
* decision-emitted, no separate compaction pathway.
|
|
20
|
+
*/
|
|
21
|
+
export const AUTO_COMPACT_THRESHOLDS = {
|
|
22
|
+
standard: { autoFire: 0.80, preCompact: 0.85, redLine: 0.95 },
|
|
23
|
+
partial: { autoFire: 0.65, preCompact: 0.70, redLine: 0.85 }
|
|
24
|
+
};
|
|
25
|
+
export function thresholdFor(mode, kind) {
|
|
26
|
+
return AUTO_COMPACT_THRESHOLDS[mode][kind];
|
|
27
|
+
}
|
|
28
|
+
export function isValidMode(value) {
|
|
29
|
+
return value === 'standard' || value === 'partial';
|
|
30
|
+
}
|
|
31
|
+
export function describeMode(mode) {
|
|
32
|
+
return mode === 'standard'
|
|
33
|
+
? 'standard (0.85/0.95 — v2.13.0 zero-pause contract)'
|
|
34
|
+
: 'partial (0.70/0.85 — 24h long-run mode)';
|
|
35
|
+
}
|
|
36
|
+
export function isPartialModeEligible(contextPercent) {
|
|
37
|
+
return contextPercent >= AUTO_COMPACT_THRESHOLDS.partial.preCompact;
|
|
38
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type CompactTrigger, type ConvergencePlan, type InFlightBatchProbe, type AutoCompactResult } from '../context/auto-compact-types.js';
|
|
2
2
|
import type { CompactTarget } from '../context/auto-compact-dispatcher.js';
|
|
3
|
+
import { type AutoCompactMode } from './auto-compact-modes.js';
|
|
3
4
|
export interface AutoCompactInput {
|
|
4
5
|
/** Project root for context (default cwd). */
|
|
5
6
|
readonly projectRoot: string;
|
|
@@ -27,17 +28,28 @@ export interface AutoCompactInput {
|
|
|
27
28
|
* `'sub-agent'` to preserve the legacy shell-spawn behaviour.
|
|
28
29
|
*/
|
|
29
30
|
readonly target?: CompactTarget | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Slice 2026-07-28 (rid-027): auto-compact mode. Default
|
|
33
|
+
* `'standard'` (v2.13.0 zero-pause contract, 0.85/0.95). `'partial'`
|
|
34
|
+
* fires earlier (0.70/0.85) for 24h long-run scenarios. CLI flag
|
|
35
|
+
* `--mode <mode>` overrides the 24h-mode auto-detection.
|
|
36
|
+
*/
|
|
37
|
+
readonly mode?: AutoCompactMode | undefined;
|
|
30
38
|
}
|
|
31
39
|
/**
|
|
32
40
|
* Map a context ratio to a `CompactTrigger` action. Pure; the side
|
|
33
41
|
* effects (checkpoint + IDE dispatch) live in `runAutoCompact`. Two
|
|
34
|
-
* tiers:
|
|
42
|
+
* tiers (standard mode; partial mode shifts both thresholds):
|
|
43
|
+
*
|
|
44
|
+
* - ratio < preCompact → 'none' or 'soft-warn'
|
|
45
|
+
* - ratio ≥ preCompact → 'pre-compact' (async-friendly path)
|
|
46
|
+
* - ratio ≥ redLine → 'red-line' (synchronous gate)
|
|
35
47
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
48
|
+
* Slice 2026-07-28 (rid-027): `mode` selects the threshold table.
|
|
49
|
+
* Default `'standard'` (0.85/0.95). `'partial'` (0.70/0.85) is used
|
|
50
|
+
* when 24h long-run mode is active or `--mode partial` is passed.
|
|
39
51
|
*/
|
|
40
|
-
export declare function evaluateCompactTrigger(ratio: number): CompactTrigger;
|
|
52
|
+
export declare function evaluateCompactTrigger(ratio: number, mode?: AutoCompactMode): CompactTrigger;
|
|
41
53
|
/**
|
|
42
54
|
* Decide whether to run the auto-compact flow. Pure function for the
|
|
43
55
|
* decision; side effects (checkpoint + IDE dispatch) live in
|
|
@@ -55,6 +67,7 @@ export declare function evaluateAutoCompactDecision(input: {
|
|
|
55
67
|
inFlightBatch?: InFlightBatchProbe | undefined;
|
|
56
68
|
force?: boolean | undefined;
|
|
57
69
|
bypassRedLine?: boolean | undefined;
|
|
70
|
+
mode?: AutoCompactMode | undefined;
|
|
58
71
|
}): {
|
|
59
72
|
shouldCompact: boolean;
|
|
60
73
|
reason: 'below-threshold' | 'in-flight-batch' | 'pre-compact' | 'red-line';
|
|
@@ -96,3 +109,28 @@ export declare function buildConvergencePlan(input: {
|
|
|
96
109
|
export declare function runAutoCompact(input: AutoCompactInput): Promise<AutoCompactResult>;
|
|
97
110
|
/** Re-export for callers that need to surface the trigger shape. */
|
|
98
111
|
export type { CompactTrigger, ConvergencePlan, InFlightBatchProbe, AutoCompactResult };
|
|
112
|
+
/**
|
|
113
|
+
* Slice 2026-07-30-compact-visibility: JSONL history of every
|
|
114
|
+
* auto-compact dispatch. Appended at the end of `executeAutoCompact`
|
|
115
|
+
* so the new 'peaks compact history' CLI + the
|
|
116
|
+
* 'peaks statusline compact' indicator have a record. One file
|
|
117
|
+
* per session (gitignored under `.peaks/_runtime/<sessionId>/`).
|
|
118
|
+
*/
|
|
119
|
+
export interface CompactHistoryEvent {
|
|
120
|
+
readonly schemaVersion: 1;
|
|
121
|
+
readonly ts: string;
|
|
122
|
+
readonly target: 'main' | 'sub-agent' | 'worker';
|
|
123
|
+
readonly mode: 'standard' | 'partial' | 'aggressive';
|
|
124
|
+
readonly ide: string;
|
|
125
|
+
readonly pathway: string;
|
|
126
|
+
readonly beforeRatio: number;
|
|
127
|
+
readonly redLine: boolean;
|
|
128
|
+
readonly ok: boolean;
|
|
129
|
+
readonly checkpointPath: string;
|
|
130
|
+
readonly dispatchMessage: string;
|
|
131
|
+
}
|
|
132
|
+
export declare function appendCompactHistoryEvent(input: {
|
|
133
|
+
readonly projectRoot: string;
|
|
134
|
+
readonly sessionId: string;
|
|
135
|
+
readonly event: CompactHistoryEvent;
|
|
136
|
+
}): void;
|