@tea-agent/loop-agent 0.40.0-next.1 → 0.40.0-next.11

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 (213) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +114 -109
  3. package/README.md +2 -2
  4. package/dist/application/dag/generate-task-dag.js +6 -2
  5. package/dist/application/task-lifecycle/advance.js +12 -0
  6. package/dist/build-stamp.json +3 -3
  7. package/dist/cli/update/runtime-activity.js +1 -29
  8. package/dist/commands/dag-rerun.js +1 -1
  9. package/dist/executors/dag-pi-executor.js +69 -7
  10. package/dist/executors/pi-executor.js +4 -2
  11. package/dist/executors/pi-sdk-executor.js +46 -1
  12. package/dist/executors/pi-writer-tool-policy.js +57 -1
  13. package/dist/executors/shell-executor.js +107 -20
  14. package/dist/executors/workspace-write-snapshot.js +68 -0
  15. package/dist/governance/checks.js +1 -0
  16. package/dist/infrastructure/harness/atomic-write.js +23 -0
  17. package/dist/shared/dag-prompt-override.js +4 -5
  18. package/dist/shared/update/npm-client.js +33 -11
  19. package/dist/task/config-types.js +10 -0
  20. package/dist/task/contract/apply.js +11 -1
  21. package/dist/task/contract/constants.js +2 -0
  22. package/dist/task/contract/hash.js +3 -0
  23. package/dist/task/contract/observe.js +25 -4
  24. package/dist/task/contract/paths.js +2 -1
  25. package/dist/task/contract/project.js +15 -1
  26. package/dist/task/contract/schema.js +2 -0
  27. package/dist/task/contract/transaction.js +12 -0
  28. package/dist/task/source-prepare/completeness.js +188 -0
  29. package/dist/task/source-prepare/fragment-inventory.js +474 -0
  30. package/dist/task/source-prepare/index.js +3 -0
  31. package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
  32. package/dist/task/source-prepare/ledger-review.js +214 -0
  33. package/dist/task/source-prepare/ledger.js +545 -0
  34. package/dist/task/source-prepare/prepare.js +262 -1
  35. package/dist/task/source-prepare/semantic-intake.js +19 -3
  36. package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
  37. package/dist/task/source-prepare/types.js +22 -0
  38. package/dist/worker/cli.js +12 -26
  39. package/dist/worker/console/chat/chat-event-store.js +75 -5
  40. package/dist/worker/console/chat/context-panel.js +7 -0
  41. package/dist/worker/console/chat/deferred-turn.js +12 -0
  42. package/dist/worker/console/chat/pi-runtime.js +331 -18
  43. package/dist/worker/console/chat/provider-error.js +98 -0
  44. package/dist/worker/console/chat/routes.js +389 -56
  45. package/dist/worker/console/chat/session-stats.js +179 -0
  46. package/dist/worker/console/chat/session-store.js +93 -63
  47. package/dist/worker/console/chat/todos.js +115 -0
  48. package/dist/worker/console/chat/tool-preview.js +42 -0
  49. package/dist/worker/console/chat/turn-process.js +20 -55
  50. package/dist/worker/console/chat/user-questions.js +266 -0
  51. package/dist/worker/console/chat/workspace-landing.js +79 -0
  52. package/dist/worker/console/console-handoff.js +82 -0
  53. package/dist/worker/console/console-update-and-init.js +115 -0
  54. package/dist/worker/console/console-update-runtime.js +84 -0
  55. package/dist/worker/console/dag-execution-receipt.js +20 -2
  56. package/dist/worker/console/draft-store.js +49 -0
  57. package/dist/worker/console/native-directory-picker.js +13 -0
  58. package/dist/worker/console/operation-store.js +1 -1
  59. package/dist/worker/console/operator-actions.js +133 -7
  60. package/dist/worker/console/operator-surface-health.js +1 -0
  61. package/dist/worker/console/prd-intake-bridge.js +13 -0
  62. package/dist/worker/console/routes.js +312 -1
  63. package/dist/worker/console/security.js +4 -4
  64. package/dist/worker/console/server.js +583 -172
  65. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-Br92EGb7.js → abnfDiagram-N423BO3Z-Bs-CDAXM.js} +1 -1
  66. package/dist/worker/console/static/assets/{arc-oulImtQq.js → arc-CAkA3We3.js} +1 -1
  67. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-tyHc6aqO.js → architectureDiagram-T3A2C74G-DEmI_zqr.js} +1 -1
  68. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-CY86BSpT.js → blockDiagram-VBNYF7ZC-uDHANebE.js} +1 -1
  69. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BKKsDmNs.js → c4Diagram-5PPSVZJV-Bv97b4_B.js} +1 -1
  70. package/dist/worker/console/static/assets/channel-amxUpk7o.js +1 -0
  71. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-CXZdjl3B.js → chunk-2GRJ4B5K-shmQKsFz.js} +1 -1
  72. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-B-aIFDQ5.js → chunk-2Q5K7J3B-BAraNvcN.js} +1 -1
  73. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BDgAW_B2.js → chunk-5RXB4S5H-BirhxUop.js} +1 -1
  74. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-DABa4UPR.js → chunk-5VM5RSS4-C9LgUJpR.js} +1 -1
  75. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-aGbysVOx.js → chunk-6Q2QTUOP-DrU-s-t7.js} +1 -1
  76. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-B8MSZDVs.js → chunk-GF5L2VYU-Tx-H_FA2.js} +1 -1
  77. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-CpelV73g.js → chunk-JWPE2WC7-BjLtNFrR.js} +1 -1
  78. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-BE04ty3z.js → chunk-KBJHAD2P-UNLVwSsy.js} +1 -1
  79. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-BUxTkaaR.js → chunk-RYQCIY6F-CBEUX8XD.js} +1 -1
  80. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CYYBVKfX.js → chunk-XXDRQBXY-WTL7IZOq.js} +1 -1
  81. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-bejwBVIz.js +1 -0
  82. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-bejwBVIz.js +1 -0
  83. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CEQF_xmQ.js → cose-bilkent-JH36ORCC-CkHG6W3s.js} +1 -1
  84. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-CqpxN5IT.js → cynefin-VYW2F7L2-BRzFqTaL.js} +1 -1
  85. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-B3PzanVi.js → cynefinDiagram-MW4NZA55-2_CFp_i7.js} +1 -1
  86. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BSUGCNx1.js → dagre-VZM6K2ZE-BJtsmdkE.js} +1 -1
  87. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CdLevU5T.js → diagram-7IWD3JNH-DNEFFo6w.js} +1 -1
  88. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-BjpF_Kok.js → diagram-B4RE2ZJO-B_IWV7eo.js} +1 -1
  89. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-C4I6NJny.js → diagram-LBJQPF4R-DvvRx2dz.js} +1 -1
  90. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-C8hecCr5.js → diagram-Q27KOJAE-CsibsWLg.js} +1 -1
  91. package/dist/worker/console/static/assets/{diagram-UB23O5K3-Daod6tOS.js → diagram-UB23O5K3-les_djBQ.js} +1 -1
  92. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BvvmazGv.js → ebnfDiagram-BXEA7PRR-BEm2n7qJ.js} +1 -1
  93. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DeN_vfV4.js → erDiagram-JOGREHBK-BI7vHHVm.js} +1 -1
  94. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-D6dq1t9z.js → flowDiagram-UKHOOZJN-CUFCERrB.js} +1 -1
  95. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-DziIdNY4.js → ganttDiagram-PKOTCBZU-wxyLiGWt.js} +1 -1
  96. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-Dy4s5CXr.js → gitGraphDiagram-DS77QQ5N-Bt897K8Z.js} +1 -1
  97. package/dist/worker/console/static/assets/index-BHhUOTri.css +1 -0
  98. package/dist/worker/console/static/assets/index-DqJbO3-p.js +407 -0
  99. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-Czv5eYx2.js → infoDiagram-6WML65LV-DYNx_IPv.js} +1 -1
  100. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-Bsk3nFRT.js → ishikawaDiagram-WSZJBQD7-CzpLNEu6.js} +1 -1
  101. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DxGmNj5K.js → journeyDiagram-NVQOT4AX-97f9owNU.js} +1 -1
  102. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-CYCFqkO_.js → kanban-definition-27J2QSJJ-BxM9hyBn.js} +1 -1
  103. package/dist/worker/console/static/assets/{linear-B0YzRwrd.js → linear-ByuxcHvp.js} +1 -1
  104. package/dist/worker/console/static/assets/{mermaid.core-t3EZtIGh.js → mermaid.core-DwPGvpCv.js} +5 -5
  105. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-BTXpTv0T.js → mindmap-definition-FAOFIHXS-DCoqG9RT.js} +1 -1
  106. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DU8UkKqA.js → pegDiagram-VL7TDLO6-BLSBmBMx.js} +1 -1
  107. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DP4y8ohp.js → pieDiagram-7S7Q4E2Y-B0t_0oJW.js} +1 -1
  108. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-B07vNaYR.js → quadrantDiagram-CIZ2JOQS-sTzDk7Nt.js} +1 -1
  109. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-xDWktb2i.js → railroadDiagram-AXF67PYL-B3jRdATC.js} +1 -1
  110. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BLNMKqeS.js → requirementDiagram-LRYGKXZP-D-cTtXEN.js} +1 -1
  111. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-n0adalxH.js → sankeyDiagram-W5VNT64P-B25igJRE.js} +1 -1
  112. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BbnS-2DL.js → sequenceDiagram-SI44F4Z6-jW_lM1_D.js} +1 -1
  113. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-B4uPpCLu.js → sizeCapture-X5ZJPWSS-CrzTgsHE.js} +1 -1
  114. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA--MMbB0fX.js → stateDiagram-OKZ733FA-B01MvlqE.js} +1 -1
  115. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BvFKEtm2.js +1 -0
  116. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-BXUgp2QY.js → swimlanes-SLNWSIFB-YcF12FiU.js} +2 -2
  117. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DIB2eVg-.js +8 -0
  118. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CsaMxki7.js → timeline-definition-Z64GVDOM-ClnRcg2s.js} +1 -1
  119. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-C2IuG9iH.js → vennDiagram-T6HMQDX7-B6gr_z-q.js} +1 -1
  120. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-CmEWOXCW.js → wardleyDiagram-T6FBY63Y-CvSgguGH.js} +1 -1
  121. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-D_9LE0MG.js → xychartDiagram-ELKLHX3M-23OtSZCb.js} +1 -1
  122. package/dist/worker/console/static/index.html +2 -2
  123. package/dist/worker/console/static-src/app/console-types.js +68 -4
  124. package/dist/worker/console/static-src/app/useConsoleShell.js +30 -12
  125. package/dist/worker/console/static-src/app/useOperatorActions.js +41 -6
  126. package/dist/worker/console/static-src/app/useRecoveryConsole.js +10 -11
  127. package/dist/worker/console/static-src/app/useRunProgress.js +2 -1
  128. package/dist/worker/console/static-src/app/useTaskWizard.js +74 -2
  129. package/dist/worker/console/static-src/night/useNightBoard.js +8 -5
  130. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +141 -8
  131. package/dist/worker/console/static-src/operator-chat/compaction-message.js +79 -0
  132. package/dist/worker/console/static-src/operator-chat/details-dag-actions.js +122 -0
  133. package/dist/worker/console/static-src/operator-chat/refs.js +3 -0
  134. package/dist/worker/console/static-src/operator-chat/runtime-selection-labels.js +27 -0
  135. package/dist/worker/console/static-src/operator-chat/spatial-overlay.js +1 -2
  136. package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +25 -0
  137. package/dist/worker/console/static-src/operator-chat/turn-submission.js +3 -2
  138. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +181 -87
  139. package/dist/worker/console/static-src/operator-chat/useChatStream.js +159 -44
  140. package/dist/worker/console/static-src/operator-chat/useChatThread.js +177 -8
  141. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +63 -9
  142. package/dist/worker/console/static-src/operator-chat/useWorkspaceBrowserGate.js +4 -0
  143. package/dist/worker/console/static-src/operator-chat/workspace-layout-mode.js +3 -3
  144. package/dist/worker/console/static-src/shell/useWorkspaces.js +299 -0
  145. package/dist/worker/console/static-src/shell/workspace-route.js +339 -0
  146. package/dist/worker/console/workspace-context.js +234 -0
  147. package/dist/worker/console/workspace-registry.js +214 -0
  148. package/dist/worker/observability/init-runtime-activity.js +26 -0
  149. package/dist/worker/observe/node-input.js +88 -2
  150. package/dist/worker/observe/routes.js +188 -0
  151. package/dist/worker/observe/server.js +4 -0
  152. package/dist/worker/observe/static/api.js +29 -9
  153. package/dist/worker/observe/static/app.js +18 -70
  154. package/dist/worker/observe/static/dag-node-purpose.d.ts +6 -0
  155. package/dist/worker/observe/static/dag-node-purpose.js +203 -0
  156. package/dist/worker/observe/static/format.js +37 -0
  157. package/dist/worker/observe/static/index.html +6 -1
  158. package/dist/worker/observe/static/inspect-workspace.js +307 -0
  159. package/dist/worker/observe/static/operator-chrome.css +145 -20
  160. package/dist/worker/observe/static/operator-chrome.d.ts +20 -3
  161. package/dist/worker/observe/static/operator-chrome.js +330 -100
  162. package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
  163. package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
  164. package/dist/worker/observe/static/router.d.ts +46 -0
  165. package/dist/worker/observe/static/router.js +25 -1
  166. package/dist/worker/observe/static/state.d.ts +50 -0
  167. package/dist/worker/observe/static/state.js +174 -2
  168. package/dist/worker/observe/static/styles.css +357 -35
  169. package/dist/worker/observe/static/views/dag-graph.js +4 -2
  170. package/dist/worker/observe/static/views/dag-inspector.js +533 -79
  171. package/dist/worker/observe/static/views/dag.d.ts +13 -0
  172. package/dist/worker/observe/static/views/dag.js +6 -4
  173. package/dist/worker/observe/static/views/dashboard.js +6 -4
  174. package/dist/worker/observe/static/views/night.js +2 -2
  175. package/dist/worker/observe/static/views/pool.js +1 -0
  176. package/dist/worker/observe/static/views/run.js +3 -1
  177. package/dist/worker/observe/static/views/task.js +56 -1
  178. package/dist/workflows/dag/backend-test-case-coverage-analysis.js +186 -8
  179. package/dist/workflows/dag/backend-test-markdown-workflow.js +176 -1
  180. package/dist/workflows/dag/backend-test-pytest-collection.js +168 -16
  181. package/dist/workflows/dag/backend-test-result-contract.js +4 -0
  182. package/dist/workflows/dag/backend-test-scenario-param.js +339 -53
  183. package/dist/workflows/dag/backend-test-writer-completeness.js +28 -17
  184. package/dist/workflows/dag/dynamic-runtime/map.js +1 -0
  185. package/dist/workflows/dag/frontend-implementation-contract.js +88 -2
  186. package/dist/workflows/dag/frontend-plan-render.js +24 -0
  187. package/dist/workflows/dag/frontend-prewrite-gate.js +197 -0
  188. package/dist/workflows/dag/frontend-review-context.js +92 -10
  189. package/dist/workflows/dag/init-hybrid.js +239 -52
  190. package/dist/workflows/dag/interrupt-request.js +3 -3
  191. package/dist/workflows/dag/lifecycle.js +3 -3
  192. package/dist/workflows/dag/node-execution.js +45 -0
  193. package/dist/workflows/dag/types.js +62 -12
  194. package/docs/README.md +2 -0
  195. package/docs/architecture/evolution.md +45 -0
  196. package/docs/init-surface.manifest.json +1 -0
  197. package/docs/operations/local-development-environment.md +21 -0
  198. package/docs/templates/README.md +1 -1
  199. package/docs/templates/agent-dag.schema.json +18 -0
  200. package/docs/templates/backend-test-dag.json +267 -238
  201. package/docs/templates/frontend-implementation-contract.schema.json +681 -24
  202. package/harness.json +3 -3
  203. package/package.json +3 -1
  204. package/skills/loop-agent/references/hybrid-dag.md +7 -0
  205. package/dist/worker/console/static/assets/channel-TY36zt-i.js +0 -1
  206. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Dk7QCChM.js +0 -1
  207. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Dk7QCChM.js +0 -1
  208. package/dist/worker/console/static/assets/index-C3GgHg-g.css +0 -1
  209. package/dist/worker/console/static/assets/index-Ci8ksvBm.js +0 -406
  210. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BqOigMQ4.js +0 -1
  211. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Caxz9UA2.js +0 -8
  212. package/dist/worker/console/static-src/operator-chat/activity-rail-presentation.js +0 -73
  213. package/dist/worker/console/static-src/operator-chat/useActivityRailTransition.js +0 -59
