@opengeni/react 4.4.1 → 4.5.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 (700) hide show
  1. package/dist/app/app-state.js +25 -25
  2. package/dist/app/components/Composer.js +27 -27
  3. package/dist/app/components/agent/agent-capability-picker.js +4 -4
  4. package/dist/app/components/artifacts/artifact-browse-controls.js +3 -3
  5. package/dist/app/components/artifacts/artifact-library.js +19 -19
  6. package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
  7. package/dist/app/components/artifacts/chat-interactive-block.js +15 -15
  8. package/dist/app/components/artifacts/inline-chat-image.js +30 -29
  9. package/dist/app/components/artifacts/retained-file-preview.js +34 -33
  10. package/dist/app/components/artifacts/retained-text-preview.js +5 -5
  11. package/dist/app/components/artifacts/site-audience.js +4 -4
  12. package/dist/app/components/artifacts/site-conversations.js +20 -19
  13. package/dist/app/components/artifacts/site-data.js +18 -18
  14. package/dist/app/components/artifacts/site-publishing.js +39 -39
  15. package/dist/app/components/artifacts/site-settings.js +46 -46
  16. package/dist/app/components/billing-class-mark.js +5 -5
  17. package/dist/app/components/capabilities/capability-detail-sheet.js +8 -8
  18. package/dist/app/components/capabilities/capability-logo-source.js +11 -11
  19. package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
  20. package/dist/app/components/capabilities/native-connect-setup.js +14 -14
  21. package/dist/app/components/capabilities/perform-capability-action.js +1 -1
  22. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -15
  23. package/dist/app/components/capabilities/session-capability-card.js +77 -75
  24. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  25. package/dist/app/components/capabilities/session-chrome-card.js +35 -33
  26. package/dist/app/components/capabilities/session-custom-mcp-card.js +19 -19
  27. package/dist/app/components/capabilities/session-github-card.js +22 -22
  28. package/dist/app/components/capabilities/session-machine-card.js +34 -32
  29. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  30. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  31. package/dist/app/components/command-menu/chat-status.js +15 -14
  32. package/dist/app/components/command-menu/chat-switcher.js +16 -15
  33. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  34. package/dist/app/components/command-menu/command-menu.js +32 -110
  35. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  36. package/dist/app/components/command-menu/shortcut-sheet.js +15 -15
  37. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  38. package/dist/app/components/composer-mobile-plus-panel.js +17 -17
  39. package/dist/app/components/composer-mobile-plus.js +1 -1
  40. package/dist/app/components/credit-required-gate.js +1 -1
  41. package/dist/app/components/credit-required-prompt.js +9 -9
  42. package/dist/app/components/credits/coupon-redeem.js +2 -2
  43. package/dist/app/components/credits/credit-refusal-notice.js +2 -2
  44. package/dist/app/components/desktop/app-shots.js +6 -6
  45. package/dist/app/components/desktop/this-computer.js +4 -4
  46. package/dist/app/components/feedback.js +4 -4
  47. package/dist/app/components/follow-up-repository-menu-body.js +4 -4
  48. package/dist/app/components/follow-up-repository-picker.js +1 -1
  49. package/dist/app/components/github-app-connect-launcher.js +2 -2
  50. package/dist/app/components/in-app-help-link.js +2 -2
  51. package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
  52. package/dist/app/components/machines/connect-machine-dialog.js +18 -18
  53. package/dist/app/components/markdown.js +8 -8
  54. package/dist/app/components/message-context-pills.js +2 -2
  55. package/dist/app/components/models/models-ui.js +8 -8
  56. package/dist/app/components/new-session-starters.js +2 -2
  57. package/dist/app/components/pickers.js +8 -8
  58. package/dist/app/components/rail/rail-context.js +3 -3
  59. package/dist/app/components/rail/rail-sections.js +65 -62
  60. package/dist/app/components/rail/session-header.js +48 -47
  61. package/dist/app/components/rail/session-list.js +64 -61
  62. package/dist/app/components/rail/session-row-content.d.ts +6 -2
  63. package/dist/app/components/rail/session-row-content.js +1 -1
  64. package/dist/app/components/rail/session-row-hover-details.js +20 -19
  65. package/dist/app/components/rail/session-shell.js +104 -101
  66. package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
  67. package/dist/app/components/rail/site-session-group-heading.js +20 -3
  68. package/dist/app/components/repository-picker.js +4 -4
  69. package/dist/app/components/secrets/session-secrets-panel.js +3 -3
  70. package/dist/app/components/session/agent-configuration-panel.js +33 -33
  71. package/dist/app/components/session/artifact-link-boundary.js +2 -2
  72. package/dist/app/components/session/artifact-session-page.js +5 -5
  73. package/dist/app/components/session/banners.js +10 -10
  74. package/dist/app/components/session/codex-account-indicator.js +11 -11
  75. package/dist/app/components/session/editable-artifacts-workspace.js +44 -44
  76. package/dist/app/components/session/failed-session-banner.js +10 -10
  77. package/dist/app/components/session/human-input.js +57 -53
  78. package/dist/app/components/session/inspector.js +94 -90
  79. package/dist/app/components/session/inspector.js.map +1 -1
  80. package/dist/app/components/session/message-actions.js +4 -4
  81. package/dist/app/components/session/message-resource-attachments.js +20 -19
  82. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  83. package/dist/app/components/session/model-account-indicator.js +11 -11
  84. package/dist/app/components/session/model-context-inspector.js +2 -2
  85. package/dist/app/components/session/model-recovery-notice.js +3 -3
  86. package/dist/app/components/session/new-session-settings-menu.js +9 -9
  87. package/dist/app/components/session/sandbox-switcher.js +16 -16
  88. package/dist/app/components/session/sandbox-workspace.js +81 -77
  89. package/dist/app/components/session/search-markdown-highlight.js +9 -9
  90. package/dist/app/components/session/search-results-view.js +10 -10
  91. package/dist/app/components/session/session-admin-access.js +8 -8
  92. package/dist/app/components/session/session-admission-notice.js +6 -6
  93. package/dist/app/components/session/session-machine-access-notice.js +6 -6
  94. package/dist/app/components/session/session-retention.js +4 -4
  95. package/dist/app/components/session/session-search-dialog.js +11 -11
  96. package/dist/app/components/session/session-skill-reviews.js +1 -1
  97. package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
  98. package/dist/app/components/session/session-tenancy-control.js +40 -25
  99. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  100. package/dist/app/components/session/session-usage-limit-section.js +11 -11
  101. package/dist/app/components/session/session-wait-status.js +9 -8
  102. package/dist/app/components/session/session-wait-status.js.map +1 -1
  103. package/dist/app/components/session/site-origin-link.d.ts +1 -0
  104. package/dist/app/components/session/site-origin-link.js +2 -2
  105. package/dist/app/components/session/subagents.js +16 -15
  106. package/dist/app/components/session-connectors-menu-body.js +5 -5
  107. package/dist/app/components/settings/row-select.js +3 -3
  108. package/dist/app/components/transcription-settings.js +4 -4
  109. package/dist/app/components/ui/destructive-confirm.js +6 -6
  110. package/dist/app/components/usage/usage-entry.js +8 -8
  111. package/dist/app/components/workspace-composer-plus.js +21 -21
  112. package/dist/app/embed/memory-navigation.js +2 -2
  113. package/dist/app/embed/session-app.js +256 -250
  114. package/dist/app/lib/actions/actions-provider.js +15 -15
  115. package/dist/app/lib/actions/held-modifier.d.ts +11 -0
  116. package/dist/app/lib/app-surfaces.js +2 -2
  117. package/dist/app/lib/codex-usage-query.js +6 -6
  118. package/dist/app/lib/composer-connectors.js +12 -12
  119. package/dist/app/lib/console-site.d.ts +6 -0
  120. package/dist/app/lib/console-site.js +14 -0
  121. package/dist/app/lib/console-text.js +2 -2
  122. package/dist/app/lib/events.js +17 -16
  123. package/dist/app/lib/failed-session-copy.js +3 -3
  124. package/dist/app/lib/model-access-onboarding.js +3 -3
  125. package/dist/app/lib/move-chat-to-machine.js +3 -3
  126. package/dist/app/lib/navigation.d.ts +5 -0
  127. package/dist/app/lib/navigation.js +1 -1
  128. package/dist/app/lib/routes.d.ts +17 -0
  129. package/dist/app/lib/routes.js +9 -3
  130. package/dist/app/lib/session-branch-cache.js +13 -12
  131. package/dist/app/lib/session-deep-link.js +2 -2
  132. package/dist/app/lib/session-failure-toasts.d.ts +8 -0
  133. package/dist/app/lib/session-group-pagination.js +13 -12
  134. package/dist/app/lib/session-hover-facts.js +14 -13
  135. package/dist/app/lib/session-model.js +3 -3
  136. package/dist/app/lib/session-rail.js +9 -8
  137. package/dist/app/lib/session-rename.js +3 -3
  138. package/dist/app/lib/session-ui-features.d.ts +6 -1
  139. package/dist/app/lib/session-ui-features.js +1 -1
  140. package/dist/app/lib/sessions-group.d.ts +43 -3
  141. package/dist/app/lib/sessions-group.js +21 -14
  142. package/dist/app/lib/shared-query.js +3 -3
  143. package/dist/app/lib/site-opened.d.ts +6 -0
  144. package/dist/app/lib/site-opened.js +10 -0
  145. package/dist/app/lib/turn-failure-analytics.js +4 -4
  146. package/dist/app/lib/use-duplicate-site.js +3 -3
  147. package/dist/app/lib/use-follow-up-repositories.js +4 -4
  148. package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
  149. package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
  150. package/dist/app/lib/use-workspace-machines.js +6 -6
  151. package/dist/app/lib/use-workspace-model-catalog.js +7 -7
  152. package/dist/app/lib/use-workspace-rigs.js +8 -8
  153. package/dist/app/lib/workspace-navigation-preference.js +5 -5
  154. package/dist/app/lib/workspace-scope-context.js +4 -4
  155. package/dist/app/routes/artifacts.js +132 -149
  156. package/dist/app/routes/artifacts.js.map +1 -1
  157. package/dist/app/routes/retained-artifact.js +63 -62
  158. package/dist/app/routes/retained-artifact.js.map +1 -1
  159. package/dist/app/routes/session-unavailable.js +7 -5
  160. package/dist/app/routes/session.js +170 -166
  161. package/dist/app/routes/sessions-index.js +110 -108
  162. package/dist/app/routes/site-view.d.ts +11 -0
  163. package/dist/app/routes/site-view.js +597 -0
  164. package/dist/app/routes/site-view.js.map +1 -0
  165. package/dist/artifacts-document.js +4 -4
  166. package/dist/artifacts-presentation.js +4 -4
  167. package/dist/artifacts-spreadsheet.js +4 -4
  168. package/dist/artifacts.js +39 -39
  169. package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-QMCNV4RI.js} +9 -7
  170. package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-PMIAUXSO.js} +6 -6
  171. package/dist/{chunk-TGVVEGZG.js → chunk-22FFOHPT.js} +9 -9
  172. package/dist/chunk-22GTC4MZ.js +15 -0
  173. package/dist/chunk-22GTC4MZ.js.map +1 -0
  174. package/dist/{chunk-Z5WMLJKI.js → chunk-22JFMNMF.js} +92 -4
  175. package/dist/chunk-22JFMNMF.js.map +1 -0
  176. package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
  177. package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
  178. package/dist/chunk-2KO2G3RI.js.map +1 -0
  179. package/dist/{chunk-5POTDNQT.js → chunk-2NC7NZCE.js} +6 -6
  180. package/dist/{chunk-ZKYYZH6L.js → chunk-2QBYDGWO.js} +9 -9
  181. package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
  182. package/dist/{chunk-R63QEVPK.js → chunk-35BC2FU2.js} +16 -16
  183. package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
  184. package/dist/{chunk-S4SC5SSV.js → chunk-3GU7AWG7.js} +18 -18
  185. package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
  186. package/dist/{chunk-63VGE4OH.js → chunk-3RMKPHBL.js} +3 -3
  187. package/dist/{chunk-6JKZILLF.js → chunk-3RQUWFZT.js} +67 -67
  188. package/dist/{chunk-6JKZILLF.js.map → chunk-3RQUWFZT.js.map} +1 -1
  189. package/dist/{chunk-RQDFYQHA.js → chunk-3STBLX4O.js} +9 -9
  190. package/dist/{chunk-S4EZ3JUB.js → chunk-3X5FKDYQ.js} +23 -23
  191. package/dist/{chunk-KTRKZRID.js → chunk-4GLLWX33.js} +11 -11
  192. package/dist/{chunk-ROQOVH4N.js → chunk-4HEXNAFI.js} +20 -20
  193. package/dist/chunk-4HEXNAFI.js.map +1 -0
  194. package/dist/{chunk-SD2K5ZN5.js → chunk-4LPA25NQ.js} +4 -4
  195. package/dist/{chunk-KWKGBGAF.js → chunk-4RMN4E2Y.js} +9 -9
  196. package/dist/{chunk-X7ASQHR6.js → chunk-4SAGYEVB.js} +2 -2
  197. package/dist/{chunk-HTT3FB7T.js → chunk-4VK2R5QC.js} +3 -3
  198. package/dist/{chunk-DDK4WFJ3.js → chunk-4XQC7VLT.js} +9 -9
  199. package/dist/{chunk-IVOA3DXA.js → chunk-4YXAQMTD.js} +12 -12
  200. package/dist/{chunk-HOJGAJAB.js → chunk-52WK2GGK.js} +8 -8
  201. package/dist/{chunk-NYZQ7LO7.js → chunk-552UYIQ7.js} +20 -20
  202. package/dist/{chunk-LEXPBQ56.js → chunk-5DSKMG2I.js} +4 -4
  203. package/dist/{chunk-WNG757ID.js → chunk-5FA455GR.js} +4 -4
  204. package/dist/{chunk-HWDGJFM4.js → chunk-5FEN3KYH.js} +11 -11
  205. package/dist/{chunk-OSVHU2WU.js → chunk-5JHRMUAZ.js} +12 -12
  206. package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
  207. package/dist/chunk-5MJHH72T.js.map +1 -0
  208. package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
  209. package/dist/{chunk-GFUUFM2O.js → chunk-5W6ZDKRR.js} +6 -6
  210. package/dist/{chunk-6PQNLL4E.js → chunk-5W7KJ5NQ.js} +37 -37
  211. package/dist/{chunk-Q35YZVDZ.js → chunk-5Y2FPLZE.js} +9 -9
  212. package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
  213. package/dist/chunk-5YFY4SFC.js.map +1 -0
  214. package/dist/{chunk-F3NERYBQ.js → chunk-62VER7O4.js} +6 -6
  215. package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
  216. package/dist/{chunk-LE2EDBXU.js → chunk-73WI7FL2.js} +18 -18
  217. package/dist/chunk-756MKA2J.js +45 -0
  218. package/dist/chunk-756MKA2J.js.map +1 -0
  219. package/dist/{chunk-ZRJCGBVV.js → chunk-7FJMRJDG.js} +2 -2
  220. package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
  221. package/dist/{chunk-72J6C2AJ.js → chunk-7KIENXRE.js} +2 -2
  222. package/dist/{chunk-CBY5CXBD.js → chunk-7NPCEBZE.js} +5 -5
  223. package/dist/{chunk-46VBQG2D.js → chunk-7P4AQMGA.js} +13 -13
  224. package/dist/{chunk-X7L4H4VG.js → chunk-7TCT7KPQ.js} +742 -644
  225. package/dist/chunk-7TCT7KPQ.js.map +1 -0
  226. package/dist/{chunk-CVG4FILQ.js → chunk-7XO7YKPC.js} +280 -1035
  227. package/dist/chunk-7XO7YKPC.js.map +1 -0
  228. package/dist/{chunk-S7PVL7XH.js → chunk-A4BD4ZVB.js} +4 -4
  229. package/dist/{chunk-EF5SYXAY.js → chunk-ACL2V2KE.js} +30 -22
  230. package/dist/chunk-ACL2V2KE.js.map +1 -0
  231. package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
  232. package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
  233. package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
  234. package/dist/{chunk-P5WABK2H.js → chunk-BCM7C3MJ.js} +9 -9
  235. package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
  236. package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
  237. package/dist/{chunk-3XOISKZC.js → chunk-BXQYAAVE.js} +4 -4
  238. package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
  239. package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
  240. package/dist/{chunk-GTQ3SNEI.js → chunk-CD3MO3IC.js} +2 -2
  241. package/dist/{chunk-WSMYOLHG.js → chunk-CDEXRJB6.js} +5 -5
  242. package/dist/{chunk-3GLAPCVI.js → chunk-CFFNT2OY.js} +8 -8
  243. package/dist/{chunk-HO5Y2OOX.js → chunk-CMLJSF2F.js} +10 -10
  244. package/dist/{chunk-RA3FNMWF.js → chunk-CP7ZQHBW.js} +10 -10
  245. package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
  246. package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
  247. package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
  248. package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
  249. package/dist/{chunk-4EAF3HSD.js → chunk-EJ7WARW7.js} +2 -2
  250. package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
  251. package/dist/{chunk-OOEO4MKY.js → chunk-EPWD4KRA.js} +2 -2
  252. package/dist/{chunk-PN66T6JA.js → chunk-EQE3MNQN.js} +5 -5
  253. package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
  254. package/dist/{chunk-OO2T63BY.js → chunk-EYS4ZOF5.js} +2 -2
  255. package/dist/{chunk-7CZTKBTI.js → chunk-FDAV72IX.js} +5 -5
  256. package/dist/{chunk-AG7VGUIW.js → chunk-FFNPUSVO.js} +7 -7
  257. package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
  258. package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
  259. package/dist/{chunk-BSX2R4CW.js → chunk-FTX5CNHA.js} +4 -4
  260. package/dist/{chunk-O756O2I7.js → chunk-FWOBNL2A.js} +1 -1
  261. package/dist/{chunk-6NIB2KGJ.js → chunk-FWYEZ3LE.js} +33 -33
  262. package/dist/{chunk-DLOYMWUQ.js → chunk-G4HQUBO4.js} +7 -7
  263. package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
  264. package/dist/chunk-GGV4NSG3.js +792 -0
  265. package/dist/chunk-GGV4NSG3.js.map +1 -0
  266. package/dist/{chunk-U36PO27Q.js → chunk-GHHM6WN4.js} +3 -3
  267. package/dist/{chunk-OANSIX34.js → chunk-GRSODLVO.js} +4 -4
  268. package/dist/{chunk-4R3JCVID.js → chunk-GT7JFQ4E.js} +410 -153
  269. package/dist/chunk-GT7JFQ4E.js.map +1 -0
  270. package/dist/{chunk-EU6XSQFM.js → chunk-GXW2I2M2.js} +2 -2
  271. package/dist/{chunk-5JEIDFPD.js → chunk-GZS37O3G.js} +1 -1
  272. package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
  273. package/dist/chunk-H5M33DAL.js.map +1 -0
  274. package/dist/{chunk-HNYJEAES.js → chunk-HQWVDQXW.js} +7 -7
  275. package/dist/{chunk-YXOKAG66.js → chunk-HU6JTNWF.js} +2 -2
  276. package/dist/{chunk-QRVNI5V6.js → chunk-I6KIQKU6.js} +3 -3
  277. package/dist/{chunk-APU42QDI.js → chunk-IBA5FMRE.js} +115 -111
  278. package/dist/chunk-IBA5FMRE.js.map +1 -0
  279. package/dist/{chunk-BNUPYHHZ.js → chunk-IDXTASGN.js} +4 -4
  280. package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
  281. package/dist/chunk-IECRGM6K.js.map +1 -0
  282. package/dist/chunk-IJYL5BZM.js +38 -0
  283. package/dist/chunk-IJYL5BZM.js.map +1 -0
  284. package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
  285. package/dist/{chunk-VUHPA3XQ.js → chunk-ITX2TB4K.js} +6 -6
  286. package/dist/{chunk-BXRIQZAH.js → chunk-J22HD2PB.js} +5 -5
  287. package/dist/{chunk-U47YDYLQ.js → chunk-J5MEDX7C.js} +8 -8
  288. package/dist/{chunk-F6LBGYS6.js → chunk-J7FBBLHF.js} +35 -35
  289. package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
  290. package/dist/chunk-JFK7NTEA.js.map +1 -0
  291. package/dist/{chunk-QZRDCFHI.js → chunk-JM4HQPAI.js} +5 -5
  292. package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
  293. package/dist/{chunk-XWWXIZFP.js → chunk-JO6R5EXF.js} +7 -7
  294. package/dist/{chunk-NWZW2WHN.js → chunk-JQCGPTZ6.js} +9 -9
  295. package/dist/chunk-JRSNCSZN.js +37 -0
  296. package/dist/chunk-JRSNCSZN.js.map +1 -0
  297. package/dist/{chunk-OR37STQZ.js → chunk-KEXYBG7Q.js} +3 -3
  298. package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
  299. package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
  300. package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
  301. package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
  302. package/dist/{chunk-AOLE4IRZ.js → chunk-LF5CBAOS.js} +5 -5
  303. package/dist/{chunk-BJIZ7PL7.js → chunk-LHLK7FUA.js} +145 -29
  304. package/dist/chunk-LHLK7FUA.js.map +1 -0
  305. package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
  306. package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
  307. package/dist/{chunk-RSNYGEVZ.js → chunk-LT4J7RHI.js} +13 -13
  308. package/dist/{chunk-U3HSFCON.js → chunk-MCTTONOW.js} +28 -28
  309. package/dist/{chunk-7DU35P5J.js → chunk-MIECLOQC.js} +9 -9
  310. package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
  311. package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
  312. package/dist/chunk-MVZYNZXE.js.map +1 -0
  313. package/dist/{chunk-L7YURQI2.js → chunk-MXLKI7BI.js} +3 -3
  314. package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
  315. package/dist/{chunk-UWJ5P5CU.js → chunk-NEK4WB5P.js} +3 -3
  316. package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
  317. package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
  318. package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
  319. package/dist/{chunk-DWPOQ3S5.js → chunk-OTMWHZBY.js} +2 -2
  320. package/dist/{chunk-JTN3T4QN.js → chunk-PCFK7HKD.js} +14 -14
  321. package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
  322. package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
  323. package/dist/{chunk-HGMWMK5K.js → chunk-PO3BH3KQ.js} +2 -2
  324. package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
  325. package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
  326. package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
  327. package/dist/{chunk-Q35DT6I6.js → chunk-QFMLAT7L.js} +234 -225
  328. package/dist/chunk-QFMLAT7L.js.map +1 -0
  329. package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
  330. package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
  331. package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
  332. package/dist/{chunk-HDHK3SXK.js → chunk-RFLYID6H.js} +5 -5
  333. package/dist/{chunk-ADJJQSYC.js → chunk-RIYZFKIM.js} +39 -37
  334. package/dist/chunk-RIYZFKIM.js.map +1 -0
  335. package/dist/{chunk-JK7C5A4I.js → chunk-RQNZDTKT.js} +19 -19
  336. package/dist/{chunk-EHCUFCXM.js → chunk-RYSRFAHN.js} +32 -22
  337. package/dist/chunk-RYSRFAHN.js.map +1 -0
  338. package/dist/{chunk-I6VUUEXH.js → chunk-S2U4CDAC.js} +150 -150
  339. package/dist/chunk-S2U4CDAC.js.map +1 -0
  340. package/dist/{chunk-ST22GONV.js → chunk-S37GP7LX.js} +19 -19
  341. package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
  342. package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
  343. package/dist/{chunk-4W7VISE7.js → chunk-SSOO4GWN.js} +193 -194
  344. package/dist/chunk-SSOO4GWN.js.map +1 -0
  345. package/dist/{chunk-UP4BE32Y.js → chunk-SY2AAZNB.js} +5 -5
  346. package/dist/{chunk-33TPANCR.js → chunk-TFK4KFKA.js} +4 -4
  347. package/dist/{chunk-4432A3HQ.js → chunk-TIQPKOFW.js} +4 -4
  348. package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
  349. package/dist/chunk-TL7BOFFL.js +89 -0
  350. package/dist/chunk-TL7BOFFL.js.map +1 -0
  351. package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
  352. package/dist/{chunk-QM5H4FPT.js → chunk-TV6BWONY.js} +3 -3
  353. package/dist/{chunk-4VKA5O7T.js → chunk-U6MPB3K6.js} +4 -4
  354. package/dist/{chunk-XOFUXMPP.js → chunk-ULJAOMJA.js} +2 -2
  355. package/dist/chunk-ULYQEFNH.js +529 -0
  356. package/dist/chunk-ULYQEFNH.js.map +1 -0
  357. package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
  358. package/dist/{chunk-RGW24ZZM.js → chunk-UP7I3W6O.js} +51 -49
  359. package/dist/chunk-UP7I3W6O.js.map +1 -0
  360. package/dist/{chunk-5MZTJMZ3.js → chunk-UUGR3X5I.js} +17 -11
  361. package/dist/chunk-UUGR3X5I.js.map +1 -0
  362. package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
  363. package/dist/{chunk-OBQVTCTW.js → chunk-UYNCMZX5.js} +4 -4
  364. package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
  365. package/dist/chunk-V3K4RQO7.js.map +1 -0
  366. package/dist/{chunk-KZHW27BV.js → chunk-V4QZ7UBK.js} +2 -2
  367. package/dist/{chunk-SUVEDKE2.js → chunk-VH5EGTH2.js} +3 -3
  368. package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
  369. package/dist/chunk-VYKW6TB2.js.map +1 -0
  370. package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
  371. package/dist/{chunk-VP62LPLW.js → chunk-WCMG4HYI.js} +10 -10
  372. package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
  373. package/dist/{chunk-7BST7BA6.js → chunk-WKHUZIOW.js} +1 -1
  374. package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
  375. package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
  376. package/dist/{chunk-GALB2G3W.js → chunk-X2AH4DRF.js} +2 -2
  377. package/dist/{chunk-Z2DAWUO3.js → chunk-XMNUZUUA.js} +6 -6
  378. package/dist/{chunk-GAIM5RNE.js → chunk-XN7NSPE6.js} +3 -3
  379. package/dist/chunk-XV6ZYRHK.js +59 -0
  380. package/dist/chunk-XV6ZYRHK.js.map +1 -0
  381. package/dist/{chunk-FLGUVRR7.js → chunk-Y5BSA3I7.js} +5 -5
  382. package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
  383. package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
  384. package/dist/{chunk-QCD5Y7K5.js → chunk-YEROLKOA.js} +16 -16
  385. package/dist/{chunk-NDF3SH3X.js → chunk-YJPKDRI2.js} +15 -15
  386. package/dist/{chunk-TQGJN5UZ.js → chunk-YV56F4UP.js} +318 -700
  387. package/dist/chunk-YV56F4UP.js.map +1 -0
  388. package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
  389. package/dist/{chunk-AD22P5X3.js → chunk-YXA2EKV3.js} +3 -3
  390. package/dist/{chunk-FDNJVZRE.js → chunk-YYCOSTUU.js} +17 -17
  391. package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
  392. package/dist/{chunk-BJW7G6EF.js → chunk-Z7IGO5EA.js} +3 -3
  393. package/dist/{chunk-NCX5SAQY.js → chunk-ZEIFJ6PX.js} +5 -5
  394. package/dist/{chunk-JRXHSVD5.js → chunk-ZS2UQ3DV.js} +65 -8
  395. package/dist/chunk-ZS2UQ3DV.js.map +1 -0
  396. package/dist/{chunk-4EONHNJU.js → chunk-ZVVT72MT.js} +2 -2
  397. package/dist/components/browser-viewer.d.ts +1 -1
  398. package/dist/composer.js +13 -13
  399. package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-25AJIDYA.js} +9 -9
  400. package/dist/connect.js +10 -10
  401. package/dist/desktop.js +2 -2
  402. package/dist/editor.js +2 -2
  403. package/dist/{embedded-new-voice-LFHWWYD2.js → embedded-new-voice-RZZEJT6M.js} +7 -7
  404. package/dist/{embedded-voice-6QS4ANNX.js → embedded-voice-6OKSSPLW.js} +7 -7
  405. package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
  406. package/dist/hooks/internal.d.ts +38 -0
  407. package/dist/hooks/use-client-config-flags.d.ts +12 -0
  408. package/dist/hooks/use-workspace-sessions.d.ts +10 -1
  409. package/dist/index.js +233 -227
  410. package/dist/interaction.js +11 -9
  411. package/dist/interaction.js.map +1 -1
  412. package/dist/{latest-question-AW3PPDUM.js → latest-question-2PFWQSSG.js} +4 -3
  413. package/dist/{latest-question-AW3PPDUM.js.map → latest-question-2PFWQSSG.js.map} +1 -1
  414. package/dist/machines.js +5 -5
  415. package/dist/messages/en.d.ts +3 -3
  416. package/dist/messages.js +1 -1
  417. package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-VVFGGAI6.js} +6 -6
  418. package/dist/native-previews.js +3 -3
  419. package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
  420. package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-4SHOQPQQ.js} +10 -8
  421. package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-4SHOQPQQ.js.map} +1 -1
  422. package/dist/realtime.js +6 -6
  423. package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-CCOTGXXA.js} +11 -11
  424. package/dist/sandbox-files-CCOTGXXA.js.map +1 -0
  425. package/dist/session-app.js +258 -252
  426. package/dist/session-list-model.d.ts +1 -0
  427. package/dist/session-list-model.js +8 -2
  428. package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
  429. package/dist/session-realtime-JNKDSGH7.js.map +1 -0
  430. package/dist/session-realtime.js +2 -2
  431. package/dist/session-ui.js +76 -71
  432. package/dist/session.js +24 -22
  433. package/dist/sites.js +2 -2
  434. package/dist/terminal.js +2 -2
  435. package/dist/this-computer.js +3 -3
  436. package/dist/timeline/invoked-tool.d.ts +5 -0
  437. package/dist/timeline/tool-display-name.d.ts +2 -2
  438. package/dist/timeline/tool-icon.d.ts +14 -0
  439. package/dist/timeline/tool-presentation.d.ts +8 -3
  440. package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-KHNYNY2J.js} +5 -5
  441. package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-AXEDJHBP.js} +7 -7
  442. package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-AV4ZBXRC.js} +9 -9
  443. package/dist/timeline-model.js +25 -23
  444. package/dist/ui/access-list.js +18 -18
  445. package/dist/ui/cadence-picker.js +2 -2
  446. package/dist/ui/choice-cards.js +2 -2
  447. package/dist/ui/detail-page.js +2 -2
  448. package/dist/ui/detail-sheet.js +2 -2
  449. package/dist/ui/diff-view.js +2 -2
  450. package/dist/ui/disclosure.js +4 -4
  451. package/dist/ui/flush-form-page.js +3 -3
  452. package/dist/ui/form-dialog.js +2 -2
  453. package/dist/ui/list-row.js +4 -4
  454. package/dist/ui/revision-history.js +11 -11
  455. package/dist/ui/role-select.js +7 -7
  456. package/dist/ui/select-menu.js +2 -2
  457. package/dist/ui/settings-nav.js +3 -3
  458. package/dist/usage.js +3 -3
  459. package/dist/workbench.js +11 -11
  460. package/package.json +4 -4
  461. package/src/app/app-state.tsx +3 -1
  462. package/src/app/components/capabilities/session-machine-card.tsx +9 -2
  463. package/src/app/components/rail/session-list.tsx +254 -44
  464. package/src/app/components/rail/session-row-content.tsx +24 -2
  465. package/src/app/components/rail/session-shell.tsx +14 -9
  466. package/src/app/components/rail/site-session-group-heading.tsx +59 -20
  467. package/src/app/components/session/session-tenancy-control.tsx +18 -0
  468. package/src/app/components/session/site-origin-link.test.tsx +73 -0
  469. package/src/app/components/session/site-origin-link.tsx +4 -2
  470. package/src/app/embed/memory-navigation.tsx +1 -0
  471. package/src/app/lib/actions/held-modifier.test.ts +101 -0
  472. package/src/app/lib/actions/held-modifier.ts +108 -0
  473. package/src/app/lib/console-site.tsx +38 -0
  474. package/src/app/lib/navigation.tsx +4 -0
  475. package/src/app/lib/routes.tsx +42 -0
  476. package/src/app/lib/session-failure-toasts.ts +26 -0
  477. package/src/app/lib/session-ui-features.tsx +18 -4
  478. package/src/app/lib/sessions-group.tsx +219 -30
  479. package/src/app/lib/site-opened.tsx +48 -0
  480. package/src/app/lib/site-session-groups.test.ts +173 -6
  481. package/src/app/lib/site-view-routes.test.ts +55 -0
  482. package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
  483. package/src/app/routes/artifacts.tsx +2 -29
  484. package/src/app/routes/session-transient-failures.test.tsx +343 -0
  485. package/src/app/routes/session-unavailable.tsx +74 -3
  486. package/src/app/routes/session.tsx +4 -13
  487. package/src/app/routes/sessions-index.tsx +13 -9
  488. package/src/app/routes/site-view.test.tsx +476 -0
  489. package/src/app/routes/site-view.tsx +583 -0
  490. package/src/components/browser-viewer.tsx +16 -2
  491. package/src/hooks/internal.ts +129 -6
  492. package/src/hooks/use-client-config-flags.ts +8 -0
  493. package/src/hooks/use-session-events.ts +83 -9
  494. package/src/hooks/use-workspace-sessions.ts +21 -1
  495. package/src/messages/en.ts +3 -3
  496. package/src/session-list-model.ts +4 -0
  497. package/src/timeline/activity-rail.tsx +3 -2
  498. package/src/timeline/invoked-tool.ts +14 -4
  499. package/src/timeline/projection.ts +11 -6
  500. package/src/timeline/rolling-activity.tsx +6 -2
  501. package/src/timeline/tool-display-name.ts +2 -2
  502. package/src/timeline/tool-icon.tsx +165 -0
  503. package/src/timeline/tool-presentation.ts +207 -48
  504. package/src/timeline/tool-renderers.tsx +1 -70
  505. package/styles/compiled.css +38 -0
  506. package/dist/chunk-22ZBT6CN.js +0 -50
  507. package/dist/chunk-22ZBT6CN.js.map +0 -1
  508. package/dist/chunk-4R3JCVID.js.map +0 -1
  509. package/dist/chunk-4W7VISE7.js.map +0 -1
  510. package/dist/chunk-5JZYPZ72.js.map +0 -1
  511. package/dist/chunk-5MZTJMZ3.js.map +0 -1
  512. package/dist/chunk-6W3LF3DB.js.map +0 -1
  513. package/dist/chunk-ADJJQSYC.js.map +0 -1
  514. package/dist/chunk-APU42QDI.js.map +0 -1
  515. package/dist/chunk-BJIZ7PL7.js.map +0 -1
  516. package/dist/chunk-CVG4FILQ.js.map +0 -1
  517. package/dist/chunk-EF5SYXAY.js.map +0 -1
  518. package/dist/chunk-EHCUFCXM.js.map +0 -1
  519. package/dist/chunk-GZ64CASI.js.map +0 -1
  520. package/dist/chunk-I6VUUEXH.js.map +0 -1
  521. package/dist/chunk-JRXHSVD5.js.map +0 -1
  522. package/dist/chunk-KF3MF6FP.js.map +0 -1
  523. package/dist/chunk-MYNUBDU7.js.map +0 -1
  524. package/dist/chunk-NAWXARTY.js.map +0 -1
  525. package/dist/chunk-PM3OSANE.js.map +0 -1
  526. package/dist/chunk-Q35DT6I6.js.map +0 -1
  527. package/dist/chunk-R25ZKOZR.js +0 -24
  528. package/dist/chunk-R25ZKOZR.js.map +0 -1
  529. package/dist/chunk-RGPYMHKI.js.map +0 -1
  530. package/dist/chunk-RGW24ZZM.js.map +0 -1
  531. package/dist/chunk-ROQOVH4N.js.map +0 -1
  532. package/dist/chunk-TQGJN5UZ.js.map +0 -1
  533. package/dist/chunk-X7L4H4VG.js.map +0 -1
  534. package/dist/chunk-XFNLU7EW.js.map +0 -1
  535. package/dist/chunk-Z5WMLJKI.js.map +0 -1
  536. /package/dist/{browser-viewer-RYYQSRTC.js.map → app/lib/console-site.js.map} +0 -0
  537. /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/site-opened.js.map} +0 -0
  538. /package/dist/{computer-viewer-KEDVLD42.js.map → browser-viewer-QMCNV4RI.js.map} +0 -0
  539. /package/dist/{embedded-new-voice-LFHWWYD2.js.map → chat-interactive-block-PMIAUXSO.js.map} +0 -0
  540. /package/dist/{chunk-TGVVEGZG.js.map → chunk-22FFOHPT.js.map} +0 -0
  541. /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
  542. /package/dist/{chunk-5POTDNQT.js.map → chunk-2NC7NZCE.js.map} +0 -0
  543. /package/dist/{chunk-ZKYYZH6L.js.map → chunk-2QBYDGWO.js.map} +0 -0
  544. /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
  545. /package/dist/{chunk-R63QEVPK.js.map → chunk-35BC2FU2.js.map} +0 -0
  546. /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
  547. /package/dist/{chunk-S4SC5SSV.js.map → chunk-3GU7AWG7.js.map} +0 -0
  548. /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
  549. /package/dist/{chunk-63VGE4OH.js.map → chunk-3RMKPHBL.js.map} +0 -0
  550. /package/dist/{chunk-RQDFYQHA.js.map → chunk-3STBLX4O.js.map} +0 -0
  551. /package/dist/{chunk-S4EZ3JUB.js.map → chunk-3X5FKDYQ.js.map} +0 -0
  552. /package/dist/{chunk-KTRKZRID.js.map → chunk-4GLLWX33.js.map} +0 -0
  553. /package/dist/{chunk-SD2K5ZN5.js.map → chunk-4LPA25NQ.js.map} +0 -0
  554. /package/dist/{chunk-KWKGBGAF.js.map → chunk-4RMN4E2Y.js.map} +0 -0
  555. /package/dist/{chunk-X7ASQHR6.js.map → chunk-4SAGYEVB.js.map} +0 -0
  556. /package/dist/{chunk-HTT3FB7T.js.map → chunk-4VK2R5QC.js.map} +0 -0
  557. /package/dist/{chunk-DDK4WFJ3.js.map → chunk-4XQC7VLT.js.map} +0 -0
  558. /package/dist/{chunk-IVOA3DXA.js.map → chunk-4YXAQMTD.js.map} +0 -0
  559. /package/dist/{chunk-HOJGAJAB.js.map → chunk-52WK2GGK.js.map} +0 -0
  560. /package/dist/{chunk-NYZQ7LO7.js.map → chunk-552UYIQ7.js.map} +0 -0
  561. /package/dist/{chunk-LEXPBQ56.js.map → chunk-5DSKMG2I.js.map} +0 -0
  562. /package/dist/{chunk-WNG757ID.js.map → chunk-5FA455GR.js.map} +0 -0
  563. /package/dist/{chunk-HWDGJFM4.js.map → chunk-5FEN3KYH.js.map} +0 -0
  564. /package/dist/{chunk-OSVHU2WU.js.map → chunk-5JHRMUAZ.js.map} +0 -0
  565. /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
  566. /package/dist/{chunk-GFUUFM2O.js.map → chunk-5W6ZDKRR.js.map} +0 -0
  567. /package/dist/{chunk-6PQNLL4E.js.map → chunk-5W7KJ5NQ.js.map} +0 -0
  568. /package/dist/{chunk-Q35YZVDZ.js.map → chunk-5Y2FPLZE.js.map} +0 -0
  569. /package/dist/{chunk-F3NERYBQ.js.map → chunk-62VER7O4.js.map} +0 -0
  570. /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
  571. /package/dist/{chunk-LE2EDBXU.js.map → chunk-73WI7FL2.js.map} +0 -0
  572. /package/dist/{chunk-ZRJCGBVV.js.map → chunk-7FJMRJDG.js.map} +0 -0
  573. /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
  574. /package/dist/{chunk-72J6C2AJ.js.map → chunk-7KIENXRE.js.map} +0 -0
  575. /package/dist/{chunk-CBY5CXBD.js.map → chunk-7NPCEBZE.js.map} +0 -0
  576. /package/dist/{chunk-46VBQG2D.js.map → chunk-7P4AQMGA.js.map} +0 -0
  577. /package/dist/{chunk-S7PVL7XH.js.map → chunk-A4BD4ZVB.js.map} +0 -0
  578. /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
  579. /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
  580. /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
  581. /package/dist/{chunk-P5WABK2H.js.map → chunk-BCM7C3MJ.js.map} +0 -0
  582. /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
  583. /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
  584. /package/dist/{chunk-3XOISKZC.js.map → chunk-BXQYAAVE.js.map} +0 -0
  585. /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
  586. /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
  587. /package/dist/{chunk-GTQ3SNEI.js.map → chunk-CD3MO3IC.js.map} +0 -0
  588. /package/dist/{chunk-WSMYOLHG.js.map → chunk-CDEXRJB6.js.map} +0 -0
  589. /package/dist/{chunk-3GLAPCVI.js.map → chunk-CFFNT2OY.js.map} +0 -0
  590. /package/dist/{chunk-HO5Y2OOX.js.map → chunk-CMLJSF2F.js.map} +0 -0
  591. /package/dist/{chunk-RA3FNMWF.js.map → chunk-CP7ZQHBW.js.map} +0 -0
  592. /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
  593. /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
  594. /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
  595. /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
  596. /package/dist/{chunk-4EAF3HSD.js.map → chunk-EJ7WARW7.js.map} +0 -0
  597. /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
  598. /package/dist/{chunk-OOEO4MKY.js.map → chunk-EPWD4KRA.js.map} +0 -0
  599. /package/dist/{chunk-PN66T6JA.js.map → chunk-EQE3MNQN.js.map} +0 -0
  600. /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
  601. /package/dist/{chunk-OO2T63BY.js.map → chunk-EYS4ZOF5.js.map} +0 -0
  602. /package/dist/{chunk-7CZTKBTI.js.map → chunk-FDAV72IX.js.map} +0 -0
  603. /package/dist/{chunk-AG7VGUIW.js.map → chunk-FFNPUSVO.js.map} +0 -0
  604. /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
  605. /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
  606. /package/dist/{chunk-BSX2R4CW.js.map → chunk-FTX5CNHA.js.map} +0 -0
  607. /package/dist/{chunk-O756O2I7.js.map → chunk-FWOBNL2A.js.map} +0 -0
  608. /package/dist/{chunk-6NIB2KGJ.js.map → chunk-FWYEZ3LE.js.map} +0 -0
  609. /package/dist/{chunk-DLOYMWUQ.js.map → chunk-G4HQUBO4.js.map} +0 -0
  610. /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
  611. /package/dist/{chunk-U36PO27Q.js.map → chunk-GHHM6WN4.js.map} +0 -0
  612. /package/dist/{chunk-OANSIX34.js.map → chunk-GRSODLVO.js.map} +0 -0
  613. /package/dist/{chunk-EU6XSQFM.js.map → chunk-GXW2I2M2.js.map} +0 -0
  614. /package/dist/{chunk-5JEIDFPD.js.map → chunk-GZS37O3G.js.map} +0 -0
  615. /package/dist/{chunk-HNYJEAES.js.map → chunk-HQWVDQXW.js.map} +0 -0
  616. /package/dist/{chunk-YXOKAG66.js.map → chunk-HU6JTNWF.js.map} +0 -0
  617. /package/dist/{chunk-QRVNI5V6.js.map → chunk-I6KIQKU6.js.map} +0 -0
  618. /package/dist/{chunk-BNUPYHHZ.js.map → chunk-IDXTASGN.js.map} +0 -0
  619. /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
  620. /package/dist/{chunk-VUHPA3XQ.js.map → chunk-ITX2TB4K.js.map} +0 -0
  621. /package/dist/{chunk-BXRIQZAH.js.map → chunk-J22HD2PB.js.map} +0 -0
  622. /package/dist/{chunk-U47YDYLQ.js.map → chunk-J5MEDX7C.js.map} +0 -0
  623. /package/dist/{chunk-F6LBGYS6.js.map → chunk-J7FBBLHF.js.map} +0 -0
  624. /package/dist/{chunk-QZRDCFHI.js.map → chunk-JM4HQPAI.js.map} +0 -0
  625. /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
  626. /package/dist/{chunk-XWWXIZFP.js.map → chunk-JO6R5EXF.js.map} +0 -0
  627. /package/dist/{chunk-NWZW2WHN.js.map → chunk-JQCGPTZ6.js.map} +0 -0
  628. /package/dist/{chunk-OR37STQZ.js.map → chunk-KEXYBG7Q.js.map} +0 -0
  629. /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
  630. /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
  631. /package/dist/{chunk-AOLE4IRZ.js.map → chunk-LF5CBAOS.js.map} +0 -0
  632. /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
  633. /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
  634. /package/dist/{chunk-RSNYGEVZ.js.map → chunk-LT4J7RHI.js.map} +0 -0
  635. /package/dist/{chunk-U3HSFCON.js.map → chunk-MCTTONOW.js.map} +0 -0
  636. /package/dist/{chunk-7DU35P5J.js.map → chunk-MIECLOQC.js.map} +0 -0
  637. /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
  638. /package/dist/{chunk-L7YURQI2.js.map → chunk-MXLKI7BI.js.map} +0 -0
  639. /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
  640. /package/dist/{chunk-UWJ5P5CU.js.map → chunk-NEK4WB5P.js.map} +0 -0
  641. /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
  642. /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
  643. /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
  644. /package/dist/{chunk-DWPOQ3S5.js.map → chunk-OTMWHZBY.js.map} +0 -0
  645. /package/dist/{chunk-JTN3T4QN.js.map → chunk-PCFK7HKD.js.map} +0 -0
  646. /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
  647. /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
  648. /package/dist/{chunk-HGMWMK5K.js.map → chunk-PO3BH3KQ.js.map} +0 -0
  649. /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
  650. /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
  651. /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
  652. /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
  653. /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
  654. /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
  655. /package/dist/{chunk-HDHK3SXK.js.map → chunk-RFLYID6H.js.map} +0 -0
  656. /package/dist/{chunk-JK7C5A4I.js.map → chunk-RQNZDTKT.js.map} +0 -0
  657. /package/dist/{chunk-ST22GONV.js.map → chunk-S37GP7LX.js.map} +0 -0
  658. /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
  659. /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
  660. /package/dist/{chunk-UP4BE32Y.js.map → chunk-SY2AAZNB.js.map} +0 -0
  661. /package/dist/{chunk-33TPANCR.js.map → chunk-TFK4KFKA.js.map} +0 -0
  662. /package/dist/{chunk-4432A3HQ.js.map → chunk-TIQPKOFW.js.map} +0 -0
  663. /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
  664. /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
  665. /package/dist/{chunk-QM5H4FPT.js.map → chunk-TV6BWONY.js.map} +0 -0
  666. /package/dist/{chunk-4VKA5O7T.js.map → chunk-U6MPB3K6.js.map} +0 -0
  667. /package/dist/{chunk-XOFUXMPP.js.map → chunk-ULJAOMJA.js.map} +0 -0
  668. /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
  669. /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
  670. /package/dist/{chunk-OBQVTCTW.js.map → chunk-UYNCMZX5.js.map} +0 -0
  671. /package/dist/{chunk-KZHW27BV.js.map → chunk-V4QZ7UBK.js.map} +0 -0
  672. /package/dist/{chunk-SUVEDKE2.js.map → chunk-VH5EGTH2.js.map} +0 -0
  673. /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
  674. /package/dist/{chunk-VP62LPLW.js.map → chunk-WCMG4HYI.js.map} +0 -0
  675. /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
  676. /package/dist/{chunk-7BST7BA6.js.map → chunk-WKHUZIOW.js.map} +0 -0
  677. /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
  678. /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
  679. /package/dist/{chunk-GALB2G3W.js.map → chunk-X2AH4DRF.js.map} +0 -0
  680. /package/dist/{chunk-Z2DAWUO3.js.map → chunk-XMNUZUUA.js.map} +0 -0
  681. /package/dist/{chunk-GAIM5RNE.js.map → chunk-XN7NSPE6.js.map} +0 -0
  682. /package/dist/{chunk-FLGUVRR7.js.map → chunk-Y5BSA3I7.js.map} +0 -0
  683. /package/dist/{chunk-QCD5Y7K5.js.map → chunk-YEROLKOA.js.map} +0 -0
  684. /package/dist/{chunk-NDF3SH3X.js.map → chunk-YJPKDRI2.js.map} +0 -0
  685. /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
  686. /package/dist/{chunk-AD22P5X3.js.map → chunk-YXA2EKV3.js.map} +0 -0
  687. /package/dist/{chunk-FDNJVZRE.js.map → chunk-YYCOSTUU.js.map} +0 -0
  688. /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
  689. /package/dist/{chunk-BJW7G6EF.js.map → chunk-Z7IGO5EA.js.map} +0 -0
  690. /package/dist/{chunk-NCX5SAQY.js.map → chunk-ZEIFJ6PX.js.map} +0 -0
  691. /package/dist/{chunk-4EONHNJU.js.map → chunk-ZVVT72MT.js.map} +0 -0
  692. /package/dist/{embedded-voice-6QS4ANNX.js.map → computer-viewer-25AJIDYA.js.map} +0 -0
  693. /package/dist/{model-policy-picker-menu-CURJ247L.js.map → embedded-new-voice-RZZEJT6M.js.map} +0 -0
  694. /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-voice-6OKSSPLW.js.map} +0 -0
  695. /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
  696. /package/dist/{session-realtime-2XIB254N.js.map → model-policy-picker-menu-VVFGGAI6.js.map} +0 -0
  697. /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
  698. /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-KHNYNY2J.js.map} +0 -0
  699. /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-AXEDJHBP.js.map} +0 -0
  700. /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-AV4ZBXRC.js.map} +0 -0
