@tea-agent/loop-agent 0.39.0-next.9 → 0.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/CHANGELOG.md +269 -69
- package/README.md +11 -5
- package/bin/loop-agent.js +7 -3
- package/dist/application/dag/generate-task-dag.js +9 -0
- package/dist/application/task-lifecycle/advance.js +16 -0
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +16 -5
- package/dist/cli/program.js +16 -2
- package/dist/cli/update/notifier.js +2 -2
- package/dist/cli/update/runtime-activity.js +1 -29
- package/dist/cli.js +2 -1
- package/dist/commands/dag-rerun.js +55 -1
- package/dist/commands/init-model-catalog.js +464 -0
- package/dist/commands/init-upgrade.js +265 -97
- package/dist/commands/init.js +428 -27
- package/dist/commands/inspect-next.js +8 -0
- package/dist/commands/task-advance.js +31 -0
- package/dist/executors/dag-pi-executor.js +124 -18
- package/dist/executors/pi-event-serializer.js +42 -1
- package/dist/executors/pi-executor.js +51 -0
- package/dist/executors/pi-extension-resolver.js +233 -0
- package/dist/executors/pi-playwright-cli-tool.js +74 -28
- package/dist/executors/pi-sdk-executor.js +187 -59
- package/dist/executors/shell-executor.js +555 -34
- package/dist/executors/shell-write-guard.js +7 -0
- package/dist/shared/dag-failure-category.js +138 -0
- package/dist/shared/dag-prompt-override.js +27 -0
- package/dist/shared/operator/capabilities.js +181 -27
- package/dist/shared/playwright-cli-command-policy.js +15 -0
- package/dist/shared/update/console-notifier.js +100 -0
- package/dist/{cli → shared}/update/npm-client.js +70 -15
- package/dist/{cli → shared}/update/state.js +41 -13
- package/dist/task/config-types.js +28 -0
- package/dist/task/contract/apply.js +11 -1
- package/dist/task/contract/constants.js +3 -0
- package/dist/task/contract/diff.js +26 -0
- package/dist/task/contract/hash.js +3 -0
- package/dist/task/contract/observe.js +25 -4
- package/dist/task/contract/paths.js +2 -1
- package/dist/task/contract/project.js +20 -1
- package/dist/task/contract/schema.js +8 -1
- package/dist/task/contract/transaction.js +12 -0
- package/dist/task/source-prepare/build-draft.js +15 -0
- package/dist/task/source-prepare/completeness.js +188 -0
- package/dist/task/source-prepare/fragment-inventory.js +474 -0
- package/dist/task/source-prepare/index.js +3 -0
- package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
- package/dist/task/source-prepare/ledger-review.js +214 -0
- package/dist/task/source-prepare/ledger.js +545 -0
- package/dist/task/source-prepare/parse-intent.js +24 -4
- package/dist/task/source-prepare/prepare.js +262 -1
- package/dist/task/source-prepare/semantic-intake.js +19 -3
- package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
- package/dist/task/source-prepare/types.js +22 -0
- package/dist/worker/cli.js +18 -2
- package/dist/worker/console/chat/deferred-turn.js +91 -0
- package/dist/worker/console/chat/mcp-inventory.js +221 -0
- package/dist/worker/console/chat/operation-card.js +8 -1
- package/dist/worker/console/chat/pi-console-config.js +81 -10
- package/dist/worker/console/chat/pi-runtime.js +165 -83
- package/dist/worker/console/chat/repo-walk.js +10 -1
- package/dist/worker/console/chat/routes.js +480 -55
- package/dist/worker/console/chat/semantic-activity.js +20 -8
- package/dist/worker/console/chat/session-store.js +146 -2
- package/dist/worker/console/chat/turn-process.js +10 -10
- package/dist/worker/console/console-handoff.js +82 -0
- package/dist/worker/console/console-update-and-init.js +115 -0
- package/dist/worker/console/console-update-runtime.js +84 -0
- package/dist/worker/console/dag-execution-receipt.js +33 -0
- package/dist/worker/console/draft-store.js +49 -0
- package/dist/worker/console/inspect-split.js +18 -0
- package/dist/worker/console/operation-run-facts.js +19 -3
- package/dist/worker/console/operation-store.js +1 -1
- package/dist/worker/console/operator-actions.js +320 -4
- package/dist/worker/console/operator-surface-health.js +1 -0
- package/dist/worker/console/operator-user-error.js +2 -2
- package/dist/worker/console/pi-readiness.js +5 -4
- package/dist/worker/console/prd-intake-bridge.js +13 -0
- package/dist/worker/console/recovery-cta.js +4 -4
- package/dist/worker/console/recovery-error-copy.js +4 -4
- package/dist/worker/console/routes.js +46 -2
- package/dist/worker/console/security.js +63 -9
- package/dist/worker/console/server.js +111 -7
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BLXFe4qI.js → abnfDiagram-N423BO3Z-CTx1TrNa.js} +1 -1
- package/dist/worker/console/static/assets/{arc-7iOJeqho.js → arc-B4i9cVxX.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CYoyj5K7.js → architectureDiagram-T3A2C74G-BAXE8_Rl.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-fK01JNlR.js → blockDiagram-VBNYF7ZC-C5Xh59at.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-bzbw5D_Z.js → c4Diagram-5PPSVZJV-B_asOzAu.js} +1 -1
- package/dist/worker/console/static/assets/channel-Dj_4Moei.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-Cf6hJFFG.js → chunk-2GRJ4B5K-wRO_iRNc.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DSFXR-et.js → chunk-2Q5K7J3B-ByOaSh_G.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BagJechl.js → chunk-5RXB4S5H-DjLzudan.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-E7QNMFaW.js → chunk-5VM5RSS4-JCNGkXYT.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BG_eOBrC.js → chunk-6Q2QTUOP-BhrPXXMZ.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bo42dqol.js → chunk-GF5L2VYU-TJ5JuEBT.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-dibM-87v.js → chunk-JWPE2WC7-VVthn_mD.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-Bytrp3Oe.js → chunk-KBJHAD2P-D60-Mny4.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DBABILrr.js → chunk-RYQCIY6F-zXv7aVye.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DCUk5Pf9.js → chunk-XXDRQBXY-By9VQoi1.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0YYAyCa.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0YYAyCa.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BlGE9v6E.js → cose-bilkent-JH36ORCC-C4zQLe-M.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DGl5ewph.js → cynefin-VYW2F7L2-wh5N2ReN.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-DsJ_SVH_.js → cynefinDiagram-MW4NZA55-Dlu5wIqs.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BIhjFdzv.js → dagre-VZM6K2ZE-CrDgthc6.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Dmy1ctTb.js → diagram-7IWD3JNH-zN1clg27.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-DYCtWUF3.js → diagram-B4RE2ZJO-BN-o7J7-.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BMZFHVd2.js → diagram-LBJQPF4R-C8SuPt0d.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-b_U8gfaO.js → diagram-Q27KOJAE-BoizuHbZ.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-Dzy_bn-I.js → diagram-UB23O5K3-BzUzXixG.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DJCiMNEI.js → ebnfDiagram-BXEA7PRR-Ev3lA4Cf.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-28lD016B.js → erDiagram-JOGREHBK-GALUzRbs.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DGyHJmIw.js → flowDiagram-UKHOOZJN-CZJN65Sb.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CzdwUjrO.js → ganttDiagram-PKOTCBZU-JLB9OESl.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-D9bGwuo8.js → gitGraphDiagram-DS77QQ5N-CcvCr4GD.js} +1 -1
- package/dist/worker/console/static/assets/index-CW88Fjbw.js +406 -0
- package/dist/worker/console/static/assets/index-DP0ZJl39.css +1 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-LJgJUQFC.js → infoDiagram-6WML65LV-HG5z7aVg.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-98LaB8zb.js → ishikawaDiagram-WSZJBQD7-BHEu9chR.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-D-ISzwlQ.js → journeyDiagram-NVQOT4AX-Cp_Up8-a.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-gfYOI-EL.js → kanban-definition-27J2QSJJ-DvVeY-em.js} +1 -1
- package/dist/worker/console/static/assets/{linear-CyntZgKV.js → linear-aGmcjgTn.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-BBOR7dg0.js → mermaid.core-Biyo-tqA.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CQAgwPMk.js → mindmap-definition-FAOFIHXS-DyxY2pIb.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DkMiZFuV.js → pegDiagram-VL7TDLO6-CkdGuc50.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DLNXa_0J.js → pieDiagram-7S7Q4E2Y-NNQI9xVR.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Dc7bdzjm.js → quadrantDiagram-CIZ2JOQS-PAJkuz_G.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BxMB0QqW.js → railroadDiagram-AXF67PYL-ZwrQod0O.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-FjumoKn4.js → requirementDiagram-LRYGKXZP-D3ZfrzM2.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-CkhKc_E3.js → sankeyDiagram-W5VNT64P-DDGFmWk5.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DoBWqTTH.js → sequenceDiagram-SI44F4Z6-DO6mmXTA.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CQeh_YeE.js → sizeCapture-X5ZJPWSS-DMbCQiJt.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-LuHmFW-I.js → stateDiagram-OKZ733FA-Di_YUEfC.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DrdDvela.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CHwbDctY.js → swimlanes-SLNWSIFB-Bn2PphNJ.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DPkEAULl.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CoMngk0X.js → timeline-definition-Z64GVDOM-DPh8pRsp.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-CURYbtbO.js → vennDiagram-T6HMQDX7-GMfl26pW.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BdqSECjU.js → wardleyDiagram-T6FBY63Y-DTlmVrmF.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-DbMUYuAg.js → xychartDiagram-ELKLHX3M-YGBjKAS5.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/app/console-types.js +40 -1
- package/dist/worker/console/static-src/app/useOperatorActions.js +6 -1
- package/dist/worker/console/static-src/app/useRecoveryActions.js +2 -2
- package/dist/worker/console/static-src/app/useRecoveryConsole.js +38 -2
- package/dist/worker/console/static-src/app/useRunProgress.js +46 -0
- package/dist/worker/console/static-src/app/useTaskWizard.js +73 -1
- package/dist/worker/console/static-src/operator-chat/cards/failure-category-advice.js +25 -0
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +74 -26
- package/dist/worker/console/static-src/operator-chat/input-history.js +76 -0
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
- package/dist/worker/console/static-src/operator-chat/open-preview-in-browser.js +328 -0
- package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
- package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +8 -1
- package/dist/worker/console/static-src/operator-chat/turn-submission.js +54 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +3 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +237 -11
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +50 -22
- package/dist/worker/console/static-src/operator-chat/useComposer.js +32 -0
- package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +26 -1
- package/dist/worker/console/static-src/pages/tasks/run-id-resolution.js +79 -0
- package/dist/worker/console/static-src/pages/tasks/run-ownership-verify.js +23 -0
- package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +110 -0
- package/dist/worker/loop-agent/loop-agent-client.js +7 -3
- package/dist/worker/materialize/harness-task-lineage.js +5 -2
- package/dist/worker/observability/init-runtime-activity.js +26 -0
- package/dist/worker/observability/read-model.js +22 -0
- package/dist/worker/observe/node-input.js +160 -3
- package/dist/worker/observe/node-process.js +377 -0
- package/dist/worker/observe/routes.js +224 -3
- package/dist/worker/observe/shell-handler-keys.js +34 -0
- package/dist/worker/observe/static/api.js +67 -1
- package/dist/worker/observe/static/constants.js +8 -1
- package/dist/worker/observe/static/dag-history-labels.js +4 -0
- package/dist/worker/observe/static/format.js +60 -0
- package/dist/worker/observe/static/index.html +5 -0
- package/dist/worker/observe/static/markdown-render.js +20 -1
- package/dist/worker/observe/static/operator-chrome.js +4 -0
- package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
- package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
- package/dist/worker/observe/static/state.js +13 -2
- package/dist/worker/observe/static/styles.css +85 -0
- package/dist/worker/observe/static/views/dag-inspector.js +912 -8
- package/dist/worker/observe/static/views/dag.js +8 -1
- package/dist/worker/observe/static/views/failures.js +5 -2
- package/dist/worker/observe/static/views/session-timeline.js +78 -9
- package/dist/worker/observe/static/views/task.js +55 -0
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +856 -54
- package/dist/workflows/dag/backend-test-case-manifest.js +4 -0
- package/dist/workflows/dag/backend-test-execution-contract.js +18 -9
- package/dist/workflows/dag/backend-test-gap-fill.js +205 -0
- package/dist/workflows/dag/backend-test-intake-context.js +32 -0
- package/dist/workflows/dag/backend-test-layout.js +133 -0
- package/dist/workflows/dag/backend-test-markdown-workflow.js +343 -33
- package/dist/workflows/dag/backend-test-module-stem.js +5 -0
- package/dist/workflows/dag/backend-test-pytest-collection.js +454 -36
- package/dist/workflows/dag/backend-test-result-contract.js +1 -1
- package/dist/workflows/dag/backend-test-scenario-param.js +884 -140
- package/dist/workflows/dag/backend-test-scenario-partitions.js +321 -0
- package/dist/workflows/dag/backend-test-writer-completeness.js +110 -61
- package/dist/workflows/dag/contract-output-registry.js +15 -0
- package/dist/workflows/dag/contract-validator-registrations.js +3 -1
- package/dist/workflows/dag/convergence/controller.js +141 -0
- package/dist/workflows/dag/dynamic-runtime/loop-until.js +1 -1
- package/dist/workflows/dag/dynamic-runtime/map.js +25 -9
- package/dist/workflows/dag/dynamic-runtime/shared.js +1 -1
- package/dist/workflows/dag/failure-category.js +7 -116
- package/dist/workflows/dag/frontend-implementation-contract.js +465 -6
- package/dist/workflows/dag/frontend-plan-render.js +24 -0
- package/dist/workflows/dag/frontend-prewrite-gate.js +293 -84
- package/dist/workflows/dag/frontend-repair.js +14 -0
- package/dist/workflows/dag/frontend-review-context.js +92 -10
- package/dist/workflows/dag/frontend-risk.js +15 -2
- package/dist/workflows/dag/frontend-test-case-checklist.js +30 -4
- package/dist/workflows/dag/frontend-test-case-manifest.js +11 -4
- package/dist/workflows/dag/frontend-test-case-quality.js +11 -16
- package/dist/workflows/dag/frontend-test-environment-probe.js +230 -0
- package/dist/workflows/dag/frontend-test-html-report.js +3 -1
- package/dist/workflows/dag/frontend-test-l5-report.js +3 -1
- package/dist/workflows/dag/frontend-test-layout.js +159 -0
- package/dist/workflows/dag/frontend-test-markdown.js +61 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +188 -42
- package/dist/workflows/dag/frontend-test-standard-scenarios.js +70 -0
- package/dist/workflows/dag/frontend-verification-trace.js +29 -4
- package/dist/workflows/dag/init-hybrid.js +1019 -209
- package/dist/workflows/dag/node-execution.js +228 -15
- package/dist/workflows/dag/prompt.js +60 -1
- package/dist/workflows/dag/rerun-feedback.js +212 -0
- package/dist/workflows/dag/rerun-plan.js +224 -27
- package/dist/workflows/dag/rerun-run.js +61 -6
- package/dist/workflows/dag/rerun-task.js +61 -2
- package/dist/workflows/dag/retry-policy.js +109 -0
- package/dist/workflows/dag/structured-output-repair.js +712 -0
- package/dist/workflows/dag/types.js +185 -12
- package/dist/workflows/dag/validate.js +64 -20
- package/docs/README.md +1 -0
- package/docs/architecture/evolution.md +45 -0
- package/docs/init-surface.manifest.json +6 -0
- package/docs/operations/README.md +1 -1
- package/docs/operations/local-development-environment.md +1 -5
- package/docs/skills/vetted-skill-registry.md +14 -0
- package/docs/templates/README.md +2 -2
- package/docs/templates/agent-dag.schema.json +44 -0
- package/docs/templates/backend-test-dag.json +60 -35
- package/docs/templates/frontend-implementation-contract.schema.json +681 -24
- package/docs/templates/frontend-test-case-checklist.md +2 -2
- package/docs/templates/frontend-test-dag.json +8 -10
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
- package/docs/templates/init-managed-agents.md +13 -3
- package/harness.json +6 -4
- package/package.json +12 -4
- package/scripts/next-info.mjs +356 -0
- package/scripts/next-publish-gate.mjs +238 -0
- package/scripts/release-source-binding.mjs +251 -0
- package/skills/analyze-product-requirements/SKILL.md +8 -5
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +1 -1
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +10 -6
- package/skills/analyze-product-requirements/references/example.md +50 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +11 -7
- package/skills/analyze-product-requirements/references/kb-integration.md +5 -5
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +8 -4
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +2 -2
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +1 -1
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +11 -1
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +20 -1
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +9 -0
- package/skills/codebase-scout/SKILL.md +1 -1
- package/skills/fe-test-ui-scout/SKILL.md +65 -0
- package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
- package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
- package/skills/frontend-implementation/references/node-contracts.md +2 -2
- package/skills/improve-codebase-architecture/SKILL.md +81 -0
- package/skills/improve-codebase-architecture/deepening.md +37 -0
- package/skills/improve-codebase-architecture/html-report.md +123 -0
- package/skills/improve-codebase-architecture/interface-design.md +44 -0
- package/skills/improve-codebase-architecture/language.md +53 -0
- package/skills/loop-agent/references/command-reference.md +11 -4
- package/skills/loop-agent/references/hybrid-dag.md +7 -0
- package/skills/playwright-cli/SKILL.md +23 -1
- package/skills/playwright-cli-case-generator/SKILL.md +29 -8
- package/dist/worker/console/static/assets/channel-BBOTJHvD.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Cm8Yf8tD.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Cm8Yf8tD.js +0 -1
- package/dist/worker/console/static/assets/index-B-qWGThd.js +0 -325
- package/dist/worker/console/static/assets/index-C-xRgY_0.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DZihfdKc.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CKnXCjHX.js +0 -8
|
@@ -3,7 +3,8 @@ import path from "node:path";
|
|
|
3
3
|
import { generateTaskDagUseCase } from "../../application/dag/generate-task-dag.js";
|
|
4
4
|
import { writeJsonAtomic } from "../../infrastructure/harness/atomic-write.js";
|
|
5
5
|
import { DAG_RUNS_DIR, isTerminalDagRunStatus, locateDagRun, readDagRunSpec, readDagRunState, } from "./lifecycle.js";
|
|
6
|
-
import {
|
|
6
|
+
import { deriveDagRerunFeedback } from "./rerun-feedback.js";
|
|
7
|
+
import { parseDagSpec, } from "./types.js";
|
|
7
8
|
export const RERUN_TASK_LINEAGE_REL_PATH = ".runtime/rerun-task-lineage.json";
|
|
8
9
|
export function parseDagRerunTaskArgs(args) {
|
|
9
10
|
if (args.length === 0) {
|
|
@@ -218,6 +219,7 @@ async function writeRerunTaskLineage(cwd, newRunId, input) {
|
|
|
218
219
|
parentRunId: input.parentRunId,
|
|
219
220
|
reason: input.reason,
|
|
220
221
|
requestId: input.requestId,
|
|
222
|
+
feedback: input.feedback,
|
|
221
223
|
createdAt: new Date().toISOString(),
|
|
222
224
|
}, { repoRoot: cwd, allowCompletedFactsWrite: true });
|
|
223
225
|
}
|
|
@@ -228,12 +230,30 @@ function blockedResult(input) {
|
|
|
228
230
|
reason: input.reason,
|
|
229
231
|
requestId: input.requestId,
|
|
230
232
|
mode: "blocked",
|
|
233
|
+
feedback: input.feedback ?? {
|
|
234
|
+
inherited: false,
|
|
235
|
+
reason: "no-unresolved-verify-review-feedback",
|
|
236
|
+
},
|
|
231
237
|
blockedReason: input.blockedReason,
|
|
232
238
|
...(input.note ? { note: input.note } : {}),
|
|
233
239
|
...(input.taskId ? { taskId: input.taskId } : {}),
|
|
234
240
|
...(input.conflictPaths ? { conflictPaths: input.conflictPaths } : {}),
|
|
235
241
|
};
|
|
236
242
|
}
|
|
243
|
+
async function readGeneratedRerunFeedback(outputPath) {
|
|
244
|
+
const raw = JSON.parse(await readFile(outputPath, "utf8"));
|
|
245
|
+
return parseDagSpec(raw).rerunFeedback;
|
|
246
|
+
}
|
|
247
|
+
function summarizeFeedback(feedback, fallbackReason) {
|
|
248
|
+
return feedback
|
|
249
|
+
? {
|
|
250
|
+
inherited: true,
|
|
251
|
+
sourceNodeId: feedback.sourceNodeId,
|
|
252
|
+
digest: feedback.digest,
|
|
253
|
+
bindingStatus: feedback.binding.status,
|
|
254
|
+
}
|
|
255
|
+
: { inherited: false, reason: fallbackReason };
|
|
256
|
+
}
|
|
237
257
|
function extractRunSummary(generateResult) {
|
|
238
258
|
if (generateResult.mode === "generate+basic-validate")
|
|
239
259
|
return undefined;
|
|
@@ -277,7 +297,26 @@ export async function rerunStandaloneTask(input) {
|
|
|
277
297
|
note: eligibility.note,
|
|
278
298
|
});
|
|
279
299
|
}
|
|
300
|
+
let parentFeedback;
|
|
301
|
+
let missingFeedbackReason = "no-unresolved-verify-review-feedback";
|
|
302
|
+
try {
|
|
303
|
+
parentFeedback = await deriveDagRerunFeedback({
|
|
304
|
+
parentRunId: input.parentRunId,
|
|
305
|
+
taskId: taskResolution.taskId,
|
|
306
|
+
runDir: located.runDir,
|
|
307
|
+
spec,
|
|
308
|
+
state,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
// Feedback is additive recovery context. A corrupt/missing historical
|
|
313
|
+
// artifact must be reported honestly but must not block an otherwise
|
|
314
|
+
// eligible full rerun.
|
|
315
|
+
missingFeedbackReason = "feedback-unavailable";
|
|
316
|
+
}
|
|
280
317
|
const execute = input.execute ?? true;
|
|
318
|
+
let effectiveFeedback;
|
|
319
|
+
let expectedRerunFeedbackDigest;
|
|
281
320
|
// AC-001 generated-output-conflict preflight: when a real execution is
|
|
282
321
|
// requested, first generate the DAG draft (execute:false) so we can inspect
|
|
283
322
|
// the regenerated spec's requireChangedFiles writer write sets against
|
|
@@ -296,15 +335,23 @@ export async function rerunStandaloneTask(input) {
|
|
|
296
335
|
dryRun: false,
|
|
297
336
|
profile: input.profile ?? "auto",
|
|
298
337
|
profileExplicit: input.profileExplicit ?? false,
|
|
338
|
+
rerunFeedback: parentFeedback,
|
|
299
339
|
});
|
|
300
340
|
if (preflight.mode === "generate+basic-validate") {
|
|
301
341
|
let conflictPaths = [];
|
|
302
342
|
try {
|
|
303
343
|
const raw = await readFile(preflight.outputPath, "utf8");
|
|
304
344
|
const preflightSpec = parseDagSpec(JSON.parse(raw));
|
|
345
|
+
effectiveFeedback = preflightSpec.rerunFeedback;
|
|
346
|
+
expectedRerunFeedbackDigest = effectiveFeedback?.digest;
|
|
347
|
+
if (parentFeedback && !effectiveFeedback) {
|
|
348
|
+
throw new Error("rerun feedback missing from generated preflight DAG");
|
|
349
|
+
}
|
|
305
350
|
conflictPaths = await assessGeneratedOutputConflict(preflightSpec, input.cwd);
|
|
306
351
|
}
|
|
307
|
-
catch {
|
|
352
|
+
catch (error) {
|
|
353
|
+
if (parentFeedback)
|
|
354
|
+
throw error;
|
|
308
355
|
// If the draft cannot be parsed, fall through to the real execution
|
|
309
356
|
// path: execution's own validation will surface the structural defect.
|
|
310
357
|
conflictPaths = [];
|
|
@@ -332,7 +379,17 @@ export async function rerunStandaloneTask(input) {
|
|
|
332
379
|
dryRun: false,
|
|
333
380
|
profile: input.profile ?? "auto",
|
|
334
381
|
profileExplicit: input.profileExplicit ?? false,
|
|
382
|
+
rerunFeedback: parentFeedback,
|
|
383
|
+
expectedRerunFeedbackDigest,
|
|
335
384
|
});
|
|
385
|
+
if (parentFeedback && !effectiveFeedback) {
|
|
386
|
+
effectiveFeedback = await readGeneratedRerunFeedback(generateResult.outputPath);
|
|
387
|
+
}
|
|
388
|
+
if (expectedRerunFeedbackDigest &&
|
|
389
|
+
effectiveFeedback?.digest !== expectedRerunFeedbackDigest) {
|
|
390
|
+
throw new Error(`rerun feedback drift after generation: expected ${expectedRerunFeedbackDigest}, got ${effectiveFeedback?.digest ?? "missing"}`);
|
|
391
|
+
}
|
|
392
|
+
const feedbackSummary = summarizeFeedback(effectiveFeedback, missingFeedbackReason);
|
|
336
393
|
const newRunId = extractNewRunId(generateResult);
|
|
337
394
|
const runSummary = extractRunSummary(generateResult);
|
|
338
395
|
const completedSuccessfully = !execute ||
|
|
@@ -342,6 +399,7 @@ export async function rerunStandaloneTask(input) {
|
|
|
342
399
|
parentRunId: input.parentRunId,
|
|
343
400
|
reason: input.reason,
|
|
344
401
|
requestId: input.requestId,
|
|
402
|
+
feedback: feedbackSummary,
|
|
345
403
|
});
|
|
346
404
|
}
|
|
347
405
|
const result = {
|
|
@@ -350,6 +408,7 @@ export async function rerunStandaloneTask(input) {
|
|
|
350
408
|
reason: input.reason,
|
|
351
409
|
requestId: input.requestId,
|
|
352
410
|
mode: "generate+validate+execute",
|
|
411
|
+
feedback: feedbackSummary,
|
|
353
412
|
taskId: taskResolution.taskId,
|
|
354
413
|
...(newRunId ? { newRunId } : {}),
|
|
355
414
|
...(runSummary && !completedSuccessfully && "status" in runSummary
|
|
@@ -165,6 +165,36 @@ export const WRITER_TRANSPORT_RETRY_POLICY = {
|
|
|
165
165
|
maxDelayMs: 30000,
|
|
166
166
|
retryCategories: [WRITER_CLEAN_TIMEOUT_RETRY_CATEGORY],
|
|
167
167
|
};
|
|
168
|
+
/**
|
|
169
|
+
* Implicit runtime retry for canonical final verify shells. Not a DagRetryPolicy:
|
|
170
|
+
* `spawn-error` / `test-timeout` are runtime command categories and must not enter
|
|
171
|
+
* `dagRetryPolicySchema` / `ALL_DAG_RETRY_CATEGORIES`.
|
|
172
|
+
*/
|
|
173
|
+
export const VERIFY_SHELL_RETRY_CATEGORIES = [
|
|
174
|
+
"timeout",
|
|
175
|
+
"spawn-error",
|
|
176
|
+
"test-timeout",
|
|
177
|
+
];
|
|
178
|
+
export const VERIFY_SHELL_RETRY_POLICY = {
|
|
179
|
+
maxAttempts: 2,
|
|
180
|
+
backoff: "exponential",
|
|
181
|
+
initialDelayMs: 2000,
|
|
182
|
+
maxDelayMs: 30000,
|
|
183
|
+
retryCategories: VERIFY_SHELL_RETRY_CATEGORIES,
|
|
184
|
+
};
|
|
185
|
+
export const TARGET_TEMPLATE_TRANSIENT_RETRY_PROFILE = "standard-reviewed-supervised-v1";
|
|
186
|
+
/**
|
|
187
|
+
* Target-template exclusive implement-pi transport retry. Same schema category
|
|
188
|
+
* as frontend (`writer-clean-timeout`) so DagSpec validation stays unchanged;
|
|
189
|
+
* only the delay cap is wider. Do not mutate {@link WRITER_TRANSPORT_RETRY_POLICY}.
|
|
190
|
+
*/
|
|
191
|
+
export const TARGET_TEMPLATE_WRITER_TRANSPORT_RETRY_POLICY = {
|
|
192
|
+
maxAttempts: 2,
|
|
193
|
+
backoff: "exponential",
|
|
194
|
+
initialDelayMs: 5000,
|
|
195
|
+
maxDelayMs: 60000,
|
|
196
|
+
retryCategories: [WRITER_CLEAN_TIMEOUT_RETRY_CATEGORY],
|
|
197
|
+
};
|
|
168
198
|
/**
|
|
169
199
|
* Backend-test generation writers: empty-diff once, plus bounded incomplete-write-set
|
|
170
200
|
* recovery attempts driven by Completeness Gate (missing/broken target files).
|
|
@@ -201,6 +231,24 @@ function isExclusivePiImplementer(task) {
|
|
|
201
231
|
!task.dynamicCondition &&
|
|
202
232
|
!task.dynamicLoopUntil);
|
|
203
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Provider/transport failure categories that can crash a writer executor
|
|
236
|
+
* after some workspace writes already landed on disk. A continuation may
|
|
237
|
+
* restart that writer itself; it must never import or normalize the ERROR fact.
|
|
238
|
+
*/
|
|
239
|
+
export const WRITER_TRANSPORT_FAILURE_CATEGORIES = new Set([
|
|
240
|
+
"unavailable",
|
|
241
|
+
"network",
|
|
242
|
+
"rate-limit",
|
|
243
|
+
"timeout",
|
|
244
|
+
]);
|
|
245
|
+
export function isTransportCrashedExclusiveWriter(task, failureCategory) {
|
|
246
|
+
if (!task)
|
|
247
|
+
return false;
|
|
248
|
+
return (isExclusivePiImplementer(task) &&
|
|
249
|
+
failureCategory !== undefined &&
|
|
250
|
+
WRITER_TRANSPORT_FAILURE_CATEGORIES.has(failureCategory));
|
|
251
|
+
}
|
|
204
252
|
/**
|
|
205
253
|
* Static eligibility for the requireChangedFiles writer-empty-diff class.
|
|
206
254
|
* The Pi executor assigns writer-empty-diff only after post-write-guard
|
|
@@ -220,6 +268,67 @@ export function isWriterTransportRetryCandidate(task) {
|
|
|
220
268
|
task.writerOutcomePolicy?.type === "implementation-outcome-v1" &&
|
|
221
269
|
task.writerOutcomePolicy.requireChangedFiles !== true);
|
|
222
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Canonical standard exclusive `implement-pi` only. Frontend designers and
|
|
273
|
+
* completeness writers stay on the existing timeout-only transport candidate.
|
|
274
|
+
*/
|
|
275
|
+
export function isTargetTemplateImplementPi(task) {
|
|
276
|
+
return isWriterTransportRetryCandidate(task) && task.id === "implement-pi";
|
|
277
|
+
}
|
|
278
|
+
export function hasTargetTemplateTransientRetryProfile(task) {
|
|
279
|
+
return (task?.transientRetryProfile === TARGET_TEMPLATE_TRANSIENT_RETRY_PROFILE);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Dual-condition eligibility: canonical shape AND generated-path stamp.
|
|
283
|
+
* Custom / other-template nodes that only match id or shape stay ineligible.
|
|
284
|
+
*/
|
|
285
|
+
export function isTargetTemplateTransientRetryNode(task) {
|
|
286
|
+
if (!hasTargetTemplateTransientRetryProfile(task))
|
|
287
|
+
return false;
|
|
288
|
+
return (isCanonicalFinalVerifyShellRetryCandidate(task) ||
|
|
289
|
+
isTargetTemplateImplementPi(task));
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Shape-based eligibility for implicit canonical final verify-shell retry.
|
|
293
|
+
* Does not consult node id or a template field.
|
|
294
|
+
*/
|
|
295
|
+
export function isCanonicalFinalVerifyShellRetryCandidate(task) {
|
|
296
|
+
if (task.executor !== "shell")
|
|
297
|
+
return false;
|
|
298
|
+
if (task.role !== "verifier")
|
|
299
|
+
return false;
|
|
300
|
+
if (task.writePolicy !== undefined &&
|
|
301
|
+
task.writePolicy !== "read-only" &&
|
|
302
|
+
task.writePolicy !== "none") {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
if ((task.writeSet?.length ?? 0) > 0)
|
|
306
|
+
return false;
|
|
307
|
+
const shell = task.shell;
|
|
308
|
+
if (!shell || (shell.commands?.length ?? 0) === 0)
|
|
309
|
+
return false;
|
|
310
|
+
const evidence = shell.verifyEvidence;
|
|
311
|
+
if (!evidence)
|
|
312
|
+
return false;
|
|
313
|
+
if (evidence.phase !== "final")
|
|
314
|
+
return false;
|
|
315
|
+
if (evidence.quota !== "full")
|
|
316
|
+
return false;
|
|
317
|
+
if (evidence.commandSource !== "adapter")
|
|
318
|
+
return false;
|
|
319
|
+
if (evidence.finalFullRequired !== true)
|
|
320
|
+
return false;
|
|
321
|
+
if (shell.frontendPrewriteGate ||
|
|
322
|
+
shell.frontendVerificationBundle ||
|
|
323
|
+
shell.frontendBrowserToolPreflight ||
|
|
324
|
+
shell.backendTestPipeline ||
|
|
325
|
+
shell.jacocoCoverage ||
|
|
326
|
+
shell.repairArtifactGate ||
|
|
327
|
+
shell.verdictGate) {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
223
332
|
export function isSafeReadOnlyPiRetryCandidate(task) {
|
|
224
333
|
if (task.executor !== "pi")
|
|
225
334
|
return false;
|