@tea-agent/loop-agent 0.41.1 → 0.42.0-next.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 (302) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +397 -5
  3. package/dist/adapters/context-transfer/optional-pi-handoff.js +31 -0
  4. package/dist/adapters/context-transfer/pi-session.js +61 -0
  5. package/dist/application/dag/generate-task-dag.js +75 -19
  6. package/dist/application/dag/run-dag.js +41 -0
  7. package/dist/application/task-lifecycle/advance.js +24 -5
  8. package/dist/application/task-lifecycle/observe.js +171 -17
  9. package/dist/application/task-lifecycle/plan-transitions.js +42 -7
  10. package/dist/application/task-lifecycle/recommendations.js +13 -2
  11. package/dist/build-stamp.json +3 -3
  12. package/dist/cli/command-definitions.js +19 -0
  13. package/dist/cli/program.js +29 -2
  14. package/dist/commands/client-recovery.js +3 -0
  15. package/dist/commands/dag-artifact.js +284 -0
  16. package/dist/commands/dag-context.js +184 -0
  17. package/dist/commands/dag-follow-up.js +138 -0
  18. package/dist/commands/dag-rerun-task.js +2 -0
  19. package/dist/commands/dag-rerun.js +206 -1
  20. package/dist/commands/init.js +27 -1
  21. package/dist/commands/task-advance.js +19 -0
  22. package/dist/executors/dag-pi-executor.js +4013 -86
  23. package/dist/executors/pi-executor.js +15 -4
  24. package/dist/executors/pi-read-budget-policy.js +239 -0
  25. package/dist/executors/pi-sdk-executor.js +3 -0
  26. package/dist/executors/shell-executor.js +978 -188
  27. package/dist/executors/shell-write-guard.js +7 -0
  28. package/dist/{worker → infrastructure}/console/app-data.js +4 -0
  29. package/dist/infrastructure/console/artifact-revision-store.js +430 -0
  30. package/dist/infrastructure/console/context-export-store.js +160 -0
  31. package/dist/infrastructure/console/dir-lock.js +132 -0
  32. package/dist/infrastructure/console/operation-store.js +417 -0
  33. package/dist/infrastructure/harness/artifact-store.js +10 -1
  34. package/dist/infrastructure/harness/atomic-write.js +12 -2
  35. package/dist/shared/context-transfer/artifact-revision.js +172 -0
  36. package/dist/shared/context-transfer.js +418 -0
  37. package/dist/shared/dag-failure-category.js +12 -0
  38. package/dist/shared/openspec-spec.js +70 -4
  39. package/dist/shared/operator/capabilities.js +21 -0
  40. package/dist/shared/operator/safe-run-summary.js +1 -0
  41. package/dist/shared/path-safety.js +93 -0
  42. package/dist/shared/preview.js +28 -4
  43. package/dist/task/config-types.js +107 -6
  44. package/dist/task/contract/adopt.js +4 -0
  45. package/dist/task/contract/import-revision.js +4 -0
  46. package/dist/task/contract/project.js +3 -0
  47. package/dist/task/contract/schema.js +2 -1
  48. package/dist/task/frontend-project-capability.js +203 -20
  49. package/dist/task/runtime.js +5 -2
  50. package/dist/task/source-prepare/build-draft.js +3 -3
  51. package/dist/task/source-prepare/fragment-inventory.js +64 -25
  52. package/dist/task/source-prepare/prepare.js +126 -21
  53. package/dist/task/source-prepare/semantic-intake.js +6 -2
  54. package/dist/task/source-references.js +22 -1
  55. package/dist/task/task-demand-routing.js +3 -0
  56. package/dist/worker/console/chat/chat-event-store.js +2 -2
  57. package/dist/worker/console/chat/model-resolver.js +7 -4
  58. package/dist/worker/console/chat/pi-runtime.js +86 -5
  59. package/dist/worker/console/chat/resource-preferences-store.js +1 -1
  60. package/dist/worker/console/chat/routes.js +136 -53
  61. package/dist/worker/console/chat/sdd-data-alignment.js +222 -0
  62. package/dist/worker/console/chat/session-catalog.js +2 -0
  63. package/dist/worker/console/chat/session-store.js +43 -1
  64. package/dist/worker/console/chat/shortcuts.js +18 -2
  65. package/dist/worker/console/chat/user-questions.js +1 -1
  66. package/dist/worker/console/console-update-runtime.js +1 -1
  67. package/dist/worker/console/context-transfer-diagnostics.js +198 -0
  68. package/dist/worker/console/dag-confirmation.js +1 -1
  69. package/dist/worker/console/dag-execution-receipt.js +1 -1
  70. package/dist/worker/console/doctor.js +1 -1
  71. package/dist/worker/console/draft-store.js +1 -1
  72. package/dist/worker/console/frontend-human-decision-adapter.js +19 -0
  73. package/dist/worker/console/frontend-split-operation-adapter.js +20 -0
  74. package/dist/worker/console/human-gate-token.js +1 -1
  75. package/dist/worker/console/index.js +6 -3
  76. package/dist/worker/console/interview/assessment.js +1 -1
  77. package/dist/worker/console/interview/session.js +1 -1
  78. package/dist/worker/console/operation-runner.js +45 -4
  79. package/dist/worker/console/operation-sse.js +1 -1
  80. package/dist/worker/console/operation-wait.js +1 -1
  81. package/dist/worker/console/operator-actions.js +273 -10
  82. package/dist/worker/console/operator-surface-health.js +1 -1
  83. package/dist/worker/console/operator-user-error.js +169 -0
  84. package/dist/worker/console/pi-plugins.js +57 -0
  85. package/dist/worker/console/pi-readiness.js +3 -2
  86. package/dist/worker/console/routes.js +637 -8
  87. package/dist/worker/console/security.js +35 -0
  88. package/dist/worker/console/server.js +29 -4
  89. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-D7oU983t.js → abnfDiagram-N423BO3Z-CcS17TBr.js} +1 -1
  90. package/dist/worker/console/static/assets/{arc-BrKSRdFS.js → arc-COptKq2S.js} +1 -1
  91. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CiXV7L56.js → architectureDiagram-T3A2C74G-h4LKMHjP.js} +1 -1
  92. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-D_Hs_gIG.js → blockDiagram-VBNYF7ZC-COA1MOH0.js} +1 -1
  93. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-DbM-Lqqh.js → c4Diagram-5PPSVZJV-DJUf0QPm.js} +1 -1
  94. package/dist/worker/console/static/assets/channel-DdBCaOJ6.js +1 -0
  95. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D1M8uqJw.js → chunk-2GRJ4B5K-mtWfKrUX.js} +1 -1
  96. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-4D3RFHT6.js → chunk-2Q5K7J3B-B8pXsxDQ.js} +1 -1
  97. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-CdwpY_n9.js → chunk-5RXB4S5H-ipKzByl1.js} +1 -1
  98. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BLeLZ9PG.js → chunk-5VM5RSS4-DYi3Ald_.js} +1 -1
  99. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-CeRNEMvc.js → chunk-6Q2QTUOP-DQtGYoty.js} +1 -1
  100. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CjkHP8Vy.js → chunk-GF5L2VYU-BU0qS2YV.js} +1 -1
  101. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-B54ZUQY-.js → chunk-JWPE2WC7-DVH9dIGE.js} +1 -1
  102. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-4bKaMVmx.js → chunk-KBJHAD2P-Dt60SmgM.js} +1 -1
  103. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-Cyjfznu_.js → chunk-RYQCIY6F-BoaUGuEY.js} +1 -1
  104. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CDN-zGFV.js → chunk-XXDRQBXY-_WHFDTp2.js} +1 -1
  105. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DZFra1GO.js +1 -0
  106. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DZFra1GO.js +1 -0
  107. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-HxJmz411.js → cose-bilkent-JH36ORCC-BxkbTIRd.js} +1 -1
  108. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DtSt5K2w.js → cynefin-VYW2F7L2-Bf2UVnoG.js} +1 -1
  109. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-VtkSpRmG.js → cynefinDiagram-MW4NZA55-Bo23q1J_.js} +1 -1
  110. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-Bj4DT4du.js → dagre-VZM6K2ZE-Dd_UU49i.js} +1 -1
  111. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Bpuk6BmP.js → diagram-7IWD3JNH-ebUa1a9y.js} +1 -1
  112. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-BHYGv_yO.js → diagram-B4RE2ZJO-BucthU8r.js} +1 -1
  113. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-DEx3WwnT.js → diagram-LBJQPF4R-BgqNpAkm.js} +1 -1
  114. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-Cj0dS5e8.js → diagram-Q27KOJAE-DC4q5NGa.js} +1 -1
  115. package/dist/worker/console/static/assets/{diagram-UB23O5K3-B97h8l21.js → diagram-UB23O5K3-CBqCaMeb.js} +1 -1
  116. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DMSFAhBd.js → ebnfDiagram-BXEA7PRR-CGtnbQ3-.js} +1 -1
  117. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DhVOCbt6.js → erDiagram-JOGREHBK-CG3LUao5.js} +1 -1
  118. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-GlakITWL.js → flowDiagram-UKHOOZJN-D2ZVgoFS.js} +1 -1
  119. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-VxPpu9eQ.js → ganttDiagram-PKOTCBZU-DoYFZiKt.js} +1 -1
  120. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-Bs_e5DRT.js → gitGraphDiagram-DS77QQ5N-CKoP1s6j.js} +1 -1
  121. package/dist/worker/console/static/assets/index-CAZ2fC_X.css +1 -0
  122. package/dist/worker/console/static/assets/index-vbTcFnFs.js +449 -0
  123. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BXYuU4Uw.js → infoDiagram-6WML65LV-Duofv8p2.js} +1 -1
  124. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-C34erCbU.js → ishikawaDiagram-WSZJBQD7-D2nlCkA1.js} +1 -1
  125. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DZCAiOU3.js → journeyDiagram-NVQOT4AX-Dd4IHdus.js} +1 -1
  126. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-C9gaTdUm.js → kanban-definition-27J2QSJJ-Bi20AOdt.js} +1 -1
  127. package/dist/worker/console/static/assets/{linear-CvI0Z17U.js → linear-D59YJ9kB.js} +1 -1
  128. package/dist/worker/console/static/assets/{mermaid.core-DMMSIx7j.js → mermaid.core-Bl13LpNa.js} +5 -5
  129. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-BKKP0EO6.js → mindmap-definition-FAOFIHXS-C6DLP5eY.js} +1 -1
  130. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-C3LiFbl5.js → pegDiagram-VL7TDLO6-BjO4cy64.js} +1 -1
  131. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-Bb3Om2Dz.js → pieDiagram-7S7Q4E2Y-D7i2qZTG.js} +1 -1
  132. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DNthMjzc.js → quadrantDiagram-CIZ2JOQS-Dx8o_h0y.js} +1 -1
  133. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-miFsr4Tv.js → railroadDiagram-AXF67PYL-B55orI_t.js} +1 -1
  134. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-yXUncmn6.js → requirementDiagram-LRYGKXZP-zWaehp6f.js} +1 -1
  135. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-DLeWKLak.js → sankeyDiagram-W5VNT64P-CcA-pjvD.js} +1 -1
  136. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CI3he1R3.js → sequenceDiagram-SI44F4Z6-BOFbzNHI.js} +1 -1
  137. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-B7jfDkS5.js → sizeCapture-X5ZJPWSS-BjAejah1.js} +1 -1
  138. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-BmrZod7J.js → stateDiagram-OKZ733FA-DXYwxJwZ.js} +1 -1
  139. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Clg3V9t1.js +1 -0
  140. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CDOlHVSY.js → swimlanes-SLNWSIFB-OYiOch8n.js} +2 -2
  141. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DX1dxAAW.js +8 -0
  142. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-Cz-XX1gy.js → timeline-definition-Z64GVDOM-cZfH3nmU.js} +1 -1
  143. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-caV4cI8C.js → vennDiagram-T6HMQDX7-BDE7b3E1.js} +1 -1
  144. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-dImPlnIO.js → wardleyDiagram-T6FBY63Y-kyyGy9WJ.js} +1 -1
  145. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-CtRYVJcn.js → xychartDiagram-ELKLHX3M-CJj6VTog.js} +1 -1
  146. package/dist/worker/console/static/index.html +7 -2
  147. package/dist/worker/console/static-src/active-run-badge.js +17 -0
  148. package/dist/worker/console/static-src/app/useOperatorActions.js +3 -2
  149. package/dist/worker/console/static-src/app/useRecoveryConsole.js +5 -5
  150. package/dist/worker/console/static-src/operator-chat/input-history.js +8 -6
  151. package/dist/worker/console/static-src/operator-chat/runtime-snapshot-store.js +10 -0
  152. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +258 -23
  153. package/dist/worker/console/static-src/operator-chat/useChatThread.js +112 -4
  154. package/dist/worker/console/static-src/operator-chat/useComposer.js +13 -4
  155. package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +29 -6
  156. package/dist/worker/console/static-src/operator-chat/useRuntimeSnapshot.js +8 -2
  157. package/dist/worker/console/static-src/shell/console-update-reload.js +52 -0
  158. package/dist/worker/console/static-src/shell/workspace-route.js +11 -0
  159. package/dist/worker/console/workspace-context.js +142 -2
  160. package/dist/worker/console/workspace-registry.js +2 -2
  161. package/dist/worker/continuation/worker-continuation.js +278 -0
  162. package/dist/worker/materialize/frontend-split-task-materializer.js +72 -0
  163. package/dist/worker/observe/health.js +1 -1
  164. package/dist/worker/observe/node-transparency.js +572 -0
  165. package/dist/worker/observe/routes.js +55 -1
  166. package/dist/worker/observe/static/api.js +69 -5
  167. package/dist/worker/observe/static/dag-context-reason-labels.d.ts +9 -0
  168. package/dist/worker/observe/static/dag-context-reason-labels.js +120 -0
  169. package/dist/worker/observe/static/dag-helpers.js +4 -2
  170. package/dist/worker/observe/static/dag-node-purpose.js +5 -0
  171. package/dist/worker/observe/static/inspect-workspace.js +23 -0
  172. package/dist/worker/observe/static/kpi.js +2 -2
  173. package/dist/worker/observe/static/operator-chrome.d.ts +10 -2
  174. package/dist/worker/observe/static/operator-chrome.js +37 -23
  175. package/dist/worker/observe/static/relations.js +2 -2
  176. package/dist/worker/observe/static/router.d.ts +12 -1
  177. package/dist/worker/observe/static/router.js +48 -6
  178. package/dist/worker/observe/static/run-processing.js +4 -2
  179. package/dist/worker/observe/static/shell-chrome.js +2 -2
  180. package/dist/worker/observe/static/state.js +8 -1
  181. package/dist/worker/observe/static/styles.css +1092 -86
  182. package/dist/worker/observe/static/views/dag-inspector.js +1228 -64
  183. package/dist/worker/observe/static/views/dag.js +10 -2
  184. package/dist/worker/observe/static/views/dags.js +3 -1
  185. package/dist/worker/observe/static/views/dashboard.js +14 -6
  186. package/dist/worker/observe/static/views/pool.js +7 -2
  187. package/dist/worker/observe/static/views/run.js +12 -3
  188. package/dist/worker/observe/static/views/session-timeline.js +142 -18
  189. package/dist/worker/observe/static/views/task.js +7 -2
  190. package/dist/worker/outcomes/adapters.js +19 -0
  191. package/dist/worker/outcomes/types.js +1 -0
  192. package/dist/worker/pool/attempt-lease.js +97 -66
  193. package/dist/worker/pool/begin-attempt-with-lease.js +1 -0
  194. package/dist/worker/pool/reconcile.js +46 -1
  195. package/dist/worker/pool/run-store.js +2 -0
  196. package/dist/worker/pool/state-projection.js +2 -0
  197. package/dist/worker/task-spec/workflow-routing.js +8 -3
  198. package/dist/workflows/dag/artifact-bindings.js +149 -0
  199. package/dist/workflows/dag/artifact-revision-schema-registry.js +31 -0
  200. package/dist/workflows/dag/backend-test-case-coverage-analysis.js +215 -28
  201. package/dist/workflows/dag/backend-test-markdown-workflow.js +13 -1
  202. package/dist/workflows/dag/backend-test-plan-protocol.js +106 -0
  203. package/dist/workflows/dag/backend-test-scenario-param.js +172 -25
  204. package/dist/workflows/dag/backend-test-scenario-partitions.js +62 -1
  205. package/dist/workflows/dag/backend-test-writer-completeness.js +104 -12
  206. package/dist/workflows/dag/budget-enforcement.js +10 -0
  207. package/dist/workflows/dag/context-receipt.js +305 -0
  208. package/dist/workflows/dag/context-transfer/context-bundle.js +423 -0
  209. package/dist/workflows/dag/context-transfer/operator-actions.js +61 -0
  210. package/dist/workflows/dag/context-transfer/renderers.js +93 -0
  211. package/dist/workflows/dag/contract-validator-registrations.js +1 -2
  212. package/dist/workflows/dag/dag-retry-schema.js +138 -0
  213. package/dist/workflows/dag/frontend-closeout.js +221 -0
  214. package/dist/workflows/dag/frontend-design-policy.js +400 -0
  215. package/dist/workflows/dag/frontend-human-decision.js +182 -0
  216. package/dist/workflows/dag/frontend-implementation-contract.js +1237 -192
  217. package/dist/workflows/dag/frontend-plan-render.js +2 -1
  218. package/dist/workflows/dag/frontend-prewrite-gate.js +256 -350
  219. package/dist/workflows/dag/frontend-provider-capability-matrix.js +159 -0
  220. package/dist/workflows/dag/frontend-recovery-capsule.js +455 -0
  221. package/dist/workflows/dag/frontend-recovery-controller.js +226 -0
  222. package/dist/workflows/dag/frontend-recovery-lineage.js +178 -0
  223. package/dist/workflows/dag/frontend-recovery-plan.js +21 -10
  224. package/dist/workflows/dag/frontend-recovery-run.js +166 -34
  225. package/dist/workflows/dag/frontend-repair.js +1 -432
  226. package/dist/workflows/dag/frontend-review-context.js +261 -15
  227. package/dist/workflows/dag/frontend-review-findings.js +270 -0
  228. package/dist/workflows/dag/frontend-shadow-dual-write.js +941 -0
  229. package/dist/workflows/dag/frontend-shape-capsule-store.js +191 -0
  230. package/dist/workflows/dag/frontend-shape-facts.js +419 -0
  231. package/dist/workflows/dag/frontend-shape.js +435 -0
  232. package/dist/workflows/dag/frontend-source-fidelity-ledger.js +108 -0
  233. package/dist/workflows/dag/frontend-split-application-service.js +203 -0
  234. package/dist/workflows/dag/frontend-split-orchestrator.js +899 -0
  235. package/dist/workflows/dag/frontend-typed-event-store.js +452 -0
  236. package/dist/workflows/dag/frontend-typed-event-transaction.js +180 -0
  237. package/dist/workflows/dag/frontend-verification-trace.js +252 -25
  238. package/dist/workflows/dag/frontend-worktree-diff.js +250 -17
  239. package/dist/workflows/dag/frontend-writer-admission.js +319 -0
  240. package/dist/workflows/dag/frontend-writer-rollback.js +32 -0
  241. package/dist/workflows/dag/frontend-writer-status.js +256 -0
  242. package/dist/workflows/dag/init-hybrid.js +1174 -562
  243. package/dist/workflows/dag/interrupt-request.js +7 -0
  244. package/dist/workflows/dag/node-execution.js +940 -31
  245. package/dist/workflows/dag/path-safety.js +1 -0
  246. package/dist/workflows/dag/prompt.js +99 -7
  247. package/dist/workflows/dag/recovery-lease.js +170 -0
  248. package/dist/workflows/dag/report.js +37 -1
  249. package/dist/workflows/dag/rerun-feedback.js +315 -1
  250. package/dist/workflows/dag/rerun-plan.js +568 -3
  251. package/dist/workflows/dag/rerun-run.js +642 -18
  252. package/dist/workflows/dag/rerun-task.js +251 -13
  253. package/dist/workflows/dag/retry-policy.js +219 -104
  254. package/dist/workflows/dag/runner.js +596 -121
  255. package/dist/workflows/dag/scheduler.js +133 -20
  256. package/dist/workflows/dag/skill-snapshot.js +17 -0
  257. package/dist/workflows/dag/types.js +426 -22
  258. package/dist/workflows/dag/validate.js +28 -12
  259. package/docs/architecture/runtime-boundaries.md +6 -6
  260. package/docs/architecture/worker-and-feature.md +1 -1
  261. package/docs/examples/README.md +5 -0
  262. package/docs/init-surface.manifest.json +30 -12
  263. package/docs/skills/vetted-skill-registry.md +4 -2
  264. package/docs/templates/README.md +2 -0
  265. package/docs/templates/agent-dag-report.schema.json +8 -2
  266. package/docs/templates/agent-dag.schema.json +33 -1
  267. package/docs/templates/backend-test-dag.json +23 -20
  268. package/docs/templates/frontend-implementation-contract.schema.json +4 -1
  269. package/docs/templates/frontend-implementation-dag.json +89 -0
  270. package/docs/templates/product-line/task.yaml +1 -1
  271. package/docs/templates/spec-registry.schema.json +45 -0
  272. package/harness.json +1 -1
  273. package/package.json +6 -3
  274. package/skills/frontend-bounded-implement/SKILL.md +15 -14
  275. package/skills/frontend-bounded-implement/references/code-standards.md +19 -0
  276. package/skills/frontend-contract/SKILL.md +23 -0
  277. package/skills/frontend-contract/references/contract-protocol.md +34 -0
  278. package/skills/frontend-design-review/SKILL.md +22 -41
  279. package/skills/frontend-plan/SKILL.md +26 -0
  280. package/skills/frontend-plan/references/decision-contract.md +37 -0
  281. package/skills/frontend-plan/references/design-decisions.md +17 -0
  282. package/skills/frontend-review/SKILL.md +20 -15
  283. package/skills/frontend-review/references/review-findings.md +6 -7
  284. package/skills/frontend-scout/SKILL.md +25 -0
  285. package/skills/frontend-scout/references/design-evidence.md +16 -0
  286. package/skills/frontend-scout/references/scout-evidence.md +23 -0
  287. package/skills/frontend-verification/SKILL.md +1 -1
  288. package/skills/loop-agent/references/command-reference.md +7 -0
  289. package/skills/loop-agent/references/hybrid-dag.md +2 -2
  290. package/dist/worker/console/operation-store.js +0 -169
  291. package/dist/worker/console/static/assets/channel-D1xajGpe.js +0 -1
  292. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BmuGTfRr.js +0 -1
  293. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BmuGTfRr.js +0 -1
  294. package/dist/worker/console/static/assets/index-BLzcAykx.js +0 -451
  295. package/dist/worker/console/static/assets/index-Cs9JUSPs.css +0 -1
  296. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-D9ykKEWP.js +0 -1
  297. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BvPOXALT.js +0 -8
  298. package/skills/frontend-implementation/SKILL.md +0 -52
  299. package/skills/frontend-implementation/references/code-standards.md +0 -33
  300. package/skills/frontend-implementation/references/design-spec.md +0 -56
  301. package/skills/frontend-implementation/references/node-contracts.md +0 -31
  302. /package/dist/{worker → infrastructure}/console/repo-fingerprint.js +0 -0
