peaks-loop 4.0.0-beta.8 → 4.0.0-beta.9
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 +45 -0
- package/bin/peaks.js +1 -1
- package/dist/cli/cli-helpers.d.ts +43 -0
- package/dist/cli/cli-helpers.js +86 -0
- package/dist/cli/commands/_cli-error-envelope.d.ts +19 -0
- package/dist/cli/commands/_cli-error-envelope.js +50 -0
- package/dist/cli/commands/adapter-commands-s2a.d.ts +34 -0
- package/dist/cli/commands/adapter-commands-s2a.js +92 -0
- package/dist/cli/commands/adapter-commands.d.ts +30 -0
- package/dist/cli/commands/adapter-commands.js +35 -0
- package/dist/cli/commands/agent-commands.d.ts +20 -0
- package/dist/cli/commands/agent-commands.js +48 -0
- package/dist/cli/commands/asset-commands.d.ts +45 -0
- package/dist/cli/commands/asset-commands.js +404 -0
- package/dist/cli/commands/audit-commands.d.ts +28 -0
- package/dist/cli/commands/audit-commands.js +437 -0
- package/dist/cli/commands/bee-commands.d.ts +26 -0
- package/dist/cli/commands/bee-commands.js +169 -0
- package/dist/cli/commands/capability-commands.d.ts +16 -0
- package/dist/cli/commands/capability-commands.js +45 -0
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +3 -0
- package/dist/cli/commands/capability-worker-config-sc-commands.js +10 -0
- package/dist/cli/commands/classify-classify-commands.d.ts +19 -0
- package/dist/cli/commands/classify-classify-commands.js +151 -0
- package/dist/cli/commands/code-commands.d.ts +80 -0
- package/dist/cli/commands/code-commands.js +798 -0
- package/dist/cli/commands/code-review-commands.d.ts +34 -0
- package/dist/cli/commands/code-review-commands.js +83 -0
- package/dist/cli/commands/codegraph-commands.d.ts +3 -0
- package/dist/cli/commands/codegraph-commands.js +99 -0
- package/dist/cli/commands/compact-command.d.ts +21 -0
- package/dist/cli/commands/compact-command.js +252 -0
- package/dist/cli/commands/complexity-commands.d.ts +9 -0
- package/dist/cli/commands/complexity-commands.js +34 -0
- package/dist/cli/commands/config-commands.d.ts +3 -0
- package/dist/cli/commands/config-commands.js +220 -0
- package/dist/cli/commands/context-builder-commands.d.ts +11 -0
- package/dist/cli/commands/context-builder-commands.js +85 -0
- package/dist/cli/commands/context-commands.d.ts +21 -0
- package/dist/cli/commands/context-commands.js +254 -0
- package/dist/cli/commands/contract-commands.d.ts +26 -0
- package/dist/cli/commands/contract-commands.js +114 -0
- package/dist/cli/commands/core/artifacts-command.d.ts +3 -0
- package/dist/cli/commands/core/artifacts-command.js +62 -0
- package/dist/cli/commands/core/binding-commands.d.ts +3 -0
- package/dist/cli/commands/core/binding-commands.js +58 -0
- package/dist/cli/commands/core/doctor-command.d.ts +11 -0
- package/dist/cli/commands/core/doctor-command.js +204 -0
- package/dist/cli/commands/core/memory-command.d.ts +3 -0
- package/dist/cli/commands/core/memory-command.js +98 -0
- package/dist/cli/commands/core/profile-command.d.ts +3 -0
- package/dist/cli/commands/core/profile-command.js +9 -0
- package/dist/cli/commands/core/proxy-command.d.ts +3 -0
- package/dist/cli/commands/core/proxy-command.js +26 -0
- package/dist/cli/commands/core/session-command.d.ts +3 -0
- package/dist/cli/commands/core/session-command.js +241 -0
- package/dist/cli/commands/core/skill-command.d.ts +3 -0
- package/dist/cli/commands/core/skill-command.js +300 -0
- package/dist/cli/commands/core/standards-command.d.ts +3 -0
- package/dist/cli/commands/core/standards-command.js +95 -0
- package/dist/cli/commands/core-artifact-commands.d.ts +15 -0
- package/dist/cli/commands/core-artifact-commands.js +31 -0
- package/dist/cli/commands/dispatch-commands.d.ts +10 -0
- package/dist/cli/commands/dispatch-commands.js +351 -0
- package/dist/cli/commands/dispatch-from-dag.d.ts +3 -0
- package/dist/cli/commands/dispatch-from-dag.js +251 -0
- package/dist/cli/commands/doc-commands.d.ts +11 -0
- package/dist/cli/commands/doc-commands.js +65 -0
- package/dist/cli/commands/evolution-commands.d.ts +27 -0
- package/dist/cli/commands/evolution-commands.js +393 -0
- package/dist/cli/commands/feedback-commands.d.ts +18 -0
- package/dist/cli/commands/feedback-commands.js +145 -0
- package/dist/cli/commands/final-review-commands.d.ts +31 -0
- package/dist/cli/commands/final-review-commands.js +161 -0
- package/dist/cli/commands/fixture-commands.d.ts +32 -0
- package/dist/cli/commands/fixture-commands.js +91 -0
- package/dist/cli/commands/fork-commands.d.ts +16 -0
- package/dist/cli/commands/fork-commands.js +163 -0
- package/dist/cli/commands/gate-commands.d.ts +3 -0
- package/dist/cli/commands/gate-commands.js +117 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +3 -0
- package/dist/cli/commands/heartbeat-commands.js +135 -0
- package/dist/cli/commands/hook-handle.d.ts +17 -0
- package/dist/cli/commands/hook-handle.js +157 -0
- package/dist/cli/commands/hooks-commands.d.ts +3 -0
- package/dist/cli/commands/hooks-commands.js +156 -0
- package/dist/cli/commands/ide-commands.d.ts +25 -0
- package/dist/cli/commands/ide-commands.js +42 -0
- package/dist/cli/commands/impact-commands.d.ts +15 -0
- package/dist/cli/commands/impact-commands.js +62 -0
- package/dist/cli/commands/job-commands.d.ts +3 -0
- package/dist/cli/commands/job-commands.js +289 -0
- package/dist/cli/commands/legacy-commands.d.ts +11 -0
- package/dist/cli/commands/legacy-commands.js +32 -0
- package/dist/cli/commands/log-commands.d.ts +17 -0
- package/dist/cli/commands/log-commands.js +64 -0
- package/dist/cli/commands/loop-commands.d.ts +27 -0
- package/dist/cli/commands/loop-commands.js +262 -0
- package/dist/cli/commands/loop-eval-commands.d.ts +20 -0
- package/dist/cli/commands/loop-eval-commands.js +526 -0
- package/dist/cli/commands/memory-commands.d.ts +23 -0
- package/dist/cli/commands/memory-commands.js +129 -0
- package/dist/cli/commands/migrate-1-4-1-command.d.ts +11 -0
- package/dist/cli/commands/migrate-1-4-1-command.js +34 -0
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.d.ts +20 -0
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +52 -0
- package/dist/cli/commands/mut-commands.d.ts +20 -0
- package/dist/cli/commands/mut-commands.js +239 -0
- package/dist/cli/commands/observability-commands.d.ts +22 -0
- package/dist/cli/commands/observability-commands.js +201 -0
- package/dist/cli/commands/openspec-commands.d.ts +3 -0
- package/dist/cli/commands/openspec-commands.js +237 -0
- package/dist/cli/commands/perf-audit-commands.d.ts +22 -0
- package/dist/cli/commands/perf-audit-commands.js +132 -0
- package/dist/cli/commands/perf-commands.d.ts +3 -0
- package/dist/cli/commands/perf-commands.js +41 -0
- package/dist/cli/commands/playwright-commands.d.ts +95 -0
- package/dist/cli/commands/playwright-commands.js +432 -0
- package/dist/cli/commands/polyrepo-commands.d.ts +37 -0
- package/dist/cli/commands/polyrepo-commands.js +155 -0
- package/dist/cli/commands/prd-blocks-commands.d.ts +18 -0
- package/dist/cli/commands/prd-blocks-commands.js +50 -0
- package/dist/cli/commands/prd-commands.d.ts +18 -0
- package/dist/cli/commands/prd-commands.js +141 -0
- package/dist/cli/commands/preferences-commands.d.ts +2 -0
- package/dist/cli/commands/preferences-commands.js +197 -0
- package/dist/cli/commands/project-commands.d.ts +3 -0
- package/dist/cli/commands/project-commands.js +253 -0
- package/dist/cli/commands/qa-business-review-commands.d.ts +17 -0
- package/dist/cli/commands/qa-business-review-commands.js +148 -0
- package/dist/cli/commands/qa-commands.d.ts +94 -0
- package/dist/cli/commands/qa-commands.js +271 -0
- package/dist/cli/commands/release-commands.d.ts +24 -0
- package/dist/cli/commands/release-commands.js +231 -0
- package/dist/cli/commands/request-commands.d.ts +3 -0
- package/dist/cli/commands/request-commands.js +548 -0
- package/dist/cli/commands/retrospective-commands.d.ts +12 -0
- package/dist/cli/commands/retrospective-commands.js +175 -0
- package/dist/cli/commands/reviewer-commands.d.ts +14 -0
- package/dist/cli/commands/reviewer-commands.js +64 -0
- package/dist/cli/commands/role-commands.d.ts +13 -0
- package/dist/cli/commands/role-commands.js +85 -0
- package/dist/cli/commands/runtime-commands.d.ts +52 -0
- package/dist/cli/commands/runtime-commands.js +150 -0
- package/dist/cli/commands/sc-commands.d.ts +3 -0
- package/dist/cli/commands/sc-commands.js +45 -0
- package/dist/cli/commands/scan-commands.d.ts +3 -0
- package/dist/cli/commands/scan-commands.js +445 -0
- package/dist/cli/commands/security-audit-commands.d.ts +23 -0
- package/dist/cli/commands/security-audit-commands.js +132 -0
- package/dist/cli/commands/sediment-commands.d.ts +80 -0
- package/dist/cli/commands/sediment-commands.js +649 -0
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +37 -0
- package/dist/cli/commands/session-auto-compact-hook-command.js +127 -0
- package/dist/cli/commands/session-checkpoint-command.d.ts +10 -0
- package/dist/cli/commands/session-checkpoint-command.js +100 -0
- package/dist/cli/commands/session-migrate-skill-name.d.ts +17 -0
- package/dist/cli/commands/session-migrate-skill-name.js +41 -0
- package/dist/cli/commands/session-resume-command.d.ts +11 -0
- package/dist/cli/commands/session-resume-command.js +83 -0
- package/dist/cli/commands/share-commands.d.ts +17 -0
- package/dist/cli/commands/share-commands.js +296 -0
- package/dist/cli/commands/skill-conformance-commands.d.ts +9 -0
- package/dist/cli/commands/skill-conformance-commands.js +39 -0
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.d.ts +67 -0
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +173 -0
- package/dist/cli/commands/skill-search-commands.d.ts +25 -0
- package/dist/cli/commands/skill-search-commands.js +68 -0
- package/dist/cli/commands/skill-visibility.d.ts +8 -0
- package/dist/cli/commands/skill-visibility.js +63 -0
- package/dist/cli/commands/slice-commands.d.ts +24 -0
- package/dist/cli/commands/slice-commands.js +492 -0
- package/dist/cli/commands/slice-integrate-commands.d.ts +11 -0
- package/dist/cli/commands/slice-integrate-commands.js +74 -0
- package/dist/cli/commands/slice-review-commands.d.ts +23 -0
- package/dist/cli/commands/slice-review-commands.js +162 -0
- package/dist/cli/commands/smoke-commands.d.ts +21 -0
- package/dist/cli/commands/smoke-commands.js +203 -0
- package/dist/cli/commands/sop-commands.d.ts +3 -0
- package/dist/cli/commands/sop-commands.js +215 -0
- package/dist/cli/commands/statusline-commands.d.ts +3 -0
- package/dist/cli/commands/statusline-commands.js +169 -0
- package/dist/cli/commands/sub-agent-commands.d.ts +22 -0
- package/dist/cli/commands/sub-agent-commands.js +19 -0
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +55 -0
- package/dist/cli/commands/sub-agent-dispatch-guard.js +57 -0
- package/dist/cli/commands/sub-agent-shared.d.ts +99 -0
- package/dist/cli/commands/sub-agent-shared.js +67 -0
- package/dist/cli/commands/test-commands.d.ts +47 -0
- package/dist/cli/commands/test-commands.js +204 -0
- package/dist/cli/commands/understand-commands.d.ts +3 -0
- package/dist/cli/commands/understand-commands.js +148 -0
- package/dist/cli/commands/upgrade-commands.d.ts +23 -0
- package/dist/cli/commands/upgrade-commands.js +119 -0
- package/dist/cli/commands/user-touchpoint-commands.d.ts +18 -0
- package/dist/cli/commands/user-touchpoint-commands.js +78 -0
- package/dist/cli/commands/verdict-aggregate-command.d.ts +14 -0
- package/dist/cli/commands/verdict-aggregate-command.js +106 -0
- package/dist/cli/commands/worker-commands.d.ts +3 -0
- package/dist/cli/commands/worker-commands.js +52 -0
- package/dist/cli/commands/workflow-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-commands.js +544 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +39 -0
- package/dist/cli/commands/workflow-plan-commands.js +163 -0
- package/dist/cli/commands/workspace/clean-command.d.ts +14 -0
- package/dist/cli/commands/workspace/clean-command.js +49 -0
- package/dist/cli/commands/workspace/helpers.d.ts +28 -0
- package/dist/cli/commands/workspace/helpers.js +87 -0
- package/dist/cli/commands/workspace/init-command.d.ts +139 -0
- package/dist/cli/commands/workspace/init-command.js +505 -0
- package/dist/cli/commands/workspace/migrate-command.d.ts +11 -0
- package/dist/cli/commands/workspace/migrate-command.js +91 -0
- package/dist/cli/commands/workspace/reconcile-command.d.ts +14 -0
- package/dist/cli/commands/workspace/reconcile-command.js +103 -0
- package/dist/cli/commands/workspace-commands.d.ts +18 -0
- package/dist/cli/commands/workspace-commands.js +50 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +30 -0
- package/dist/cli/program.d.ts +5 -0
- package/dist/cli/program.js +408 -0
- package/dist/hooks/pre-tool-use-sub-agent.d.ts +28 -0
- package/dist/hooks/pre-tool-use-sub-agent.js +105 -0
- package/dist/lib/render/message-renderer.d.ts +20 -0
- package/dist/lib/render/message-renderer.js +80 -0
- package/dist/services/adapter/adapter-registry.d.ts +48 -0
- package/dist/services/adapter/adapter-registry.js +186 -0
- package/dist/services/adapter/adapter.d.ts +27 -0
- package/dist/services/adapter/adapter.js +5 -0
- package/dist/services/adapter/auto-adapter.d.ts +11 -0
- package/dist/services/adapter/auto-adapter.js +15 -0
- package/dist/services/adapter/claude-adapter.d.ts +14 -0
- package/dist/services/adapter/claude-adapter.js +40 -0
- package/dist/services/adapter/codex-adapter.d.ts +14 -0
- package/dist/services/adapter/codex-adapter.js +14 -0
- package/dist/services/adapter/copilot-adapter.d.ts +14 -0
- package/dist/services/adapter/copilot-adapter.js +14 -0
- package/dist/services/agent/ecc-agent-service.d.ts +47 -0
- package/dist/services/agent/ecc-agent-service.js +143 -0
- package/dist/services/artifacts/artifact-lint-service.d.ts +23 -0
- package/dist/services/artifacts/artifact-lint-service.js +99 -0
- package/dist/services/artifacts/artifact-prerequisites.d.ts +78 -0
- package/dist/services/artifacts/artifact-prerequisites.js +491 -0
- package/dist/services/artifacts/artifact-service.d.ts +43 -0
- package/dist/services/artifacts/artifact-service.js +98 -0
- package/dist/services/artifacts/artifact-templates.d.ts +30 -0
- package/dist/services/artifacts/artifact-templates.js +302 -0
- package/dist/services/artifacts/repair-cycle-service.d.ts +23 -0
- package/dist/services/artifacts/repair-cycle-service.js +52 -0
- package/dist/services/artifacts/request-artifact-service.d.ts +116 -0
- package/dist/services/artifacts/request-artifact-service.js +451 -0
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +51 -0
- package/dist/services/artifacts/request-artifact-state-helpers.js +114 -0
- package/dist/services/artifacts/workspace-service.d.ts +34 -0
- package/dist/services/artifacts/workspace-service.js +272 -0
- package/dist/services/audit/artifact-writer.d.ts +93 -0
- package/dist/services/audit/artifact-writer.js +303 -0
- package/dist/services/audit/audit-goal-service.d.ts +35 -0
- package/dist/services/audit/audit-goal-service.js +75 -0
- package/dist/services/audit/audit-goal-types.d.ts +40 -0
- package/dist/services/audit/audit-goal-types.js +15 -0
- package/dist/services/audit/backing-detector.d.ts +24 -0
- package/dist/services/audit/backing-detector.js +59 -0
- package/dist/services/audit/classifier.d.ts +38 -0
- package/dist/services/audit/classifier.js +134 -0
- package/dist/services/audit/decision-writer.d.ts +76 -0
- package/dist/services/audit/decision-writer.js +217 -0
- package/dist/services/audit/enforcers/active-skill-resolver.d.ts +29 -0
- package/dist/services/audit/enforcers/active-skill-resolver.js +71 -0
- package/dist/services/audit/enforcers/code-ban.d.ts +23 -0
- package/dist/services/audit/enforcers/code-ban.js +27 -0
- package/dist/services/audit/enforcers/design-draft-confirm.d.ts +24 -0
- package/dist/services/audit/enforcers/design-draft-confirm.js +58 -0
- package/dist/services/audit/enforcers/lint-audit-regression.d.ts +21 -0
- package/dist/services/audit/enforcers/lint-audit-regression.js +86 -0
- package/dist/services/audit/enforcers/lint-catalog-governance.d.ts +32 -0
- package/dist/services/audit/enforcers/lint-catalog-governance.js +48 -0
- package/dist/services/audit/enforcers/lint-cli-back.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-cli-back.js +35 -0
- package/dist/services/audit/enforcers/lint-output-style.d.ts +11 -0
- package/dist/services/audit/enforcers/lint-output-style.js +94 -0
- package/dist/services/audit/enforcers/lint-reference-integrity.d.ts +6 -0
- package/dist/services/audit/enforcers/lint-reference-integrity.js +83 -0
- package/dist/services/audit/enforcers/lint-reference-shape.d.ts +30 -0
- package/dist/services/audit/enforcers/lint-reference-shape.js +272 -0
- package/dist/services/audit/enforcers/lint-style.d.ts +49 -0
- package/dist/services/audit/enforcers/lint-style.js +173 -0
- package/dist/services/audit/enforcers/lint-workflow-shape.d.ts +4 -0
- package/dist/services/audit/enforcers/lint-workflow-shape.js +100 -0
- package/dist/services/audit/enforcers/login-gate.d.ts +23 -0
- package/dist/services/audit/enforcers/login-gate.js +40 -0
- package/dist/services/audit/enforcers/mock-placement.d.ts +25 -0
- package/dist/services/audit/enforcers/mock-placement.js +48 -0
- package/dist/services/audit/enforcers/no-root-pollution.d.ts +21 -0
- package/dist/services/audit/enforcers/no-root-pollution.js +56 -0
- package/dist/services/audit/enforcers/pre-rd-scan.d.ts +22 -0
- package/dist/services/audit/enforcers/pre-rd-scan.js +23 -0
- package/dist/services/audit/enforcers/prototype-fidelity.d.ts +25 -0
- package/dist/services/audit/enforcers/prototype-fidelity.js +75 -0
- package/dist/services/audit/enforcers/resume-detection.d.ts +21 -0
- package/dist/services/audit/enforcers/resume-detection.js +52 -0
- package/dist/services/audit/enforcers/sub-agent-sid.d.ts +25 -0
- package/dist/services/audit/enforcers/sub-agent-sid.js +63 -0
- package/dist/services/audit/prose-ratio-calculator.d.ts +45 -0
- package/dist/services/audit/prose-ratio-calculator.js +52 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +21 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +229 -0
- package/dist/services/audit/red-line-catalog-p2-b.d.ts +19 -0
- package/dist/services/audit/red-line-catalog-p2-b.js +225 -0
- package/dist/services/audit/red-line-catalog.d.ts +51 -0
- package/dist/services/audit/red-line-catalog.js +195 -0
- package/dist/services/audit/red-lines-service.d.ts +23 -0
- package/dist/services/audit/red-lines-service.js +464 -0
- package/dist/services/audit/scanners/openspec-scanner.d.ts +15 -0
- package/dist/services/audit/scanners/openspec-scanner.js +55 -0
- package/dist/services/audit/scanners/rules-tree-scanner.d.ts +16 -0
- package/dist/services/audit/scanners/rules-tree-scanner.js +56 -0
- package/dist/services/audit/scanners/skills-tree-scanner.d.ts +17 -0
- package/dist/services/audit/scanners/skills-tree-scanner.js +68 -0
- package/dist/services/audit/static-service.d.ts +60 -0
- package/dist/services/audit/static-service.js +130 -0
- package/dist/services/audit/types.d.ts +86 -0
- package/dist/services/audit/types.js +13 -0
- package/dist/services/audit-independent/perf-audit-service.d.ts +151 -0
- package/dist/services/audit-independent/perf-audit-service.js +316 -0
- package/dist/services/audit-independent/security-audit-service.d.ts +155 -0
- package/dist/services/audit-independent/security-audit-service.js +316 -0
- package/dist/services/classify/classify-service.d.ts +42 -0
- package/dist/services/classify/classify-service.js +122 -0
- package/dist/services/classify/classify-types.d.ts +79 -0
- package/dist/services/classify/classify-types.js +90 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +98 -0
- package/dist/services/code/auto-compact-orchestrator.js +343 -0
- package/dist/services/code/batch-heartbeat-poller.d.ts +51 -0
- package/dist/services/code/batch-heartbeat-poller.js +88 -0
- package/dist/services/code/dag-orchestrator.d.ts +128 -0
- package/dist/services/code/dag-orchestrator.js +304 -0
- package/dist/services/code/emit-handoff.d.ts +49 -0
- package/dist/services/code/emit-handoff.js +79 -0
- package/dist/services/code/job-shape-decision.d.ts +71 -0
- package/dist/services/code/job-shape-decision.js +151 -0
- package/dist/services/code/mode-gate.d.ts +163 -0
- package/dist/services/code/mode-gate.js +212 -0
- package/dist/services/code/post-compact-detector.d.ts +61 -0
- package/dist/services/code/post-compact-detector.js +240 -0
- package/dist/services/code/status-line-renderer.d.ts +34 -0
- package/dist/services/code/status-line-renderer.js +55 -0
- package/dist/services/code/step-08-gate.d.ts +90 -0
- package/dist/services/code/step-08-gate.js +136 -0
- package/dist/services/code/user-touchpoint-classifier.d.ts +44 -0
- package/dist/services/code/user-touchpoint-classifier.js +145 -0
- package/dist/services/code-review/ecc-bridge.d.ts +148 -0
- package/dist/services/code-review/ecc-bridge.js +242 -0
- package/dist/services/code-review/ocr-service.d.ts +129 -0
- package/dist/services/code-review/ocr-service.js +369 -0
- package/dist/services/codegraph/codegraph-process-runner.d.ts +2 -0
- package/dist/services/codegraph/codegraph-process-runner.js +93 -0
- package/dist/services/codegraph/codegraph-service.d.ts +43 -0
- package/dist/services/codegraph/codegraph-service.js +160 -0
- package/dist/services/compact/decision-tables.d.ts +66 -0
- package/dist/services/compact/decision-tables.js +127 -0
- package/dist/services/compact/request-transition-hook.d.ts +20 -0
- package/dist/services/compact/request-transition-hook.js +110 -0
- package/dist/services/compact/suggest-service.d.ts +74 -0
- package/dist/services/compact/suggest-service.js +203 -0
- package/dist/services/complexity/complexity-estimator.d.ts +34 -0
- package/dist/services/complexity/complexity-estimator.js +64 -0
- package/dist/services/config/config-migration.d.ts +45 -0
- package/dist/services/config/config-migration.js +154 -0
- package/dist/services/config/config-restore.d.ts +10 -0
- package/dist/services/config/config-restore.js +47 -0
- package/dist/services/config/config-rollback.d.ts +13 -0
- package/dist/services/config/config-rollback.js +26 -0
- package/dist/services/config/config-safety.d.ts +40 -0
- package/dist/services/config/config-safety.js +359 -0
- package/dist/services/config/config-service.d.ts +69 -0
- package/dist/services/config/config-service.js +814 -0
- package/dist/services/config/config-types.d.ts +119 -0
- package/dist/services/config/config-types.js +18 -0
- package/dist/services/config/model-routing.d.ts +66 -0
- package/dist/services/config/model-routing.js +105 -0
- package/dist/services/config/provider-service.d.ts +48 -0
- package/dist/services/config/provider-service.js +143 -0
- package/dist/services/config/proxy-service.d.ts +21 -0
- package/dist/services/config/proxy-service.js +44 -0
- package/dist/services/config/sidecar-store.d.ts +25 -0
- package/dist/services/config/sidecar-store.js +61 -0
- package/dist/services/config/workspace-state-service.d.ts +30 -0
- package/dist/services/config/workspace-state-service.js +142 -0
- package/dist/services/context/artifact-meta.d.ts +72 -0
- package/dist/services/context/artifact-meta.js +105 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +37 -0
- package/dist/services/context/auto-compact-dispatcher.js +240 -0
- package/dist/services/context/auto-compact-reader.d.ts +51 -0
- package/dist/services/context/auto-compact-reader.js +164 -0
- package/dist/services/context/auto-compact-types.d.ts +143 -0
- package/dist/services/context/auto-compact-types.js +36 -0
- package/dist/services/context/collector.d.ts +24 -0
- package/dist/services/context/collector.js +133 -0
- package/dist/services/context/context-builder.d.ts +30 -0
- package/dist/services/context/context-builder.js +78 -0
- package/dist/services/context/context-guard.d.ts +49 -0
- package/dist/services/context/context-guard.js +91 -0
- package/dist/services/context/context-schema.d.ts +415 -0
- package/dist/services/context/context-schema.js +73 -0
- package/dist/services/context/dispatch-context-guard.d.ts +27 -0
- package/dist/services/context/dispatch-context-guard.js +192 -0
- package/dist/services/context/doc-retriever.d.ts +26 -0
- package/dist/services/context/doc-retriever.js +51 -0
- package/dist/services/context/headroom-client.d.ts +34 -0
- package/dist/services/context/headroom-client.js +117 -0
- package/dist/services/context/headroom-fetcher.d.ts +6 -0
- package/dist/services/context/headroom-fetcher.js +28 -0
- package/dist/services/context/headroom-prefs.d.ts +46 -0
- package/dist/services/context/headroom-prefs.js +34 -0
- package/dist/services/context/index.d.ts +7 -0
- package/dist/services/context/index.js +6 -0
- package/dist/services/context/main-session-monitor.d.ts +89 -0
- package/dist/services/context/main-session-monitor.js +142 -0
- package/dist/services/context/renderer.d.ts +20 -0
- package/dist/services/context/renderer.js +30 -0
- package/dist/services/context/shared-channel.d.ts +93 -0
- package/dist/services/context/shared-channel.js +308 -0
- package/dist/services/context/threshold.d.ts +35 -0
- package/dist/services/context/threshold.js +76 -0
- package/dist/services/context/tokenizer.d.ts +12 -0
- package/dist/services/context/tokenizer.js +43 -0
- package/dist/services/context/types.d.ts +93 -0
- package/dist/services/context/types.js +9 -0
- package/dist/services/crystallization/crystallization-service.d.ts +239 -0
- package/dist/services/crystallization/crystallization-service.js +397 -0
- package/dist/services/crystallization/crystallization-store.d.ts +75 -0
- package/dist/services/crystallization/crystallization-store.js +193 -0
- package/dist/services/crystallization/crystallization-types.d.ts +313 -0
- package/dist/services/crystallization/crystallization-types.js +299 -0
- package/dist/services/crystallization/evidence-brief-builder.d.ts +237 -0
- package/dist/services/crystallization/evidence-brief-builder.js +240 -0
- package/dist/services/dashboard/project-dashboard-service.d.ts +91 -0
- package/dist/services/dashboard/project-dashboard-service.js +147 -0
- package/dist/services/dispatch/batch-counter.d.ts +27 -0
- package/dist/services/dispatch/batch-counter.js +102 -0
- package/dist/services/dispatch/contract-store.d.ts +63 -0
- package/dist/services/dispatch/contract-store.js +157 -0
- package/dist/services/dispatch/dispatch-record-writer.d.ts +138 -0
- package/dist/services/dispatch/dispatch-record-writer.js +460 -0
- package/dist/services/dispatch/heartbeat-truncator.d.ts +26 -0
- package/dist/services/dispatch/heartbeat-truncator.js +13 -0
- package/dist/services/dispatch/leak-detector.d.ts +11 -0
- package/dist/services/dispatch/leak-detector.js +72 -0
- package/dist/services/dispatch/slice-dag.d.ts +81 -0
- package/dist/services/dispatch/slice-dag.js +238 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +239 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +382 -0
- package/dist/services/dispatch/test-tool-detection.d.ts +36 -0
- package/dist/services/dispatch/test-tool-detection.js +46 -0
- package/dist/services/doc/doc-generator.d.ts +38 -0
- package/dist/services/doc/doc-generator.js +122 -0
- package/dist/services/doctor/doctor-service.d.ts +149 -0
- package/dist/services/doctor/doctor-service.js +929 -0
- package/dist/services/evolution/evolution-service.d.ts +137 -0
- package/dist/services/evolution/evolution-service.js +281 -0
- package/dist/services/evolution/evolution-store.d.ts +57 -0
- package/dist/services/evolution/evolution-store.js +232 -0
- package/dist/services/evolution/evolution-types.d.ts +706 -0
- package/dist/services/evolution/evolution-types.js +286 -0
- package/dist/services/evolution/independent-evaluator-runner.d.ts +90 -0
- package/dist/services/evolution/independent-evaluator-runner.js +106 -0
- package/dist/services/evolution/regression-skeptic-runner.d.ts +64 -0
- package/dist/services/evolution/regression-skeptic-runner.js +113 -0
- package/dist/services/feedback/feedback-promotion-service.d.ts +123 -0
- package/dist/services/feedback/feedback-promotion-service.js +300 -0
- package/dist/services/filesystem/file-lock.d.ts +11 -0
- package/dist/services/filesystem/file-lock.js +152 -0
- package/dist/services/final-review/final-review-service.d.ts +12 -0
- package/dist/services/final-review/final-review-service.js +52 -0
- package/dist/services/final-review/final-review-types.d.ts +42 -0
- package/dist/services/final-review/final-review-types.js +18 -0
- package/dist/services/fixture/fixture-capture-service.d.ts +87 -0
- package/dist/services/fixture/fixture-capture-service.js +317 -0
- package/dist/services/fixture/fixture-sanitize-service.d.ts +117 -0
- package/dist/services/fixture/fixture-sanitize-service.js +161 -0
- package/dist/services/fixture/index.d.ts +8 -0
- package/dist/services/fixture/index.js +8 -0
- package/dist/services/fork/fork-sync-state.d.ts +85 -0
- package/dist/services/fork/fork-sync-state.js +130 -0
- package/dist/services/fuzzy-matching/fuzzy-match-service.d.ts +15 -0
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +56 -0
- package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +68 -0
- package/dist/services/fuzzy-matching/fzf-pick-service.js +158 -0
- package/dist/services/fuzzy-matching/types.d.ts +20 -0
- package/dist/services/fuzzy-matching/types.js +1 -0
- package/dist/services/handoff/handoff-parser.d.ts +28 -0
- package/dist/services/handoff/handoff-parser.js +69 -0
- package/dist/services/handoff/handoff-types.d.ts +39 -0
- package/dist/services/handoff/handoff-types.js +19 -0
- package/dist/services/handoff/handoff-writer.d.ts +23 -0
- package/dist/services/handoff/handoff-writer.js +30 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +104 -0
- package/dist/services/hooks/auto-compact-hook-install.js +157 -0
- package/dist/services/hooks/output.d.ts +92 -0
- package/dist/services/hooks/output.js +111 -0
- package/dist/services/hooks/presence-marker-detector.d.ts +16 -0
- package/dist/services/hooks/presence-marker-detector.js +105 -0
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +18 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +103 -0
- package/dist/services/ide/adapters/codex-adapter.d.ts +46 -0
- package/dist/services/ide/adapters/codex-adapter.js +97 -0
- package/dist/services/ide/adapters/cursor-adapter.d.ts +36 -0
- package/dist/services/ide/adapters/cursor-adapter.js +84 -0
- package/dist/services/ide/adapters/hermes-adapter.d.ts +21 -0
- package/dist/services/ide/adapters/hermes-adapter.js +51 -0
- package/dist/services/ide/adapters/openclaw-adapter.d.ts +14 -0
- package/dist/services/ide/adapters/openclaw-adapter.js +42 -0
- package/dist/services/ide/adapters/trae-adapter.d.ts +42 -0
- package/dist/services/ide/adapters/trae-adapter.js +83 -0
- package/dist/services/ide/adapters/zcode-adapter.d.ts +40 -0
- package/dist/services/ide/adapters/zcode-adapter.js +220 -0
- package/dist/services/ide/current-model-detector.d.ts +14 -0
- package/dist/services/ide/current-model-detector.js +60 -0
- package/dist/services/ide/hook-protocol.d.ts +47 -0
- package/dist/services/ide/hook-protocol.js +74 -0
- package/dist/services/ide/hook-translator.d.ts +72 -0
- package/dist/services/ide/hook-translator.js +128 -0
- package/dist/services/ide/ide-detector.d.ts +10 -0
- package/dist/services/ide/ide-detector.js +19 -0
- package/dist/services/ide/ide-registry.d.ts +14 -0
- package/dist/services/ide/ide-registry.js +63 -0
- package/dist/services/ide/ide-types.d.ts +253 -0
- package/dist/services/ide/ide-types.js +2 -0
- package/dist/services/ide/resource-profile.d.ts +52 -0
- package/dist/services/ide/resource-profile.js +33 -0
- package/dist/services/ide/shared/atomic-json.d.ts +15 -0
- package/dist/services/ide/shared/atomic-json.js +58 -0
- package/dist/services/ide/shared/safe-path.d.ts +11 -0
- package/dist/services/ide/shared/safe-path.js +29 -0
- package/dist/services/impact/impact-scan-service.d.ts +66 -0
- package/dist/services/impact/impact-scan-service.js +197 -0
- package/dist/services/job/job-event-emitter.d.ts +30 -0
- package/dist/services/job/job-event-emitter.js +5 -0
- package/dist/services/job/job-orchestrator.d.ts +50 -0
- package/dist/services/job/job-orchestrator.js +104 -0
- package/dist/services/job/job-progress-store.d.ts +60 -0
- package/dist/services/job/job-progress-store.js +70 -0
- package/dist/services/job/job-resource-snapshot.d.ts +7 -0
- package/dist/services/job/job-resource-snapshot.js +75 -0
- package/dist/services/job/job-rotation.d.ts +17 -0
- package/dist/services/job/job-rotation.js +30 -0
- package/dist/services/job/job-state-store.d.ts +24 -0
- package/dist/services/job/job-state-store.js +60 -0
- package/dist/services/job/job-types.d.ts +444 -0
- package/dist/services/job/job-types.js +87 -0
- package/dist/services/job/subagent-job-wrapper.d.ts +35 -0
- package/dist/services/job/subagent-job-wrapper.js +30 -0
- package/dist/services/legacy/legacy-detector.d.ts +34 -0
- package/dist/services/legacy/legacy-detector.js +111 -0
- package/dist/services/log/log-commands-service.d.ts +54 -0
- package/dist/services/log/log-commands-service.js +83 -0
- package/dist/services/log/logger.d.ts +103 -0
- package/dist/services/log/logger.js +224 -0
- package/dist/services/log/redact.d.ts +32 -0
- package/dist/services/log/redact.js +89 -0
- package/dist/services/log/retention.d.ts +34 -0
- package/dist/services/log/retention.js +78 -0
- package/dist/services/loop/evaluator-dispatcher.d.ts +50 -0
- package/dist/services/loop/evaluator-dispatcher.js +552 -0
- package/dist/services/loop/loop-bee-relation-service.d.ts +107 -0
- package/dist/services/loop/loop-bee-relation-service.js +211 -0
- package/dist/services/loop/loop-bee-relation-store.d.ts +53 -0
- package/dist/services/loop/loop-bee-relation-store.js +130 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +118 -0
- package/dist/services/loop/loop-bee-relation-types.js +114 -0
- package/dist/services/loop/loop-release-service.d.ts +46 -0
- package/dist/services/loop/loop-release-service.js +66 -0
- package/dist/services/loop/loop-release-store.d.ts +55 -0
- package/dist/services/loop/loop-release-store.js +134 -0
- package/dist/services/loop/loop-release-types.d.ts +250 -0
- package/dist/services/loop/loop-release-types.js +162 -0
- package/dist/services/loop/monotonic-guard.d.ts +80 -0
- package/dist/services/loop/monotonic-guard.js +232 -0
- package/dist/services/loop/monotonic-runner.d.ts +58 -0
- package/dist/services/loop/monotonic-runner.js +231 -0
- package/dist/services/loop/run-driver.d.ts +70 -0
- package/dist/services/loop/run-driver.js +400 -0
- package/dist/services/loop/spec-service.d.ts +90 -0
- package/dist/services/loop/spec-service.js +497 -0
- package/dist/services/memory/llm-reranker.d.ts +174 -0
- package/dist/services/memory/llm-reranker.js +284 -0
- package/dist/services/memory/memory-search-service.d.ts +93 -0
- package/dist/services/memory/memory-search-service.js +117 -0
- package/dist/services/memory/project-context-service.d.ts +21 -0
- package/dist/services/memory/project-context-service.js +161 -0
- package/dist/services/memory/project-memory-service.d.ts +167 -0
- package/dist/services/memory/project-memory-service.js +817 -0
- package/dist/services/migrate-skill-name/migrate.d.ts +17 -0
- package/dist/services/migrate-skill-name/migrate.js +152 -0
- package/dist/services/migrate-skill-name/schema.d.ts +42 -0
- package/dist/services/migrate-skill-name/schema.js +25 -0
- package/dist/services/migration/v2-10-to-v2-11-service.d.ts +44 -0
- package/dist/services/migration/v2-10-to-v2-11-service.js +190 -0
- package/dist/services/migration/v2-10-to-v2-11-types.d.ts +41 -0
- package/dist/services/migration/v2-10-to-v2-11-types.js +23 -0
- package/dist/services/mode/bypass-tracker.d.ts +4 -0
- package/dist/services/mode/bypass-tracker.js +31 -0
- package/dist/services/mode/mode-enforcement.d.ts +14 -0
- package/dist/services/mode/mode-enforcement.js +84 -0
- package/dist/services/mut/assert-scanner.d.ts +6 -0
- package/dist/services/mut/assert-scanner.js +116 -0
- package/dist/services/mut/index.d.ts +8 -0
- package/dist/services/mut/index.js +7 -0
- package/dist/services/mut/mut-runner.d.ts +39 -0
- package/dist/services/mut/mut-runner.js +29 -0
- package/dist/services/mut/production-stryker.d.ts +2 -0
- package/dist/services/mut/production-stryker.js +75 -0
- package/dist/services/mut/report-builder.d.ts +11 -0
- package/dist/services/mut/report-builder.js +110 -0
- package/dist/services/mut/report-loader.d.ts +31 -0
- package/dist/services/mut/report-loader.js +78 -0
- package/dist/services/mut/thresholds.d.ts +21 -0
- package/dist/services/mut/thresholds.js +22 -0
- package/dist/services/mut/types.d.ts +336 -0
- package/dist/services/mut/types.js +59 -0
- package/dist/services/observability/aggregation.d.ts +64 -0
- package/dist/services/observability/aggregation.js +217 -0
- package/dist/services/observability/jsonl-store.d.ts +59 -0
- package/dist/services/observability/jsonl-store.js +120 -0
- package/dist/services/observability/observability-service.d.ts +95 -0
- package/dist/services/observability/observability-service.js +119 -0
- package/dist/services/observability/report-formatter.d.ts +42 -0
- package/dist/services/observability/report-formatter.js +156 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +12 -0
- package/dist/services/openspec/openspec-archive-service.js +28 -0
- package/dist/services/openspec/openspec-bridge-service.d.ts +16 -0
- package/dist/services/openspec/openspec-bridge-service.js +76 -0
- package/dist/services/openspec/openspec-init-service.d.ts +23 -0
- package/dist/services/openspec/openspec-init-service.js +122 -0
- package/dist/services/openspec/openspec-propose-from-doctor-service.d.ts +31 -0
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +95 -0
- package/dist/services/openspec/openspec-render-service.d.ts +38 -0
- package/dist/services/openspec/openspec-render-service.js +130 -0
- package/dist/services/openspec/openspec-scan-service.d.ts +6 -0
- package/dist/services/openspec/openspec-scan-service.js +123 -0
- package/dist/services/openspec/openspec-types.d.ts +39 -0
- package/dist/services/openspec/openspec-types.js +1 -0
- package/dist/services/openspec/openspec-validate-service.d.ts +27 -0
- package/dist/services/openspec/openspec-validate-service.js +77 -0
- package/dist/services/perf/perf-baseline-service.d.ts +70 -0
- package/dist/services/perf/perf-baseline-service.js +214 -0
- package/dist/services/polyrepo/polyrepo-dispatcher.d.ts +34 -0
- package/dist/services/polyrepo/polyrepo-dispatcher.js +119 -0
- package/dist/services/polyrepo/polyrepo-scanner.d.ts +9 -0
- package/dist/services/polyrepo/polyrepo-scanner.js +94 -0
- package/dist/services/polyrepo/polyrepo-service.d.ts +34 -0
- package/dist/services/polyrepo/polyrepo-service.js +49 -0
- package/dist/services/polyrepo/polyrepo-types.d.ts +55 -0
- package/dist/services/polyrepo/polyrepo-types.js +1 -0
- package/dist/services/prd/handoff-auto-regen.d.ts +22 -0
- package/dist/services/prd/handoff-auto-regen.js +73 -0
- package/dist/services/prd/handoff-service.d.ts +54 -0
- package/dist/services/prd/handoff-service.js +142 -0
- package/dist/services/prd/handoff-types.d.ts +64 -0
- package/dist/services/prd/handoff-types.js +22 -0
- package/dist/services/prd/prd-blocks-checker.d.ts +51 -0
- package/dist/services/prd/prd-blocks-checker.js +130 -0
- package/dist/services/prd/project-scan-bootstrap-service.d.ts +52 -0
- package/dist/services/prd/project-scan-bootstrap-service.js +445 -0
- package/dist/services/prd/project-scan-reader.d.ts +24 -0
- package/dist/services/prd/project-scan-reader.js +150 -0
- package/dist/services/prd/project-scan-sediment.d.ts +97 -0
- package/dist/services/prd/project-scan-sediment.js +445 -0
- package/dist/services/prd/project-scan-types.d.ts +66 -0
- package/dist/services/prd/project-scan-types.js +20 -0
- package/dist/services/preferences/preferences-service.d.ts +38 -0
- package/dist/services/preferences/preferences-service.js +198 -0
- package/dist/services/preferences/preferences-types.d.ts +148 -0
- package/dist/services/preferences/preferences-types.js +53 -0
- package/dist/services/profiles/profile-service.d.ts +6 -0
- package/dist/services/profiles/profile-service.js +19 -0
- package/dist/services/progress/progress-service.d.ts +125 -0
- package/dist/services/progress/progress-service.js +192 -0
- package/dist/services/providers/minimax-provider-service.d.ts +24 -0
- package/dist/services/providers/minimax-provider-service.js +143 -0
- package/dist/services/providers/minimax-worker-service.d.ts +21 -0
- package/dist/services/providers/minimax-worker-service.js +83 -0
- package/dist/services/proxy/proxy-service.d.ts +7 -0
- package/dist/services/proxy/proxy-service.js +31 -0
- package/dist/services/qa/browser-event-logger.d.ts +40 -0
- package/dist/services/qa/browser-event-logger.js +54 -0
- package/dist/services/qa/browser-restart-detector.d.ts +74 -0
- package/dist/services/qa/browser-restart-detector.js +138 -0
- package/dist/services/qa/browser-reuse-hint.d.ts +18 -0
- package/dist/services/qa/browser-reuse-hint.js +18 -0
- package/dist/services/qa/browser-wrapper-service.d.ts +37 -0
- package/dist/services/qa/browser-wrapper-service.js +88 -0
- package/dist/services/qa/qa-business-review-state.d.ts +47 -0
- package/dist/services/qa/qa-business-review-state.js +96 -0
- package/dist/services/rd/ast-gate.d.ts +19 -0
- package/dist/services/rd/ast-gate.js +71 -0
- package/dist/services/rd/impl.d.ts +9 -0
- package/dist/services/rd/impl.js +57 -0
- package/dist/services/rd/rd-service.d.ts +129 -0
- package/dist/services/rd/rd-service.js +441 -0
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +122 -0
- package/dist/services/rd/reviewer-dispatch-policy.js +148 -0
- package/dist/services/rd/standards-diagnostic.d.ts +76 -0
- package/dist/services/rd/standards-diagnostic.js +166 -0
- package/dist/services/rd/strategic-stage.d.ts +4 -0
- package/dist/services/rd/strategic-stage.js +15 -0
- package/dist/services/rd/strategy.d.ts +13 -0
- package/dist/services/rd/strategy.js +60 -0
- package/dist/services/rd/tactical-stage.d.ts +33 -0
- package/dist/services/rd/tactical-stage.js +62 -0
- package/dist/services/rd/types.d.ts +252 -0
- package/dist/services/rd/types.js +47 -0
- package/dist/services/recommendations/capability-availability.d.ts +5 -0
- package/dist/services/recommendations/capability-availability.js +40 -0
- package/dist/services/recommendations/capability-map-service.d.ts +7 -0
- package/dist/services/recommendations/capability-map-service.js +131 -0
- package/dist/services/recommendations/capability-seed-items.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-items.js +140 -0
- package/dist/services/recommendations/capability-seed-mappings.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-mappings.js +54 -0
- package/dist/services/recommendations/capability-seed-sources.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-sources.js +35 -0
- package/dist/services/recommendations/recommendation-service.d.ts +8 -0
- package/dist/services/recommendations/recommendation-service.js +106 -0
- package/dist/services/recommendations/recommendation-types.d.ts +129 -0
- package/dist/services/recommendations/recommendation-types.js +1 -0
- package/dist/services/recommendations/seed-capability-catalog.d.ts +3 -0
- package/dist/services/recommendations/seed-capability-catalog.js +3 -0
- package/dist/services/refactor/refactor-service.d.ts +9 -0
- package/dist/services/refactor/refactor-service.js +36 -0
- package/dist/services/release/release-state.d.ts +70 -0
- package/dist/services/release/release-state.js +140 -0
- package/dist/services/retrospective/retrospective-index.d.ts +37 -0
- package/dist/services/retrospective/retrospective-index.js +110 -0
- package/dist/services/retrospective/retrospective-search-service.d.ts +55 -0
- package/dist/services/retrospective/retrospective-search-service.js +107 -0
- package/dist/services/retrospective/retrospective-show.d.ts +40 -0
- package/dist/services/retrospective/retrospective-show.js +109 -0
- package/dist/services/reviewer/model-family.d.ts +18 -0
- package/dist/services/reviewer/model-family.js +70 -0
- package/dist/services/reviewer/providers/anthropic.d.ts +2 -0
- package/dist/services/reviewer/providers/anthropic.js +61 -0
- package/dist/services/reviewer/providers/ollama.d.ts +26 -0
- package/dist/services/reviewer/providers/ollama.js +38 -0
- package/dist/services/reviewer/providers/openai.d.ts +2 -0
- package/dist/services/reviewer/providers/openai.js +63 -0
- package/dist/services/reviewer/reviewer-config.d.ts +34 -0
- package/dist/services/reviewer/reviewer-config.js +100 -0
- package/dist/services/reviewer/reviewer-service.d.ts +56 -0
- package/dist/services/reviewer/reviewer-service.js +263 -0
- package/dist/services/reviewer/selection-strategies.d.ts +27 -0
- package/dist/services/reviewer/selection-strategies.js +53 -0
- package/dist/services/role/role-registry.d.ts +38 -0
- package/dist/services/role/role-registry.js +83 -0
- package/dist/services/runtime/runtime-detector.d.ts +15 -0
- package/dist/services/runtime/runtime-detector.js +62 -0
- package/dist/services/runtime/runtime-service.d.ts +59 -0
- package/dist/services/runtime/runtime-service.js +51 -0
- package/dist/services/runtime/vendor-adapter.d.ts +59 -0
- package/dist/services/runtime/vendor-adapter.js +1 -0
- package/dist/services/runtime/vendors/claude-code.d.ts +7 -0
- package/dist/services/runtime/vendors/claude-code.js +39 -0
- package/dist/services/runtime/vendors/codex.d.ts +7 -0
- package/dist/services/runtime/vendors/codex.js +43 -0
- package/dist/services/runtime/vendors/copilot.d.ts +7 -0
- package/dist/services/runtime/vendors/copilot.js +40 -0
- package/dist/services/sc/index.d.ts +1 -0
- package/dist/services/sc/index.js +1 -0
- package/dist/services/sc/sc-service.d.ts +131 -0
- package/dist/services/sc/sc-service.js +552 -0
- package/dist/services/scan/acceptance-coverage-service.d.ts +42 -0
- package/dist/services/scan/acceptance-coverage-service.js +140 -0
- package/dist/services/scan/api-surface-service.d.ts +69 -0
- package/dist/services/scan/api-surface-service.js +239 -0
- package/dist/services/scan/archetype-service.d.ts +5 -0
- package/dist/services/scan/archetype-service.js +254 -0
- package/dist/services/scan/diff-scope-service.d.ts +40 -0
- package/dist/services/scan/diff-scope-service.js +198 -0
- package/dist/services/scan/existing-system-service.d.ts +7 -0
- package/dist/services/scan/existing-system-service.js +300 -0
- package/dist/services/scan/file-size-scan.d.ts +23 -0
- package/dist/services/scan/file-size-scan.js +68 -0
- package/dist/services/scan/karpathy-service.d.ts +60 -0
- package/dist/services/scan/karpathy-service.js +228 -0
- package/dist/services/scan/libraries-service.d.ts +24 -0
- package/dist/services/scan/libraries-service.js +419 -0
- package/dist/services/scan/libraries-types.d.ts +59 -0
- package/dist/services/scan/libraries-types.js +9 -0
- package/dist/services/scan/orphan-service.d.ts +76 -0
- package/dist/services/scan/orphan-service.js +538 -0
- package/dist/services/scan/scan-types.d.ts +59 -0
- package/dist/services/scan/scan-types.js +1 -0
- package/dist/services/scan/type-sanity-service.d.ts +23 -0
- package/dist/services/scan/type-sanity-service.js +116 -0
- package/dist/services/security/safe-settings-path.d.ts +12 -0
- package/dist/services/security/safe-settings-path.js +104 -0
- package/dist/services/sediment/dispose-confirm.d.ts +9 -0
- package/dist/services/sediment/dispose-confirm.js +5 -0
- package/dist/services/sediment/json-schema.d.ts +247 -0
- package/dist/services/sediment/json-schema.js +26 -0
- package/dist/services/sediment/manifest-lint.d.ts +13 -0
- package/dist/services/sediment/manifest-lint.js +11 -0
- package/dist/services/sediment/pool-paths.d.ts +22 -0
- package/dist/services/sediment/pool-paths.js +25 -0
- package/dist/services/sediment/pool-read.d.ts +20 -0
- package/dist/services/sediment/pool-read.js +73 -0
- package/dist/services/sediment/pool-rebuild-index.d.ts +15 -0
- package/dist/services/sediment/pool-rebuild-index.js +28 -0
- package/dist/services/sediment/pool-write.d.ts +14 -0
- package/dist/services/sediment/pool-write.js +25 -0
- package/dist/services/sediment/promotion-gate.d.ts +12 -0
- package/dist/services/sediment/promotion-gate.js +20 -0
- package/dist/services/sediment/types.d.ts +52 -0
- package/dist/services/sediment/types.js +1 -0
- package/dist/services/session/binding-status-service.d.ts +56 -0
- package/dist/services/session/binding-status-service.js +106 -0
- package/dist/services/session/binding-store.d.ts +161 -0
- package/dist/services/session/binding-store.js +509 -0
- package/dist/services/session/caller-binding-service.d.ts +70 -0
- package/dist/services/session/caller-binding-service.js +148 -0
- package/dist/services/session/caller-id-types.d.ts +77 -0
- package/dist/services/session/caller-id-types.js +46 -0
- package/dist/services/session/getSessionDir.d.ts +1 -0
- package/dist/services/session/getSessionDir.js +27 -0
- package/dist/services/session/index.d.ts +6 -0
- package/dist/services/session/index.js +7 -0
- package/dist/services/session/platform-fallbacks.d.ts +31 -0
- package/dist/services/session/platform-fallbacks.js +35 -0
- package/dist/services/session/resolve-caller-id.d.ts +57 -0
- package/dist/services/session/resolve-caller-id.js +88 -0
- package/dist/services/session/session-binding-bridge.d.ts +76 -0
- package/dist/services/session/session-binding-bridge.js +247 -0
- package/dist/services/session/session-checkpoint-service.d.ts +57 -0
- package/dist/services/session/session-checkpoint-service.js +143 -0
- package/dist/services/session/session-manager.d.ts +168 -0
- package/dist/services/session/session-manager.js +502 -0
- package/dist/services/session/session-resume-service.d.ts +25 -0
- package/dist/services/session/session-resume-service.js +101 -0
- package/dist/services/share/bundle-reader.d.ts +100 -0
- package/dist/services/share/bundle-reader.js +434 -0
- package/dist/services/share/bundle-types.d.ts +392 -0
- package/dist/services/share/bundle-types.js +318 -0
- package/dist/services/share/bundle-writer.d.ts +97 -0
- package/dist/services/share/bundle-writer.js +429 -0
- package/dist/services/share/run-state-contract.d.ts +133 -0
- package/dist/services/share/run-state-contract.js +138 -0
- package/dist/services/signal/cancel-handler.d.ts +14 -0
- package/dist/services/signal/cancel-handler.js +76 -0
- package/dist/services/skill/resume-detector.d.ts +54 -0
- package/dist/services/skill/resume-detector.js +334 -0
- package/dist/services/skill/skill-scheduler.d.ts +40 -0
- package/dist/services/skill/skill-scheduler.js +53 -0
- package/dist/services/skill/skill-search-service.d.ts +88 -0
- package/dist/services/skill/skill-search-service.js +228 -0
- package/dist/services/skillhub/release-diff.d.ts +18 -0
- package/dist/services/skillhub/release-diff.js +38 -0
- package/dist/services/skillhub/release-export.d.ts +8 -0
- package/dist/services/skillhub/release-export.js +31 -0
- package/dist/services/skillhub/release-gc-blobs.d.ts +13 -0
- package/dist/services/skillhub/release-gc-blobs.js +32 -0
- package/dist/services/skillhub/release-import.d.ts +7 -0
- package/dist/services/skillhub/release-import.js +64 -0
- package/dist/services/skillhub/release-retain.d.ts +23 -0
- package/dist/services/skillhub/release-retain.js +94 -0
- package/dist/services/skillhub/sqlite-store.d.ts +22 -0
- package/dist/services/skillhub/sqlite-store.js +63 -0
- package/dist/services/skillhub/tar-runtime.d.ts +21 -0
- package/dist/services/skillhub/tar-runtime.js +91 -0
- package/dist/services/skillhub/types.d.ts +115 -0
- package/dist/services/skillhub/types.js +1 -0
- package/dist/services/skills/hooks-settings-service.d.ts +137 -0
- package/dist/services/skills/hooks-settings-service.js +396 -0
- package/dist/services/skills/skill-conformance-service.d.ts +40 -0
- package/dist/services/skills/skill-conformance-service.js +139 -0
- package/dist/services/skills/skill-presence-service.d.ts +158 -0
- package/dist/services/skills/skill-presence-service.js +474 -0
- package/dist/services/skills/skill-registry.d.ts +17 -0
- package/dist/services/skills/skill-registry.js +67 -0
- package/dist/services/skills/skill-runbook-service.d.ts +11 -0
- package/dist/services/skills/skill-runbook-service.js +128 -0
- package/dist/services/skills/skill-statusline-renderer.d.ts +6 -0
- package/dist/services/skills/skill-statusline-renderer.js +55 -0
- package/dist/services/skills/skill-statusline-service.d.ts +24 -0
- package/dist/services/skills/skill-statusline-service.js +110 -0
- package/dist/services/skills/statusline-settings-service.d.ts +59 -0
- package/dist/services/skills/statusline-settings-service.js +141 -0
- package/dist/services/skills/sync-service.d.ts +86 -0
- package/dist/services/skills/sync-service.js +271 -0
- package/dist/services/slice/calibration-store.d.ts +39 -0
- package/dist/services/slice/calibration-store.js +68 -0
- package/dist/services/slice/cross-pass-edge-merger.d.ts +53 -0
- package/dist/services/slice/cross-pass-edge-merger.js +246 -0
- package/dist/services/slice/granularity-decider.d.ts +37 -0
- package/dist/services/slice/granularity-decider.js +40 -0
- package/dist/services/slice/llm-arbitrator.d.ts +35 -0
- package/dist/services/slice/llm-arbitrator.js +63 -0
- package/dist/services/slice/multi-pass-orchestrator.d.ts +67 -0
- package/dist/services/slice/multi-pass-orchestrator.js +225 -0
- package/dist/services/slice/schema-router.d.ts +44 -0
- package/dist/services/slice/schema-router.js +61 -0
- package/dist/services/slice/slice-archive-service.d.ts +20 -0
- package/dist/services/slice/slice-archive-service.js +111 -0
- package/dist/services/slice/slice-benchmark-service.d.ts +19 -0
- package/dist/services/slice/slice-benchmark-service.js +60 -0
- package/dist/services/slice/slice-check-service.d.ts +2 -0
- package/dist/services/slice/slice-check-service.js +459 -0
- package/dist/services/slice/slice-check-types.d.ts +104 -0
- package/dist/services/slice/slice-check-types.js +28 -0
- package/dist/services/slice/slice-decompose-runners.d.ts +23 -0
- package/dist/services/slice/slice-decompose-runners.js +174 -0
- package/dist/services/slice/slice-decompose-service.d.ts +24 -0
- package/dist/services/slice/slice-decompose-service.js +532 -0
- package/dist/services/slice/slice-decompose-types.d.ts +263 -0
- package/dist/services/slice/slice-decompose-types.js +30 -0
- package/dist/services/slice/slice-integration.d.ts +43 -0
- package/dist/services/slice/slice-integration.js +106 -0
- package/dist/services/slice/slice-pick-service.d.ts +32 -0
- package/dist/services/slice/slice-pick-service.js +75 -0
- package/dist/services/slice/slice-review-state.d.ts +70 -0
- package/dist/services/slice/slice-review-state.js +109 -0
- package/dist/services/slice/slice-topology-types.d.ts +115 -0
- package/dist/services/slice/slice-topology-types.js +20 -0
- package/dist/services/smoke/smoke-paths-state.d.ts +73 -0
- package/dist/services/smoke/smoke-paths-state.js +117 -0
- package/dist/services/sop/gate-enforce-service.d.ts +33 -0
- package/dist/services/sop/gate-enforce-service.js +168 -0
- package/dist/services/sop/sop-advance-service.d.ts +74 -0
- package/dist/services/sop/sop-advance-service.js +115 -0
- package/dist/services/sop/sop-check-service.d.ts +45 -0
- package/dist/services/sop/sop-check-service.js +181 -0
- package/dist/services/sop/sop-paths.d.ts +62 -0
- package/dist/services/sop/sop-paths.js +92 -0
- package/dist/services/sop/sop-registry-service.d.ts +46 -0
- package/dist/services/sop/sop-registry-service.js +89 -0
- package/dist/services/sop/sop-service.d.ts +55 -0
- package/dist/services/sop/sop-service.js +222 -0
- package/dist/services/sop/sop-types.d.ts +95 -0
- package/dist/services/sop/sop-types.js +11 -0
- package/dist/services/standards/ide-aware-standards-service.d.ts +94 -0
- package/dist/services/standards/ide-aware-standards-service.js +91 -0
- package/dist/services/standards/loop-engineering-lint.d.ts +38 -0
- package/dist/services/standards/loop-engineering-lint.js +101 -0
- package/dist/services/standards/loop-engineering-readiness-lint.d.ts +111 -0
- package/dist/services/standards/loop-engineering-readiness-lint.js +248 -0
- package/dist/services/standards/migrate-claude-rules-service.d.ts +19 -0
- package/dist/services/standards/migrate-claude-rules-service.js +214 -0
- package/dist/services/standards/migrate-service.d.ts +63 -0
- package/dist/services/standards/migrate-service.js +193 -0
- package/dist/services/standards/missing-standards-detector.d.ts +81 -0
- package/dist/services/standards/missing-standards-detector.js +139 -0
- package/dist/services/standards/project-context.d.ts +24 -0
- package/dist/services/standards/project-context.js +314 -0
- package/dist/services/standards/project-standards-service.d.ts +114 -0
- package/dist/services/standards/project-standards-service.js +693 -0
- package/dist/services/tech/tech-service.d.ts +69 -0
- package/dist/services/tech/tech-service.js +299 -0
- package/dist/services/test-cache/test-cache-service.d.ts +70 -0
- package/dist/services/test-cache/test-cache-service.js +175 -0
- package/dist/services/understand/hybrid-types.d.ts +32 -0
- package/dist/services/understand/hybrid-types.js +1 -0
- package/dist/services/understand/understand-hybrid-service.d.ts +10 -0
- package/dist/services/understand/understand-hybrid-service.js +100 -0
- package/dist/services/understand/understand-scan-service.d.ts +28 -0
- package/dist/services/understand/understand-scan-service.js +170 -0
- package/dist/services/understand/understand-types.d.ts +50 -0
- package/dist/services/understand/understand-types.js +1 -0
- package/dist/services/upgrade/1x-detector-service.d.ts +7 -0
- package/dist/services/upgrade/1x-detector-service.js +94 -0
- package/dist/services/upgrade/gitignore-migrate-service.d.ts +56 -0
- package/dist/services/upgrade/gitignore-migrate-service.js +170 -0
- package/dist/services/upgrade/upgrade-service.d.ts +81 -0
- package/dist/services/upgrade/upgrade-service.js +403 -0
- package/dist/services/verdict/envelopes.d.ts +93 -0
- package/dist/services/verdict/envelopes.js +349 -0
- package/dist/services/verdict/verdict-aggregator.d.ts +94 -0
- package/dist/services/verdict/verdict-aggregator.js +112 -0
- package/dist/services/workflow/artifact-paths.d.ts +59 -0
- package/dist/services/workflow/artifact-paths.js +166 -0
- package/dist/services/workflow/autonomous-resume-writer.d.ts +16 -0
- package/dist/services/workflow/autonomous-resume-writer.js +170 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-service.js +449 -0
- package/dist/services/workflow/plan-reader.d.ts +29 -0
- package/dist/services/workflow/plan-reader.js +174 -0
- package/dist/services/workflow/plan-refresher.d.ts +32 -0
- package/dist/services/workflow/plan-refresher.js +353 -0
- package/dist/services/workflow/plan-trigger-detector.d.ts +55 -0
- package/dist/services/workflow/plan-trigger-detector.js +142 -0
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +19 -0
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +300 -0
- package/dist/services/workflow/workflow-autonomous-service.d.ts +100 -0
- package/dist/services/workflow/workflow-autonomous-service.js +306 -0
- package/dist/services/workflow/workflow-loader.d.ts +63 -0
- package/dist/services/workflow/workflow-loader.js +168 -0
- package/dist/services/workflow/workflow-router-service.d.ts +85 -0
- package/dist/services/workflow/workflow-router-service.js +233 -0
- package/dist/services/workflow/workflow-skip-service.d.ts +106 -0
- package/dist/services/workflow/workflow-skip-service.js +209 -0
- package/dist/services/workflow/workflow-spec.d.ts +116 -0
- package/dist/services/workflow/workflow-spec.js +431 -0
- package/dist/services/workflow/workflow-state-store.d.ts +27 -0
- package/dist/services/workflow/workflow-state-store.js +95 -0
- package/dist/services/workspace/claude-settings-template.d.ts +101 -0
- package/dist/services/workspace/claude-settings-template.js +254 -0
- package/dist/services/workspace/migrate-1-4-1-service.d.ts +44 -0
- package/dist/services/workspace/migrate-1-4-1-service.js +195 -0
- package/dist/services/workspace/migrate-service.d.ts +2 -0
- package/dist/services/workspace/migrate-service.js +613 -0
- package/dist/services/workspace/migrate-types.d.ts +127 -0
- package/dist/services/workspace/migrate-types.js +21 -0
- package/dist/services/workspace/reconcile-service.d.ts +188 -0
- package/dist/services/workspace/reconcile-service.js +683 -0
- package/dist/services/workspace/reconcile-types.d.ts +130 -0
- package/dist/services/workspace/reconcile-types.js +13 -0
- package/dist/services/workspace/sid-naming-guard.d.ts +17 -0
- package/dist/services/workspace/sid-naming-guard.js +34 -0
- package/dist/services/workspace/templates/project-scan/audit-output-schema.md +100 -0
- package/dist/services/workspace/templates/project-scan/business-knowledge.md +44 -0
- package/dist/services/workspace/templates/project-scan/index.d.ts +34 -0
- package/dist/services/workspace/templates/project-scan/index.js +60 -0
- package/dist/services/workspace/templates/project-scan/perf-template.md +109 -0
- package/dist/services/workspace/templates/project-scan/security-template.md +99 -0
- package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +45 -0
- package/dist/services/workspace/workspace-claude-settings-materializer.js +194 -0
- package/dist/services/workspace/workspace-clean-service.d.ts +28 -0
- package/dist/services/workspace/workspace-clean-service.js +46 -0
- package/dist/services/workspace/workspace-service.d.ts +177 -0
- package/dist/services/workspace/workspace-service.js +432 -0
- package/dist/services/workspace/workspace-state-service.d.ts +7 -0
- package/dist/services/workspace/workspace-state-service.js +43 -0
- package/dist/shared/format-md-compact.d.ts +32 -0
- package/dist/shared/format-md-compact.js +297 -0
- package/dist/shared/frontmatter.d.ts +6 -0
- package/dist/shared/frontmatter.js +165 -0
- package/dist/shared/fs-utils.d.ts +4 -0
- package/dist/shared/fs-utils.js +16 -0
- package/dist/shared/fs.d.ts +4 -0
- package/dist/shared/fs.js +26 -0
- package/dist/shared/incrementing-number.d.ts +23 -0
- package/dist/shared/incrementing-number.js +68 -0
- package/dist/shared/json-schema-mini.d.ts +10 -0
- package/dist/shared/json-schema-mini.js +113 -0
- package/dist/shared/path-safety.d.ts +21 -0
- package/dist/shared/path-safety.js +54 -0
- package/dist/shared/path-utils.d.ts +13 -0
- package/dist/shared/path-utils.js +56 -0
- package/dist/shared/paths.d.ts +6 -0
- package/dist/shared/paths.js +50 -0
- package/dist/shared/planner-response.d.ts +21 -0
- package/dist/shared/planner-response.js +26 -0
- package/dist/shared/platform.d.ts +6 -0
- package/dist/shared/platform.js +11 -0
- package/dist/shared/process.d.ts +5 -0
- package/dist/shared/process.js +12 -0
- package/dist/shared/result.d.ts +22 -0
- package/dist/shared/result.js +46 -0
- package/dist/shared/stale-policy.d.ts +67 -0
- package/dist/shared/stale-policy.js +85 -0
- package/dist/shared/version.d.ts +1 -0
- package/dist/shared/version.js +1 -0
- package/dist/skills/peaks-maker/index.d.ts +5 -0
- package/dist/skills/peaks-maker/index.js +32 -0
- package/package.json +5 -4
- package/scripts/copy-templates.mjs +1 -1
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispatch record writer — slice 2026-06-07-sub-agent-dispatch-decouple (G2 + G5 + G6).
|
|
3
|
+
*
|
|
4
|
+
* Owns the on-disk format of `.peaks/_sub_agents/<sid>/dispatch-<rid>-<ts>.json`:
|
|
5
|
+
* - G2: atomic write helper (mkdirSync recursive + tmp + rename) and
|
|
6
|
+
* R-2 guard (path must live under `.peaks/_sub_agents/<sid>/`).
|
|
7
|
+
* - G5: lifecycle schema (`createdAt` / `completedAt` / `outcome` /
|
|
8
|
+
* `artifactPaths` / `disposed` / `disposedAt`) per AC-26 + RL-6..RL-9.
|
|
9
|
+
* - G6: heartbeat schema upgrade per AC-33/AC-34 — `heartbeats[]` +
|
|
10
|
+
* `lastBeatAt` + `status` aggregate. Read-side backward compat
|
|
11
|
+
* supplies defaults for old records missing the G6 fields.
|
|
12
|
+
*
|
|
13
|
+
* The write helpers are intentionally small and pure:
|
|
14
|
+
* - `writeInitialDispatchRecord`: append a new dispatch record at the
|
|
15
|
+
* start of a sub-agent dispatch (called by `peaks sub-agent dispatch`).
|
|
16
|
+
* - `appendHeartbeat`: append one heartbeat to an existing record
|
|
17
|
+
* (called by `peaks sub-agent heartbeat`).
|
|
18
|
+
* - `markCompleted` / `markFailed` / `markCancelled` / `markNoExecution`:
|
|
19
|
+
* lifecycle transitions called by the reducer.
|
|
20
|
+
*
|
|
21
|
+
* All writes are atomic (tmp + rename) so a process crash mid-write
|
|
22
|
+
* cannot leave a half-truncated JSON file. All reads tolerate missing
|
|
23
|
+
* G6 fields (backward compat) and the G5 schema fields default to
|
|
24
|
+
* `null` / `false` / `'no-execution'` if the file was written by an
|
|
25
|
+
* older peaks build.
|
|
26
|
+
*/
|
|
27
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
|
|
28
|
+
import { dirname, resolve } from 'node:path';
|
|
29
|
+
import { assertSafeDispatchRecordPath, dispatchRecordPath } from '../security/safe-settings-path.js';
|
|
30
|
+
import { withFileLockSync } from '../filesystem/file-lock.js';
|
|
31
|
+
const MAX_PROMPT_BYTES = 256 * 1024;
|
|
32
|
+
/** Write a new dispatch record (G2 + G5 + G6). Returns the absolute path. */
|
|
33
|
+
export function writeInitialDispatchRecord(input) {
|
|
34
|
+
const { projectRoot, sessionId, requestId, role, prompt, toolCall, batchId } = input;
|
|
35
|
+
const now = input.now ?? (() => new Date());
|
|
36
|
+
if (prompt.length > MAX_PROMPT_BYTES) {
|
|
37
|
+
const err = new Error(`prompt exceeds ${MAX_PROMPT_BYTES} bytes (got ${prompt.length}); ` +
|
|
38
|
+
`truncate or split into multiple dispatches`);
|
|
39
|
+
err.code = 'PROMPT_TOO_LARGE';
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
const path = dispatchRecordPath(projectRoot, sessionId, requestId, now());
|
|
43
|
+
const safePath = assertSafeDispatchRecordPath(path, projectRoot);
|
|
44
|
+
const record = {
|
|
45
|
+
version: 2,
|
|
46
|
+
createdAt: now().toISOString(),
|
|
47
|
+
completedAt: null,
|
|
48
|
+
outcome: 'no-execution',
|
|
49
|
+
artifactPaths: [],
|
|
50
|
+
disposed: false,
|
|
51
|
+
disposedAt: null,
|
|
52
|
+
role,
|
|
53
|
+
requestId,
|
|
54
|
+
sessionId,
|
|
55
|
+
prompt,
|
|
56
|
+
// Slice 2026-06-23-audit-4th #C2: propagate toolCallVersion.
|
|
57
|
+
// The dispatcher's buildToolCall already stamps it (claude-code 2.0.0
|
|
58
|
+
// etc.); we re-default to '2.0.0' if absent so the on-disk record
|
|
59
|
+
// is self-describing without reading the dispatcher source.
|
|
60
|
+
toolCall: { ...toolCall, toolCallVersion: toolCall.toolCallVersion ?? '2.0.0' },
|
|
61
|
+
batchId,
|
|
62
|
+
heartbeats: [],
|
|
63
|
+
lastBeatAt: null,
|
|
64
|
+
status: 'queued'
|
|
65
|
+
};
|
|
66
|
+
writeAtomic(safePath, record);
|
|
67
|
+
// Slice 2026-06-23-audit-4th #A4: register the path in the
|
|
68
|
+
// session's active-dispatches index so a future restart can
|
|
69
|
+
// discover in-flight records without scanning the directory.
|
|
70
|
+
// The index is best-effort (no lock): the on-disk record is the
|
|
71
|
+
// source of truth; the index is purely a hint for the LLM-side
|
|
72
|
+
// runner. A crash between writeAtomic and the index write is
|
|
73
|
+
// non-fatal — the next restart scans the directory anyway.
|
|
74
|
+
registerActiveDispatch({
|
|
75
|
+
projectRoot,
|
|
76
|
+
sessionId,
|
|
77
|
+
recordPath: safePath,
|
|
78
|
+
requestId,
|
|
79
|
+
role,
|
|
80
|
+
batchId,
|
|
81
|
+
now
|
|
82
|
+
});
|
|
83
|
+
return { path: safePath, record };
|
|
84
|
+
}
|
|
85
|
+
function activeDispatchIndexPath(projectRoot, sessionId) {
|
|
86
|
+
return resolve(projectRoot, '.peaks', '_sub_agents', sessionId, 'active-dispatches.json');
|
|
87
|
+
}
|
|
88
|
+
function registerActiveDispatch(input) {
|
|
89
|
+
const indexPath = activeDispatchIndexPath(input.projectRoot, input.sessionId);
|
|
90
|
+
const dir = dirname(indexPath);
|
|
91
|
+
if (!existsSync(dir)) {
|
|
92
|
+
mkdirSync(dir, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
let index = {};
|
|
95
|
+
try {
|
|
96
|
+
if (existsSync(indexPath)) {
|
|
97
|
+
const raw = readFileSync(indexPath, 'utf8');
|
|
98
|
+
const parsed = JSON.parse(raw);
|
|
99
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
100
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
101
|
+
if (typeof v === 'object' && v !== null && 'recordPath' in v) {
|
|
102
|
+
index[k] = v;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Corrupt index — start fresh. The on-disk record is the source of truth.
|
|
110
|
+
index = {};
|
|
111
|
+
}
|
|
112
|
+
index[input.recordPath] = {
|
|
113
|
+
recordPath: input.recordPath,
|
|
114
|
+
requestId: input.requestId,
|
|
115
|
+
role: input.role,
|
|
116
|
+
batchId: input.batchId,
|
|
117
|
+
createdAt: input.now().toISOString(),
|
|
118
|
+
status: 'queued'
|
|
119
|
+
};
|
|
120
|
+
const tmp = `${indexPath}.tmp-${process.pid}-${Date.now()}`;
|
|
121
|
+
writeFileSync(tmp, JSON.stringify(index, null, 2) + '\n', 'utf8');
|
|
122
|
+
renameSync(tmp, indexPath);
|
|
123
|
+
}
|
|
124
|
+
function unregisterActiveDispatch(input) {
|
|
125
|
+
const indexPath = activeDispatchIndexPath(input.projectRoot, input.sessionId);
|
|
126
|
+
if (!existsSync(indexPath))
|
|
127
|
+
return;
|
|
128
|
+
let index = {};
|
|
129
|
+
try {
|
|
130
|
+
const raw = readFileSync(indexPath, 'utf8');
|
|
131
|
+
const parsed = JSON.parse(raw);
|
|
132
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
133
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
134
|
+
if (typeof v === 'object' && v !== null && 'recordPath' in v) {
|
|
135
|
+
index[k] = v;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (input.recordPath in index) {
|
|
144
|
+
index[input.recordPath] = { ...index[input.recordPath], status: input.status };
|
|
145
|
+
if (input.status === 'done' || input.status === 'failed' || input.status === 'cancelled' || input.status === 'no-execution') {
|
|
146
|
+
delete index[input.recordPath];
|
|
147
|
+
}
|
|
148
|
+
const tmp = `${indexPath}.tmp-${process.pid}-${Date.now()}`;
|
|
149
|
+
writeFileSync(tmp, JSON.stringify(index, null, 2) + '\n', 'utf8');
|
|
150
|
+
renameSync(tmp, indexPath);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Slice 2026-06-23-audit-4th #A4: read the active-dispatches index
|
|
155
|
+
* for a session. Returns the current map<recordPath, entry>. Used
|
|
156
|
+
* by the LLM-side runner to discover in-flight records on restart.
|
|
157
|
+
* Returns an empty map when the index file is missing or corrupt
|
|
158
|
+
* (the on-disk records directory is the next fallback).
|
|
159
|
+
*/
|
|
160
|
+
export function readActiveDispatchIndex(projectRoot, sessionId) {
|
|
161
|
+
const indexPath = activeDispatchIndexPath(projectRoot, sessionId);
|
|
162
|
+
if (!existsSync(indexPath))
|
|
163
|
+
return {};
|
|
164
|
+
try {
|
|
165
|
+
const raw = readFileSync(indexPath, 'utf8');
|
|
166
|
+
const parsed = JSON.parse(raw);
|
|
167
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
168
|
+
return {};
|
|
169
|
+
const out = {};
|
|
170
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
171
|
+
if (typeof v === 'object' && v !== null && 'recordPath' in v && 'role' in v) {
|
|
172
|
+
out[k] = v;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return out;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return {};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** Slice 2026-06-23-audit-4th #A3: default TTL for dispatch records. */
|
|
182
|
+
export const DISPATCH_RECORD_TTL_DAYS = 30;
|
|
183
|
+
/**
|
|
184
|
+
* Slice 2026-06-23-audit-4th #A3: is this dispatch record an orphan
|
|
185
|
+
* (older than DISPATCH_RECORD_TTL_DAYS or already GC'd)? Mirrors
|
|
186
|
+
* `isOrphanChannel` in shared-channel.ts so a future
|
|
187
|
+
* `peaks sub-agent cleanup` umbrella can run all three sweeps
|
|
188
|
+
* (shared channel + dispatch record + contract) in one pass.
|
|
189
|
+
*/
|
|
190
|
+
export function isOrphanDispatchRecord(opts) {
|
|
191
|
+
if (!existsSync(opts.recordPath))
|
|
192
|
+
return true;
|
|
193
|
+
const s = statSync(opts.recordPath);
|
|
194
|
+
const now = opts.now ?? new Date();
|
|
195
|
+
const ageMs = now.getTime() - s.mtimeMs;
|
|
196
|
+
const ttlMs = DISPATCH_RECORD_TTL_DAYS * 24 * 60 * 60 * 1000;
|
|
197
|
+
return ageMs > ttlMs;
|
|
198
|
+
}
|
|
199
|
+
/** Append a heartbeat (G6). Idempotent on (at, status) — append-only. */
|
|
200
|
+
export function appendHeartbeat(input) {
|
|
201
|
+
const { recordPath, status, progress, note } = input;
|
|
202
|
+
const now = input.now ?? (() => new Date());
|
|
203
|
+
if (!Number.isInteger(progress) || progress < 0 || progress > 100) {
|
|
204
|
+
const err = new Error(`progress must be integer 0..100 (got ${progress})`);
|
|
205
|
+
err.code = 'INVALID_PROGRESS';
|
|
206
|
+
throw err;
|
|
207
|
+
}
|
|
208
|
+
if (note !== undefined && note.length > 200) {
|
|
209
|
+
const err = new Error(`note must be ≤ 200 chars (got ${note.length})`);
|
|
210
|
+
err.code = 'NOTE_TOO_LONG';
|
|
211
|
+
throw err;
|
|
212
|
+
}
|
|
213
|
+
const existing = readRecord(recordPath);
|
|
214
|
+
const entry = {
|
|
215
|
+
at: now().toISOString(),
|
|
216
|
+
status,
|
|
217
|
+
progress,
|
|
218
|
+
note: note ?? null
|
|
219
|
+
};
|
|
220
|
+
const { heartbeats, truncated } = applyTruncation([...existing.heartbeats, entry]);
|
|
221
|
+
const next = {
|
|
222
|
+
...existing,
|
|
223
|
+
heartbeats,
|
|
224
|
+
lastBeatAt: entry.at,
|
|
225
|
+
status: mapStatusToAggregate(status, existing.status)
|
|
226
|
+
};
|
|
227
|
+
// Slice 2026-06-23-audit-3rd #3: wrap the read-then-write in a file
|
|
228
|
+
// lock. Without the lock, a heartbeat arriving 100ms before
|
|
229
|
+
// markCompleted can be silently discarded — the parent's view of the
|
|
230
|
+
// sub-agent shows "completed" but the last progress update is lost.
|
|
231
|
+
return withFileLockSync(recordPath, () => {
|
|
232
|
+
// Re-read under the lock — the file may have been mutated between
|
|
233
|
+
// our pre-lock `readRecord` above and lock acquisition (heartbeats
|
|
234
|
+
// and markCompleted share the same record file).
|
|
235
|
+
const lockedExisting = readRecord(recordPath);
|
|
236
|
+
const lockedHeartbeats = applyTruncation([
|
|
237
|
+
...lockedExisting.heartbeats,
|
|
238
|
+
entry
|
|
239
|
+
]).heartbeats;
|
|
240
|
+
const lockedNext = {
|
|
241
|
+
...lockedExisting,
|
|
242
|
+
heartbeats: lockedHeartbeats,
|
|
243
|
+
lastBeatAt: entry.at,
|
|
244
|
+
status: mapStatusToAggregate(status, lockedExisting.status)
|
|
245
|
+
};
|
|
246
|
+
writeAtomic(recordPath, lockedNext);
|
|
247
|
+
// Recompute truncated flag from the locked-read result so the
|
|
248
|
+
// caller sees the actual post-lock truncation state.
|
|
249
|
+
return {
|
|
250
|
+
record: lockedNext,
|
|
251
|
+
truncated: lockedHeartbeats.length < lockedExisting.heartbeats.length + 1
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
/** Apply truncation: keep most recent 100, mark truncated flag. */
|
|
256
|
+
export function applyTruncation(entries) {
|
|
257
|
+
if (entries.length <= 100) {
|
|
258
|
+
return { heartbeats: [...entries], truncated: false };
|
|
259
|
+
}
|
|
260
|
+
return { heartbeats: entries.slice(-100), truncated: true };
|
|
261
|
+
}
|
|
262
|
+
function mapStatusToAggregate(latest, current) {
|
|
263
|
+
// 'stale' is a poller-driven warning and must not be overwritten by
|
|
264
|
+
// a normal heartbeat that arrives after the stale flag was set.
|
|
265
|
+
if (current === 'stale') {
|
|
266
|
+
return 'stale';
|
|
267
|
+
}
|
|
268
|
+
return latest;
|
|
269
|
+
}
|
|
270
|
+
/** Mark a record as completed (success / failed / cancelled / no-execution). */
|
|
271
|
+
export function markCompleted(input) {
|
|
272
|
+
// Slice 2026-06-23-audit-3rd #3: lock + re-read so a concurrent
|
|
273
|
+
// heartbeat arriving just before markCompleted is preserved in the
|
|
274
|
+
// final record.
|
|
275
|
+
const result = withFileLockSync(input.recordPath, () => {
|
|
276
|
+
const existing = readRecord(input.recordPath);
|
|
277
|
+
const next = {
|
|
278
|
+
...existing,
|
|
279
|
+
completedAt: (input.now ?? (() => new Date()))().toISOString(),
|
|
280
|
+
outcome: input.outcome,
|
|
281
|
+
status: input.status,
|
|
282
|
+
artifactPaths: input.artifactPaths ?? existing.artifactPaths
|
|
283
|
+
};
|
|
284
|
+
writeAtomic(input.recordPath, next);
|
|
285
|
+
return { record: next };
|
|
286
|
+
});
|
|
287
|
+
// Slice 2026-06-23-audit-4th #A4: update the active-dispatches
|
|
288
|
+
// index. Best-effort (the on-disk record is the source of truth);
|
|
289
|
+
// we only attempt the update when the trusted projectRoot is
|
|
290
|
+
// available so a malicious recordPath cannot redirect the index
|
|
291
|
+
// write (audit-3rd #1 anti-pattern).
|
|
292
|
+
if (typeof input.projectRoot === 'string' && input.projectRoot.length > 0) {
|
|
293
|
+
try {
|
|
294
|
+
unregisterActiveDispatch({
|
|
295
|
+
projectRoot: input.projectRoot,
|
|
296
|
+
sessionId: result.record.sessionId,
|
|
297
|
+
recordPath: input.recordPath,
|
|
298
|
+
status: input.status
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
302
|
+
/* best-effort */
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
307
|
+
/** Mark a record as disposed (reducer ran). */
|
|
308
|
+
export function markDisposed(recordPath, now = () => new Date()) {
|
|
309
|
+
// Lock + re-read (see markCompleted).
|
|
310
|
+
return withFileLockSync(recordPath, () => {
|
|
311
|
+
const existing = readRecord(recordPath);
|
|
312
|
+
const next = {
|
|
313
|
+
...existing,
|
|
314
|
+
disposed: true,
|
|
315
|
+
disposedAt: now().toISOString()
|
|
316
|
+
};
|
|
317
|
+
writeAtomic(recordPath, next);
|
|
318
|
+
return { record: next };
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Read a dispatch record with backward-compat defaults. Old records
|
|
323
|
+
* missing G5 / G6 fields are upgraded on read (no error, no overwrite).
|
|
324
|
+
*/
|
|
325
|
+
export function readRecord(recordPath) {
|
|
326
|
+
if (!existsSync(recordPath)) {
|
|
327
|
+
const err = new Error(`Dispatch record not found: ${recordPath}`);
|
|
328
|
+
err.code = 'RECORD_NOT_FOUND';
|
|
329
|
+
err.path = recordPath;
|
|
330
|
+
throw err;
|
|
331
|
+
}
|
|
332
|
+
const raw = readFileSync(recordPath, 'utf8');
|
|
333
|
+
let parsed;
|
|
334
|
+
try {
|
|
335
|
+
parsed = JSON.parse(raw);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
const err = new Error(`Invalid dispatch record JSON: ${error.message}`);
|
|
339
|
+
err.code = 'INVALID_RECORD_JSON';
|
|
340
|
+
throw err;
|
|
341
|
+
}
|
|
342
|
+
return upgradeRecord(parsed);
|
|
343
|
+
}
|
|
344
|
+
/** Read multiple records from a list of paths. Tolerates missing files. */
|
|
345
|
+
export function readRecords(paths) {
|
|
346
|
+
const out = [];
|
|
347
|
+
for (const p of paths) {
|
|
348
|
+
try {
|
|
349
|
+
out.push(readRecord(p));
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
const code = error.code;
|
|
353
|
+
if (code === 'RECORD_NOT_FOUND') {
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return out;
|
|
360
|
+
}
|
|
361
|
+
function upgradeRecord(parsed) {
|
|
362
|
+
if (!isObject(parsed)) {
|
|
363
|
+
throw new Error('Dispatch record root must be an object');
|
|
364
|
+
}
|
|
365
|
+
const obj = parsed;
|
|
366
|
+
const role = stringField(obj, 'role');
|
|
367
|
+
const requestId = stringField(obj, 'requestId');
|
|
368
|
+
const sessionId = stringField(obj, 'sessionId');
|
|
369
|
+
const prompt = stringField(obj, 'prompt');
|
|
370
|
+
// Slice 2026-06-23-audit-4th #C2: preserve toolCallVersion on read.
|
|
371
|
+
// Pre-versioning records default to '2.0.0' (the pre-#C2 implicit
|
|
372
|
+
// shape; matches the version stamped by every current dispatcher).
|
|
373
|
+
const rawToolCall = obj.toolCall;
|
|
374
|
+
if (!isObject(rawToolCall) || typeof rawToolCall.name !== 'string') {
|
|
375
|
+
throw new Error('Dispatch record toolCall must be { name, args }');
|
|
376
|
+
}
|
|
377
|
+
const toolCall = {
|
|
378
|
+
name: rawToolCall.name,
|
|
379
|
+
args: (isObject(rawToolCall.args) ? rawToolCall.args : {}),
|
|
380
|
+
...(typeof rawToolCall.toolCallVersion === 'string' ? { toolCallVersion: rawToolCall.toolCallVersion } : { toolCallVersion: '2.0.0' })
|
|
381
|
+
};
|
|
382
|
+
const createdAt = stringField(obj, 'createdAt');
|
|
383
|
+
const heartbeats = Array.isArray(obj.heartbeats)
|
|
384
|
+
? obj.heartbeats.filter(isValidHeartbeat)
|
|
385
|
+
: [];
|
|
386
|
+
const lastBeatAt = typeof obj.lastBeatAt === 'string' ? obj.lastBeatAt : null;
|
|
387
|
+
const status = isDispatchStatus(obj.status) ? obj.status : 'no-execution';
|
|
388
|
+
const completedAt = typeof obj.completedAt === 'string' ? obj.completedAt : null;
|
|
389
|
+
const outcome = isOutcome(obj.outcome) ? obj.outcome : 'no-execution';
|
|
390
|
+
const artifactPaths = Array.isArray(obj.artifactPaths)
|
|
391
|
+
? obj.artifactPaths.filter((p) => typeof p === 'string')
|
|
392
|
+
: [];
|
|
393
|
+
const disposed = obj.disposed === true;
|
|
394
|
+
const disposedAt = typeof obj.disposedAt === 'string' ? obj.disposedAt : null;
|
|
395
|
+
const batchId = typeof obj.batchId === 'string' && obj.batchId.length > 0
|
|
396
|
+
? obj.batchId
|
|
397
|
+
: 'legacy-batch';
|
|
398
|
+
return {
|
|
399
|
+
version: 2,
|
|
400
|
+
createdAt,
|
|
401
|
+
completedAt,
|
|
402
|
+
outcome,
|
|
403
|
+
artifactPaths,
|
|
404
|
+
disposed,
|
|
405
|
+
disposedAt,
|
|
406
|
+
role,
|
|
407
|
+
requestId,
|
|
408
|
+
sessionId,
|
|
409
|
+
prompt,
|
|
410
|
+
toolCall,
|
|
411
|
+
batchId,
|
|
412
|
+
heartbeats,
|
|
413
|
+
lastBeatAt,
|
|
414
|
+
status
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
function isObject(v) {
|
|
418
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
419
|
+
}
|
|
420
|
+
function stringField(obj, key) {
|
|
421
|
+
const v = obj[key];
|
|
422
|
+
if (typeof v !== 'string') {
|
|
423
|
+
throw new Error(`Dispatch record field '${key}' must be a string (got ${typeof v})`);
|
|
424
|
+
}
|
|
425
|
+
return v;
|
|
426
|
+
}
|
|
427
|
+
function isValidHeartbeat(v) {
|
|
428
|
+
if (!isObject(v))
|
|
429
|
+
return false;
|
|
430
|
+
return (typeof v.at === 'string' &&
|
|
431
|
+
isHeartbeatStatus(v.status) &&
|
|
432
|
+
typeof v.progress === 'number' &&
|
|
433
|
+
(v.note === null || typeof v.note === 'string'));
|
|
434
|
+
}
|
|
435
|
+
function isHeartbeatStatus(v) {
|
|
436
|
+
return (v === 'queued' || v === 'running' || v === 'finalizing' ||
|
|
437
|
+
v === 'done' || v === 'failed' || v === 'stale');
|
|
438
|
+
}
|
|
439
|
+
function isDispatchStatus(v) {
|
|
440
|
+
return (v === 'queued' || v === 'running' || v === 'finalizing' ||
|
|
441
|
+
v === 'done' || v === 'failed' || v === 'cancelled' ||
|
|
442
|
+
v === 'no-execution' || v === 'stale');
|
|
443
|
+
}
|
|
444
|
+
function isOutcome(v) {
|
|
445
|
+
return (v === 'success' || v === 'failed' || v === 'timeout' ||
|
|
446
|
+
v === 'cancelled' || v === 'no-execution');
|
|
447
|
+
}
|
|
448
|
+
export { isDispatchStatus, isOutcome };
|
|
449
|
+
function writeAtomic(path, record) {
|
|
450
|
+
const dir = dirname(path);
|
|
451
|
+
// Slice 2026-06-23-audit-3rd #11: skip mkdirSync when the dir already
|
|
452
|
+
// exists (every heartbeat + every dispatch read-modify-write).
|
|
453
|
+
if (!existsSync(dir)) {
|
|
454
|
+
mkdirSync(dir, { recursive: true });
|
|
455
|
+
}
|
|
456
|
+
const tmp = `${path}.tmp-${process.pid}-${Date.now()}`;
|
|
457
|
+
const safeTmp = resolve(dir, tmp.split(/[\\/]/).pop());
|
|
458
|
+
writeFileSync(safeTmp, JSON.stringify(record, null, 2) + '\n', 'utf8');
|
|
459
|
+
renameSync(safeTmp, path);
|
|
460
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* G6.4 / RL-16 — heartbeat truncation helper.
|
|
3
|
+
*
|
|
4
|
+
* Each dispatch record keeps an append-only `heartbeats[]` array so
|
|
5
|
+
* reducers / auditors can reconstruct what the sub-agent did. Without
|
|
6
|
+
* a cap, a long-running sub-agent can blow the record JSON past 1 MB
|
|
7
|
+
* (a 30s cadence over a 1-hour run = 120 entries * ~120 bytes = ~14 KB;
|
|
8
|
+
* a 5s cadence over 24h = 17 000 entries * ~120 bytes = ~2 MB). The
|
|
9
|
+
* 100-entry cap is LLM-friendly: stale heartbeats are not informative
|
|
10
|
+
* once the poller has read them, so dropping the oldest ones is a
|
|
11
|
+
* non-event.
|
|
12
|
+
*
|
|
13
|
+
* Pure helper; no IO. The writer in `dispatch-record-writer.ts` calls
|
|
14
|
+
* this on every `appendHeartbeat`. Exposed as a separate module so
|
|
15
|
+
* tests can pin the contract.
|
|
16
|
+
*/
|
|
17
|
+
import type { Heartbeat } from './dispatch-record-writer.js';
|
|
18
|
+
export declare const HEARTBEAT_TRUNCATE_LIMIT = 100;
|
|
19
|
+
export interface TruncationResult {
|
|
20
|
+
readonly heartbeats: readonly Heartbeat[];
|
|
21
|
+
readonly truncated: boolean;
|
|
22
|
+
/** The number of entries dropped by this truncation. */
|
|
23
|
+
readonly dropped: number;
|
|
24
|
+
}
|
|
25
|
+
/** Apply the 100-entry cap. Returns the most recent N entries + a flag. */
|
|
26
|
+
export declare function truncateHeartbeats(entries: readonly Heartbeat[]): TruncationResult;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const HEARTBEAT_TRUNCATE_LIMIT = 100;
|
|
2
|
+
/** Apply the 100-entry cap. Returns the most recent N entries + a flag. */
|
|
3
|
+
export function truncateHeartbeats(entries) {
|
|
4
|
+
if (entries.length <= HEARTBEAT_TRUNCATE_LIMIT) {
|
|
5
|
+
return { heartbeats: [...entries], truncated: false, dropped: 0 };
|
|
6
|
+
}
|
|
7
|
+
const start = entries.length - HEARTBEAT_TRUNCATE_LIMIT;
|
|
8
|
+
return {
|
|
9
|
+
heartbeats: entries.slice(start),
|
|
10
|
+
truncated: true,
|
|
11
|
+
dropped: start
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type DispatchRecord } from './dispatch-record-writer.js';
|
|
2
|
+
export declare const DEFAULT_LEAK_THRESHOLD_MS: number;
|
|
3
|
+
export interface LeakedRecord {
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly record: DispatchRecord;
|
|
6
|
+
readonly ageMs: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function findLeakedDispatchRecords(projectRoot: string, sessionId: string, options?: {
|
|
9
|
+
now?: () => Date;
|
|
10
|
+
thresholdMs?: number;
|
|
11
|
+
}): readonly LeakedRecord[];
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice #009 / G5 RL-7 — dispatch record leak detector.
|
|
3
|
+
*
|
|
4
|
+
* After peaks-code's reducer consumes a batch, any dispatch record that
|
|
5
|
+
* is still `disposed === false` AND was created more than `thresholdMs`
|
|
6
|
+
* ago is a **leak**. This helper scans the on-disk records under
|
|
7
|
+
* `.peaks/_sub_agents/<sid>/` and returns the leaked ones. The CLI or
|
|
8
|
+
* the reducer's next-batch step emits a user-visible warning when the
|
|
9
|
+
* list is non-empty.
|
|
10
|
+
*
|
|
11
|
+
* Threshold: 1h (configurable). Rationale: the longest empirical
|
|
12
|
+
* peaks-rd / peaks-qa fan-out + reducer cycle is < 60s; the threshold
|
|
13
|
+
* gives slow slices headroom without hiding leaks for the next session.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
import { isDispatchStatus, isOutcome } from './dispatch-record-writer.js';
|
|
18
|
+
export const DEFAULT_LEAK_THRESHOLD_MS = 60 * 60 * 1000; // 1 hour
|
|
19
|
+
export function findLeakedDispatchRecords(projectRoot, sessionId, options = {}) {
|
|
20
|
+
const now = options.now ?? (() => new Date());
|
|
21
|
+
const thresholdMs = options.thresholdMs ?? DEFAULT_LEAK_THRESHOLD_MS;
|
|
22
|
+
const nowMs = now().getTime();
|
|
23
|
+
const dir = join(projectRoot, '.peaks', '_sub_agents', sessionId);
|
|
24
|
+
if (!existsSync(dir))
|
|
25
|
+
return [];
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const entry of readdirSync(dir)) {
|
|
28
|
+
if (!entry.startsWith('dispatch-') || !entry.endsWith('.json'))
|
|
29
|
+
continue;
|
|
30
|
+
const fullPath = join(dir, entry);
|
|
31
|
+
let raw;
|
|
32
|
+
try {
|
|
33
|
+
raw = readFileSync(fullPath, 'utf8');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
continue; // skip unreadable files
|
|
37
|
+
}
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(raw);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
continue; // skip malformed files
|
|
44
|
+
}
|
|
45
|
+
if (!isRecordShape(parsed))
|
|
46
|
+
continue;
|
|
47
|
+
if (parsed.disposed === true)
|
|
48
|
+
continue;
|
|
49
|
+
const createdMs = Date.parse(parsed.createdAt);
|
|
50
|
+
if (Number.isNaN(createdMs))
|
|
51
|
+
continue;
|
|
52
|
+
const ageMs = nowMs - createdMs;
|
|
53
|
+
if (ageMs < thresholdMs)
|
|
54
|
+
continue;
|
|
55
|
+
out.push({ path: fullPath, record: parsed, ageMs });
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
function isRecordShape(v) {
|
|
60
|
+
if (typeof v !== 'object' || v === null)
|
|
61
|
+
return false;
|
|
62
|
+
const obj = v;
|
|
63
|
+
return (typeof obj.createdAt === 'string' &&
|
|
64
|
+
typeof obj.role === 'string' &&
|
|
65
|
+
typeof obj.requestId === 'string' &&
|
|
66
|
+
typeof obj.sessionId === 'string' &&
|
|
67
|
+
typeof obj.prompt === 'string' &&
|
|
68
|
+
isOutcome(obj.outcome) &&
|
|
69
|
+
isDispatchStatus(obj.status) &&
|
|
70
|
+
typeof obj.disposed === 'boolean' &&
|
|
71
|
+
Array.isArray(obj.artifactPaths));
|
|
72
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice complexity tier (v2.15.0 follow-up, G2 in 12 Gaps).
|
|
3
|
+
* Used by Code to schedule complex slices during user-attended hours
|
|
4
|
+
* and trivial / simple slices overnight.
|
|
5
|
+
*/
|
|
6
|
+
export type SliceComplexity = 'trivial' | 'simple' | 'complex';
|
|
7
|
+
export declare const SLICE_COMPLEXITIES: readonly SliceComplexity[];
|
|
8
|
+
export declare function isSliceComplexity(value: string): value is SliceComplexity;
|
|
9
|
+
export interface SliceNode {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly role: string;
|
|
12
|
+
/** Human-readable label, optional. */
|
|
13
|
+
readonly label?: string;
|
|
14
|
+
/** Optional prompt override; dispatch falls back to a default placeholder. */
|
|
15
|
+
readonly prompt?: string;
|
|
16
|
+
/**
|
|
17
|
+
* v2.15.0 follow-up — G12: foundation slice. Foundation slices run before
|
|
18
|
+
* business slices in the layered DAG. Business slices do NOT wait for
|
|
19
|
+
* ALL foundation slices — they wait only for the foundation subset
|
|
20
|
+
* they declare as `dependsOn`. Optional; default false.
|
|
21
|
+
*/
|
|
22
|
+
readonly foundation?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* v2.15.0 follow-up — G11: upstream sync slice. Marks a slice that
|
|
25
|
+
* syncs an upstream fork (e.g. hermes) to a new tag. UpstreamSync
|
|
26
|
+
* slices take priority within their topological level. Optional.
|
|
27
|
+
*/
|
|
28
|
+
readonly upstreamSync?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* v2.15.0 follow-up — G2: complexity tier. Drives Code's scheduling
|
|
31
|
+
* (complex = user-attended, simple/trivial = overnight). Optional.
|
|
32
|
+
*/
|
|
33
|
+
readonly complexity?: SliceComplexity;
|
|
34
|
+
}
|
|
35
|
+
export interface DependsOn {
|
|
36
|
+
readonly from: string;
|
|
37
|
+
readonly to: string;
|
|
38
|
+
}
|
|
39
|
+
export interface SliceDag {
|
|
40
|
+
readonly nodes: readonly SliceNode[];
|
|
41
|
+
readonly edges: readonly DependsOn[];
|
|
42
|
+
}
|
|
43
|
+
/** Thrown by `validateDag` when the graph violates one of the constraints. */
|
|
44
|
+
export declare class InvalidSliceDagError extends Error {
|
|
45
|
+
readonly path?: readonly string[] | undefined;
|
|
46
|
+
readonly code: "INVALID_SLICE_DAG";
|
|
47
|
+
constructor(message: string, path?: readonly string[] | undefined);
|
|
48
|
+
}
|
|
49
|
+
/** Thrown by `topologicalLevels` when the graph has a cycle (defensive). */
|
|
50
|
+
export declare class SliceDagCycleError extends Error {
|
|
51
|
+
readonly cyclePath: readonly string[];
|
|
52
|
+
readonly code: "SLICE_DAG_CYCLE";
|
|
53
|
+
constructor(cyclePath: readonly string[]);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Validate a SliceDag. Throws `InvalidSliceDagError` on the first violation.
|
|
57
|
+
* Pure. Cheap. No I/O.
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateDag(dag: SliceDag): void;
|
|
60
|
+
/**
|
|
61
|
+
* Compute topological levels. Each level is an array of node IDs that can
|
|
62
|
+
* run in parallel. Throws `SliceDagCycleError` on cycle (defensive;
|
|
63
|
+
* `validateDag` should have caught it).
|
|
64
|
+
*
|
|
65
|
+
* Algorithm: Kahn's algorithm. O(V + E).
|
|
66
|
+
*/
|
|
67
|
+
export declare function topologicalLevels(dag: SliceDag): readonly (readonly string[])[];
|
|
68
|
+
/**
|
|
69
|
+
* Return the next set of node IDs that are ready to run given the set of
|
|
70
|
+
* completed node IDs. A node is ready when all of its `from` predecessors
|
|
71
|
+
* are in `completed`.
|
|
72
|
+
*/
|
|
73
|
+
export declare function sliceReadyToRun(dag: SliceDag, completed: ReadonlySet<string>): readonly string[];
|
|
74
|
+
/**
|
|
75
|
+
* Serialize the DAG into a deterministic JSON string. Node IDs are sorted;
|
|
76
|
+
* edges are sorted by `(from, to)`. The result is suitable for SHA-256
|
|
77
|
+
* hashing and for byte-stable diffs.
|
|
78
|
+
*/
|
|
79
|
+
export declare function serializeDag(dag: SliceDag): string;
|
|
80
|
+
/** SHA-256 hash of the serialized DAG. Stable across runs. */
|
|
81
|
+
export declare function hashDag(dag: SliceDag): string;
|