@@ -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;
@@ -3570,71 +3577,386 @@ button.copy-command:focus-visible {
3570
3577
  }
3571
3578
 
3572
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,
3573
3589
  .prompt-restart-box {
3574
3590
  display: flex;
3575
3591
  flex-direction: column;
3576
- gap: 0.75rem;
3577
- padding: 0.5rem 0.25rem;
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;
3578
3656
  }
3579
3657
  .prompt-restart-field {
3580
3658
  display: flex;
3581
3659
  flex-direction: column;
3582
- gap: 0.35rem;
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);
3583
3846
  }
3584
3847
  .prompt-restart-textarea {
3585
3848
  width: 100%;
3586
3849
  min-height: 8rem;
3587
3850
  resize: vertical;
3588
3851
  box-sizing: border-box;
3589
- font-family: var(--mono-font, ui-monospace, SFMono-Regular, Menlo, monospace);
3590
- font-size: 12.5px;
3591
- line-height: 1.5;
3592
- white-space: pre;
3593
- overflow-wrap: normal;
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;
3594
3862
  overflow-x: auto;
3595
3863
  }
3596
- .prompt-restart-actions {
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 {
3597
3880
  display: flex;
3598
- gap: 0.5rem;
3881
+ flex-wrap: wrap;
3882
+ gap: var(--space-2);
3599
3883
  align-items: center;
3884
+ justify-content: flex-end;
3600
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,
3601
3901
  .prompt-restart-submit {
3602
- padding: 0.35rem 0.9rem;
3603
- font-size: 13.5px;
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;
3604
3919
  cursor: pointer;
3605
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,
3606
3947
  .prompt-restart-submit:disabled {
3607
3948
  opacity: 0.55;
3608
3949
  cursor: wait;
3950
+ transform: none;
3609
3951
  }
3610
3952
  .prompt-restart-status {
3611
3953
  margin: 0;
3612
- font-size: 13px;
3613
3954
  min-height: 1.2em;
3955
+ color: var(--body);
3956
+ font-size: 13px;
3614
3957
  white-space: pre-wrap;
3615
3958
  word-break: break-word;
3616
3959
  }
3617
3960
  .prompt-restart-status.prompt-restart-error {
3618
- color: var(--red, #c0392b);
3619
- }
3620
- .prompt-restart-readonly {
3621
- margin: 0;
3622
- padding: 0.5rem 0.6rem;
3623
- font-family: var(--mono-font, ui-monospace, SFMono-Regular, Menlo, monospace);
3624
- font-size: 12.5px;
3625
- line-height: 1.5;
3626
- white-space: pre;
3627
- overflow: auto;
3628
- border: 1px solid var(--border-color, rgba(125, 125, 125, 0.35));
3629
- border-radius: 6px;
3630
- max-height: 60vh;
3631
- }
3632
- .prompt-restart-mode {
3633
- display: flex;
3634
- align-items: center;
3635
- gap: 0.5rem;
3636
- }
3637
- .prompt-restart-mode-select {
3638
- max-width: 100%;
3639
- font-size: 13px;
3961
+ color: var(--red);
3640
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,