@tea-agent/loop-agent 0.39.0-beta.0 → 0.39.0-beta.10

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.
Files changed (331) hide show
  1. package/AGENTS.md +4 -1
  2. package/CHANGELOG.md +248 -95
  3. package/README.md +9 -5
  4. package/bin/loop-agent.js +7 -3
  5. package/dist/application/task-lifecycle/advance.js +12 -0
  6. package/dist/application/task-lifecycle/recommendations.js +13 -2
  7. package/dist/build-stamp.json +3 -3
  8. package/dist/cli/command-definitions.js +23 -5
  9. package/dist/cli/program.js +21 -2
  10. package/dist/cli/update/notifier.js +2 -2
  11. package/dist/cli/update/runtime-activity.js +1 -29
  12. package/dist/cli.js +2 -1
  13. package/dist/commands/client-recovery.js +3 -0
  14. package/dist/commands/dag-follow-up.js +138 -0
  15. package/dist/commands/dag-rerun.js +55 -1
  16. package/dist/commands/init-model-catalog.js +464 -0
  17. package/dist/commands/init-upgrade.js +265 -97
  18. package/dist/commands/init.js +455 -28
  19. package/dist/commands/inspect-next.js +8 -0
  20. package/dist/commands/task-advance.js +19 -0
  21. package/dist/executors/dag-pi-executor.js +2306 -61
  22. package/dist/executors/pi-executor.js +7 -0
  23. package/dist/executors/pi-extension-resolver.js +233 -0
  24. package/dist/executors/pi-playwright-cli-tool.js +74 -28
  25. package/dist/executors/pi-read-budget-policy.js +239 -0
  26. package/dist/executors/pi-sdk-executor.js +180 -33
  27. package/dist/executors/shell-executor.js +1249 -224
  28. package/dist/executors/shell-write-guard.js +14 -0
  29. package/dist/executors/workspace-write-snapshot.js +68 -0
  30. package/dist/infrastructure/harness/atomic-write.js +23 -0
  31. package/dist/shared/dag-failure-category.js +150 -0
  32. package/dist/shared/dag-prompt-override.js +27 -0
  33. package/dist/shared/openspec-spec.js +70 -4
  34. package/dist/shared/operator/capabilities.js +39 -0
  35. package/dist/shared/playwright-cli-command-policy.js +15 -0
  36. package/dist/shared/update/console-notifier.js +100 -0
  37. package/dist/{cli → shared}/update/npm-client.js +70 -15
  38. package/dist/{cli → shared}/update/state.js +41 -13
  39. package/dist/task/config-types.js +50 -5
  40. package/dist/task/contract/apply.js +11 -1
  41. package/dist/task/contract/constants.js +2 -0
  42. package/dist/task/contract/hash.js +3 -0
  43. package/dist/task/contract/observe.js +25 -4
  44. package/dist/task/contract/paths.js +2 -1
  45. package/dist/task/contract/project.js +18 -1
  46. package/dist/task/contract/schema.js +4 -1
  47. package/dist/task/contract/transaction.js +12 -0
  48. package/dist/task/frontend-project-capability.js +199 -18
  49. package/dist/task/source-prepare/completeness.js +188 -0
  50. package/dist/task/source-prepare/fragment-inventory.js +477 -0
  51. package/dist/task/source-prepare/index.js +3 -0
  52. package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
  53. package/dist/task/source-prepare/ledger-review.js +214 -0
  54. package/dist/task/source-prepare/ledger.js +545 -0
  55. package/dist/task/source-prepare/parse-intent.js +24 -4
  56. package/dist/task/source-prepare/prepare.js +298 -1
  57. package/dist/task/source-prepare/semantic-intake.js +25 -5
  58. package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
  59. package/dist/task/source-prepare/types.js +22 -0
  60. package/dist/task/source-references.js +22 -1
  61. package/dist/worker/cli.js +18 -2
  62. package/dist/worker/console/chat/chat-event-store.js +62 -4
  63. package/dist/worker/console/chat/context-panel.js +7 -0
  64. package/dist/worker/console/chat/deferred-turn.js +12 -0
  65. package/dist/worker/console/chat/operation-card.js +8 -1
  66. package/dist/worker/console/chat/pi-console-config.js +81 -10
  67. package/dist/worker/console/chat/pi-runtime.js +264 -16
  68. package/dist/worker/console/chat/provider-error.js +98 -0
  69. package/dist/worker/console/chat/routes.js +298 -32
  70. package/dist/worker/console/chat/session-stats.js +179 -0
  71. package/dist/worker/console/chat/session-store.js +93 -63
  72. package/dist/worker/console/chat/todos.js +115 -0
  73. package/dist/worker/console/chat/tool-preview.js +42 -0
  74. package/dist/worker/console/chat/turn-process.js +20 -55
  75. package/dist/worker/console/chat/user-questions.js +266 -0
  76. package/dist/worker/console/chat/workspace-landing.js +14 -0
  77. package/dist/worker/console/console-handoff.js +82 -0
  78. package/dist/worker/console/console-update-and-init.js +115 -0
  79. package/dist/worker/console/console-update-runtime.js +84 -0
  80. package/dist/worker/console/dag-execution-receipt.js +33 -0
  81. package/dist/worker/console/draft-store.js +49 -0
  82. package/dist/worker/console/frontend-human-decision-adapter.js +19 -0
  83. package/dist/worker/console/frontend-split-operation-adapter.js +20 -0
  84. package/dist/worker/console/index.js +3 -0
  85. package/dist/worker/console/inspect-split.js +18 -0
  86. package/dist/worker/console/native-directory-picker.js +13 -0
  87. package/dist/worker/console/operation-run-facts.js +19 -3
  88. package/dist/worker/console/operation-store.js +227 -7
  89. package/dist/worker/console/operator-actions.js +388 -0
  90. package/dist/worker/console/operator-surface-health.js +1 -0
  91. package/dist/worker/console/operator-user-error.js +2 -2
  92. package/dist/worker/console/prd-intake-bridge.js +13 -0
  93. package/dist/worker/console/routes.js +355 -3
  94. package/dist/worker/console/security.js +67 -13
  95. package/dist/worker/console/server.js +609 -164
  96. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C4kVYweA.js → abnfDiagram-N423BO3Z-BAsjg7ew.js} +1 -1
  97. package/dist/worker/console/static/assets/{arc-Bj2M8iO5.js → arc-CyIlrwZw.js} +1 -1
  98. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CLlXe4-6.js → architectureDiagram-T3A2C74G-Bo4tobhH.js} +1 -1
  99. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-psEp5xH0.js → blockDiagram-VBNYF7ZC-Dfpow9gu.js} +1 -1
  100. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-DeKcOCGJ.js → c4Diagram-5PPSVZJV-DPmzG_B4.js} +1 -1
  101. package/dist/worker/console/static/assets/channel-DSrJAn0-.js +1 -0
  102. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-K0C744p1.js → chunk-2GRJ4B5K-pKQpB1UW.js} +1 -1
  103. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-xbNw4J9-.js → chunk-2Q5K7J3B-5n9YYquZ.js} +1 -1
  104. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DjLaSDUO.js → chunk-5RXB4S5H-DP3CtA2a.js} +1 -1
  105. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-CtiPlKel.js → chunk-5VM5RSS4-DYxMJPUy.js} +1 -1
  106. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DZtolir7.js → chunk-6Q2QTUOP-CS3D50Io.js} +1 -1
  107. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CPcdNeew.js → chunk-GF5L2VYU-gSdDfo5_.js} +1 -1
  108. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-NgHc6V37.js → chunk-JWPE2WC7-A48q0ZNt.js} +1 -1
  109. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DQ_T-hg8.js → chunk-KBJHAD2P-ow8Mm3DY.js} +1 -1
  110. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DgLsxcVP.js → chunk-RYQCIY6F-CMKfLWYE.js} +1 -1
  111. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-UrVoM9z1.js → chunk-XXDRQBXY-BiTBdQPX.js} +1 -1
  112. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DeMmPl0_.js +1 -0
  113. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DeMmPl0_.js +1 -0
  114. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CLkYvTb3.js → cose-bilkent-JH36ORCC-Cm7exRz_.js} +1 -1
  115. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BwT_xKrE.js → cynefin-VYW2F7L2-D9O5qGOu.js} +1 -1
  116. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-Bi9tuzif.js → cynefinDiagram-MW4NZA55-CkvQnako.js} +1 -1
  117. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BCIqkWBV.js → dagre-VZM6K2ZE-B1rzp7CB.js} +1 -1
  118. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Dip6l9_Z.js → diagram-7IWD3JNH-BP07Ipcc.js} +1 -1
  119. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B-xkh_wK.js → diagram-B4RE2ZJO-BlPzweQb.js} +1 -1
  120. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-DZO0kTt_.js → diagram-LBJQPF4R-CxPa7n0S.js} +1 -1
  121. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-D6ZplNbZ.js → diagram-Q27KOJAE-CMTZs53A.js} +1 -1
  122. package/dist/worker/console/static/assets/{diagram-UB23O5K3-BPekbhoS.js → diagram-UB23O5K3-CxG_X52r.js} +1 -1
  123. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BtmaJpK5.js → ebnfDiagram-BXEA7PRR-D8axtJM0.js} +1 -1
  124. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-6DS0Xc44.js → erDiagram-JOGREHBK-DIsGzn7b.js} +1 -1
  125. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-CihnROSm.js → flowDiagram-UKHOOZJN-CU9zkDG0.js} +1 -1
  126. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CZC4zOE2.js → ganttDiagram-PKOTCBZU-DCjTmz5P.js} +1 -1
  127. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-Dq1fhzGN.js → gitGraphDiagram-DS77QQ5N-BksdmFzg.js} +1 -1
  128. package/dist/worker/console/static/assets/index-B-O5ChYq.css +1 -0
  129. package/dist/worker/console/static/assets/index-CfnY8AQx.js +407 -0
  130. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-DlSl4BGx.js → infoDiagram-6WML65LV-CGzzzJtL.js} +1 -1
  131. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-snnzFl_U.js → ishikawaDiagram-WSZJBQD7-BdseB80N.js} +1 -1
  132. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-BDE7qpMx.js → journeyDiagram-NVQOT4AX-DM9gsgha.js} +1 -1
  133. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-CD2Ci04G.js → kanban-definition-27J2QSJJ-3q-_9R2b.js} +1 -1
  134. package/dist/worker/console/static/assets/{linear-DdnapKIH.js → linear-B8N-Mxsd.js} +1 -1
  135. package/dist/worker/console/static/assets/{mermaid.core-BVjAT9b8.js → mermaid.core-EPIHUUsu.js} +5 -5
  136. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-D0yJk-zA.js → mindmap-definition-FAOFIHXS-CxwO12aa.js} +1 -1
  137. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BVo9tFP-.js → pegDiagram-VL7TDLO6-bPqbVX6Y.js} +1 -1
  138. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DnOV-mZ_.js → pieDiagram-7S7Q4E2Y-KzqIvzeX.js} +1 -1
  139. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-CzUJo58i.js → quadrantDiagram-CIZ2JOQS-CyofpWiV.js} +1 -1
  140. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Bvikrolh.js → railroadDiagram-AXF67PYL-cTWJvLTP.js} +1 -1
  141. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DtaSVCap.js → requirementDiagram-LRYGKXZP-BK--q27B.js} +1 -1
  142. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-C2c9A0wW.js → sankeyDiagram-W5VNT64P-C0SDOHXK.js} +1 -1
  143. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DmXJcU7r.js → sequenceDiagram-SI44F4Z6-Cong6YIo.js} +1 -1
  144. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-B4GUFW92.js → sizeCapture-X5ZJPWSS-DUVkgZx8.js} +1 -1
  145. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Dsad2MXf.js → stateDiagram-OKZ733FA-C7XgxuZg.js} +1 -1
  146. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Dzbnd5oX.js +1 -0
  147. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DGq48Fbi.js → swimlanes-SLNWSIFB-D9Ayvwcy.js} +2 -2
  148. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BY0hHk6G.js +8 -0
  149. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CSSi6OFf.js → timeline-definition-Z64GVDOM-Byb000cH.js} +1 -1
  150. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BqyzPrWv.js → vennDiagram-T6HMQDX7-DMLegPt4.js} +1 -1
  151. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DlznVb6S.js → wardleyDiagram-T6FBY63Y-ChMMeOsP.js} +1 -1
  152. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-CfBcgJ_K.js → xychartDiagram-ELKLHX3M-bEMEPisW.js} +1 -1
  153. package/dist/worker/console/static/index.html +2 -2
  154. package/dist/worker/console/static-src/active-run-badge.js +17 -0
  155. package/dist/worker/console/static-src/app/console-types.js +68 -4
  156. package/dist/worker/console/static-src/app/useConsoleShell.js +30 -12
  157. package/dist/worker/console/static-src/app/useOperatorActions.js +41 -6
  158. package/dist/worker/console/static-src/app/useRecoveryConsole.js +45 -10
  159. package/dist/worker/console/static-src/app/useRunProgress.js +47 -0
  160. package/dist/worker/console/static-src/app/useTaskWizard.js +74 -2
  161. package/dist/worker/console/static-src/night/useNightBoard.js +8 -5
  162. package/dist/worker/console/static-src/operator-chat/cards/failure-category-advice.js +25 -0
  163. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +140 -8
  164. package/dist/worker/console/static-src/operator-chat/details-dag-actions.js +122 -0
  165. package/dist/worker/console/static-src/operator-chat/input-history.js +76 -0
  166. package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
  167. package/dist/worker/console/static-src/operator-chat/refs.js +3 -0
  168. package/dist/worker/console/static-src/operator-chat/runtime-selection-labels.js +27 -0
  169. package/dist/worker/console/static-src/operator-chat/turn-submission.js +16 -3
  170. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +168 -72
  171. package/dist/worker/console/static-src/operator-chat/useChatStream.js +102 -21
  172. package/dist/worker/console/static-src/operator-chat/useChatThread.js +184 -4
  173. package/dist/worker/console/static-src/operator-chat/useComposer.js +32 -0
  174. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +63 -9
  175. package/dist/worker/console/static-src/operator-chat/useWorkspaceBrowserGate.js +4 -0
  176. package/dist/worker/console/static-src/operator-chat/workspace-layout-mode.js +3 -3
  177. package/dist/worker/console/static-src/pages/tasks/run-id-resolution.js +79 -0
  178. package/dist/worker/console/static-src/pages/tasks/run-ownership-verify.js +23 -0
  179. package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +110 -0
  180. package/dist/worker/console/static-src/shell/useWorkspaces.js +299 -0
  181. package/dist/worker/console/static-src/shell/workspace-route.js +337 -0
  182. package/dist/worker/console/workspace-context.js +344 -0
  183. package/dist/worker/console/workspace-registry.js +214 -0
  184. package/dist/worker/loop-agent/loop-agent-client.js +7 -3
  185. package/dist/worker/materialize/frontend-split-task-materializer.js +72 -0
  186. package/dist/worker/materialize/harness-task-lineage.js +5 -2
  187. package/dist/worker/observability/init-runtime-activity.js +26 -0
  188. package/dist/worker/observability/read-model.js +22 -0
  189. package/dist/worker/observe/node-input.js +160 -3
  190. package/dist/worker/observe/node-process.js +377 -0
  191. package/dist/worker/observe/routes.js +224 -3
  192. package/dist/worker/observe/server.js +4 -0
  193. package/dist/worker/observe/shell-handler-keys.js +34 -0
  194. package/dist/worker/observe/static/api.js +90 -4
  195. package/dist/worker/observe/static/app.js +18 -70
  196. package/dist/worker/observe/static/constants.js +8 -1
  197. package/dist/worker/observe/static/dag-history-labels.js +4 -0
  198. package/dist/worker/observe/static/dag-node-purpose.d.ts +6 -0
  199. package/dist/worker/observe/static/dag-node-purpose.js +208 -0
  200. package/dist/worker/observe/static/format.js +60 -0
  201. package/dist/worker/observe/static/index.html +6 -1
  202. package/dist/worker/observe/static/inspect-workspace.js +307 -0
  203. package/dist/worker/observe/static/markdown-render.js +20 -1
  204. package/dist/worker/observe/static/operator-chrome.css +145 -20
  205. package/dist/worker/observe/static/operator-chrome.d.ts +20 -3
  206. package/dist/worker/observe/static/operator-chrome.js +330 -96
  207. package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
  208. package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
  209. package/dist/worker/observe/static/router.d.ts +46 -0
  210. package/dist/worker/observe/static/router.js +25 -1
  211. package/dist/worker/observe/static/state.d.ts +50 -0
  212. package/dist/worker/observe/static/state.js +184 -1
  213. package/dist/worker/observe/static/styles.css +395 -0
  214. package/dist/worker/observe/static/views/dag-graph.js +4 -2
  215. package/dist/worker/observe/static/views/dag-inspector.js +1067 -9
  216. package/dist/worker/observe/static/views/dag.d.ts +13 -0
  217. package/dist/worker/observe/static/views/dag.js +14 -5
  218. package/dist/worker/observe/static/views/dashboard.js +6 -4
  219. package/dist/worker/observe/static/views/failures.js +5 -2
  220. package/dist/worker/observe/static/views/night.js +2 -2
  221. package/dist/worker/observe/static/views/pool.js +1 -0
  222. package/dist/worker/observe/static/views/run.js +3 -1
  223. package/dist/worker/observe/static/views/session-timeline.js +78 -9
  224. package/dist/worker/observe/static/views/task.js +56 -1
  225. package/dist/workflows/dag/backend-test-case-coverage-analysis.js +49 -3
  226. package/dist/workflows/dag/backend-test-markdown-workflow.js +176 -1
  227. package/dist/workflows/dag/backend-test-pytest-collection.js +98 -14
  228. package/dist/workflows/dag/backend-test-writer-completeness.js +10 -5
  229. package/dist/workflows/dag/contract-output-registry.js +15 -0
  230. package/dist/workflows/dag/contract-validator-registrations.js +1 -2
  231. package/dist/workflows/dag/dynamic-runtime/loop-until.js +1 -1
  232. package/dist/workflows/dag/dynamic-runtime/map.js +1 -1
  233. package/dist/workflows/dag/failure-category.js +7 -116
  234. package/dist/workflows/dag/frontend-closeout.js +221 -0
  235. package/dist/workflows/dag/frontend-design-policy.js +400 -0
  236. package/dist/workflows/dag/frontend-human-decision.js +182 -0
  237. package/dist/workflows/dag/frontend-implementation-contract.js +534 -178
  238. package/dist/workflows/dag/frontend-plan-render.js +24 -0
  239. package/dist/workflows/dag/frontend-prewrite-gate.js +371 -393
  240. package/dist/workflows/dag/frontend-provider-capability-matrix.js +159 -0
  241. package/dist/workflows/dag/frontend-recovery-capsule.js +455 -0
  242. package/dist/workflows/dag/frontend-recovery-controller.js +202 -0
  243. package/dist/workflows/dag/frontend-recovery-lineage.js +178 -0
  244. package/dist/workflows/dag/frontend-recovery-plan.js +17 -10
  245. package/dist/workflows/dag/frontend-recovery-run.js +33 -20
  246. package/dist/workflows/dag/frontend-repair.js +7 -424
  247. package/dist/workflows/dag/frontend-review-context.js +288 -14
  248. package/dist/workflows/dag/frontend-review-findings.js +270 -0
  249. package/dist/workflows/dag/frontend-risk.js +15 -2
  250. package/dist/workflows/dag/frontend-shadow-dual-write.js +814 -0
  251. package/dist/workflows/dag/frontend-shape-capsule-store.js +191 -0
  252. package/dist/workflows/dag/frontend-shape-facts.js +409 -0
  253. package/dist/workflows/dag/frontend-shape.js +427 -0
  254. package/dist/workflows/dag/frontend-source-fidelity-ledger.js +108 -0
  255. package/dist/workflows/dag/frontend-split-application-service.js +203 -0
  256. package/dist/workflows/dag/frontend-split-orchestrator.js +899 -0
  257. package/dist/workflows/dag/frontend-test-case-checklist.js +30 -4
  258. package/dist/workflows/dag/frontend-test-case-manifest.js +11 -4
  259. package/dist/workflows/dag/frontend-test-case-quality.js +11 -16
  260. package/dist/workflows/dag/frontend-test-environment-probe.js +230 -0
  261. package/dist/workflows/dag/frontend-test-html-report.js +3 -1
  262. package/dist/workflows/dag/frontend-test-l5-report.js +3 -1
  263. package/dist/workflows/dag/frontend-test-layout.js +159 -0
  264. package/dist/workflows/dag/frontend-test-markdown.js +61 -0
  265. package/dist/workflows/dag/frontend-test-result-contract.js +188 -42
  266. package/dist/workflows/dag/frontend-test-standard-scenarios.js +70 -0
  267. package/dist/workflows/dag/frontend-typed-event-store.js +452 -0
  268. package/dist/workflows/dag/frontend-typed-event-transaction.js +180 -0
  269. package/dist/workflows/dag/frontend-verification-trace.js +52 -17
  270. package/dist/workflows/dag/frontend-worktree-diff.js +250 -17
  271. package/dist/workflows/dag/frontend-writer-admission.js +272 -0
  272. package/dist/workflows/dag/frontend-writer-status.js +244 -0
  273. package/dist/workflows/dag/init-hybrid.js +984 -618
  274. package/dist/workflows/dag/interrupt-request.js +10 -3
  275. package/dist/workflows/dag/lifecycle.js +3 -3
  276. package/dist/workflows/dag/node-execution.js +468 -34
  277. package/dist/workflows/dag/prompt.js +44 -19
  278. package/dist/workflows/dag/recovery-lease.js +80 -0
  279. package/dist/workflows/dag/report.js +37 -1
  280. package/dist/workflows/dag/rerun-feedback.js +124 -1
  281. package/dist/workflows/dag/rerun-plan.js +144 -5
  282. package/dist/workflows/dag/rerun-run.js +81 -6
  283. package/dist/workflows/dag/rerun-task.js +29 -0
  284. package/dist/workflows/dag/retry-policy.js +318 -8
  285. package/dist/workflows/dag/runner.js +429 -122
  286. package/dist/workflows/dag/scheduler.js +114 -16
  287. package/dist/workflows/dag/structured-output-repair.js +712 -0
  288. package/dist/workflows/dag/types.js +321 -31
  289. package/dist/workflows/dag/upstream-artifacts.js +0 -4
  290. package/dist/workflows/dag/validate.js +92 -32
  291. package/docs/README.md +2 -0
  292. package/docs/architecture/evolution.md +45 -0
  293. package/docs/init-surface.manifest.json +9 -0
  294. package/docs/operations/README.md +1 -1
  295. package/docs/operations/local-development-environment.md +21 -0
  296. package/docs/templates/README.md +2 -1
  297. package/docs/templates/agent-dag-report.schema.json +8 -2
  298. package/docs/templates/agent-dag.schema.json +45 -1
  299. package/docs/templates/frontend-implementation-contract.schema.json +684 -24
  300. package/docs/templates/frontend-test-case-checklist.md +2 -2
  301. package/docs/templates/frontend-test-dag.json +8 -10
  302. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
  303. package/docs/templates/init-managed-agents.md +13 -3
  304. package/docs/templates/spec-registry.schema.json +45 -0
  305. package/harness.json +3 -3
  306. package/package.json +7 -1
  307. package/scripts/next-info.mjs +356 -0
  308. package/scripts/next-publish-gate.mjs +238 -0
  309. package/scripts/release-source-binding.mjs +251 -0
  310. package/skills/codebase-scout/SKILL.md +1 -1
  311. package/skills/fe-test-ui-scout/SKILL.md +65 -0
  312. package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
  313. package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
  314. package/skills/frontend-bounded-implement/SKILL.md +8 -14
  315. package/skills/frontend-design-review/SKILL.md +20 -41
  316. package/skills/frontend-implementation/SKILL.md +3 -4
  317. package/skills/frontend-implementation/references/design-spec.md +15 -10
  318. package/skills/frontend-implementation/references/node-contracts.md +23 -13
  319. package/skills/frontend-review/SKILL.md +22 -14
  320. package/skills/frontend-review/references/review-findings.md +6 -7
  321. package/skills/loop-agent/references/command-reference.md +12 -4
  322. package/skills/loop-agent/references/hybrid-dag.md +8 -1
  323. package/skills/playwright-cli/SKILL.md +23 -1
  324. package/skills/playwright-cli-case-generator/SKILL.md +29 -8
  325. package/dist/worker/console/static/assets/channel-CPF4N7pf.js +0 -1
  326. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C2DwA_Y1.js +0 -1
  327. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C2DwA_Y1.js +0 -1
  328. package/dist/worker/console/static/assets/index-DTZOKgAn.js +0 -404
  329. package/dist/worker/console/static/assets/index-Ya5FE7cD.css +0 -1
  330. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-B8FB_cNk.js +0 -1
  331. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CrZYaWfx.js +0 -8
