peaks-loop 4.0.0-beta.9 → 4.0.3
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 +572 -234
- package/README-en.md +67 -30
- package/README.md +67 -30
- 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 +91 -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,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow — public type declarations for autonomous workflow planning.
|
|
3
|
+
*
|
|
4
|
+
* Pure type module. No runtime helpers, no constants. The slimmed
|
|
5
|
+
* `workflow-autonomous-service.ts` re-exports the types so existing
|
|
6
|
+
* import paths compile unchanged (rid-006 split).
|
|
7
|
+
*
|
|
8
|
+
* Per PRD EC-1, this module is consumed by both
|
|
9
|
+
* `workflow-autonomous-service.ts` and
|
|
10
|
+
* `workflow-autonomous-resume-helpers.ts` via `import type`. Importing
|
|
11
|
+
* this types-only module breaks the existing
|
|
12
|
+
* resume-helpers ↔ autonomous-service runtime cycle (both modules
|
|
13
|
+
* previously re-exported `AutonomousResumePlan` from each other).
|
|
14
|
+
*
|
|
15
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
16
|
+
*/
|
|
17
|
+
import type { CapabilityItemType } from '../recommendations/recommendation-types.js';
|
|
18
|
+
import type { ModelProviderConfig, WorkspaceConfig } from '../config/config-types.js';
|
|
19
|
+
import type { RdPlanResult } from '../rd/rd-service.js';
|
|
20
|
+
import type { CodeMode, WorkflowMode, WorkflowRouterPlan } from './workflow-router-service.js';
|
|
21
|
+
export type CapabilitySurface = 'skill' | 'mcp' | 'plugin' | 'expert';
|
|
22
|
+
export type CapabilityPurpose = 'code-review' | 'security-review' | 'coding-standards' | 'docs-lookup' | 'browser-validation' | 'browser-debug' | 'design-context' | 'design-source' | 'code-search' | 'database-inspection' | 'browser-agent' | 'worker-guidance' | 'memory' | 'context-management' | 'ui-components' | 'spec-workflow' | 'repo-intelligence' | 'openspec' | 'workflow-methodology' | 'workflow-reference' | 'workflow-guidance' | 'product-guidance' | 'design-reference' | 'ui-reference' | 'engineering-guidance' | 'typescript-guidance' | 'quality-guidance' | 'skill-pack' | 'external-skill' | 'design-critique' | 'design-guidance' | 'cloud-skill-pack';
|
|
23
|
+
export type CapabilityActivation = 'available' | 'needs-install' | 'needs-credentials' | 'not-active';
|
|
24
|
+
export type CapabilityTrustLevel = 'local' | 'user-curated' | 'third-party';
|
|
25
|
+
export type CapabilityCandidate = {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly source: string;
|
|
28
|
+
readonly purpose: CapabilityPurpose;
|
|
29
|
+
readonly surface: CapabilitySurface;
|
|
30
|
+
readonly kind: CapabilitySurface;
|
|
31
|
+
readonly sourceType: CapabilityItemType;
|
|
32
|
+
readonly trustLevel: CapabilityTrustLevel;
|
|
33
|
+
readonly activation: CapabilityActivation;
|
|
34
|
+
readonly risk: readonly string[];
|
|
35
|
+
};
|
|
36
|
+
export type AutonomousWorkflowRequest = {
|
|
37
|
+
readonly mode: WorkflowMode;
|
|
38
|
+
readonly codeMode?: CodeMode;
|
|
39
|
+
readonly sessionId: string;
|
|
40
|
+
readonly goal: string;
|
|
41
|
+
readonly maxWorkers?: number;
|
|
42
|
+
readonly dryRun: true;
|
|
43
|
+
readonly artifactWorkspacePath?: string;
|
|
44
|
+
readonly workspace?: WorkspaceConfig;
|
|
45
|
+
readonly config?: {
|
|
46
|
+
readonly economyMode?: boolean;
|
|
47
|
+
readonly swarmMode?: boolean;
|
|
48
|
+
readonly providers?: ModelProviderConfig;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export type AutonomousGoalPackage = {
|
|
52
|
+
readonly sessionId: string;
|
|
53
|
+
readonly goal: string;
|
|
54
|
+
readonly nonGoals: readonly string[];
|
|
55
|
+
readonly preservedBehavior: readonly string[];
|
|
56
|
+
readonly acceptanceCriteria: readonly string[];
|
|
57
|
+
readonly doneCondition: string;
|
|
58
|
+
readonly resumeCondition: string;
|
|
59
|
+
readonly riskNotes: readonly string[];
|
|
60
|
+
};
|
|
61
|
+
export type AutonomousCapabilityPlan = {
|
|
62
|
+
readonly sources: readonly string[];
|
|
63
|
+
readonly policy: readonly string[];
|
|
64
|
+
readonly candidates: readonly CapabilityCandidate[];
|
|
65
|
+
readonly surfaces: readonly CapabilitySurface[];
|
|
66
|
+
readonly surfaceSummary: Record<CapabilitySurface, number>;
|
|
67
|
+
};
|
|
68
|
+
export type AutonomousResumePlan = {
|
|
69
|
+
readonly status: 'preview' | 'ready';
|
|
70
|
+
readonly checkpoints: readonly string[];
|
|
71
|
+
readonly requiredArtifacts: readonly string[];
|
|
72
|
+
readonly resumeInstructions: string;
|
|
73
|
+
};
|
|
74
|
+
export type AutonomousGoalCommand = {
|
|
75
|
+
readonly command: string;
|
|
76
|
+
readonly durable: false;
|
|
77
|
+
readonly reason: string;
|
|
78
|
+
};
|
|
79
|
+
export type AutonomousStoragePlan = {
|
|
80
|
+
readonly scope: 'user-local';
|
|
81
|
+
readonly artifactWorkspacePath: string | null;
|
|
82
|
+
readonly memoryBackupPath: string | null;
|
|
83
|
+
};
|
|
84
|
+
export type AutonomousMvpPackage = {
|
|
85
|
+
readonly mode: WorkflowMode;
|
|
86
|
+
readonly codeMode: CodeMode | undefined;
|
|
87
|
+
readonly executionMode: 'preview';
|
|
88
|
+
readonly dryRun: true;
|
|
89
|
+
readonly routePolicy: WorkflowRouterPlan['routePolicy'];
|
|
90
|
+
readonly rdWaveNames: readonly string[];
|
|
91
|
+
readonly capabilitySurfaces: readonly CapabilitySurface[];
|
|
92
|
+
readonly capabilityCountBySurface: Record<CapabilitySurface, number>;
|
|
93
|
+
readonly ready: boolean;
|
|
94
|
+
};
|
|
95
|
+
export type AutonomousWorkflowPlan = {
|
|
96
|
+
readonly available: boolean;
|
|
97
|
+
readonly behavior: 'preview' | 'ready';
|
|
98
|
+
readonly sessionId: string;
|
|
99
|
+
readonly goal: string;
|
|
100
|
+
readonly mode: WorkflowMode;
|
|
101
|
+
readonly dryRun: true;
|
|
102
|
+
readonly goalPackage: AutonomousGoalPackage;
|
|
103
|
+
readonly goalCommand: AutonomousGoalCommand;
|
|
104
|
+
readonly capabilityPlan: AutonomousCapabilityPlan;
|
|
105
|
+
readonly storagePlan: AutonomousStoragePlan;
|
|
106
|
+
readonly routePlan: WorkflowRouterPlan;
|
|
107
|
+
readonly modelAssignments: WorkflowRouterPlan['modelAssignments'];
|
|
108
|
+
readonly rdPlan: RdPlanResult;
|
|
109
|
+
readonly resumePlan: AutonomousResumePlan;
|
|
110
|
+
readonly mvpPackage: AutonomousMvpPackage;
|
|
111
|
+
readonly constraints: readonly string[];
|
|
112
|
+
readonly blockedReasons: readonly string[];
|
|
113
|
+
readonly nextActions: readonly string[];
|
|
114
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow — public type declarations for autonomous workflow planning.
|
|
3
|
+
*
|
|
4
|
+
* Pure type module. No runtime helpers, no constants. The slimmed
|
|
5
|
+
* `workflow-autonomous-service.ts` re-exports the types so existing
|
|
6
|
+
* import paths compile unchanged (rid-006 split).
|
|
7
|
+
*
|
|
8
|
+
* Per PRD EC-1, this module is consumed by both
|
|
9
|
+
* `workflow-autonomous-service.ts` and
|
|
10
|
+
* `workflow-autonomous-resume-helpers.ts` via `import type`. Importing
|
|
11
|
+
* this types-only module breaks the existing
|
|
12
|
+
* resume-helpers ↔ autonomous-service runtime cycle (both modules
|
|
13
|
+
* previously re-exported `AutonomousResumePlan` from each other).
|
|
14
|
+
*
|
|
15
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
// Note: `CapabilityAvailabilityStatus` is referenced by the orchestrator's
|
|
19
|
+
// helper functions. It is imported (not re-exported) from the
|
|
20
|
+
// recommendation-types module — keep this types module pure to the
|
|
21
|
+
// declarations originally declared in `workflow-autonomous-service.ts`.
|
|
@@ -78,30 +78,32 @@ function annotateSteps(steps, codeMode) {
|
|
|
78
78
|
};
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
-
function createSoloSteps(executionModelId, strongestModelId) {
|
|
81
|
+
function createSoloSteps(executionModelId, strongestModelId, economyMode) {
|
|
82
|
+
const executionTier = economyMode === false ? 'top-tier' : 'mid-tier';
|
|
82
83
|
return [
|
|
83
84
|
step({ id: 'code-product-direction', stage: 'product-direction', owner: 'peaks-code', modelTier: 'top-tier', reason: 'Product direction needs strong judgment before execution work is delegated.', dependsOn: [] }, executionModelId, strongestModelId),
|
|
84
85
|
step({ id: 'code-design-direction', stage: 'design-direction', owner: 'peaks-code', modelTier: 'top-tier', reason: 'Design direction uses the recommended default before cheaper implementation work.', dependsOn: ['code-product-direction'] }, executionModelId, strongestModelId),
|
|
85
86
|
step({ id: 'code-tech-direction', stage: 'tech-direction', owner: 'peaks-tech', modelTier: 'top-tier', reason: 'Technical boundaries and approval gates use the recommended default with high-confidence planning.', dependsOn: ['code-design-direction'] }, executionModelId, strongestModelId),
|
|
86
87
|
step({ id: 'code-tech-review', stage: 'tech-review', owner: 'peaks-tech', modelTier: 'top-tier', reason: 'Tech artifacts and gate decisions require strong review and a recommended default path.', dependsOn: ['code-tech-direction'] }, executionModelId, strongestModelId),
|
|
87
88
|
step({ id: 'code-rd-planning', stage: 'rd-planning', owner: 'peaks-rd', modelTier: 'top-tier', reason: 'RD task decomposition and acceptance criteria use the recommended default before execution delegation.', dependsOn: ['code-tech-review'] }, executionModelId, strongestModelId),
|
|
88
|
-
step({ id: 'code-coding-execution', stage: 'coding-execution', owner: 'peaks-rd', modelTier:
|
|
89
|
-
step({ id: 'code-unit-test-execution', stage: 'unit-test-execution', owner: 'peaks-rd', modelTier:
|
|
89
|
+
step({ id: 'code-coding-execution', stage: 'coding-execution', owner: 'peaks-rd', modelTier: executionTier, reason: `Coding and routine refactoring must use the configured execution worker model ${executionModelId}.`, dependsOn: ['code-rd-planning'] }, executionModelId, strongestModelId),
|
|
90
|
+
step({ id: 'code-unit-test-execution', stage: 'unit-test-execution', owner: 'peaks-rd', modelTier: executionTier, reason: `Unit test authoring and focused test runs must use the configured execution worker model ${executionModelId}.`, dependsOn: ['code-coding-execution'] }, executionModelId, strongestModelId),
|
|
90
91
|
step({ id: 'code-quality-review', stage: 'quality-review', owner: 'peaks-code', modelTier: 'top-tier', reason: 'Reducer and final quality gates need strong synthesis and risk review.', dependsOn: ['code-unit-test-execution'] }, executionModelId, strongestModelId)
|
|
91
92
|
];
|
|
92
93
|
}
|
|
93
|
-
function createSoloStepsForMode(codeMode, executionModelId, strongestModelId) {
|
|
94
|
-
return annotateSteps(createSoloSteps(executionModelId, strongestModelId), codeMode);
|
|
94
|
+
function createSoloStepsForMode(codeMode, executionModelId, strongestModelId, economyMode) {
|
|
95
|
+
return annotateSteps(createSoloSteps(executionModelId, strongestModelId, economyMode), codeMode);
|
|
95
96
|
}
|
|
96
|
-
function createTeamSteps(executionModelId, strongestModelId) {
|
|
97
|
+
function createTeamSteps(executionModelId, strongestModelId, economyMode) {
|
|
98
|
+
const executionTier = economyMode === false ? 'top-tier' : 'mid-tier';
|
|
97
99
|
return [
|
|
98
100
|
step({ id: 'team-product-direction', stage: 'product-direction', owner: 'human', modelTier: 'top-tier', reason: 'Team product direction should stay on the governed planning path.', dependsOn: [] }, executionModelId, strongestModelId),
|
|
99
101
|
step({ id: 'team-design-direction', stage: 'design-direction', owner: 'human', modelTier: 'top-tier', reason: 'Team design direction should preserve reviewability and accountability.', dependsOn: ['team-product-direction'] }, executionModelId, strongestModelId),
|
|
100
102
|
step({ id: 'team-tech-direction', stage: 'tech-direction', owner: 'peaks-tech', modelTier: 'top-tier', reason: 'Team technical plans should remain strongly governed before RD execution.', dependsOn: ['team-design-direction'] }, executionModelId, strongestModelId),
|
|
101
103
|
step({ id: 'team-tech-review', stage: 'tech-review', owner: 'peaks-tech', modelTier: 'top-tier', reason: 'Team tech approval requires strong review before execution.', dependsOn: ['team-tech-direction'] }, executionModelId, strongestModelId),
|
|
102
104
|
step({ id: 'team-rd-planning', stage: 'rd-planning', owner: 'peaks-rd', modelTier: 'top-tier', reason: 'Team RD task decomposition remains on the governed strongest-model path.', dependsOn: ['team-tech-review'] }, executionModelId, strongestModelId),
|
|
103
|
-
step({ id: 'team-coding-execution', stage: 'coding-execution', owner: 'peaks-rd', modelTier:
|
|
104
|
-
step({ id: 'team-unit-test-execution', stage: 'unit-test-execution', owner: 'peaks-rd', modelTier:
|
|
105
|
+
step({ id: 'team-coding-execution', stage: 'coding-execution', owner: 'peaks-rd', modelTier: executionTier, reason: `Bounded coding tasks must use the configured execution worker model ${executionModelId}.`, dependsOn: ['team-rd-planning'] }, executionModelId, strongestModelId),
|
|
106
|
+
step({ id: 'team-unit-test-execution', stage: 'unit-test-execution', owner: 'peaks-rd', modelTier: executionTier, reason: `Unit-test tasks must use the configured execution worker model ${executionModelId}.`, dependsOn: ['team-coding-execution'] }, executionModelId, strongestModelId),
|
|
105
107
|
step({ id: 'team-quality-review', stage: 'quality-review', owner: 'peaks-rd', modelTier: 'top-tier', reason: 'Team RD outputs still need reducer and quality review gates.', dependsOn: ['team-unit-test-execution'] }, executionModelId, strongestModelId)
|
|
106
108
|
];
|
|
107
109
|
}
|
|
@@ -176,13 +178,13 @@ export function createWorkflowRouterPlan(request) {
|
|
|
176
178
|
// "enabled" (matches the pre-2.0.1 implicit default).
|
|
177
179
|
const economyMode = request.config?.economyMode ?? true;
|
|
178
180
|
const swarmMode = request.config?.swarmMode ?? true;
|
|
179
|
-
// Pre-2.0.1 DEFAULT_CONFIG carried an implicit
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
const effectiveProviders = request.config?.providers ?? {
|
|
181
|
+
// Pre-2.0.1 DEFAULT_CONFIG carried an implicit provider for test fixtures
|
|
182
|
+
// that did not pass `config.providers`. The slim DEFAULT_CONFIG removed that
|
|
183
|
+
// field, so we re-supply it here only when the caller did not pass any
|
|
184
|
+
// providers at all. An explicit empty object (`config: { providers: {} }`)
|
|
185
|
+
// still surfaces the "must be configured" error from
|
|
186
|
+
// `getConfiguredExecutionModelId`.
|
|
187
|
+
const effectiveProviders = request.config?.providers ?? { anthropic: { model: 'claude-opus-4-7' } };
|
|
186
188
|
// Slice 2026-07-09 add-zcode-adapter (A.3): the strongest
|
|
187
189
|
// planner/reviewer model is now resolved via `getStrongestModelId`,
|
|
188
190
|
// which reads `config.model` (if present) or falls back to the
|
|
@@ -201,7 +203,7 @@ export function createWorkflowRouterPlan(request) {
|
|
|
201
203
|
const techStatus = getTechStatus({ sessionId: request.sessionId, ...sharedWorkspaceOptions });
|
|
202
204
|
const techPlan = createTechPlan({ sessionId: request.sessionId, goal, swarm: swarmMode, dryRun: true, ...sharedWorkspaceOptions });
|
|
203
205
|
const rdPlan = createRdSwarmPlan({ skill: 'rd', sessionId: request.sessionId, goal, maxWorkers, swarmMode, executionModelId, dryRun: true, ...sharedWorkspaceOptions });
|
|
204
|
-
const steps = codeMode ? createSoloStepsForMode(codeMode, executionModelId, strongestModelId) : createTeamSteps(executionModelId, strongestModelId);
|
|
206
|
+
const steps = codeMode ? createSoloStepsForMode(codeMode, executionModelId, strongestModelId, economyMode) : createTeamSteps(executionModelId, strongestModelId, economyMode);
|
|
205
207
|
const blockedReasons = uniqueStrings([
|
|
206
208
|
...techStatus.blockedReasons,
|
|
207
209
|
...getTechPlanBlockedReasons(techPlan),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow v3.0.0 — `lintWorkflowSpec` (moved verbatim per rid-006)
|
|
3
|
+
*
|
|
4
|
+
* Pure lint over a typed `WorkflowSpec`. No parser/build helpers, no
|
|
5
|
+
* YAML helpers — lint is pure on the typed spec. The slimmed
|
|
6
|
+
* `workflow-spec.ts` re-exports `lintWorkflowSpec` under its original
|
|
7
|
+
* name so existing call sites compile unchanged.
|
|
8
|
+
*
|
|
9
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
10
|
+
*/
|
|
11
|
+
import type { WorkflowLintReport, WorkflowSpec } from './workflow-spec-types.js';
|
|
12
|
+
/** Lint a parsed spec — returns a report with semantic errors / warnings. */
|
|
13
|
+
export declare function lintWorkflowSpec(spec: WorkflowSpec): WorkflowLintReport;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow v3.0.0 — `lintWorkflowSpec` (moved verbatim per rid-006)
|
|
3
|
+
*
|
|
4
|
+
* Pure lint over a typed `WorkflowSpec`. No parser/build helpers, no
|
|
5
|
+
* YAML helpers — lint is pure on the typed spec. The slimmed
|
|
6
|
+
* `workflow-spec.ts` re-exports `lintWorkflowSpec` under its original
|
|
7
|
+
* name so existing call sites compile unchanged.
|
|
8
|
+
*
|
|
9
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
10
|
+
*/
|
|
11
|
+
/** Lint a parsed spec — returns a report with semantic errors / warnings. */
|
|
12
|
+
export function lintWorkflowSpec(spec) {
|
|
13
|
+
const errors = [];
|
|
14
|
+
const warnings = [];
|
|
15
|
+
// Phase ids must be unique.
|
|
16
|
+
const seen = new Set();
|
|
17
|
+
for (const phase of spec.phases) {
|
|
18
|
+
if (seen.has(phase.id))
|
|
19
|
+
errors.push(`duplicate phase id "${phase.id}"`);
|
|
20
|
+
seen.add(phase.id);
|
|
21
|
+
}
|
|
22
|
+
// Gate references in phases must exist in the gates list (or be a known
|
|
23
|
+
// built-in like "Gate B3").
|
|
24
|
+
const gateIds = new Set(spec.gates.map((g) => g.id));
|
|
25
|
+
for (const phase of spec.phases) {
|
|
26
|
+
for (const gateRef of phase.gates) {
|
|
27
|
+
if (!gateIds.has(gateRef) && !gateRef.startsWith('Gate ')) {
|
|
28
|
+
warnings.push(`phase "${phase.id}" references unknown gate "${gateRef}" (not in gates[] and not a built-in "Gate …" label)`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Evaluator gates must match a gate id when present.
|
|
33
|
+
for (const ev of spec.evaluators) {
|
|
34
|
+
if (ev.gate !== undefined && !gateIds.has(ev.gate) && !ev.gate.startsWith('Gate ')) {
|
|
35
|
+
warnings.push(`evaluator "${ev.type}" references unknown gate "${ev.gate}"`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// dependsOn references must resolve.
|
|
39
|
+
const phaseIds = new Set(spec.phases.map((p) => p.id));
|
|
40
|
+
for (const phase of spec.phases) {
|
|
41
|
+
if (phase.dependsOn !== undefined) {
|
|
42
|
+
for (const dep of phase.dependsOn) {
|
|
43
|
+
if (!phaseIds.has(dep))
|
|
44
|
+
errors.push(`phase "${phase.id}" depends on missing phase "${dep}"`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Parallel groups must contain ≥2 phases.
|
|
49
|
+
const groupCounts = new Map();
|
|
50
|
+
for (const phase of spec.phases) {
|
|
51
|
+
if (phase.parallelGroup !== undefined) {
|
|
52
|
+
groupCounts.set(phase.parallelGroup, (groupCounts.get(phase.parallelGroup) ?? 0) + 1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
for (const [group, count] of groupCounts) {
|
|
56
|
+
if (count < 2)
|
|
57
|
+
warnings.push(`parallelGroup "${group}" has only ${count} phase(s); parallelism requires ≥2`);
|
|
58
|
+
}
|
|
59
|
+
// Budget sanity.
|
|
60
|
+
if (spec.budget.cycles !== undefined && spec.budget.cycles < 1) {
|
|
61
|
+
errors.push(`budget.cycles must be ≥1 when set (got ${spec.budget.cycles})`);
|
|
62
|
+
}
|
|
63
|
+
if (spec.budget.tokens !== undefined && spec.budget.tokens < 1) {
|
|
64
|
+
errors.push(`budget.tokens must be ≥1 when set (got ${spec.budget.tokens})`);
|
|
65
|
+
}
|
|
66
|
+
if (spec.budget.wallSeconds !== undefined && spec.budget.wallSeconds < 1) {
|
|
67
|
+
errors.push(`budget.wallSeconds must be ≥1 when set (got ${spec.budget.wallSeconds})`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
ok: errors.length === 0,
|
|
71
|
+
errors,
|
|
72
|
+
warnings,
|
|
73
|
+
normalizedSpec: spec
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow v3.0.0 — Slice A.1 + Slice B.1
|
|
3
|
+
*
|
|
4
|
+
* Public type and interface declarations for the workflow spec schema.
|
|
5
|
+
* Pure data shapes only — no constants, no runtime helpers, no
|
|
6
|
+
* implementations. Constants (`ID_PATTERN`, `VALID_EVALUATORS`)
|
|
7
|
+
* remain private to `workflow-spec.ts`; the YAML field helpers
|
|
8
|
+
* live in `workflow-spec-yaml.ts`; the lint function lives in
|
|
9
|
+
* `workflow-spec-lint.ts`.
|
|
10
|
+
*
|
|
11
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
12
|
+
*/
|
|
13
|
+
/** A workflow phase = a single step the runtime executes. */
|
|
14
|
+
export interface WorkflowPhase {
|
|
15
|
+
/** Stable id within the workflow (kebab-case). Used as the SOP gate key. */
|
|
16
|
+
readonly id: string;
|
|
17
|
+
/** peaks-* role that runs the phase (e.g. "peaks-rd"). */
|
|
18
|
+
readonly role: string;
|
|
19
|
+
/** Free-text prompt template sent to the role. */
|
|
20
|
+
readonly promptTemplate: string;
|
|
21
|
+
/** Phase-level gate references; runtime looks up the SOP gate by id. */
|
|
22
|
+
readonly gates: readonly string[];
|
|
23
|
+
/** Output contract — keys the runtime should expect in the role's verdict. */
|
|
24
|
+
readonly outputContract: readonly string[];
|
|
25
|
+
/** Optional ordered list of sibling phase ids that must complete first. */
|
|
26
|
+
readonly dependsOn?: readonly string[];
|
|
27
|
+
/** When true, runtime may run this phase in parallel with siblings at the same depth. */
|
|
28
|
+
readonly parallelGroup?: string;
|
|
29
|
+
}
|
|
30
|
+
/** A gate entry is a thin pointer to a peaks-sop gate; the gate definition
|
|
31
|
+
* itself lives in peaks-sop, never in the workflow yaml. */
|
|
32
|
+
export interface WorkflowGate {
|
|
33
|
+
/** Gate id (matches peaks-sop gate-id). */
|
|
34
|
+
readonly id: string;
|
|
35
|
+
/** SOP id that owns the gate definition. */
|
|
36
|
+
readonly sopId: string;
|
|
37
|
+
/** Optional human-readable hint shown when the gate fails. */
|
|
38
|
+
readonly description?: string;
|
|
39
|
+
}
|
|
40
|
+
/** Native evaluator types — the 4 reviewer fan-out members + verdict aggregator
|
|
41
|
+
* + Slice C monotonic-improvement guard + Slice D G13/G14/G15 quality-loop
|
|
42
|
+
* primitives. Sketch-grade: the 3 quality-loop evaluators shell out to
|
|
43
|
+
* existing `peaks impact scan`, `peaks smoke run`, and
|
|
44
|
+
* `peaks release canary` CLI surfaces. The authoritative score
|
|
45
|
+
* conversion for the monotonic guard lives in
|
|
46
|
+
* `src/services/loop/monotonic-guard.ts`. */
|
|
47
|
+
export type EvaluatorKind = 'karpathy' | 'code-review' | 'security-review' | 'perf-baseline' | 'verdict-aggregate' | 'monotonic-improvement' | 'impact-scan' | 'smoke-run' | 'canary-watch';
|
|
48
|
+
/** Evaluator binding — runtime calls `peaks loop eval` directly, no LLM scheduling. */
|
|
49
|
+
export interface WorkflowEvaluator {
|
|
50
|
+
readonly type: EvaluatorKind;
|
|
51
|
+
/** Optional gate id this evaluator produces evidence for (e.g. "Gate B3"). */
|
|
52
|
+
readonly gate?: string;
|
|
53
|
+
/** Optional scope expression (path or glob) — kept as string for v3.0.0. */
|
|
54
|
+
readonly scope?: string;
|
|
55
|
+
/** Optional SLA threshold (evaluator-specific; evaluators interpret their own scale). */
|
|
56
|
+
readonly threshold?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Context snapshot — files + scope the role/worker should preload. */
|
|
59
|
+
export interface WorkflowContextSnapshot {
|
|
60
|
+
/** Files the role should read before running (paths, relative to project root). */
|
|
61
|
+
readonly files: readonly string[];
|
|
62
|
+
/** Optional memory anchors (e.g. ".peaks/memory/parked-peaks-workflow-primitive.md"). */
|
|
63
|
+
readonly memory: readonly string[];
|
|
64
|
+
}
|
|
65
|
+
/** Budget caps — runtime stops the loop when any cap is exceeded. */
|
|
66
|
+
export interface WorkflowBudget {
|
|
67
|
+
/** Hard token cap (sum of role invocations + evaluator outputs). */
|
|
68
|
+
readonly tokens?: number;
|
|
69
|
+
/** Wall-clock cap in seconds. */
|
|
70
|
+
readonly wallSeconds?: number;
|
|
71
|
+
/** Cycle cap — maximum repair iterations before guard aborts. */
|
|
72
|
+
readonly cycles?: number;
|
|
73
|
+
}
|
|
74
|
+
export interface WorkflowSpec {
|
|
75
|
+
/** Schema version; always 1 for v3.0.0. */
|
|
76
|
+
readonly schemaVersion: 1;
|
|
77
|
+
/** Stable id (matches filename `<id>.yaml`). */
|
|
78
|
+
readonly id: string;
|
|
79
|
+
/** Human-readable label shown in `peaks workflow list`. */
|
|
80
|
+
readonly label: string;
|
|
81
|
+
/** Description; one short paragraph. */
|
|
82
|
+
readonly description: string;
|
|
83
|
+
/** Phases in declaration order; runtime may parallelize siblings within a group. */
|
|
84
|
+
readonly phases: readonly WorkflowPhase[];
|
|
85
|
+
/** Gates referenced by phases; runtime resolves them via peaks-sop. */
|
|
86
|
+
readonly gates: readonly WorkflowGate[];
|
|
87
|
+
/** Native evaluators the runtime should invoke. */
|
|
88
|
+
readonly evaluators: readonly WorkflowEvaluator[];
|
|
89
|
+
/** Context snapshot for the workflow. */
|
|
90
|
+
readonly contextSnapshot: WorkflowContextSnapshot;
|
|
91
|
+
/** Budget caps. */
|
|
92
|
+
readonly budget: WorkflowBudget;
|
|
93
|
+
}
|
|
94
|
+
/** Result of `lintWorkflowSpec` — pure data, never throws. */
|
|
95
|
+
export interface WorkflowLintReport {
|
|
96
|
+
readonly ok: boolean;
|
|
97
|
+
readonly errors: readonly string[];
|
|
98
|
+
readonly warnings: readonly string[];
|
|
99
|
+
readonly normalizedSpec?: WorkflowSpec;
|
|
100
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow v3.0.0 — Slice A.1 + Slice B.1
|
|
3
|
+
*
|
|
4
|
+
* Public type and interface declarations for the workflow spec schema.
|
|
5
|
+
* Pure data shapes only — no constants, no runtime helpers, no
|
|
6
|
+
* implementations. Constants (`ID_PATTERN`, `VALID_EVALUATORS`)
|
|
7
|
+
* remain private to `workflow-spec.ts`; the YAML field helpers
|
|
8
|
+
* live in `workflow-spec-yaml.ts`; the lint function lives in
|
|
9
|
+
* `workflow-spec-lint.ts`.
|
|
10
|
+
*
|
|
11
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow v3.0.0 — YAML field helpers
|
|
3
|
+
*
|
|
4
|
+
* Private helpers used by the parser in `workflow-spec.ts`. NOT publicly
|
|
5
|
+
* re-exported; not part of the public API surface. Kept in a sibling
|
|
6
|
+
* file so the slimmed `workflow-spec.ts` can stay under the 400-line
|
|
7
|
+
* file-size cap (rid-006 split).
|
|
8
|
+
*
|
|
9
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
10
|
+
*/
|
|
11
|
+
export declare function leadingSpaces(line: string): number;
|
|
12
|
+
export declare function parseScalar(raw: string): unknown;
|
|
13
|
+
export declare function stringField(obj: Record<string, unknown>, key: string, fallback?: string): string;
|
|
14
|
+
export declare function numberField(obj: Record<string, unknown>, key: string, fallback?: number): number;
|
|
15
|
+
export declare function arrayField(obj: Record<string, unknown>, key: string): unknown[];
|
|
16
|
+
export declare function objectField(obj: Record<string, unknown>, key: string): Record<string, unknown>;
|
|
17
|
+
export declare function stringArrayField(obj: Record<string, unknown>, key: string): readonly string[];
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-workflow v3.0.0 — YAML field helpers
|
|
3
|
+
*
|
|
4
|
+
* Private helpers used by the parser in `workflow-spec.ts`. NOT publicly
|
|
5
|
+
* re-exported; not part of the public API surface. Kept in a sibling
|
|
6
|
+
* file so the slimmed `workflow-spec.ts` can stay under the 400-line
|
|
7
|
+
* file-size cap (rid-006 split).
|
|
8
|
+
*
|
|
9
|
+
* File budget: ≤ 400 lines (rid-006 split).
|
|
10
|
+
*/
|
|
11
|
+
export function leadingSpaces(line) {
|
|
12
|
+
let n = 0;
|
|
13
|
+
for (const ch of line) {
|
|
14
|
+
if (ch === ' ')
|
|
15
|
+
n++;
|
|
16
|
+
else
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
21
|
+
export function parseScalar(raw) {
|
|
22
|
+
if (raw === '')
|
|
23
|
+
return '';
|
|
24
|
+
if (raw === 'true')
|
|
25
|
+
return true;
|
|
26
|
+
if (raw === 'false')
|
|
27
|
+
return false;
|
|
28
|
+
if (raw === 'null' || raw === '~')
|
|
29
|
+
return null;
|
|
30
|
+
// Inline array form `[a, b, c]`
|
|
31
|
+
if (raw.startsWith('[') && raw.endsWith(']')) {
|
|
32
|
+
const inner = raw.slice(1, -1).trim();
|
|
33
|
+
if (inner === '')
|
|
34
|
+
return [];
|
|
35
|
+
return inner.split(',').map((s) => parseScalar(s.trim()));
|
|
36
|
+
}
|
|
37
|
+
// Strip optional surrounding quotes.
|
|
38
|
+
if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
|
|
39
|
+
return raw.slice(1, -1);
|
|
40
|
+
}
|
|
41
|
+
// Number?
|
|
42
|
+
if (/^-?\d+$/.test(raw))
|
|
43
|
+
return parseInt(raw, 10);
|
|
44
|
+
if (/^-?\d+\.\d+$/.test(raw))
|
|
45
|
+
return parseFloat(raw);
|
|
46
|
+
return raw;
|
|
47
|
+
}
|
|
48
|
+
export function stringField(obj, key, fallback) {
|
|
49
|
+
const v = obj[key];
|
|
50
|
+
if (typeof v === 'string')
|
|
51
|
+
return v;
|
|
52
|
+
if (fallback !== undefined)
|
|
53
|
+
return fallback;
|
|
54
|
+
throw new Error(`workflow yaml: missing required string field "${key}"`);
|
|
55
|
+
}
|
|
56
|
+
export function numberField(obj, key, fallback) {
|
|
57
|
+
const v = obj[key];
|
|
58
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
59
|
+
return v;
|
|
60
|
+
if (fallback !== undefined)
|
|
61
|
+
return fallback;
|
|
62
|
+
throw new Error(`workflow yaml: missing required number field "${key}"`);
|
|
63
|
+
}
|
|
64
|
+
export function arrayField(obj, key) {
|
|
65
|
+
const v = obj[key];
|
|
66
|
+
if (v === undefined)
|
|
67
|
+
return [];
|
|
68
|
+
if (!Array.isArray(v))
|
|
69
|
+
throw new Error(`workflow yaml: field "${key}" must be an array`);
|
|
70
|
+
return v;
|
|
71
|
+
}
|
|
72
|
+
export function objectField(obj, key) {
|
|
73
|
+
const v = obj[key];
|
|
74
|
+
if (v === undefined)
|
|
75
|
+
return {};
|
|
76
|
+
if (v === null || typeof v !== 'object' || Array.isArray(v)) {
|
|
77
|
+
throw new Error(`workflow yaml: field "${key}" must be an object`);
|
|
78
|
+
}
|
|
79
|
+
return v;
|
|
80
|
+
}
|
|
81
|
+
export function stringArrayField(obj, key) {
|
|
82
|
+
const v = obj[key];
|
|
83
|
+
if (v === undefined)
|
|
84
|
+
return [];
|
|
85
|
+
if (!Array.isArray(v))
|
|
86
|
+
throw new Error(`workflow yaml: field "${key}" must be an array of strings`);
|
|
87
|
+
return v.map((s) => String(s));
|
|
88
|
+
}
|
|
@@ -19,98 +19,18 @@
|
|
|
19
19
|
* pair. Anything more elaborate (e.g. conditionals on outputs) belongs
|
|
20
20
|
* in a future minor.
|
|
21
21
|
*
|
|
22
|
-
* File budget: ≤
|
|
22
|
+
* File budget: ≤ 400 lines (rid-006 split). This file now holds the
|
|
23
|
+
* parser + private constants + private build helpers; types live in
|
|
24
|
+
* `workflow-spec-types.ts`; YAML field helpers live in
|
|
25
|
+
* `workflow-spec-yaml.ts`; lint lives in `workflow-spec-lint.ts`.
|
|
26
|
+
* The re-export shim at the bottom preserves the original public
|
|
27
|
+
* surface so external callers (`workflow-loader.ts`,
|
|
28
|
+
* `loop-eval-commands.ts`, `evaluator-dispatcher.ts`) compile
|
|
29
|
+
* unchanged.
|
|
23
30
|
*/
|
|
24
|
-
|
|
25
|
-
export interface WorkflowPhase {
|
|
26
|
-
/** Stable id within the workflow (kebab-case). Used as the SOP gate key. */
|
|
27
|
-
readonly id: string;
|
|
28
|
-
/** peaks-* role that runs the phase (e.g. "peaks-rd"). */
|
|
29
|
-
readonly role: string;
|
|
30
|
-
/** Free-text prompt template sent to the role. */
|
|
31
|
-
readonly promptTemplate: string;
|
|
32
|
-
/** Phase-level gate references; runtime looks up the SOP gate by id. */
|
|
33
|
-
readonly gates: readonly string[];
|
|
34
|
-
/** Output contract — keys the runtime should expect in the role's verdict. */
|
|
35
|
-
readonly outputContract: readonly string[];
|
|
36
|
-
/** Optional ordered list of sibling phase ids that must complete first. */
|
|
37
|
-
readonly dependsOn?: readonly string[];
|
|
38
|
-
/** When true, runtime may run this phase in parallel with siblings at the same depth. */
|
|
39
|
-
readonly parallelGroup?: string;
|
|
40
|
-
}
|
|
41
|
-
/** A gate entry is a thin pointer to a peaks-sop gate; the gate definition
|
|
42
|
-
* itself lives in peaks-sop, never in the workflow yaml. */
|
|
43
|
-
export interface WorkflowGate {
|
|
44
|
-
/** Gate id (matches peaks-sop gate-id). */
|
|
45
|
-
readonly id: string;
|
|
46
|
-
/** SOP id that owns the gate definition. */
|
|
47
|
-
readonly sopId: string;
|
|
48
|
-
/** Optional human-readable hint shown when the gate fails. */
|
|
49
|
-
readonly description?: string;
|
|
50
|
-
}
|
|
51
|
-
/** Native evaluator types — the 4 reviewer fan-out members + verdict aggregator
|
|
52
|
-
* + Slice C monotonic-improvement guard + Slice D G13/G14/G15 quality-loop
|
|
53
|
-
* primitives. Sketch-grade: the 3 quality-loop evaluators shell out to
|
|
54
|
-
* existing `peaks impact scan`, `peaks smoke run`, and
|
|
55
|
-
* `peaks release canary` CLI surfaces. The authoritative score
|
|
56
|
-
* conversion for the monotonic guard lives in
|
|
57
|
-
* `src/services/loop/monotonic-guard.ts`. */
|
|
58
|
-
export type EvaluatorKind = 'karpathy' | 'code-review' | 'security-review' | 'perf-baseline' | 'verdict-aggregate' | 'monotonic-improvement' | 'impact-scan' | 'smoke-run' | 'canary-watch';
|
|
59
|
-
/** Evaluator binding — runtime calls `peaks loop eval` directly, no LLM scheduling. */
|
|
60
|
-
export interface WorkflowEvaluator {
|
|
61
|
-
readonly type: EvaluatorKind;
|
|
62
|
-
/** Optional gate id this evaluator produces evidence for (e.g. "Gate B3"). */
|
|
63
|
-
readonly gate?: string;
|
|
64
|
-
/** Optional scope expression (path or glob) — kept as string for v3.0.0. */
|
|
65
|
-
readonly scope?: string;
|
|
66
|
-
/** Optional SLA threshold (evaluator-specific; evaluators interpret their own scale). */
|
|
67
|
-
readonly threshold?: string;
|
|
68
|
-
}
|
|
69
|
-
/** Context snapshot — files + scope the role/worker should preload. */
|
|
70
|
-
export interface WorkflowContextSnapshot {
|
|
71
|
-
/** Files the role should read before running (paths, relative to project root). */
|
|
72
|
-
readonly files: readonly string[];
|
|
73
|
-
/** Optional memory anchors (e.g. ".peaks/memory/parked-peaks-workflow-primitive.md"). */
|
|
74
|
-
readonly memory: readonly string[];
|
|
75
|
-
}
|
|
76
|
-
/** Budget caps — runtime stops the loop when any cap is exceeded. */
|
|
77
|
-
export interface WorkflowBudget {
|
|
78
|
-
/** Hard token cap (sum of role invocations + evaluator outputs). */
|
|
79
|
-
readonly tokens?: number;
|
|
80
|
-
/** Wall-clock cap in seconds. */
|
|
81
|
-
readonly wallSeconds?: number;
|
|
82
|
-
/** Cycle cap — maximum repair iterations before guard aborts. */
|
|
83
|
-
readonly cycles?: number;
|
|
84
|
-
}
|
|
85
|
-
export interface WorkflowSpec {
|
|
86
|
-
/** Schema version; always 1 for v3.0.0. */
|
|
87
|
-
readonly schemaVersion: 1;
|
|
88
|
-
/** Stable id (matches filename `<id>.yaml`). */
|
|
89
|
-
readonly id: string;
|
|
90
|
-
/** Human-readable label shown in `peaks workflow list`. */
|
|
91
|
-
readonly label: string;
|
|
92
|
-
/** Description; one short paragraph. */
|
|
93
|
-
readonly description: string;
|
|
94
|
-
/** Phases in declaration order; runtime may parallelize siblings within a group. */
|
|
95
|
-
readonly phases: readonly WorkflowPhase[];
|
|
96
|
-
/** Gates referenced by phases; runtime resolves them via peaks-sop. */
|
|
97
|
-
readonly gates: readonly WorkflowGate[];
|
|
98
|
-
/** Native evaluators the runtime should invoke. */
|
|
99
|
-
readonly evaluators: readonly WorkflowEvaluator[];
|
|
100
|
-
/** Context snapshot for the workflow. */
|
|
101
|
-
readonly contextSnapshot: WorkflowContextSnapshot;
|
|
102
|
-
/** Budget caps. */
|
|
103
|
-
readonly budget: WorkflowBudget;
|
|
104
|
-
}
|
|
105
|
-
/** Result of `lintWorkflowSpec` — pure data, never throws. */
|
|
106
|
-
export interface WorkflowLintReport {
|
|
107
|
-
readonly ok: boolean;
|
|
108
|
-
readonly errors: readonly string[];
|
|
109
|
-
readonly warnings: readonly string[];
|
|
110
|
-
readonly normalizedSpec?: WorkflowSpec;
|
|
111
|
-
}
|
|
31
|
+
import type { WorkflowSpec } from './workflow-spec-types.js';
|
|
112
32
|
/** Parse a raw yaml string into a workflow spec. Pure (no IO), throws on
|
|
113
33
|
* unparseable input. Use `lintWorkflowSpec` after parsing for semantic checks. */
|
|
114
34
|
export declare function parseWorkflowYaml(raw: string, expectedId: string): WorkflowSpec;
|
|
115
|
-
|
|
116
|
-
export
|
|
35
|
+
export { lintWorkflowSpec } from './workflow-spec-lint.js';
|
|
36
|
+
export type { EvaluatorKind, WorkflowBudget, WorkflowContextSnapshot, WorkflowEvaluator, WorkflowGate, WorkflowLintReport, WorkflowPhase, WorkflowSpec } from './workflow-spec-types.js';
|