peaks-loop 4.0.53 → 4.1.0
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 +85 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +175 -11
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +81 -22
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +69 -34
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +21 -2
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +23 -0
- package/dist/cli/commands/sub-agent-shared.js +40 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +44 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcer-liveness.js +1 -1
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +44 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.js +116 -14
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +23 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +7 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +16 -189
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/index.d.ts +1 -1
- package/dist/services/memory/project-memory-service/index.js +1 -1
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +59 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +189 -17
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/gate-evidence-derivation.d.ts +160 -0
- package/dist/services/prd/gate-evidence-derivation.js +270 -0
- package/dist/services/prd/handoff-auto-regen.js +13 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.d.ts +1 -1
- package/dist/services/prd/handoff-frontmatter.js +63 -1
- package/dist/services/prd/handoff-gate-evidence.d.ts +95 -1
- package/dist/services/prd/handoff-gate-evidence.js +125 -57
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +22 -38
- package/dist/services/prd/handoff-service.js +38 -127
- package/dist/services/prd/handoff-types.d.ts +40 -0
- package/dist/services/prd/handoff-types.js +28 -1
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.d.ts +7 -0
- package/dist/services/prd/project-scan-reader.js +8 -5
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +36 -8
- package/dist/services/rd/reviewer-dispatch-policy.js +40 -15
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +32 -9
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-rd/SKILL.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +26 -10
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +1 -1
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +6 -1
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/periodic-checkpoint.md +7 -5
- package/skills/peaks-code/references/startup-sequence.md +1 -1
- package/skills/peaks-final-review/SKILL.md +1 -1
- /package/{docs → contracts}/test-style-contract.md +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice `strict-remediation-abc` (C wave 1, leaf `c1w1-await-batch`) — the
|
|
3
|
+
* per-slot half of `./await-batch.ts`, moved VERBATIM so that `awaitBatch`
|
|
4
|
+
* stops carrying a 155-line / complexity-40 body (`max-lines-per-function` is
|
|
5
|
+
* severity 2) and that module clears the 300 raw-line cap.
|
|
6
|
+
*
|
|
7
|
+
* What lives here: the slot table (one mutable entry per dispatch index), the
|
|
8
|
+
* one-tick observation pass, the no-progress watchdog predicate, the poll sleep
|
|
9
|
+
* and the per-dispatch result / note rendering. What stayed in
|
|
10
|
+
* `./await-batch.ts`: the public types, the options and budget resolution, the
|
|
11
|
+
* batch-outcome rules, the fail-fast de-escalation and the poll loop itself.
|
|
12
|
+
*
|
|
13
|
+
* No body here was rewritten. The predicates, the branch order, the `??`
|
|
14
|
+
* fallbacks, the `now()` call sites and the `readOutcome` / `readRecord` call
|
|
15
|
+
* counts are exactly the ones `awaitBatch` had before the move, because this is
|
|
16
|
+
* the READER side of the sub-agent dispatch-record contract and its behaviour
|
|
17
|
+
* is pinned from the outside by
|
|
18
|
+
* `tests/unit/services/dispatch/sub-agent-dispatchers.test.ts` (the
|
|
19
|
+
* stale-to-timeout mapping, the per-IDE note shapes, corrupt record → timeout)
|
|
20
|
+
* and by `tests/unit/cli/commands/sub-agent-await-commands.test.ts` (the CLI
|
|
21
|
+
* envelope over real record files).
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
24
|
+
/**
|
|
25
|
+
* Read a dispatch record's `status` and `outcome` off disk. Missing or
|
|
26
|
+
* unreadable (including unparseable JSON) reads as `{ null, null }`, which is
|
|
27
|
+
* what keeps a corrupt record a timeout rather than a thrown error.
|
|
28
|
+
*/
|
|
29
|
+
export function defaultReadOutcome(recordPath) {
|
|
30
|
+
if (!recordPath)
|
|
31
|
+
return { status: null, outcome: null };
|
|
32
|
+
try {
|
|
33
|
+
if (!existsSync(recordPath))
|
|
34
|
+
return { status: null, outcome: null };
|
|
35
|
+
const raw = readFileSync(recordPath, 'utf8');
|
|
36
|
+
const obj = JSON.parse(raw);
|
|
37
|
+
const status = typeof obj.status === 'string' ? obj.status : null;
|
|
38
|
+
const outcome = typeof obj.outcome === 'string' ? obj.outcome : null;
|
|
39
|
+
return { status, outcome };
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return { status: null, outcome: null };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const DEFAULT_POLL_INTERVAL_MS = 50;
|
|
46
|
+
/**
|
|
47
|
+
* Seed one slot per record path, all of them `timeout` until a tick proves
|
|
48
|
+
* otherwise, plus the progress map the no-progress watchdog runs off.
|
|
49
|
+
*/
|
|
50
|
+
export function createSlotTable(recordPaths, startedAt) {
|
|
51
|
+
const slots = new Map();
|
|
52
|
+
for (let i = 0; i < recordPaths.length; i += 1) {
|
|
53
|
+
const recordPath = recordPaths[i] ?? '';
|
|
54
|
+
slots.set(i, {
|
|
55
|
+
recordPath,
|
|
56
|
+
status: 'timeout',
|
|
57
|
+
note: null,
|
|
58
|
+
finishedAt: null,
|
|
59
|
+
lastProgress: 0
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Track last observed progress per slot to power the no-progress
|
|
63
|
+
// watchdog. The watchdog advances on any per-tick observation
|
|
64
|
+
// change in the slot's progress hint (read from the file's
|
|
65
|
+
// `progress` field when available, else from the `heartbeats`
|
|
66
|
+
// array's last entry).
|
|
67
|
+
const lastProgressAt = new Map();
|
|
68
|
+
for (const [idx] of slots) {
|
|
69
|
+
lastProgressAt.set(idx, startedAt);
|
|
70
|
+
}
|
|
71
|
+
return { startedAt, slots, lastProgressAt };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Map an on-disk status onto the per-dispatch status union, or `null` when the
|
|
75
|
+
* dispatch has not reached a terminal state yet.
|
|
76
|
+
*
|
|
77
|
+
* The default readOutcome returns the on-disk `status`. We map
|
|
78
|
+
* a small set of values to the per-dispatch status union.
|
|
79
|
+
* Slice 2026-07-30-nightshift: also capture the optional
|
|
80
|
+
* `outcome` field so the per-IDE note can surface the human
|
|
81
|
+
* reason (e.g. "mock failure at leaf-2"). The `outcome` is read
|
|
82
|
+
* alongside the `status` via `readRecord` and surfaced into
|
|
83
|
+
* `slot.note` for failed dispatches; for done/cancelled the
|
|
84
|
+
* note is left null (matches the pre-nightshift contract).
|
|
85
|
+
* `stale` is mapped to `timeout` so the per-IDE note preserves
|
|
86
|
+
* the human-readable reason (cursor / claude-code both surface
|
|
87
|
+
* `stale` on the wire but the BatchResult.status union only
|
|
88
|
+
* knows `timeout`).
|
|
89
|
+
*/
|
|
90
|
+
function mapTerminalStatus(outcome, recordOutcome) {
|
|
91
|
+
if (outcome === 'done' || outcome === 'success') {
|
|
92
|
+
return { status: 'done', note: null };
|
|
93
|
+
}
|
|
94
|
+
if (outcome === 'failed') {
|
|
95
|
+
return { status: 'failed', note: recordOutcome ?? null };
|
|
96
|
+
}
|
|
97
|
+
if (outcome === 'cancelled') {
|
|
98
|
+
return { status: 'cancelled', note: null };
|
|
99
|
+
}
|
|
100
|
+
if (outcome === 'stale') {
|
|
101
|
+
return { status: 'timeout', note: 'stale' };
|
|
102
|
+
}
|
|
103
|
+
// Any other status (queued / running / finalizing /
|
|
104
|
+
// never-started / unreadable) means the dispatch has not
|
|
105
|
+
// reached a terminal state yet.
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* One observation pass over the pending slots. Returns the `allDone` the loop
|
|
110
|
+
* branched on: `true` only when every slot reached a terminal state.
|
|
111
|
+
*/
|
|
112
|
+
export function pollSlotsOnce(table, readOutcome, readRecord, now) {
|
|
113
|
+
let allDone = true;
|
|
114
|
+
for (const [idx, slot] of table.slots) {
|
|
115
|
+
if (slot.finishedAt !== null)
|
|
116
|
+
continue;
|
|
117
|
+
const outcome = readOutcome(slot.recordPath);
|
|
118
|
+
if (outcome === null) {
|
|
119
|
+
allDone = false;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const terminal = mapTerminalStatus(outcome, readRecord(slot.recordPath).outcome);
|
|
123
|
+
if (terminal === null) {
|
|
124
|
+
allDone = false;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
slot.status = terminal.status;
|
|
128
|
+
slot.note = terminal.note;
|
|
129
|
+
slot.finishedAt = now();
|
|
130
|
+
table.lastProgressAt.set(idx, now());
|
|
131
|
+
}
|
|
132
|
+
return allDone;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* No-progress watchdog: every slot has been without observable
|
|
136
|
+
* progress for `noProgressBudget`, and there is at least one slot.
|
|
137
|
+
*/
|
|
138
|
+
export function hasNoProgress(table, now, noProgressBudget) {
|
|
139
|
+
const allStalled = Array.from(table.slots.entries()).every(([idx, slot]) => slot.finishedAt !== null ||
|
|
140
|
+
now() - (table.lastProgressAt.get(idx) ?? table.startedAt) >= noProgressBudget);
|
|
141
|
+
return allStalled && table.slots.size > 0;
|
|
142
|
+
}
|
|
143
|
+
/** Sleep a tick on the resolved scheduler. */
|
|
144
|
+
export function sleepTick(schedule) {
|
|
145
|
+
return new Promise((resolveSleep) => schedule(() => resolveSleep(), DEFAULT_POLL_INTERVAL_MS));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The per-IDE note for one slot.
|
|
149
|
+
*
|
|
150
|
+
* Slice 2026-07-30-nightshift: the per-IDE note construction is
|
|
151
|
+
* rewritten to match the 1.4 dogfood contract:
|
|
152
|
+
* - claude-code (no notePrefix): note = slot.note (the raw
|
|
153
|
+
* outcome, or null when done/cancelled)
|
|
154
|
+
* - other IDEs (notePrefix set):
|
|
155
|
+
* - on timeout: `${notePrefix} (timeout)`
|
|
156
|
+
* - on failed (with outcome): `${notePrefix} — ${outcome}`
|
|
157
|
+
* - on failed (no outcome): `${notePrefix}`
|
|
158
|
+
* - on done / cancelled: `${notePrefix}`
|
|
159
|
+
*/
|
|
160
|
+
function resolveSlotNote(slot, baseNote) {
|
|
161
|
+
let note;
|
|
162
|
+
if (baseNote === null) {
|
|
163
|
+
// Claude-Code path: surface the raw outcome (no per-IDE prefix).
|
|
164
|
+
note = slot.note;
|
|
165
|
+
}
|
|
166
|
+
else if (slot.finishedAt === null) {
|
|
167
|
+
// Timed-out slot: keep the legacy ` (timeout)` suffix.
|
|
168
|
+
note = `${baseNote} (timeout)`;
|
|
169
|
+
}
|
|
170
|
+
else if (slot.status === 'failed' && slot.note !== null && slot.note.length > 0) {
|
|
171
|
+
// Failed with a human reason: `${notePrefix} — ${outcome}`.
|
|
172
|
+
note = `${baseNote} — ${slot.note}`;
|
|
173
|
+
}
|
|
174
|
+
else if (slot.note !== null && slot.note.length > 0) {
|
|
175
|
+
// Non-failed terminal slot with a non-null note (e.g. cursor /
|
|
176
|
+
// claude-code `stale` → status=timeout, note='stale'):
|
|
177
|
+
// `${notePrefix} — ${note}` so the human reason is surfaced.
|
|
178
|
+
// Slice 2026-07-30-nightshift: previously this branch dropped
|
|
179
|
+
// the slot's note entirely (the bare-prefix else swallowed
|
|
180
|
+
// it). The 1.4 dogfood for `stale` flips the contract.
|
|
181
|
+
note = `${baseNote} — ${slot.note}`;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Done / cancelled / failed-without-reason: bare prefix.
|
|
185
|
+
note = baseNote;
|
|
186
|
+
}
|
|
187
|
+
return note;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Build the per-dispatch results in dispatchIndex order.
|
|
191
|
+
*/
|
|
192
|
+
export function buildBatchResults(table, notePrefix, effectiveTimeoutMs) {
|
|
193
|
+
const baseNote = notePrefix ?? null;
|
|
194
|
+
return Array.from(table.slots.entries())
|
|
195
|
+
.sort(([a], [b]) => a - b)
|
|
196
|
+
.map(([idx, slot]) => {
|
|
197
|
+
const finishedAt = slot.finishedAt ?? table.startedAt + effectiveTimeoutMs;
|
|
198
|
+
return {
|
|
199
|
+
dispatchIndex: idx,
|
|
200
|
+
recordPath: slot.recordPath,
|
|
201
|
+
status: slot.status,
|
|
202
|
+
durationMs: finishedAt - table.startedAt,
|
|
203
|
+
note: resolveSlotNote(slot, baseNote)
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
}
|
|
@@ -1,3 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 2026-07-29-dispatch-stall-governance / S4 — unified batch
|
|
3
|
+
* awaiter.
|
|
4
|
+
*
|
|
5
|
+
* Pre-S4, `awaitClaudeCodeBatch` and `pollDispatchRecords` were two
|
|
6
|
+
* near-identical poll loops with two subtle differences:
|
|
7
|
+
* - awaitClaudeCodeBatch clamped with `Math.min(deadline, 120_000)`
|
|
8
|
+
* - pollDispatchRecords clamped with
|
|
9
|
+
* `Math.min(Math.max(deadline, 0), 120_000)`
|
|
10
|
+
* and different default-fallback sources. The PRD R4 records the
|
|
11
|
+
* resulting failure shape: a fix applied to one path did not
|
|
12
|
+
* propagate to the other (per
|
|
13
|
+
* .peaks/memory/2026-07-26-peaks-code-concurrent-subagent-coordination.md).
|
|
14
|
+
*
|
|
15
|
+
* This file is the single implementation. Both `awaitClaudeCodeBatch`
|
|
16
|
+
* and `pollDispatchRecords` (kept exported for back-compat with the
|
|
17
|
+
* existing tests) thin-wrap this.
|
|
18
|
+
*
|
|
19
|
+
* S4 also closes the silent-timeout return:
|
|
20
|
+
* - the result shape now includes a typed `outcome` field that is
|
|
21
|
+
* one of 'completed' | 'timed-out' | 'clamped' | 'no-progress'.
|
|
22
|
+
* A caller that asks for `timeoutMs: 600_000` and the loop clamps
|
|
23
|
+
* to the hard cap sees `outcome: 'clamped'` and the requested /
|
|
24
|
+
* effective budgets on the result.
|
|
25
|
+
* - the loop no longer returns a success-shaped result on full
|
|
26
|
+
* timeout. A timed-out slot still appears in the per-dispatch
|
|
27
|
+
* results array, but the *batch* outcome is `timed-out`.
|
|
28
|
+
* - the no-progress watchdog (a new option) raises the `no-progress`
|
|
29
|
+
* outcome before the full deadline elapses if a bounded window
|
|
30
|
+
* passes with no observable progress (e.g. a slot's `lastBeatAt`
|
|
31
|
+
* has not advanced).
|
|
32
|
+
*
|
|
33
|
+
* The de-escalation flag is `PEAKS_DISPATCH_DISABLE_FAILFAST` (read
|
|
34
|
+
* from process.env at module load). When set, the loop falls back to
|
|
35
|
+
* the pre-S4 silent return so a stuck session can be unblocked by
|
|
36
|
+
* flipping the env var rather than rebuilding.
|
|
37
|
+
*
|
|
38
|
+
* Slice `strict-remediation-abc` (C wave 1, leaf `c1w1-await-batch`): the
|
|
39
|
+
* per-slot half of the loop — record reader, slot table, one-tick observation
|
|
40
|
+
* pass, no-progress predicate, poll sleep, result/note rendering — moved
|
|
41
|
+
* VERBATIM into `./await-batch-helpers.ts`. `awaitBatch` was 155 lines at
|
|
42
|
+
* complexity 40, so it held a `max-lines-per-function` error AND a `complexity`
|
|
43
|
+
* warning; that pairing is why no declaration hoist could shorten this file.
|
|
44
|
+
* The bodies did not change. `awaitBatch` keeps this export path because
|
|
45
|
+
* `tests/unit/services/dispatch/sub-agent-dispatcher-timeouts.test.ts` stubs
|
|
46
|
+
* `~/src/services/dispatch/await-batch.js` by path; the budget and outcome
|
|
47
|
+
* rules stay here because they are what the public types above describe.
|
|
48
|
+
*/
|
|
49
|
+
import { type AwaitBatchSlotResult } from './await-batch-helpers.js';
|
|
1
50
|
export type AwaitBatchOutcome = 'completed' | 'timed-out' | 'clamped' | 'no-progress';
|
|
2
51
|
export interface AwaitBatchOptions {
|
|
3
52
|
/** Caller-supplied per-IDE default when no timeoutMs is provided. */
|
|
@@ -47,13 +96,7 @@ export interface AwaitBatchOptions {
|
|
|
47
96
|
}
|
|
48
97
|
export interface AwaitBatchResult {
|
|
49
98
|
/** Per-dispatch slot, in dispatchIndex order. */
|
|
50
|
-
readonly results: ReadonlyArray<
|
|
51
|
-
readonly dispatchIndex: number;
|
|
52
|
-
readonly recordPath: string;
|
|
53
|
-
readonly status: 'done' | 'failed' | 'cancelled' | 'timeout';
|
|
54
|
-
readonly durationMs: number;
|
|
55
|
-
readonly note: string | null;
|
|
56
|
-
}>;
|
|
99
|
+
readonly results: ReadonlyArray<AwaitBatchSlotResult>;
|
|
57
100
|
/** Batch-level outcome — distinct, machine-readable. */
|
|
58
101
|
readonly outcome: AwaitBatchOutcome;
|
|
59
102
|
/** What the caller asked for (or the IDE default, when omitted). */
|
|
@@ -34,11 +34,21 @@
|
|
|
34
34
|
* from process.env at module load). When set, the loop falls back to
|
|
35
35
|
* the pre-S4 silent return so a stuck session can be unblocked by
|
|
36
36
|
* flipping the env var rather than rebuilding.
|
|
37
|
+
*
|
|
38
|
+
* Slice `strict-remediation-abc` (C wave 1, leaf `c1w1-await-batch`): the
|
|
39
|
+
* per-slot half of the loop — record reader, slot table, one-tick observation
|
|
40
|
+
* pass, no-progress predicate, poll sleep, result/note rendering — moved
|
|
41
|
+
* VERBATIM into `./await-batch-helpers.ts`. `awaitBatch` was 155 lines at
|
|
42
|
+
* complexity 40, so it held a `max-lines-per-function` error AND a `complexity`
|
|
43
|
+
* warning; that pairing is why no declaration hoist could shorten this file.
|
|
44
|
+
* The bodies did not change. `awaitBatch` keeps this export path because
|
|
45
|
+
* `tests/unit/services/dispatch/sub-agent-dispatcher-timeouts.test.ts` stubs
|
|
46
|
+
* `~/src/services/dispatch/await-batch.js` by path; the budget and outcome
|
|
47
|
+
* rules stay here because they are what the public types above describe.
|
|
37
48
|
*/
|
|
38
|
-
import {
|
|
49
|
+
import { buildBatchResults, createSlotTable, defaultReadOutcome, hasNoProgress, pollSlotsOnce, sleepTick } from './await-batch-helpers.js';
|
|
39
50
|
const DEFAULT_HARD_CAP_MS = 120_000;
|
|
40
51
|
const DEFAULT_NO_PROGRESS_MS = 60_000;
|
|
41
|
-
const DEFAULT_POLL_INTERVAL_MS = 50;
|
|
42
52
|
/**
|
|
43
53
|
* Fail-fast de-escalation: the env var is read once at module load
|
|
44
54
|
* (matches the pre-S4 env-var-loading semantics for `peaks`
|
|
@@ -55,218 +65,111 @@ const FAILFAST_DISABLED = (() => {
|
|
|
55
65
|
*/
|
|
56
66
|
export async function awaitBatch(dispatchCount, recordPaths, timeoutMs, options = { defaultTimeoutMs: 60_000 }) {
|
|
57
67
|
if (dispatchCount <= 0 || recordPaths.length === 0) {
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
results: [],
|
|
61
|
-
outcome: 'completed',
|
|
62
|
-
requestedTimeoutMs: requested,
|
|
63
|
-
effectiveTimeoutMs: 0,
|
|
64
|
-
hardCapMs: options.hardCapMs ?? DEFAULT_HARD_CAP_MS
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
const hardCap = options.hardCapMs ?? DEFAULT_HARD_CAP_MS;
|
|
68
|
-
const requested = timeoutMs ?? options.defaultTimeoutMs;
|
|
69
|
-
// S4 (AC-3.2) — surface the clamp. A caller-supplied timeout above
|
|
70
|
-
// the hard cap is reported as `clamped`; the effective budget is
|
|
71
|
-
// what the loop actually waited.
|
|
72
|
-
const requestedClamped = requested > hardCap;
|
|
73
|
-
const effective = Math.min(Math.max(requested, 0), hardCap);
|
|
74
|
-
const noProgressBudget = options.noProgressMs ?? DEFAULT_NO_PROGRESS_MS;
|
|
75
|
-
const now = options.now ?? (() => Date.now());
|
|
76
|
-
const schedule = options.schedule ?? ((cb, ms) => {
|
|
77
|
-
const t = setTimeout(cb, ms);
|
|
78
|
-
t.unref?.();
|
|
79
|
-
return t;
|
|
80
|
-
});
|
|
81
|
-
const readOutcome = options.readOutcome ?? ((p) => defaultReadOutcome(p).status);
|
|
82
|
-
const readRecord = options.readRecord ?? defaultReadOutcome;
|
|
83
|
-
const startedAt = now();
|
|
84
|
-
const slots = new Map();
|
|
85
|
-
for (let i = 0; i < recordPaths.length; i += 1) {
|
|
86
|
-
const recordPath = recordPaths[i] ?? '';
|
|
87
|
-
slots.set(i, {
|
|
88
|
-
recordPath,
|
|
89
|
-
status: 'timeout',
|
|
90
|
-
note: null,
|
|
91
|
-
finishedAt: null,
|
|
92
|
-
lastProgress: 0
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
// Track last observed progress per slot to power the no-progress
|
|
96
|
-
// watchdog. The watchdog advances on any per-tick observation
|
|
97
|
-
// change in the slot's progress hint (read from the file's
|
|
98
|
-
// `progress` field when available, else from the `heartbeats`
|
|
99
|
-
// array's last entry).
|
|
100
|
-
const lastProgressAt = new Map();
|
|
101
|
-
for (const [idx] of slots) {
|
|
102
|
-
lastProgressAt.set(idx, startedAt);
|
|
68
|
+
return emptyBatchResult(timeoutMs, options);
|
|
103
69
|
}
|
|
70
|
+
const budgets = resolveBudgets(timeoutMs, options);
|
|
71
|
+
const seams = resolveSeams(options);
|
|
72
|
+
const startedAt = seams.now();
|
|
73
|
+
const table = createSlotTable(recordPaths, startedAt);
|
|
104
74
|
let batchOutcome = 'completed';
|
|
105
|
-
while (slots.size > 0 && now() - startedAt < effective) {
|
|
106
|
-
|
|
107
|
-
for (const [idx, slot] of slots) {
|
|
108
|
-
if (slot.finishedAt !== null)
|
|
109
|
-
continue;
|
|
110
|
-
const outcome = readOutcome(slot.recordPath);
|
|
111
|
-
if (outcome === null) {
|
|
112
|
-
allDone = false;
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
// The default readOutcome returns the on-disk `status`. We map
|
|
116
|
-
// a small set of values to the per-dispatch status union.
|
|
117
|
-
// Slice 2026-07-30-nightshift: also capture the optional
|
|
118
|
-
// `outcome` field so the per-IDE note can surface the human
|
|
119
|
-
// reason (e.g. "mock failure at leaf-2"). The `outcome` is read
|
|
120
|
-
// alongside the `status` via `readRecord` and surfaced into
|
|
121
|
-
// `slot.note` for failed dispatches; for done/cancelled the
|
|
122
|
-
// note is left null (matches the pre-nightshift contract).
|
|
123
|
-
// `stale` is mapped to `timeout` so the per-IDE note preserves
|
|
124
|
-
// the human-readable reason (cursor / claude-code both surface
|
|
125
|
-
// `stale` on the wire but the BatchResult.status union only
|
|
126
|
-
// knows `timeout`).
|
|
127
|
-
const record = readRecord(slot.recordPath);
|
|
128
|
-
if (outcome === 'done' || outcome === 'success') {
|
|
129
|
-
slot.status = 'done';
|
|
130
|
-
slot.note = null;
|
|
131
|
-
slot.finishedAt = now();
|
|
132
|
-
lastProgressAt.set(idx, now());
|
|
133
|
-
}
|
|
134
|
-
else if (outcome === 'failed') {
|
|
135
|
-
slot.status = 'failed';
|
|
136
|
-
slot.note = record.outcome ?? null;
|
|
137
|
-
slot.finishedAt = now();
|
|
138
|
-
lastProgressAt.set(idx, now());
|
|
139
|
-
}
|
|
140
|
-
else if (outcome === 'cancelled') {
|
|
141
|
-
slot.status = 'cancelled';
|
|
142
|
-
slot.note = null;
|
|
143
|
-
slot.finishedAt = now();
|
|
144
|
-
lastProgressAt.set(idx, now());
|
|
145
|
-
}
|
|
146
|
-
else if (outcome === 'stale') {
|
|
147
|
-
slot.status = 'timeout';
|
|
148
|
-
slot.note = 'stale';
|
|
149
|
-
slot.finishedAt = now();
|
|
150
|
-
lastProgressAt.set(idx, now());
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
// Any other status (queued / running / finalizing /
|
|
154
|
-
// never-started / unreadable) means the dispatch has not
|
|
155
|
-
// reached a terminal state yet.
|
|
156
|
-
allDone = false;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
if (allDone)
|
|
75
|
+
while (table.slots.size > 0 && seams.now() - startedAt < budgets.effective) {
|
|
76
|
+
if (pollSlotsOnce(table, seams.readOutcome, seams.readRecord, seams.now)) {
|
|
160
77
|
break;
|
|
161
|
-
|
|
162
|
-
// progress
|
|
163
|
-
if (now() - startedAt < effective) {
|
|
164
|
-
|
|
165
|
-
if (allStalled && slots.size > 0) {
|
|
78
|
+
}
|
|
79
|
+
// No-progress watchdog: only while the effective budget still holds.
|
|
80
|
+
if (seams.now() - startedAt < budgets.effective) {
|
|
81
|
+
if (hasNoProgress(table, seams.now, budgets.noProgressBudget)) {
|
|
166
82
|
batchOutcome = 'no-progress';
|
|
167
83
|
break;
|
|
168
84
|
}
|
|
169
85
|
}
|
|
170
86
|
// Sleep a tick.
|
|
171
|
-
await
|
|
172
|
-
}
|
|
173
|
-
// Post-loop batch outcome:
|
|
174
|
-
// - `completed` — every slot reached a terminal state
|
|
175
|
-
// - `timed-out` — at least one slot is still pending and the
|
|
176
|
-
// effective budget elapsed
|
|
177
|
-
// - `clamped` — the caller's `requestedTimeoutMs` exceeded the
|
|
178
|
-
// hard cap (AC-3.2). The loop still ran the effective budget;
|
|
179
|
-
// `clamped` takes precedence over `timed-out` because the
|
|
180
|
-
// caller specifically asked for more than the cap and the
|
|
181
|
-
// caller needs to know the cap was applied (the timeout is
|
|
182
|
-
// secondary information).
|
|
183
|
-
// - `no-progress` — the watchdog fired (AC-3.4)
|
|
184
|
-
if (batchOutcome === 'completed' && slots.size > 0) {
|
|
185
|
-
const allReached = Array.from(slots.values()).every((s) => s.finishedAt !== null);
|
|
186
|
-
if (!allReached) {
|
|
187
|
-
batchOutcome = requestedClamped ? 'clamped' : 'timed-out';
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
if (batchOutcome === 'completed' && requestedClamped) {
|
|
191
|
-
batchOutcome = 'clamped';
|
|
87
|
+
await sleepTick(seams.schedule);
|
|
192
88
|
}
|
|
89
|
+
batchOutcome = resolveBatchOutcome(batchOutcome, table.slots, budgets.requestedClamped);
|
|
193
90
|
// Build the per-dispatch results in dispatchIndex order.
|
|
194
|
-
|
|
195
|
-
// rewritten to match the 1.4 dogfood contract:
|
|
196
|
-
// - claude-code (no notePrefix): note = slot.note (the raw
|
|
197
|
-
// outcome, or null when done/cancelled)
|
|
198
|
-
// - other IDEs (notePrefix set):
|
|
199
|
-
// - on timeout: `${notePrefix} (timeout)`
|
|
200
|
-
// - on failed (with outcome): `${notePrefix} — ${outcome}`
|
|
201
|
-
// - on failed (no outcome): `${notePrefix}`
|
|
202
|
-
// - on done / cancelled: `${notePrefix}`
|
|
203
|
-
const results = Array.from(slots.entries())
|
|
204
|
-
.sort(([a], [b]) => a - b)
|
|
205
|
-
.map(([idx, slot]) => {
|
|
206
|
-
const finishedAt = slot.finishedAt ?? startedAt + effective;
|
|
207
|
-
const baseNote = options.notePrefix ?? null;
|
|
208
|
-
let note;
|
|
209
|
-
if (baseNote === null) {
|
|
210
|
-
// Claude-Code path: surface the raw outcome (no per-IDE prefix).
|
|
211
|
-
note = slot.note;
|
|
212
|
-
}
|
|
213
|
-
else if (slot.finishedAt === null) {
|
|
214
|
-
// Timed-out slot: keep the legacy ` (timeout)` suffix.
|
|
215
|
-
note = `${baseNote} (timeout)`;
|
|
216
|
-
}
|
|
217
|
-
else if (slot.status === 'failed' && slot.note !== null && slot.note.length > 0) {
|
|
218
|
-
// Failed with a human reason: `${notePrefix} — ${outcome}`.
|
|
219
|
-
note = `${baseNote} — ${slot.note}`;
|
|
220
|
-
}
|
|
221
|
-
else if (slot.note !== null && slot.note.length > 0) {
|
|
222
|
-
// Non-failed terminal slot with a non-null note (e.g. cursor /
|
|
223
|
-
// claude-code `stale` → status=timeout, note='stale'):
|
|
224
|
-
// `${notePrefix} — ${note}` so the human reason is surfaced.
|
|
225
|
-
// Slice 2026-07-30-nightshift: previously this branch dropped
|
|
226
|
-
// the slot's note entirely (the bare-prefix else swallowed
|
|
227
|
-
// it). The 1.4 dogfood for `stale` flips the contract.
|
|
228
|
-
note = `${baseNote} — ${slot.note}`;
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
// Done / cancelled / failed-without-reason: bare prefix.
|
|
232
|
-
note = baseNote;
|
|
233
|
-
}
|
|
234
|
-
return {
|
|
235
|
-
dispatchIndex: idx,
|
|
236
|
-
recordPath: slot.recordPath,
|
|
237
|
-
status: slot.status,
|
|
238
|
-
durationMs: finishedAt - startedAt,
|
|
239
|
-
note
|
|
240
|
-
};
|
|
241
|
-
});
|
|
91
|
+
const results = buildBatchResults(table, options.notePrefix, budgets.effective);
|
|
242
92
|
// Fail-fast de-escalation: when the env var is set, surface the
|
|
243
93
|
// typed outcome but do not let it influence the per-dispatch
|
|
244
94
|
// results. This preserves the pre-S4 silent-return shape so a
|
|
245
95
|
// stuck session can be unblocked by flipping the flag.
|
|
246
|
-
|
|
247
|
-
batchOutcome = 'completed';
|
|
248
|
-
}
|
|
96
|
+
batchOutcome = deescalateOutcome(batchOutcome, FAILFAST_DISABLED);
|
|
249
97
|
return {
|
|
250
98
|
results,
|
|
251
99
|
outcome: batchOutcome,
|
|
100
|
+
requestedTimeoutMs: budgets.requested,
|
|
101
|
+
effectiveTimeoutMs: budgets.effective,
|
|
102
|
+
hardCapMs: budgets.hardCap
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** The zero-slot return: nothing to poll, so nothing was waited. */
|
|
106
|
+
function emptyBatchResult(timeoutMs, options) {
|
|
107
|
+
const requested = timeoutMs ?? options.defaultTimeoutMs;
|
|
108
|
+
return {
|
|
109
|
+
results: [],
|
|
110
|
+
outcome: 'completed',
|
|
252
111
|
requestedTimeoutMs: requested,
|
|
253
|
-
effectiveTimeoutMs:
|
|
254
|
-
hardCapMs:
|
|
112
|
+
effectiveTimeoutMs: 0,
|
|
113
|
+
hardCapMs: options.hardCapMs ?? DEFAULT_HARD_CAP_MS
|
|
255
114
|
};
|
|
256
115
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
116
|
+
/**
|
|
117
|
+
* The wait budget. S4 (AC-3.2) — surface the clamp. A caller-supplied
|
|
118
|
+
* timeout above the hard cap is reported as `clamped`; the effective
|
|
119
|
+
* budget is what the loop actually waited.
|
|
120
|
+
*/
|
|
121
|
+
function resolveBudgets(timeoutMs, options) {
|
|
122
|
+
const hardCap = options.hardCapMs ?? DEFAULT_HARD_CAP_MS;
|
|
123
|
+
const requested = timeoutMs ?? options.defaultTimeoutMs;
|
|
124
|
+
const requestedClamped = requested > hardCap;
|
|
125
|
+
const effective = Math.min(Math.max(requested, 0), hardCap);
|
|
126
|
+
const noProgressBudget = options.noProgressMs ?? DEFAULT_NO_PROGRESS_MS;
|
|
127
|
+
return { hardCap, requested, requestedClamped, effective, noProgressBudget };
|
|
128
|
+
}
|
|
129
|
+
/** Resolve the test seams, keeping the production defaults. */
|
|
130
|
+
function resolveSeams(options) {
|
|
131
|
+
const now = options.now ?? (() => Date.now());
|
|
132
|
+
const schedule = options.schedule ??
|
|
133
|
+
((cb, ms) => {
|
|
134
|
+
const t = setTimeout(cb, ms);
|
|
135
|
+
t.unref?.();
|
|
136
|
+
return t;
|
|
137
|
+
});
|
|
138
|
+
const readOutcome = options.readOutcome ?? ((p) => defaultReadOutcome(p).status);
|
|
139
|
+
const readRecord = options.readRecord ?? defaultReadOutcome;
|
|
140
|
+
return { now, schedule, readOutcome, readRecord };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Post-loop batch outcome:
|
|
144
|
+
* - `completed` — every slot reached a terminal state
|
|
145
|
+
* - `timed-out` — at least one slot is still pending and the
|
|
146
|
+
* effective budget elapsed
|
|
147
|
+
* - `clamped` — the caller's `requestedTimeoutMs` exceeded the
|
|
148
|
+
* hard cap (AC-3.2). The loop still ran the effective budget;
|
|
149
|
+
* `clamped` takes precedence over `timed-out` because the
|
|
150
|
+
* caller specifically asked for more than the cap and the
|
|
151
|
+
* caller needs to know the cap was applied (the timeout is
|
|
152
|
+
* secondary information).
|
|
153
|
+
* - `no-progress` — the watchdog fired (AC-3.4)
|
|
154
|
+
*/
|
|
155
|
+
function resolveBatchOutcome(batchOutcome, slots, requestedClamped) {
|
|
156
|
+
let outcome = batchOutcome;
|
|
157
|
+
if (outcome === 'completed' && slots.size > 0) {
|
|
158
|
+
const allReached = Array.from(slots.values()).every((s) => s.finishedAt !== null);
|
|
159
|
+
if (!allReached) {
|
|
160
|
+
outcome = requestedClamped ? 'clamped' : 'timed-out';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (outcome === 'completed' && requestedClamped) {
|
|
164
|
+
outcome = 'clamped';
|
|
268
165
|
}
|
|
269
|
-
|
|
270
|
-
|
|
166
|
+
return outcome;
|
|
167
|
+
}
|
|
168
|
+
/** The de-escalation itself: the flag only ever downgrades to `completed`. */
|
|
169
|
+
function deescalateOutcome(batchOutcome, failfastDisabled) {
|
|
170
|
+
if (failfastDisabled &&
|
|
171
|
+
(batchOutcome === 'timed-out' || batchOutcome === 'no-progress' || batchOutcome === 'clamped')) {
|
|
172
|
+
return 'completed';
|
|
271
173
|
}
|
|
174
|
+
return batchOutcome;
|
|
272
175
|
}
|
|
@@ -95,7 +95,8 @@ export function resetBatch(projectRoot, sid, batchId) {
|
|
|
95
95
|
const { unlinkSync } = require('node:fs');
|
|
96
96
|
unlinkSync(path);
|
|
97
97
|
}
|
|
98
|
-
catch {
|
|
98
|
+
catch {
|
|
99
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
99
100
|
/* best-effort; counter file is informational */
|
|
100
101
|
}
|
|
101
102
|
}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
const INSTRUCTIONS = [
|
|
23
23
|
'A previous merge into the caller branch conflicted. Resolve the conflict preserving the intent of both your prior work and the caller branch.',
|
|
24
24
|
'Do NOT introduce new functionality or refactor outside the conflict.',
|
|
25
|
-
'Re-run the dispatch and report the new conflict state. The parent will retry the merge.'
|
|
25
|
+
'Re-run the dispatch and report the new conflict state. The parent will retry the merge.'
|
|
26
26
|
];
|
|
27
27
|
export function buildConflictReplay(input) {
|
|
28
28
|
const prompt = [
|
|
@@ -38,7 +38,7 @@ export function buildConflictReplay(input) {
|
|
|
38
38
|
'### Conflict diff',
|
|
39
39
|
'```diff',
|
|
40
40
|
input.conflictDiff,
|
|
41
|
-
'```'
|
|
41
|
+
'```'
|
|
42
42
|
].join('\n');
|
|
43
43
|
return { prompt, instructions: INSTRUCTIONS };
|
|
44
44
|
}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { createHash } from 'node:crypto';
|
|
20
20
|
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
21
21
|
import { join } from 'node:path';
|
|
22
|
+
import { isArray } from '../../shared/array-guards.js';
|
|
22
23
|
/** Thrown when contract IO fails. */
|
|
23
24
|
export class ContractStoreError extends Error {
|
|
24
25
|
code = 'CONTRACT_STORE_ERROR';
|
|
@@ -86,7 +87,7 @@ export function writeContract(projectRoot, sessionId, input) {
|
|
|
86
87
|
if (!input.sliceId || input.sliceId.length === 0) {
|
|
87
88
|
throw new ContractStoreError('sliceId is required');
|
|
88
89
|
}
|
|
89
|
-
if (!
|
|
90
|
+
if (!isArray(input.exports) || !isArray(input.types) || !isArray(input.publicSignatures)) {
|
|
90
91
|
throw new ContractStoreError('exports, types, publicSignatures must be arrays');
|
|
91
92
|
}
|
|
92
93
|
const completedAt = input.completedAt ?? new Date().toISOString();
|
|
@@ -147,7 +148,9 @@ export function listContracts(projectRoot, sessionId) {
|
|
|
147
148
|
export function formatContractInjection(contracts) {
|
|
148
149
|
if (contracts.length === 0)
|
|
149
150
|
return '';
|
|
150
|
-
const blocks = [
|
|
151
|
+
const blocks = [
|
|
152
|
+
'## Ancestor slice contracts (do not import source — use this surface)'
|
|
153
|
+
];
|
|
151
154
|
for (const c of contracts) {
|
|
152
155
|
blocks.push('', `### slice ${c.sliceId} (completed ${c.completedAt}, hash=${c.contractHash.slice(0, 12)})`, `- exports: ${c.exports.length === 0 ? '(none)' : c.exports.join(', ')}`, `- types: ${c.types.length === 0 ? '(none)' : c.types.join(', ')}`, '- publicSignatures:', ...(c.publicSignatures.length === 0
|
|
153
156
|
? [' - (none)']
|