@tea-agent/loop-agent 0.1.0-fe-test.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +114 -0
- package/CHANGELOG.md +2283 -0
- package/README.md +177 -0
- package/bin/agent-worker.js +22 -0
- package/bin/loop-agent.js +57 -0
- package/dist/adapters/aimax.js +91 -0
- package/dist/adapters/context.js +32 -0
- package/dist/adapters/index.js +29 -0
- package/dist/adapters/loop-agent.js +192 -0
- package/dist/adapters/types.js +1 -0
- package/dist/application/context-usage/skill-resolution-stats.js +263 -0
- package/dist/application/dag/args.js +486 -0
- package/dist/application/dag/generate-task-dag.js +408 -0
- package/dist/application/dag/report-dag.js +14 -0
- package/dist/application/dag/run-dag.js +109 -0
- package/dist/application/dag/validate-dag.js +166 -0
- package/dist/application/evaluation/alias.js +184 -0
- package/dist/application/evaluation/budget.js +192 -0
- package/dist/application/evaluation/campaign-hash.js +47 -0
- package/dist/application/evaluation/campaign-matrix.js +372 -0
- package/dist/application/evaluation/campaign-scorecard.js +135 -0
- package/dist/application/evaluation/campaign.js +370 -0
- package/dist/application/evaluation/candidate-hash.js +75 -0
- package/dist/application/evaluation/candidate.js +69 -0
- package/dist/application/evaluation/corpus-hash.js +38 -0
- package/dist/application/evaluation/corpus.js +56 -0
- package/dist/application/evaluation/experiment.js +294 -0
- package/dist/application/evaluation/ignition.js +198 -0
- package/dist/application/evaluation/integrity-audit.js +162 -0
- package/dist/application/evaluation/outer-loop.js +132 -0
- package/dist/application/evaluation/pi-cell-executor.js +39 -0
- package/dist/application/evaluation/private-verifier.js +46 -0
- package/dist/application/evaluation/promotion-policy.js +151 -0
- package/dist/application/evaluation/proposer.js +98 -0
- package/dist/application/evaluation/replay.js +289 -0
- package/dist/application/evaluation/types.js +652 -0
- package/dist/application/loop/run-action.js +19 -0
- package/dist/application/task-lifecycle/advance.js +1204 -0
- package/dist/application/task-lifecycle/gates.js +130 -0
- package/dist/application/task-lifecycle/index.js +7 -0
- package/dist/application/task-lifecycle/observe.js +424 -0
- package/dist/application/task-lifecycle/plan-transitions.js +251 -0
- package/dist/application/task-lifecycle/recommendations.js +180 -0
- package/dist/application/task-lifecycle/record.js +73 -0
- package/dist/application/task-lifecycle/types.js +1 -0
- package/dist/build-stamp.json +6 -0
- package/dist/cli/catalog.js +24 -0
- package/dist/cli/command-definitions.js +659 -0
- package/dist/cli/help.js +56 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/program.js +647 -0
- package/dist/cli/router.js +13 -0
- package/dist/cli/update/init-surface-notifier.js +167 -0
- package/dist/cli/update/notifier.js +117 -0
- package/dist/cli/update/npm-client.js +151 -0
- package/dist/cli/update/policy.js +92 -0
- package/dist/cli/update/runtime-activity.js +29 -0
- package/dist/cli/update/state.js +68 -0
- package/dist/cli-governance/active-residue-check.js +38 -0
- package/dist/cli.js +57 -0
- package/dist/commands/client-recovery.js +1373 -0
- package/dist/commands/closeout.js +13 -0
- package/dist/commands/coverage-audit.js +14 -0
- package/dist/commands/coverage-report.js +50 -0
- package/dist/commands/cursor-prompt.js +182 -0
- package/dist/commands/dag-approve.js +142 -0
- package/dist/commands/dag-final-verification.js +76 -0
- package/dist/commands/dag-init-hybrid.js +57 -0
- package/dist/commands/dag-reconcile-run.js +5 -0
- package/dist/commands/dag-reconcile-tasks.js +51 -0
- package/dist/commands/dag-reject.js +91 -0
- package/dist/commands/dag-report.js +76 -0
- package/dist/commands/dag-request-interrupt.js +20 -0
- package/dist/commands/dag-rerun-task.js +19 -0
- package/dist/commands/dag-rerun.js +111 -0
- package/dist/commands/dag-resume.js +35 -0
- package/dist/commands/dag-run-task.js +12 -0
- package/dist/commands/dag-validate.js +20 -0
- package/dist/commands/dag-workflow-compile.js +91 -0
- package/dist/commands/dag-workflow-plan.js +130 -0
- package/dist/commands/dag-workflow-validate.js +66 -0
- package/dist/commands/delegate.js +130 -0
- package/dist/commands/docs-archive.js +5 -0
- package/dist/commands/docs-audit.js +6 -0
- package/dist/commands/doctor.js +283 -0
- package/dist/commands/eval.js +1398 -0
- package/dist/commands/examples.js +90 -0
- package/dist/commands/goal.js +92 -0
- package/dist/commands/handoff-check.js +5 -0
- package/dist/commands/harvest.js +44 -0
- package/dist/commands/import-prd.js +81 -0
- package/dist/commands/init-upgrade.js +3085 -0
- package/dist/commands/init.js +3630 -0
- package/dist/commands/inspect.js +11 -0
- package/dist/commands/instructions.js +223 -0
- package/dist/commands/knowledge.js +162 -0
- package/dist/commands/loop-benchmark.js +72 -0
- package/dist/commands/loop.js +251 -0
- package/dist/commands/new-task.js +5 -0
- package/dist/commands/operator.js +44 -0
- package/dist/commands/pi-prompt.js +174 -0
- package/dist/commands/pi-reuse-benchmark.js +153 -0
- package/dist/commands/plan-list.js +5 -0
- package/dist/commands/plan.js +50 -0
- package/dist/commands/promote-run.js +29 -0
- package/dist/commands/reference-index.js +16 -0
- package/dist/commands/run-dag-progress.js +123 -0
- package/dist/commands/run-dag.js +22 -0
- package/dist/commands/spine.js +38 -0
- package/dist/commands/stats.js +113 -0
- package/dist/commands/status.js +57 -0
- package/dist/commands/study-init.js +192 -0
- package/dist/commands/task-advance.js +366 -0
- package/dist/commands/task-contract.js +269 -0
- package/dist/commands/task-source-prepare.js +479 -0
- package/dist/commands/task-status.js +133 -0
- package/dist/commands/workflow.js +259 -0
- package/dist/commands/worktree-create.js +31 -0
- package/dist/commands/worktree-list.js +5 -0
- package/dist/commands/worktree-remove.js +26 -0
- package/dist/executors/config-core.js +5 -0
- package/dist/executors/config.js +2 -0
- package/dist/executors/dag-pi-executor.js +1277 -0
- package/dist/executors/dag-static-executor.js +42 -0
- package/dist/executors/dag.js +3 -0
- package/dist/executors/index.js +6 -0
- package/dist/executors/model-routing.js +71 -0
- package/dist/executors/pi-defaults.js +9 -0
- package/dist/executors/pi-event-serializer.js +65 -0
- package/dist/executors/pi-executor.js +981 -0
- package/dist/executors/pi-playwright-cli-tool.js +1006 -0
- package/dist/executors/pi-prompt-transport.js +198 -0
- package/dist/executors/pi-reuse-benchmark.js +316 -0
- package/dist/executors/pi-runtime-reuse.js +29 -0
- package/dist/executors/pi-sdk-executor.js +722 -0
- package/dist/executors/pi-sdk.js +1 -0
- package/dist/executors/pi-writer-tool-policy.js +266 -0
- package/dist/executors/pi.js +3 -0
- package/dist/executors/playwright-cli-launcher.js +63 -0
- package/dist/executors/process-tree.js +33 -0
- package/dist/executors/shell-executor.js +3055 -0
- package/dist/executors/shell-presets.js +99 -0
- package/dist/executors/shell-verification.js +262 -0
- package/dist/executors/shell-write-guard.js +543 -0
- package/dist/executors/shell.js +3 -0
- package/dist/executors/static.js +1 -0
- package/dist/governance/checks.js +437 -0
- package/dist/governance/document-index-closure.js +164 -0
- package/dist/governance/exec-plans.js +549 -0
- package/dist/governance/harness.js +9 -0
- package/dist/governance/index.js +3 -0
- package/dist/governance/manifest-types.js +254 -0
- package/dist/governance/manifest.js +2 -0
- package/dist/governance/path-guard.js +69 -0
- package/dist/governance/path-guards.js +2 -0
- package/dist/governance/profiles.js +3 -0
- package/dist/governance/requirement-coverage.js +425 -0
- package/dist/governance/skill-safety.js +135 -0
- package/dist/governance/spine-audit.js +155 -0
- package/dist/infrastructure/evaluation/alias-store.js +199 -0
- package/dist/infrastructure/evaluation/campaign-store.js +154 -0
- package/dist/infrastructure/evaluation/candidate-store.js +439 -0
- package/dist/infrastructure/evaluation/corpus-store.js +181 -0
- package/dist/infrastructure/evaluation/experiment-store.js +124 -0
- package/dist/infrastructure/evaluation/ignition-store.js +82 -0
- package/dist/infrastructure/evaluation/private-verifier-store.js +145 -0
- package/dist/infrastructure/evaluation/proposer-store.js +78 -0
- package/dist/infrastructure/evaluation/store.js +40 -0
- package/dist/infrastructure/harness/active-residue-policy.js +73 -0
- package/dist/infrastructure/harness/artifact-store.js +72 -0
- package/dist/infrastructure/harness/atomic-write.js +50 -0
- package/dist/infrastructure/harness/completed-facts-guard.js +40 -0
- package/dist/infrastructure/harness/loop-action-store.js +20 -0
- package/dist/infrastructure/harness/loop-store.js +41 -0
- package/dist/infrastructure/harness/one-shot-run-store.js +94 -0
- package/dist/infrastructure/harness/task-store.js +108 -0
- package/dist/records/closeout.js +2 -0
- package/dist/records/harvest.js +215 -0
- package/dist/records/index.js +3 -0
- package/dist/records/one-shot-runs.js +386 -0
- package/dist/records/promotion.js +200 -0
- package/dist/shared/artifacts-core.js +107 -0
- package/dist/shared/artifacts.js +2 -0
- package/dist/shared/context-files.js +32 -0
- package/dist/shared/context.js +2 -0
- package/dist/shared/copy-dir.js +17 -0
- package/dist/shared/git-progress.js +172 -0
- package/dist/shared/index.js +5 -0
- package/dist/shared/logger.js +17 -0
- package/dist/shared/one-shot-prompt-args.js +98 -0
- package/dist/shared/openspec-spec.js +125 -0
- package/dist/shared/operator/capabilities.js +2659 -0
- package/dist/shared/operator/command-lifecycle.js +94 -0
- package/dist/shared/operator/envelope.js +59 -0
- package/dist/shared/operator/index.js +5 -0
- package/dist/shared/operator/registry.js +38 -0
- package/dist/shared/operator/types.js +5 -0
- package/dist/shared/output-truncation.js +37 -0
- package/dist/shared/package-metadata.js +530 -0
- package/dist/shared/path-refs.js +31 -0
- package/dist/shared/pi-retry-settings.js +23 -0
- package/dist/shared/playwright-cli-command-policy.js +41 -0
- package/dist/shared/preview.js +39 -0
- package/dist/shared/prompts.js +26 -0
- package/dist/shared/reference-context.js +264 -0
- package/dist/shared/resilient-git.js +133 -0
- package/dist/shared/runtime-activity.js +6 -0
- package/dist/shared/timeout-policy.js +24 -0
- package/dist/shared/timeout.js +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/sidecars/cursor-prompt/executor.js +428 -0
- package/dist/sidecars/cursor-prompt/index.js +3 -0
- package/dist/sidecars/cursor-prompt/stream.js +121 -0
- package/dist/task/config-types.js +235 -0
- package/dist/task/config.js +2 -0
- package/dist/task/contract/adopt.js +166 -0
- package/dist/task/contract/apply.js +326 -0
- package/dist/task/contract/canonicalize.js +60 -0
- package/dist/task/contract/constants.js +30 -0
- package/dist/task/contract/diff.js +177 -0
- package/dist/task/contract/hash.js +42 -0
- package/dist/task/contract/import-revision.js +96 -0
- package/dist/task/contract/index.js +17 -0
- package/dist/task/contract/journal.js +155 -0
- package/dist/task/contract/lock.js +153 -0
- package/dist/task/contract/observe.js +296 -0
- package/dist/task/contract/paths.js +19 -0
- package/dist/task/contract/project.js +185 -0
- package/dist/task/contract/recover.js +312 -0
- package/dist/task/contract/request-ledger.js +37 -0
- package/dist/task/contract/schema.js +153 -0
- package/dist/task/contract/transaction.js +160 -0
- package/dist/task/contract/types.js +1 -0
- package/dist/task/contract/validate-draft.js +106 -0
- package/dist/task/dag-source-paths.js +50 -0
- package/dist/task/delegate.js +208 -0
- package/dist/task/frontend-preflight.js +131 -0
- package/dist/task/frontend-project-capability.js +570 -0
- package/dist/task/goal-audit.js +51 -0
- package/dist/task/goal-policy.js +8 -0
- package/dist/task/goal.js +3 -0
- package/dist/task/ids.js +1 -0
- package/dist/task/index.js +12 -0
- package/dist/task/lifecycle.js +1 -0
- package/dist/task/operator/capabilities.js +6 -0
- package/dist/task/operator/envelope.js +2 -0
- package/dist/task/operator/index.js +5 -0
- package/dist/task/operator/registry.js +2 -0
- package/dist/task/operator/types.js +1 -0
- package/dist/task/paths.js +1 -0
- package/dist/task/read-model.js +140 -0
- package/dist/task/runtime.js +708 -0
- package/dist/task/source-prepare/artifact-meta.js +137 -0
- package/dist/task/source-prepare/build-draft.js +232 -0
- package/dist/task/source-prepare/completeness.js +248 -0
- package/dist/task/source-prepare/index.js +10 -0
- package/dist/task/source-prepare/parse-intent.js +496 -0
- package/dist/task/source-prepare/path-policy.js +197 -0
- package/dist/task/source-prepare/placeholder-paths.js +77 -0
- package/dist/task/source-prepare/prepare.js +920 -0
- package/dist/task/source-prepare/reference-integrity.js +290 -0
- package/dist/task/source-prepare/semantic-intake.js +717 -0
- package/dist/task/source-prepare/types.js +7 -0
- package/dist/task/source-references.js +228 -0
- package/dist/task/source-state.js +1 -0
- package/dist/task/state.js +41 -0
- package/dist/task/subagent-guidance.js +1 -0
- package/dist/task/task-demand-routing.js +443 -0
- package/dist/task/workflow-state-types.js +92 -0
- package/dist/task/worktree-cleanup.js +140 -0
- package/dist/task/worktree.js +388 -0
- package/dist/verification/maven/cache.js +142 -0
- package/dist/verification/maven/index.js +120 -0
- package/dist/verification/maven/plan-commands.js +421 -0
- package/dist/verification/maven/pom-static.js +136 -0
- package/dist/verification/maven/scope-resolve.js +153 -0
- package/dist/verification/maven/stale.js +130 -0
- package/dist/verification/maven/types.js +23 -0
- package/dist/verification/maven/workspace-graph.js +322 -0
- package/dist/worker/cli.js +957 -0
- package/dist/worker/closeout/apply.js +73 -0
- package/dist/worker/closeout/preview.js +30 -0
- package/dist/worker/console/app-data.js +316 -0
- package/dist/worker/console/chat/artifact-card.js +30 -0
- package/dist/worker/console/chat/assistant-content.js +121 -0
- package/dist/worker/console/chat/chat-event-store.js +981 -0
- package/dist/worker/console/chat/chat-ui-policy.js +25 -0
- package/dist/worker/console/chat/compaction-errors.js +64 -0
- package/dist/worker/console/chat/composer-draft-store.js +45 -0
- package/dist/worker/console/chat/context-panel.js +54 -0
- package/dist/worker/console/chat/contract-apply-receipt-store.js +174 -0
- package/dist/worker/console/chat/explore-tools.js +299 -0
- package/dist/worker/console/chat/human-gate-card.js +45 -0
- package/dist/worker/console/chat/interview-adapter.js +149 -0
- package/dist/worker/console/chat/mcp-inventory.js +221 -0
- package/dist/worker/console/chat/model-resolver.js +215 -0
- package/dist/worker/console/chat/operation-card.js +92 -0
- package/dist/worker/console/chat/pi-console-config.js +376 -0
- package/dist/worker/console/chat/pi-runtime.js +2446 -0
- package/dist/worker/console/chat/repo-browser.js +140 -0
- package/dist/worker/console/chat/repo-walk.js +125 -0
- package/dist/worker/console/chat/resource-loader.js +59 -0
- package/dist/worker/console/chat/resource-preferences-store.js +152 -0
- package/dist/worker/console/chat/routes.js +3137 -0
- package/dist/worker/console/chat/runtime-context.js +102 -0
- package/dist/worker/console/chat/runtime-selection.js +96 -0
- package/dist/worker/console/chat/semantic-activity.js +489 -0
- package/dist/worker/console/chat/session-store.js +484 -0
- package/dist/worker/console/chat/shortcuts.js +217 -0
- package/dist/worker/console/chat/tool-adapter.js +131 -0
- package/dist/worker/console/chat/tool-preview.js +247 -0
- package/dist/worker/console/chat/tools.js +212 -0
- package/dist/worker/console/chat/turn-execution-registry.js +82 -0
- package/dist/worker/console/chat/turn-process.js +346 -0
- package/dist/worker/console/chat/usage.js +165 -0
- package/dist/worker/console/chat/workspace-landing.js +103 -0
- package/dist/worker/console/dag-confirmation.js +347 -0
- package/dist/worker/console/dag-execution-receipt.js +393 -0
- package/dist/worker/console/doctor.js +230 -0
- package/dist/worker/console/draft-store.js +158 -0
- package/dist/worker/console/harness-pi-model-matrix.js +137 -0
- package/dist/worker/console/human-gate-token.js +130 -0
- package/dist/worker/console/index.js +17 -0
- package/dist/worker/console/inspect-split.js +82 -0
- package/dist/worker/console/interview/assessment.js +67 -0
- package/dist/worker/console/interview/grill-me.js +277 -0
- package/dist/worker/console/interview/session.js +100 -0
- package/dist/worker/console/interview/tools.js +109 -0
- package/dist/worker/console/loopback.js +16 -0
- package/dist/worker/console/mutation-gate-receipt-store.js +184 -0
- package/dist/worker/console/night-aux-ticker.js +146 -0
- package/dist/worker/console/observe-health-match.js +179 -0
- package/dist/worker/console/observe-link.js +42 -0
- package/dist/worker/console/open-browser.js +134 -0
- package/dist/worker/console/operation-run-facts.js +190 -0
- package/dist/worker/console/operation-runner.js +353 -0
- package/dist/worker/console/operation-sse.js +184 -0
- package/dist/worker/console/operation-store.js +169 -0
- package/dist/worker/console/operation-wait.js +355 -0
- package/dist/worker/console/operator-actions.js +3768 -0
- package/dist/worker/console/operator-selection.js +105 -0
- package/dist/worker/console/operator-surface-health.js +24 -0
- package/dist/worker/console/operator-user-error.js +45 -0
- package/dist/worker/console/pi-readiness.js +288 -0
- package/dist/worker/console/prd-identity.js +102 -0
- package/dist/worker/console/prd-intake-bridge.js +441 -0
- package/dist/worker/console/prd-reference-discovery.js +124 -0
- package/dist/worker/console/recovery-cta.js +320 -0
- package/dist/worker/console/recovery-error-copy.js +198 -0
- package/dist/worker/console/recovery-selection.js +107 -0
- package/dist/worker/console/repo-fingerprint.js +35 -0
- package/dist/worker/console/resolve-dag-run-for-task.js +115 -0
- package/dist/worker/console/resource-loader.js +95 -0
- package/dist/worker/console/routes.js +475 -0
- package/dist/worker/console/security.js +170 -0
- package/dist/worker/console/server.js +357 -0
- package/dist/worker/console/sibling-controller.js +33 -0
- package/dist/worker/console/static/assets/abnfDiagram-N423BO3Z-BmOEx0gA.js +1 -0
- package/dist/worker/console/static/assets/arc-BGiVVe8b.js +1 -0
- package/dist/worker/console/static/assets/architectureDiagram-T3A2C74G-nDdu4rgJ.js +36 -0
- package/dist/worker/console/static/assets/blockDiagram-VBNYF7ZC-Bb5u0BWf.js +132 -0
- package/dist/worker/console/static/assets/c4Diagram-5PPSVZJV-BlhC0j94.js +10 -0
- package/dist/worker/console/static/assets/channel-Tl-FkUqr.js +1 -0
- package/dist/worker/console/static/assets/chunk-2GRJ4B5K-Ai8_qQXI.js +1 -0
- package/dist/worker/console/static/assets/chunk-2Q5K7J3B-B9gyCjqX.js +1 -0
- package/dist/worker/console/static/assets/chunk-5RXB4S5H-Bzbj3zGH.js +231 -0
- package/dist/worker/console/static/assets/chunk-5VM5RSS4-BT415PvT.js +15 -0
- package/dist/worker/console/static/assets/chunk-6Q2QTUOP-D_A5_5QL.js +88 -0
- package/dist/worker/console/static/assets/chunk-GF5L2VYU-srJkaP3f.js +206 -0
- package/dist/worker/console/static/assets/chunk-JWPE2WC7-UYGvEP4l.js +1 -0
- package/dist/worker/console/static/assets/chunk-KBJHAD2P-B8luBrrz.js +1 -0
- package/dist/worker/console/static/assets/chunk-RYQCIY6F-DN7wXZSq.js +1 -0
- package/dist/worker/console/static/assets/chunk-XXDRQBXY-DXKyMuKS.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BaehtRk4.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BaehtRk4.js +1 -0
- package/dist/worker/console/static/assets/cose-bilkent-JH36ORCC-dqvoynXj.js +1 -0
- package/dist/worker/console/static/assets/cynefin-VYW2F7L2--PcyL34A.js +166 -0
- package/dist/worker/console/static/assets/cynefinDiagram-MW4NZA55-DvWs_hTY.js +62 -0
- package/dist/worker/console/static/assets/cytoscape.esm-yzknjiTM.js +321 -0
- package/dist/worker/console/static/assets/dagre-VZM6K2ZE-DxeIxbyO.js +4 -0
- package/dist/worker/console/static/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/worker/console/static/assets/diagram-7IWD3JNH-DPCG61Of.js +30 -0
- package/dist/worker/console/static/assets/diagram-B4RE2ZJO-CmuU50-U.js +3 -0
- package/dist/worker/console/static/assets/diagram-LBJQPF4R-B61XLD_v.js +24 -0
- package/dist/worker/console/static/assets/diagram-Q27KOJAE-BB7HTRRY.js +24 -0
- package/dist/worker/console/static/assets/diagram-UB23O5K3-DvkboAIp.js +41 -0
- package/dist/worker/console/static/assets/ebnfDiagram-BXEA7PRR-BdJ_y1fL.js +1 -0
- package/dist/worker/console/static/assets/erDiagram-JOGREHBK-9bUBZTRi.js +85 -0
- package/dist/worker/console/static/assets/flowDiagram-UKHOOZJN-Dw4L4RBa.js +156 -0
- package/dist/worker/console/static/assets/ganttDiagram-PKOTCBZU-Jr82N_QP.js +292 -0
- package/dist/worker/console/static/assets/gitGraphDiagram-DS77QQ5N-DAz9wFLr.js +106 -0
- package/dist/worker/console/static/assets/graph-DOmOIIwC.js +1 -0
- package/dist/worker/console/static/assets/index-B7Y-0g3J.css +1 -0
- package/dist/worker/console/static/assets/index-DkCrqaYg.js +325 -0
- package/dist/worker/console/static/assets/infoDiagram-6WML65LV-CBB5Np7y.js +2 -0
- package/dist/worker/console/static/assets/init-Gi6I4Gst.js +1 -0
- package/dist/worker/console/static/assets/ishikawaDiagram-WSZJBQD7-D8IOp94y.js +70 -0
- package/dist/worker/console/static/assets/journeyDiagram-NVQOT4AX-Dgd3AHGG.js +139 -0
- package/dist/worker/console/static/assets/kanban-definition-27J2QSJJ-BmYOxLE9.js +89 -0
- package/dist/worker/console/static/assets/layout-D-LzfAck.js +1 -0
- package/dist/worker/console/static/assets/linear-DfYTEF6J.js +1 -0
- package/dist/worker/console/static/assets/map-DxJ2ADlA.js +1 -0
- package/dist/worker/console/static/assets/mermaid.core-BjuFPRqa.js +308 -0
- package/dist/worker/console/static/assets/mindmap-definition-FAOFIHXS-CLyUViGd.js +96 -0
- package/dist/worker/console/static/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/worker/console/static/assets/pegDiagram-VL7TDLO6-BvX2Di4-.js +1 -0
- package/dist/worker/console/static/assets/pieDiagram-7S7Q4E2Y-BFj0_OLv.js +39 -0
- package/dist/worker/console/static/assets/quadrantDiagram-CIZ2JOQS-BIUrD_hx.js +7 -0
- package/dist/worker/console/static/assets/railroadDiagram-AXF67PYL-CHBB48fj.js +1 -0
- package/dist/worker/console/static/assets/requirementDiagram-LRYGKXZP-sJrYw2Sf.js +84 -0
- package/dist/worker/console/static/assets/sankeyDiagram-W5VNT64P-BzHH6fPR.js +40 -0
- package/dist/worker/console/static/assets/sequenceDiagram-SI44F4Z6-7QCnelCt.js +162 -0
- package/dist/worker/console/static/assets/sizeCapture-X5ZJPWSS-sDYSxn72.js +1 -0
- package/dist/worker/console/static/assets/stateDiagram-OKZ733FA-XpiUdwzm.js +1 -0
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-eEhq2A8Y.js +1 -0
- package/dist/worker/console/static/assets/swimlanes-SLNWSIFB-DvqgNPzD.js +2 -0
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-la8AC7fo.js +8 -0
- package/dist/worker/console/static/assets/timeline-definition-Z64GVDOM-2TyOYNx0.js +120 -0
- package/dist/worker/console/static/assets/vennDiagram-T6HMQDX7-B-nM6wM2.js +34 -0
- package/dist/worker/console/static/assets/wardleyDiagram-T6FBY63Y-B86wPdbr.js +78 -0
- package/dist/worker/console/static/assets/xychartDiagram-ELKLHX3M-Dr1C4AQz.js +7 -0
- package/dist/worker/console/static/favicon.svg +37 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/worker/console/static/index.html +15 -0
- package/dist/worker/console/static-src/app/console-types.js +184 -0
- package/dist/worker/console/static-src/app/useConsoleShell.js +101 -0
- package/dist/worker/console/static-src/app/useOperatorActions.js +324 -0
- package/dist/worker/console/static-src/app/usePrdImport.js +172 -0
- package/dist/worker/console/static-src/app/useRecoveryActions.js +289 -0
- package/dist/worker/console/static-src/app/useRecoveryConsole.js +425 -0
- package/dist/worker/console/static-src/app/useTaskWizard.js +296 -0
- package/dist/worker/console/static-src/chat-markdown-security.js +38 -0
- package/dist/worker/console/static-src/chat-view-types.js +2 -0
- package/dist/worker/console/static-src/night/night-types.js +24 -0
- package/dist/worker/console/static-src/night/useNightBoard.js +94 -0
- package/dist/worker/console/static-src/night/useNightWizard.js +171 -0
- package/dist/worker/console/static-src/night-prepare-result.js +118 -0
- package/dist/worker/console/static-src/operator-chat/activity-journey.js +125 -0
- package/dist/worker/console/static-src/operator-chat/activity-rail-presentation.js +73 -0
- package/dist/worker/console/static-src/operator-chat/activity-references.js +20 -0
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +420 -0
- package/dist/worker/console/static-src/operator-chat/format.js +71 -0
- package/dist/worker/console/static-src/operator-chat/landing-density.js +23 -0
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +45 -0
- package/dist/worker/console/static-src/operator-chat/refs.js +86 -0
- package/dist/worker/console/static-src/operator-chat/resource-auto-invocation.js +91 -0
- package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
- package/dist/worker/console/static-src/operator-chat/runtime-snapshot-store.js +257 -0
- package/dist/worker/console/static-src/operator-chat/session-title-watcher.js +128 -0
- package/dist/worker/console/static-src/operator-chat/sidebar-split.js +90 -0
- package/dist/worker/console/static-src/operator-chat/slash-palette-layout.js +24 -0
- package/dist/worker/console/static-src/operator-chat/slash-palette-nav.js +141 -0
- package/dist/worker/console/static-src/operator-chat/spatial-overlay.js +38 -0
- package/dist/worker/console/static-src/operator-chat/tools-catalog.js +77 -0
- package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +690 -0
- package/dist/worker/console/static-src/operator-chat/turn-submission.js +158 -0
- package/dist/worker/console/static-src/operator-chat/types.js +1 -0
- package/dist/worker/console/static-src/operator-chat/useActivityRailTransition.js +59 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +495 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +780 -0
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +280 -0
- package/dist/worker/console/static-src/operator-chat/useComposer.js +257 -0
- package/dist/worker/console/static-src/operator-chat/useInterview.js +108 -0
- package/dist/worker/console/static-src/operator-chat/useOverlayFocus.js +84 -0
- package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +148 -0
- package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +358 -0
- package/dist/worker/console/static-src/operator-chat/useRuntimeSnapshot.js +196 -0
- package/dist/worker/console/static-src/operator-chat/useWorkspaceLayout.js +58 -0
- package/dist/worker/console/static-src/operator-chat/workspace-layout-mode.js +35 -0
- package/dist/worker/console/static-src/prd-file-import.js +218 -0
- package/dist/worker/console/vite.config.js +27 -0
- package/dist/worker/console/workflow-kinds.js +46 -0
- package/dist/worker/delivery/final-verification.js +302 -0
- package/dist/worker/delivery/git-transaction.js +497 -0
- package/dist/worker/delivery/package.js +537 -0
- package/dist/worker/delivery/verification-bundle.js +544 -0
- package/dist/worker/feature/acceptance-policy.js +227 -0
- package/dist/worker/feature/advance.js +301 -0
- package/dist/worker/feature/decision-loader.js +99 -0
- package/dist/worker/feature/discover.js +14 -0
- package/dist/worker/feature/doctor.js +223 -0
- package/dist/worker/feature/fullstack-validate.js +337 -0
- package/dist/worker/feature/next-action.js +140 -0
- package/dist/worker/feature/profile-schema.js +47 -0
- package/dist/worker/feature/ready-plan-projection.js +82 -0
- package/dist/worker/feature/reducer.js +137 -0
- package/dist/worker/feature/review.js +678 -0
- package/dist/worker/feature/run.js +390 -0
- package/dist/worker/feature/scaffold.js +812 -0
- package/dist/worker/feature/types.js +1 -0
- package/dist/worker/follow-up/approve.js +273 -0
- package/dist/worker/follow-up/factory.js +234 -0
- package/dist/worker/follow-up/paths.js +25 -0
- package/dist/worker/follow-up/policy.js +26 -0
- package/dist/worker/follow-up/schema.js +93 -0
- package/dist/worker/follow-up/store.js +96 -0
- package/dist/worker/loop-agent/command-result.js +1 -0
- package/dist/worker/loop-agent/controller-protocol.js +143 -0
- package/dist/worker/loop-agent/loop-agent-client.js +489 -0
- package/dist/worker/loop-agent/parse-json.js +14 -0
- package/dist/worker/materialize/harness-task-lifecycle-probe.js +126 -0
- package/dist/worker/materialize/harness-task-lineage.js +220 -0
- package/dist/worker/materialize/harness-task-materializer.js +648 -0
- package/dist/worker/metrics/projector.js +139 -0
- package/dist/worker/observability/dag-execution-trajectory.js +591 -0
- package/dist/worker/observability/event-history.js +216 -0
- package/dist/worker/observability/event-store.js +83 -0
- package/dist/worker/observability/events.js +79 -0
- package/dist/worker/observability/interrupt-eligibility.js +264 -0
- package/dist/worker/observability/progress-composite.js +34 -0
- package/dist/worker/observability/read-model.js +2499 -0
- package/dist/worker/observability/snapshot-store.js +43 -0
- package/dist/worker/observability/types.js +1 -0
- package/dist/worker/observe/dag-node-execution-output.js +180 -0
- package/dist/worker/observe/dag-run-artifacts.js +90 -0
- package/dist/worker/observe/health.js +58 -0
- package/dist/worker/observe/night-jobs.js +104 -0
- package/dist/worker/observe/node-input.js +441 -0
- package/dist/worker/observe/paths.js +174 -0
- package/dist/worker/observe/routes.js +1077 -0
- package/dist/worker/observe/server.js +117 -0
- package/dist/worker/observe/spec-evidence.js +398 -0
- package/dist/worker/observe/static/api.js +117 -0
- package/dist/worker/observe/static/app.js +169 -0
- package/dist/worker/observe/static/constants.js +182 -0
- package/dist/worker/observe/static/copy.js +67 -0
- package/dist/worker/observe/static/custom-select.js +567 -0
- package/dist/worker/observe/static/dag-edge-routing.js +368 -0
- package/dist/worker/observe/static/dag-helpers.js +161 -0
- package/dist/worker/observe/static/dag-history-labels.js +95 -0
- package/dist/worker/observe/static/dag-layout.d.ts +36 -0
- package/dist/worker/observe/static/dag-layout.js +163 -0
- package/dist/worker/observe/static/dag-model.js +145 -0
- package/dist/worker/observe/static/dom.js +220 -0
- package/dist/worker/observe/static/favicon.svg +37 -0
- package/dist/worker/observe/static/format-pool.d.ts +71 -0
- package/dist/worker/observe/static/format-pool.js +153 -0
- package/dist/worker/observe/static/format.js +347 -0
- package/dist/worker/observe/static/index.html +409 -0
- package/dist/worker/observe/static/kpi.js +78 -0
- package/dist/worker/observe/static/markdown-render.js +124 -0
- package/dist/worker/observe/static/operator-chrome.css +517 -0
- package/dist/worker/observe/static/operator-chrome.d.ts +83 -0
- package/dist/worker/observe/static/operator-chrome.js +623 -0
- package/dist/worker/observe/static/relations.js +133 -0
- package/dist/worker/observe/static/router.js +156 -0
- package/dist/worker/observe/static/run-processing.js +148 -0
- package/dist/worker/observe/static/shell-chrome.js +65 -0
- package/dist/worker/observe/static/state.js +496 -0
- package/dist/worker/observe/static/styles.css +3567 -0
- package/dist/worker/observe/static/views/batch.js +227 -0
- package/dist/worker/observe/static/views/dag-graph.js +508 -0
- package/dist/worker/observe/static/views/dag-inspector.js +1722 -0
- package/dist/worker/observe/static/views/dag-trajectory.js +313 -0
- package/dist/worker/observe/static/views/dag.js +483 -0
- package/dist/worker/observe/static/views/dags.js +877 -0
- package/dist/worker/observe/static/views/dashboard.js +747 -0
- package/dist/worker/observe/static/views/failures.js +143 -0
- package/dist/worker/observe/static/views/feature.js +492 -0
- package/dist/worker/observe/static/views/night.js +201 -0
- package/dist/worker/observe/static/views/pool.js +708 -0
- package/dist/worker/observe/static/views/run.js +453 -0
- package/dist/worker/observe/static/views/session-timeline.js +771 -0
- package/dist/worker/observe/static/views/shell.js +7 -0
- package/dist/worker/observe/static/views/task.js +315 -0
- package/dist/worker/observe/static/views/timeline.js +163 -0
- package/dist/worker/outcomes/adapters.js +153 -0
- package/dist/worker/outcomes/declared-artifacts.js +103 -0
- package/dist/worker/outcomes/evidence-tokens.js +29 -0
- package/dist/worker/outcomes/gate.js +40 -0
- package/dist/worker/outcomes/projector.js +227 -0
- package/dist/worker/outcomes/registry.js +1 -0
- package/dist/worker/outcomes/store.js +131 -0
- package/dist/worker/outcomes/types.js +79 -0
- package/dist/worker/pool/attempt-identity.js +41 -0
- package/dist/worker/pool/attempt-lease.js +184 -0
- package/dist/worker/pool/attempt-transition.js +210 -0
- package/dist/worker/pool/begin-attempt-with-lease.js +26 -0
- package/dist/worker/pool/begin-attempt.js +35 -0
- package/dist/worker/pool/doctor.js +165 -0
- package/dist/worker/pool/failure-routing.js +182 -0
- package/dist/worker/pool/migrate-state.js +303 -0
- package/dist/worker/pool/reconcile.js +285 -0
- package/dist/worker/pool/recovery-decision.js +163 -0
- package/dist/worker/pool/run-owner-store.js +126 -0
- package/dist/worker/pool/run-store.js +360 -0
- package/dist/worker/pool/runtime-reconcile-inventory.js +127 -0
- package/dist/worker/pool/state-projection.js +57 -0
- package/dist/worker/pool/types.js +17 -0
- package/dist/worker/pool/validation.js +144 -0
- package/dist/worker/preflight.js +157 -0
- package/dist/worker/profile-mapping.js +76 -0
- package/dist/worker/progress-reporter.js +63 -0
- package/dist/worker/report/morning-report.js +155 -0
- package/dist/worker/repos/repo-resolver.js +23 -0
- package/dist/worker/run-task/execute-prepared-task.js +178 -0
- package/dist/worker/run-task/run-task.js +912 -0
- package/dist/worker/runner/run-ready.js +561 -0
- package/dist/worker/runner/single-task-attempt.js +176 -0
- package/dist/worker/scheduler/admission.js +547 -0
- package/dist/worker/scheduler/auto-followup.js +99 -0
- package/dist/worker/scheduler/cli.js +644 -0
- package/dist/worker/scheduler/clock-install/darwin-launchd.js +238 -0
- package/dist/worker/scheduler/clock-install/linux-systemd-user.js +224 -0
- package/dist/worker/scheduler/clock-install/types.js +1 -0
- package/dist/worker/scheduler/clock-install/win32-schtasks.js +227 -0
- package/dist/worker/scheduler/clock-install.js +284 -0
- package/dist/worker/scheduler/clock.js +420 -0
- package/dist/worker/scheduler/dispatcher.js +503 -0
- package/dist/worker/scheduler/doctor.js +431 -0
- package/dist/worker/scheduler/evidence.js +170 -0
- package/dist/worker/scheduler/git-base.js +90 -0
- package/dist/worker/scheduler/index.js +25 -0
- package/dist/worker/scheduler/lease.js +114 -0
- package/dist/worker/scheduler/lifecycle.js +348 -0
- package/dist/worker/scheduler/lock.js +80 -0
- package/dist/worker/scheduler/morning-window.js +191 -0
- package/dist/worker/scheduler/night-git-finalizer.js +114 -0
- package/dist/worker/scheduler/night-harvest.js +412 -0
- package/dist/worker/scheduler/paths.js +92 -0
- package/dist/worker/scheduler/prepared-attempt-recovery.js +471 -0
- package/dist/worker/scheduler/recovery.js +277 -0
- package/dist/worker/scheduler/reservation.js +146 -0
- package/dist/worker/scheduler/retry.js +199 -0
- package/dist/worker/scheduler/scheduler-loop.js +272 -0
- package/dist/worker/scheduler/store.js +275 -0
- package/dist/worker/scheduler/traceability.js +54 -0
- package/dist/worker/scheduler/trigger.js +258 -0
- package/dist/worker/scheduler/types.js +369 -0
- package/dist/worker/scheduler/workspace-adapter.js +128 -0
- package/dist/worker/task-graph/acceptance-schema.js +40 -0
- package/dist/worker/task-graph/ready-planner.js +267 -0
- package/dist/worker/task-graph/ready-queue.js +23 -0
- package/dist/worker/task-graph/task-graph-schema.js +59 -0
- package/dist/worker/task-graph/types.js +1 -0
- package/dist/worker/task-graph/validate.js +293 -0
- package/dist/worker/task-spec/complexity-mapping.js +8 -0
- package/dist/worker/task-spec/schema.js +125 -0
- package/dist/worker/task-spec/types.js +1 -0
- package/dist/worker/task-spec/validate.js +391 -0
- package/dist/worker/task-spec/workflow-routing.js +149 -0
- package/dist/workflows/dag/authoring.js +8 -0
- package/dist/workflows/dag/authority-surface.js +138 -0
- package/dist/workflows/dag/backend-test-analysis-contract.js +507 -0
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +1985 -0
- package/dist/workflows/dag/backend-test-case-manifest.js +638 -0
- package/dist/workflows/dag/backend-test-classification-contract.js +38 -0
- package/dist/workflows/dag/backend-test-contract-envelope.js +205 -0
- package/dist/workflows/dag/backend-test-coverage-contract.js +202 -0
- package/dist/workflows/dag/backend-test-execution-contract.js +715 -0
- package/dist/workflows/dag/backend-test-gap-fill.js +205 -0
- package/dist/workflows/dag/backend-test-intake-context.js +178 -0
- package/dist/workflows/dag/backend-test-layout.js +133 -0
- package/dist/workflows/dag/backend-test-markdown-workflow.js +1984 -0
- package/dist/workflows/dag/backend-test-module-stem.js +26 -0
- package/dist/workflows/dag/backend-test-pytest-collection.js +859 -0
- package/dist/workflows/dag/backend-test-result-contract.js +1030 -0
- package/dist/workflows/dag/backend-test-scenario-param.js +1670 -0
- package/dist/workflows/dag/backend-test-scenario-partitions.js +249 -0
- package/dist/workflows/dag/backend-test-semantic-review-contract.js +36 -0
- package/dist/workflows/dag/backend-test-stability-contract.js +57 -0
- package/dist/workflows/dag/backend-test-writer-completeness.js +1058 -0
- package/dist/workflows/dag/budget-enforcement.js +67 -0
- package/dist/workflows/dag/canvas-observer.js +474 -0
- package/dist/workflows/dag/context-policy.js +137 -0
- package/dist/workflows/dag/contract-output-registry.js +14 -0
- package/dist/workflows/dag/contract-validator-registrations.js +10 -0
- package/dist/workflows/dag/controller-identity.js +104 -0
- package/dist/workflows/dag/convergence/controller.js +596 -0
- package/dist/workflows/dag/decision-envelope.js +557 -0
- package/dist/workflows/dag/decision-evidence.js +153 -0
- package/dist/workflows/dag/decision-gates.js +1 -0
- package/dist/workflows/dag/dynamic-runtime/condition.js +48 -0
- package/dist/workflows/dag/dynamic-runtime/loop-until.js +161 -0
- package/dist/workflows/dag/dynamic-runtime/map.js +435 -0
- package/dist/workflows/dag/dynamic-runtime/reduction.js +72 -0
- package/dist/workflows/dag/dynamic-runtime/shared.js +203 -0
- package/dist/workflows/dag/event-observer.js +132 -0
- package/dist/workflows/dag/executor-registry.js +23 -0
- package/dist/workflows/dag/facts.js +4 -0
- package/dist/workflows/dag/failure-category.js +118 -0
- package/dist/workflows/dag/failure-routing.js +105 -0
- package/dist/workflows/dag/final-verification.js +180 -0
- package/dist/workflows/dag/frontend-implementation-contract.js +1911 -0
- package/dist/workflows/dag/frontend-lint-baseline.js +474 -0
- package/dist/workflows/dag/frontend-plan-render.js +90 -0
- package/dist/workflows/dag/frontend-prewrite-gate.js +1011 -0
- package/dist/workflows/dag/frontend-project-capability.js +1 -0
- package/dist/workflows/dag/frontend-recovery-plan.js +73 -0
- package/dist/workflows/dag/frontend-recovery-root-manifest.js +123 -0
- package/dist/workflows/dag/frontend-recovery-run.js +539 -0
- package/dist/workflows/dag/frontend-repair.js +541 -0
- package/dist/workflows/dag/frontend-review-context.js +116 -0
- package/dist/workflows/dag/frontend-risk.js +161 -0
- package/dist/workflows/dag/frontend-test-case-checklist.js +343 -0
- package/dist/workflows/dag/frontend-test-case-manifest.js +104 -0
- package/dist/workflows/dag/frontend-test-case-quality.js +105 -0
- package/dist/workflows/dag/frontend-test-html-report.js +174 -0
- package/dist/workflows/dag/frontend-test-l5-report.js +177 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +487 -0
- package/dist/workflows/dag/frontend-verification-trace.js +275 -0
- package/dist/workflows/dag/frontend-worktree-diff.js +201 -0
- package/dist/workflows/dag/frontend-writer-recovery.js +106 -0
- package/dist/workflows/dag/frontend-writer-rollback.js +821 -0
- package/dist/workflows/dag/governance-constants.js +5 -0
- package/dist/workflows/dag/governance-profile.js +413 -0
- package/dist/workflows/dag/index.js +6 -0
- package/dist/workflows/dag/init-hybrid.js +7345 -0
- package/dist/workflows/dag/interrupt-request.js +559 -0
- package/dist/workflows/dag/knowledge-curator.js +165 -0
- package/dist/workflows/dag/l5-report-metrics.js +33 -0
- package/dist/workflows/dag/lifecycle.js +855 -0
- package/dist/workflows/dag/liveness-policy.js +251 -0
- package/dist/workflows/dag/node-execution.js +1081 -0
- package/dist/workflows/dag/observer-compose.js +52 -0
- package/dist/workflows/dag/output-protocol.js +356 -0
- package/dist/workflows/dag/project-governance-context.js +514 -0
- package/dist/workflows/dag/prompt-source.js +88 -0
- package/dist/workflows/dag/prompt.js +348 -0
- package/dist/workflows/dag/reconcile-run.js +145 -0
- package/dist/workflows/dag/reconcile-tasks.js +404 -0
- package/dist/workflows/dag/recovery-recommendation.js +329 -0
- package/dist/workflows/dag/repair-artifact.js +363 -0
- package/dist/workflows/dag/report.js +1229 -0
- package/dist/workflows/dag/rerun-plan.js +614 -0
- package/dist/workflows/dag/rerun-run.js +556 -0
- package/dist/workflows/dag/rerun-task.js +370 -0
- package/dist/workflows/dag/retry-policy.js +263 -0
- package/dist/workflows/dag/run-store.js +41 -0
- package/dist/workflows/dag/runner.js +1069 -0
- package/dist/workflows/dag/runtime-contract.js +87 -0
- package/dist/workflows/dag/runtime.js +5 -0
- package/dist/workflows/dag/scheduler.js +497 -0
- package/dist/workflows/dag/sdd-embedded.js +128 -0
- package/dist/workflows/dag/skill-instructions.js +478 -0
- package/dist/workflows/dag/skill-snapshot.js +553 -0
- package/dist/workflows/dag/skills.js +41 -0
- package/dist/workflows/dag/spec.js +3 -0
- package/dist/workflows/dag/task-contract-binding.js +138 -0
- package/dist/workflows/dag/task-demand-routing.js +1 -0
- package/dist/workflows/dag/topo.js +30 -0
- package/dist/workflows/dag/types.js +1145 -0
- package/dist/workflows/dag/upstream-artifacts.js +98 -0
- package/dist/workflows/dag/validate.js +998 -0
- package/dist/workflows/dag/workspace-checkpoint.js +186 -0
- package/dist/workflows/dynamic/artifacts.js +65 -0
- package/dist/workflows/dynamic/compile.js +371 -0
- package/dist/workflows/dynamic/compileTypes.js +1 -0
- package/dist/workflows/dynamic/errors.js +5 -0
- package/dist/workflows/dynamic/index.js +7 -0
- package/dist/workflows/dynamic/profiles.js +156 -0
- package/dist/workflows/dynamic/spec.js +115 -0
- package/dist/workflows/dynamic/validate.js +275 -0
- package/dist/workflows/loop/actions/dag-action.js +129 -0
- package/dist/workflows/loop/actions/pi-review.js +267 -0
- package/dist/workflows/loop/actions/shared.js +157 -0
- package/dist/workflows/loop/actions/shell-verify.js +82 -0
- package/dist/workflows/loop/actions/types.js +1 -0
- package/dist/workflows/loop/actions/workflow-action.js +255 -0
- package/dist/workflows/loop/actions.js +160 -0
- package/dist/workflows/loop/benchmark.js +510 -0
- package/dist/workflows/loop/closeout.js +135 -0
- package/dist/workflows/loop/context.js +47 -0
- package/dist/workflows/loop/events.js +26 -0
- package/dist/workflows/loop/hash.js +32 -0
- package/dist/workflows/loop/index.js +8 -0
- package/dist/workflows/loop/paths.js +17 -0
- package/dist/workflows/loop/policy/auto-policy.js +112 -0
- package/dist/workflows/loop/policy/path-patterns.js +13 -0
- package/dist/workflows/loop/rounds.js +81 -0
- package/dist/workflows/loop/signals.js +52 -0
- package/dist/workflows/loop/state.js +116 -0
- package/dist/workflows/loop/templates.js +54 -0
- package/dist/workflows/loop/types.js +28 -0
- package/docs/README.md +82 -0
- package/docs/architecture/README.md +35 -0
- package/docs/architecture/dag-execution.md +165 -0
- package/docs/architecture/evolution.md +108 -0
- package/docs/architecture/facts-and-state.md +74 -0
- package/docs/architecture/runtime-boundaries.md +226 -0
- package/docs/architecture/system-overview.md +100 -0
- package/docs/architecture/worker-and-feature.md +122 -0
- package/docs/governance/README.md +18 -0
- package/docs/governance/harness-methodology-debugging.md +177 -0
- package/docs/governance/harness-methodology-tdd.md +130 -0
- package/docs/governance/harness-methodology-verification.md +27 -0
- package/docs/init-surface.manifest.json +358 -0
- package/docs/operations/README.md +15 -0
- package/docs/operations/local-development-environment.md +77 -0
- package/docs/skills/README.md +7 -0
- package/docs/skills/vetted-skill-registry.md +49 -0
- package/docs/templates/README.md +67 -0
- package/docs/templates/adr.md +60 -0
- package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -0
- package/docs/templates/agent-dag-decision-envelope.schema.json +213 -0
- package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -0
- package/docs/templates/agent-dag-decision-gate.prompt.md +246 -0
- package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -0
- package/docs/templates/agent-dag-report.schema.json +473 -0
- package/docs/templates/agent-dag-review-verdict.prompt.md +68 -0
- package/docs/templates/agent-dag.base.json +190 -0
- package/docs/templates/agent-dag.final-verification.json +185 -0
- package/docs/templates/agent-dag.schema.json +590 -0
- package/docs/templates/agent-dag.supervised-implementation.json +640 -0
- package/docs/templates/agent-worker-production-readiness-checklist.md +47 -0
- package/docs/templates/backend-test-analysis.schema.json +37 -0
- package/docs/templates/backend-test-case-manifest.schema.json +223 -0
- package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
- package/docs/templates/backend-test-dag.generate-pytest.prompt.md +41 -0
- package/docs/templates/backend-test-dag.json +671 -0
- package/docs/templates/backend-test-dag.retrospect.prompt.md +165 -0
- package/docs/templates/backend-test-dag.review-cases.prompt.md +36 -0
- package/docs/templates/backend-test-execution.schema.json +138 -0
- package/docs/templates/backend-test-result.schema.json +99 -0
- package/docs/templates/branch-merge-report.md +115 -0
- package/docs/templates/evaluation/agents-map-slim-v1.candidate.json +9 -0
- package/docs/templates/evaluation/agents-map-slim-v1.md +87 -0
- package/docs/templates/evaluation/agents-map-verbose-v0.candidate.json +9 -0
- package/docs/templates/evaluation/agents-map-verbose-v0.md +153 -0
- package/docs/templates/evaluation/campaign-budget-v1.json +12 -0
- package/docs/templates/evaluation/campaign-dogfood-v0.json +24 -0
- package/docs/templates/evaluation/campaign-evidence-v1.json +44 -0
- package/docs/templates/evaluation/context-policy-baseline-v1.json +17 -0
- package/docs/templates/evaluation/context-policy-role-specialized-v1.json +28 -0
- package/docs/templates/evaluation/corpus-dogfood-v0.manifest.json +118 -0
- package/docs/templates/evaluation/matrix-dag-dry-run-v1.json +21 -0
- package/docs/templates/evaluation/matrix-fixture-v1.json +10 -0
- package/docs/templates/evaluation/private-verifier-dogfood-v0.json +16 -0
- package/docs/templates/exec-plan.md +66 -0
- package/docs/templates/feature-spec.md +53 -0
- package/docs/templates/frontend-design-contract.md +68 -0
- package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
- package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
- package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
- package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
- package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
- package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
- package/docs/templates/frontend-eval/metrics.md +138 -0
- package/docs/templates/frontend-eval/smoke-targets.md +53 -0
- package/docs/templates/frontend-implementation-contract.schema.json +35 -0
- package/docs/templates/frontend-task-constraints.md +62 -0
- package/docs/templates/frontend-task-requirement.md +104 -0
- package/docs/templates/frontend-test-case-checklist.md +44 -0
- package/docs/templates/frontend-test-case.example.md +143 -0
- package/docs/templates/frontend-test-dag.generate-cases.prompt.md +63 -0
- package/docs/templates/frontend-test-dag.json +409 -0
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +21 -0
- package/docs/templates/frontend-test-dag.retrospect.prompt.md +5 -0
- package/docs/templates/frontend-test-dag.review-cases.prompt.md +5 -0
- package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -0
- package/docs/templates/frontend-test-standard-scenarios.v1.json +159 -0
- package/docs/templates/harness.schema.json +351 -0
- package/docs/templates/hybrid-dag.json +188 -0
- package/docs/templates/init-evolution-review.md +35 -0
- package/docs/templates/init-managed-agents.md +157 -0
- package/docs/templates/interactive-ui-round2-experiment.md +66 -0
- package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -0
- package/docs/templates/knowledge-sync-dag.json +178 -0
- package/docs/templates/knowledge-sync-draft.schema.json +71 -0
- package/docs/templates/product-line/AGENTS.md +9 -0
- package/docs/templates/product-line/README.md +42 -0
- package/docs/templates/product-line/acceptance.yaml +23 -0
- package/docs/templates/product-line/closeout.yaml +9 -0
- package/docs/templates/product-line/design.md +13 -0
- package/docs/templates/product-line/feature-scaffold-batch.example.yaml +31 -0
- package/docs/templates/product-line/feature.yaml +11 -0
- package/docs/templates/product-line/links.md +10 -0
- package/docs/templates/product-line/requirement.md +17 -0
- package/docs/templates/product-line/scaffold-samples/README.md +36 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/acceptance.yaml +16 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/design.md +14 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/feature.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/requirement.md +6 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/tasks/BE-IMPL-001.yaml +83 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/tasks/task-graph.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/acceptance.yaml +18 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/design.md +18 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/feature.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/requirement.md +6 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/BE-IMPL-001.yaml +84 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/CONTRACT-001.yaml +84 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/FE-IMPL-001.yaml +86 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/task-graph.yaml +40 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/acceptance.yaml +16 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/design.md +14 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/feature.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/requirement.md +6 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/tasks/FE-IMPL-001.yaml +85 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/tasks/task-graph.yaml +14 -0
- package/docs/templates/product-line/task-graph.yaml +23 -0
- package/docs/templates/product-line/task.yaml +68 -0
- package/docs/templates/product-line/test-plan.md +7 -0
- package/docs/templates/production-readiness-checklist.md +57 -0
- package/docs/templates/progress-log.md +27 -0
- package/docs/templates/project-start-checklist.md +9 -0
- package/docs/templates/qa-report.md +48 -0
- package/docs/templates/sprint-contract.md +29 -0
- package/docs/templates/worker-dogfood-evidence.md +80 -0
- package/docs/templates/worker-dogfood-setup.md +68 -0
- package/examples/decision-gate-agent-dag.json +177 -0
- package/examples/example-dag.json +46 -0
- package/examples/hybrid-loop-agent-dag.json +189 -0
- package/examples/l5-report-coms-process-definition.html +322 -0
- package/examples/l5-report-demo.html +79 -0
- package/harness.json +90 -0
- package/package.json +98 -0
- package/scripts/kb-bootstrap-init-skeleton.sh +241 -0
- package/scripts/kb-graph-incremental-prepare.mjs +386 -0
- package/scripts/kb-graph-materialize.mjs +105 -0
- package/scripts/kb-graph-promote.mjs +164 -0
- package/scripts/kb-query.mjs +554 -0
- package/skills/agent-worker/SKILL.md +48 -0
- package/skills/agent-worker/references/agent-worker-operator.md +159 -0
- package/skills/ai-engineering-context/SKILL.md +48 -0
- package/skills/analyze-product-dependencies/SKILL.md +108 -0
- package/skills/analyze-product-dependencies/references/api-documentation-schema.md +35 -0
- package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +38 -0
- package/skills/analyze-product-dependencies/references/example.md +76 -0
- package/skills/analyze-product-dependencies/references/forward-test-cases.md +110 -0
- package/skills/analyze-product-dependencies/references/input-contract.md +34 -0
- package/skills/analyze-product-dependencies/references/kb-integration.md +64 -0
- package/skills/analyze-product-dependencies/references/scouting-rules.md +76 -0
- package/skills/analyze-product-dependencies/scripts/test-validators.mjs +460 -0
- package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +194 -0
- package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +200 -0
- package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +90 -0
- package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +138 -0
- package/skills/analyze-product-requirements/SKILL.md +145 -0
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +87 -0
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +70 -0
- package/skills/analyze-product-requirements/references/example.md +104 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +144 -0
- package/skills/analyze-product-requirements/references/kb-integration.md +56 -0
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +41 -0
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +42 -0
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +66 -0
- package/skills/analyze-product-requirements/scripts/compute-source-identity.mjs +35 -0
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +501 -0
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +100 -0
- package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +109 -0
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +109 -0
- package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +175 -0
- package/skills/browser-tools/SKILL.md +196 -0
- package/skills/browser-tools/browser-content.js +103 -0
- package/skills/browser-tools/browser-cookies.js +35 -0
- package/skills/browser-tools/browser-eval.js +53 -0
- package/skills/browser-tools/browser-hn-scraper.js +108 -0
- package/skills/browser-tools/browser-nav.js +44 -0
- package/skills/browser-tools/browser-pick.js +162 -0
- package/skills/browser-tools/browser-screenshot.js +34 -0
- package/skills/browser-tools/browser-start.js +86 -0
- package/skills/browser-tools/package-lock.json +2556 -0
- package/skills/browser-tools/package.json +19 -0
- package/skills/code-review-core/SKILL.md +20 -0
- package/skills/codebase-scout/SKILL.md +19 -0
- package/skills/frontend-bounded-implement/SKILL.md +53 -0
- package/skills/frontend-design-review/SKILL.md +79 -0
- package/skills/frontend-design-review/references/review-checklist.md +43 -0
- package/skills/frontend-implementation/SKILL.md +52 -0
- package/skills/frontend-implementation/references/code-standards.md +33 -0
- package/skills/frontend-implementation/references/design-spec.md +56 -0
- package/skills/frontend-implementation/references/node-contracts.md +31 -0
- package/skills/frontend-review/SKILL.md +55 -0
- package/skills/frontend-review/references/review-findings.md +50 -0
- package/skills/frontend-verification/SKILL.md +61 -0
- package/skills/frontend-verification/references/verification-checklist.md +48 -0
- package/skills/grill-me/SKILL.md +10 -0
- package/skills/grill-with-docs/SKILL.md +80 -0
- package/skills/grill-with-docs/adr-format.md +58 -0
- package/skills/grill-with-docs/context-format.md +52 -0
- package/skills/init-capability-evolution/SKILL.md +70 -0
- package/skills/local-jacoco-coverage/SKILL.md +281 -0
- package/skills/local-jacoco-coverage/references/requirement-to-source-mapping.md +85 -0
- package/skills/local-jacoco-coverage/references/runtime-alignment.md +106 -0
- package/skills/local-jacoco-coverage/scripts/run-coverage-analysis.sh +148 -0
- package/skills/local-jacoco-coverage/scripts/start-jacoco-agent.sh +110 -0
- package/skills/loop-agent/SKILL.md +68 -0
- package/skills/loop-agent/references/README.md +67 -0
- package/skills/loop-agent/references/command-reference.md +645 -0
- package/skills/loop-agent/references/docs-converge.md +126 -0
- package/skills/loop-agent/references/harness-policy.md +289 -0
- package/skills/loop-agent/references/hybrid-dag.md +245 -0
- package/skills/loop-agent/references/learned/README.md +21 -0
- package/skills/loop-agent/references/long-running-loop.md +57 -0
- package/skills/loop-agent/references/model-routing.md +45 -0
- package/skills/loop-agent/references/multi-worktree.md +54 -0
- package/skills/loop-agent/references/one-shot-runs.md +84 -0
- package/skills/loop-agent/references/orchestrator-and-interventions.md +175 -0
- package/skills/loop-agent/references/pi-prompt.md +23 -0
- package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -0
- package/skills/loop-agent/references/post-implementation-and-patterns.md +54 -0
- package/skills/loop-agent/references/source-and-plan-practice.md +169 -0
- package/skills/loop-agent/references/task-workflow.md +104 -0
- package/skills/loop-agent/references/verification-and-failure-handling.md +148 -0
- package/skills/playwright-cli/SKILL.md +93 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright-cli/references/tracing.md +5 -0
- package/skills/playwright-cli/references/video-recording.md +5 -0
- package/skills/playwright-cli-case-generator/SKILL.md +108 -0
- package/skills/requesting-code-review/SKILL.md +101 -0
- package/skills/requesting-code-review/code-reviewer.md +168 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +312 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/SKILL.md +27 -0
- package/skills/using-git-worktrees/SKILL.md +215 -0
- package/skills/verification-before-completion/SKILL.md +154 -0
- package/skills/webapp-testing/SKILL.md +19 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import { access, readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { generateTaskDagUseCase } from "../../application/dag/generate-task-dag.js";
|
|
4
|
+
import { writeJsonAtomic } from "../../infrastructure/harness/atomic-write.js";
|
|
5
|
+
import { DAG_RUNS_DIR, isTerminalDagRunStatus, locateDagRun, readDagRunSpec, readDagRunState, } from "./lifecycle.js";
|
|
6
|
+
import { parseDagSpec } from "./types.js";
|
|
7
|
+
export const RERUN_TASK_LINEAGE_REL_PATH = ".runtime/rerun-task-lineage.json";
|
|
8
|
+
export function parseDagRerunTaskArgs(args) {
|
|
9
|
+
if (args.length === 0) {
|
|
10
|
+
throw new Error("usage: dag rerun-task --run-id <id> --reason <text> --request-id <key> [--profile auto|minimal|standard|reviewed|supervised] [--task-id <id>] [--json]");
|
|
11
|
+
}
|
|
12
|
+
let parentRunId;
|
|
13
|
+
let reason;
|
|
14
|
+
let requestId;
|
|
15
|
+
let profile = "auto";
|
|
16
|
+
let profileExplicit = false;
|
|
17
|
+
let taskIdOverride;
|
|
18
|
+
let execute = true;
|
|
19
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
20
|
+
const arg = args[index];
|
|
21
|
+
if (arg === "--run-id")
|
|
22
|
+
parentRunId = args[++index];
|
|
23
|
+
else if (arg.startsWith("--run-id="))
|
|
24
|
+
parentRunId = arg.slice("--run-id=".length);
|
|
25
|
+
else if (arg === "--reason")
|
|
26
|
+
reason = args[++index];
|
|
27
|
+
else if (arg.startsWith("--reason="))
|
|
28
|
+
reason = arg.slice("--reason=".length);
|
|
29
|
+
else if (arg === "--request-id")
|
|
30
|
+
requestId = args[++index];
|
|
31
|
+
else if (arg.startsWith("--request-id="))
|
|
32
|
+
requestId = arg.slice("--request-id=".length);
|
|
33
|
+
else if (arg === "--profile") {
|
|
34
|
+
profile = parseDagRerunTaskProfile(args[++index]);
|
|
35
|
+
profileExplicit = true;
|
|
36
|
+
}
|
|
37
|
+
else if (arg.startsWith("--profile=")) {
|
|
38
|
+
profile = parseDagRerunTaskProfile(arg.slice("--profile=".length));
|
|
39
|
+
profileExplicit = true;
|
|
40
|
+
}
|
|
41
|
+
else if (arg === "--task-id")
|
|
42
|
+
taskIdOverride = args[++index];
|
|
43
|
+
else if (arg.startsWith("--task-id="))
|
|
44
|
+
taskIdOverride = arg.slice("--task-id=".length);
|
|
45
|
+
else if (arg === "--json")
|
|
46
|
+
continue;
|
|
47
|
+
else if (arg === "--no-execute")
|
|
48
|
+
execute = false;
|
|
49
|
+
else if (arg.startsWith("-"))
|
|
50
|
+
throw new Error(`unknown dag rerun-task flag: ${arg}`);
|
|
51
|
+
else
|
|
52
|
+
throw new Error(`unexpected positional argument: ${arg}`);
|
|
53
|
+
}
|
|
54
|
+
if (!parentRunId) {
|
|
55
|
+
throw new Error("dag rerun-task requires --run-id <id>");
|
|
56
|
+
}
|
|
57
|
+
if (!reason?.trim()) {
|
|
58
|
+
throw new Error("dag rerun-task requires --reason <text>");
|
|
59
|
+
}
|
|
60
|
+
if (!requestId?.trim()) {
|
|
61
|
+
throw new Error("dag rerun-task requires --request-id <key>");
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
parentRunId,
|
|
65
|
+
reason: reason.trim(),
|
|
66
|
+
requestId: requestId.trim(),
|
|
67
|
+
profile,
|
|
68
|
+
profileExplicit,
|
|
69
|
+
...(taskIdOverride?.trim() ? { taskIdOverride: taskIdOverride.trim() } : {}),
|
|
70
|
+
execute,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function parseDagRerunTaskProfile(value) {
|
|
74
|
+
if (value === "auto" ||
|
|
75
|
+
value === "minimal" ||
|
|
76
|
+
value === "standard" ||
|
|
77
|
+
value === "reviewed" ||
|
|
78
|
+
value === "supervised") {
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
throw new Error(`dag rerun-task --profile must be one of: auto, minimal, standard, reviewed, supervised; got ${value ?? ""}`);
|
|
82
|
+
}
|
|
83
|
+
function assessStandaloneTaskRerunEligibility(input) {
|
|
84
|
+
if (input.lifecycle === "paused") {
|
|
85
|
+
return {
|
|
86
|
+
eligible: false,
|
|
87
|
+
blockedReason: "parent-run-paused-use-resume",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (input.lifecycle === "active" &&
|
|
91
|
+
!isTerminalDagRunStatus(input.state.status)) {
|
|
92
|
+
return {
|
|
93
|
+
eligible: false,
|
|
94
|
+
blockedReason: "parent-run-still-active",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (!isTerminalDagRunStatus(input.state.status)) {
|
|
98
|
+
return {
|
|
99
|
+
eligible: false,
|
|
100
|
+
blockedReason: "parent-run-not-terminal",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (input.state.status === "superseded" || input.state.status === "abandoned") {
|
|
104
|
+
return {
|
|
105
|
+
eligible: false,
|
|
106
|
+
blockedReason: `parent-run-${input.state.status}`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (input.state.status === "finished") {
|
|
110
|
+
return {
|
|
111
|
+
eligible: true,
|
|
112
|
+
note: "parent-run-succeeded-full-rerun-still-allowed",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return { eligible: true };
|
|
116
|
+
}
|
|
117
|
+
function resolveTaskIdForRerun(spec, taskIdOverride) {
|
|
118
|
+
if (taskIdOverride?.trim()) {
|
|
119
|
+
return { taskId: taskIdOverride.trim() };
|
|
120
|
+
}
|
|
121
|
+
const fromContract = spec.taskContractBinding?.taskId;
|
|
122
|
+
const fromSource = spec.sourceBinding?.taskId;
|
|
123
|
+
if (fromContract && fromSource && fromContract !== fromSource) {
|
|
124
|
+
return { blockedReason: "ambiguous-task-identity" };
|
|
125
|
+
}
|
|
126
|
+
const taskId = fromContract ?? fromSource;
|
|
127
|
+
if (!taskId) {
|
|
128
|
+
return {
|
|
129
|
+
blockedReason: "missing-task-identity-requires-task-id-override",
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return { taskId };
|
|
133
|
+
}
|
|
134
|
+
function operatorRequestPath(cwd, requestId) {
|
|
135
|
+
return path.join(cwd, DAG_RUNS_DIR, ".operator-requests", `${requestId}.json`);
|
|
136
|
+
}
|
|
137
|
+
async function fileExists(filePath) {
|
|
138
|
+
try {
|
|
139
|
+
await access(filePath);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export const GENERATED_OUTPUT_CONFLICT_REASON = "generated-output-conflict";
|
|
147
|
+
/**
|
|
148
|
+
* Determine whether a regenerated DAG would overwrite existing/dirty generated
|
|
149
|
+
* outputs that overlap a requireChangedFiles writer's declared write set.
|
|
150
|
+
*
|
|
151
|
+
* Only concrete writeSet entries are checked: glob-only entries (containing
|
|
152
|
+
* `*`) are skipped, consistent with the bounded-writer constraint that a
|
|
153
|
+
* requireChangedFiles writer declare concrete paths. This is a deterministic,
|
|
154
|
+
* path-bounded preflight — it never deletes files and never inspects `.harness/**`
|
|
155
|
+
* internals. Returns the list of conflicting concrete paths (relative to cwd).
|
|
156
|
+
*/
|
|
157
|
+
export async function assessGeneratedOutputConflict(spec, cwd) {
|
|
158
|
+
const conflictPaths = [];
|
|
159
|
+
const seen = new Set();
|
|
160
|
+
for (const task of spec.tasks) {
|
|
161
|
+
const isRequireChangedFilesWriter = task.executor === "pi" &&
|
|
162
|
+
task.toolProfile === "write" &&
|
|
163
|
+
task.writerOutcomePolicy?.type === "implementation-outcome-v1" &&
|
|
164
|
+
task.writerOutcomePolicy?.requireChangedFiles === true;
|
|
165
|
+
if (!isRequireChangedFilesWriter)
|
|
166
|
+
continue;
|
|
167
|
+
const writeSet = task.writeSet ?? [];
|
|
168
|
+
for (const entry of writeSet) {
|
|
169
|
+
const normalized = entry
|
|
170
|
+
.trim()
|
|
171
|
+
.replace(/\\/g, "/")
|
|
172
|
+
.replace(/^\.\//, "");
|
|
173
|
+
if (!normalized || normalized.includes("*"))
|
|
174
|
+
continue;
|
|
175
|
+
if (seen.has(normalized))
|
|
176
|
+
continue;
|
|
177
|
+
seen.add(normalized);
|
|
178
|
+
const absolute = path.join(cwd, normalized);
|
|
179
|
+
if (await fileExists(absolute)) {
|
|
180
|
+
conflictPaths.push(normalized);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return conflictPaths;
|
|
185
|
+
}
|
|
186
|
+
async function readExistingOperatorRequest(cwd, requestId) {
|
|
187
|
+
try {
|
|
188
|
+
const raw = JSON.parse(await readFile(operatorRequestPath(cwd, requestId), "utf-8"));
|
|
189
|
+
if (raw.result && typeof raw.result === "object") {
|
|
190
|
+
return { ...raw.result, idempotentReplay: true };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// not found or unreadable
|
|
195
|
+
}
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
async function persistOperatorRequest(cwd, result) {
|
|
199
|
+
await writeJsonAtomic(operatorRequestPath(cwd, result.requestId), {
|
|
200
|
+
schemaVersion: 1,
|
|
201
|
+
kind: "standalone-task-rerun-request",
|
|
202
|
+
parentRunId: result.parentRunId,
|
|
203
|
+
newRunId: result.newRunId,
|
|
204
|
+
taskId: result.taskId,
|
|
205
|
+
reason: result.reason,
|
|
206
|
+
requestId: result.requestId,
|
|
207
|
+
createdAt: new Date().toISOString(),
|
|
208
|
+
result,
|
|
209
|
+
}, { repoRoot: cwd });
|
|
210
|
+
}
|
|
211
|
+
async function writeRerunTaskLineage(cwd, newRunId, input) {
|
|
212
|
+
const located = await locateDagRun(cwd, newRunId);
|
|
213
|
+
if (!located)
|
|
214
|
+
return;
|
|
215
|
+
await writeJsonAtomic(path.join(located.runDir, RERUN_TASK_LINEAGE_REL_PATH), {
|
|
216
|
+
schemaVersion: 1,
|
|
217
|
+
kind: "standalone-task-rerun",
|
|
218
|
+
parentRunId: input.parentRunId,
|
|
219
|
+
reason: input.reason,
|
|
220
|
+
requestId: input.requestId,
|
|
221
|
+
createdAt: new Date().toISOString(),
|
|
222
|
+
}, { repoRoot: cwd, allowCompletedFactsWrite: true });
|
|
223
|
+
}
|
|
224
|
+
function blockedResult(input) {
|
|
225
|
+
return {
|
|
226
|
+
ok: false,
|
|
227
|
+
parentRunId: input.parentRunId,
|
|
228
|
+
reason: input.reason,
|
|
229
|
+
requestId: input.requestId,
|
|
230
|
+
mode: "blocked",
|
|
231
|
+
blockedReason: input.blockedReason,
|
|
232
|
+
...(input.note ? { note: input.note } : {}),
|
|
233
|
+
...(input.taskId ? { taskId: input.taskId } : {}),
|
|
234
|
+
...(input.conflictPaths ? { conflictPaths: input.conflictPaths } : {}),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function extractRunSummary(generateResult) {
|
|
238
|
+
if (generateResult.mode === "generate+basic-validate")
|
|
239
|
+
return undefined;
|
|
240
|
+
return generateResult.run;
|
|
241
|
+
}
|
|
242
|
+
function extractNewRunId(generateResult) {
|
|
243
|
+
const runSummary = extractRunSummary(generateResult);
|
|
244
|
+
return runSummary?.runId;
|
|
245
|
+
}
|
|
246
|
+
export async function rerunStandaloneTask(input) {
|
|
247
|
+
const existing = await readExistingOperatorRequest(input.cwd, input.requestId);
|
|
248
|
+
if (existing) {
|
|
249
|
+
return existing;
|
|
250
|
+
}
|
|
251
|
+
const located = await locateDagRun(input.cwd, input.parentRunId);
|
|
252
|
+
if (!located) {
|
|
253
|
+
throw new Error(`dag run not found: ${input.parentRunId}`);
|
|
254
|
+
}
|
|
255
|
+
const state = await readDagRunState(located.runDir);
|
|
256
|
+
const eligibility = assessStandaloneTaskRerunEligibility({
|
|
257
|
+
lifecycle: located.lifecycle,
|
|
258
|
+
state,
|
|
259
|
+
});
|
|
260
|
+
if (!eligibility.eligible) {
|
|
261
|
+
return blockedResult({
|
|
262
|
+
parentRunId: input.parentRunId,
|
|
263
|
+
reason: input.reason,
|
|
264
|
+
requestId: input.requestId,
|
|
265
|
+
blockedReason: eligibility.blockedReason,
|
|
266
|
+
note: eligibility.note,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
const spec = await readDagRunSpec(located.runDir);
|
|
270
|
+
const taskResolution = resolveTaskIdForRerun(spec, input.taskIdOverride);
|
|
271
|
+
if (!taskResolution.taskId) {
|
|
272
|
+
return blockedResult({
|
|
273
|
+
parentRunId: input.parentRunId,
|
|
274
|
+
reason: input.reason,
|
|
275
|
+
requestId: input.requestId,
|
|
276
|
+
blockedReason: taskResolution.blockedReason,
|
|
277
|
+
note: eligibility.note,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
const execute = input.execute ?? true;
|
|
281
|
+
// AC-001 generated-output-conflict preflight: when a real execution is
|
|
282
|
+
// requested, first generate the DAG draft (execute:false) so we can inspect
|
|
283
|
+
// the regenerated spec's requireChangedFiles writer write sets against
|
|
284
|
+
// existing/dirty generated outputs. This is deterministic and path-bounded:
|
|
285
|
+
// it never deletes files and never reads `.harness/**` internals. Only the
|
|
286
|
+
// two-phase path pays the double-generate cost; --no-execute and idempotent
|
|
287
|
+
// replays are unaffected.
|
|
288
|
+
if (execute) {
|
|
289
|
+
const preflight = await generateTaskDagUseCase({
|
|
290
|
+
repoRoot: input.cwd,
|
|
291
|
+
taskId: taskResolution.taskId,
|
|
292
|
+
cwd: input.cwd,
|
|
293
|
+
strictModels: true,
|
|
294
|
+
execute: false,
|
|
295
|
+
initOnly: false,
|
|
296
|
+
dryRun: false,
|
|
297
|
+
profile: input.profile ?? "auto",
|
|
298
|
+
profileExplicit: input.profileExplicit ?? false,
|
|
299
|
+
});
|
|
300
|
+
if (preflight.mode === "generate+basic-validate") {
|
|
301
|
+
let conflictPaths = [];
|
|
302
|
+
try {
|
|
303
|
+
const raw = await readFile(preflight.outputPath, "utf8");
|
|
304
|
+
const preflightSpec = parseDagSpec(JSON.parse(raw));
|
|
305
|
+
conflictPaths = await assessGeneratedOutputConflict(preflightSpec, input.cwd);
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
// If the draft cannot be parsed, fall through to the real execution
|
|
309
|
+
// path: execution's own validation will surface the structural defect.
|
|
310
|
+
conflictPaths = [];
|
|
311
|
+
}
|
|
312
|
+
if (conflictPaths.length > 0) {
|
|
313
|
+
return blockedResult({
|
|
314
|
+
parentRunId: input.parentRunId,
|
|
315
|
+
reason: input.reason,
|
|
316
|
+
requestId: input.requestId,
|
|
317
|
+
taskId: taskResolution.taskId,
|
|
318
|
+
blockedReason: GENERATED_OUTPUT_CONFLICT_REASON,
|
|
319
|
+
conflictPaths,
|
|
320
|
+
note: `generated-output-conflict: existing outputs overlap requireChangedFiles writer write sets at ${conflictPaths.join(", ")}; use a fresh worktree or precisely restore the listed paths before rerunning — rerun-task will not delete files automatically and will not accept arbitrary already-satisfied generation outcomes`,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const generateResult = await generateTaskDagUseCase({
|
|
326
|
+
repoRoot: input.cwd,
|
|
327
|
+
taskId: taskResolution.taskId,
|
|
328
|
+
cwd: input.cwd,
|
|
329
|
+
strictModels: true,
|
|
330
|
+
execute,
|
|
331
|
+
initOnly: false,
|
|
332
|
+
dryRun: false,
|
|
333
|
+
profile: input.profile ?? "auto",
|
|
334
|
+
profileExplicit: input.profileExplicit ?? false,
|
|
335
|
+
});
|
|
336
|
+
const newRunId = extractNewRunId(generateResult);
|
|
337
|
+
const runSummary = extractRunSummary(generateResult);
|
|
338
|
+
const completedSuccessfully = !execute ||
|
|
339
|
+
(runSummary !== undefined && "status" in runSummary && runSummary.status === "finished");
|
|
340
|
+
if (execute && newRunId) {
|
|
341
|
+
await writeRerunTaskLineage(input.cwd, newRunId, {
|
|
342
|
+
parentRunId: input.parentRunId,
|
|
343
|
+
reason: input.reason,
|
|
344
|
+
requestId: input.requestId,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
const result = {
|
|
348
|
+
ok: completedSuccessfully,
|
|
349
|
+
parentRunId: input.parentRunId,
|
|
350
|
+
reason: input.reason,
|
|
351
|
+
requestId: input.requestId,
|
|
352
|
+
mode: "generate+validate+execute",
|
|
353
|
+
taskId: taskResolution.taskId,
|
|
354
|
+
...(newRunId ? { newRunId } : {}),
|
|
355
|
+
...(runSummary && !completedSuccessfully && "status" in runSummary
|
|
356
|
+
? { note: `child-run-${runSummary.status}` }
|
|
357
|
+
: eligibility.note
|
|
358
|
+
? { note: eligibility.note }
|
|
359
|
+
: {}),
|
|
360
|
+
generateResult,
|
|
361
|
+
...(runSummary ? { runSummary } : {}),
|
|
362
|
+
};
|
|
363
|
+
if (await fileExists(operatorRequestPath(input.cwd, input.requestId))) {
|
|
364
|
+
const replay = await readExistingOperatorRequest(input.cwd, input.requestId);
|
|
365
|
+
if (replay)
|
|
366
|
+
return replay;
|
|
367
|
+
}
|
|
368
|
+
await persistOperatorRequest(input.cwd, result);
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Failure categories that are safe to auto-retry for read-only Pi nodes.
|
|
4
|
+
*
|
|
5
|
+
* These are failures with no repository write side-effects: model connection
|
|
6
|
+
* interruption, provider rate-limiting, temporary provider unavailability,
|
|
7
|
+
* request timeout, or a settled read-only turn with no assistant text.
|
|
8
|
+
*
|
|
9
|
+
* `quota` is intentionally NOT included: a quota exhaustion is an account
|
|
10
|
+
* billing/plan state, not a transient rate limit, and retrying immediately
|
|
11
|
+
* will not help and may waste budget.
|
|
12
|
+
*/
|
|
13
|
+
export const DEFAULT_DAG_RETRY_CATEGORIES = [
|
|
14
|
+
"timeout",
|
|
15
|
+
"network",
|
|
16
|
+
"rate-limit",
|
|
17
|
+
"unavailable",
|
|
18
|
+
"empty-output",
|
|
19
|
+
];
|
|
20
|
+
export const STRUCTURED_OUTPUT_RETRY_CATEGORY = "output-too-large";
|
|
21
|
+
export const PROTOCOL_INVALID_RETRY_CATEGORY = "protocol-invalid";
|
|
22
|
+
/** Recoverable model artifact/schema formatting failure on read-only structured nodes. */
|
|
23
|
+
export const STRUCTURED_ARTIFACT_INVALID_RETRY_CATEGORY = "invalid-output";
|
|
24
|
+
/** Provider stopReason=length truncated the response before the JSON contract completed. */
|
|
25
|
+
export const STRUCTURED_OUTPUT_TRUNCATED_RETRY_CATEGORY = "structured-output-truncated";
|
|
26
|
+
/** Retry only a proven no-op from an explicitly opt-in bounded Pi writer. */
|
|
27
|
+
export const WRITER_EMPTY_DIFF_RETRY_CATEGORY = "writer-empty-diff";
|
|
28
|
+
/** Retry when a backend-test writer finished but Completeness Gate found missing/broken targets. */
|
|
29
|
+
export const INCOMPLETE_WRITE_SET_RETRY_CATEGORY = "incomplete-write-set";
|
|
30
|
+
/**
|
|
31
|
+
* Provider/transport stall or absolute timeout on a Pi exclusive writer that
|
|
32
|
+
* left zero attributed workspace writes and zero write-tool calls. Safe to
|
|
33
|
+
* retry once because the attempt was a pure provider flake (no side effects).
|
|
34
|
+
* Partial writes keep the original `timeout` category and do NOT retry.
|
|
35
|
+
*/
|
|
36
|
+
export const WRITER_CLEAN_TIMEOUT_RETRY_CATEGORY = "writer-clean-timeout";
|
|
37
|
+
export const STRUCTURED_REQUIRED_DAG_RETRY_CATEGORIES = [
|
|
38
|
+
...DEFAULT_DAG_RETRY_CATEGORIES,
|
|
39
|
+
STRUCTURED_OUTPUT_RETRY_CATEGORY,
|
|
40
|
+
STRUCTURED_ARTIFACT_INVALID_RETRY_CATEGORY,
|
|
41
|
+
STRUCTURED_OUTPUT_TRUNCATED_RETRY_CATEGORY,
|
|
42
|
+
];
|
|
43
|
+
/** Categories allowed on nodes that declare a machine-readable outputProtocol. */
|
|
44
|
+
export const PROTOCOL_AWARE_DAG_RETRY_CATEGORIES = [
|
|
45
|
+
...DEFAULT_DAG_RETRY_CATEGORIES,
|
|
46
|
+
PROTOCOL_INVALID_RETRY_CATEGORY,
|
|
47
|
+
STRUCTURED_ARTIFACT_INVALID_RETRY_CATEGORY,
|
|
48
|
+
];
|
|
49
|
+
export const ALL_DAG_RETRY_CATEGORIES = [
|
|
50
|
+
...DEFAULT_DAG_RETRY_CATEGORIES,
|
|
51
|
+
STRUCTURED_OUTPUT_RETRY_CATEGORY,
|
|
52
|
+
PROTOCOL_INVALID_RETRY_CATEGORY,
|
|
53
|
+
STRUCTURED_ARTIFACT_INVALID_RETRY_CATEGORY,
|
|
54
|
+
STRUCTURED_OUTPUT_TRUNCATED_RETRY_CATEGORY,
|
|
55
|
+
WRITER_EMPTY_DIFF_RETRY_CATEGORY,
|
|
56
|
+
INCOMPLETE_WRITE_SET_RETRY_CATEGORY,
|
|
57
|
+
WRITER_CLEAN_TIMEOUT_RETRY_CATEGORY,
|
|
58
|
+
];
|
|
59
|
+
const RETRY_SAFE_PI_ROLES = new Set([
|
|
60
|
+
"planner",
|
|
61
|
+
"scout",
|
|
62
|
+
"reviewer",
|
|
63
|
+
"verifier",
|
|
64
|
+
"supervisor",
|
|
65
|
+
"closeout",
|
|
66
|
+
]);
|
|
67
|
+
export const dagRetryCategorySchema = z.enum(ALL_DAG_RETRY_CATEGORIES);
|
|
68
|
+
export const dagRetryBackoffSchema = z.enum(["exponential"]);
|
|
69
|
+
/**
|
|
70
|
+
* Opt-in retry policy for a DagTask. Generated for safe read-only Pi nodes,
|
|
71
|
+
* except the single validation-gated writer-empty-diff policy. Validation
|
|
72
|
+
* rejects all other writers, dynamic, shell, static, and decision-gate nodes.
|
|
73
|
+
*/
|
|
74
|
+
export const dagRetryPolicySchema = z
|
|
75
|
+
.object({
|
|
76
|
+
/**
|
|
77
|
+
* Total number of attempts (including the first try). Must be 1..5.
|
|
78
|
+
* A value of 1 disables retry (one attempt, no retry).
|
|
79
|
+
*/
|
|
80
|
+
maxAttempts: z.number().int().positive().max(5),
|
|
81
|
+
backoff: dagRetryBackoffSchema.default("exponential"),
|
|
82
|
+
/** Initial delay before the second attempt, in milliseconds. */
|
|
83
|
+
initialDelayMs: z.number().int().nonnegative().default(2000),
|
|
84
|
+
/** Upper bound on a single backoff delay, in milliseconds. */
|
|
85
|
+
maxDelayMs: z.number().int().nonnegative().default(30000),
|
|
86
|
+
/**
|
|
87
|
+
* Explicit set of failure categories eligible for retry. Defaults to
|
|
88
|
+
* {@link DEFAULT_DAG_RETRY_CATEGORIES}. `quota` and other categories
|
|
89
|
+
* are never retried.
|
|
90
|
+
*/
|
|
91
|
+
retryCategories: z
|
|
92
|
+
.array(dagRetryCategorySchema)
|
|
93
|
+
.default([...DEFAULT_DAG_RETRY_CATEGORIES]),
|
|
94
|
+
})
|
|
95
|
+
.superRefine((policy, ctx) => {
|
|
96
|
+
if (policy.maxDelayMs < policy.initialDelayMs) {
|
|
97
|
+
ctx.addIssue({
|
|
98
|
+
code: z.ZodIssueCode.custom,
|
|
99
|
+
message: "retryPolicy.maxDelayMs must be >= retryPolicy.initialDelayMs",
|
|
100
|
+
path: ["maxDelayMs"],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
/**
|
|
105
|
+
* The default retry policy applied to safe generated read-only Pi nodes.
|
|
106
|
+
* Total attempts: 3, exponential backoff with cap.
|
|
107
|
+
*/
|
|
108
|
+
export const DEFAULT_READ_ONLY_PI_RETRY_POLICY = {
|
|
109
|
+
maxAttempts: 3,
|
|
110
|
+
backoff: "exponential",
|
|
111
|
+
initialDelayMs: 2000,
|
|
112
|
+
maxDelayMs: 30000,
|
|
113
|
+
retryCategories: [...DEFAULT_DAG_RETRY_CATEGORIES],
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Structured planner nodes may retry with a compact-output instruction
|
|
117
|
+
* when the model produced an oversized assistant response. This category is
|
|
118
|
+
* not part of the default read-only retry set because report/review nodes
|
|
119
|
+
* should not silently learn new output semantics.
|
|
120
|
+
*/
|
|
121
|
+
export const STRUCTURED_REQUIRED_PI_RETRY_POLICY = {
|
|
122
|
+
...DEFAULT_READ_ONLY_PI_RETRY_POLICY,
|
|
123
|
+
retryCategories: [...STRUCTURED_REQUIRED_DAG_RETRY_CATEGORIES],
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Planner read-only nodes (standard DAG contract-pi / plan-pi) may retry with
|
|
127
|
+
* a compact-output instruction when the model produced an oversized assistant
|
|
128
|
+
* response. Only `output-too-large` is added on top of the default set;
|
|
129
|
+
* report/review and other read-only roles keep the default set so they do not
|
|
130
|
+
* silently learn new output semantics.
|
|
131
|
+
*/
|
|
132
|
+
export const PLANNER_OUTPUT_LIMIT_RETRY_POLICY = {
|
|
133
|
+
...DEFAULT_READ_ONLY_PI_RETRY_POLICY,
|
|
134
|
+
retryCategories: [...DEFAULT_DAG_RETRY_CATEGORIES, STRUCTURED_OUTPUT_RETRY_CATEGORY],
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Default retry for reviewer / recovery nodes that declare outputProtocol.
|
|
138
|
+
* Includes protocol-invalid so missing VERDICT lines are corrected in-node.
|
|
139
|
+
*/
|
|
140
|
+
export const PROTOCOL_AWARE_PI_RETRY_POLICY = {
|
|
141
|
+
...DEFAULT_READ_ONLY_PI_RETRY_POLICY,
|
|
142
|
+
retryCategories: [...PROTOCOL_AWARE_DAG_RETRY_CATEGORIES],
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* The sole writer retry policy for requireChangedFiles writers. It is
|
|
146
|
+
* intentionally not included in any read-only default: a writer may retry only
|
|
147
|
+
* after its executor proves an otherwise successful attempt changed no files.
|
|
148
|
+
*/
|
|
149
|
+
export const WRITER_EMPTY_DIFF_RETRY_POLICY = {
|
|
150
|
+
maxAttempts: 2,
|
|
151
|
+
backoff: "exponential",
|
|
152
|
+
initialDelayMs: 2000,
|
|
153
|
+
maxDelayMs: 30000,
|
|
154
|
+
retryCategories: [WRITER_EMPTY_DIFF_RETRY_CATEGORY],
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Bounded transport retry for standard exclusive implementers when a provider
|
|
158
|
+
* stall/timeout left no workspace writes. maxAttempts=2 (one retry). Never
|
|
159
|
+
* retries timeout with partial writes (those stay non-retryable `timeout`).
|
|
160
|
+
*/
|
|
161
|
+
export const WRITER_TRANSPORT_RETRY_POLICY = {
|
|
162
|
+
maxAttempts: 2,
|
|
163
|
+
backoff: "exponential",
|
|
164
|
+
initialDelayMs: 5000,
|
|
165
|
+
maxDelayMs: 30000,
|
|
166
|
+
retryCategories: [WRITER_CLEAN_TIMEOUT_RETRY_CATEGORY],
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Backend-test generation writers: empty-diff once, plus bounded incomplete-write-set
|
|
170
|
+
* recovery attempts driven by Completeness Gate (missing/broken target files).
|
|
171
|
+
*/
|
|
172
|
+
export const BACKEND_TEST_WRITER_COMPLETENESS_RETRY_POLICY = {
|
|
173
|
+
maxAttempts: 3,
|
|
174
|
+
backoff: "exponential",
|
|
175
|
+
initialDelayMs: 2000,
|
|
176
|
+
maxDelayMs: 30000,
|
|
177
|
+
retryCategories: [
|
|
178
|
+
WRITER_EMPTY_DIFF_RETRY_CATEGORY,
|
|
179
|
+
INCOMPLETE_WRITE_SET_RETRY_CATEGORY,
|
|
180
|
+
],
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Deterministic helper: is this raw failure category eligible for retry under
|
|
184
|
+
* the given policy? Pure function; executor never decides retry eligibility.
|
|
185
|
+
*/
|
|
186
|
+
export function isRetryablePiFailureCategory(rawFailureCategory, options = {}) {
|
|
187
|
+
if (!rawFailureCategory)
|
|
188
|
+
return false;
|
|
189
|
+
const categories = options.retryCategories ?? DEFAULT_DAG_RETRY_CATEGORIES;
|
|
190
|
+
return categories.includes(rawFailureCategory);
|
|
191
|
+
}
|
|
192
|
+
function isExclusivePiImplementer(task) {
|
|
193
|
+
return (task.executor === "pi" &&
|
|
194
|
+
task.role === "implementer" &&
|
|
195
|
+
task.toolProfile === "write" &&
|
|
196
|
+
task.writePolicy === "exclusive" &&
|
|
197
|
+
(task.writeSet?.length ?? 0) > 0 &&
|
|
198
|
+
!task.decisionGate?.enabled &&
|
|
199
|
+
!task.dynamicExpansion &&
|
|
200
|
+
!task.dynamicReduction &&
|
|
201
|
+
!task.dynamicCondition &&
|
|
202
|
+
!task.dynamicLoopUntil);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Static eligibility for the requireChangedFiles writer-empty-diff class.
|
|
206
|
+
* The Pi executor assigns writer-empty-diff only after post-write-guard
|
|
207
|
+
* attribution proves an empty changedFiles list.
|
|
208
|
+
*/
|
|
209
|
+
export function isWriterEmptyDiffRetryCandidate(task) {
|
|
210
|
+
return (isExclusivePiImplementer(task) &&
|
|
211
|
+
task.writerOutcomePolicy?.requireChangedFiles === true);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Standard exclusive implementers (implementation-outcome writers) may take a
|
|
215
|
+
* single clean-timeout transport retry. Backend completeness writers already
|
|
216
|
+
* have their own policy and are excluded here.
|
|
217
|
+
*/
|
|
218
|
+
export function isWriterTransportRetryCandidate(task) {
|
|
219
|
+
return (isExclusivePiImplementer(task) &&
|
|
220
|
+
task.writerOutcomePolicy?.type === "implementation-outcome-v1" &&
|
|
221
|
+
task.writerOutcomePolicy.requireChangedFiles !== true);
|
|
222
|
+
}
|
|
223
|
+
export function isSafeReadOnlyPiRetryCandidate(task) {
|
|
224
|
+
if (task.executor !== "pi")
|
|
225
|
+
return false;
|
|
226
|
+
if (!task.role || !RETRY_SAFE_PI_ROLES.has(task.role))
|
|
227
|
+
return false;
|
|
228
|
+
if (task.toolProfile === "write")
|
|
229
|
+
return false;
|
|
230
|
+
if (task.writePolicy !== undefined &&
|
|
231
|
+
task.writePolicy !== "read-only" &&
|
|
232
|
+
task.writePolicy !== "none") {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
if (task.decisionGate?.enabled)
|
|
236
|
+
return false;
|
|
237
|
+
if (task.dynamicExpansion ||
|
|
238
|
+
task.dynamicReduction ||
|
|
239
|
+
task.dynamicCondition ||
|
|
240
|
+
task.dynamicLoopUntil) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Compute the backoff delay (in ms) to wait before the given attempt number.
|
|
247
|
+
*
|
|
248
|
+
* attemptNumber is 1-based: the delay returned is the wait BEFORE that attempt
|
|
249
|
+
* runs (i.e. the wait between attempt N-1 and attempt N). attemptNumber <= 1
|
|
250
|
+
* returns 0 (no wait before the first try).
|
|
251
|
+
*
|
|
252
|
+
* Exponential: initialDelayMs * 2^(attemptNumber - 2), capped at maxDelayMs.
|
|
253
|
+
*/
|
|
254
|
+
export function computeBackoffDelayMs(attemptNumber, policy) {
|
|
255
|
+
if (attemptNumber <= 1)
|
|
256
|
+
return 0;
|
|
257
|
+
if (policy.backoff !== "exponential") {
|
|
258
|
+
return Math.min(policy.initialDelayMs, policy.maxDelayMs);
|
|
259
|
+
}
|
|
260
|
+
const exponent = attemptNumber - 2;
|
|
261
|
+
const raw = policy.initialDelayMs * 2 ** exponent;
|
|
262
|
+
return Math.min(raw, policy.maxDelayMs);
|
|
263
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { mkdir, rm } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { writeJsonAtomic } from "../../infrastructure/harness/atomic-write.js";
|
|
4
|
+
import { readDagRunSpec, readDagRunState, transferDagRunDir, writeDagRunState, } from "./lifecycle.js";
|
|
5
|
+
export async function readRunState(runDir) {
|
|
6
|
+
return readDagRunState(runDir);
|
|
7
|
+
}
|
|
8
|
+
export async function writeRunState(runDir, state, options) {
|
|
9
|
+
await writeDagRunState(runDir, state, options);
|
|
10
|
+
}
|
|
11
|
+
export async function readRunSpec(runDir) {
|
|
12
|
+
return readDagRunSpec(runDir);
|
|
13
|
+
}
|
|
14
|
+
/** Prepare any lifecycle run directory (active / dry-run / init-only / …). */
|
|
15
|
+
export async function prepareRunDir(runDir) {
|
|
16
|
+
await rm(runDir, { recursive: true, force: true });
|
|
17
|
+
await mkdir(runDir, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
/** @deprecated Prefer prepareRunDir; kept as thin alias for execute callers. */
|
|
20
|
+
export async function prepareActiveRunDir(runDir) {
|
|
21
|
+
await prepareRunDir(runDir);
|
|
22
|
+
}
|
|
23
|
+
export async function writeRunSpec(runDir, spec) {
|
|
24
|
+
await writeJsonAtomic(path.join(runDir, "run.json"), spec);
|
|
25
|
+
}
|
|
26
|
+
export async function writeNodeRecord(runDir, nodeId, record) {
|
|
27
|
+
await writeJsonAtomic(path.join(runDir, `${nodeId}.json`), record);
|
|
28
|
+
}
|
|
29
|
+
export async function writeNodeSkillArtifacts(runDir, nodeId, resolvedSkills) {
|
|
30
|
+
if (resolvedSkills.length === 0)
|
|
31
|
+
return;
|
|
32
|
+
const nodeDir = path.join(runDir, nodeId);
|
|
33
|
+
await mkdir(nodeDir, { recursive: true });
|
|
34
|
+
await writeJsonAtomic(path.join(nodeDir, "skills.json"), { resolvedSkills });
|
|
35
|
+
}
|
|
36
|
+
export async function moveToPausedRunDir(runDir, pausedRunDir) {
|
|
37
|
+
return transferDagRunDir(runDir, pausedRunDir);
|
|
38
|
+
}
|
|
39
|
+
export async function moveToCompletedRunDir(runDir, completedRunDir) {
|
|
40
|
+
return transferDagRunDir(runDir, completedRunDir);
|
|
41
|
+
}
|