@qredence/fleet 0.7.4 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +5 -4
  3. package/bin/fleet-prime.mjs +33 -6
  4. package/bin/prime-runtime.mjs +79 -0
  5. package/dist/runtime-manifest.json +32 -0
  6. package/dist/web/client/assets/DialogTitle-BlVq-tcv.js +1 -0
  7. package/dist/web/client/assets/FloatingPortal-D8-EPDs2.js +1 -0
  8. package/dist/web/client/assets/activity-BPIKUzOU.js +1 -0
  9. package/dist/web/client/assets/agents-CGjUBYX7.js +2 -0
  10. package/dist/web/client/assets/agents-page-CTuFJL9H.js +1 -0
  11. package/dist/web/client/assets/alert-CzWGeumf.js +1 -0
  12. package/dist/web/client/assets/alert-dialog-D-e1Pr4q.js +1 -0
  13. package/dist/web/client/assets/arrow-up-right-CG9RNk4p.js +1 -0
  14. package/dist/web/client/assets/artifacts-panel-6JEdy6jU.js +1 -0
  15. package/dist/web/client/assets/badge-CzQFgmVK.js +1 -0
  16. package/dist/web/client/assets/button-CWYjn8Zk.js +1 -0
  17. package/dist/web/client/assets/{card-Hngi3HGC.js → card-Dj1SnGUU.js} +1 -1
  18. package/dist/web/client/assets/chat-command-palette-Bxr5EkO6.js +1 -0
  19. package/dist/web/client/assets/chat-hpzV6IA6.js +57 -0
  20. package/dist/web/client/assets/chat-queries-CfZiupub.js +3 -0
  21. package/dist/web/client/assets/clock-3-BwWCSCm_.js +1 -0
  22. package/dist/web/client/assets/code-block-pKKmFZ5w.js +3 -0
  23. package/dist/web/client/assets/collapsible-Bk6zCsRX.js +1 -0
  24. package/dist/web/client/assets/{command-CmtCIDdH.js → command-xo-NK4xO.js} +1 -1
  25. package/dist/web/client/assets/connectors-CFxLqG2x.js +2 -0
  26. package/dist/web/client/assets/connectors-page-DQJdoAnl.js +1 -0
  27. package/dist/web/client/assets/create-project-dialog-Db-WhUmP.js +1 -0
  28. package/dist/web/client/assets/createBaseUIEventDetails-DIxvaz-Y.js +1 -0
  29. package/dist/web/client/assets/dialog-CK8dym6z.js +1 -0
  30. package/dist/web/client/assets/eye-iNSvs0UA.js +1 -0
  31. package/dist/web/client/assets/file-code-corner-BkDULqko.js +1 -0
  32. package/dist/web/client/assets/{fork-picker-dialog-DfGlB17w.js → fork-picker-dialog-DSaFeUii.js} +1 -1
  33. package/dist/web/client/assets/globals-DJhWyayo.css +2 -0
  34. package/dist/web/client/assets/index-C9FHZDGw.js +13 -0
  35. package/dist/web/client/assets/input-CBoTMPC_.js +1 -0
  36. package/dist/web/client/assets/{input-group-EPMGh55u.js → input-group-BFubAtz9.js} +1 -1
  37. package/dist/web/client/assets/{ipython-tool-CMhnRVrC.js → ipython-tool-bieUhw9K.js} +1 -1
  38. package/dist/web/client/assets/markdown-CvBfbPCn.js +2 -0
  39. package/dist/web/client/assets/markdown-code-rFOkzN5N.js +4 -0
  40. package/dist/web/client/assets/mcp-connections-section-DEo6Kemv.js +2 -0
  41. package/dist/web/client/assets/message-queue-Btjt9wK2.js +1 -0
  42. package/dist/web/client/assets/{model-selector-list-BiU_7ivt.js → model-selector-list-CbDAT0Rw.js} +1 -1
  43. package/dist/web/client/assets/mutation-Da9zdeWr.js +1 -0
  44. package/dist/web/client/assets/notify-BIL0-CGy.js +1 -0
  45. package/dist/web/client/assets/open-panel-action-message-SdA1VU42.js +1 -0
  46. package/dist/web/client/assets/openui-renderer-DG-iML7M.js +291 -0
  47. package/dist/web/client/assets/pencil-Cbgq3ybX.js +1 -0
  48. package/dist/web/client/assets/plus-DUP2JPVG.js +1 -0
  49. package/dist/web/client/assets/product-page-header-Ck6I13CE.js +1 -0
  50. package/dist/web/client/assets/{prompt-input-Dy-DSPqF.js → prompt-input-CoV1gTUQ.js} +1 -1
  51. package/dist/web/client/assets/{prompt-suggestions-CrpAiKeB.js → prompt-suggestions-CAY5JI-C.js} +1 -1
  52. package/dist/web/client/assets/provider-catalog-CLEDlH_v.js +1 -0
  53. package/dist/web/client/assets/provider-label-BItazQ6H.js +1 -0
  54. package/dist/web/client/assets/reasoning-line-DGdPUMwT.js +1 -0
  55. package/dist/web/client/assets/rehype-katex-DITkIpVl.js +259 -0
  56. package/dist/web/client/assets/{repl-panel-DN5kZAcB.js → repl-panel-5xgkDXO5.js} +1 -1
  57. package/dist/web/client/assets/{resources-panel-DD6iWOF3.js → resources-panel-aJCKt9eF.js} +1 -1
  58. package/dist/web/client/assets/right-panel-context-CjX-HkDO.js +1 -0
  59. package/dist/web/client/assets/right-panel-registry-BAJ6TuEY.js +2 -0
  60. package/dist/web/client/assets/rotate-ccw-DLkfsmG9.js +1 -0
  61. package/dist/web/client/assets/routes-ja_liP8Z.js +14 -0
  62. package/dist/web/client/assets/select-DYh951qi.js +1 -0
  63. package/dist/web/client/assets/session-activity-panel-DwaXiSrS.js +1 -0
  64. package/dist/web/client/assets/{session-insights-panel-D0v_DKcb.js → session-insights-panel-BXEmuJKf.js} +1 -1
  65. package/dist/web/client/assets/session-reasoning-panel-CjJJK_bq.js +1 -0
  66. package/dist/web/client/assets/session-tool-renderer-DEABxZG3.js +166 -0
  67. package/dist/web/client/assets/{session-tree-panel-BBwP_EK2.js → session-tree-panel-5QgMvXoX.js} +1 -1
  68. package/dist/web/client/assets/settings-dialog-DiikSLhF.js +1 -0
  69. package/dist/web/client/assets/shield-check-7HDd-2Fn.js +1 -0
  70. package/dist/web/client/assets/{skeleton-DNAr5ULI.js → skeleton-B_Lq2XFl.js} +1 -1
  71. package/dist/web/client/assets/{skeleton-loaders-B28mF4tJ.js → skeleton-loaders-DWc1eDL3.js} +1 -1
  72. package/dist/web/client/assets/sparkles-CASAe1AI.js +1 -0
  73. package/dist/web/client/assets/{spinner-CSBXk3Lo.js → spinner-B5TaKP7k.js} +1 -1
  74. package/dist/web/client/assets/{subagent-chat-panel-DhvBO4dQ.js → subagent-chat-panel-R2RoX1Yt.js} +1 -1
  75. package/dist/web/client/assets/subagent-transcript-DVZhMo7a.js +1 -0
  76. package/dist/web/client/assets/{subagents-panel-DRo8Xs6j.js → subagents-panel-CMMRUP8F.js} +1 -1
  77. package/dist/web/client/assets/surfaces-BUjUJTyD.js +1 -0
  78. package/dist/web/client/assets/switch-BrxDfsX6.js +1 -0
  79. package/dist/web/client/assets/toast-BNWkgZ0u.js +1 -0
  80. package/dist/web/client/assets/tool-output-normalizer-DDU09Zc6.js +4 -0
  81. package/dist/web/client/assets/tool-part-normalizer-CF6bmJ0s.js +4 -0
  82. package/dist/web/client/assets/tool-result-7qREIVv_.js +5 -0
  83. package/dist/web/client/assets/tool-timeline-CGhwMeNl.js +2 -0
  84. package/dist/web/client/assets/trace-IsV5RRvM.js +1 -0
  85. package/dist/web/client/assets/trash-sm2UyOxe.js +1 -0
  86. package/dist/web/client/assets/types-gIgIxnnG.js +1 -0
  87. package/dist/web/client/assets/ui-preferences-B-PNDkyY.js +1 -0
  88. package/dist/web/client/assets/use-hover-capable-CLq8BADD.js +1 -0
  89. package/dist/web/client/assets/useBaseUiId-lKfDDIcw.js +1 -0
  90. package/dist/web/client/assets/useButton-CvcmqA2s.js +1 -0
  91. package/dist/web/client/assets/useNavigate-CVhM7pag.js +1 -0
  92. package/dist/web/client/assets/useRender-CzJUrRlB.js +1 -0
  93. package/dist/web/client/assets/useScrollLock-BcsteNzT.js +1 -0
  94. package/dist/web/client/assets/{utils-CFDGLzf6.js → utils-oBThwhjm.js} +1 -1
  95. package/dist/web/client/assets/with-selector-B_VDO56x.js +1 -0
  96. package/dist/web/client/assets/{workspace-panel-DdZutYnd.js → workspace-panel-Da5I4p_t.js} +1 -1
  97. package/dist/web/client/assets/workspace-path-nav-D-77sJ_A.js +2 -0
  98. package/dist/web/client/assets/wrench-BXX_Ah2s.js +1 -0
  99. package/dist/web/client/bundle-budget.json +6 -6
  100. package/dist/web/server/_tanstack-start-manifest_v-B6ne-00G-OFX7UD4K.js +119 -0
  101. package/dist/web/server/agents-BwzqhPjK-ANFHE5AG.js +22 -0
  102. package/dist/web/server/agents-page-DEqPV-eG-BR5MR74O.js +215 -0
  103. package/dist/web/server/{artifacts-panel-COSC8o7j-GKW2HH2G.js → artifacts-panel-DLO8OfXb-B2ZWCDFP.js} +35 -29
  104. package/dist/web/server/{chat-command-palette-CuOWdzkk-PKZQ5EZP.js → chat-command-palette-CaDQAMAu-KDH7BTDS.js} +22 -15
  105. package/dist/web/server/chunk-2ETDIMNM.js +40 -0
  106. package/dist/web/server/{chunk-2VKVSL6Y.js → chunk-35RIM6VP.js} +128 -127
  107. package/dist/web/server/chunk-5IE54MRG.js +207 -0
  108. package/dist/web/server/{chunk-VUBITQ5X.js → chunk-5MOXRFX6.js} +180 -7
  109. package/dist/web/server/{chunk-6GTTTYSE.js → chunk-6AFVCERK.js} +72 -79
  110. package/dist/web/server/chunk-6GYLXDX3.js +588 -0
  111. package/dist/web/server/chunk-7DQQMT5V.js +8993 -0
  112. package/dist/web/server/chunk-APOS34PW.js +8965 -0
  113. package/dist/web/server/{chunk-BUKOEXE7.js → chunk-AXN2OBPF.js} +2 -4
  114. package/dist/web/server/{chunk-WCKKN5BR.js → chunk-B5FKCW75.js} +357 -910
  115. package/dist/web/server/chunk-BD7YKYWL.js +1007 -0
  116. package/dist/web/server/{chunk-36CAMOVG.js → chunk-BZ2EAUZZ.js} +10 -12
  117. package/dist/web/server/chunk-CE7U5QB2.js +42 -0
  118. package/dist/web/server/chunk-FNV3WZXL.js +125 -0
  119. package/dist/web/server/{chunk-GLSR4ZI2.js → chunk-FSQWWR2M.js} +698 -832
  120. package/dist/web/server/chunk-FT7HNDR5.js +143 -0
  121. package/dist/web/server/chunk-GNXIDE26.js +44 -0
  122. package/dist/web/server/{chunk-ORCOCCER.js → chunk-HAFELESQ.js} +5 -7
  123. package/dist/web/server/{chunk-LLO4MNGE.js → chunk-HUHUPGHT.js} +53 -45
  124. package/dist/web/server/{chunk-QSM3BRMA.js → chunk-KBMRRJQN.js} +256 -157
  125. package/dist/web/server/chunk-KDCSEISZ.js +6890 -0
  126. package/dist/web/server/chunk-KSGGSGOA.js +50 -0
  127. package/dist/web/server/chunk-PQVTLG3E.js +270 -0
  128. package/dist/web/server/{chunk-YU6RHHK6.js → chunk-Q4ECIATK.js} +65 -53
  129. package/dist/web/server/{chunk-IN2ATSEG.js → chunk-R4BS3KYI.js} +2 -4
  130. package/dist/web/server/chunk-RX2ZJARF.js +73 -0
  131. package/dist/web/server/{chunk-AKSDWYJY.js → chunk-SYS5FDNA.js} +5 -5
  132. package/dist/web/server/chunk-TOJA3X5N.js +421 -0
  133. package/dist/web/server/chunk-TQ2RECTH.js +193 -0
  134. package/dist/web/server/{chunk-KHHXJZK7.js → chunk-TTNONWZZ.js} +16001 -14668
  135. package/dist/web/server/chunk-TXZDDJCT.js +5115 -0
  136. package/dist/web/server/{chunk-XA7EOCHM.js → chunk-UDUG3MYZ.js} +2 -2
  137. package/dist/web/server/{chunk-EBC7QORX.js → chunk-V2GCVTDP.js} +5056 -12556
  138. package/dist/web/server/{chunk-TMQ3MT3D.js → chunk-VDEUVEWL.js} +2255 -1
  139. package/dist/web/server/chunk-VM3U6PUU.js +769 -0
  140. package/dist/web/server/connectors-C0xm91Ss-DJVBGD73.js +22 -0
  141. package/dist/web/server/connectors-page-B6tJNZ6c-R5K4NSAT.js +66 -0
  142. package/dist/web/server/{create-project-dialog-0-arQpsX-ZELQKHS5.js → create-project-dialog-PFPHHWIV-GH7JR5IK.js} +27 -18
  143. package/dist/web/server/{dist-7G2NZPF4.js → dist-GQUZLXN5.js} +2 -2
  144. package/dist/web/server/{dist-E5637ZAY.js → dist-MN5NWCX6.js} +1 -1
  145. package/dist/web/server/{fork-picker-dialog-fj9p33Mq-I5SA3GLJ.js → fork-picker-dialog-DFpKOdAw-JPLJSYYU.js} +7 -12
  146. package/dist/web/server/{markdown-CShfYRVO-RBTK7TRB.js → markdown-Cc8V9dOF-JTNTJKQU.js} +7 -5
  147. package/dist/web/server/{markdown-code-BDV_2b2T-6JYA5FWZ.js → markdown-code-gaRnbgNM-V5LIRYCD.js} +46 -8
  148. package/dist/web/server/{message-queue-BBC843IU-GY4ZIMM4.js → message-queue-nQ2_kU82-KKSLYR4S.js} +7 -16
  149. package/dist/web/server/{model-selector-list-DE6aLNXt-LJZMCYOI.js → model-selector-list-By_G7_Hr-GXT27BZO.js} +12 -16
  150. package/dist/web/server/{openui-renderer-C3aqSKuS-PWLWJFYO.js → openui-renderer-B9D8-Av--LFZP4U5V.js} +20 -15
  151. package/dist/web/server/{prompt-suggestions-CpTK_fHV-UKJDTLVM.js → prompt-suggestions-B67Uy5Rk-5SMTSIFQ.js} +5 -4
  152. package/dist/web/server/{rehype-katex-IDPYWU6M.js → rehype-katex-CYHGKI6Q.js} +490 -843
  153. package/dist/web/server/{repl-panel-1kSS1UGd-U64BPA7X.js → repl-panel-1kSS1UGd-POXRYDDJ.js} +2 -3
  154. package/dist/web/server/{resources-panel-DWb0eGKa-K4EM3H7Y.js → resources-panel-CTzOOKPz-5G6RS2D6.js} +18 -12
  155. package/dist/web/server/router-CnBux_Ld-YTVBMJFL.js +23 -0
  156. package/dist/web/server/routes-BUGzvQoO-WW43X7W2.js +124 -0
  157. package/dist/web/server/server.js +3 -3
  158. package/dist/web/server/session-activity-panel-f0d3fCm7-I6L5IKFQ.js +181 -0
  159. package/dist/web/server/{session-insights-panel-CfMX2NRu-6HWZTTAC.js → session-insights-panel-BiVObm_6-AP4FITT7.js} +2 -12
  160. package/dist/web/server/session-reasoning-panel-QIt_xjP0-FKJWMNHO.js +70 -0
  161. package/dist/web/server/session-tool-renderer-Cg_ZPHxS-BNQKNJNZ.js +34 -0
  162. package/dist/web/server/{session-tree-panel-HNl6R9VZ-4JUF34M7.js → session-tree-panel-B--el8O5-NZOZJM5L.js} +18 -13
  163. package/dist/web/server/{settings-dialog-DGZBA5Z_-6HYFMPNZ.js → settings-dialog-D_eJN2ia-W47Y474K.js} +104 -795
  164. package/dist/web/server/{subagent-chat-panel-DuB4hqUk-LDCAJOCL.js → subagent-chat-panel-C9nWP21E-D5C2TTYD.js} +22 -17
  165. package/dist/web/server/{subagents-panel-wAvx3-Rs-L6UTDFUX.js → subagents-panel-fAKvBNRG-O7QHXNE2.js} +26 -22
  166. package/dist/web/server/{workspace-panel-CPzJZwgv-YS7PTI5C.js → workspace-panel-CZMNMU63-SYOSM3B7.js} +23 -17
  167. package/package.json +2 -2
  168. package/dist/web/client/assets/DialogTitle-D-zqaHvF.js +0 -1
  169. package/dist/web/client/assets/FloatingPortal-73ZRZeD9.js +0 -1
  170. package/dist/web/client/assets/action-swap-BcFwS6is.js +0 -1
  171. package/dist/web/client/assets/alert-dialog-DtXvVhsF.js +0 -1
  172. package/dist/web/client/assets/artifacts-panel-Bseg97yQ.js +0 -1
  173. package/dist/web/client/assets/badge-C--lf3bb.js +0 -57
  174. package/dist/web/client/assets/button-BJZe4vNJ.js +0 -1
  175. package/dist/web/client/assets/chat-command-palette-D_rm1r9d.js +0 -1
  176. package/dist/web/client/assets/chevron-up-CqeJYyZO.js +0 -1
  177. package/dist/web/client/assets/collapsible-DauSnbYp.js +0 -1
  178. package/dist/web/client/assets/create-project-dialog-m-9aoobN.js +0 -1
  179. package/dist/web/client/assets/createBaseUIEventDetails-DklXWq23.js +0 -1
  180. package/dist/web/client/assets/dialog-Ddouieuu.js +0 -1
  181. package/dist/web/client/assets/eye-Cs0lNChA.js +0 -1
  182. package/dist/web/client/assets/globals-C961mr-b.css +0 -2
  183. package/dist/web/client/assets/index-Bz5W4EOn.js +0 -13
  184. package/dist/web/client/assets/input-Def1xOZz.js +0 -1
  185. package/dist/web/client/assets/markdown-Big27m-v.js +0 -2
  186. package/dist/web/client/assets/markdown-code-7L4RiS50.js +0 -3
  187. package/dist/web/client/assets/message-queue-Bg2MiJHM.js +0 -1
  188. package/dist/web/client/assets/mutation-DOi2Qgfa.js +0 -1
  189. package/dist/web/client/assets/notify-DhtmUPfE.js +0 -1
  190. package/dist/web/client/assets/openui-renderer-MIB3JKYa.js +0 -291
  191. package/dist/web/client/assets/provider-label-B_vy60P0.js +0 -1
  192. package/dist/web/client/assets/rehype-katex-A4PtQgTX.js +0 -259
  193. package/dist/web/client/assets/right-panel-context-DHKWoetk.js +0 -1
  194. package/dist/web/client/assets/right-panel-registry-hKJN__3l.js +0 -2
  195. package/dist/web/client/assets/routes-C3h32Lj_.js +0 -16
  196. package/dist/web/client/assets/select-Buvv1tIo.js +0 -1
  197. package/dist/web/client/assets/session-reasoning-panel-DmEbXOrR.js +0 -1
  198. package/dist/web/client/assets/session-tool-renderer-Daol5fJw.js +0 -169
  199. package/dist/web/client/assets/settings-dialog-DYbx3xuq.js +0 -2
  200. package/dist/web/client/assets/sparkles-D_ANe-HY.js +0 -1
  201. package/dist/web/client/assets/subagent-transcript-Bx-rHni-.js +0 -1
  202. package/dist/web/client/assets/surfaces-B8xTOFeK.js +0 -1
  203. package/dist/web/client/assets/switch-CDfAwEvs.js +0 -1
  204. package/dist/web/client/assets/terminal-Ceucj7us.js +0 -1
  205. package/dist/web/client/assets/toast-9zXN-yVk.js +0 -1
  206. package/dist/web/client/assets/tool-part-normalizer-NbPs9kd1.js +0 -4
  207. package/dist/web/client/assets/tool-result-BccnO34D.js +0 -4
  208. package/dist/web/client/assets/tool-timeline-DlBZyd4j.js +0 -1
  209. package/dist/web/client/assets/types-D5hZ8IyV.js +0 -1
  210. package/dist/web/client/assets/ui-preferences-1YaENqef.js +0 -1
  211. package/dist/web/client/assets/use-hover-capable-MwFjBLZQ.js +0 -1
  212. package/dist/web/client/assets/workspace-path-nav-BRwuLsFl.js +0 -2
  213. package/dist/web/client/assets/wrench-BYnD147U.js +0 -1
  214. package/dist/web/server/_tanstack-start-manifest_v-YlngJGUa-YTWBGR7L.js +0 -93
  215. package/dist/web/server/chunk-2PAW6K4Q.js +0 -56
  216. package/dist/web/server/chunk-CHSKEU3V.js +0 -166
  217. package/dist/web/server/chunk-FB3UHLLN.js +0 -49
  218. package/dist/web/server/chunk-GLH2GWMG.js +0 -2182
  219. package/dist/web/server/chunk-OXEAXEWD.js +0 -13
  220. package/dist/web/server/chunk-SIJVVYQT.js +0 -234
  221. package/dist/web/server/chunk-UQV2NU63.js +0 -163
  222. package/dist/web/server/chunk-ZUZPJNLY.js +0 -25217
  223. package/dist/web/server/router-DZYr-9uT-AEXHEFXF.js +0 -31
  224. package/dist/web/server/routes-vYxWRhis-AAZ73SNP.js +0 -120
  225. package/dist/web/server/session-reasoning-panel-XXU2yIOW-XXCKHISS.js +0 -192
  226. package/dist/web/server/session-tool-renderer-Dtt74Mts-7YYNSWRV.js +0 -29
  227. package/dist/web/server/tool-timeline-BKWsrZHK-3LGCOTPH.js +0 -12