@@ -1222,6 +1222,13 @@ body.is-resizing-dag-graph {
1222
1222
  font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
1223
1223
  overflow-wrap: anywhere;
1224
1224
  }
1225
+ .dag-inspector-purpose {
1226
+ margin: 0;
1227
+ color: var(--muted);
1228
+ font-size: 12px;
1229
+ line-height: 1.45;
1230
+ overflow-wrap: anywhere;
1231
+ }
1225
1232
  .dag-inspector-controls {
1226
1233
  display: inline-flex;
1227
1234
  align-items: center;
@@ -2111,6 +2118,9 @@ body.is-resizing-dag-graph {
2111
2118
  background: transparent;
2112
2119
  color: inherit;
2113
2120
  }
2121
+ .markdown-output.json-output pre {
2122
+ white-space: pre;
2123
+ }
2114
2124
  .markdown-output a {
2115
2125
  color: var(--orange-active);
2116
2126
  text-decoration-color: var(--orange);
@@ -3565,3 +3575,388 @@ button.copy-command:focus-visible {
3565
3575
  .custom-select-option.is-selected .custom-select-option-check {
3566
3576
  opacity: 1;
3567
3577
  }
3578
+
3579
+ /* Experimental prompt-override rerun tab (only rendered with the mutation token). */
3580
+ #dag-inspector-panel-prompt-restart {
3581
+ display: flex;
3582
+ flex-direction: column;
3583
+ min-height: 0;
3584
+ }
3585
+ #dag-inspector-panel-prompt-restart:has(.prompt-restart-panel.is-readonly) {
3586
+ overflow: hidden;
3587
+ }
3588
+ .prompt-restart-panel,
3589
+ .prompt-restart-box {
3590
+ display: flex;
3591
+ flex-direction: column;
3592
+ gap: var(--space-3);
3593
+ min-width: 0;
3594
+ flex: 1;
3595
+ }
3596
+ .prompt-restart-panel.is-readonly {
3597
+ min-height: 0;
3598
+ overflow: hidden;
3599
+ }
3600
+ .prompt-restart-panel.is-readonly .prompt-restart-prompt-card {
3601
+ flex: 1 1 auto;
3602
+ min-height: 12rem;
3603
+ }
3604
+ .prompt-restart-toolbar {
3605
+ display: grid;
3606
+ grid-template-columns: minmax(0, 1fr) auto;
3607
+ gap: var(--space-3);
3608
+ align-items: start;
3609
+ }
3610
+ .prompt-restart-mode-field {
3611
+ min-width: 12.5rem;
3612
+ }
3613
+ .prompt-restart-banner {
3614
+ display: flex;
3615
+ flex-wrap: wrap;
3616
+ align-items: center;
3617
+ gap: 6px 10px;
3618
+ padding: 10px 12px;
3619
+ border: 1px solid var(--hairline);
3620
+ border-radius: var(--radius-lg);
3621
+ background: var(--canvas-soft);
3622
+ }
3623
+ .prompt-restart-banner.is-edit {
3624
+ border-color: color-mix(in srgb, var(--orange) 28%, var(--hairline));
3625
+ background: color-mix(in srgb, var(--orange-soft) 55%, var(--surface));
3626
+ }
3627
+ .prompt-restart-banner-kicker {
3628
+ width: fit-content;
3629
+ padding: 2px 8px;
3630
+ border-radius: var(--radius-pill);
3631
+ background: var(--surface-muted);
3632
+ color: var(--muted);
3633
+ font-size: 11px;
3634
+ font-weight: 700;
3635
+ letter-spacing: 0.02em;
3636
+ }
3637
+ .prompt-restart-banner.is-edit .prompt-restart-banner-kicker {
3638
+ background: var(--orange-soft);
3639
+ color: var(--orange-active);
3640
+ }
3641
+ .prompt-restart-banner-title,
3642
+ .prompt-restart-banner-body {
3643
+ margin: 0;
3644
+ }
3645
+ .prompt-restart-banner-title {
3646
+ color: var(--ink);
3647
+ font-size: 13px;
3648
+ font-weight: 700;
3649
+ line-height: 1.35;
3650
+ }
3651
+ .prompt-restart-banner-body {
3652
+ flex-basis: 100%;
3653
+ color: var(--body);
3654
+ font-size: 12px;
3655
+ line-height: 1.5;
3656
+ }
3657
+ .prompt-restart-field {
3658
+ display: flex;
3659
+ flex-direction: column;
3660
+ gap: 6px;
3661
+ min-width: 0;
3662
+ }
3663
+ .prompt-restart-field.is-hidden,
3664
+ .prompt-restart-prompt-card.is-hidden {
3665
+ display: none;
3666
+ }
3667
+ .prompt-restart-label {
3668
+ color: var(--ink);
3669
+ font-size: 12px;
3670
+ font-weight: 700;
3671
+ letter-spacing: 0.01em;
3672
+ }
3673
+ .prompt-restart-hint {
3674
+ margin: 0;
3675
+ color: var(--muted);
3676
+ font-size: 12px;
3677
+ line-height: 1.45;
3678
+ }
3679
+ .prompt-restart-candidate-select {
3680
+ display: block;
3681
+ width: 100%;
3682
+ min-width: 0;
3683
+ }
3684
+ .prompt-restart-candidate-select .custom-select-trigger {
3685
+ width: 100%;
3686
+ }
3687
+ .prompt-restart-candidate-select .custom-select-menu {
3688
+ z-index: 6;
3689
+ }
3690
+ .prompt-restart-mode-switch {
3691
+ display: flex;
3692
+ width: fit-content;
3693
+ max-width: 100%;
3694
+ gap: 4px;
3695
+ padding: 4px;
3696
+ border: 1px solid var(--hairline);
3697
+ border-radius: var(--radius-pill);
3698
+ background: var(--surface);
3699
+ }
3700
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option,
3701
+ .prompt-restart-mode-option {
3702
+ appearance: none;
3703
+ display: inline-flex;
3704
+ align-items: center;
3705
+ justify-content: center;
3706
+ flex: 0 0 auto;
3707
+ width: auto;
3708
+ min-height: 30px;
3709
+ height: 30px;
3710
+ padding: 0 12px;
3711
+ border: 1px solid transparent;
3712
+ border-radius: var(--radius-pill);
3713
+ background: transparent;
3714
+ color: var(--muted);
3715
+ font-size: 12px;
3716
+ font-weight: 700;
3717
+ line-height: 1;
3718
+ letter-spacing: 0;
3719
+ white-space: nowrap;
3720
+ box-shadow: none;
3721
+ transform: none;
3722
+ cursor: pointer;
3723
+ }
3724
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option:hover,
3725
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option:focus-visible,
3726
+ .prompt-restart-mode-option:hover,
3727
+ .prompt-restart-mode-option:focus-visible {
3728
+ color: var(--ink);
3729
+ background: var(--surface-muted);
3730
+ border-color: transparent;
3731
+ outline: none;
3732
+ box-shadow: none;
3733
+ transform: none;
3734
+ }
3735
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option.is-selected,
3736
+ .prompt-restart-mode-option.is-selected {
3737
+ background: var(--ink);
3738
+ color: #fff;
3739
+ border-color: transparent;
3740
+ }
3741
+ .prompt-restart-prompt-card {
3742
+ display: flex;
3743
+ flex-direction: column;
3744
+ min-width: 0;
3745
+ overflow: hidden;
3746
+ border: 1px solid var(--hairline);
3747
+ border-radius: var(--radius-lg);
3748
+ background: var(--surface);
3749
+ }
3750
+ .prompt-restart-prompt-head {
3751
+ display: flex;
3752
+ align-items: flex-start;
3753
+ justify-content: space-between;
3754
+ gap: var(--space-3);
3755
+ padding: 10px 12px;
3756
+ border-bottom: 1px solid var(--hairline);
3757
+ background: var(--canvas-soft);
3758
+ }
3759
+ .prompt-restart-prompt-titles {
3760
+ display: flex;
3761
+ flex-wrap: wrap;
3762
+ align-items: center;
3763
+ gap: 6px 8px;
3764
+ min-width: 0;
3765
+ }
3766
+ .prompt-restart-prompt-title {
3767
+ color: var(--ink);
3768
+ font-size: 13px;
3769
+ font-weight: 700;
3770
+ line-height: 1.3;
3771
+ }
3772
+ .prompt-restart-prompt-badge {
3773
+ padding: 2px 8px;
3774
+ border-radius: var(--radius-pill);
3775
+ background: var(--surface-muted);
3776
+ color: var(--muted);
3777
+ font-size: 11px;
3778
+ font-weight: 700;
3779
+ }
3780
+ .prompt-restart-prompt-meta {
3781
+ flex-basis: 100%;
3782
+ color: var(--muted);
3783
+ font-size: 11px;
3784
+ line-height: 1.3;
3785
+ }
3786
+ .prompt-restart-copy-icon {
3787
+ flex: 0 0 auto;
3788
+ margin-top: 1px;
3789
+ }
3790
+ .prompt-restart-prompt-actions {
3791
+ display: flex;
3792
+ align-items: center;
3793
+ gap: 6px;
3794
+ flex: 0 0 auto;
3795
+ }
3796
+ #dag-inspector-panel-prompt-restart button.prompt-restart-prompt-fold,
3797
+ .prompt-restart-prompt-fold {
3798
+ appearance: none;
3799
+ display: inline-flex;
3800
+ align-items: center;
3801
+ justify-content: center;
3802
+ min-height: 30px;
3803
+ height: 30px;
3804
+ padding: 0 10px;
3805
+ border: 1px solid var(--hairline);
3806
+ border-radius: var(--radius-pill);
3807
+ background: var(--surface);
3808
+ color: var(--body);
3809
+ font-size: 12px;
3810
+ font-weight: 700;
3811
+ line-height: 1;
3812
+ box-shadow: none;
3813
+ transform: none;
3814
+ cursor: pointer;
3815
+ }
3816
+ #dag-inspector-panel-prompt-restart button.prompt-restart-prompt-fold:hover,
3817
+ .prompt-restart-prompt-fold:hover {
3818
+ border-color: var(--hairline-strong);
3819
+ background: var(--surface-muted);
3820
+ color: var(--ink);
3821
+ transform: none;
3822
+ }
3823
+ .prompt-restart-prompt-card.is-collapsed .prompt-restart-readonly {
3824
+ display: none;
3825
+ }
3826
+ .prompt-restart-readonly {
3827
+ margin: 0;
3828
+ padding: 14px 16px;
3829
+ overflow: auto;
3830
+ background: var(--canvas-soft);
3831
+ color: var(--ink);
3832
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
3833
+ font-size: 12px;
3834
+ line-height: 1.65;
3835
+ white-space: pre-wrap;
3836
+ overflow-wrap: anywhere;
3837
+ tab-size: 2;
3838
+ }
3839
+ .prompt-restart-panel.is-readonly .prompt-restart-readonly {
3840
+ flex: 1 1 auto;
3841
+ min-height: 0;
3842
+ max-height: none;
3843
+ }
3844
+ .prompt-restart-panel.is-edit .prompt-restart-readonly {
3845
+ max-height: min(36vh, 18rem);
3846
+ }
3847
+ .prompt-restart-textarea {
3848
+ width: 100%;
3849
+ min-height: 8rem;
3850
+ resize: vertical;
3851
+ box-sizing: border-box;
3852
+ padding: 12px 14px;
3853
+ border: 1px solid var(--hairline);
3854
+ border-radius: var(--radius-lg);
3855
+ background: var(--canvas-soft);
3856
+ color: var(--ink);
3857
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
3858
+ font-size: 12px;
3859
+ line-height: 1.65;
3860
+ white-space: pre-wrap;
3861
+ overflow-wrap: anywhere;
3862
+ overflow-x: auto;
3863
+ }
3864
+ .prompt-restart-textarea-work {
3865
+ min-height: 10rem;
3866
+ }
3867
+ .prompt-restart-textarea:hover {
3868
+ border-color: var(--hairline-strong);
3869
+ }
3870
+ .prompt-restart-textarea:focus-visible {
3871
+ outline: 2px solid color-mix(in srgb, var(--orange) 55%, transparent);
3872
+ outline-offset: 1px;
3873
+ border-color: color-mix(in srgb, var(--orange) 35%, var(--hairline));
3874
+ }
3875
+ .prompt-restart-textarea-compact {
3876
+ min-height: 4.5rem;
3877
+ }
3878
+ .prompt-restart-actions,
3879
+ .prompt-restart-footer {
3880
+ display: flex;
3881
+ flex-wrap: wrap;
3882
+ gap: var(--space-2);
3883
+ align-items: center;
3884
+ justify-content: flex-end;
3885
+ }
3886
+ .prompt-restart-footer {
3887
+ position: sticky;
3888
+ bottom: calc(-1 * var(--space-4));
3889
+ z-index: 2;
3890
+ margin-top: auto;
3891
+ padding: 10px 0 2px;
3892
+ border-top: 1px solid var(--hairline);
3893
+ background: var(--surface);
3894
+ }
3895
+ .prompt-restart-footer .prompt-restart-status {
3896
+ flex: 1 1 12rem;
3897
+ min-width: 0;
3898
+ margin-right: auto;
3899
+ }
3900
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit,
3901
+ .prompt-restart-submit {
3902
+ appearance: none;
3903
+ display: inline-flex;
3904
+ align-items: center;
3905
+ justify-content: center;
3906
+ min-height: 34px;
3907
+ height: 34px;
3908
+ padding: 0 16px;
3909
+ border: 1px solid var(--orange);
3910
+ border-radius: var(--radius-pill);
3911
+ background: var(--orange);
3912
+ color: #fff;
3913
+ font-size: 13px;
3914
+ font-weight: 700;
3915
+ line-height: 1;
3916
+ letter-spacing: 0.01em;
3917
+ box-shadow: none;
3918
+ transform: none;
3919
+ cursor: pointer;
3920
+ }
3921
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit:hover,
3922
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit:focus-visible,
3923
+ .prompt-restart-submit:hover,
3924
+ .prompt-restart-submit:focus-visible {
3925
+ background: var(--orange-active);
3926
+ border-color: var(--orange-active);
3927
+ color: #fff;
3928
+ outline: none;
3929
+ box-shadow: none;
3930
+ transform: none;
3931
+ }
3932
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit.is-secondary,
3933
+ .prompt-restart-submit.is-secondary {
3934
+ border-color: var(--hairline);
3935
+ background: var(--surface);
3936
+ color: var(--ink);
3937
+ }
3938
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit.is-secondary:hover,
3939
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit.is-secondary:focus-visible,
3940
+ .prompt-restart-submit.is-secondary:hover,
3941
+ .prompt-restart-submit.is-secondary:focus-visible {
3942
+ border-color: var(--orange);
3943
+ background: var(--orange-soft);
3944
+ color: var(--orange-active);
3945
+ }
3946
+ #dag-inspector-panel-prompt-restart button.prompt-restart-submit:disabled,
3947
+ .prompt-restart-submit:disabled {
3948
+ opacity: 0.55;
3949
+ cursor: wait;
3950
+ transform: none;
3951
+ }
3952
+ .prompt-restart-status {
3953
+ margin: 0;
3954
+ min-height: 1.2em;
3955
+ color: var(--body);
3956
+ font-size: 13px;
3957
+ white-space: pre-wrap;
3958
+ word-break: break-word;
3959
+ }
3960
+ .prompt-restart-status.prompt-restart-error {
3961
+ color: var(--red);
3962
+ }
@@ -22,6 +22,7 @@ import {
22
22
  setDagGraphViewMode,
23
23
  currentDagGraphViewMode,
24
24
  } from "../state.js";
25
+ import { describeDagNodePurpose } from "../dag-node-purpose.js";
25
26
  import { selectDagNode } from "./dag-inspector.js";
26
27
  import { renderTrajectoryStoryboard } from "./dag-trajectory.js";
27
28
 
@@ -335,12 +336,13 @@ export function renderDagGraph(dag, dagRunId, existingWrap = null) {
335
336
  const statusLine = `${statusSymbol(status)} ${statusLabel(node.status)} · ${formatMs(node.durationMs)}`;
336
337
  // 节点宽 216、左右 padding≈14:按显示列宽截断(CJK 双宽)。
337
338
  const maxDisplayWidth = Math.max(10, Math.floor((position.width - 28) / 7));
339
+ const purpose = describeDagNodePurpose(node.nodeId, node);
338
340
  const group = svgEl("g", {
339
341
  transform: `translate(${position.x} ${position.y})`,
340
342
  class: `dag-graph-node status-${status}${node.nodeId === uiState.selectedDagNodeId ? " selected" : ""}${uiState.selectedDagNodeId && !related.has(node.nodeId) ? " dag-dimmed" : ""}`,
341
343
  tabindex: 0,
342
344
  role: "button",
343
- "aria-label": `${node.nodeId},状态 ${status}${historyLabel ? `,执行历史 ${historyLabel}` : ""}`,
345
+ "aria-label": `${node.nodeId},${purpose ? `${purpose},` : ""}状态 ${status}${historyLabel ? `,执行历史 ${historyLabel}` : ""}`,
344
346
  });
345
347
  group.appendChild(
346
348
  svgEl("rect", { width: position.width, height: position.height, rx: 10 }),
@@ -352,7 +354,7 @@ export function renderDagGraph(dag, dagRunId, existingWrap = null) {
352
354
  : "";
353
355
  const attemptHint =
354
356
  node.attemptCount > 0 ? `\nattempts: ${node.attemptCount}` : "";
355
- title.textContent = `${node.nodeId}\n${node.executor ?? "未知执行器"}\n${status}${historyLabel ? `\n执行历史:${historyLabel}` : ""}${passHint}${attemptHint}`;
357
+ title.textContent = `${node.nodeId}${purpose ? `\n${purpose}` : ""}\n${node.executor ?? "未知执行器"}\n${status}${historyLabel ? `\n执行历史:${historyLabel}` : ""}${passHint}${attemptHint}`;
356
358
  group.appendChild(title);
357
359
  const label = svgEl("text", {
358
360
  x: 14,