@tea-agent/loop-agent 0.42.0-next.8 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -50
- package/dist/application/dag/run-dag.js +41 -0
- package/dist/application/task-lifecycle/advance.js +9 -4
- package/dist/build-stamp.json +3 -3
- package/dist/cli/program.js +1 -1
- package/dist/commands/dag-rerun-task.js +2 -0
- package/dist/commands/task-source-prepare.js +3 -1
- package/dist/executors/dag-pi-executor.js +1809 -213
- package/dist/executors/pi-extension-resolver.js +14 -2
- package/dist/executors/shell-executor.js +178 -73
- package/dist/shared/dag-failure-category.js +6 -0
- package/dist/task/contract/apply.js +36 -2
- package/dist/task/source-prepare/parse-intent.js +7 -0
- package/dist/worker/console/chat/chat-event-store.js +4 -2
- package/dist/worker/console/chat/pi-runtime.js +45 -2
- package/dist/worker/console/chat/resource-loader.js +4 -1
- package/dist/worker/console/chat/routes.js +28 -12
- package/dist/worker/console/chat/sdd-data-alignment.js +13 -2
- package/dist/worker/console/chat/session-store.js +5 -1
- package/dist/worker/console/chat/subagents/agent-tool.js +62 -0
- package/dist/worker/console/chat/subagents/explore-agent.js +169 -0
- package/dist/worker/console/chat/subagents/index.js +5 -0
- package/dist/worker/console/chat/subagents/orchestrator.js +273 -0
- package/dist/worker/console/chat/subagents/tool-policy.js +53 -0
- package/dist/worker/console/chat/subagents/types.js +13 -0
- package/dist/worker/console/chat/tool-preview.js +10 -0
- package/dist/worker/console/chat/tools.js +11 -1
- package/dist/worker/console/chat/turn-process.js +1 -0
- package/dist/worker/console/interview/tools.js +1 -0
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C6n9_m0P.js → abnfDiagram-N423BO3Z-B0Q0nClf.js} +1 -1
- package/dist/worker/console/static/assets/{arc-DQh-IfZ1.js → arc-DCPjC19G.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-54NnrwUC.js → architectureDiagram-T3A2C74G-CP5n9jmG.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-pivRALGK.js → blockDiagram-VBNYF7ZC-CmaWi_Wg.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BR7OV2NJ.js → c4Diagram-5PPSVZJV-Ct5tcMfZ.js} +1 -1
- package/dist/worker/console/static/assets/channel-DAS07MdS.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-B1Aq6BcK.js → chunk-2GRJ4B5K-C0osm1Zf.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-CbdU0rjo.js → chunk-2Q5K7J3B-CDWviED7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-Dqi2GJeD.js → chunk-5RXB4S5H-mtSk1-j7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BYn1Hu4R.js → chunk-5VM5RSS4-D5J9PHC7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DRLjDL0k.js → chunk-6Q2QTUOP-Begg4WAa.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CY9Xx2jV.js → chunk-GF5L2VYU-sF1AEy7T.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-BNCZs7_z.js → chunk-JWPE2WC7-BqbsWXZb.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DZ8AStLL.js → chunk-KBJHAD2P-BKJrPcJ6.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DsxjYrzz.js → chunk-RYQCIY6F-CcwNMRho.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-Ddx1KC1l.js → chunk-XXDRQBXY-BEJi3iIs.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Cwk-5jiW.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Cwk-5jiW.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-W9TveCnK.js → cose-bilkent-JH36ORCC-DRLgTvVu.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-l9j_ztZH.js → cynefin-VYW2F7L2-BoAVG3cs.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-BMJMKi4G.js → cynefinDiagram-MW4NZA55-Bzol06hR.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-Bb4mG9pH.js → dagre-VZM6K2ZE-UmliJM77.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-BMgL_Qv0.js → diagram-7IWD3JNH-BWLcJkFo.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-Bvo2T4OQ.js → diagram-B4RE2ZJO-CgApOm-O.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-_5kWRN9c.js → diagram-LBJQPF4R-Bh3RgTLs.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DqdMrltM.js → diagram-Q27KOJAE-Dsh-D5nE.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-CDDYsNkp.js → diagram-UB23O5K3-Dkbbpcpb.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-c4nfnZUV.js → ebnfDiagram-BXEA7PRR-3EBaA3t3.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DnkUcNMs.js → erDiagram-JOGREHBK-Bq2Dc5ok.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-Dz0KGLZE.js → flowDiagram-UKHOOZJN-De7y55ha.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-Cj1t1uka.js → ganttDiagram-PKOTCBZU-fLiDbQRh.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-tp2FrBHd.js → gitGraphDiagram-DS77QQ5N-Du617mp1.js} +1 -1
- package/dist/worker/console/static/assets/index-C0O48S_P.js +449 -0
- package/dist/worker/console/static/assets/index-CzKf4U8P.css +1 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-DQwJS8DH.js → infoDiagram-6WML65LV-BwmlF-XP.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-eimCQWD4.js → ishikawaDiagram-WSZJBQD7-zsGtS59u.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-Dd9Gbwgv.js → journeyDiagram-NVQOT4AX-DTTPTe3f.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-Qve3cyft.js → kanban-definition-27J2QSJJ-BkXg9aP-.js} +1 -1
- package/dist/worker/console/static/assets/{linear-UXKSe36Z.js → linear-7U2ue5IE.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-CWhj4JXN.js → mermaid.core-BUuGHmWO.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-yTcwf4SJ.js → mindmap-definition-FAOFIHXS-7q6fX0Sv.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-_7qToaZP.js → pegDiagram-VL7TDLO6-CkQPJN55.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-CXmrKmDm.js → pieDiagram-7S7Q4E2Y-CCal_tfX.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-hMmrJyaS.js → quadrantDiagram-CIZ2JOQS-B7bpxyAZ.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BXw8tCBe.js → railroadDiagram-AXF67PYL-CJmww7D-.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BmjgnLZl.js → requirementDiagram-LRYGKXZP-D6ldWJEv.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Bj77SPpN.js → sankeyDiagram-W5VNT64P-VGh33I9e.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-B2FDVysL.js → sequenceDiagram-SI44F4Z6-CCkDrIjU.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-UChNY9ZZ.js → sizeCapture-X5ZJPWSS-NC8f5Otb.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-wbAEkbd7.js → stateDiagram-OKZ733FA-_92ezZdF.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DyJg5gzW.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DCEkU8HR.js → swimlanes-SLNWSIFB-BdUCGtbP.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-B1cw_0Uy.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-BGp7H06U.js → timeline-definition-Z64GVDOM-CdD1H8ia.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-DsCIQuWR.js → vennDiagram-T6HMQDX7-Dkdk3oFo.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-cRZLP4Xe.js → wardleyDiagram-T6FBY63Y-CKu2uPPY.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-CP0xLR9Y.js → xychartDiagram-ELKLHX3M-ClqAnuG8.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/chat-view-types.js +1 -1
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +23 -0
- package/dist/worker/console/static-src/operator-chat/pending-user-message.js +32 -0
- package/dist/worker/console/static-src/operator-chat/tools-catalog.js +21 -2
- package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +2 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +2 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +30 -14
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +133 -5
- package/dist/worker/console/static-src/shell/workspace-route.js +4 -0
- package/dist/worker/observe/routes.js +4 -0
- package/dist/worker/observe/static/constants.js +22 -22
- package/dist/worker/observe/static/dag-context-reason-labels.js +19 -0
- package/dist/worker/observe/static/dag-history-labels.js +1 -0
- package/dist/worker/observe/static/dag-inspector-humanize.d.ts +16 -0
- package/dist/worker/observe/static/dag-inspector-humanize.js +339 -0
- package/dist/worker/observe/static/dag-node-purpose.js +10 -10
- package/dist/worker/observe/static/index.html +4 -4
- package/dist/worker/observe/static/prompt-restart-candidates.js +4 -2
- package/dist/worker/observe/static/relations.js +5 -5
- package/dist/worker/observe/static/styles.css +171 -0
- package/dist/worker/observe/static/views/dag-graph.js +1 -1
- package/dist/worker/observe/static/views/dag-inspector.js +329 -174
- package/dist/worker/observe/static/views/dag.js +16 -12
- package/dist/worker/observe/static/views/session-timeline.js +5 -3
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +18 -0
- package/dist/workflows/dag/backend-test-plan-protocol.js +104 -0
- package/dist/workflows/dag/backend-test-scenario-param.js +30 -1
- package/dist/workflows/dag/dag-retry-schema.js +3 -0
- package/dist/workflows/dag/frontend-contract-facts.js +130 -0
- package/dist/workflows/dag/frontend-design-policy.js +101 -16
- package/dist/workflows/dag/frontend-implementation-contract.js +410 -41
- package/dist/workflows/dag/frontend-plan-render.js +13 -2
- package/dist/workflows/dag/frontend-prewrite-gate.js +1 -1
- package/dist/workflows/dag/frontend-recovery-controller.js +25 -1
- package/dist/workflows/dag/frontend-recovery-plan.js +6 -2
- package/dist/workflows/dag/frontend-recovery-run.js +169 -15
- package/dist/workflows/dag/frontend-risk.js +2 -0
- package/dist/workflows/dag/frontend-shadow-dual-write.js +17 -1
- package/dist/workflows/dag/frontend-shape.js +16 -6
- package/dist/workflows/dag/frontend-test-execution-evidence.js +48 -0
- package/dist/workflows/dag/frontend-typed-event-store.js +3 -0
- package/dist/workflows/dag/frontend-verification-trace.js +38 -4
- package/dist/workflows/dag/frontend-writer-admission.js +46 -12
- package/dist/workflows/dag/init-hybrid.js +59 -29
- package/dist/workflows/dag/node-execution.js +277 -85
- package/dist/workflows/dag/recovery-lease.js +106 -16
- package/dist/workflows/dag/rerun-feedback.js +60 -0
- package/dist/workflows/dag/rerun-plan.js +90 -4
- package/dist/workflows/dag/rerun-run.js +28 -6
- package/dist/workflows/dag/rerun-task.js +224 -15
- package/dist/workflows/dag/retry-policy.js +27 -10
- package/dist/workflows/dag/runner-exit-diagnostics.js +125 -0
- package/dist/workflows/dag/runner.js +238 -29
- package/dist/workflows/dag/scheduler.js +21 -6
- package/dist/workflows/dag/structured-output-repair.js +4 -1
- package/dist/workflows/dag/types.js +4 -3
- package/dist/workflows/dag/validate.js +10 -8
- package/dist/workflows/dag/workspace-checkpoint.js +66 -0
- package/docs/operations/README.md +1 -0
- package/docs/templates/agent-dag.schema.json +2 -2
- package/docs/templates/backend-test-dag.json +6 -4
- package/docs/templates/frontend-implementation-contract.schema.json +34 -2
- package/harness.json +1 -1
- package/package.json +4 -5
- package/skills/frontend-plan/SKILL.md +14 -1
- package/skills/frontend-plan/references/decision-contract.md +101 -5
- package/skills/frontend-plan/references/design-decisions.md +32 -0
- package/dist/worker/console/static/assets/channel-DsZxrgqe.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CuToPeGV.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CuToPeGV.js +0 -1
- package/dist/worker/console/static/assets/index-D9Sc0f0y.js +0 -449
- package/dist/worker/console/static/assets/index-DDQc5a50.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-yPoT19ft.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-VWdarchG.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,43 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
5
|
+
## [0.42.0] - 2026-09-07
|
|
6
|
+
|
|
7
|
+
### 新增
|
|
8
|
+
|
|
9
|
+
- 新增了本发布周期内已经完成并通过验证的功能。
|
|
10
|
+
|
|
11
|
+
### 改进
|
|
12
|
+
|
|
13
|
+
- 完善了日常使用体验和运行稳定性。
|
|
14
|
+
|
|
15
|
+
### 修复
|
|
16
|
+
|
|
17
|
+
- 修复了影响使用体验或运行稳定性的问题。
|
|
18
|
+
|
|
19
|
+
## [0.41.3] - 2026-09-04
|
|
20
|
+
|
|
21
|
+
### 改进
|
|
22
|
+
|
|
23
|
+
- 完善了本发布周期内的日常使用体验和运行稳定性。
|
|
24
|
+
|
|
25
|
+
### 修复
|
|
26
|
+
|
|
27
|
+
- 修复了部分功能在特定环境下无法正常使用的问题。
|
|
28
|
+
|
|
29
|
+
## [0.41.2] - 2026-09-04
|
|
30
|
+
|
|
31
|
+
### 修复
|
|
32
|
+
|
|
33
|
+
- 修复了 DAG 扩展解析、会话恢复和观测页面资源缓存等问题,让任务执行和对话页面在更新后更加可靠。
|
|
34
|
+
- 修复了孤儿会话和观测入口偶发失效的问题,重启或刷新后可以继续使用原有会话。
|
|
35
|
+
|
|
36
|
+
## [0.41.1] - 2026-09-02
|
|
37
|
+
|
|
38
|
+
### 修复
|
|
39
|
+
|
|
40
|
+
- 修复发布流程中的测试并发稳定性问题。
|
|
41
|
+
- 修复旧会话继续使用过期模型认证的问题,配置更新后会自动采用最新认证信息。
|
|
42
|
+
- 修复长工具链消息错序,历史会话也保持正确顺序。
|
|
43
|
+
- 统一工作区、Todo 和其他滚动区域的滚动条样式。
|
|
44
|
+
- 改进 HTML 文件预览,支持页面内交互和独立窗口完整阅读。
|
|
45
|
+
|
|
46
|
+
### 测试
|
|
47
|
+
|
|
48
|
+
- Pi MED 档测试改为校验模型档位形状,避免具体模型切换造成误报。
|
|
49
|
+
|
|
50
|
+
## [0.41.1-beta.0] - 2026-08-31
|
|
51
|
+
|
|
52
|
+
### 用户可见更新
|
|
53
|
+
|
|
54
|
+
- 前端自动化任务的规划、执行和结果检查更加稳定,失败后更容易继续处理。
|
|
55
|
+
- 长任务和复杂工作区的进度、文件和运行结果展示更加清晰。
|
|
56
|
+
- 插件管理、文件预览和任务详情等常用操作得到改进。
|
|
57
|
+
|
|
58
|
+
<details>
|
|
59
|
+
<summary>实现细节(开发者参考)</summary>
|
|
42
60
|
|
|
43
61
|
- 0.41.1-beta.0(frontend-node dogfood):将前端 DAG 的 Contract、Scout、Plan 切换为节点专属 skill/reference,bounded implement 仅注入有界代码规范;在保留默认 3K/12K 上下文预算的同时,避免 `frontend-plan-pi` 的必需 stable-id 追踪合同被静默截断。
|
|
44
62
|
- 拆分前端 DAG 的大一统 skill 注入:`frontend-contract-pi`、`frontend-scout-pi`、`frontend-plan-pi` 分别使用阶段专属 skill/reference,默认 12K runtime 预算内完整加载关键合同,不再让三个节点重复携带整份 node lifecycle、设计与代码规范;bounded implement 单独接收不授权扩展侦察的代码规范。新增真实默认预算回归断言,防 required reference 再次静默截断或因预算遗漏。
|
|
@@ -260,19 +278,7 @@
|
|
|
260
278
|
- 右侧辅助栏统一承载文件、上下文、调用记录、运行活动和当前 DAG;点击消息流中的运行状态即可在同一侧栏查看运行、门禁与产物,并可自由调整侧栏宽度。
|
|
261
279
|
- 新增任务清单与结构化提问卡片,让长任务的进度和需要用户选择的内容更容易理解。
|
|
262
280
|
- 「对话 / 操作 / 观测」使用统一导航;操作和观测页面可以切换工作区查看对应数据。
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
### 修复
|
|
266
|
-
|
|
267
|
-
- 修复 Next Release 发布 workflow 的 io-heavy 测试并发不稳定:将该测试池固定为单 worker,避免全部测试通过后因过高并发触发 Vitest `onTaskUpdate` RPC settlement timeout,并消除 controller identity / package fingerprint 测试之间的共享状态竞态。
|
|
268
|
-
- 修复 Operator Chat 旧会话继续使用过期模型认证的问题:模型配置变化后,下一轮发送或手动重新加载会自动刷新模型目录和当前模型认证。
|
|
269
|
-
- 修复 Operator Chat 长工具链的消息错序:模型过程文字、思考和工具卡片现在按服务端事件顺序稳定交替展示,刷新历史会话后也保持相同顺序。
|
|
270
|
-
- 统一工作区、Todo 和其他滚动区域的滚动条样式,默认更轻巧,鼠标悬浮时也更容易辨认。
|
|
271
|
-
- HTML 文件预览现在支持页面内的标签切换等交互;较大的自包含 HTML 可以在新窗口中直接完整加载,不再受源码摘要长度限制。
|
|
272
|
-
|
|
273
|
-
### 测试
|
|
274
|
-
|
|
275
|
-
- `harness.json` Pi MED 档测试不再 pin 具体模型 id,改为校验 tier 形状,避免每次 dogfood 档位切换都造成测试失败。
|
|
281
|
+
</details>
|
|
276
282
|
|
|
277
283
|
## [0.41.0] - 2026-08-31
|
|
278
284
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { createDagEventObserver } from "../../workflows/dag/event-observer.js";
|
|
2
3
|
import { composeDagRunObservers } from "../../workflows/dag/observer-compose.js";
|
|
3
4
|
import { createDagCanvasObserver, resolveCanvasPath, } from "../../workflows/dag/canvas-observer.js";
|
|
@@ -28,6 +29,41 @@ function buildRunDagNextSteps(runId) {
|
|
|
28
29
|
`loop-agent dag report --run-id ${runId} --markdown # advanced forensic`,
|
|
29
30
|
];
|
|
30
31
|
}
|
|
32
|
+
/** Shared production recovery seam for fresh runs and recovery continuations. */
|
|
33
|
+
export async function buildDefaultFrontendRecoveryDeps(repoRoot) {
|
|
34
|
+
// Keep the application layer free of a static worker→application cycle. The
|
|
35
|
+
// recovery controller is only needed after a frontend terminal failure.
|
|
36
|
+
const [{ openConsoleAppData }, { OperationStore }, { createOperationEventStore }, { LoopAgentClient }, { resolveSiblingLoopAgentBin },] = await Promise.all([
|
|
37
|
+
import("../../infrastructure/console/app-data.js"),
|
|
38
|
+
import("../../infrastructure/console/operation-store.js"),
|
|
39
|
+
import("../../worker/console/operation-sse.js"),
|
|
40
|
+
import("../../worker/loop-agent/loop-agent-client.js"),
|
|
41
|
+
import("../../worker/console/sibling-controller.js"),
|
|
42
|
+
]);
|
|
43
|
+
const appData = openConsoleAppData({ repoRoot });
|
|
44
|
+
const store = new OperationStore(appData);
|
|
45
|
+
const events = createOperationEventStore({
|
|
46
|
+
persistenceDir: path.join(appData.operations, "events"),
|
|
47
|
+
});
|
|
48
|
+
const client = new LoopAgentClient({
|
|
49
|
+
loopAgentBin: resolveSiblingLoopAgentBin(),
|
|
50
|
+
artifactRoot: path.join(appData.root, "client-artifacts", appData.fingerprint),
|
|
51
|
+
resolveIdentity: true,
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
store,
|
|
55
|
+
operationRunnerDeps: {
|
|
56
|
+
store,
|
|
57
|
+
events,
|
|
58
|
+
client,
|
|
59
|
+
repoRoot,
|
|
60
|
+
env: {
|
|
61
|
+
...process.env,
|
|
62
|
+
LOOP_CONSOLE_APP_DATA: appData.root,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
31
67
|
export async function runDagUseCase(input) {
|
|
32
68
|
const spec = await loadDagSpecFromFile(input.dagPath);
|
|
33
69
|
assertValidDagSpec(spec);
|
|
@@ -80,6 +116,10 @@ export async function runDagUseCase(input) {
|
|
|
80
116
|
...(canvasError ? { canvasError } : {}),
|
|
81
117
|
};
|
|
82
118
|
}
|
|
119
|
+
const recovery = input.recovery ??
|
|
120
|
+
(!input.initOnly && spec.tasks.some((task) => task.id === "frontend-implement-pi")
|
|
121
|
+
? await buildDefaultFrontendRecoveryDeps(input.cwd)
|
|
122
|
+
: undefined);
|
|
83
123
|
const summary = await runDag(spec, {
|
|
84
124
|
cwd: input.cwd,
|
|
85
125
|
initOnly: input.initOnly,
|
|
@@ -90,6 +130,7 @@ export async function runDagUseCase(input) {
|
|
|
90
130
|
...(input.workerAssociation
|
|
91
131
|
? { workerAssociation: input.workerAssociation }
|
|
92
132
|
: {}),
|
|
133
|
+
...(recovery ? { recovery } : {}),
|
|
93
134
|
});
|
|
94
135
|
const canvasError = await flushCanvasSafely(canvas);
|
|
95
136
|
if (resolvedCanvasPath) {
|
|
@@ -842,13 +842,18 @@ export async function advanceTaskLifecycle(input) {
|
|
|
842
842
|
break;
|
|
843
843
|
}
|
|
844
844
|
preparedContractThisCall = true;
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
845
|
+
const contractChanged = prepareResult.apply?.noOp !== true;
|
|
846
|
+
if (contractChanged &&
|
|
847
|
+
(startupRepairAction ||
|
|
848
|
+
refreshManagedContractThisCall ||
|
|
849
|
+
Boolean(input.fromDraftPath))) {
|
|
848
850
|
// The old DAG and gate were bound to the pre-mutation contract.
|
|
849
|
-
refreshManagedContractThisCall = false;
|
|
850
851
|
regenerateDagThisCall = true;
|
|
851
852
|
}
|
|
853
|
+
// Consume the refresh request even when projection was a content no-op;
|
|
854
|
+
// otherwise the re-plan would invoke prepare-contract repeatedly in this
|
|
855
|
+
// advance call and eventually hit the step limit.
|
|
856
|
+
refreshManagedContractThisCall = false;
|
|
852
857
|
record = {
|
|
853
858
|
...appendTransition(record, "contract-managed"),
|
|
854
859
|
pendingPrdRefresh: false,
|
package/dist/build-stamp.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.42.0
|
|
4
|
-
"gitSha": "
|
|
5
|
-
"builtAt": "2026-09-
|
|
3
|
+
"version": "0.42.0",
|
|
4
|
+
"gitSha": "d4c9130bf4feb25e4c120f97d29786dd48062cfd",
|
|
5
|
+
"builtAt": "2026-09-07T01:59:32.047Z"
|
|
6
6
|
}
|
package/dist/cli/program.js
CHANGED
|
@@ -440,7 +440,7 @@ const RAW_SUBCOMMAND_USAGE = {
|
|
|
440
440
|
"dag approve": 'usage: dag approve --run-id <id> --option <A|B|...> [--notes "..."]',
|
|
441
441
|
"dag reject": 'usage: dag reject --run-id <id> --reason "..."',
|
|
442
442
|
"dag rerun": "usage: dag rerun --run-id <id> --from-node <node-id> --plan [--json] | dag rerun --run-id <id> --from-node <node-id> --plan-hash <hash> --request-id <key> --reason <text> [--json]",
|
|
443
|
-
"dag rerun-task": "usage: dag rerun-task --run-id <id> --reason <text> --request-id <key> [--profile auto|minimal|standard|reviewed|supervised] [--task-id <id>] [--json]",
|
|
443
|
+
"dag rerun-task": "usage: dag rerun-task --run-id <id> --reason <text> --request-id <key> [--profile auto|minimal|standard|reviewed|supervised] [--task-id <id>] [--frontend-recovery --recovery-operation-id <id>] [--json]",
|
|
444
444
|
"dag reconcile-run": "usage: dag reconcile-run --run-id <id> [--action supersede|abandon] [--reason <text>]",
|
|
445
445
|
"dag doctor": "usage: dag doctor [--run-id <id>]\nInspect health issues before approve/reject/resume; no --json (output is already structured JSON).",
|
|
446
446
|
"dag report": "usage: dag report [--run-id <id>] [--lifecycle active|paused|completed|all] [--json|--markdown] [--failed-only] [--latest] [--paused-latest]\nRead-only run report; --json gives structured facts (canonical: `dag report --run-id <id> --lifecycle completed --json`).",
|
|
@@ -11,6 +11,8 @@ export async function runDagRerunTask(repoRoot, rawArgs) {
|
|
|
11
11
|
profileExplicit: parsed.profileExplicit,
|
|
12
12
|
taskIdOverride: parsed.taskIdOverride,
|
|
13
13
|
execute: parsed.execute,
|
|
14
|
+
frontendRecovery: parsed.frontendRecovery,
|
|
15
|
+
recoveryOperationId: parsed.recoveryOperationId,
|
|
14
16
|
});
|
|
15
17
|
console.log(JSON.stringify(result, null, 2));
|
|
16
18
|
if (!result.ok) {
|
|
@@ -373,7 +373,9 @@ function printHuman(result) {
|
|
|
373
373
|
}
|
|
374
374
|
}
|
|
375
375
|
if (result.apply) {
|
|
376
|
-
lines.push(
|
|
376
|
+
lines.push(result.apply.noOp
|
|
377
|
+
? ` apply: revision=${result.apply.ref.revision} (unchanged; identical content, no new transaction)`
|
|
378
|
+
: ` apply: revision=${result.apply.ref.revision} txId=${result.apply.txId ?? "n/a"}`);
|
|
377
379
|
}
|
|
378
380
|
if (result.error) {
|
|
379
381
|
lines.push(` error: ${result.error.code}: ${result.error.message}`);
|