@@ -6465,13 +6465,25 @@ function useNavigate(_defaultOpts) {
6465
6465
  }, [_defaultOpts?.from, router]);
6466
6466
  }
6467
6467
 
6468
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/matchContext.js
6469
- import * as React$15 from "react";
6470
- var matchContext = React$15.createContext(void 0);
6471
- var dummyMatchContext = React$15.createContext(void 0);
6468
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/ClientOnly.js
6469
+ import React from "react";
6470
+ import { jsx } from "react/jsx-runtime";
6471
+ var getSnapshot = () => true;
6472
+ var getServerSnapshot = () => false;
6473
+ function ClientOnly({ children, fallback = null }) {
6474
+ return /* @__PURE__ */ jsx(React.Fragment, { children: useHydrated() ? children : fallback });
6475
+ }
6476
+ function useHydrated(enabled = true) {
6477
+ return React.useSyncExternalStore(subscribe, getSnapshot, enabled ? getServerSnapshot : getSnapshot);
6478
+ }
6479
+ function subscribe() {
6480
+ return () => {
6481
+ };
6482
+ }
6472
6483
 
6473
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useMatch.js
6474
- import * as React$16 from "react";
6484
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/link.js
6485
+ import * as React$15 from "react";
6486
+ import { jsx as jsx2 } from "react/jsx-runtime";
6475
6487
 