@@ -73,8 +73,14 @@ body[data-shell="observe-console"] {
73
73
  color: var(--ink);
74
74
  /* Keep system-ui first for shell contract tests; Chinese fonts follow. */
75
75
  font-family:
76
- system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans GB",
77
- "Noto Sans SC", BlinkMacSystemFont, sans-serif;
76
+ system-ui,
77
+ -apple-system,
78
+ "Segoe UI",
79
+ "PingFang SC",
80
+ "Hiragino Sans GB",
81
+ "Noto Sans SC",
82
+ BlinkMacSystemFont,
83
+ sans-serif;
78
84
  font-size: 14px;
79
85
  line-height: 1.5;
80
86
  }
@@ -994,10 +1000,9 @@ body[data-shell="observe-console"] .panel h3,
994
1000
  }
995
1001
  .feature-decision-row {
996
1002
  display: grid;
997
- grid-template-columns: minmax(120px, 0.9fr) minmax(88px, 0.55fr) minmax(
998
- 0,
999
- 1.6fr
1000
- ) auto;
1003
+ grid-template-columns:
1004
+ minmax(120px, 0.9fr) minmax(88px, 0.55fr) minmax(0, 1.6fr)
1005
+ auto;
1001
1006
  align-items: center;
1002
1007
  gap: var(--space-3);
1003
1008
  padding: 12px 14px;
@@ -1291,12 +1296,14 @@ body.is-resizing-dag-graph {
1291
1296
  color: var(--body);
1292
1297
  cursor: pointer;
1293
1298
  }
1294
- .dag-inspector-close:hover,
1299
+ .dag-inspector-close:hover:not(:disabled),
1295
1300
  .dag-inspector-close:focus-visible {
1296
1301
  border-color: var(--orange);
1297
1302
  color: var(--orange-active);
1298
1303
  background: var(--orange-soft);
1299
1304
  outline: none;
1305
+ box-shadow: none;
1306
+ transform: none;
1300
1307
  }
1301
1308
  .dag-inspector-tabs {
1302
1309
  display: flex;
@@ -1307,13 +1314,17 @@ body.is-resizing-dag-graph {
1307
1314
  border: 1px solid var(--hairline);
1308
1315
  border-radius: var(--radius-pill);
1309
1316
  background: var(--surface);
1310
- width: fit-content;
1317
+ width: 100%;
1311
1318
  max-width: 100%;
1312
- flex-wrap: wrap;
1319
+ flex-wrap: nowrap;
1320
+ overflow-x: auto;
1321
+ overscroll-behavior-x: contain;
1322
+ scrollbar-width: thin;
1313
1323
  }
1314
1324
  .dag-inspector-tab {
1325
+ flex: 0 0 auto;
1315
1326
  min-height: 30px;
1316
- padding: 0 12px;
1327
+ padding: 0 8px;
1317
1328
  border: 1px solid transparent;
1318
1329
  border-radius: var(--radius-pill);
1319
1330
  background: transparent;
@@ -1322,15 +1333,21 @@ body.is-resizing-dag-graph {
1322
1333
  font-weight: 700;
1323
1334
  cursor: pointer;
1324
1335
  }
1325
- .dag-inspector-tab:hover,
1336
+ .dag-inspector-tab:hover:not(:disabled),
1326
1337
  .dag-inspector-tab:focus-visible {
1327
1338
  color: var(--ink);
1339
+ background: transparent;
1340
+ border-color: transparent;
1328
1341
  outline: none;
1342
+ box-shadow: none;
1329
1343
  }
1330
- .dag-inspector-tab[aria-selected="true"] {
1344
+ .dag-inspector-tab[aria-selected="true"],
1345
+ .dag-inspector-tab[aria-selected="true"]:hover,
1346
+ .dag-inspector-tab[aria-selected="true"]:focus-visible {
1331
1347
  border-color: transparent;
1332
1348
  background: var(--ink);
1333
1349
  color: #fff;
1350
+ box-shadow: none;
1334
1351
  }
1335
1352
  .dag-inspector-content {
1336
1353
  min-height: 0;
@@ -1947,9 +1964,110 @@ body.is-resizing-dag-graph {
1947
1964
  .process-timeline-toolbar {
1948
1965
  display: flex;
1949
1966
  flex-wrap: wrap;
1967
+ align-items: center;
1950
1968
  gap: 8px;
1951
1969
  margin-bottom: var(--space-2);
1952
1970
  }
1971
+ .process-timeline-autoscroll-dock {
1972
+ position: sticky;
1973
+ top: calc(100% - 42px);
1974
+ z-index: 4;
1975
+ display: flex;
1976
+ justify-content: flex-end;
1977
+ height: 0;
1978
+ margin: 0 2px;
1979
+ pointer-events: none;
1980
+ }
1981
+ .process-timeline-autoscroll {
1982
+ position: relative;
1983
+ pointer-events: auto;
1984
+ display: inline-flex;
1985
+ align-items: center;
1986
+ justify-content: center;
1987
+ gap: 7px;
1988
+ width: 36px;
1989
+ height: 36px;
1990
+ padding: 0;
1991
+ border: 1px solid var(--hairline-strong);
1992
+ border-radius: 50%;
1993
+ background: color-mix(in srgb, var(--surface) 94%, var(--canvas));
1994
+ color: var(--body);
1995
+ box-shadow: 0 8px 24px rgb(38 37 30 / 14%);
1996
+ font-size: 14px;
1997
+ cursor: pointer;
1998
+ backdrop-filter: blur(10px);
1999
+ }
2000
+ .process-timeline-autoscroll::after {
2001
+ position: absolute;
2002
+ right: 0;
2003
+ bottom: calc(100% + 8px);
2004
+ padding: 6px 8px;
2005
+ border: 1px solid var(--hairline-strong);
2006
+ border-radius: var(--radius-sm);
2007
+ background: var(--ink);
2008
+ color: #fff;
2009
+ box-shadow: 0 6px 16px rgb(38 37 30 / 14%);
2010
+ content: attr(data-tooltip);
2011
+ font-size: 11px;
2012
+ font-weight: 650;
2013
+ line-height: 1;
2014
+ white-space: nowrap;
2015
+ opacity: 0;
2016
+ transform: translateY(3px);
2017
+ pointer-events: none;
2018
+ transition: opacity 120ms ease, transform 120ms ease;
2019
+ }
2020
+ .process-timeline-autoscroll:hover::after,
2021
+ .process-timeline-autoscroll:focus-visible::after {
2022
+ opacity: 1;
2023
+ transform: translateY(0);
2024
+ }
2025
+ .process-timeline-autoscroll:hover,
2026
+ .process-timeline-autoscroll:focus-visible {
2027
+ border-color: var(--orange);
2028
+ color: var(--orange-active);
2029
+ outline: none;
2030
+ box-shadow: 0 8px 24px rgb(38 37 30 / 16%), 0 0 0 3px var(--orange-soft);
2031
+ }
2032
+ .process-timeline-autoscroll.is-active {
2033
+ border-color: var(--ink);
2034
+ background: var(--ink);
2035
+ color: #fff;
2036
+ }
2037
+ .process-timeline-autoscroll.is-active:hover,
2038
+ .process-timeline-autoscroll.is-active:focus-visible {
2039
+ border-color: var(--orange);
2040
+ background: var(--ink);
2041
+ color: #fff;
2042
+ }
2043
+ .process-timeline-autoscroll-signal {
2044
+ width: 5px;
2045
+ height: 5px;
2046
+ border-radius: 50%;
2047
+ background: var(--muted-soft);
2048
+ }
2049
+ .process-timeline-autoscroll.is-active .process-timeline-autoscroll-signal {
2050
+ background: var(--orange);
2051
+ box-shadow: 0 0 0 4px rgb(245 78 0 / 16%);
2052
+ animation: process-timeline-live-pulse 1.8s ease-out infinite;
2053
+ }
2054
+ @keyframes process-timeline-live-pulse {
2055
+ 0%, 55%, 100% { box-shadow: 0 0 0 4px rgb(245 78 0 / 16%); }
2056
+ 75% { box-shadow: 0 0 0 7px rgb(245 78 0 / 0%); }
2057
+ }
2058
+ @media (prefers-reduced-motion: reduce) {
2059
+ .process-timeline-autoscroll.is-active .process-timeline-autoscroll-signal {
2060
+ animation: none;
2061
+ }
2062
+ .process-timeline-autoscroll::after {
2063
+ transition: none;
2064
+ }
2065
+ }
2066
+ .process-timeline-filter-group {
2067
+ display: inline-flex;
2068
+ flex-wrap: wrap;
2069
+ gap: 4px;
2070
+ }
1953
2071
  .process-timeline-toggle {
1954
2072
  min-height: 28px;
1955
2073
  padding: 0 10px;
@@ -2295,6 +2413,152 @@ body.is-resizing-dag-graph {
2295
2413
  color: var(--danger, #b42318);
2296
2414
  font-size: 13px;
2297
2415
  }
2416
+ .node-transparency-root {
2417
+ display: flex;
2418
+ flex-direction: column;
2419
+ gap: var(--space-3);
2420
+ }
2421
+ .node-transparency-omission {
2422
+ padding: var(--space-3);
2423
+ border: 1px solid var(--hairline);
2424
+ border-left: 3px solid var(--orange);
2425
+ border-radius: var(--radius-md);
2426
+ background: var(--orange-soft);
2427
+ }
2428
+ .node-transparency-omission h4,
2429
+ .node-transparency-omission p {
2430
+ margin: 0;
2431
+ }
2432
+ .node-transparency-omission p {
2433
+ margin-top: var(--space-2);
2434
+ }
2435
+ .node-artifact-inventory {
2436
+ margin-bottom: var(--space-3);
2437
+ }
2438
+ .node-artifact-card {
2439
+ margin-top: var(--space-3);
2440
+ padding: var(--space-3);
2441
+ border: 1px solid var(--hairline);
2442
+ border-radius: var(--radius-md);
2443
+ background: var(--surface-2, #f3f1ec);
2444
+ }
2445
+ .node-artifact-card.is-consumed {
2446
+ border-left: 3px solid var(--blue, #2563eb);
2447
+ }
2448
+ .artifact-content-preview {
2449
+ overflow: hidden;
2450
+ margin-top: 10px;
2451
+ border: 1px solid var(--hairline);
2452
+ border-radius: 9px;
2453
+ background: var(--surface);
2454
+ }
2455
+ .artifact-content-preview > summary {
2456
+ display: flex;
2457
+ align-items: center;
2458
+ gap: 7px;
2459
+ min-height: 36px;
2460
+ padding: 0 10px;
2461
+ color: var(--body);
2462
+ font-size: 11px;
2463
+ font-weight: 800;
2464
+ cursor: pointer;
2465
+ list-style: none;
2466
+ }
2467
+ .artifact-content-preview > summary::-webkit-details-marker {
2468
+ display: none;
2469
+ }
2470
+ .artifact-content-preview > summary::after {
2471
+ margin-left: auto;
2472
+ font-size: 14px;
2473
+ content: "⌄";
2474
+ transition: transform var(--transition-fast);
2475
+ }
2476
+ .artifact-content-preview[open] > summary::after {
2477
+ transform: rotate(180deg);
2478
+ }
2479
+ .artifact-content-preview > summary:hover,
2480
+ .artifact-content-preview > summary:focus-visible {
2481
+ background: var(--canvas-soft);
2482
+ color: var(--ink);
2483
+ outline: none;
2484
+ }
2485
+ .artifact-content-preview > summary i {
2486
+ color: var(--orange-active);
2487
+ font-size: 15px;
2488
+ }
2489
+ .artifact-content-preview-body {
2490
+ padding: 10px;
2491
+ border-top: 1px solid var(--hairline);
2492
+ background: color-mix(in srgb, var(--canvas-soft) 52%, var(--surface));
2493
+ }
2494
+ .artifact-content-preview-body > :first-child {
2495
+ margin-top: 0;
2496
+ }
2497
+ .artifact-content-preview-body > :last-child {
2498
+ margin-bottom: 0;
2499
+ }
2500
+ .artifact-content-preview-meta {
2501
+ display: flex;
2502
+ align-items: baseline;
2503
+ justify-content: space-between;
2504
+ gap: 10px;
2505
+ margin-bottom: 8px;
2506
+ color: var(--muted);
2507
+ font-size: 9px;
2508
+ }
2509
+ .artifact-content-preview-meta code {
2510
+ min-width: 0;
2511
+ overflow-wrap: anywhere;
2512
+ color: var(--ink);
2513
+ font-size: 10px;
2514
+ }
2515
+ .artifact-content-preview-code,
2516
+ .artifact-content-preview-document {
2517
+ max-height: 320px;
2518
+ overflow: auto;
2519
+ overscroll-behavior: contain;
2520
+ border: 1px solid color-mix(in srgb, var(--hairline) 78%, transparent);
2521
+ border-radius: 7px;
2522
+ background: var(--surface);
2523
+ }
2524
+ .artifact-content-preview-code {
2525
+ margin: 0;
2526
+ padding: 10px;
2527
+ white-space: pre-wrap;
2528
+ word-break: break-word;
2529
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
2530
+ font-size: 10px;
2531
+ line-height: 1.55;
2532
+ }
2533
+ .artifact-content-preview-document {
2534
+ padding: 10px;
2535
+ }
2536
+ .artifact-content-preview-error,
2537
+ .artifact-content-preview-unavailable,
2538
+ .artifact-content-preview-note {
2539
+ margin: 0;
2540
+ font-size: 10px;
2541
+ line-height: 1.5;
2542
+ }
2543
+ .artifact-content-preview-error {
2544
+ color: var(--danger, #b42318);
2545
+ }
2546
+ .artifact-content-preview-unavailable,
2547
+ .artifact-content-preview-note {
2548
+ color: var(--muted);
2549
+ }
2550
+ .artifact-content-preview-note {
2551
+ margin-top: 7px;
2552
+ }
2553
+ .artifact-content-preview-full-cta {
2554
+ display: flex;
2555
+ align-items: center;
2556
+ gap: 6px;
2557
+ margin: 7px 0 0;
2558
+ font-size: 10px;
2559
+ line-height: 1.5;
2560
+ color: var(--muted);
2561
+ }
2298
2562
  .spec-evidence-summary {
2299
2563
  margin: var(--space-2) 0 0;
2300
2564
  color: var(--body);
@@ -3644,9 +3908,6 @@ button.copy-command:focus-visible {
3644
3908
  flex-direction: column;
3645
3909
  min-height: 0;
3646
3910
  }
3647
- #dag-inspector-panel-prompt-restart:has(.prompt-restart-panel.is-readonly) {
3648
- overflow: hidden;
3649
- }
3650
3911
  .prompt-restart-panel,
3651
3912
  .prompt-restart-box {
3652
3913
  display: flex;
@@ -3716,94 +3977,806 @@ button.copy-command:focus-visible {
3716
3977
  font-size: 12px;
3717
3978
  line-height: 1.5;
3718
3979
  }
3719
- .prompt-restart-field {
3980
+
3981
+ .dag-inspector-content[data-inspector-tab="prompt-restart"] {
3720
3982
  display: flex;
3721
3983
  flex-direction: column;
3722
- gap: 6px;
3723
- min-width: 0;
3984
+ gap: 14px;
3985
+ background: color-mix(in srgb, var(--canvas-soft) 72%, var(--surface));
3724
3986
  }
3725
- .prompt-restart-field.is-hidden,
3726
- .prompt-restart-prompt-card.is-hidden {
3727
- display: none;
3987
+ .dag-action-page-intro,
3988
+ .dag-action-card,
3989
+ .dag-action-export-zone {
3990
+ flex: 0 0 auto;
3728
3991
  }
3729
- .prompt-restart-label {
3730
- color: var(--ink);
3731
- font-size: 12px;
3732
- font-weight: 700;
3733
- letter-spacing: 0.01em;
3992
+ .dag-action-page-intro {
3993
+ display: flex;
3994
+ align-items: flex-start;
3995
+ justify-content: space-between;
3996
+ gap: 16px;
3997
+ padding: 2px 2px 4px;
3734
3998
  }
3735
- .prompt-restart-hint {
3999
+ .dag-action-page-intro h4,
4000
+ .dag-action-page-intro p {
3736
4001
  margin: 0;
3737
- color: var(--muted);
3738
- font-size: 12px;
3739
- line-height: 1.45;
3740
4002
  }
3741
- .prompt-restart-candidate-select {
3742
- display: block;
3743
- width: 100%;
3744
- min-width: 0;
4003
+ .dag-action-page-intro h4 {
4004
+ margin-top: 2px;
4005
+ font-size: 19px;
4006
+ line-height: 1.25;
3745
4007
  }
3746
- .prompt-restart-candidate-select .custom-select-trigger {
3747
- width: 100%;
4008
+ .dag-action-page-intro p {
4009
+ margin-top: 5px;
4010
+ color: var(--body);
4011
+ font-size: 12px;
3748
4012
  }
3749
- .prompt-restart-candidate-select .custom-select-menu {
3750
- z-index: 6;
4013
+ .dag-action-eyebrow {
4014
+ display: block;
4015
+ color: var(--orange-active);
4016
+ font-size: 9px;
4017
+ font-weight: 800;
4018
+ letter-spacing: 0.13em;
4019
+ text-transform: uppercase;
3751
4020
  }
3752
- .prompt-restart-mode-switch {
3753
- display: flex;
3754
- width: fit-content;
3755
- max-width: 100%;
3756
- gap: 4px;
3757
- padding: 4px;
4021
+ .dag-action-node-state {
4022
+ flex: 0 0 auto;
4023
+ padding: 4px 8px;
3758
4024
  border: 1px solid var(--hairline);
3759
4025
  border-radius: var(--radius-pill);
3760
4026
  background: var(--surface);
3761
- }
3762
- #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option,
3763
- .prompt-restart-mode-option {
3764
- appearance: none;
3765
- display: inline-flex;
3766
- align-items: center;
3767
- justify-content: center;
3768
- flex: 0 0 auto;
3769
- width: auto;
3770
- min-height: 30px;
3771
- height: 30px;
3772
- padding: 0 12px;
3773
- border: 1px solid transparent;
3774
- border-radius: var(--radius-pill);
3775
- background: transparent;
3776
4027
  color: var(--muted);
3777
- font-size: 12px;
3778
- font-weight: 700;
3779
- line-height: 1;
3780
- letter-spacing: 0;
3781
- white-space: nowrap;
3782
- box-shadow: none;
3783
- transform: none;
3784
- cursor: pointer;
4028
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
4029
+ font-size: 9px;
4030
+ font-weight: 800;
4031
+ letter-spacing: 0.05em;
4032
+ text-transform: uppercase;
3785
4033
  }
3786
- #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option:hover,
3787
- #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option:focus-visible,
3788
- .prompt-restart-mode-option:hover,
3789
- .prompt-restart-mode-option:focus-visible {
3790
- color: var(--ink);
3791
- background: var(--surface-muted);
3792
- border-color: transparent;
3793
- outline: none;
3794
- box-shadow: none;
3795
- transform: none;
4034
+ .dag-action-card {
4035
+ overflow: hidden;
4036
+ border: 1px solid var(--hairline);
4037
+ border-radius: 13px;
4038
+ background: var(--surface);
4039
+ box-shadow: 0 4px 14px rgb(38 37 30 / 4%);
3796
4040
  }
3797
- #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option.is-selected,
3798
- .prompt-restart-mode-option.is-selected {
3799
- background: var(--ink);
3800
- color: #fff;
3801
- border-color: transparent;
4041
+ .dag-action-card-header {
4042
+ display: grid;
4043
+ grid-template-columns: 38px minmax(0, 1fr);
4044
+ gap: 12px;
4045
+ align-items: start;
4046
+ padding: 14px 15px;
4047
+ border-bottom: 1px solid var(--hairline);
4048
+ background: color-mix(in srgb, var(--canvas-soft) 68%, var(--surface));
4049
+ }
4050
+ .dag-action-card-icon {
4051
+ display: grid;
4052
+ place-items: center;
4053
+ width: 38px;
4054
+ height: 38px;
4055
+ border: 1px solid color-mix(in srgb, var(--orange) 24%, var(--hairline));
4056
+ border-radius: 10px;
4057
+ background: var(--orange-soft);
4058
+ color: var(--orange-active);
4059
+ font-size: 19px;
4060
+ }
4061
+ .dag-action-card-copy h4,
4062
+ .dag-action-card-copy p {
4063
+ margin: 0;
4064
+ }
4065
+ .dag-action-card-copy h4 {
4066
+ margin-top: 2px;
4067
+ font-size: 14px;
4068
+ line-height: 1.35;
4069
+ }
4070
+ .dag-action-card-copy p {
4071
+ margin-top: 4px;
4072
+ color: var(--body);
4073
+ font-size: 11px;
4074
+ line-height: 1.5;
4075
+ }
4076
+ .dag-action-card-body {
4077
+ display: grid;
4078
+ gap: 12px;
4079
+ padding: 14px 15px;
4080
+ }
4081
+ .dag-action-availability {
4082
+ display: grid;
4083
+ grid-template-columns: 20px minmax(0, 1fr);
4084
+ gap: 9px;
4085
+ align-items: start;
4086
+ padding: 11px 12px;
4087
+ border: 1px solid var(--hairline);
4088
+ border-radius: 10px;
4089
+ background: var(--canvas-soft);
4090
+ color: var(--body);
4091
+ }
4092
+ .dag-action-availability > i {
4093
+ margin-top: 1px;
4094
+ color: var(--muted);
4095
+ font-size: 17px;
4096
+ }
4097
+ .dag-action-availability strong,
4098
+ .dag-action-availability p {
4099
+ display: block;
4100
+ margin: 0;
4101
+ }
4102
+ .dag-action-availability strong {
4103
+ color: var(--ink);
4104
+ font-size: 12px;
4105
+ }
4106
+ .dag-action-availability p {
4107
+ margin-top: 3px;
4108
+ font-size: 11px;
4109
+ line-height: 1.5;
4110
+ }
4111
+ .dag-action-reason-copy {
4112
+ color: var(--ink);
4113
+ }
4114
+ .dag-action-availability code {
4115
+ display: inline-block;
4116
+ margin-top: 7px;
4117
+ padding: 2px 6px;
4118
+ border-radius: 5px;
4119
+ background: color-mix(in srgb, var(--ink) 6%, transparent);
4120
+ font-size: 9px;
4121
+ }
4122
+ .dag-action-availability.is-ready {
4123
+ border-color: color-mix(in srgb, var(--green) 28%, var(--hairline));
4124
+ background: color-mix(in srgb, var(--green) 6%, var(--surface));
4125
+ }
4126
+ .dag-action-availability.is-ready > i {
4127
+ color: var(--green);
4128
+ }
4129
+ .dag-action-availability.is-blocked {
4130
+ border-color: color-mix(in srgb, var(--red) 25%, var(--hairline));
4131
+ background: color-mix(in srgb, var(--red) 5%, var(--surface));
4132
+ }
4133
+ .dag-action-availability.is-blocked > i {
4134
+ color: var(--red);
4135
+ }
4136
+ .dag-action-form {
4137
+ display: grid;
4138
+ gap: 12px;
4139
+ padding-top: 2px;
4140
+ }
4141
+ .dag-action-field-label {
4142
+ color: var(--ink);
4143
+ font-size: 11px;
4144
+ font-weight: 800;
4145
+ }
4146
+ .dag-action-form select,
4147
+ .dag-action-form textarea,
4148
+ .dag-action-file-input {
4149
+ border: 1px solid var(--hairline-strong);
4150
+ border-radius: 9px;
4151
+ background: var(--surface);
4152
+ color: var(--ink);
4153
+ }
4154
+ .dag-action-form select {
4155
+ min-height: 38px;
4156
+ padding: 0 10px;
4157
+ }
4158
+ .dag-action-form textarea {
4159
+ padding: 9px 10px;
4160
+ }
4161
+ .dag-action-form select:focus-visible,
4162
+ .dag-action-form textarea:focus-visible,
4163
+ .dag-action-file-input:focus-visible {
4164
+ border-color: var(--orange);
4165
+ outline: 2px solid color-mix(in srgb, var(--orange) 18%, transparent);
4166
+ outline-offset: 1px;
4167
+ }
4168
+ .dag-action-file-input {
4169
+ width: 100%;
4170
+ padding: 5px;
4171
+ font-size: 11px;
4172
+ }
4173
+ .dag-action-file-input::file-selector-button {
4174
+ min-height: 30px;
4175
+ margin-right: 9px;
4176
+ padding: 0 10px;
4177
+ border: 1px solid var(--hairline);
4178
+ border-radius: 7px;
4179
+ background: var(--canvas-soft);
4180
+ color: var(--ink);
4181
+ font-weight: 700;
4182
+ cursor: pointer;
4183
+ }
4184
+ .dag-action-primary,
4185
+ .dag-action-secondary {
4186
+ min-height: 39px;
4187
+ padding: 0 14px;
4188
+ border-radius: 9px;
4189
+ font-weight: 800;
4190
+ }
4191
+ .dag-action-primary {
4192
+ border: 1px solid var(--orange-active);
4193
+ background: var(--orange);
4194
+ color: #fff;
4195
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--orange) 18%, transparent);
4196
+ }
4197
+ .dag-action-primary:hover:not(:disabled),
4198
+ .dag-action-primary:focus-visible {
4199
+ background: var(--orange-active);
4200
+ outline: none;
4201
+ box-shadow:
4202
+ 0 4px 12px color-mix(in srgb, var(--orange) 18%, transparent),
4203
+ 0 0 0 3px color-mix(in srgb, var(--orange) 15%, transparent);
4204
+ }
4205
+ .dag-action-secondary {
4206
+ border: 1px solid var(--hairline-strong);
4207
+ background: var(--surface);
4208
+ color: var(--ink);
4209
+ }
4210
+ .dag-action-secondary:hover:not(:disabled),
4211
+ .dag-action-secondary:focus-visible {
4212
+ border-color: var(--ink);
4213
+ outline: none;
4214
+ }
4215
+ .dag-action-disclosure {
4216
+ overflow: hidden;
4217
+ min-width: 0;
4218
+ max-width: 100%;
4219
+ border: 1px solid var(--hairline);
4220
+ border-radius: 10px;
4221
+ background: var(--surface);
4222
+ }
4223
+ .dag-action-disclosure summary {
4224
+ display: flex;
4225
+ align-items: center;
4226
+ gap: 6px;
4227
+ min-width: 0;
4228
+ padding: 10px 12px;
4229
+ color: var(--body);
4230
+ font-size: 11px;
4231
+ font-weight: 800;
4232
+ cursor: pointer;
4233
+ list-style: none;
4234
+ }
4235
+ .dag-action-disclosure summary::-webkit-details-marker {
4236
+ display: none;
4237
+ }
4238
+ .dag-action-disclosure summary::after {
4239
+ margin-left: auto;
4240
+ font-size: 15px;
4241
+ font-weight: 700;
4242
+ content: "⌄";
4243
+ transition: transform var(--transition-fast);
4244
+ }
4245
+ .dag-action-disclosure[open] summary::after {
4246
+ transform: rotate(180deg);
4247
+ }
4248
+ .dag-action-disclosure[open] summary {
4249
+ background: color-mix(in srgb, var(--orange) 5%, var(--surface));
4250
+ color: var(--ink);
4251
+ }
4252
+ .dag-action-disclosure summary:hover,
4253
+ .dag-action-disclosure summary:focus-visible {
4254
+ background: var(--canvas-soft);
4255
+ color: var(--ink);
4256
+ outline: none;
4257
+ }
4258
+ .dag-action-disclosure-body {
4259
+ display: grid;
4260
+ gap: 12px;
4261
+ min-width: 0;
4262
+ max-width: 100%;
4263
+ padding: 12px;
4264
+ border-top: 1px solid var(--hairline);
4265
+ }
4266
+ .dag-action-export-zone {
4267
+ display: grid;
4268
+ gap: 12px;
4269
+ margin-top: 4px;
4270
+ padding-top: 16px;
4271
+ border-top: 1px dashed var(--hairline-strong);
4272
+ }
4273
+ .dag-action-export-divider span,
4274
+ .dag-action-export-divider p {
4275
+ margin: 0;
4276
+ }
4277
+ .dag-action-export-divider span {
4278
+ color: var(--ink);
4279
+ font-size: 12px;
4280
+ font-weight: 800;
4281
+ }
4282
+ .dag-action-export-divider p {
4283
+ margin-top: 2px;
4284
+ color: var(--muted);
4285
+ font-size: 11px;
4286
+ }
4287
+
4288
+ .context-export-box,
4289
+ .artifact-revision-box {
4290
+ margin-bottom: 0;
4291
+ }
4292
+
4293
+ .context-export-box {
4294
+ container-type: inline-size;
4295
+ gap: 18px;
4296
+ padding: 18px;
4297
+ border: 1px solid var(--hairline);
4298
+ border-radius: 14px;
4299
+ background: color-mix(in srgb, var(--canvas-soft) 78%, var(--surface));
4300
+ }
4301
+ .context-export-heading {
4302
+ display: flex;
4303
+ align-items: flex-start;
4304
+ justify-content: space-between;
4305
+ gap: 18px;
4306
+ }
4307
+ .context-export-heading h4,
4308
+ .context-export-heading p {
4309
+ margin: 0;
4310
+ }
4311
+ .context-export-heading h4 {
4312
+ margin-top: 3px;
4313
+ font-size: 18px;
4314
+ line-height: 1.25;
4315
+ }
4316
+ .context-export-heading p {
4317
+ margin-top: 6px;
4318
+ max-width: 58ch;
4319
+ color: var(--body);
4320
+ font-size: 13px;
4321
+ }
4322
+ .context-export-eyebrow {
4323
+ color: var(--orange-active);
4324
+ font-size: 10px;
4325
+ font-weight: 800;
4326
+ letter-spacing: 0.14em;
4327
+ text-transform: uppercase;
4328
+ }
4329
+ .context-export-invariant {
4330
+ flex: 0 0 auto;
4331
+ padding: 6px 9px;
4332
+ border: 1px solid color-mix(in srgb, var(--green) 26%, var(--hairline));
4333
+ border-radius: var(--radius-pill);
4334
+ background: color-mix(in srgb, var(--green) 8%, var(--surface));
4335
+ color: var(--green);
4336
+ font-size: 11px;
4337
+ font-weight: 700;
4338
+ white-space: nowrap;
4339
+ }
4340
+ .context-export-workspace {
4341
+ display: grid;
4342
+ grid-template-columns: minmax(0, 1.25fr) minmax(230px, 0.75fr);
4343
+ gap: 16px;
4344
+ align-items: start;
4345
+ }
4346
+ .context-export-controls {
4347
+ display: grid;
4348
+ gap: 16px;
4349
+ }
4350
+ .context-export-fieldset {
4351
+ min-width: 0;
4352
+ margin: 0;
4353
+ padding: 0;
4354
+ border: 0;
4355
+ }
4356
+ .context-export-fieldset legend {
4357
+ margin-bottom: 8px;
4358
+ padding: 0;
4359
+ color: var(--ink);
4360
+ font-size: 12px;
4361
+ font-weight: 800;
4362
+ }
4363
+ .context-export-target-grid,
4364
+ .context-export-profile-grid {
4365
+ display: grid;
4366
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4367
+ gap: 8px;
4368
+ }
4369
+ .context-export-choice,
4370
+ .context-export-profile-choice {
4371
+ display: grid;
4372
+ grid-template-columns: auto minmax(0, 1fr);
4373
+ align-items: start;
4374
+ gap: 9px;
4375
+ min-width: 0;
4376
+ padding: 11px;
4377
+ border: 1px solid var(--hairline);
4378
+ border-radius: 10px;
4379
+ background: var(--surface);
4380
+ cursor: pointer;
4381
+ transition:
4382
+ border-color var(--transition-fast),
4383
+ box-shadow var(--transition-fast),
4384
+ background var(--transition-fast);
4385
+ }
4386
+ .context-export-choice {
4387
+ grid-template-columns: auto 20px minmax(0, 1fr);
4388
+ }
4389
+ .context-export-choice:hover,
4390
+ .context-export-profile-choice:hover {
4391
+ border-color: var(--hairline-strong);
4392
+ background: var(--canvas-soft);
4393
+ }
4394
+ .context-export-choice:has(input:checked),
4395
+ .context-export-profile-choice:has(input:checked) {
4396
+ border-color: color-mix(in srgb, var(--orange) 58%, var(--hairline));
4397
+ background: var(--orange-soft);
4398
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--orange) 16%, transparent);
4399
+ }
4400
+ .context-export-profile-choice.is-risk:has(input:checked) {
4401
+ border-color: color-mix(in srgb, var(--red) 58%, var(--hairline));
4402
+ background: color-mix(in srgb, var(--red) 7%, var(--surface));
4403
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--red) 15%, transparent);
4404
+ }
4405
+ .context-export-choice input,
4406
+ .context-export-profile-choice input {
4407
+ width: 15px;
4408
+ height: 15px;
4409
+ margin: 2px 0 0;
4410
+ accent-color: var(--orange);
4411
+ }
4412
+ .context-export-profile-choice.is-risk input {
4413
+ accent-color: var(--red);
4414
+ }
4415
+ .context-export-choice:has(input:focus-visible),
4416
+ .context-export-profile-choice:has(input:focus-visible) {
4417
+ outline: 2px solid color-mix(in srgb, var(--orange) 60%, transparent);
4418
+ outline-offset: 2px;
4419
+ }
4420
+ .context-export-choice > i {
4421
+ margin-top: 1px;
4422
+ color: var(--orange-active);
4423
+ font-size: 18px;
4424
+ line-height: 1;
4425
+ }
4426
+ .context-export-choice-copy {
4427
+ display: grid;
4428
+ gap: 3px;
4429
+ min-width: 0;
4430
+ }
4431
+ .context-export-choice-copy strong,
4432
+ .context-export-choice-copy small {
4433
+ display: block;
4434
+ }
4435
+ .context-export-choice-copy strong {
4436
+ font-size: 12px;
4437
+ line-height: 1.35;
4438
+ }
4439
+ .context-export-choice-copy small {
4440
+ color: var(--muted);
4441
+ font-size: 11px;
4442
+ line-height: 1.45;
4443
+ }
4444
+ .context-export-profile-title {
4445
+ display: flex;
4446
+ flex-wrap: wrap;
4447
+ align-items: center;
4448
+ gap: 6px;
4449
+ }
4450
+ .context-export-profile-badge {
4451
+ padding: 1px 6px;
4452
+ border-radius: var(--radius-pill);
4453
+ font-size: 9px;
4454
+ font-weight: 800;
4455
+ }
4456
+ .context-export-profile-badge.is-redacted {
4457
+ background: color-mix(in srgb, var(--green) 12%, var(--surface));
4458
+ color: var(--green);
4459
+ }
4460
+ .context-export-profile-badge.is-raw {
4461
+ background: color-mix(in srgb, var(--red) 11%, var(--surface));
4462
+ color: var(--red);
4463
+ }
4464
+
4465
+ .context-export-raw-ack {
4466
+ display: grid;
4467
+ grid-template-columns: auto minmax(0, 1fr);
4468
+ align-items: start;
4469
+ gap: 9px;
4470
+ padding: 11px;
4471
+ border: 1px solid color-mix(in srgb, var(--red) 38%, var(--hairline));
4472
+ border-radius: 10px;
4473
+ background: color-mix(in srgb, var(--red) 6%, var(--surface));
4474
+ color: var(--ink);
4475
+ cursor: pointer;
4476
+ }
4477
+ .context-export-raw-ack[hidden] {
4478
+ display: none;
4479
+ }
4480
+ .context-export-raw-ack input {
4481
+ width: 15px;
4482
+ height: 15px;
4483
+ margin: 2px 0 0;
4484
+ accent-color: var(--red);
4485
+ }
4486
+ .context-export-raw-ack span {
4487
+ display: grid;
4488
+ gap: 2px;
4489
+ }
4490
+ .context-export-raw-ack strong {
4491
+ font-size: 12px;
4492
+ }
4493
+ .context-export-raw-ack small {
4494
+ color: var(--body);
4495
+ font-size: 11px;
4496
+ line-height: 1.45;
4497
+ }
4498
+ .context-export-ticket {
4499
+ position: relative;
4500
+ overflow: hidden;
4501
+ min-width: 0;
4502
+ padding: 16px 16px 14px 20px;
4503
+ border-radius: 13px;
4504
+ background: var(--ink);
4505
+ color: #fff;
4506
+ box-shadow: 0 10px 24px rgb(38 37 30 / 12%);
4507
+ }
4508
+ .context-export-ticket::before {
4509
+ position: absolute;
4510
+ top: 0;
4511
+ bottom: 0;
4512
+ left: 0;
4513
+ width: 5px;
4514
+ background: var(--orange);
4515
+ content: "";
4516
+ }
4517
+ .context-export-ticket-top {
4518
+ display: flex;
4519
+ align-items: center;
4520
+ justify-content: space-between;
4521
+ gap: 8px;
4522
+ padding-bottom: 12px;
4523
+ border-bottom: 1px dashed rgb(255 255 255 / 22%);
4524
+ }
4525
+ .context-export-ticket-type,
4526
+ .context-export-ticket-safety,
4527
+ .context-export-ticket-label {
4528
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
4529
+ font-size: 9px;
4530
+ font-weight: 800;
4531
+ letter-spacing: 0.1em;
4532
+ }
4533
+ .context-export-ticket-type {
4534
+ color: rgb(255 255 255 / 58%);
4535
+ }
4536
+ .context-export-ticket-safety {
4537
+ padding: 3px 6px;
4538
+ border-radius: var(--radius-pill);
4539
+ background: color-mix(in srgb, var(--green) 36%, transparent);
4540
+ color: #c9f4df;
4541
+ letter-spacing: 0.04em;
4542
+ }
4543
+ .context-export-ticket-safety.is-risk {
4544
+ background: color-mix(in srgb, var(--red) 45%, transparent);
4545
+ color: #ffd7e1;
4546
+ }
4547
+ .context-export-ticket-label {
4548
+ display: block;
4549
+ margin-top: 16px;
4550
+ color: rgb(255 255 255 / 52%);
4551
+ }
4552
+ .context-export-ticket-title {
4553
+ display: block;
4554
+ margin-top: 4px;
4555
+ font-size: 17px;
4556
+ line-height: 1.3;
4557
+ }
4558
+ .context-export-ticket-rows {
4559
+ display: grid;
4560
+ grid-template-columns: 42px minmax(0, 1fr);
4561
+ gap: 8px 10px;
4562
+ margin: 16px 0 0;
4563
+ font-size: 11px;
4564
+ line-height: 1.45;
4565
+ }
4566
+ .context-export-ticket-rows dt {
4567
+ color: rgb(255 255 255 / 48%);
4568
+ }
4569
+ .context-export-ticket-rows dd {
4570
+ min-width: 0;
4571
+ margin: 0;
4572
+ color: rgb(255 255 255 / 86%);
4573
+ overflow-wrap: anywhere;
4574
+ }
4575
+ .context-export-ticket-rows dd.is-mono {
4576
+ font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
4577
+ font-size: 10px;
4578
+ }
4579
+ .context-export-ticket-foot {
4580
+ margin: 16px 0 0;
4581
+ padding-top: 11px;
4582
+ border-top: 1px dashed rgb(255 255 255 / 22%);
4583
+ color: rgb(255 255 255 / 52%);
4584
+ font-size: 10px;
4585
+ line-height: 1.5;
4586
+ }
4587
+ .context-export-box > .prompt-restart-actions {
4588
+ justify-content: flex-end;
4589
+ }
4590
+ .context-export-submit {
4591
+ min-height: 40px;
4592
+ padding: 0 16px;
4593
+ border: 1px solid var(--orange-active);
4594
+ border-radius: 9px;
4595
+ background: var(--orange);
4596
+ color: #fff;
4597
+ font-weight: 800;
4598
+ box-shadow: 0 5px 14px color-mix(in srgb, var(--orange) 22%, transparent);
4599
+ }
4600
+ .context-export-submit:hover:not(:disabled),
4601
+ .context-export-submit:focus-visible {
4602
+ background: var(--orange-active);
4603
+ outline: none;
4604
+ box-shadow:
4605
+ 0 5px 14px color-mix(in srgb, var(--orange) 22%, transparent),
4606
+ 0 0 0 3px color-mix(in srgb, var(--orange) 18%, transparent);
4607
+ }
4608
+ .context-export-box > .prompt-restart-status:not(:empty) {
4609
+ padding: 10px 12px;
4610
+ border: 1px solid var(--hairline);
4611
+ border-radius: 9px;
4612
+ background: var(--surface);
4613
+ }
4614
+
4615
+ .node-lineage-intro {
4616
+ padding: var(--space-3);
4617
+ border: 1px solid color-mix(in srgb, var(--blue) 24%, var(--hairline));
4618
+ border-left: 3px solid var(--blue);
4619
+ border-radius: var(--radius-md);
4620
+ background: color-mix(in srgb, var(--blue) 6%, var(--surface));
4621
+ }
4622
+ .node-lineage-intro h4,
4623
+ .node-lineage-intro p {
4624
+ margin: 0;
4625
+ }
4626
+ .node-lineage-intro p {
4627
+ margin-top: var(--space-2);
4628
+ }
4629
+
4630
+ @container (max-width: 680px) {
4631
+ .context-export-workspace {
4632
+ grid-template-columns: minmax(0, 1fr);
4633
+ }
4634
+ }
4635
+
4636
+ @media (max-width: 760px) {
4637
+ .dag-action-page-intro {
4638
+ align-items: stretch;
4639
+ flex-direction: column;
4640
+ }
4641
+ .dag-action-node-state {
4642
+ align-self: flex-start;
4643
+ }
4644
+ .dag-action-card-header {
4645
+ grid-template-columns: 34px minmax(0, 1fr);
4646
+ padding: 12px;
4647
+ }
4648
+ .dag-action-card-icon {
4649
+ width: 34px;
4650
+ height: 34px;
4651
+ }
4652
+ .dag-action-card-body {
4653
+ padding: 12px;
4654
+ }
4655
+ .context-export-heading {
4656
+ align-items: stretch;
4657
+ flex-direction: column;
4658
+ }
4659
+ .context-export-invariant {
4660
+ align-self: flex-start;
4661
+ }
4662
+ .context-export-workspace {
4663
+ grid-template-columns: minmax(0, 1fr);
4664
+ }
4665
+ .context-export-target-grid,
4666
+ .context-export-profile-grid {
4667
+ grid-template-columns: minmax(0, 1fr);
4668
+ }
4669
+ .context-export-box > .prompt-restart-actions {
4670
+ justify-content: stretch;
4671
+ }
4672
+ .context-export-submit {
4673
+ width: 100%;
4674
+ }
4675
+ }
4676
+
4677
+ @media (prefers-reduced-motion: reduce) {
4678
+ .dag-action-disclosure summary::after,
4679
+ .context-export-choice,
4680
+ .context-export-profile-choice {
4681
+ transition: none;
4682
+ }
4683
+ }
4684
+
4685
+ .artifact-revision-plan {
4686
+ display: grid;
4687
+ gap: 10px;
4688
+ margin-top: 12px;
4689
+ }
4690
+ .prompt-restart-field {
4691
+ display: flex;
4692
+ flex-direction: column;
4693
+ gap: 6px;
4694
+ min-width: 0;
4695
+ max-width: 100%;
4696
+ }
4697
+ .prompt-restart-field.is-hidden,
4698
+ .prompt-restart-prompt-card.is-hidden {
4699
+ display: none;
4700
+ }
4701
+ .prompt-restart-label {
4702
+ color: var(--ink);
4703
+ font-size: 12px;
4704
+ font-weight: 700;
4705
+ letter-spacing: 0.01em;
4706
+ }
4707
+ .prompt-restart-hint {
4708
+ margin: 0;
4709
+ color: var(--muted);
4710
+ font-size: 12px;
4711
+ line-height: 1.45;
4712
+ }
4713
+ .prompt-restart-candidate-select {
4714
+ display: block;
4715
+ width: 100%;
4716
+ min-width: 0;
4717
+ }
4718
+ .prompt-restart-candidate-select .custom-select-trigger {
4719
+ width: 100%;
4720
+ }
4721
+ .prompt-restart-candidate-select .custom-select-menu {
4722
+ z-index: 6;
4723
+ }
4724
+ .prompt-restart-mode-switch {
4725
+ display: flex;
4726
+ width: fit-content;
4727
+ max-width: 100%;
4728
+ gap: 4px;
4729
+ padding: 4px;
4730
+ border: 1px solid var(--hairline);
4731
+ border-radius: var(--radius-pill);
4732
+ background: var(--surface);
4733
+ }
4734
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option,
4735
+ .prompt-restart-mode-option {
4736
+ appearance: none;
4737
+ display: inline-flex;
4738
+ align-items: center;
4739
+ justify-content: center;
4740
+ flex: 0 0 auto;
4741
+ width: auto;
4742
+ min-height: 30px;
4743
+ height: 30px;
4744
+ padding: 0 12px;
4745
+ border: 1px solid transparent;
4746
+ border-radius: var(--radius-pill);
4747
+ background: transparent;
4748
+ color: var(--muted);
4749
+ font-size: 12px;
4750
+ font-weight: 700;
4751
+ line-height: 1;
4752
+ letter-spacing: 0;
4753
+ white-space: nowrap;
4754
+ box-shadow: none;
4755
+ transform: none;
4756
+ cursor: pointer;
4757
+ }
4758
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option:hover,
4759
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option:focus-visible,
4760
+ .prompt-restart-mode-option:hover,
4761
+ .prompt-restart-mode-option:focus-visible {
4762
+ color: var(--ink);
4763
+ background: var(--surface-muted);
4764
+ border-color: transparent;
4765
+ outline: none;
4766
+ box-shadow: none;
4767
+ transform: none;
4768
+ }
4769
+ #dag-inspector-panel-prompt-restart button.prompt-restart-mode-option.is-selected,
4770
+ .prompt-restart-mode-option.is-selected {
4771
+ background: var(--ink);
4772
+ color: #fff;
4773
+ border-color: transparent;
3802
4774
  }
3803
4775
  .prompt-restart-prompt-card {
3804
4776
  display: flex;
3805
4777
  flex-direction: column;
3806
4778
  min-width: 0;
4779
+ max-width: 100%;
3807
4780
  overflow: hidden;
3808
4781
  border: 1px solid var(--hairline);
3809
4782
  border-radius: var(--radius-lg);
@@ -3814,6 +4787,7 @@ button.copy-command:focus-visible {
3814
4787
  align-items: flex-start;
3815
4788
  justify-content: space-between;
3816
4789
  gap: var(--space-3);
4790
+ min-width: 0;
3817
4791
  padding: 10px 12px;
3818
4792
  border-bottom: 1px solid var(--hairline);
3819
4793
  background: var(--canvas-soft);
@@ -3845,9 +4819,32 @@ button.copy-command:focus-visible {
3845
4819
  font-size: 11px;
3846
4820
  line-height: 1.3;
3847
4821
  }
3848
- .prompt-restart-copy-icon {
4822
+ .prompt-restart-prompt-head > :first-child {
4823
+ min-width: 0;
4824
+ overflow-wrap: anywhere;
4825
+ }
4826
+ .prompt-restart-copy-button {
3849
4827
  flex: 0 0 auto;
3850
- margin-top: 1px;
4828
+ gap: 6px;
4829
+ width: auto;
4830
+ min-width: 0;
4831
+ height: 32px;
4832
+ padding: 0 10px;
4833
+ border-color: color-mix(in srgb, var(--orange) 32%, var(--hairline));
4834
+ background: var(--orange-soft);
4835
+ color: var(--orange-active);
4836
+ font-size: 11px;
4837
+ font-weight: 800;
4838
+ white-space: nowrap;
4839
+ }
4840
+ .prompt-restart-copy-button:hover {
4841
+ border-color: color-mix(in srgb, var(--orange) 54%, var(--hairline));
4842
+ background: color-mix(in srgb, var(--orange) 13%, var(--surface));
4843
+ }
4844
+ .prompt-restart-copy-button.is-copied {
4845
+ border-color: color-mix(in srgb, var(--green) 36%, var(--hairline));
4846
+ background: color-mix(in srgb, var(--green) 9%, var(--surface));
4847
+ color: var(--green);
3851
4848
  }
3852
4849
  .prompt-restart-prompt-actions {
3853
4850
  display: flex;
@@ -3886,9 +4883,13 @@ button.copy-command:focus-visible {
3886
4883
  display: none;
3887
4884
  }
3888
4885
  .prompt-restart-readonly {
4886
+ box-sizing: border-box;
4887
+ width: 100%;
4888
+ min-width: 0;
4889
+ max-width: 100%;
3889
4890
  margin: 0;
3890
4891
  padding: 14px 16px;
3891
- overflow: auto;
4892
+ overflow-y: auto;
3892
4893
  background: var(--canvas-soft);
3893
4894
  color: var(--ink);
3894
4895
  font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
@@ -3896,6 +4897,8 @@ button.copy-command:focus-visible {
3896
4897
  line-height: 1.65;
3897
4898
  white-space: pre-wrap;
3898
4899
  overflow-wrap: anywhere;
4900
+ overflow-x: hidden;
4901
+ word-break: break-word;
3899
4902
  tab-size: 2;
3900
4903
  }
3901
4904
  .prompt-restart-panel.is-readonly .prompt-restart-readonly {
@@ -3908,6 +4911,8 @@ button.copy-command:focus-visible {
3908
4911
  }
3909
4912
  .prompt-restart-textarea {
3910
4913
  width: 100%;
4914
+ min-width: 0;
4915
+ max-width: 100%;
3911
4916
  min-height: 8rem;
3912
4917
  resize: vertical;
3913
4918
  box-sizing: border-box;
@@ -3921,7 +4926,8 @@ button.copy-command:focus-visible {
3921
4926
  line-height: 1.65;
3922
4927
  white-space: pre-wrap;
3923
4928
  overflow-wrap: anywhere;
3924
- overflow-x: auto;
4929
+ word-break: break-word;
4930
+ overflow-x: hidden;
3925
4931
  }
3926
4932
  .prompt-restart-textarea-work {
3927
4933
  min-height: 10rem;