@@ -1,164 +1,53 @@
1
1
  "use client";
2
2
  import {
3
+ applyPatchOpsFromToolItem,
4
+ controlCaret,
5
+ execTruncated,
6
+ invokedToolCall,
7
+ isExecSessionLostBanner,
8
+ looksBinary,
9
+ parseExecBannerSessionId,
10
+ parseToolArgs,
11
+ retainedToolResultImages,
12
+ sandboxCommandExitCode,
13
+ stripExecBanner,
14
+ tailPeek,
15
+ unwrapMcpOutput,
16
+ v4aToGitFileDiff
17
+ } from "./chunk-ULYQEFNH.js";
18
+ import {
19
+ builtInToolStep,
3
20
  mcpToolLeaf,
4
21
  toolDisplayName,
5
22
  toolStepLabel,
6
23
  toolStepPhase
7
- } from "./chunk-STUCI6QA.js";
24
+ } from "./chunk-LEKBNKLD.js";
8
25
  import {
9
26
  stringifyPayload,
10
27
  tryParseJson
11
28
  } from "./chunk-SJGAHTY5.js";
12
29
 
13
- // src/timeline/turn-summary-model.ts
14
- var BUILT_IN_TURN_SUMMARY_FACET_IDS = [
15
- "steps",
16
- "files",
17
- "commands",
18
- "screenshots",
19
- "memories",
20
- "compacted",
21
- "duration"
30
+ // src/timeline/genie-copy.ts
31
+ var GENIE_PREPARING_PHRASES = (t) => [
32
+ t("timeline.genieCopy.polishingTheLamp"),
33
+ t("timeline.genieCopy.consultingTheCarpet"),
34
+ t("timeline.genieCopy.untanglingWishes"),
35
+ t("timeline.genieCopy.summoningALittleCleverness"),
36
+ t("timeline.genieCopy.checkingTheFinePrintOn"),
37
+ t("timeline.genieCopy.warmingUpTheAbracadabra"),
38
+ t("timeline.genieCopy.rearrangingTheStars"),
39
+ t("timeline.genieCopy.negotiatingWithTheLamp"),
40
+ t("timeline.genieCopy.dustingOffAThousandYears"),
41
+ t("timeline.genieCopy.wishfulThinking"),
42
+ t("timeline.genieCopy.decantingALittleMagic"),
43
+ t("timeline.genieCopy.findingTheGoodStardust"),
44
+ t("timeline.genieCopy.fluffingTheMagicCarpet"),
45
+ t("timeline.genieCopy.puttingAWishIntoMotion"),
46
+ t("timeline.genieCopy.aLittleHocusALittle")
47
+ ];
48
+ var GENIE_WAITING_PHRASES = (t) => [
49
+ t("timeline.genieCopy.waitingForAResponse")
22
50
  ];
23
- function turnSummaryFallbackLabel(t, items, unloadedSteps = false) {
24
- const preparationOnly = !unloadedSteps && items.some((item) => item.kind === "startup-phase") && items.every((item) => item.kind === "startup-phase" || item.kind === "agent-message");
25
- return preparationOnly ? t("timeline.turnSummary.preparation") : t("timeline.turnSummary.steps");
26
- }
27
- function formatElapsed(t, durationMs) {
28
- const totalSeconds = Math.max(0, Math.floor(durationMs / 1e3));
29
- if (totalSeconds < 60) {
30
- return t("timeline.turnSummaryModel.seconds", { count: totalSeconds });
31
- }
32
- const totalMinutes = Math.floor(totalSeconds / 60);
33
- if (totalMinutes < 60) {
34
- const seconds = totalSeconds % 60;
35
- return seconds ? t("timeline.turnSummaryModel.minutesSeconds", { minutes: totalMinutes, seconds }) : t("timeline.turnSummaryModel.minutes", { count: totalMinutes });
36
- }
37
- const hours = Math.floor(totalMinutes / 60);
38
- return t("timeline.turnSummaryModel.hoursMinutes", {
39
- hours,
40
- minutes: String(totalMinutes % 60).padStart(2, "0")
41
- });
42
- }
43
- function createTurnSummaryContext(t, items, outcome, failureText, durationMs, contextCompactionCount) {
44
- const itemSnapshot = Object.freeze([...items]);
45
- const toolCalls = Object.freeze(
46
- itemSnapshot.filter((item) => item.kind === "tool-call")
47
- );
48
- const settled = itemSnapshot.every((item) => {
49
- if (item.kind === "reasoning" || item.kind === "agent-message") {
50
- return !item.streaming;
51
- }
52
- if (item.kind === "tool-call" || item.kind === "worker" || item.kind === "sandbox" || item.kind === "startup-phase") {
53
- return item.status !== "running";
54
- }
55
- return true;
56
- });
57
- return Object.freeze({
58
- t,
59
- items: itemSnapshot,
60
- toolCalls,
61
- outcome,
62
- failureText,
63
- durationMs,
64
- settled,
65
- contextCompactionCount: Math.max(0, Math.floor(contextCompactionCount))
66
- });
67
- }
68
- var BUILT_IN_TURN_SUMMARY_FACETS = Object.freeze([
69
- {
70
- id: "memories",
71
- summarize: ({ items, t }) => {
72
- let saved = 0;
73
- let updated = 0;
74
- for (const item of items) {
75
- if (item.kind !== "memory") {
76
- continue;
77
- }
78
- if (item.variant === "corrected") {
79
- updated += 1;
80
- } else {
81
- saved += 1;
82
- }
83
- }
84
- const parts = [];
85
- if (saved) {
86
- parts.push(t("timeline.turnSummaryModel.memoriesSaved", { count: saved }));
87
- }
88
- if (updated) {
89
- parts.push(t("timeline.turnSummaryModel.memoriesUpdated", { count: updated }));
90
- }
91
- return parts.length > 0 ? { content: parts.join(" \xB7 ") } : null;
92
- }
93
- },
94
- {
95
- id: "compacted",
96
- summarize: ({ contextCompactionCount, t }) => contextCompactionCount > 0 ? {
97
- content: t("timeline.turnSummaryModel.compacts", { count: contextCompactionCount }),
98
- ariaLabel: t("timeline.turnSummaryModel.compactions", {
99
- count: contextCompactionCount
100
- })
101
- } : null
102
- },
103
- {
104
- id: "duration",
105
- summarize: ({ durationMs, t }) => {
106
- const duration = formatDurationFacet(t, durationMs);
107
- return duration ? { content: duration } : null;
108
- }
109
- }
110
- ]);
111
- function resolveTurnSummaryFacets(configuration) {
112
- const requested = configuration?.replace ?? [
113
- ...BUILT_IN_TURN_SUMMARY_FACETS.filter(
114
- (facet) => !configuration?.remove?.includes(facet.id)
115
- ),
116
- ...configuration?.add ?? []
117
- ];
118
- const seen = /* @__PURE__ */ new Set();
119
- return requested.filter((facet) => {
120
- if (!facet.id || seen.has(facet.id)) {
121
- return false;
122
- }
123
- seen.add(facet.id);
124
- return true;
125
- });
126
- }
127
- function formatDurationFacet(t, durationMs) {
128
- if (durationMs === void 0 || !Number.isFinite(durationMs) || durationMs < 1e3) {
129
- return null;
130
- }
131
- const totalSeconds = Math.floor(durationMs / 1e3);
132
- if (totalSeconds < 60) {
133
- return t("timeline.turnSummaryModel.seconds", { count: totalSeconds });
134
- }
135
- const totalMinutes = Math.floor(totalSeconds / 60);
136
- if (totalMinutes < 60) {
137
- return t("timeline.turnSummaryModel.minutes", { count: totalMinutes });
138
- }
139
- const hours = Math.floor(totalMinutes / 60);
140
- const minutes = totalMinutes % 60;
141
- return t("timeline.turnSummaryModel.hoursMinutes", {
142
- hours,
143
- minutes: String(minutes).padStart(2, "0")
144
- });
145
- }
146
- function hasFacetContent(content) {
147
- return content !== null && content !== void 0 && content !== false && content !== "";
148
- }
149
- function selectTurnSummaryFacets(definitions, context, statusKind) {
150
- return definitions.flatMap((facet) => {
151
- if (statusKind && (facet.id === "duration" || statusKind !== "worked" && BUILT_IN_TURN_SUMMARY_FACET_IDS.includes(facet.id))) {
152
- return [];
153
- }
154
- try {
155
- const result = facet.summarize(context);
156
- return result && hasFacetContent(result.content) ? [{ facet, result }] : [];
157
- } catch {
158
- return [];
159
- }
160
- });
161
- }
162
51
 
163
52
  // src/timeline/registry.ts
164
53
  function rawTypeOf(item) {
@@ -212,501 +101,8 @@ function createToolRegistry(baseEntries, baseFallback, options = {}) {
212
101
  return { resolve, fallback };
213
102
  }
214
103
 
215
- // src/timeline/parsers.ts
216
- import {
217
- normalizeMcpOutput,
218
- parseGeneratedImageReceipt
219
- } from "@opengeni/sdk";
220
- function sandboxCommandExitCode(out) {
221
- const match = String(out ?? "").match(/Process exited with code (-?\d+)/);
222
- return match ? Number(match[1]) : null;
223
- }
224
- function parseExecBannerSessionId(out) {
225
- const text = String(out ?? "");
226
- const outputIdx = text.indexOf("\nOutput:\n");
227
- const banner = outputIdx >= 0 ? text.slice(0, outputIdx) : text.startsWith("Output:\n") ? "" : text;
228
- const match = banner.match(/Process running with session ID (\d+)/);
229
- if (!match) {
230
- return null;
231
- }
232
- const n = Number.parseInt(match[1], 10);
233
- return Number.isFinite(n) ? n : null;
234
- }
235
- function stripExecBanner(out) {
236
- const text = String(out ?? "");
237
- const marker = text.indexOf("\nOutput:\n");
238
- if (marker >= 0) {
239
- return text.slice(marker + "\nOutput:\n".length);
240
- }
241
- if (text.startsWith("Output:\n")) {
242
- return text.slice("Output:\n".length);
243
- }
244
- return text;
245
- }
246
- function execTruncated(out) {
247
- return /Total output lines:|\.{3}\d+ tokens truncated\.{3}|\[\.{3}\d+ characters truncated/.test(
248
- String(out ?? "")
249
- );
250
- }
251
- function isExecSessionLostBanner(out) {
252
- return /write_stdin failed: session not found: \d+/.test(String(out ?? ""));
253
- }
254
- function looksBinary(text) {
255
- return text.includes("\0") || text.startsWith("\x7FELF");
256
- }
257
- function controlCaret(printable) {
258
- return String(printable).replace(
259
- /[\u0000-\u001f]/g,
260
- (c) => `^${String.fromCharCode(c.charCodeAt(0) + 64)}`
261
- );
262
- }
263
- function v4aToGitFileDiff(op) {
264
- const status = op.type === "create_file" ? "added" : op.type === "delete_file" ? "deleted" : op.moveTo ? "renamed" : "modified";
265
- const oldPath = op.moveTo ? op.path : null;
266
- const path = op.moveTo || op.path;
267
- const hunks = [];
268
- let additions = 0;
269
- let deletions = 0;
270
- let sawHunkAnchor = false;
271
- if (op.type !== "delete_file") {
272
- const lines = (op.diff ?? "").split("\n");
273
- let cur = null;
274
- let oldNo = 1;
275
- let newNo = 1;
276
- for (const raw of lines) {
277
- if (raw.startsWith("@@")) {
278
- sawHunkAnchor = true;
279
- const match = raw.match(/-(\d+)(?:,\d+)?\s+\+(\d+)/);
280
- oldNo = match ? Number(match[1]) : 1;
281
- newNo = match ? Number(match[2]) : 1;
282
- cur = {
283
- oldStart: oldNo,
284
- oldLines: 0,
285
- newStart: newNo,
286
- newLines: 0,
287
- header: raw,
288
- lines: [{ type: "meta", oldNo: null, newNo: null, text: raw }]
289
- };
290
- hunks.push(cur);
291
- } else if (cur || op.type === "create_file") {
292
- if (!cur) {
293
- cur = {
294
- oldStart: 0,
295
- oldLines: 0,
296
- newStart: 1,
297
- newLines: 0,
298
- header: "",
299
- lines: []
300
- };
301
- hunks.push(cur);
302
- oldNo = 0;
303
- newNo = 1;
304
- }
305
- if (raw.startsWith("+")) {
306
- cur.lines.push({
307
- type: "add",
308
- oldNo: null,
309
- newNo: newNo++,
310
- text: raw.slice(1)
311
- });
312
- cur.newLines += 1;
313
- additions += 1;
314
- } else if (raw.startsWith("-")) {
315
- cur.lines.push({
316
- type: "del",
317
- oldNo: oldNo++,
318
- newNo: null,
319
- text: raw.slice(1)
320
- });
321
- cur.oldLines += 1;
322
- deletions += 1;
323
- } else {
324
- cur.lines.push({
325
- type: "context",
326
- oldNo: oldNo++,
327
- newNo: newNo++,
328
- text: raw.replace(/^ /, "")
329
- });
330
- cur.oldLines += 1;
331
- cur.newLines += 1;
332
- }
333
- }
334
- }
335
- if (op.type === "update_file" && !sawHunkAnchor && lines.some((l) => l.trim().length > 0)) {
336
- throw new Error("malformed V4A: no @@ hunk anchor");
337
- }
338
- }
339
- return {
340
- path,
341
- oldPath,
342
- status,
343
- isBinary: false,
344
- isImage: false,
345
- additions,
346
- deletions,
347
- hunks,
348
- truncated: false
349
- };
350
- }
351
- var BEGIN_PATCH = "*** Begin Patch";
352
- var END_PATCH = "*** End Patch";
353
- var ADD_FILE = "*** Add File: ";
354
- var DELETE_FILE = "*** Delete File: ";
355
- var UPDATE_FILE = "*** Update File: ";
356
- var MOVE_TO = "*** Move to: ";
357
- var APPLY_PATCH_OP_TYPES = /* @__PURE__ */ new Set(["create_file", "update_file", "delete_file"]);
358
- function isRecord(value) {
359
- return value !== null && typeof value === "object" && !Array.isArray(value);
360
- }
361
- function freeformApplyPatchOps(rawPatch) {
362
- return parseFreeformApplyPatch(rawPatch.trimStart());
363
- }
364
- function asApplyPatchOperation(value) {
365
- if (!isRecord(value)) return null;
366
- if (typeof value.type !== "string" || !APPLY_PATCH_OP_TYPES.has(value.type)) {
367
- return null;
368
- }
369
- if (typeof value.path !== "string" || !value.path) {
370
- return null;
371
- }
372
- const op = {
373
- type: value.type,
374
- path: value.path
375
- };
376
- if (typeof value.diff === "string") op.diff = value.diff;
377
- if (typeof value.moveTo === "string" && value.moveTo.length > 0) op.moveTo = value.moveTo;
378
- return op;
379
- }
380
- function parseStructuredOperations(payloads) {
381
- if (payloads.length === 0) return [];
382
- const operations = [];
383
- for (const payload of payloads) {
384
- const op = asApplyPatchOperation(payload);
385
- if (!op) return [];
386
- operations.push(op);
387
- }
388
- return operations;
389
- }
390
- function parseFreeformApplyPatch(rawPatch) {
391
- const lines = rawPatch.split(/\r?\n/);
392
- if (lines.at(-1) === "") lines.pop();
393
- if (lines[0] !== BEGIN_PATCH) return [];
394
- if (lines.length < 2 || lines.at(-1) !== END_PATCH) return [];
395
- const operations = [];
396
- let index = 1;
397
- while (index < lines.length - 1) {
398
- const line = lines[index];
399
- let parsed = null;
400
- if (line.startsWith(ADD_FILE)) parsed = parseAddFilePatch(lines, index);
401
- else if (line.startsWith(DELETE_FILE)) parsed = parseDeleteFilePatch(lines, index);
402
- else if (line.startsWith(UPDATE_FILE)) parsed = parseUpdateFilePatch(lines, index);
403
- else return [];
404
- if (!parsed || "error" in parsed) return [];
405
- operations.push(parsed.operation);
406
- index = parsed.nextIndex;
407
- }
408
- return operations.length > 0 ? operations : [];
409
- }
410
- function parsePatchHeader(line, prefix) {
411
- const path = line.slice(prefix.length).trim();
412
- return path || null;
413
- }
414
- function isFileOperationHeader(line) {
415
- return line.startsWith(ADD_FILE) || line.startsWith(DELETE_FILE) || line.startsWith(UPDATE_FILE);
416
- }
417
- function joinDiff(lines) {
418
- return `${lines.join("\n")}
419
- `;
420
- }
421
- function parseAddFilePatch(lines, index) {
422
- const path = parsePatchHeader(lines[index], ADD_FILE);
423
- if (!path) return { error: true };
424
- index += 1;
425
- const diffLines = [];
426
- while (index < lines.length - 1 && !isFileOperationHeader(lines[index])) {
427
- const line = lines[index];
428
- if (!line.startsWith("+")) return { error: true };
429
- diffLines.push(line);
430
- index += 1;
431
- }
432
- if (diffLines.length === 0) return { error: true };
433
- return {
434
- operation: { type: "create_file", path, diff: joinDiff(diffLines) },
435
- nextIndex: index
436
- };
437
- }
438
- function parseDeleteFilePatch(lines, index) {
439
- const path = parsePatchHeader(lines[index], DELETE_FILE);
440
- if (!path) return { error: true };
441
- index += 1;
442
- if (index < lines.length - 1 && !isFileOperationHeader(lines[index])) {
443
- return { error: true };
444
- }
445
- return { operation: { type: "delete_file", path }, nextIndex: index };
446
- }
447
- function parseUpdateFilePatch(lines, index) {
448
- const path = parsePatchHeader(lines[index], UPDATE_FILE);
449
- if (!path) return { error: true };
450
- index += 1;
451
- let moveTo;
452
- if (index < lines.length - 1 && lines[index].startsWith(MOVE_TO)) {
453
- const parsedMoveTo = parsePatchHeader(lines[index], MOVE_TO);
454
- if (!parsedMoveTo) return { error: true };
455
- moveTo = parsedMoveTo;
456
- index += 1;
457
- }
458
- const diffLines = [];
459
- while (index < lines.length - 1 && !isFileOperationHeader(lines[index])) {
460
- diffLines.push(lines[index]);
461
- index += 1;
462
- }
463
- if (diffLines.length === 0 && !moveTo) return { error: true };
464
- return {
465
- operation: {
466
- type: "update_file",
467
- path,
468
- diff: diffLines.length > 0 ? joinDiff(diffLines) : "",
469
- ...moveTo ? { moveTo } : {}
470
- },
471
- nextIndex: index
472
- };
473
- }
474
- function applyPatchOps(raw) {
475
- if (raw == null) return [];
476
- if (typeof raw === "string") {
477
- const trimmed = raw.trimStart();
478
- if (trimmed.startsWith(BEGIN_PATCH)) return freeformApplyPatchOps(trimmed);
479
- const parsed = tryParseJson(trimmed);
480
- return parsed === void 0 ? [] : applyPatchOps(parsed);
481
- }
482
- if (Array.isArray(raw)) return parseStructuredOperations(raw);
483
- if (!isRecord(raw)) return [];
484
- if (typeof raw.patch === "string") return freeformApplyPatchOps(raw.patch);
485
- if (Array.isArray(raw.command)) {
486
- const [commandName, patch] = raw.command;
487
- if (commandName === "apply_patch" && typeof patch === "string") {
488
- return freeformApplyPatchOps(patch);
489
- }
490
- }
491
- if (Array.isArray(raw.operations) && raw.operations.length > 0) {
492
- return parseStructuredOperations(raw.operations);
493
- }
494
- if (raw.operation !== void 0) {
495
- const op = asApplyPatchOperation(raw.operation);
496
- return op ? [op] : [];
497
- }
498
- const flat = asApplyPatchOperation(raw);
499
- return flat ? [flat] : [];
500
- }
501
- function applyPatchOpsFromToolItem(item) {
502
- const fromRaw = applyPatchOps(item.raw);
503
- if (fromRaw.length > 0) return fromRaw;
504
- if (isRecord(item.raw)) {
505
- const nested = item.raw.arguments ?? item.raw.input;
506
- if (nested !== void 0 && nested !== item.arguments) {
507
- const fromNested = applyPatchOps(nested);
508
- if (fromNested.length > 0) return fromNested;
509
- }
510
- }
511
- if (item.arguments !== void 0 && item.arguments !== null) {
512
- return applyPatchOps(item.arguments);
513
- }
514
- return [];
515
- }
516
- function isApplyPatch(item) {
517
- const type = item.raw && typeof item.raw === "object" ? item.raw.type : void 0;
518
- if (type === "apply_patch_call") {
519
- return true;
520
- }
521
- const name = item.name;
522
- return name === "apply_patch_call" || name === "apply_patch" || name.endsWith("__apply_patch");
523
- }
524
- function parseToolArgs(args) {
525
- if (args == null) {
526
- return {};
527
- }
528
- if (typeof args === "string") {
529
- const parsed = tryParseJson(args);
530
- return parsed && typeof parsed === "object" ? parsed : {};
531
- }
532
- return typeof args === "object" ? args : {};
533
- }
534
- function tailPeek(text) {
535
- const trimmed = text.trim();
536
- if (!trimmed) {
537
- return "";
538
- }
539
- const lines = trimmed.split("\n");
540
- return lines[lines.length - 1] ?? "";
541
- }
542
- function unwrapMcpOutput(output) {
543
- const normalized = normalizeMcpOutput(output);
544
- return { text: normalized.text, isError: normalized.isError };
545
- }
546
- function screenshotDataUrl(out) {
547
- if (typeof out === "string") {
548
- if (out.startsWith("data:image")) {
549
- return out;
550
- }
551
- if (out.startsWith("{") || out.startsWith("[")) {
552
- const parsed = tryParseJson(out);
553
- if (parsed !== void 0 && parsed !== out) {
554
- return screenshotDataUrl(parsed);
555
- }
556
- }
557
- return null;
558
- }
559
- if (Array.isArray(out)) {
560
- for (const entry of out) {
561
- const url = screenshotDataUrl(entry);
562
- if (url) {
563
- return url;
564
- }
565
- }
566
- return null;
567
- }
568
- if (out === null || typeof out !== "object") {
569
- return null;
570
- }
571
- const record = out;
572
- const imageUrl = record.image_url ?? record.imageUrl;
573
- if (typeof imageUrl === "string" && imageUrl.startsWith("data:image")) {
574
- return imageUrl;
575
- }
576
- if (imageUrl && typeof imageUrl === "object") {
577
- const url = imageUrl.url;
578
- if (typeof url === "string" && url.startsWith("data:image")) {
579
- return url;
580
- }
581
- }
582
- const image = record.image;
583
- if (image && typeof image === "object") {
584
- const mediaType = typeof image.mediaType === "string" ? image.mediaType : "image/png";
585
- const base64 = bytesToBase64(image.data);
586
- if (base64) {
587
- return `data:${mediaType};base64,${base64}`;
588
- }
589
- if (typeof image.data === "string" && image.data.length > 0) {
590
- return `data:${mediaType};base64,${image.data}`;
591
- }
592
- }
593
- return null;
594
- }
595
- function retainedScreenshotMetadata(out) {
596
- if (typeof out === "string" && (out.startsWith("{") || out.startsWith("["))) {
597
- const parsed = tryParseJson(out);
598
- if (parsed !== void 0 && parsed !== out) return retainedScreenshotMetadata(parsed);
599
- }
600
- if (Array.isArray(out)) {
601
- for (const entry of out) {
602
- const metadata = retainedScreenshotMetadata(entry);
603
- if (metadata) return metadata;
604
- }
605
- return null;
606
- }
607
- if (!out || typeof out !== "object") return null;
608
- const value = out;
609
- if (typeof value.artifactId !== "string" || typeof value.available !== "boolean") return null;
610
- if (!value.available) {
611
- return typeof value.reason === "string" ? value : null;
612
- }
613
- return (value.kind === "computer_screenshot" || value.kind === "browser_screenshot") && ["image/png", "image/jpeg", "image/webp"].includes(String(value.contentType)) && typeof value.originalBytes === "number" && typeof value.sha256 === "string" && value.dimensions !== null && typeof value.dimensions === "object" && value.retention !== null && typeof value.retention === "object" && value.retention.policy === "session_screenshot" ? value : null;
614
- }
615
- function generatedImageReceipt(out) {
616
- return parseGeneratedImageReceipt(out);
617
- }
618
- function retainedToolResultImages(out) {
619
- const parsed = typeof out === "string" && (out.startsWith("{") || out.startsWith("[")) ? tryParseJson(out) : out;
620
- const split = (entries) => {
621
- const images = [];
622
- const rest = entries.filter((entry) => {
623
- if (!entry || typeof entry !== "object" || Array.isArray(entry)) return true;
624
- const receipt = retainedScreenshotMetadata(entry);
625
- if (!receipt?.available) return true;
626
- images.push(receipt);
627
- return false;
628
- });
629
- return { images, rest };
630
- };
631
- if (Array.isArray(parsed)) {
632
- const { images, rest } = split(parsed);
633
- return images.length ? { images, output: rest } : { images, output: out };
634
- }
635
- if (parsed && typeof parsed === "object") {
636
- const record = parsed;
637
- if (Array.isArray(record.content)) {
638
- const { images, rest } = split(record.content);
639
- return images.length ? { images, output: { ...record, content: rest } } : { images, output: out };
640
- }
641
- }
642
- return { images: [], output: out };
643
- }
644
- function mediaPreviewFact(out) {
645
- if (typeof out === "string" && (out.startsWith("{") || out.startsWith("["))) {
646
- const parsed = tryParseJson(out);
647
- if (parsed !== void 0 && parsed !== out) return mediaPreviewFact(parsed);
648
- }
649
- if (Array.isArray(out)) {
650
- for (const entry of out) {
651
- const preview = mediaPreviewFact(entry);
652
- if (preview) return preview;
653
- }
654
- return null;
655
- }
656
- if (!out || typeof out !== "object") return null;
657
- const record = out;
658
- if (record.type !== "media_preview" || typeof record.mediaType !== "string" || record.fullOutputAvailable !== false || typeof record.preview !== "string" || record.inlineBytes !== null && typeof record.inlineBytes !== "number") {
659
- return null;
660
- }
661
- return record;
662
- }
663
- function bytesToBase64(data) {
664
- const isByte = (n) => typeof n === "number" && Number.isInteger(n) && n >= 0 && n <= 255;
665
- let bytes = null;
666
- if (Array.isArray(data) && data.every(isByte)) {
667
- bytes = data;
668
- } else if (data && typeof data === "object") {
669
- const record = data;
670
- if (record.type === "Buffer" && Array.isArray(record.data) && record.data.every(isByte)) {
671
- bytes = record.data;
672
- } else {
673
- const keys = Object.keys(record);
674
- if (keys.length > 0 && keys.every((key) => /^\d+$/.test(key))) {
675
- const values = keys.sort((a, b) => Number(a) - Number(b)).map((key) => record[key]);
676
- if (values.every(isByte)) {
677
- bytes = values;
678
- }
679
- }
680
- }
681
- }
682
- if (!bytes || bytes.length === 0) {
683
- return null;
684
- }
685
- try {
686
- let binary = "";
687
- const CHUNK = 32768;
688
- for (let i = 0; i < bytes.length; i += CHUNK) {
689
- binary += String.fromCharCode(...bytes.slice(i, i + CHUNK));
690
- }
691
- return typeof btoa === "function" ? btoa(binary) : Buffer.from(binary, "binary").toString("base64");
692
- } catch {
693
- return null;
694
- }
695
- }
696
-
697
104
  // src/timeline/tool-presentation.ts
698
105
  import { isConnectedMachineOutcomeUnknownOutput } from "@opengeni/sdk";
699
-
700
- // src/timeline/invoked-tool.ts
701
- function invokedToolCall(item) {
702
- if (mcpToolLeaf(item.name) !== "tool_invoke") return item;
703
- const args = parseToolArgs(item.arguments);
704
- if (typeof args.name !== "string" || !args.name.trim()) return item;
705
- const { display: _display, ...rest } = item;
706
- return { ...rest, name: args.name, arguments: args.arguments ?? {} };
707
- }
708
-
709
- // src/timeline/tool-presentation.ts
710
106
  function withComputePreview(label, preview) {
711
107
  if (!label) {
712
108
  return preview;
@@ -1135,9 +531,127 @@ function goalToolPreview(name, args) {
1135
531
  const text = typeof record.text === "string" ? record.text : typeof record.evidence === "string" ? record.evidence : typeof record.rationale === "string" ? record.rationale : typeof record.reason === "string" ? record.reason : typeof record.progressNote === "string" ? record.progressNote : null;
1136
532
  return text ? truncatePreview(text, 90) : null;
1137
533
  }
534
+ var TOOL_STEP_ICONS = {
535
+ // Chats, goals and notifications
536
+ nameChat: "rename",
537
+ notify: "bell",
538
+ withdrawNotification: "bell",
539
+ tidyInbox: "inbox",
540
+ setGoal: "target",
541
+ noteProgress: "target",
542
+ completeGoal: "target",
543
+ pauseGoal: "target",
544
+ resumeGoal: "target",
545
+ wait: "wait",
546
+ askYou: "question",
547
+ askForHelp: "help",
548
+ // Notes, knowledge and instructions
549
+ checkNotes: "brain",
550
+ saveNote: "brain",
551
+ archiveNote: "brain",
552
+ proposeUpdate: "brain",
553
+ confirmUpdate: "brain",
554
+ updateInstructions: "brain",
555
+ coordinateWork: "sessions",
556
+ // Guides (Skills)
557
+ readGuide: "guide",
558
+ findGuides: "guide",
559
+ saveGuide: "guide",
560
+ removeGuide: "guide",
561
+ // Computers
562
+ findComputers: "server",
563
+ switchComputer: "server",
564
+ useComputer: "server",
565
+ setUpComputer: "server",
566
+ removeComputer: "server",
567
+ runCommand: "terminal",
568
+ runCode: "code",
569
+ editFile: "file-diff",
570
+ lookAtImage: "image",
571
+ searchCode: "search",
572
+ searchFiles: "file-search",
573
+ openFile: "file",
574
+ // Screens and the browser
575
+ checkScreens: "screen",
576
+ openScreen: "screen",
577
+ lookAtScreen: "screen",
578
+ useScreen: "screen",
579
+ enableScreenControl: "screen",
580
+ useClipboard: "clipboard",
581
+ openBrowser: "browser",
582
+ useBrowser: "browser",
583
+ readPage: "browser",
584
+ lookAtPage: "browser",
585
+ workInBrowser: "browser",
586
+ download: "download",
587
+ recordBrowser: "record",
588
+ signIn: "sign-in",
589
+ manageSignIns: "sign-in",
590
+ shareBrowser: "share",
591
+ workInExcel: "spreadsheet",
592
+ // Projects, other chats and helpers
593
+ checkProjects: "folder",
594
+ organizeProjects: "folder",
595
+ checkChats: "sessions",
596
+ chooseChat: "sessions",
597
+ checkProgress: "progress",
598
+ changeModel: "model",
599
+ startHelper: "helper",
600
+ messageAssistant: "sessions",
601
+ manageChat: "sessions",
602
+ // Workspace administration and setup
603
+ manageWorkspace: "settings",
604
+ manageSetup: "server-cog",
605
+ checkModels: "model",
606
+ // Passwords and settings
607
+ findPassword: "key",
608
+ savePassword: "key",
609
+ deletePassword: "key",
610
+ checkSettings: "settings",
611
+ updateSettings: "settings",
612
+ // Tools and connections
613
+ findTools: "package-search",
614
+ useTool: "plug",
615
+ requestAccess: "plug",
616
+ listRepositories: "git",
617
+ // Web, images and video
618
+ searchWeb: "search",
619
+ createImage: "image",
620
+ createVideo: "video",
621
+ // Social accounts
622
+ checkAccounts: "share",
623
+ readPosts: "share",
624
+ syncPosts: "share",
625
+ replyToPost: "share",
626
+ // Scheduled tasks
627
+ checkSchedules: "calendar",
628
+ createSchedule: "calendar",
629
+ updateSchedule: "calendar",
630
+ runSchedule: "calendar",
631
+ // Slack
632
+ readSlack: "message",
633
+ postSlack: "message",
634
+ deleteMessage: "message",
635
+ // Accounting
636
+ readAccounting: "accounting",
637
+ updateAccounting: "accounting",
638
+ // Documents, files and Sites
639
+ searchDocuments: "file-search",
640
+ checkDocuments: "document",
641
+ createDocument: "document",
642
+ editDocument: "document",
643
+ exportDocument: "document",
644
+ restoreDocument: "document",
645
+ archiveDocument: "archive",
646
+ shareFile: "attachment",
647
+ checkSite: "site",
648
+ updateSite: "site"
649
+ };
1138
650
  function genericToolIconKind(name) {
1139
651
  const leaf = mcpToolLeaf(name);
1140
- return leaf === "request_human_input" ? "question" : leaf.startsWith("goal_") ? "target" : leaf.startsWith("memory_") || leaf === "preference_registry_summary" || leaf === "preference_registry_get" ? "brain" : leaf.startsWith("session_") || leaf === "sessions_list" || leaf === "set_session_title" || leaf === "set_other_session_title" ? "sessions" : leaf.startsWith("sandbox") || leaf === "sandboxes_list" || leaf === "run_on" ? "server" : leaf.startsWith("rig_") ? "server-cog" : leaf.startsWith("scheduled_") ? "calendar" : leaf.startsWith("artifacts_") ? "panels" : leaf.startsWith("social_") ? "share" : leaf.startsWith("slack_") ? "message" : leaf.startsWith("github_") ? "git" : leaf.startsWith("variable_") ? "box" : leaf.startsWith("environment_") ? "key" : leaf.includes("document") || leaf.includes("knowledge") || leaf === "list_document_bases" ? "file-search" : leaf === "tool_search" ? "package-search" : leaf.startsWith("skill_") ? "plug" : "wrench";
652
+ const step = builtInToolStep(leaf);
653
+ if (step) return TOOL_STEP_ICONS[step];
654
+ return leaf.startsWith("goal_") ? "target" : leaf.startsWith("memory_") || leaf.startsWith("knowledge_") ? "brain" : leaf.startsWith("session_") || leaf.startsWith("sessions_") ? "sessions" : leaf.startsWith("sandbox") || leaf.startsWith("connected_machine_") ? "server" : leaf.startsWith("rig_") ? "server-cog" : leaf.startsWith("scheduled_") ? "calendar" : leaf.startsWith("artifacts_") || leaf.startsWith("editable_artifact_") ? "document" : leaf.startsWith("site_") ? "site" : leaf.startsWith("browser_") ? "browser" : leaf.startsWith("computer_") || leaf.startsWith("cua_") ? "screen" : leaf.startsWith("secret_") ? "key" : leaf.startsWith("social_") || leaf.startsWith("x_") || leaf.startsWith("reddit_") ? "share" : leaf.startsWith("slack_") ? "message" : leaf.startsWith("github_") ? "git" : leaf.startsWith("variable_") || leaf.startsWith("environment_") ? "settings" : leaf.includes("document") ? "file-search" : leaf.startsWith("skill_") ? "guide" : "wrench";
1141
655
  }
1142
656
  function mcpRowPresentation(t, item, options) {
1143
657
  const args = parseToolArgs(item.arguments);
@@ -1224,7 +738,7 @@ function machinePresentation(t, item) {
1224
738
  const failed = item.status !== "running" && item.status !== "cancelled" && (item.status === "failed" || unwrapMcpOutput(item.output).isError);
1225
739
  return mcpRowPresentation(t, item, {
1226
740
  tool: "machine",
1227
- icon: isScreenTool(leaf) ? "panels" : "server",
741
+ icon: genericToolIconKind(item.name),
1228
742
  title: failed ? machineFailureTitle(t, leaf) : machineTitle(t, leaf, args, action, item.output),
1229
743
  runningPreview: preview,
1230
744
  runningFallback: t("timeline.toolPresentation.running"),
@@ -1234,9 +748,6 @@ function machinePresentation(t, item) {
1234
748
  quietError: true
1235
749
  });
1236
750
  }
1237
- function isScreenTool(leaf) {
1238
- return leaf.startsWith("computer_") || leaf.startsWith("cua_") || leaf === "interaction_discover";
1239
- }
1240
751
  function machineFailureTitle(t, leaf) {
1241
752
  switch (leaf) {
1242
753
  case "sandboxes_list":
@@ -1586,7 +1097,7 @@ function sessionTitlePresentation(t, item) {
1586
1097
  const previewTitle = titleArg ? truncatePreview(titleArg, 72) : "";
1587
1098
  const base = {
1588
1099
  tool: "session_title",
1589
- icon: "sessions",
1100
+ icon: genericToolIconKind(item.name),
1590
1101
  title: toolDisplayName(t, item.name, item.display, callStepPhase(item))
1591
1102
  };
1592
1103
  if (item.status === "running") {
@@ -1787,60 +1298,161 @@ function presentedToolRow(t, item, context) {
1787
1298
  }
1788
1299
  }
1789
1300
 
1790
- // src/timeline/genie-copy.ts
1791
- var GENIE_PREPARING_PHRASES = (t) => [
1792
- t("timeline.genieCopy.polishingTheLamp"),
1793
- t("timeline.genieCopy.consultingTheCarpet"),
1794
- t("timeline.genieCopy.untanglingWishes"),
1795
- t("timeline.genieCopy.summoningALittleCleverness"),
1796
- t("timeline.genieCopy.checkingTheFinePrintOn"),
1797
- t("timeline.genieCopy.warmingUpTheAbracadabra"),
1798
- t("timeline.genieCopy.rearrangingTheStars"),
1799
- t("timeline.genieCopy.negotiatingWithTheLamp"),
1800
- t("timeline.genieCopy.dustingOffAThousandYears"),
1801
- t("timeline.genieCopy.wishfulThinking"),
1802
- t("timeline.genieCopy.decantingALittleMagic"),
1803
- t("timeline.genieCopy.findingTheGoodStardust"),
1804
- t("timeline.genieCopy.fluffingTheMagicCarpet"),
1805
- t("timeline.genieCopy.puttingAWishIntoMotion"),
1806
- t("timeline.genieCopy.aLittleHocusALittle")
1807
- ];
1808
- var GENIE_WAITING_PHRASES = (t) => [
1809
- t("timeline.genieCopy.waitingForAResponse")
1301
+ // src/timeline/turn-summary-model.ts
1302
+ var BUILT_IN_TURN_SUMMARY_FACET_IDS = [
1303
+ "steps",
1304
+ "files",
1305
+ "commands",
1306
+ "screenshots",
1307
+ "memories",
1308
+ "compacted",
1309
+ "duration"
1810
1310
  ];
1311
+ function turnSummaryFallbackLabel(t, items, unloadedSteps = false) {
1312
+ const preparationOnly = !unloadedSteps && items.some((item) => item.kind === "startup-phase") && items.every((item) => item.kind === "startup-phase" || item.kind === "agent-message");
1313
+ return preparationOnly ? t("timeline.turnSummary.preparation") : t("timeline.turnSummary.steps");
1314
+ }
1315
+ function formatElapsed(t, durationMs) {
1316
+ const totalSeconds = Math.max(0, Math.floor(durationMs / 1e3));
1317
+ if (totalSeconds < 60) {
1318
+ return t("timeline.turnSummaryModel.seconds", { count: totalSeconds });
1319
+ }
1320
+ const totalMinutes = Math.floor(totalSeconds / 60);
1321
+ if (totalMinutes < 60) {
1322
+ const seconds = totalSeconds % 60;
1323
+ return seconds ? t("timeline.turnSummaryModel.minutesSeconds", { minutes: totalMinutes, seconds }) : t("timeline.turnSummaryModel.minutes", { count: totalMinutes });
1324
+ }
1325
+ const hours = Math.floor(totalMinutes / 60);
1326
+ return t("timeline.turnSummaryModel.hoursMinutes", {
1327
+ hours,
1328
+ minutes: String(totalMinutes % 60).padStart(2, "0")
1329
+ });
1330
+ }
1331
+ function createTurnSummaryContext(t, items, outcome, failureText, durationMs, contextCompactionCount) {
1332
+ const itemSnapshot = Object.freeze([...items]);
1333
+ const toolCalls = Object.freeze(
1334
+ itemSnapshot.filter((item) => item.kind === "tool-call")
1335
+ );
1336
+ const settled = itemSnapshot.every((item) => {
1337
+ if (item.kind === "reasoning" || item.kind === "agent-message") {
1338
+ return !item.streaming;
1339
+ }
1340
+ if (item.kind === "tool-call" || item.kind === "worker" || item.kind === "sandbox" || item.kind === "startup-phase") {
1341
+ return item.status !== "running";
1342
+ }
1343
+ return true;
1344
+ });
1345
+ return Object.freeze({
1346
+ t,
1347
+ items: itemSnapshot,
1348
+ toolCalls,
1349
+ outcome,
1350
+ failureText,
1351
+ durationMs,
1352
+ settled,
1353
+ contextCompactionCount: Math.max(0, Math.floor(contextCompactionCount))
1354
+ });
1355
+ }
1356
+ var BUILT_IN_TURN_SUMMARY_FACETS = Object.freeze([
1357
+ {
1358
+ id: "memories",
1359
+ summarize: ({ items, t }) => {
1360
+ let saved = 0;
1361
+ let updated = 0;
1362
+ for (const item of items) {
1363
+ if (item.kind !== "memory") {
1364
+ continue;
1365
+ }
1366
+ if (item.variant === "corrected") {
1367
+ updated += 1;
1368
+ } else {
1369
+ saved += 1;
1370
+ }
1371
+ }
1372
+ const parts = [];
1373
+ if (saved) {
1374
+ parts.push(t("timeline.turnSummaryModel.memoriesSaved", { count: saved }));
1375
+ }
1376
+ if (updated) {
1377
+ parts.push(t("timeline.turnSummaryModel.memoriesUpdated", { count: updated }));
1378
+ }
1379
+ return parts.length > 0 ? { content: parts.join(" \xB7 ") } : null;
1380
+ }
1381
+ },
1382
+ {
1383
+ id: "compacted",
1384
+ summarize: ({ contextCompactionCount, t }) => contextCompactionCount > 0 ? {
1385
+ content: t("timeline.turnSummaryModel.compacts", { count: contextCompactionCount }),
1386
+ ariaLabel: t("timeline.turnSummaryModel.compactions", {
1387
+ count: contextCompactionCount
1388
+ })
1389
+ } : null
1390
+ },
1391
+ {
1392
+ id: "duration",
1393
+ summarize: ({ durationMs, t }) => {
1394
+ const duration = formatDurationFacet(t, durationMs);
1395
+ return duration ? { content: duration } : null;
1396
+ }
1397
+ }
1398
+ ]);
1399
+ function resolveTurnSummaryFacets(configuration) {
1400
+ const requested = configuration?.replace ?? [
1401
+ ...BUILT_IN_TURN_SUMMARY_FACETS.filter(
1402
+ (facet) => !configuration?.remove?.includes(facet.id)
1403
+ ),
1404
+ ...configuration?.add ?? []
1405
+ ];
1406
+ const seen = /* @__PURE__ */ new Set();
1407
+ return requested.filter((facet) => {
1408
+ if (!facet.id || seen.has(facet.id)) {
1409
+ return false;
1410
+ }
1411
+ seen.add(facet.id);
1412
+ return true;
1413
+ });
1414
+ }
1415
+ function formatDurationFacet(t, durationMs) {
1416
+ if (durationMs === void 0 || !Number.isFinite(durationMs) || durationMs < 1e3) {
1417
+ return null;
1418
+ }
1419
+ const totalSeconds = Math.floor(durationMs / 1e3);
1420
+ if (totalSeconds < 60) {
1421
+ return t("timeline.turnSummaryModel.seconds", { count: totalSeconds });
1422
+ }
1423
+ const totalMinutes = Math.floor(totalSeconds / 60);
1424
+ if (totalMinutes < 60) {
1425
+ return t("timeline.turnSummaryModel.minutes", { count: totalMinutes });
1426
+ }
1427
+ const hours = Math.floor(totalMinutes / 60);
1428
+ const minutes = totalMinutes % 60;
1429
+ return t("timeline.turnSummaryModel.hoursMinutes", {
1430
+ hours,
1431
+ minutes: String(minutes).padStart(2, "0")
1432
+ });
1433
+ }
1434
+ function hasFacetContent(content) {
1435
+ return content !== null && content !== void 0 && content !== false && content !== "";
1436
+ }
1437
+ function selectTurnSummaryFacets(definitions, context, statusKind) {
1438
+ return definitions.flatMap((facet) => {
1439
+ if (statusKind && (facet.id === "duration" || statusKind !== "worked" && BUILT_IN_TURN_SUMMARY_FACET_IDS.includes(facet.id))) {
1440
+ return [];
1441
+ }
1442
+ try {
1443
+ const result = facet.summarize(context);
1444
+ return result && hasFacetContent(result.content) ? [{ facet, result }] : [];
1445
+ } catch {
1446
+ return [];
1447
+ }
1448
+ });
1449
+ }
1811
1450
 
1812
1451
  export {
1813
- BUILT_IN_TURN_SUMMARY_FACET_IDS,
1814
- turnSummaryFallbackLabel,
1815
- formatElapsed,
1816
- createTurnSummaryContext,
1817
- BUILT_IN_TURN_SUMMARY_FACETS,
1818
- resolveTurnSummaryFacets,
1819
- formatDurationFacet,
1820
- selectTurnSummaryFacets,
1452
+ GENIE_PREPARING_PHRASES,
1453
+ GENIE_WAITING_PHRASES,
1821
1454
  rawTypeOf,
1822
1455
  createToolRegistry,
1823
- sandboxCommandExitCode,
1824
- parseExecBannerSessionId,
1825
- stripExecBanner,
1826
- execTruncated,
1827
- isExecSessionLostBanner,
1828
- looksBinary,
1829
- controlCaret,
1830
- v4aToGitFileDiff,
1831
- parseFreeformApplyPatch,
1832
- applyPatchOps,
1833
- applyPatchOpsFromToolItem,
1834
- isApplyPatch,
1835
- parseToolArgs,
1836
- tailPeek,
1837
- unwrapMcpOutput,
1838
- screenshotDataUrl,
1839
- retainedScreenshotMetadata,
1840
- generatedImageReceipt,
1841
- retainedToolResultImages,
1842
- mediaPreviewFact,
1843
- invokedToolCall,
1844
1456
  withComputePreview,
1845
1457
  truncatePreview,
1846
1458
  execPresentation,
@@ -1863,7 +1475,13 @@ export {
1863
1475
  presentedToolKind,
1864
1476
  presentsToolOutputPreview,
1865
1477
  toolRowPresentation,
1866
- GENIE_PREPARING_PHRASES,
1867
- GENIE_WAITING_PHRASES
1478
+ BUILT_IN_TURN_SUMMARY_FACET_IDS,
1479
+ turnSummaryFallbackLabel,
1480
+ formatElapsed,
1481
+ createTurnSummaryContext,
1482
+ BUILT_IN_TURN_SUMMARY_FACETS,
1483
+ resolveTurnSummaryFacets,
1484
+ formatDurationFacet,
1485
+ selectTurnSummaryFacets
1868
1486
  };
1869
- //# sourceMappingURL=chunk-TQGJN5UZ.js.map
1487
+ //# sourceMappingURL=chunk-YV56F4UP.js.map