6476
6488
  // node_modules/.pnpm/@tanstack+store@0.11.2/node_modules/@tanstack/store/dist/alien.js
6477
6489
  // @__NO_SIDE_EFFECTS__
@@ -6829,120 +6841,9 @@ function useSelector(source, selector = (s) => s, options) {
6829
6841
  return useSyncExternalStoreWithSelector(subscribe2, getSnapshot2, getSnapshot2, selector, compare);
6830
6842
  }
6831
6843
 
6832
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useMatch.js
6833
- var dummyMatch = {};
6834
- function useStructuralSharing(opts, router) {
6835
- const previousResult = React$16.useRef();
6836
- return (slice) => {
6837
- const selected = opts?.select ? opts.select(slice) : slice;
6838
- if (opts?.structuralSharing ?? router.options.defaultStructuralSharing) return previousResult.current = replaceEqualDeep(previousResult.current, selected);
6839
- return selected;
6840
- };
6841
- }
6842
- function useMatch(opts) {
6843
- const router = useRouter();
6844
- const nearestRouteId = React$16.useContext(opts.from ? dummyMatchContext : matchContext);
6845
- const routeId = opts.from ?? nearestRouteId;
6846
- const matchStore = router.stores.getMatchStore(routeId);
6847
- if (isServer ?? router.isServer) {
6848
- const match = matchStore.get();
6849
- if (!match) {
6850
- if (opts.shouldThrow ?? true) {
6851
- if (process.env.NODE_ENV !== "production") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
6852
- invariant();
6853
- }
6854
- return;
6855
- }
6856
- return opts.select ? opts.select(match) : match;
6857
- }
6858
- const selector = useStructuralSharing(opts, router);
6859
- const matchSelection = useSelector(matchStore, (match) => match ? selector(match) : dummyMatch);
6860
- if (matchSelection !== dummyMatch) return matchSelection;
6861
- if (opts.shouldThrow ?? true) {
6862
- if (process.env.NODE_ENV !== "production") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
6863
- invariant();
6864
- }
6865
- }
6866
-
6867
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useLoaderData.js
6868
- function useLoaderData(opts) {
6869
- return useMatch({
6870
- from: opts.from,
6871
- strict: opts.strict,
6872
- structuralSharing: opts.structuralSharing,
6873
- select: (match) => {
6874
- return opts.select ? opts.select(match.loaderData) : match.loaderData;
6875
- }
6876
- });
6877
- }
6878
-
6879
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useLoaderDeps.js
6880
- function useLoaderDeps(opts) {
6881
- const { select, ...rest } = opts;
6882
- return useMatch({
6883
- ...rest,
6884
- select: (match) => {
6885
- return select ? select(match.loaderDeps) : match.loaderDeps;
6886
- }
6887
- });
6888
- }
6889
-
6890
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useParams.js
6891
- function useParams(opts) {
6892
- return useMatch({
6893
- from: opts.from,
6894
- shouldThrow: opts.shouldThrow,
6895
- structuralSharing: opts.structuralSharing,
6896
- strict: opts.strict,
6897
- select: (match) => {
6898
- const params = opts.strict === false ? match.params : match._strictParams;
6899
- return opts.select ? opts.select(params) : params;
6900
- }
6901
- });
6902
- }
6903
-
6904
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useSearch.js
6905
- function useSearch(opts) {
6906
- return useMatch({
6907
- from: opts.from,
6908
- strict: opts.strict,
6909
- shouldThrow: opts.shouldThrow,
6910
- structuralSharing: opts.structuralSharing,
6911
- select: (match) => {
6912
- return opts.select ? opts.select(match.search) : match.search;
6913
- }
6914
- });
6915
- }
6916
-
6917
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useRouteContext.js
6918
- function useRouteContext(opts) {
6919
- return useMatch({
6920
- ...opts,
6921
- select: (match) => opts.select ? opts.select(match.context) : match.context
6922
- });
6923
- }
6924
-
6925
- // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/ClientOnly.js
6926
- import React from "react";
6927
- import { jsx } from "react/jsx-runtime";
6928
- var getSnapshot = () => true;
6929
- var getServerSnapshot = () => false;
6930
- function ClientOnly({ children, fallback = null }) {
6931
- return /* @__PURE__ */ jsx(React.Fragment, { children: useHydrated() ? children : fallback });
6932
- }
6933
- function useHydrated(enabled = true) {
6934
- return React.useSyncExternalStore(subscribe, getSnapshot, enabled ? getServerSnapshot : getSnapshot);
6935
- }
6936
- function subscribe() {
6937
- return () => {
6938
- };
6939
- }
6940
-
6941
6844
  // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/link.js
6942
- import * as React$17 from "react";
6943
- import { jsx as jsx2 } from "react/jsx-runtime";
6944
6845
  function useStableValues(...values) {
6945
- const ref = React$17.useRef(values);
6846
+ const ref = React$15.useRef(values);
6946
6847
  const stable = ref.current;
6947
6848
  values.forEach((value, index) => {
6948
6849
  if (!deepEqual(stable[index], value, false, true)) stable[index] = value;
@@ -6978,8 +6879,8 @@ function resolveIsActive(location, next, activeOptions, basepath, isHydrated) {
6978
6879
  function useLinkProps(options, forwardedRef, host) {
6979
6880
  const router = useRouter();
6980
6881
  if (isServer ?? router.isServer) return getServerLinkProps(router, options, forwardedRef, host);
6981
- const innerRef = React$17.useRef(null);
6982
- const mergedRef = React$17.useCallback((element) => {
6882
+ const innerRef = React$15.useRef(null);
6883
+ const mergedRef = React$15.useCallback((element) => {
6983
6884
  innerRef.current = element;
6984
6885
  if (typeof forwardedRef === "function") return forwardedRef(element);
6985
6886
  if (forwardedRef) forwardedRef.current = element;
@@ -6987,7 +6888,7 @@ function useLinkProps(options, forwardedRef, host) {
6987
6888
  const { activeOptions, to, preload: userPreload, preloadDelay: userPreloadDelay, hashScrollIntoView, replace, startTransition: startTransition2, resetScroll, viewTransition, ignoreBlocker, disabled, target, onClick, onBlur, onFocus, onMouseEnter, onMouseLeave, onTouchStart } = options;
6988
6889
  const isHydrated = useHydrated(!!activeOptions?.includeHash);
6989
6890
  const [stableSearch, stableParams, stableActiveOptions] = useStableValues(options.search, options.params, activeOptions);
6990
- const [_options, dest] = React$17.useMemo(() => [options, { ...options }], [
6891
+ const [_options, dest] = React$15.useMemo(() => [options, { ...options }], [
6991
6892
  router,
6992
6893
  options.from,
6993
6894
  options._fromLocation,
@@ -6999,7 +6900,7 @@ function useLinkProps(options, forwardedRef, host) {
6999
6900
  options.mask,
7000
6901
  options.unsafeRelative
7001
6902
  ]);
7002
- const selectLinkState = React$17.useMemo(() => {
6903
+ const selectLinkState = React$15.useMemo(() => {
7003
6904
  const directExternalLink = resolveExternalLink(to, router.protocolAllowlist);
7004
6905
  if (directExternalLink !== void 0) {
7005
6906
  const state = [directExternalLink ?? void 0];
@@ -7029,10 +6930,10 @@ function useLinkProps(options, forwardedRef, host) {
7029
6930
  const [href, isActive] = useSelector(router.stores.location, selectLinkState, LINK_SELECTOR_OPTIONS);
7030
6931
  const externalLink = isActive === void 0 && href;
7031
6932
  const linkDisabled = disabled || href === void 0;
7032
- const hasRenderFetched = React$17.useRef(false);
6933
+ const hasRenderFetched = React$15.useRef(false);
7033
6934
  const preload = options.reloadDocument || externalLink || linkDisabled ? false : userPreload ?? router.options.defaultPreload;
7034
6935
  const preloadDelay = userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0;
7035
- const enqueuePreload = React$17.useCallback((e) => {
6936
+ const enqueuePreload = React$15.useCallback((e) => {
7036
6937
  const isIntersecting = e?.isIntersecting;
7037
6938
  if (!(isIntersecting ?? preload === "intent")) {
7038
6939
  if (isIntersecting === false) cancelPreload(innerRef);
@@ -7054,7 +6955,7 @@ function useLinkProps(options, forwardedRef, host) {
7054
6955
  preload,
7055
6956
  preloadDelay
7056
6957
  ]);
7057
- React$17.useEffect(() => {
6958
+ React$15.useEffect(() => {
7058
6959
  if (!preload) return;
7059
6960
  if (preload === "render" && !hasRenderFetched.current) {
7060
6961
  hasRenderFetched.current = true;
@@ -7208,11 +7109,11 @@ function getHrefOption(next, router, disabled) {
7208
7109
  }
7209
7110
  return href;
7210
7111
  }
7211
- var Link = React$17.memo(React$17.forwardRef((props, ref) => {
7112
+ var Link = React$15.memo(React$15.forwardRef((props, ref) => {
7212
7113
  const host = props._asChild || "a";
7213
7114
  const linkProps = useLinkProps(props, ref, host);
7214
7115
  const children = typeof props.children === "function" ? props.children({ isActive: linkProps["data-status"] === "active" }) : props.children;
7215
- return React$17.createElement(host, linkProps, children);
7116
+ return React$15.createElement(host, linkProps, children);
7216
7117
  }), areLinkPropsEqual);
7217
7118
  function areLinkPropsEqual(prev, next) {
7218
7119
  let extraKeys = 0;
@@ -7225,6 +7126,105 @@ function areLinkPropsEqual(prev, next) {
7225
7126
  return extraKeys === 0;
7226
7127
  }
7227
7128
 
7129
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/matchContext.js
7130
+ import * as React$16 from "react";
7131
+ var matchContext = React$16.createContext(void 0);
7132
+ var dummyMatchContext = React$16.createContext(void 0);
7133
+
7134
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useMatch.js
7135
+ import * as React$17 from "react";
7136
+ var dummyMatch = {};
7137
+ function useStructuralSharing(opts, router) {
7138
+ const previousResult = React$17.useRef();
7139
+ return (slice) => {
7140
+ const selected = opts?.select ? opts.select(slice) : slice;
7141
+ if (opts?.structuralSharing ?? router.options.defaultStructuralSharing) return previousResult.current = replaceEqualDeep(previousResult.current, selected);
7142
+ return selected;
7143
+ };
7144
+ }
7145
+ function useMatch(opts) {
7146
+ const router = useRouter();
7147
+ const nearestRouteId = React$17.useContext(opts.from ? dummyMatchContext : matchContext);
7148
+ const routeId = opts.from ?? nearestRouteId;
7149
+ const matchStore = router.stores.getMatchStore(routeId);
7150
+ if (isServer ?? router.isServer) {
7151
+ const match = matchStore.get();
7152
+ if (!match) {
7153
+ if (opts.shouldThrow ?? true) {
7154
+ if (process.env.NODE_ENV !== "production") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
7155
+ invariant();
7156
+ }
7157
+ return;
7158
+ }
7159
+ return opts.select ? opts.select(match) : match;
7160
+ }
7161
+ const selector = useStructuralSharing(opts, router);
7162
+ const matchSelection = useSelector(matchStore, (match) => match ? selector(match) : dummyMatch);
7163
+ if (matchSelection !== dummyMatch) return matchSelection;
7164
+ if (opts.shouldThrow ?? true) {
7165
+ if (process.env.NODE_ENV !== "production") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
7166
+ invariant();
7167
+ }
7168
+ }
7169
+
7170
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useLoaderData.js
7171
+ function useLoaderData(opts) {
7172
+ return useMatch({
7173
+ from: opts.from,
7174
+ strict: opts.strict,
7175
+ structuralSharing: opts.structuralSharing,
7176
+ select: (match) => {
7177
+ return opts.select ? opts.select(match.loaderData) : match.loaderData;
7178
+ }
7179
+ });
7180
+ }
7181
+
7182
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useLoaderDeps.js
7183
+ function useLoaderDeps(opts) {
7184
+ const { select, ...rest } = opts;
7185
+ return useMatch({
7186
+ ...rest,
7187
+ select: (match) => {
7188
+ return select ? select(match.loaderDeps) : match.loaderDeps;
7189
+ }
7190
+ });
7191
+ }
7192
+
7193
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useParams.js
7194
+ function useParams(opts) {
7195
+ return useMatch({
7196
+ from: opts.from,
7197
+ shouldThrow: opts.shouldThrow,
7198
+ structuralSharing: opts.structuralSharing,
7199
+ strict: opts.strict,
7200
+ select: (match) => {
7201
+ const params = opts.strict === false ? match.params : match._strictParams;
7202
+ return opts.select ? opts.select(params) : params;
7203
+ }
7204
+ });
7205
+ }
7206
+
7207
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useSearch.js
7208
+ function useSearch(opts) {
7209
+ return useMatch({
7210
+ from: opts.from,
7211
+ strict: opts.strict,
7212
+ shouldThrow: opts.shouldThrow,
7213
+ structuralSharing: opts.structuralSharing,
7214
+ select: (match) => {
7215
+ return opts.select ? opts.select(match.search) : match.search;
7216
+ }
7217
+ });
7218
+ }
7219
+
7220
+ // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useRouteContext.js
7221
+ function useRouteContext(opts) {
7222
+ return useMatch({
7223
+ ...opts,
7224
+ select: (match) => opts.select ? opts.select(match.context) : match.context
7225
+ });
7226
+ }
7227
+
7228
7228
  // node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/route.js
7229
7229
  import React2 from "react";
7230
7230
  import { jsx as jsx3 } from "react/jsx-runtime";
@@ -8219,6 +8219,7 @@ export {
8219
8219
  makeSerovalPlugin,
8220
8220
  RawStream,
8221
8221
  useNavigate,
8222
+ Link,
8222
8223
  createRootRoute,
8223
8224
  createFileRoute,
8224
8225
  lazyRouteComponent,
@@ -0,0 +1,207 @@
1
+ import {
2
+ Trace,
3
+ TraceCollapsible,
4
+ TraceCollapsibleContent,
5
+ TraceCollapsibleTrigger,
6
+ TraceDescription,
7
+ TraceIcon,
8
+ TraceLine,
9
+ TraceTitle,
10
+ normalizeToolPart$1,
11
+ toolActionIconForName
12
+ } from "./chunk-V2GCVTDP.js";
13
+ import {
14
+ cn
15
+ } from "./chunk-VDEUVEWL.js";
16
+
17
+ // web/app/dist/server/assets/tool-timeline-BSpji3Vu.js
18
+ import { Suspense, lazy, useMemo, useState } from "react";
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ var LazySessionToolRenderer = lazy(() => import("./session-tool-renderer-Cg_ZPHxS-BNQKNJNZ.js").then((n) => n.n).then(({ SessionToolRenderer }) => ({ default: SessionToolRenderer })));
21
+ var NO_ARTIFACTS = [];
22
+ function artifactPanel(kind) {
23
+ return kind === "ipython" ? "repl" : "artifacts";
24
+ }
25
+ function withArtifact(step, artifact) {
26
+ if (!artifact) return step;
27
+ return {
28
+ ...step,
29
+ artifactId: artifact.id,
30
+ artifactTitle: artifact.title,
31
+ artifactTarget: artifactPanel(artifact.kind)
32
+ };
33
+ }
34
+ function record(value) {
35
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
36
+ }
37
+ function status(part, streaming) {
38
+ const state = part.state;
39
+ if (state === "output-error" || state === "error") return "error";
40
+ if (state === "cancelled" || state === "canceled" || state === "aborted" || state === "interrupted") return "cancelled";
41
+ if (state === "input-streaming" || state === "streaming") return streaming ? "running" : "cancelled";
42
+ if (state === "input-available" || state === "pending" || state === "queued") return "pending";
43
+ return streaming && part.output === void 0 && part.result === void 0 ? "running" : "complete";
44
+ }
45
+ function toolStep(part, fallbackId, streaming, nestedTools = [], isNestedTaskTool = false) {
46
+ const type = part.type;
47
+ if (typeof type !== "string" || !type.startsWith("tool-") || type === "tool-Question" || type === "tool-FleetReasoning" || type === "tool-Thinking" || isNestedTaskTool) return void 0;
48
+ const name = type.slice(5);
49
+ const lower = name.toLowerCase();
50
+ const verb = lower.includes("edit") || lower.includes("write") || lower.includes("patch") ? "Edited" : lower.includes("read") ? "Read" : lower.includes("search") || lower.includes("grep") || lower.includes("glob") ? "Searched" : lower.includes("bash") || lower.includes("shell") || lower.includes("python") || lower.includes("ipython") ? "Ran" : name;
51
+ const normalized = normalizeToolPart$1(part);
52
+ return {
53
+ id: typeof part.toolCallId === "string" ? part.toolCallId : fallbackId,
54
+ verb,
55
+ target: name,
56
+ status: status(part, streaming),
57
+ part,
58
+ nestedTools,
59
+ traceDescription: normalized?.traceDescription,
60
+ durationLabel: normalized?.durationLabel,
61
+ reportedError: normalized?.outputSummary.isError
62
+ };
63
+ }
64
+ function artifactStep(artifact) {
65
+ return {
66
+ id: `artifact:${artifact.id}`,
67
+ verb: artifact.kind === "compaction" ? "Compacted" : artifact.kind === "refinement" ? "Refined" : artifact.kind === "rlm" ? "Delegated" : artifact.kind === "diff" ? "Edited" : "Completed",
68
+ target: artifact.kind === "bash" ? "Bash output" : artifact.kind === "ipython" ? "IPython result" : artifact.kind === "diff" ? "File change" : artifact.kind === "rlm" ? "Child task" : artifact.kind === "refinement" ? "Refinement" : "Session activity",
69
+ status: artifact.status === "success" ? "complete" : artifact.status
70
+ };
71
+ }
72
+ function TimelineStepRow({ step, onOpenArtifact, renderToolDetails }) {
73
+ const Icon = toolActionIconForName(step.part?.type.replace(/^tool-/, "") ?? step.target);
74
+ const artifactId = step.artifactId;
75
+ const openLabel = artifactId && step.artifactTitle ? step.artifactTarget === "repl" ? `Open ${step.artifactTitle} in REPL` : `Open ${step.artifactTitle} in artifacts` : void 0;
76
+ const detailLabel = `Details for ${step.target}${step.id ? ` (${step.id})` : ""}`;
77
+ const statusLabel = step.reportedError ? "reported error" : step.status === "error" ? "failed" : step.status === "running" ? "running" : step.status === "pending" ? "waiting" : step.status === "cancelled" ? "cancelled" : "done";
78
+ const line = /* @__PURE__ */ jsxs(TraceLine, {
79
+ status: step.status === "running" ? "running" : step.status === "error" ? "error" : step.status === "pending" ? "pending" : void 0,
80
+ children: [
81
+ /* @__PURE__ */ jsx(TraceIcon, { children: /* @__PURE__ */ jsx(Icon, { className: cn("size-3.5", step.status === "running" && "animate-pulse text-primary", step.status === "error" && "text-destructive") }) }),
82
+ /* @__PURE__ */ jsxs(TraceTitle, { children: [
83
+ step.verb,
84
+ " ",
85
+ step.target
86
+ ] }),
87
+ /* @__PURE__ */ jsx(TraceDescription, {
88
+ className: step.reportedError ? "text-destructive" : void 0,
89
+ children: statusLabel
90
+ }),
91
+ step.traceDescription ? /* @__PURE__ */ jsx(TraceDescription, {
92
+ className: "max-w-48 truncate",
93
+ title: step.traceDescription,
94
+ children: step.traceDescription
95
+ }) : null,
96
+ step.durationLabel ? /* @__PURE__ */ jsx(TraceDescription, { children: step.durationLabel }) : null
97
+ ]
98
+ });
99
+ return /* @__PURE__ */ jsxs("div", {
100
+ className: "flex min-w-0 items-start gap-2",
101
+ children: [step.part ? /* @__PURE__ */ jsxs(TraceCollapsible, {
102
+ className: "min-w-0 flex-1",
103
+ children: [/* @__PURE__ */ jsx(TraceCollapsibleTrigger, {
104
+ "aria-label": detailLabel,
105
+ children: line
106
+ }), /* @__PURE__ */ jsx(TraceCollapsibleContent, { children: renderToolDetails ? renderToolDetails(step.part, step.status === "running", step.nestedTools) : /* @__PURE__ */ jsx(Suspense, {
107
+ fallback: null,
108
+ children: /* @__PURE__ */ jsx(LazySessionToolRenderer, {
109
+ part: step.part,
110
+ nestedTools: step.nestedTools,
111
+ chatStatus: step.status === "running" ? "streaming" : void 0,
112
+ insideTrace: true
113
+ })
114
+ }) })]
115
+ }) : /* @__PURE__ */ jsx("div", {
116
+ className: "min-w-0 flex-1",
117
+ children: line
118
+ }), openLabel && artifactId && onOpenArtifact ? /* @__PURE__ */ jsx("button", {
119
+ type: "button",
120
+ className: "shrink-0 text-micro underline",
121
+ "aria-label": openLabel,
122
+ onClick: () => onOpenArtifact(artifactId, step.artifactTarget),
123
+ children: "Open"
124
+ }) : null]
125
+ });
126
+ }
127
+ function ToolTimeline({ messages, artifacts = NO_ARTIFACTS, streaming, className, onOpenArtifact, renderToolDetails }) {
128
+ const steps = useMemo(() => {
129
+ const seen = /* @__PURE__ */ new Set();
130
+ const artifactByToolCallId = new Map(artifacts.flatMap((artifact) => artifact.sourceToolCallId ? [[artifact.sourceToolCallId, artifact]] : []));
131
+ const fromMessages = messages.flatMap((message) => {
132
+ const taskPartIds = new Set(message.parts.flatMap((part) => {
133
+ const source = record(part);
134
+ return (source?.type === "tool-Task" || source?.type === "tool-Agent") && typeof source.toolCallId === "string" ? [source.toolCallId] : [];
135
+ }));
136
+ const nestedToolsByTask = /* @__PURE__ */ new Map();
137
+ const nestedToolIds = /* @__PURE__ */ new Set();
138
+ for (const part of message.parts) {
139
+ const source = record(part);
140
+ const toolCallId = typeof source?.toolCallId === "string" ? source.toolCallId : void 0;
141
+ const separator = toolCallId?.indexOf(":") ?? -1;
142
+ if (!toolCallId || separator <= 0) continue;
143
+ const parentId = toolCallId.slice(0, separator);
144
+ if (!taskPartIds.has(parentId)) continue;
145
+ nestedToolIds.add(toolCallId);
146
+ const children = nestedToolsByTask.get(parentId) ?? [];
147
+ children.push(source);
148
+ nestedToolsByTask.set(parentId, children);
149
+ }
150
+ return message.parts.flatMap((part, index) => {
151
+ const source = record(part) ?? {};
152
+ const toolCallId = typeof source.toolCallId === "string" ? source.toolCallId : void 0;
153
+ const step = toolStep(source, `${message.id}:${index}`, streaming, toolCallId ? nestedToolsByTask.get(toolCallId) ?? [] : [], toolCallId ? nestedToolIds.has(toolCallId) : false);
154
+ if (!step || seen.has(step.id)) return [];
155
+ seen.add(step.id);
156
+ return [withArtifact(step, artifactByToolCallId.get(step.id))];
157
+ });
158
+ });
159
+ const fromArtifacts = artifacts.flatMap((artifact) => {
160
+ if (artifact.kind === "recap") return [];
161
+ if (artifact.sourceToolCallId && seen.has(artifact.sourceToolCallId)) return [];
162
+ const step = withArtifact(artifactStep(artifact), artifact);
163
+ if (seen.has(step.id)) return [];
164
+ seen.add(step.id);
165
+ return [step];
166
+ });
167
+ return [...fromMessages, ...fromArtifacts];
168
+ }, [
169
+ artifacts,
170
+ messages,
171
+ streaming
172
+ ]);
173
+ const [open, setOpen] = useState(true);
174
+ if (steps.length === 0) return null;
175
+ const active = [...steps].reverse().find((step) => step.status === "running") ?? steps.at(-1);
176
+ const StatusIcon = toolActionIconForName(active?.part?.type.replace(/^tool-/, "") ?? active?.target ?? "activity");
177
+ return /* @__PURE__ */ jsx(Trace, {
178
+ className: cn("mb-2", className),
179
+ "data-testid": "tool-trace",
180
+ children: /* @__PURE__ */ jsxs(TraceCollapsible, {
181
+ open,
182
+ onOpenChange: setOpen,
183
+ children: [/* @__PURE__ */ jsx(TraceCollapsibleTrigger, {
184
+ "aria-label": `${steps.length} tool ${steps.length === 1 ? "action" : "actions"}`,
185
+ children: /* @__PURE__ */ jsxs(TraceLine, {
186
+ status: active?.status === "running" ? "running" : active?.status === "error" ? "error" : void 0,
187
+ children: [
188
+ /* @__PURE__ */ jsx(TraceIcon, { children: /* @__PURE__ */ jsx(StatusIcon, { className: cn("size-3.5", active?.status === "running" && "animate-spin") }) }),
189
+ /* @__PURE__ */ jsx(TraceTitle, { children: streaming && active ? `${active.verb} ${active.target}` : `${steps.length} tool ${steps.length === 1 ? "action" : "actions"}` }),
190
+ /* @__PURE__ */ jsx(TraceDescription, { children: steps.length })
191
+ ]
192
+ })
193
+ }), /* @__PURE__ */ jsx(TraceCollapsibleContent, { children: /* @__PURE__ */ jsx(Trace, {
194
+ className: "gap-1",
195
+ children: steps.map((step) => /* @__PURE__ */ jsx(TimelineStepRow, {
196
+ step,
197
+ onOpenArtifact,
198
+ renderToolDetails
199
+ }, step.id))
200
+ }) })]
201
+ })
202
+ });
203
+ }
204
+
205
+ export {
206
+ ToolTimeline
207
+ };