@opengeni/react 4.4.1 → 4.5.1-canary.39832248373001

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 (654) hide show
  1. package/dist/app/app-state.js +15 -15
  2. package/dist/app/components/Composer.js +19 -19
  3. package/dist/app/components/artifacts/artifact-browse-controls.js +3 -3
  4. package/dist/app/components/artifacts/artifact-library.js +9 -9
  5. package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
  6. package/dist/app/components/artifacts/chat-interactive-block.js +14 -14
  7. package/dist/app/components/artifacts/inline-chat-image.js +22 -21
  8. package/dist/app/components/artifacts/retained-file-preview.js +24 -23
  9. package/dist/app/components/artifacts/retained-text-preview.js +2 -2
  10. package/dist/app/components/artifacts/site-audience.js +2 -2
  11. package/dist/app/components/artifacts/site-conversations.js +14 -13
  12. package/dist/app/components/artifacts/site-data.js +4 -4
  13. package/dist/app/components/artifacts/site-publishing.js +20 -20
  14. package/dist/app/components/artifacts/site-settings.js +25 -25
  15. package/dist/app/components/billing-class-mark.js +3 -3
  16. package/dist/app/components/capabilities/capability-detail-sheet.js +6 -6
  17. package/dist/app/components/capabilities/capability-logo-source.js +8 -8
  18. package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
  19. package/dist/app/components/capabilities/native-connect-setup.js +8 -8
  20. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +10 -10
  21. package/dist/app/components/capabilities/session-capability-card.js +43 -41
  22. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  23. package/dist/app/components/capabilities/session-chrome-card.js +20 -18
  24. package/dist/app/components/capabilities/session-custom-mcp-card.js +11 -11
  25. package/dist/app/components/capabilities/session-github-card.js +13 -13
  26. package/dist/app/components/capabilities/session-machine-card.js +19 -17
  27. package/dist/app/components/command-menu/chat-status.js +16 -15
  28. package/dist/app/components/command-menu/chat-switcher.js +19 -18
  29. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  30. package/dist/app/components/command-menu/command-menu.js +29 -107
  31. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  32. package/dist/app/components/command-menu/shortcut-sheet.js +9 -9
  33. package/dist/app/components/composer-mobile-plus-panel.js +9 -9
  34. package/dist/app/components/composer-mobile-plus.js +1 -1
  35. package/dist/app/components/credit-required-gate.js +1 -1
  36. package/dist/app/components/credit-required-prompt.js +5 -5
  37. package/dist/app/components/credits/coupon-redeem.js +2 -2
  38. package/dist/app/components/credits/credit-refusal-notice.js +2 -2
  39. package/dist/app/components/desktop/app-shots.js +7 -7
  40. package/dist/app/components/desktop/this-computer.js +4 -4
  41. package/dist/app/components/feedback.js +3 -3
  42. package/dist/app/components/follow-up-repository-menu-body.js +2 -2
  43. package/dist/app/components/follow-up-repository-picker.js +1 -1
  44. package/dist/app/components/github-app-connect-launcher.js +2 -2
  45. package/dist/app/components/in-app-help-link.js +2 -2
  46. package/dist/app/components/machines/connect-machine-dialog.js +3 -3
  47. package/dist/app/components/markdown.js +5 -5
  48. package/dist/app/components/models/models-ui.js +3 -3
  49. package/dist/app/components/new-session-starters.js +2 -2
  50. package/dist/app/components/pickers.js +6 -6
  51. package/dist/app/components/rail/rail-context.js +3 -3
  52. package/dist/app/components/rail/rail-sections.js +51 -48
  53. package/dist/app/components/rail/session-header.js +29 -28
  54. package/dist/app/components/rail/session-list.js +50 -47
  55. package/dist/app/components/rail/session-row-content.d.ts +6 -2
  56. package/dist/app/components/rail/session-row-content.js +1 -1
  57. package/dist/app/components/rail/session-row-hover-details.js +17 -16
  58. package/dist/app/components/rail/session-shell.js +78 -75
  59. package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
  60. package/dist/app/components/rail/site-session-group-heading.js +20 -3
  61. package/dist/app/components/repository-picker.js +2 -2
  62. package/dist/app/components/session/agent-configuration-panel.js +18 -18
  63. package/dist/app/components/session/artifact-link-boundary.js +2 -2
  64. package/dist/app/components/session/artifact-session-page.js +5 -5
  65. package/dist/app/components/session/banners.js +7 -7
  66. package/dist/app/components/session/codex-account-indicator.js +10 -10
  67. package/dist/app/components/session/editable-artifacts-workspace.js +24 -24
  68. package/dist/app/components/session/failed-session-banner.js +6 -6
  69. package/dist/app/components/session/human-input.js +41 -37
  70. package/dist/app/components/session/inspector.js +61 -57
  71. package/dist/app/components/session/inspector.js.map +1 -1
  72. package/dist/app/components/session/message-actions.js +3 -3
  73. package/dist/app/components/session/message-resource-attachments.js +12 -11
  74. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  75. package/dist/app/components/session/model-account-indicator.js +9 -9
  76. package/dist/app/components/session/model-recovery-notice.js +3 -3
  77. package/dist/app/components/session/new-session-settings-menu.js +8 -8
  78. package/dist/app/components/session/sandbox-switcher.js +12 -12
  79. package/dist/app/components/session/sandbox-workspace.js +58 -54
  80. package/dist/app/components/session/search-markdown-highlight.js +6 -6
  81. package/dist/app/components/session/search-results-view.js +7 -7
  82. package/dist/app/components/session/session-admin-access.js +3 -3
  83. package/dist/app/components/session/session-admission-notice.js +5 -5
  84. package/dist/app/components/session/session-machine-access-notice.js +5 -5
  85. package/dist/app/components/session/session-search-dialog.js +8 -8
  86. package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
  87. package/dist/app/components/session/session-tenancy-control.js +26 -11
  88. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  89. package/dist/app/components/session/session-usage-limit-section.js +4 -4
  90. package/dist/app/components/session/session-wait-status.js +8 -7
  91. package/dist/app/components/session/session-wait-status.js.map +1 -1
  92. package/dist/app/components/session/site-origin-link.d.ts +1 -0
  93. package/dist/app/components/session/site-origin-link.js +2 -2
  94. package/dist/app/components/session/subagents.js +13 -12
  95. package/dist/app/components/settings/row-select.js +3 -3
  96. package/dist/app/components/transcription-settings.js +4 -4
  97. package/dist/app/components/usage/usage-entry.js +5 -5
  98. package/dist/app/components/workspace-composer-plus.js +12 -12
  99. package/dist/app/embed/memory-navigation.js +2 -2
  100. package/dist/app/embed/session-app.js +196 -190
  101. package/dist/app/lib/actions/actions-provider.js +9 -9
  102. package/dist/app/lib/actions/held-modifier.d.ts +11 -0
  103. package/dist/app/lib/app-surfaces.js +2 -2
  104. package/dist/app/lib/codex-usage-query.js +6 -6
  105. package/dist/app/lib/composer-connectors.js +9 -9
  106. package/dist/app/lib/console-site.d.ts +6 -0
  107. package/dist/app/lib/console-site.js +14 -0
  108. package/dist/app/lib/console-text.js +2 -2
  109. package/dist/app/lib/events.js +13 -12
  110. package/dist/app/lib/failed-session-copy.js +3 -3
  111. package/dist/app/lib/model-access-onboarding.js +3 -3
  112. package/dist/app/lib/move-chat-to-machine.js +3 -3
  113. package/dist/app/lib/navigation.d.ts +5 -0
  114. package/dist/app/lib/navigation.js +1 -1
  115. package/dist/app/lib/routes.d.ts +17 -0
  116. package/dist/app/lib/routes.js +9 -3
  117. package/dist/app/lib/session-branch-cache.js +12 -11
  118. package/dist/app/lib/session-create.js +2 -2
  119. package/dist/app/lib/session-deep-link.js +2 -2
  120. package/dist/app/lib/session-failure-toasts.d.ts +8 -0
  121. package/dist/app/lib/session-group-pagination.js +12 -11
  122. package/dist/app/lib/session-hover-facts.js +12 -11
  123. package/dist/app/lib/session-model.js +2 -2
  124. package/dist/app/lib/session-rail.js +8 -7
  125. package/dist/app/lib/session-rename.js +2 -2
  126. package/dist/app/lib/session-ui-features.d.ts +6 -1
  127. package/dist/app/lib/session-ui-features.js +1 -1
  128. package/dist/app/lib/sessions-group.d.ts +43 -3
  129. package/dist/app/lib/sessions-group.js +19 -12
  130. package/dist/app/lib/shared-query.js +3 -3
  131. package/dist/app/lib/site-opened.d.ts +6 -0
  132. package/dist/app/lib/site-opened.js +10 -0
  133. package/dist/app/lib/turn-failure-analytics.js +5 -5
  134. package/dist/app/lib/use-duplicate-site.js +2 -2
  135. package/dist/app/lib/use-follow-up-repositories.js +2 -2
  136. package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
  137. package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
  138. package/dist/app/lib/use-workspace-machines.js +5 -5
  139. package/dist/app/lib/use-workspace-model-catalog.js +7 -7
  140. package/dist/app/lib/use-workspace-rigs.js +7 -7
  141. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  142. package/dist/app/lib/workspace-scope-context.js +3 -3
  143. package/dist/app/routes/artifacts.js +70 -87
  144. package/dist/app/routes/artifacts.js.map +1 -1
  145. package/dist/app/routes/retained-artifact.js +36 -35
  146. package/dist/app/routes/retained-artifact.js.map +1 -1
  147. package/dist/app/routes/session-unavailable.js +6 -4
  148. package/dist/app/routes/session.js +127 -123
  149. package/dist/app/routes/sessions-index-hydration.js +3 -3
  150. package/dist/app/routes/sessions-index.js +96 -94
  151. package/dist/app/routes/site-view.d.ts +11 -0
  152. package/dist/app/routes/site-view.js +597 -0
  153. package/dist/app/routes/site-view.js.map +1 -0
  154. package/dist/artifacts-document.js +4 -4
  155. package/dist/artifacts-presentation.js +4 -4
  156. package/dist/artifacts-spreadsheet.js +4 -4
  157. package/dist/artifacts.js +13 -13
  158. package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-VPK3CV2H.js} +7 -5
  159. package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-AMDSW656.js} +5 -5
  160. package/dist/chunk-22GTC4MZ.js +15 -0
  161. package/dist/chunk-22GTC4MZ.js.map +1 -0
  162. package/dist/{chunk-RQDFYQHA.js → chunk-25LWDG5D.js} +6 -6
  163. package/dist/{chunk-U3HSFCON.js → chunk-2CKVVAGP.js} +15 -15
  164. package/dist/{chunk-F6LBGYS6.js → chunk-2DL6NJP5.js} +15 -15
  165. package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
  166. package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
  167. package/dist/chunk-2KO2G3RI.js.map +1 -0
  168. package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
  169. package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
  170. package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
  171. package/dist/{chunk-N3ZP4IDU.js → chunk-45WYYFP6.js} +2 -2
  172. package/dist/{chunk-HOJGAJAB.js → chunk-4MQLGMV2.js} +5 -5
  173. package/dist/{chunk-L7YURQI2.js → chunk-4U4GXWXS.js} +3 -3
  174. package/dist/{chunk-63VGE4OH.js → chunk-5HIOVXOX.js} +3 -3
  175. package/dist/{chunk-GFUUFM2O.js → chunk-5M23GZA2.js} +3 -3
  176. package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
  177. package/dist/chunk-5MJHH72T.js.map +1 -0
  178. package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
  179. package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
  180. package/dist/chunk-5YFY4SFC.js.map +1 -0
  181. package/dist/{chunk-I6VUUEXH.js → chunk-6AFSZKZA.js} +3 -3
  182. package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
  183. package/dist/{chunk-5MZTJMZ3.js → chunk-6MRY2RUZ.js} +13 -7
  184. package/dist/chunk-6MRY2RUZ.js.map +1 -0
  185. package/dist/{chunk-4EONHNJU.js → chunk-6O4VWKSO.js} +2 -2
  186. package/dist/chunk-756MKA2J.js +45 -0
  187. package/dist/chunk-756MKA2J.js.map +1 -0
  188. package/dist/{chunk-BSX2R4CW.js → chunk-767WCGAX.js} +6 -6
  189. package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
  190. package/dist/{chunk-OSVHU2WU.js → chunk-7IYAHFPE.js} +2 -2
  191. package/dist/{chunk-4EAF3HSD.js → chunk-7J7PZB4S.js} +2 -2
  192. package/dist/{chunk-ADJJQSYC.js → chunk-7PUFAH4I.js} +34 -32
  193. package/dist/chunk-7PUFAH4I.js.map +1 -0
  194. package/dist/{chunk-OR37STQZ.js → chunk-7R2JQHBX.js} +3 -3
  195. package/dist/{chunk-QM5H4FPT.js → chunk-7VN6VC3D.js} +3 -3
  196. package/dist/{chunk-HWDGJFM4.js → chunk-A2E3ZF6N.js} +4 -4
  197. package/dist/{chunk-RGW24ZZM.js → chunk-A6CK4ENG.js} +19 -17
  198. package/dist/chunk-A6CK4ENG.js.map +1 -0
  199. package/dist/{chunk-4432A3HQ.js → chunk-A6T4FGE7.js} +4 -4
  200. package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
  201. package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
  202. package/dist/{chunk-46VBQG2D.js → chunk-AOUCHCSB.js} +5 -5
  203. package/dist/{chunk-HDHK3SXK.js → chunk-AT4K4F6S.js} +2 -2
  204. package/dist/{chunk-TQGJN5UZ.js → chunk-AW3QEFOF.js} +140 -522
  205. package/dist/chunk-AW3QEFOF.js.map +1 -0
  206. package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
  207. package/dist/{chunk-HO5Y2OOX.js → chunk-BLPXOHG6.js} +6 -6
  208. package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
  209. package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
  210. package/dist/{chunk-AOLE4IRZ.js → chunk-C535KSTY.js} +2 -2
  211. package/dist/{chunk-IVOA3DXA.js → chunk-CB574ERL.js} +4 -4
  212. package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
  213. package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
  214. package/dist/{chunk-NYZQ7LO7.js → chunk-CDUDKETD.js} +2 -2
  215. package/dist/{chunk-JTN3T4QN.js → chunk-D3RK3NGM.js} +4 -4
  216. package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
  217. package/dist/{chunk-BJIZ7PL7.js → chunk-D64Z4V26.js} +145 -29
  218. package/dist/chunk-D64Z4V26.js.map +1 -0
  219. package/dist/{chunk-XWWXIZFP.js → chunk-DFXZYNTX.js} +7 -7
  220. package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
  221. package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
  222. package/dist/{chunk-KWKGBGAF.js → chunk-DKCX643S.js} +11 -11
  223. package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
  224. package/dist/{chunk-GTQ3SNEI.js → chunk-E36IC3LU.js} +2 -2
  225. package/dist/{chunk-CVG4FILQ.js → chunk-ECHYJP63.js} +253 -1008
  226. package/dist/chunk-ECHYJP63.js.map +1 -0
  227. package/dist/{chunk-Q35DT6I6.js → chunk-EH7TTYE6.js} +179 -170
  228. package/dist/chunk-EH7TTYE6.js.map +1 -0
  229. package/dist/{chunk-72J6C2AJ.js → chunk-EMCB6XKU.js} +2 -2
  230. package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
  231. package/dist/{chunk-AG7VGUIW.js → chunk-ERG355NM.js} +3 -3
  232. package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
  233. package/dist/{chunk-Z5WMLJKI.js → chunk-F2RMKGDQ.js} +89 -1
  234. package/dist/chunk-F2RMKGDQ.js.map +1 -0
  235. package/dist/{chunk-X7L4H4VG.js → chunk-F33EDYS7.js} +524 -426
  236. package/dist/chunk-F33EDYS7.js.map +1 -0
  237. package/dist/{chunk-HTT3FB7T.js → chunk-F3FN6DO6.js} +2 -2
  238. package/dist/{chunk-ST22GONV.js → chunk-FB3B45FP.js} +11 -11
  239. package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
  240. package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
  241. package/dist/{chunk-4VKA5O7T.js → chunk-FVL4B552.js} +9 -9
  242. package/dist/{chunk-VP62LPLW.js → chunk-G2BX56CN.js} +5 -5
  243. package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
  244. package/dist/{chunk-PN66T6JA.js → chunk-GFSOXB2K.js} +2 -2
  245. package/dist/{chunk-S4EZ3JUB.js → chunk-GZGQHQI7.js} +29 -29
  246. package/dist/chunk-H4IE2PYF.js +792 -0
  247. package/dist/chunk-H4IE2PYF.js.map +1 -0
  248. package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
  249. package/dist/chunk-H5M33DAL.js.map +1 -0
  250. package/dist/{chunk-BXRIQZAH.js → chunk-HNNM2GDN.js} +3 -3
  251. package/dist/{chunk-EU6XSQFM.js → chunk-HPB4KSV3.js} +2 -2
  252. package/dist/{chunk-QCD5Y7K5.js → chunk-HSQRYJ4P.js} +5 -5
  253. package/dist/{chunk-YXOKAG66.js → chunk-HUXDGWAN.js} +2 -2
  254. package/dist/{chunk-VUHPA3XQ.js → chunk-I66ZB6KD.js} +3 -3
  255. package/dist/{chunk-7CZTKBTI.js → chunk-IC7KNOBB.js} +5 -5
  256. package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
  257. package/dist/chunk-IECRGM6K.js.map +1 -0
  258. package/dist/{chunk-HGMWMK5K.js → chunk-IIO2MR3B.js} +2 -2
  259. package/dist/chunk-IJYL5BZM.js +38 -0
  260. package/dist/chunk-IJYL5BZM.js.map +1 -0
  261. package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
  262. package/dist/{chunk-O756O2I7.js → chunk-IPPVX5GF.js} +1 -1
  263. package/dist/{chunk-X7ASQHR6.js → chunk-IUK5QGP5.js} +2 -2
  264. package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
  265. package/dist/chunk-JFK7NTEA.js.map +1 -0
  266. package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
  267. package/dist/chunk-JRSNCSZN.js +37 -0
  268. package/dist/chunk-JRSNCSZN.js.map +1 -0
  269. package/dist/{chunk-DDK4WFJ3.js → chunk-JWN7SLTO.js} +9 -9
  270. package/dist/{chunk-Q35YZVDZ.js → chunk-KFWVBTUH.js} +3 -3
  271. package/dist/{chunk-JXT5QDJC.js → chunk-KNFDWNCH.js} +5 -5
  272. package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
  273. package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
  274. package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
  275. package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
  276. package/dist/{chunk-RSNYGEVZ.js → chunk-LKJ2C7PH.js} +8 -8
  277. package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
  278. package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
  279. package/dist/{chunk-GAIM5RNE.js → chunk-MJQBC7C5.js} +3 -3
  280. package/dist/{chunk-NWZW2WHN.js → chunk-MM7OKOTE.js} +6 -6
  281. package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
  282. package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
  283. package/dist/chunk-MVZYNZXE.js.map +1 -0
  284. package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
  285. package/dist/{chunk-XOFUXMPP.js → chunk-ND2WCWXI.js} +4 -4
  286. package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
  287. package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
  288. package/dist/{chunk-OO2T63BY.js → chunk-NML44AW2.js} +2 -2
  289. package/dist/chunk-NQQKOJDI.js +89 -0
  290. package/dist/chunk-NQQKOJDI.js.map +1 -0
  291. package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
  292. package/dist/{chunk-RA3FNMWF.js → chunk-O4DYOSOL.js} +5 -5
  293. package/dist/{chunk-ZKYYZH6L.js → chunk-OFB6TUDC.js} +4 -4
  294. package/dist/{chunk-DWPOQ3S5.js → chunk-OTMWHZBY.js} +2 -2
  295. package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
  296. package/dist/{chunk-WSMYOLHG.js → chunk-PEKPWK5M.js} +2 -2
  297. package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
  298. package/dist/{chunk-KTRKZRID.js → chunk-PKEKZ2VA.js} +5 -5
  299. package/dist/{chunk-6JKZILLF.js → chunk-PMD7V4N7.js} +3 -3
  300. package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
  301. package/dist/{chunk-ZRJCGBVV.js → chunk-PVR5EELP.js} +2 -2
  302. package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
  303. package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
  304. package/dist/{chunk-FLGUVRR7.js → chunk-QBADR2FO.js} +6 -6
  305. package/dist/{chunk-TGVVEGZG.js → chunk-QLIDZGPV.js} +6 -6
  306. package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
  307. package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
  308. package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
  309. package/dist/{chunk-6PQNLL4E.js → chunk-R7XCJWCD.js} +11 -11
  310. package/dist/{chunk-4R3JCVID.js → chunk-RAMZTZOB.js} +360 -103
  311. package/dist/chunk-RAMZTZOB.js.map +1 -0
  312. package/dist/{chunk-QRVNI5V6.js → chunk-SCNEQFIW.js} +3 -3
  313. package/dist/{chunk-BNUPYHHZ.js → chunk-SD4PPZFB.js} +4 -4
  314. package/dist/{chunk-ROQOVH4N.js → chunk-SFAU5R5S.js} +3 -3
  315. package/dist/{chunk-R63QEVPK.js → chunk-SJORXXLV.js} +6 -6
  316. package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
  317. package/dist/{chunk-JRXHSVD5.js → chunk-SOXZ4LGS.js} +68 -11
  318. package/dist/chunk-SOXZ4LGS.js.map +1 -0
  319. package/dist/{chunk-EF5SYXAY.js → chunk-SQDPHCK2.js} +22 -14
  320. package/dist/chunk-SQDPHCK2.js.map +1 -0
  321. package/dist/{chunk-NDF3SH3X.js → chunk-TDIOBPLA.js} +5 -5
  322. package/dist/{chunk-EHCUFCXM.js → chunk-TEPPPAJI.js} +17 -7
  323. package/dist/chunk-TEPPPAJI.js.map +1 -0
  324. package/dist/{chunk-33TPANCR.js → chunk-TFK4KFKA.js} +4 -4
  325. package/dist/{chunk-6NIB2KGJ.js → chunk-THVIT3PW.js} +22 -22
  326. package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
  327. package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
  328. package/dist/{chunk-7DU35P5J.js → chunk-TN5T5HRZ.js} +7 -7
  329. package/dist/{chunk-JK7C5A4I.js → chunk-TR4HIKJ2.js} +8 -8
  330. package/dist/{chunk-HNYJEAES.js → chunk-UGEWCWVV.js} +3 -3
  331. package/dist/chunk-ULYQEFNH.js +529 -0
  332. package/dist/chunk-ULYQEFNH.js.map +1 -0
  333. package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
  334. package/dist/{chunk-AD22P5X3.js → chunk-UUSAOIJR.js} +3 -3
  335. package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
  336. package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
  337. package/dist/chunk-V3K4RQO7.js.map +1 -0
  338. package/dist/{chunk-UP4BE32Y.js → chunk-VO6RVVP7.js} +5 -5
  339. package/dist/{chunk-S4SC5SSV.js → chunk-VPNXQUUS.js} +11 -11
  340. package/dist/{chunk-7BST7BA6.js → chunk-VW3BBTMA.js} +1 -1
  341. package/dist/{chunk-CBY5CXBD.js → chunk-VWSFA4LJ.js} +2 -2
  342. package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
  343. package/dist/chunk-VYKW6TB2.js.map +1 -0
  344. package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
  345. package/dist/{chunk-5JEIDFPD.js → chunk-WBPQ7OPC.js} +1 -1
  346. package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
  347. package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
  348. package/dist/{chunk-DLOYMWUQ.js → chunk-WSLPZ43N.js} +7 -7
  349. package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
  350. package/dist/{chunk-LE2EDBXU.js → chunk-WUHB422G.js} +5 -5
  351. package/dist/{chunk-BJW7G6EF.js → chunk-WVX5AQXS.js} +3 -3
  352. package/dist/{chunk-5POTDNQT.js → chunk-WWOHORRO.js} +3 -3
  353. package/dist/{chunk-4W7VISE7.js → chunk-WYDZP5F2.js} +93 -94
  354. package/dist/chunk-WYDZP5F2.js.map +1 -0
  355. package/dist/{chunk-KZHW27BV.js → chunk-WYEPUXGL.js} +2 -2
  356. package/dist/{chunk-GALB2G3W.js → chunk-X2AH4DRF.js} +2 -2
  357. package/dist/{chunk-NCX5SAQY.js → chunk-XN6CALYY.js} +9 -9
  358. package/dist/{chunk-SUVEDKE2.js → chunk-XNACICAB.js} +3 -3
  359. package/dist/{chunk-FDNJVZRE.js → chunk-XU4I47IP.js} +4 -4
  360. package/dist/chunk-XV6ZYRHK.js +59 -0
  361. package/dist/chunk-XV6ZYRHK.js.map +1 -0
  362. package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
  363. package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
  364. package/dist/{chunk-U36PO27Q.js → chunk-YG3IJCM2.js} +3 -3
  365. package/dist/{chunk-UWJ5P5CU.js → chunk-YGSJWWT3.js} +3 -3
  366. package/dist/{chunk-APU42QDI.js → chunk-YO64YVYL.js} +105 -101
  367. package/dist/chunk-YO64YVYL.js.map +1 -0
  368. package/dist/{chunk-P5WABK2H.js → chunk-Z4GJB24B.js} +2 -2
  369. package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
  370. package/dist/{chunk-OBQVTCTW.js → chunk-ZX5H7LWD.js} +2 -2
  371. package/dist/components/browser-viewer.d.ts +1 -1
  372. package/dist/composer.js +8 -8
  373. package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-VA5JONUH.js} +6 -6
  374. package/dist/connect.js +7 -7
  375. package/dist/desktop.js +2 -2
  376. package/dist/editor.js +2 -2
  377. package/dist/{embedded-new-voice-LFHWWYD2.js → embedded-new-voice-6BILAOUG.js} +6 -6
  378. package/dist/{embedded-voice-6QS4ANNX.js → embedded-voice-UDE4JRKB.js} +6 -6
  379. package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
  380. package/dist/hooks/internal.d.ts +38 -0
  381. package/dist/hooks/use-client-config-flags.d.ts +12 -0
  382. package/dist/hooks/use-workspace-sessions.d.ts +10 -1
  383. package/dist/index.js +86 -80
  384. package/dist/interaction.js +8 -6
  385. package/dist/interaction.js.map +1 -1
  386. package/dist/{latest-question-AW3PPDUM.js → latest-question-4WDBECXB.js} +4 -3
  387. package/dist/{latest-question-AW3PPDUM.js.map → latest-question-4WDBECXB.js.map} +1 -1
  388. package/dist/machines.js +4 -4
  389. package/dist/messages/en.d.ts +3 -3
  390. package/dist/messages.js +1 -1
  391. package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-NRTO6FRP.js} +4 -4
  392. package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
  393. package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-H4XSNHZE.js} +8 -6
  394. package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-H4XSNHZE.js.map} +1 -1
  395. package/dist/realtime.js +5 -5
  396. package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-IEHODU35.js} +9 -9
  397. package/dist/sandbox-files-IEHODU35.js.map +1 -0
  398. package/dist/session-app.js +198 -192
  399. package/dist/session-list-model.d.ts +1 -0
  400. package/dist/session-list-model.js +7 -1
  401. package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
  402. package/dist/session-realtime-JNKDSGH7.js.map +1 -0
  403. package/dist/session-realtime.js +2 -2
  404. package/dist/session-ui.js +48 -43
  405. package/dist/session.js +20 -18
  406. package/dist/sites.js +2 -2
  407. package/dist/terminal.js +2 -2
  408. package/dist/this-computer.js +3 -3
  409. package/dist/timeline/invoked-tool.d.ts +5 -0
  410. package/dist/timeline/tool-display-name.d.ts +2 -2
  411. package/dist/timeline/tool-icon.d.ts +14 -0
  412. package/dist/timeline/tool-presentation.d.ts +8 -3
  413. package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-ZSOFW7PG.js} +2 -2
  414. package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-YWV2UC34.js} +2 -2
  415. package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-ZWQVX2HI.js} +3 -3
  416. package/dist/timeline-model.js +16 -14
  417. package/dist/ui/access-list.js +7 -7
  418. package/dist/ui/cadence-picker.js +2 -2
  419. package/dist/ui/list-row.js +3 -3
  420. package/dist/ui/revision-history.js +2 -2
  421. package/dist/ui/role-select.js +3 -3
  422. package/dist/ui/select-menu.js +2 -2
  423. package/dist/usage.js +3 -3
  424. package/dist/workbench.js +4 -4
  425. package/package.json +4 -4
  426. package/src/app/app-state.tsx +3 -1
  427. package/src/app/components/capabilities/session-machine-card.tsx +9 -2
  428. package/src/app/components/rail/session-list.tsx +254 -44
  429. package/src/app/components/rail/session-row-content.tsx +24 -2
  430. package/src/app/components/rail/session-shell.tsx +14 -9
  431. package/src/app/components/rail/site-session-group-heading.tsx +59 -20
  432. package/src/app/components/session/session-tenancy-control.tsx +18 -0
  433. package/src/app/components/session/site-origin-link.test.tsx +73 -0
  434. package/src/app/components/session/site-origin-link.tsx +4 -2
  435. package/src/app/embed/memory-navigation.tsx +1 -0
  436. package/src/app/lib/actions/held-modifier.test.ts +101 -0
  437. package/src/app/lib/actions/held-modifier.ts +108 -0
  438. package/src/app/lib/console-site.tsx +38 -0
  439. package/src/app/lib/navigation.tsx +4 -0
  440. package/src/app/lib/routes.tsx +42 -0
  441. package/src/app/lib/session-failure-toasts.ts +26 -0
  442. package/src/app/lib/session-ui-features.tsx +18 -4
  443. package/src/app/lib/sessions-group.tsx +219 -30
  444. package/src/app/lib/site-opened.tsx +48 -0
  445. package/src/app/lib/site-session-groups.test.ts +173 -6
  446. package/src/app/lib/site-view-routes.test.ts +55 -0
  447. package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
  448. package/src/app/routes/artifacts.tsx +2 -29
  449. package/src/app/routes/session-transient-failures.test.tsx +343 -0
  450. package/src/app/routes/session-unavailable.tsx +74 -3
  451. package/src/app/routes/session.tsx +4 -13
  452. package/src/app/routes/sessions-index.tsx +13 -9
  453. package/src/app/routes/site-view.test.tsx +476 -0
  454. package/src/app/routes/site-view.tsx +583 -0
  455. package/src/components/browser-viewer.tsx +16 -2
  456. package/src/hooks/internal.ts +129 -6
  457. package/src/hooks/use-client-config-flags.ts +8 -0
  458. package/src/hooks/use-session-events.ts +83 -9
  459. package/src/hooks/use-workspace-sessions.ts +21 -1
  460. package/src/messages/en.ts +3 -3
  461. package/src/session-list-model.ts +4 -0
  462. package/src/timeline/activity-rail.tsx +3 -2
  463. package/src/timeline/invoked-tool.ts +14 -4
  464. package/src/timeline/projection.ts +11 -6
  465. package/src/timeline/rolling-activity.tsx +6 -2
  466. package/src/timeline/tool-display-name.ts +2 -2
  467. package/src/timeline/tool-icon.tsx +165 -0
  468. package/src/timeline/tool-presentation.ts +207 -48
  469. package/src/timeline/tool-renderers.tsx +1 -70
  470. package/styles/compiled.css +38 -0
  471. package/dist/chunk-22ZBT6CN.js +0 -50
  472. package/dist/chunk-22ZBT6CN.js.map +0 -1
  473. package/dist/chunk-4R3JCVID.js.map +0 -1
  474. package/dist/chunk-4W7VISE7.js.map +0 -1
  475. package/dist/chunk-5JZYPZ72.js.map +0 -1
  476. package/dist/chunk-5MZTJMZ3.js.map +0 -1
  477. package/dist/chunk-6W3LF3DB.js.map +0 -1
  478. package/dist/chunk-ADJJQSYC.js.map +0 -1
  479. package/dist/chunk-APU42QDI.js.map +0 -1
  480. package/dist/chunk-BJIZ7PL7.js.map +0 -1
  481. package/dist/chunk-CVG4FILQ.js.map +0 -1
  482. package/dist/chunk-EF5SYXAY.js.map +0 -1
  483. package/dist/chunk-EHCUFCXM.js.map +0 -1
  484. package/dist/chunk-GZ64CASI.js.map +0 -1
  485. package/dist/chunk-JRXHSVD5.js.map +0 -1
  486. package/dist/chunk-KF3MF6FP.js.map +0 -1
  487. package/dist/chunk-MYNUBDU7.js.map +0 -1
  488. package/dist/chunk-NAWXARTY.js.map +0 -1
  489. package/dist/chunk-PM3OSANE.js.map +0 -1
  490. package/dist/chunk-Q35DT6I6.js.map +0 -1
  491. package/dist/chunk-R25ZKOZR.js +0 -24
  492. package/dist/chunk-R25ZKOZR.js.map +0 -1
  493. package/dist/chunk-RGPYMHKI.js.map +0 -1
  494. package/dist/chunk-RGW24ZZM.js.map +0 -1
  495. package/dist/chunk-TQGJN5UZ.js.map +0 -1
  496. package/dist/chunk-X7L4H4VG.js.map +0 -1
  497. package/dist/chunk-XFNLU7EW.js.map +0 -1
  498. package/dist/chunk-Z5WMLJKI.js.map +0 -1
  499. /package/dist/{browser-viewer-RYYQSRTC.js.map → app/lib/console-site.js.map} +0 -0
  500. /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/site-opened.js.map} +0 -0
  501. /package/dist/{computer-viewer-KEDVLD42.js.map → browser-viewer-VPK3CV2H.js.map} +0 -0
  502. /package/dist/{embedded-new-voice-LFHWWYD2.js.map → chat-interactive-block-AMDSW656.js.map} +0 -0
  503. /package/dist/{chunk-RQDFYQHA.js.map → chunk-25LWDG5D.js.map} +0 -0
  504. /package/dist/{chunk-U3HSFCON.js.map → chunk-2CKVVAGP.js.map} +0 -0
  505. /package/dist/{chunk-F6LBGYS6.js.map → chunk-2DL6NJP5.js.map} +0 -0
  506. /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
  507. /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
  508. /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
  509. /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
  510. /package/dist/{chunk-N3ZP4IDU.js.map → chunk-45WYYFP6.js.map} +0 -0
  511. /package/dist/{chunk-HOJGAJAB.js.map → chunk-4MQLGMV2.js.map} +0 -0
  512. /package/dist/{chunk-L7YURQI2.js.map → chunk-4U4GXWXS.js.map} +0 -0
  513. /package/dist/{chunk-63VGE4OH.js.map → chunk-5HIOVXOX.js.map} +0 -0
  514. /package/dist/{chunk-GFUUFM2O.js.map → chunk-5M23GZA2.js.map} +0 -0
  515. /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
  516. /package/dist/{chunk-I6VUUEXH.js.map → chunk-6AFSZKZA.js.map} +0 -0
  517. /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
  518. /package/dist/{chunk-4EONHNJU.js.map → chunk-6O4VWKSO.js.map} +0 -0
  519. /package/dist/{chunk-BSX2R4CW.js.map → chunk-767WCGAX.js.map} +0 -0
  520. /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
  521. /package/dist/{chunk-OSVHU2WU.js.map → chunk-7IYAHFPE.js.map} +0 -0
  522. /package/dist/{chunk-4EAF3HSD.js.map → chunk-7J7PZB4S.js.map} +0 -0
  523. /package/dist/{chunk-OR37STQZ.js.map → chunk-7R2JQHBX.js.map} +0 -0
  524. /package/dist/{chunk-QM5H4FPT.js.map → chunk-7VN6VC3D.js.map} +0 -0
  525. /package/dist/{chunk-HWDGJFM4.js.map → chunk-A2E3ZF6N.js.map} +0 -0
  526. /package/dist/{chunk-4432A3HQ.js.map → chunk-A6T4FGE7.js.map} +0 -0
  527. /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
  528. /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
  529. /package/dist/{chunk-46VBQG2D.js.map → chunk-AOUCHCSB.js.map} +0 -0
  530. /package/dist/{chunk-HDHK3SXK.js.map → chunk-AT4K4F6S.js.map} +0 -0
  531. /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
  532. /package/dist/{chunk-HO5Y2OOX.js.map → chunk-BLPXOHG6.js.map} +0 -0
  533. /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
  534. /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
  535. /package/dist/{chunk-AOLE4IRZ.js.map → chunk-C535KSTY.js.map} +0 -0
  536. /package/dist/{chunk-IVOA3DXA.js.map → chunk-CB574ERL.js.map} +0 -0
  537. /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
  538. /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
  539. /package/dist/{chunk-NYZQ7LO7.js.map → chunk-CDUDKETD.js.map} +0 -0
  540. /package/dist/{chunk-JTN3T4QN.js.map → chunk-D3RK3NGM.js.map} +0 -0
  541. /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
  542. /package/dist/{chunk-XWWXIZFP.js.map → chunk-DFXZYNTX.js.map} +0 -0
  543. /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
  544. /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
  545. /package/dist/{chunk-KWKGBGAF.js.map → chunk-DKCX643S.js.map} +0 -0
  546. /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
  547. /package/dist/{chunk-GTQ3SNEI.js.map → chunk-E36IC3LU.js.map} +0 -0
  548. /package/dist/{chunk-72J6C2AJ.js.map → chunk-EMCB6XKU.js.map} +0 -0
  549. /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
  550. /package/dist/{chunk-AG7VGUIW.js.map → chunk-ERG355NM.js.map} +0 -0
  551. /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
  552. /package/dist/{chunk-HTT3FB7T.js.map → chunk-F3FN6DO6.js.map} +0 -0
  553. /package/dist/{chunk-ST22GONV.js.map → chunk-FB3B45FP.js.map} +0 -0
  554. /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
  555. /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
  556. /package/dist/{chunk-4VKA5O7T.js.map → chunk-FVL4B552.js.map} +0 -0
  557. /package/dist/{chunk-VP62LPLW.js.map → chunk-G2BX56CN.js.map} +0 -0
  558. /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
  559. /package/dist/{chunk-PN66T6JA.js.map → chunk-GFSOXB2K.js.map} +0 -0
  560. /package/dist/{chunk-S4EZ3JUB.js.map → chunk-GZGQHQI7.js.map} +0 -0
  561. /package/dist/{chunk-BXRIQZAH.js.map → chunk-HNNM2GDN.js.map} +0 -0
  562. /package/dist/{chunk-EU6XSQFM.js.map → chunk-HPB4KSV3.js.map} +0 -0
  563. /package/dist/{chunk-QCD5Y7K5.js.map → chunk-HSQRYJ4P.js.map} +0 -0
  564. /package/dist/{chunk-YXOKAG66.js.map → chunk-HUXDGWAN.js.map} +0 -0
  565. /package/dist/{chunk-VUHPA3XQ.js.map → chunk-I66ZB6KD.js.map} +0 -0
  566. /package/dist/{chunk-7CZTKBTI.js.map → chunk-IC7KNOBB.js.map} +0 -0
  567. /package/dist/{chunk-HGMWMK5K.js.map → chunk-IIO2MR3B.js.map} +0 -0
  568. /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
  569. /package/dist/{chunk-O756O2I7.js.map → chunk-IPPVX5GF.js.map} +0 -0
  570. /package/dist/{chunk-X7ASQHR6.js.map → chunk-IUK5QGP5.js.map} +0 -0
  571. /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
  572. /package/dist/{chunk-DDK4WFJ3.js.map → chunk-JWN7SLTO.js.map} +0 -0
  573. /package/dist/{chunk-Q35YZVDZ.js.map → chunk-KFWVBTUH.js.map} +0 -0
  574. /package/dist/{chunk-JXT5QDJC.js.map → chunk-KNFDWNCH.js.map} +0 -0
  575. /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
  576. /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
  577. /package/dist/{chunk-RSNYGEVZ.js.map → chunk-LKJ2C7PH.js.map} +0 -0
  578. /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
  579. /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
  580. /package/dist/{chunk-GAIM5RNE.js.map → chunk-MJQBC7C5.js.map} +0 -0
  581. /package/dist/{chunk-NWZW2WHN.js.map → chunk-MM7OKOTE.js.map} +0 -0
  582. /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
  583. /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
  584. /package/dist/{chunk-XOFUXMPP.js.map → chunk-ND2WCWXI.js.map} +0 -0
  585. /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
  586. /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
  587. /package/dist/{chunk-OO2T63BY.js.map → chunk-NML44AW2.js.map} +0 -0
  588. /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
  589. /package/dist/{chunk-RA3FNMWF.js.map → chunk-O4DYOSOL.js.map} +0 -0
  590. /package/dist/{chunk-ZKYYZH6L.js.map → chunk-OFB6TUDC.js.map} +0 -0
  591. /package/dist/{chunk-DWPOQ3S5.js.map → chunk-OTMWHZBY.js.map} +0 -0
  592. /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
  593. /package/dist/{chunk-WSMYOLHG.js.map → chunk-PEKPWK5M.js.map} +0 -0
  594. /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
  595. /package/dist/{chunk-KTRKZRID.js.map → chunk-PKEKZ2VA.js.map} +0 -0
  596. /package/dist/{chunk-6JKZILLF.js.map → chunk-PMD7V4N7.js.map} +0 -0
  597. /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
  598. /package/dist/{chunk-ZRJCGBVV.js.map → chunk-PVR5EELP.js.map} +0 -0
  599. /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
  600. /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
  601. /package/dist/{chunk-FLGUVRR7.js.map → chunk-QBADR2FO.js.map} +0 -0
  602. /package/dist/{chunk-TGVVEGZG.js.map → chunk-QLIDZGPV.js.map} +0 -0
  603. /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
  604. /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
  605. /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
  606. /package/dist/{chunk-6PQNLL4E.js.map → chunk-R7XCJWCD.js.map} +0 -0
  607. /package/dist/{chunk-QRVNI5V6.js.map → chunk-SCNEQFIW.js.map} +0 -0
  608. /package/dist/{chunk-BNUPYHHZ.js.map → chunk-SD4PPZFB.js.map} +0 -0
  609. /package/dist/{chunk-ROQOVH4N.js.map → chunk-SFAU5R5S.js.map} +0 -0
  610. /package/dist/{chunk-R63QEVPK.js.map → chunk-SJORXXLV.js.map} +0 -0
  611. /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
  612. /package/dist/{chunk-NDF3SH3X.js.map → chunk-TDIOBPLA.js.map} +0 -0
  613. /package/dist/{chunk-33TPANCR.js.map → chunk-TFK4KFKA.js.map} +0 -0
  614. /package/dist/{chunk-6NIB2KGJ.js.map → chunk-THVIT3PW.js.map} +0 -0
  615. /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
  616. /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
  617. /package/dist/{chunk-7DU35P5J.js.map → chunk-TN5T5HRZ.js.map} +0 -0
  618. /package/dist/{chunk-JK7C5A4I.js.map → chunk-TR4HIKJ2.js.map} +0 -0
  619. /package/dist/{chunk-HNYJEAES.js.map → chunk-UGEWCWVV.js.map} +0 -0
  620. /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
  621. /package/dist/{chunk-AD22P5X3.js.map → chunk-UUSAOIJR.js.map} +0 -0
  622. /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
  623. /package/dist/{chunk-UP4BE32Y.js.map → chunk-VO6RVVP7.js.map} +0 -0
  624. /package/dist/{chunk-S4SC5SSV.js.map → chunk-VPNXQUUS.js.map} +0 -0
  625. /package/dist/{chunk-7BST7BA6.js.map → chunk-VW3BBTMA.js.map} +0 -0
  626. /package/dist/{chunk-CBY5CXBD.js.map → chunk-VWSFA4LJ.js.map} +0 -0
  627. /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
  628. /package/dist/{chunk-5JEIDFPD.js.map → chunk-WBPQ7OPC.js.map} +0 -0
  629. /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
  630. /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
  631. /package/dist/{chunk-DLOYMWUQ.js.map → chunk-WSLPZ43N.js.map} +0 -0
  632. /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
  633. /package/dist/{chunk-LE2EDBXU.js.map → chunk-WUHB422G.js.map} +0 -0
  634. /package/dist/{chunk-BJW7G6EF.js.map → chunk-WVX5AQXS.js.map} +0 -0
  635. /package/dist/{chunk-5POTDNQT.js.map → chunk-WWOHORRO.js.map} +0 -0
  636. /package/dist/{chunk-KZHW27BV.js.map → chunk-WYEPUXGL.js.map} +0 -0
  637. /package/dist/{chunk-GALB2G3W.js.map → chunk-X2AH4DRF.js.map} +0 -0
  638. /package/dist/{chunk-NCX5SAQY.js.map → chunk-XN6CALYY.js.map} +0 -0
  639. /package/dist/{chunk-SUVEDKE2.js.map → chunk-XNACICAB.js.map} +0 -0
  640. /package/dist/{chunk-FDNJVZRE.js.map → chunk-XU4I47IP.js.map} +0 -0
  641. /package/dist/{chunk-U36PO27Q.js.map → chunk-YG3IJCM2.js.map} +0 -0
  642. /package/dist/{chunk-UWJ5P5CU.js.map → chunk-YGSJWWT3.js.map} +0 -0
  643. /package/dist/{chunk-P5WABK2H.js.map → chunk-Z4GJB24B.js.map} +0 -0
  644. /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
  645. /package/dist/{chunk-OBQVTCTW.js.map → chunk-ZX5H7LWD.js.map} +0 -0
  646. /package/dist/{embedded-voice-6QS4ANNX.js.map → computer-viewer-VA5JONUH.js.map} +0 -0
  647. /package/dist/{model-policy-picker-menu-CURJ247L.js.map → embedded-new-voice-6BILAOUG.js.map} +0 -0
  648. /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-voice-UDE4JRKB.js.map} +0 -0
  649. /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
  650. /package/dist/{session-realtime-2XIB254N.js.map → model-policy-picker-menu-NRTO6FRP.js.map} +0 -0
  651. /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
  652. /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-ZSOFW7PG.js.map} +0 -0
  653. /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-YWV2UC34.js.map} +0 -0
  654. /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-ZWQVX2HI.js.map} +0 -0
@@ -3,10 +3,6 @@ import {
3
3
  ModelContextInspectorPane
4
4
  } from "../../../chunk-SD2K5ZN5.js";
5
5
  import "../../../chunk-7OQZ2F3U.js";
6
- import {
7
- PreferenceToggleRow
8
- } from "../../../chunk-DWPOQ3S5.js";
9
- import "../../../chunk-GALB2G3W.js";
10
6
  import {
11
7
  withOccurrenceKeys
12
8
  } from "../../../chunk-ZYPF22ZI.js";
@@ -17,6 +13,10 @@ import {
17
13
  import {
18
14
  classifySessionTenancyFailure
19
15
  } from "../../../chunk-ENGJ3OT6.js";
16
+ import {
17
+ PreferenceToggleRow
18
+ } from "../../../chunk-OTMWHZBY.js";
19
+ import "../../../chunk-X2AH4DRF.js";
20
20
  import {
21
21
  Tabs,
22
22
  TabsContent,
@@ -29,30 +29,30 @@ import {
29
29
  import {
30
30
  Select
31
31
  } from "../../../chunk-IANYC4M4.js";
32
- import "../../../chunk-33TPANCR.js";
33
- import "../../../chunk-46VBQG2D.js";
32
+ import "../../../chunk-TFK4KFKA.js";
33
+ import "../../../chunk-AOUCHCSB.js";
34
34
  import {
35
35
  eventDisplayLabel,
36
36
  isTerminalSessionStatus
37
- } from "../../../chunk-63VGE4OH.js";
37
+ } from "../../../chunk-5HIOVXOX.js";
38
38
  import "../../../chunk-IIFO2H3P.js";
39
39
  import "../../../chunk-Z2S5VQG7.js";
40
+ import "../../../chunk-J4OPEWC3.js";
40
41
  import {
41
42
  useWorkspaceRigs
42
- } from "../../../chunk-PIVGX42P.js";
43
- import "../../../chunk-J4OPEWC3.js";
43
+ } from "../../../chunk-JNY5MT3I.js";
44
44
  import {
45
45
  useWorkspaceMachines
46
- } from "../../../chunk-722UO6YQ.js";
47
- import {
48
- formatTimestamp
49
- } from "../../../chunk-5TLEWXAB.js";
46
+ } from "../../../chunk-3PEXVG4D.js";
50
47
  import {
51
48
  ConnectionPill,
52
49
  CopyableMono,
53
50
  InfoRow,
54
51
  InspectorSection
55
52
  } from "../../../chunk-G46333YC.js";
53
+ import {
54
+ formatTimestamp
55
+ } from "../../../chunk-5TLEWXAB.js";
56
56
  import "../../../chunk-A3MTTRCX.js";
57
57
  import "../../../chunk-ECNX3UOI.js";
58
58
  import "../../../chunk-IZMUUUYD.js";
@@ -65,7 +65,7 @@ import "../../../chunk-O2LGEYG4.js";
65
65
  import "../../../chunk-XSOPQZGH.js";
66
66
  import {
67
67
  t
68
- } from "../../../chunk-HPPKLBTJ.js";
68
+ } from "../../../chunk-TJQDL3JH.js";
69
69
  import {
70
70
  repositoryDisplayName
71
71
  } from "../../../chunk-L6Y4ALSM.js";
@@ -76,116 +76,120 @@ import {
76
76
  } from "../../../chunk-YG6NARQY.js";
77
77
  import {
78
78
  useNavigate
79
- } from "../../../chunk-MYNUBDU7.js";
79
+ } from "../../../chunk-VYKW6TB2.js";
80
80
  import "../../../chunk-IZUAIHR4.js";
81
81
  import "../../../chunk-L4OF77LE.js";
82
82
  import {
83
83
  useAppContext
84
84
  } from "../../../chunk-W6KAUGXO.js";
85
- import "../../../chunk-TREHTIBD.js";
86
- import "../../../chunk-5OTQA7CM.js";
87
85
  import "../../../chunk-XNTW77T6.js";
88
86
  import "../../../chunk-KS57MLGE.js";
87
+ import "../../../chunk-TREHTIBD.js";
88
+ import "../../../chunk-5OTQA7CM.js";
89
89
  import "../../../chunk-A3KMTJZS.js";
90
- import "../../../chunk-LVONK3YQ.js";
91
- import "../../../chunk-2DS4UOYQ.js";
90
+ import "../../../chunk-QRKTESVE.js";
91
+ import "../../../chunk-WSZQNTVN.js";
92
92
  import "../../../chunk-UBK725RK.js";
93
- import "../../../chunk-VUHPA3XQ.js";
93
+ import "../../../chunk-I66ZB6KD.js";
94
94
  import "../../../chunk-WLEDGIVS.js";
95
95
  import {
96
96
  Button
97
97
  } from "../../../chunk-HMU5IELG.js";
98
- import "../../../chunk-FM4OUCC2.js";
98
+ import "../../../chunk-MOKYT3X3.js";
99
99
  import {
100
100
  StartupTimings
101
- } from "../../../chunk-CVG4FILQ.js";
102
- import "../../../chunk-6W3LF3DB.js";
103
- import "../../../chunk-P5T36BA3.js";
104
- import "../../../chunk-L7YURQI2.js";
105
- import "../../../chunk-KDQAWRYZ.js";
101
+ } from "../../../chunk-H4IE2PYF.js";
102
+ import "../../../chunk-5YFY4SFC.js";
103
+ import "../../../chunk-V3K4RQO7.js";
104
+ import "../../../chunk-ECHYJP63.js";
105
+ import "../../../chunk-22GTC4MZ.js";
106
106
  import {
107
107
  SessionStatus
108
- } from "../../../chunk-3AA6RNGE.js";
109
- import "../../../chunk-RGPYMHKI.js";
110
- import "../../../chunk-AD22P5X3.js";
111
- import "../../../chunk-BNUPYHHZ.js";
112
- import "../../../chunk-RIMKJBCD.js";
113
- import "../../../chunk-XWWXIZFP.js";
108
+ } from "../../../chunk-ENS6E4RZ.js";
109
+ import "../../../chunk-FRP64DEK.js";
110
+ import "../../../chunk-4U4GXWXS.js";
111
+ import "../../../chunk-KDQAWRYZ.js";
112
+ import "../../../chunk-DFXZYNTX.js";
114
113
  import {
115
114
  setStartupDetails,
116
115
  useStartupDetails
117
- } from "../../../chunk-X7L4H4VG.js";
116
+ } from "../../../chunk-F33EDYS7.js";
118
117
  import "../../../chunk-B27E3V37.js";
119
- import "../../../chunk-3KVWXKD6.js";
120
- import "../../../chunk-4W7VISE7.js";
121
- import "../../../chunk-TWXIFWBD.js";
118
+ import "../../../chunk-UUSAOIJR.js";
119
+ import "../../../chunk-SD4PPZFB.js";
120
+ import "../../../chunk-LMPTC4CX.js";
121
+ import "../../../chunk-LQ47YL6E.js";
122
+ import "../../../chunk-WYDZP5F2.js";
122
123
  import "../../../chunk-EMIVOS73.js";
123
- import "../../../chunk-I6FIXEL4.js";
124
+ import "../../../chunk-34EU25RL.js";
124
125
  import "../../../chunk-CPLCSM6K.js";
125
126
  import "../../../chunk-UD2PSIIX.js";
126
127
  import {
127
128
  buildTimeline
128
- } from "../../../chunk-5MZTJMZ3.js";
129
+ } from "../../../chunk-6MRY2RUZ.js";
130
+ import "../../../chunk-I6FIXEL4.js";
129
131
  import "../../../chunk-ZOARMQY2.js";
130
- import "../../../chunk-JKUICTLM.js";
131
- import "../../../chunk-IGVL3ELX.js";
132
+ import "../../../chunk-NLAFNMPK.js";
132
133
  import {
133
134
  MACHINES_SESSION_POLL_MS
134
- } from "../../../chunk-HT5WSUC7.js";
135
+ } from "../../../chunk-QXEDIDBZ.js";
135
136
  import "../../../chunk-MK2TQO4Y.js";
136
- import "../../../chunk-R63QEVPK.js";
137
+ import "../../../chunk-SJORXXLV.js";
137
138
  import "../../../chunk-OYQQJL3J.js";
138
- import "../../../chunk-H3LIIAGE.js";
139
139
  import "../../../chunk-RZLBICR5.js";
140
+ import "../../../chunk-H3LIIAGE.js";
140
141
  import "../../../chunk-VHB3E6PT.js";
141
142
  import "../../../chunk-7N5AD2TC.js";
142
143
  import "../../../chunk-4U7SHFQ2.js";
143
- import "../../../chunk-ZOC3OP6F.js";
144
- import "../../../chunk-4LKNIGHB.js";
144
+ import "../../../chunk-CCR33J7L.js";
145
+ import "../../../chunk-O2SBHS2N.js";
145
146
  import "../../../chunk-C5ZCSVZ7.js";
146
147
  import {
147
148
  sessionSandboxLabel
148
149
  } from "../../../chunk-BOG2FED3.js";
149
150
  import "../../../chunk-YSRBFJMQ.js";
150
- import "../../../chunk-I6VUUEXH.js";
151
- import "../../../chunk-LJUMYUBO.js";
152
- import "../../../chunk-TQGJN5UZ.js";
151
+ import "../../../chunk-6AFSZKZA.js";
152
+ import "../../../chunk-AW3QEFOF.js";
153
153
  import "../../../chunk-HEVQKE27.js";
154
- import "../../../chunk-ANHUMDJX.js";
154
+ import "../../../chunk-LJUMYUBO.js";
155
+ import "../../../chunk-WNDTLK44.js";
155
156
  import "../../../chunk-IZV5FTJC.js";
156
- import "../../../chunk-STUCI6QA.js";
157
+ import "../../../chunk-ULYQEFNH.js";
158
+ import "../../../chunk-LEKBNKLD.js";
157
159
  import "../../../chunk-DNJ23AWQ.js";
158
160
  import "../../../chunk-OB3YGXHQ.js";
159
161
  import "../../../chunk-DHXKEJBH.js";
160
162
  import "../../../chunk-UNJPZGNK.js";
163
+ import "../../../chunk-XV6ZYRHK.js";
164
+ import "../../../chunk-IGVL3ELX.js";
161
165
  import "../../../chunk-PEHTX3V7.js";
162
166
  import "../../../chunk-NRP4REXE.js";
163
- import "../../../chunk-FDNJVZRE.js";
167
+ import "../../../chunk-XU4I47IP.js";
164
168
  import "../../../chunk-3IWPC6O3.js";
165
- import "../../../chunk-GNEHAPKV.js";
169
+ import "../../../chunk-DJFTH2DI.js";
166
170
  import "../../../chunk-7RRMTSCI.js";
167
- import "../../../chunk-6F34IWSA.js";
168
- import "../../../chunk-AG7VGUIW.js";
171
+ import "../../../chunk-ERG355NM.js";
169
172
  import "../../../chunk-PNNTR6KP.js";
170
173
  import {
171
174
  ModelName
172
175
  } from "../../../chunk-WJPMYXKZ.js";
173
176
  import "../../../chunk-VYT4POBH.js";
177
+ import "../../../chunk-6F34IWSA.js";
174
178
  import "../../../chunk-IQ64BNAG.js";
175
- import "../../../chunk-OBQVTCTW.js";
179
+ import "../../../chunk-ZX5H7LWD.js";
176
180
  import "../../../chunk-J3BHDXQQ.js";
177
181
  import {
178
182
  labelReasoningEffort
179
183
  } from "../../../chunk-CFEFYPNR.js";
180
184
  import "../../../chunk-N7S72EXK.js";
181
185
  import "../../../chunk-XEA5BCMA.js";
182
- import "../../../chunk-NAWXARTY.js";
186
+ import "../../../chunk-2KO2G3RI.js";
183
187
  import "../../../chunk-CM7LVUKC.js";
184
188
  import "../../../chunk-TVQCDDSZ.js";
185
189
  import "../../../chunk-SJGAHTY5.js";
186
190
  import "../../../chunk-4NHJ6EXL.js";
187
191
  import "../../../chunk-TXS65BB2.js";
188
- import "../../../chunk-5JZYPZ72.js";
192
+ import "../../../chunk-JFK7NTEA.js";
189
193
 
190
194
  // src/app/components/session/inspector.tsx
191
195
  import { CopyIcon, FileJsonIcon, Loader2Icon, RotateCcwIcon } from "lucide-react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/components/session/inspector.tsx"],"sourcesContent":["import { t } from \"../../lib/console-text\";\nimport { useWorkspaceRigs } from \"../../lib/use-workspace-rigs\";\nimport { useWorkspaceMachines } from \"../../lib/use-workspace-machines\";\nimport { StartupTimings, useStartupDetails, setStartupDetails } from \"../../../session-ui\";\nimport { buildTimeline } from \"../../../timeline\";\nimport { labelReasoningEffort } from \"../../../model-policy\";\nimport { ModelName } from \"../../../components/model-mark\";\nimport { PreferenceToggleRow } from \"../transcription-settings\";\nimport { SessionStatus as SessionStatusBadge } from \"../../../components/session-status\";\nimport type { SessionEventsConnectionState } from \"../../../hooks/use-session-events\";\nimport { MACHINES_SESSION_POLL_MS } from \"../../../machines\";\nimport { useNavigate } from \"../../lib/navigation\";\nimport { CopyIcon, FileJsonIcon, Loader2Icon, RotateCcwIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { toast } from \"../../lib/toast\";\n\nimport { ConnectionPill, CopyableMono, InfoRow, InspectorSection } from \"../common\";\nimport { ModelContextInspectorPane } from \"./model-context-inspector\";\nimport { sessionSandboxLabel } from \"./sandbox-switcher\";\nimport { Button } from \"../../../ui/button\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../../ui/collapsible\";\nimport { ScrollArea } from \"../../../ui/scroll-area\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../../ui/tabs\";\nimport { Select } from \"../../../ui/select\";\nimport { useAppContext } from \"../../app-context\";\nimport { eventDisplayLabel, isTerminalSessionStatus } from \"../../lib/events\";\nimport { formatTimestamp } from \"../../lib/format\";\nimport { withOccurrenceKeys } from \"../../lib/react-key\";\nimport {\n retainSessionRestartAttemptAfterFailure,\n sessionRestartOperationController,\n} from \"../../lib/session-restart-operation-controller\";\nimport { classifySessionTenancyFailure } from \"../../lib/session-tenancy\";\nimport { repositoryDisplayName } from \"../../lib/session-tools\";\nimport type { Session, SessionEvent } from \"../../types\";\n\nexport function SessionInspector(props: {\n session: Session;\n events: SessionEvent[];\n connectionState: SessionEventsConnectionState;\n onReloadSession: () => Promise<void>;\n}) {\n const startupDetails = useStartupDetails();\n const startupPhases = useMemo(\n () => buildTimeline(t, props.events).filter((item) => item.kind === \"startup-phase\"),\n [props.events],\n );\n const context = useAppContext();\n const navigate = useNavigate();\n const rigs = useWorkspaceRigs({ workspaceId: props.session.workspaceId });\n const [selectedRigId, setSelectedRigId] = useState(props.session.rigId ?? \"\");\n const [restarting, setRestarting] = useState(false);\n const [runtimeFailure, setRuntimeFailure] = useState<string | null>(null);\n const restartScope = useMemo(\n () => ({\n principalId: `${context.accessContext.subjectId}:${context.accessKeyVersion}`,\n workspaceId: props.session.workspaceId,\n sessionId: props.session.id,\n }),\n [\n context.accessContext.subjectId,\n context.accessKeyVersion,\n props.session.id,\n props.session.workspaceId,\n ],\n );\n const pendingRestartAttempt = sessionRestartOperationController.snapshot(restartScope);\n useEffect(() => {\n setSelectedRigId(props.session.rigId ?? \"\");\n }, [props.session.id, props.session.rigId]);\n const restartWithSetup = async () => {\n if (!props.session.tenancy) return;\n const attempt = sessionRestartOperationController.prepare(\n restartScope,\n {\n visibility: props.session.tenancy.visibility,\n rigId: selectedRigId || null,\n },\n () => crypto.randomUUID(),\n );\n setRestarting(true);\n setRuntimeFailure(null);\n let receiptConfirmed = false;\n try {\n const result = await context.client.forkSession(props.session.workspaceId, props.session.id, {\n idempotencyKey: attempt.idempotencyKey,\n visibility: attempt.visibility,\n workspaceSharedAcknowledged: false,\n rigId: attempt.rigId,\n });\n receiptConfirmed = true;\n const destination = await context.client.getSession(result.workspaceId, result.sessionId, {\n fresh: true,\n });\n if (destination.workspaceId !== result.workspaceId || destination.id !== result.sessionId) {\n throw new Error(\"The restart receipt did not resolve to the expected session.\");\n }\n sessionRestartOperationController.settle(restartScope, attempt);\n toast.success(\"Restarted with new setup\", {\n description: \"The original session and sandbox were left unchanged.\",\n });\n void navigate({\n to: \"/workspaces/$workspaceId/sessions/$sessionId\",\n params: { workspaceId: result.workspaceId, sessionId: result.sessionId },\n });\n } catch (error) {\n const classified = classifySessionTenancyFailure(error);\n if (!retainSessionRestartAttemptAfterFailure(error, receiptConfirmed)) {\n sessionRestartOperationController.settle(restartScope, attempt);\n }\n const message = classified.message;\n setRuntimeFailure(message);\n toast.error(\"Session could not be restarted\", { description: message });\n } finally {\n setRestarting(false);\n }\n };\n const terminalSession = isTerminalSessionStatus(props.session.status);\n // The session's ACTIVE compute, not its home backend: when a connected machine\n // is active (live-swapped or targeted at create) show the machine name, so the\n // inspector agrees with the \"Run on\" header instead of reading \"modal\" while a\n // selfhosted box runs the turn. Degrades to the home backend when no machine is\n // active (or selfhosted is disabled → the fleet 404s to empty).\n const fleet = useWorkspaceMachines({\n sessionId: props.session.id,\n pollIntervalMs: MACHINES_SESSION_POLL_MS,\n });\n const activeMachine =\n fleet.machines.find((machine) => machine.active && machine.kind === \"selfhosted\") ?? null;\n // Compute context, honestly: don't fall back to the home backend while the\n // fleet is still resolving - that reads \"Cloud sandbox\" even when a machine\n // runs the turn. Show a loading/unavailable note until we actually know. The\n // home box uses the neutral label, never its hosting vendor.\n const computeUnknown = fleet.machines.length === 0 && (fleet.loading || Boolean(fleet.error));\n const computeLabel = activeMachine ? \"Machine\" : \"Sandbox\";\n const computeValue = activeMachine\n ? activeMachine.name\n : computeUnknown\n ? fleet.loading\n ? \"Checking…\"\n : \"Unavailable\"\n : sessionSandboxLabel(t, props.session.sandboxBackend);\n const displayEvents = props.events;\n const sortedEvents = [...displayEvents].sort((a, b) => b.sequence - a.sequence);\n const lifecycleEvents = [...displayEvents]\n .filter((event) => !event.type.endsWith(\".delta\"))\n .sort((a, b) => b.sequence - a.sequence);\n const repositories = props.session.resources.filter((resource) => resource.kind === \"repository\");\n\n return (\n <div className=\"flex h-full min-h-[28rem] w-full min-w-0 flex-col overflow-hidden\">\n <div className=\"flex min-w-0 items-center justify-between gap-3 border-b border-border px-3 py-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <FileJsonIcon className=\"size-4 shrink-0 text-brand\" />\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium\">\n {terminalSession ? \"Archived debug\" : \"Debug\"}\n </div>\n <div className=\"truncate text-xs text-fg-subtle\">{props.events.length} events</div>\n </div>\n </div>\n <ConnectionPill state={props.connectionState} />\n </div>\n\n <Tabs defaultValue=\"overview\" className=\"min-h-0 min-w-0 flex-1 gap-0 overflow-hidden\">\n <div className=\"min-w-0 border-b border-border px-2 py-2\">\n <TabsList className=\"flex !h-auto w-full min-w-0 flex-wrap justify-start gap-1 rounded-md bg-bg p-1\">\n <TabsTrigger value=\"overview\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Overview\n </TabsTrigger>\n <TabsTrigger value=\"context\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Context\n </TabsTrigger>\n <TabsTrigger value=\"events\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Events\n </TabsTrigger>\n <TabsTrigger value=\"timeline\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Timeline\n </TabsTrigger>\n <TabsTrigger value=\"startup\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Startup\n </TabsTrigger>\n <TabsTrigger value=\"raw\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Raw\n </TabsTrigger>\n </TabsList>\n </div>\n\n <TabsContent value=\"startup\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"space-y-5 p-3\">\n <PreferenceToggleRow\n label=\"Show startup details in chat\"\n description=\"Remembered in this browser. Timings are always recorded.\"\n checked={startupDetails}\n onToggle={() => setStartupDetails(!startupDetails)}\n wrapDescription\n />\n <StartupTimings phases={startupPhases} />\n </div>\n </ScrollArea>\n </TabsContent>\n <TabsContent value=\"overview\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"min-w-0 space-y-4 p-3\">\n <InspectorSection title=\"Session\">\n <InfoRow label=\"ID\" value={<CopyableMono value={props.session.id} />} />\n <InfoRow\n label=\"Status\"\n value={<SessionStatusBadge status={props.session.status} />}\n />\n <InfoRow\n label=\"Workflow\"\n value={\n props.session.temporalWorkflowId ? (\n <CopyableMono value={props.session.temporalWorkflowId} />\n ) : (\n \"none\"\n )\n }\n />\n <InfoRow\n label=\"Active turn\"\n value={\n props.session.activeTurnId ? (\n <CopyableMono value={props.session.activeTurnId} />\n ) : (\n \"none\"\n )\n }\n />\n <InfoRow label=\"Last seq\" value={String(props.session.lastSequence)} />\n <InfoRow label=\"Created\" value={formatTimestamp(props.session.createdAt)} />\n <InfoRow label=\"Updated\" value={formatTimestamp(props.session.updatedAt)} />\n </InspectorSection>\n\n <InspectorSection title=\"Runtime\">\n <InfoRow\n label=\"Model\"\n value={<ModelName model={props.session.model} markClassName=\"text-fg-muted\" />}\n />\n <InfoRow\n label=\"Effort\"\n value={labelReasoningEffort(t, props.session.reasoningEffort)}\n />\n <InfoRow label={computeLabel} value={computeValue} />\n <InfoRow label=\"Sandbox Environment\" value={props.session.rigId ?? \"none\"} />\n {props.session.tenancy ? (\n <div className=\"space-y-2 rounded-md border border-border bg-bg/35 p-2\">\n <div className=\"text-xs font-medium\">Restart with sandbox environment</div>\n <Select\n value={selectedRigId}\n disabled={restarting || Boolean(pendingRestartAttempt)}\n onChange={(event) => setSelectedRigId(event.target.value)}\n className=\"h-8 w-full text-xs\"\n >\n <option value=\"\">No sandbox environment</option>\n {rigs.rigs.map((rig) => (\n <option key={rig.id} value={rig.id}>\n {rig.name}\n {rig.activeVersion ? ` (v${rig.activeVersion.version})` : \"\"}\n </option>\n ))}\n </Select>\n <p className=\"text-2xs text-fg-subtle\">\n Sandbox Environment setup is immutable for a live sandbox. Restart creates an\n independent history fork with a fresh sandbox and leaves this session\n unchanged.\n </p>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={restarting}\n onClick={() => void restartWithSetup()}\n >\n {restarting ? <Loader2Icon className=\"animate-spin\" /> : <RotateCcwIcon />}\n {pendingRestartAttempt ? \"Retry restart\" : \"Restart with setup\"}\n </Button>\n </div>\n ) : null}\n {runtimeFailure ? (\n <p className=\"text-2xs text-status-waiting\">{runtimeFailure}</p>\n ) : null}\n <InfoRow label=\"Stream\" value={props.connectionState} />\n </InspectorSection>\n\n <InspectorSection title=\"Repositories\">\n {repositories.length === 0 ? (\n <p className=\"text-xs text-fg-subtle\">\n No repositories selected for this session.\n </p>\n ) : (\n <div className=\"min-w-0 space-y-2\">\n {withOccurrenceKeys(repositories, (resource) => JSON.stringify(resource)).map(\n ({ key, item: resource }) => (\n <div\n key={key}\n className=\"min-w-0 rounded-md border border-border bg-bg/35 p-2\"\n >\n <div className=\"min-w-0 truncate text-xs font-medium\">\n {repositoryDisplayName(resource)}\n </div>\n <div className=\"mt-1 min-w-0 truncate font-mono text-2xs text-fg-subtle\">\n {resource.uri}\n </div>\n <div className=\"mt-2 flex min-w-0 flex-wrap gap-1.5 text-2xs text-fg-subtle\">\n <span className=\"max-w-full truncate rounded border border-border px-1.5 py-0.5\">\n ref {resource.ref}\n </span>\n {resource.mountPath ? (\n <span className=\"max-w-full truncate rounded border border-border px-1.5 py-0.5\">\n {resource.mountPath}\n </span>\n ) : null}\n </div>\n </div>\n ),\n )}\n </div>\n )}\n </InspectorSection>\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"context\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ModelContextInspectorPane\n workspaceId={props.session.workspaceId}\n sessionId={props.session.id}\n events={displayEvents}\n isRunning={props.session.status === \"running\"}\n />\n </TabsContent>\n\n <TabsContent value=\"events\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"min-w-0 space-y-2 p-3\">\n {sortedEvents.map((event) => (\n <EventDebugRow key={event.id} event={event} />\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"timeline\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"min-w-0 space-y-2 p-3\">\n {lifecycleEvents.map((event) => (\n <div key={event.id} className=\"rounded-md border border-border bg-bg/35 p-2\">\n <div className=\"flex items-center justify-between gap-2 text-xs\">\n <span className=\"truncate font-medium\">{eventDisplayLabel(event)}</span>\n <span className=\"shrink-0 font-mono text-2xs text-fg-subtle\">\n #{event.sequence}\n </span>\n </div>\n <div className=\"mt-1 text-2xs text-fg-subtle\">\n {formatTimestamp(event.occurredAt)}\n </div>\n </div>\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"raw\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <RawJsonPane value={{ session: props.session, events: displayEvents }} />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nfunction EventDebugRow({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n return (\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n className=\"min-w-0 overflow-hidden rounded-md border border-border bg-bg/35\"\n >\n <CollapsibleTrigger asChild>\n <button\n type=\"button\"\n className=\"flex w-full min-w-0 items-center justify-between gap-2 p-2 text-left\"\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-xs font-medium\">{eventDisplayLabel(event)}</div>\n <div className=\"mt-1 truncate font-mono text-2xs text-fg-subtle\">\n {event.turnId ?? event.id}\n </div>\n </div>\n <div className=\"shrink-0 text-right\">\n <div className=\"font-mono text-2xs text-fg-muted\">#{event.sequence}</div>\n <div className=\"mt-1 text-2xs text-fg-subtle\">{formatTimestamp(event.occurredAt)}</div>\n </div>\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <pre className=\"max-h-72 max-w-full overflow-auto border-t border-border p-2 text-2xs leading-5 text-fg-muted\">\n {JSON.stringify(event.payload, null, 2)}\n </pre>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nfunction RawJsonPane({ value }: { value: unknown }) {\n const json = JSON.stringify(value, null, 2);\n return (\n <div className=\"flex h-full min-h-0 min-w-0 flex-col overflow-hidden\">\n <div className=\"flex items-center justify-end border-b border-border p-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n onClick={() => {\n void navigator.clipboard.writeText(json);\n toast.success(\"Copied raw JSON\");\n }}\n >\n <CopyIcon className=\"size-3\" />\n Copy\n </Button>\n </div>\n <ScrollArea className=\"min-h-0 min-w-0 flex-1\">\n <pre className=\"max-w-full overflow-auto p-3 text-2xs leading-5 text-fg-muted\">{json}</pre>\n </ScrollArea>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/app/components/session/inspector.tsx"],"sourcesContent":["import { t } from \"../../lib/console-text\";\nimport { useWorkspaceRigs } from \"../../lib/use-workspace-rigs\";\nimport { useWorkspaceMachines } from \"../../lib/use-workspace-machines\";\nimport { StartupTimings, useStartupDetails, setStartupDetails } from \"../../../session-ui\";\nimport { buildTimeline } from \"../../../timeline\";\nimport { labelReasoningEffort } from \"../../../model-policy\";\nimport { ModelName } from \"../../../components/model-mark\";\nimport { PreferenceToggleRow } from \"../transcription-settings\";\nimport { SessionStatus as SessionStatusBadge } from \"../../../components/session-status\";\nimport type { SessionEventsConnectionState } from \"../../../hooks/use-session-events\";\nimport { MACHINES_SESSION_POLL_MS } from \"../../../machines\";\nimport { useNavigate } from \"../../lib/navigation\";\nimport { CopyIcon, FileJsonIcon, Loader2Icon, RotateCcwIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { toast } from \"../../lib/toast\";\n\nimport { ConnectionPill, CopyableMono, InfoRow, InspectorSection } from \"../common\";\nimport { ModelContextInspectorPane } from \"./model-context-inspector\";\nimport { sessionSandboxLabel } from \"./sandbox-switcher\";\nimport { Button } from \"../../../ui/button\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../../ui/collapsible\";\nimport { ScrollArea } from \"../../../ui/scroll-area\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../../ui/tabs\";\nimport { Select } from \"../../../ui/select\";\nimport { useAppContext } from \"../../app-context\";\nimport { eventDisplayLabel, isTerminalSessionStatus } from \"../../lib/events\";\nimport { formatTimestamp } from \"../../lib/format\";\nimport { withOccurrenceKeys } from \"../../lib/react-key\";\nimport {\n retainSessionRestartAttemptAfterFailure,\n sessionRestartOperationController,\n} from \"../../lib/session-restart-operation-controller\";\nimport { classifySessionTenancyFailure } from \"../../lib/session-tenancy\";\nimport { repositoryDisplayName } from \"../../lib/session-tools\";\nimport type { Session, SessionEvent } from \"../../types\";\n\nexport function SessionInspector(props: {\n session: Session;\n events: SessionEvent[];\n connectionState: SessionEventsConnectionState;\n onReloadSession: () => Promise<void>;\n}) {\n const startupDetails = useStartupDetails();\n const startupPhases = useMemo(\n () => buildTimeline(t, props.events).filter((item) => item.kind === \"startup-phase\"),\n [props.events],\n );\n const context = useAppContext();\n const navigate = useNavigate();\n const rigs = useWorkspaceRigs({ workspaceId: props.session.workspaceId });\n const [selectedRigId, setSelectedRigId] = useState(props.session.rigId ?? \"\");\n const [restarting, setRestarting] = useState(false);\n const [runtimeFailure, setRuntimeFailure] = useState<string | null>(null);\n const restartScope = useMemo(\n () => ({\n principalId: `${context.accessContext.subjectId}:${context.accessKeyVersion}`,\n workspaceId: props.session.workspaceId,\n sessionId: props.session.id,\n }),\n [\n context.accessContext.subjectId,\n context.accessKeyVersion,\n props.session.id,\n props.session.workspaceId,\n ],\n );\n const pendingRestartAttempt = sessionRestartOperationController.snapshot(restartScope);\n useEffect(() => {\n setSelectedRigId(props.session.rigId ?? \"\");\n }, [props.session.id, props.session.rigId]);\n const restartWithSetup = async () => {\n if (!props.session.tenancy) return;\n const attempt = sessionRestartOperationController.prepare(\n restartScope,\n {\n visibility: props.session.tenancy.visibility,\n rigId: selectedRigId || null,\n },\n () => crypto.randomUUID(),\n );\n setRestarting(true);\n setRuntimeFailure(null);\n let receiptConfirmed = false;\n try {\n const result = await context.client.forkSession(props.session.workspaceId, props.session.id, {\n idempotencyKey: attempt.idempotencyKey,\n visibility: attempt.visibility,\n workspaceSharedAcknowledged: false,\n rigId: attempt.rigId,\n });\n receiptConfirmed = true;\n const destination = await context.client.getSession(result.workspaceId, result.sessionId, {\n fresh: true,\n });\n if (destination.workspaceId !== result.workspaceId || destination.id !== result.sessionId) {\n throw new Error(\"The restart receipt did not resolve to the expected session.\");\n }\n sessionRestartOperationController.settle(restartScope, attempt);\n toast.success(\"Restarted with new setup\", {\n description: \"The original session and sandbox were left unchanged.\",\n });\n void navigate({\n to: \"/workspaces/$workspaceId/sessions/$sessionId\",\n params: { workspaceId: result.workspaceId, sessionId: result.sessionId },\n });\n } catch (error) {\n const classified = classifySessionTenancyFailure(error);\n if (!retainSessionRestartAttemptAfterFailure(error, receiptConfirmed)) {\n sessionRestartOperationController.settle(restartScope, attempt);\n }\n const message = classified.message;\n setRuntimeFailure(message);\n toast.error(\"Session could not be restarted\", { description: message });\n } finally {\n setRestarting(false);\n }\n };\n const terminalSession = isTerminalSessionStatus(props.session.status);\n // The session's ACTIVE compute, not its home backend: when a connected machine\n // is active (live-swapped or targeted at create) show the machine name, so the\n // inspector agrees with the \"Run on\" header instead of reading \"modal\" while a\n // selfhosted box runs the turn. Degrades to the home backend when no machine is\n // active (or selfhosted is disabled → the fleet 404s to empty).\n const fleet = useWorkspaceMachines({\n sessionId: props.session.id,\n pollIntervalMs: MACHINES_SESSION_POLL_MS,\n });\n const activeMachine =\n fleet.machines.find((machine) => machine.active && machine.kind === \"selfhosted\") ?? null;\n // Compute context, honestly: don't fall back to the home backend while the\n // fleet is still resolving - that reads \"Cloud sandbox\" even when a machine\n // runs the turn. Show a loading/unavailable note until we actually know. The\n // home box uses the neutral label, never its hosting vendor.\n const computeUnknown = fleet.machines.length === 0 && (fleet.loading || Boolean(fleet.error));\n const computeLabel = activeMachine ? \"Machine\" : \"Sandbox\";\n const computeValue = activeMachine\n ? activeMachine.name\n : computeUnknown\n ? fleet.loading\n ? \"Checking…\"\n : \"Unavailable\"\n : sessionSandboxLabel(t, props.session.sandboxBackend);\n const displayEvents = props.events;\n const sortedEvents = [...displayEvents].sort((a, b) => b.sequence - a.sequence);\n const lifecycleEvents = [...displayEvents]\n .filter((event) => !event.type.endsWith(\".delta\"))\n .sort((a, b) => b.sequence - a.sequence);\n const repositories = props.session.resources.filter((resource) => resource.kind === \"repository\");\n\n return (\n <div className=\"flex h-full min-h-[28rem] w-full min-w-0 flex-col overflow-hidden\">\n <div className=\"flex min-w-0 items-center justify-between gap-3 border-b border-border px-3 py-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <FileJsonIcon className=\"size-4 shrink-0 text-brand\" />\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium\">\n {terminalSession ? \"Archived debug\" : \"Debug\"}\n </div>\n <div className=\"truncate text-xs text-fg-subtle\">{props.events.length} events</div>\n </div>\n </div>\n <ConnectionPill state={props.connectionState} />\n </div>\n\n <Tabs defaultValue=\"overview\" className=\"min-h-0 min-w-0 flex-1 gap-0 overflow-hidden\">\n <div className=\"min-w-0 border-b border-border px-2 py-2\">\n <TabsList className=\"flex !h-auto w-full min-w-0 flex-wrap justify-start gap-1 rounded-md bg-bg p-1\">\n <TabsTrigger value=\"overview\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Overview\n </TabsTrigger>\n <TabsTrigger value=\"context\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Context\n </TabsTrigger>\n <TabsTrigger value=\"events\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Events\n </TabsTrigger>\n <TabsTrigger value=\"timeline\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Timeline\n </TabsTrigger>\n <TabsTrigger value=\"startup\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Startup\n </TabsTrigger>\n <TabsTrigger value=\"raw\" className=\"h-7 min-w-max flex-none rounded px-2 text-2xs\">\n Raw\n </TabsTrigger>\n </TabsList>\n </div>\n\n <TabsContent value=\"startup\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"space-y-5 p-3\">\n <PreferenceToggleRow\n label=\"Show startup details in chat\"\n description=\"Remembered in this browser. Timings are always recorded.\"\n checked={startupDetails}\n onToggle={() => setStartupDetails(!startupDetails)}\n wrapDescription\n />\n <StartupTimings phases={startupPhases} />\n </div>\n </ScrollArea>\n </TabsContent>\n <TabsContent value=\"overview\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"min-w-0 space-y-4 p-3\">\n <InspectorSection title=\"Session\">\n <InfoRow label=\"ID\" value={<CopyableMono value={props.session.id} />} />\n <InfoRow\n label=\"Status\"\n value={<SessionStatusBadge status={props.session.status} />}\n />\n <InfoRow\n label=\"Workflow\"\n value={\n props.session.temporalWorkflowId ? (\n <CopyableMono value={props.session.temporalWorkflowId} />\n ) : (\n \"none\"\n )\n }\n />\n <InfoRow\n label=\"Active turn\"\n value={\n props.session.activeTurnId ? (\n <CopyableMono value={props.session.activeTurnId} />\n ) : (\n \"none\"\n )\n }\n />\n <InfoRow label=\"Last seq\" value={String(props.session.lastSequence)} />\n <InfoRow label=\"Created\" value={formatTimestamp(props.session.createdAt)} />\n <InfoRow label=\"Updated\" value={formatTimestamp(props.session.updatedAt)} />\n </InspectorSection>\n\n <InspectorSection title=\"Runtime\">\n <InfoRow\n label=\"Model\"\n value={<ModelName model={props.session.model} markClassName=\"text-fg-muted\" />}\n />\n <InfoRow\n label=\"Effort\"\n value={labelReasoningEffort(t, props.session.reasoningEffort)}\n />\n <InfoRow label={computeLabel} value={computeValue} />\n <InfoRow label=\"Sandbox Environment\" value={props.session.rigId ?? \"none\"} />\n {props.session.tenancy ? (\n <div className=\"space-y-2 rounded-md border border-border bg-bg/35 p-2\">\n <div className=\"text-xs font-medium\">Restart with sandbox environment</div>\n <Select\n value={selectedRigId}\n disabled={restarting || Boolean(pendingRestartAttempt)}\n onChange={(event) => setSelectedRigId(event.target.value)}\n className=\"h-8 w-full text-xs\"\n >\n <option value=\"\">No sandbox environment</option>\n {rigs.rigs.map((rig) => (\n <option key={rig.id} value={rig.id}>\n {rig.name}\n {rig.activeVersion ? ` (v${rig.activeVersion.version})` : \"\"}\n </option>\n ))}\n </Select>\n <p className=\"text-2xs text-fg-subtle\">\n Sandbox Environment setup is immutable for a live sandbox. Restart creates an\n independent history fork with a fresh sandbox and leaves this session\n unchanged.\n </p>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={restarting}\n onClick={() => void restartWithSetup()}\n >\n {restarting ? <Loader2Icon className=\"animate-spin\" /> : <RotateCcwIcon />}\n {pendingRestartAttempt ? \"Retry restart\" : \"Restart with setup\"}\n </Button>\n </div>\n ) : null}\n {runtimeFailure ? (\n <p className=\"text-2xs text-status-waiting\">{runtimeFailure}</p>\n ) : null}\n <InfoRow label=\"Stream\" value={props.connectionState} />\n </InspectorSection>\n\n <InspectorSection title=\"Repositories\">\n {repositories.length === 0 ? (\n <p className=\"text-xs text-fg-subtle\">\n No repositories selected for this session.\n </p>\n ) : (\n <div className=\"min-w-0 space-y-2\">\n {withOccurrenceKeys(repositories, (resource) => JSON.stringify(resource)).map(\n ({ key, item: resource }) => (\n <div\n key={key}\n className=\"min-w-0 rounded-md border border-border bg-bg/35 p-2\"\n >\n <div className=\"min-w-0 truncate text-xs font-medium\">\n {repositoryDisplayName(resource)}\n </div>\n <div className=\"mt-1 min-w-0 truncate font-mono text-2xs text-fg-subtle\">\n {resource.uri}\n </div>\n <div className=\"mt-2 flex min-w-0 flex-wrap gap-1.5 text-2xs text-fg-subtle\">\n <span className=\"max-w-full truncate rounded border border-border px-1.5 py-0.5\">\n ref {resource.ref}\n </span>\n {resource.mountPath ? (\n <span className=\"max-w-full truncate rounded border border-border px-1.5 py-0.5\">\n {resource.mountPath}\n </span>\n ) : null}\n </div>\n </div>\n ),\n )}\n </div>\n )}\n </InspectorSection>\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"context\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ModelContextInspectorPane\n workspaceId={props.session.workspaceId}\n sessionId={props.session.id}\n events={displayEvents}\n isRunning={props.session.status === \"running\"}\n />\n </TabsContent>\n\n <TabsContent value=\"events\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"min-w-0 space-y-2 p-3\">\n {sortedEvents.map((event) => (\n <EventDebugRow key={event.id} event={event} />\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"timeline\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <ScrollArea className=\"h-full min-w-0\">\n <div className=\"min-w-0 space-y-2 p-3\">\n {lifecycleEvents.map((event) => (\n <div key={event.id} className=\"rounded-md border border-border bg-bg/35 p-2\">\n <div className=\"flex items-center justify-between gap-2 text-xs\">\n <span className=\"truncate font-medium\">{eventDisplayLabel(event)}</span>\n <span className=\"shrink-0 font-mono text-2xs text-fg-subtle\">\n #{event.sequence}\n </span>\n </div>\n <div className=\"mt-1 text-2xs text-fg-subtle\">\n {formatTimestamp(event.occurredAt)}\n </div>\n </div>\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"raw\" className=\"min-h-0 min-w-0 overflow-hidden\">\n <RawJsonPane value={{ session: props.session, events: displayEvents }} />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nfunction EventDebugRow({ event }: { event: SessionEvent }) {\n const [open, setOpen] = useState(false);\n return (\n <Collapsible\n open={open}\n onOpenChange={setOpen}\n className=\"min-w-0 overflow-hidden rounded-md border border-border bg-bg/35\"\n >\n <CollapsibleTrigger asChild>\n <button\n type=\"button\"\n className=\"flex w-full min-w-0 items-center justify-between gap-2 p-2 text-left\"\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-xs font-medium\">{eventDisplayLabel(event)}</div>\n <div className=\"mt-1 truncate font-mono text-2xs text-fg-subtle\">\n {event.turnId ?? event.id}\n </div>\n </div>\n <div className=\"shrink-0 text-right\">\n <div className=\"font-mono text-2xs text-fg-muted\">#{event.sequence}</div>\n <div className=\"mt-1 text-2xs text-fg-subtle\">{formatTimestamp(event.occurredAt)}</div>\n </div>\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <pre className=\"max-h-72 max-w-full overflow-auto border-t border-border p-2 text-2xs leading-5 text-fg-muted\">\n {JSON.stringify(event.payload, null, 2)}\n </pre>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nfunction RawJsonPane({ value }: { value: unknown }) {\n const json = JSON.stringify(value, null, 2);\n return (\n <div className=\"flex h-full min-h-0 min-w-0 flex-col overflow-hidden\">\n <div className=\"flex items-center justify-end border-b border-border p-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n onClick={() => {\n void navigator.clipboard.writeText(json);\n toast.success(\"Copied raw JSON\");\n }}\n >\n <CopyIcon className=\"size-3\" />\n Copy\n </Button>\n </div>\n <ScrollArea className=\"min-h-0 min-w-0 flex-1\">\n <pre className=\"max-w-full overflow-auto p-3 text-2xs leading-5 text-fg-muted\">{json}</pre>\n </ScrollArea>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,SAAS,UAAU,cAAc,aAAa,qBAAqB;AACnE,SAAS,WAAW,SAAS,gBAAgB;AA4InC,cAKE,YALF;AArHH,SAAS,iBAAiB,OAK9B;AACD,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,gBAAgB;AAAA,IACpB,MAAM,cAAc,GAAG,MAAM,MAAM,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,eAAe;AAAA,IACnF,CAAC,MAAM,MAAM;AAAA,EACf;AACA,QAAM,UAAU,cAAc;AAC9B,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAO,iBAAiB,EAAE,aAAa,MAAM,QAAQ,YAAY,CAAC;AACxE,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,MAAM,QAAQ,SAAS,EAAE;AAC5E,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAwB,IAAI;AACxE,QAAM,eAAe;AAAA,IACnB,OAAO;AAAA,MACL,aAAa,GAAG,QAAQ,cAAc,SAAS,IAAI,QAAQ,gBAAgB;AAAA,MAC3E,aAAa,MAAM,QAAQ;AAAA,MAC3B,WAAW,MAAM,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,QAAQ,cAAc;AAAA,MACtB,QAAQ;AAAA,MACR,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AACA,QAAM,wBAAwB,kCAAkC,SAAS,YAAY;AACrF,YAAU,MAAM;AACd,qBAAiB,MAAM,QAAQ,SAAS,EAAE;AAAA,EAC5C,GAAG,CAAC,MAAM,QAAQ,IAAI,MAAM,QAAQ,KAAK,CAAC;AAC1C,QAAM,mBAAmB,YAAY;AACnC,QAAI,CAAC,MAAM,QAAQ,QAAS;AAC5B,UAAM,UAAU,kCAAkC;AAAA,MAChD;AAAA,MACA;AAAA,QACE,YAAY,MAAM,QAAQ,QAAQ;AAAA,QAClC,OAAO,iBAAiB;AAAA,MAC1B;AAAA,MACA,MAAM,OAAO,WAAW;AAAA,IAC1B;AACA,kBAAc,IAAI;AAClB,sBAAkB,IAAI;AACtB,QAAI,mBAAmB;AACvB,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,OAAO,YAAY,MAAM,QAAQ,aAAa,MAAM,QAAQ,IAAI;AAAA,QAC3F,gBAAgB,QAAQ;AAAA,QACxB,YAAY,QAAQ;AAAA,QACpB,6BAA6B;AAAA,QAC7B,OAAO,QAAQ;AAAA,MACjB,CAAC;AACD,yBAAmB;AACnB,YAAM,cAAc,MAAM,QAAQ,OAAO,WAAW,OAAO,aAAa,OAAO,WAAW;AAAA,QACxF,OAAO;AAAA,MACT,CAAC;AACD,UAAI,YAAY,gBAAgB,OAAO,eAAe,YAAY,OAAO,OAAO,WAAW;AACzF,cAAM,IAAI,MAAM,8DAA8D;AAAA,MAChF;AACA,wCAAkC,OAAO,cAAc,OAAO;AAC9D,YAAM,QAAQ,4BAA4B;AAAA,QACxC,aAAa;AAAA,MACf,CAAC;AACD,WAAK,SAAS;AAAA,QACZ,IAAI;AAAA,QACJ,QAAQ,EAAE,aAAa,OAAO,aAAa,WAAW,OAAO,UAAU;AAAA,MACzE,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,aAAa,8BAA8B,KAAK;AACtD,UAAI,CAAC,wCAAwC,OAAO,gBAAgB,GAAG;AACrE,0CAAkC,OAAO,cAAc,OAAO;AAAA,MAChE;AACA,YAAM,UAAU,WAAW;AAC3B,wBAAkB,OAAO;AACzB,YAAM,MAAM,kCAAkC,EAAE,aAAa,QAAQ,CAAC;AAAA,IACxE,UAAE;AACA,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AACA,QAAM,kBAAkB,wBAAwB,MAAM,QAAQ,MAAM;AAMpE,QAAM,QAAQ,qBAAqB;AAAA,IACjC,WAAW,MAAM,QAAQ;AAAA,IACzB,gBAAgB;AAAA,EAClB,CAAC;AACD,QAAM,gBACJ,MAAM,SAAS,KAAK,CAAC,YAAY,QAAQ,UAAU,QAAQ,SAAS,YAAY,KAAK;AAKvF,QAAM,iBAAiB,MAAM,SAAS,WAAW,MAAM,MAAM,WAAW,QAAQ,MAAM,KAAK;AAC3F,QAAM,eAAe,gBAAgB,YAAY;AACjD,QAAM,eAAe,gBACjB,cAAc,OACd,iBACE,MAAM,UACJ,mBACA,gBACF,oBAAoB,GAAG,MAAM,QAAQ,cAAc;AACzD,QAAM,gBAAgB,MAAM;AAC5B,QAAM,eAAe,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAC9E,QAAM,kBAAkB,CAAC,GAAG,aAAa,EACtC,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,QAAQ,CAAC,EAChD,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AACzC,QAAM,eAAe,MAAM,QAAQ,UAAU,OAAO,CAAC,aAAa,SAAS,SAAS,YAAY;AAEhG,SACE,qBAAC,SAAI,WAAU,qEACb;AAAA,yBAAC,SAAI,WAAU,oFACb;AAAA,2BAAC,SAAI,WAAU,mCACb;AAAA,4BAAC,gBAAa,WAAU,8BAA6B;AAAA,QACrD,qBAAC,SAAI,WAAU,WACb;AAAA,8BAAC,SAAI,WAAU,uBACZ,4BAAkB,mBAAmB,SACxC;AAAA,UACA,qBAAC,SAAI,WAAU,mCAAmC;AAAA,kBAAM,OAAO;AAAA,YAAO;AAAA,aAAO;AAAA,WAC/E;AAAA,SACF;AAAA,MACA,oBAAC,kBAAe,OAAO,MAAM,iBAAiB;AAAA,OAChD;AAAA,IAEA,qBAAC,QAAK,cAAa,YAAW,WAAU,gDACtC;AAAA,0BAAC,SAAI,WAAU,4CACb,+BAAC,YAAS,WAAU,kFAClB;AAAA,4BAAC,eAAY,OAAM,YAAW,WAAU,iDAAgD,sBAExF;AAAA,QACA,oBAAC,eAAY,OAAM,WAAU,WAAU,iDAAgD,qBAEvF;AAAA,QACA,oBAAC,eAAY,OAAM,UAAS,WAAU,iDAAgD,oBAEtF;AAAA,QACA,oBAAC,eAAY,OAAM,YAAW,WAAU,iDAAgD,sBAExF;AAAA,QACA,oBAAC,eAAY,OAAM,WAAU,WAAU,iDAAgD,qBAEvF;AAAA,QACA,oBAAC,eAAY,OAAM,OAAM,WAAU,iDAAgD,iBAEnF;AAAA,SACF,GACF;AAAA,MAEA,oBAAC,eAAY,OAAM,WAAU,WAAU,mCACrC,8BAAC,cAAW,WAAU,kBACpB,+BAAC,SAAI,WAAU,iBACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,aAAY;AAAA,YACZ,SAAS;AAAA,YACT,UAAU,MAAM,kBAAkB,CAAC,cAAc;AAAA,YACjD,iBAAe;AAAA;AAAA,QACjB;AAAA,QACA,oBAAC,kBAAe,QAAQ,eAAe;AAAA,SACzC,GACF,GACF;AAAA,MACA,oBAAC,eAAY,OAAM,YAAW,WAAU,mCACtC,8BAAC,cAAW,WAAU,kBACpB,+BAAC,SAAI,WAAU,yBACb;AAAA,6BAAC,oBAAiB,OAAM,WACtB;AAAA,8BAAC,WAAQ,OAAM,MAAK,OAAO,oBAAC,gBAAa,OAAO,MAAM,QAAQ,IAAI,GAAI;AAAA,UACtE;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,oBAAC,iBAAmB,QAAQ,MAAM,QAAQ,QAAQ;AAAA;AAAA,UAC3D;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OACE,MAAM,QAAQ,qBACZ,oBAAC,gBAAa,OAAO,MAAM,QAAQ,oBAAoB,IAEvD;AAAA;AAAA,UAGN;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OACE,MAAM,QAAQ,eACZ,oBAAC,gBAAa,OAAO,MAAM,QAAQ,cAAc,IAEjD;AAAA;AAAA,UAGN;AAAA,UACA,oBAAC,WAAQ,OAAM,YAAW,OAAO,OAAO,MAAM,QAAQ,YAAY,GAAG;AAAA,UACrE,oBAAC,WAAQ,OAAM,WAAU,OAAO,gBAAgB,MAAM,QAAQ,SAAS,GAAG;AAAA,UAC1E,oBAAC,WAAQ,OAAM,WAAU,OAAO,gBAAgB,MAAM,QAAQ,SAAS,GAAG;AAAA,WAC5E;AAAA,QAEA,qBAAC,oBAAiB,OAAM,WACtB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,oBAAC,aAAU,OAAO,MAAM,QAAQ,OAAO,eAAc,iBAAgB;AAAA;AAAA,UAC9E;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,OAAO,qBAAqB,GAAG,MAAM,QAAQ,eAAe;AAAA;AAAA,UAC9D;AAAA,UACA,oBAAC,WAAQ,OAAO,cAAc,OAAO,cAAc;AAAA,UACnD,oBAAC,WAAQ,OAAM,uBAAsB,OAAO,MAAM,QAAQ,SAAS,QAAQ;AAAA,UAC1E,MAAM,QAAQ,UACb,qBAAC,SAAI,WAAU,0DACb;AAAA,gCAAC,SAAI,WAAU,uBAAsB,8CAAgC;AAAA,YACrE;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,UAAU,cAAc,QAAQ,qBAAqB;AAAA,gBACrD,UAAU,CAAC,UAAU,iBAAiB,MAAM,OAAO,KAAK;AAAA,gBACxD,WAAU;AAAA,gBAEV;AAAA,sCAAC,YAAO,OAAM,IAAG,oCAAsB;AAAA,kBACtC,KAAK,KAAK,IAAI,CAAC,QACd,qBAAC,YAAoB,OAAO,IAAI,IAC7B;AAAA,wBAAI;AAAA,oBACJ,IAAI,gBAAgB,MAAM,IAAI,cAAc,OAAO,MAAM;AAAA,uBAF/C,IAAI,EAGjB,CACD;AAAA;AAAA;AAAA,YACH;AAAA,YACA,oBAAC,OAAE,WAAU,2BAA0B,4KAIvC;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,SAAS,MAAM,KAAK,iBAAiB;AAAA,gBAEpC;AAAA,+BAAa,oBAAC,eAAY,WAAU,gBAAe,IAAK,oBAAC,iBAAc;AAAA,kBACvE,wBAAwB,kBAAkB;AAAA;AAAA;AAAA,YAC7C;AAAA,aACF,IACE;AAAA,UACH,iBACC,oBAAC,OAAE,WAAU,gCAAgC,0BAAe,IAC1D;AAAA,UACJ,oBAAC,WAAQ,OAAM,UAAS,OAAO,MAAM,iBAAiB;AAAA,WACxD;AAAA,QAEA,oBAAC,oBAAiB,OAAM,gBACrB,uBAAa,WAAW,IACvB,oBAAC,OAAE,WAAU,0BAAyB,wDAEtC,IAEA,oBAAC,SAAI,WAAU,qBACZ,6BAAmB,cAAc,CAAC,aAAa,KAAK,UAAU,QAAQ,CAAC,EAAE;AAAA,UACxE,CAAC,EAAE,KAAK,MAAM,SAAS,MACrB;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cAEV;AAAA,oCAAC,SAAI,WAAU,wCACZ,gCAAsB,QAAQ,GACjC;AAAA,gBACA,oBAAC,SAAI,WAAU,2DACZ,mBAAS,KACZ;AAAA,gBACA,qBAAC,SAAI,WAAU,+DACb;AAAA,uCAAC,UAAK,WAAU,kEAAiE;AAAA;AAAA,oBAC1E,SAAS;AAAA,qBAChB;AAAA,kBACC,SAAS,YACR,oBAAC,UAAK,WAAU,kEACb,mBAAS,WACZ,IACE;AAAA,mBACN;AAAA;AAAA;AAAA,YAlBK;AAAA,UAmBP;AAAA,QAEJ,GACF,GAEJ;AAAA,SACF,GACF,GACF;AAAA,MAEA,oBAAC,eAAY,OAAM,WAAU,WAAU,mCACrC;AAAA,QAAC;AAAA;AAAA,UACC,aAAa,MAAM,QAAQ;AAAA,UAC3B,WAAW,MAAM,QAAQ;AAAA,UACzB,QAAQ;AAAA,UACR,WAAW,MAAM,QAAQ,WAAW;AAAA;AAAA,MACtC,GACF;AAAA,MAEA,oBAAC,eAAY,OAAM,UAAS,WAAU,mCACpC,8BAAC,cAAW,WAAU,kBACpB,8BAAC,SAAI,WAAU,yBACZ,uBAAa,IAAI,CAAC,UACjB,oBAAC,iBAA6B,SAAV,MAAM,EAAkB,CAC7C,GACH,GACF,GACF;AAAA,MAEA,oBAAC,eAAY,OAAM,YAAW,WAAU,mCACtC,8BAAC,cAAW,WAAU,kBACpB,8BAAC,SAAI,WAAU,yBACZ,0BAAgB,IAAI,CAAC,UACpB,qBAAC,SAAmB,WAAU,gDAC5B;AAAA,6BAAC,SAAI,WAAU,mDACb;AAAA,8BAAC,UAAK,WAAU,wBAAwB,4BAAkB,KAAK,GAAE;AAAA,UACjE,qBAAC,UAAK,WAAU,8CAA6C;AAAA;AAAA,YACzD,MAAM;AAAA,aACV;AAAA,WACF;AAAA,QACA,oBAAC,SAAI,WAAU,gCACZ,0BAAgB,MAAM,UAAU,GACnC;AAAA,WATQ,MAAM,EAUhB,CACD,GACH,GACF,GACF;AAAA,MAEA,oBAAC,eAAY,OAAM,OAAM,WAAU,mCACjC,8BAAC,eAAY,OAAO,EAAE,SAAS,MAAM,SAAS,QAAQ,cAAc,GAAG,GACzE;AAAA,OACF;AAAA,KACF;AAEJ;AAEA,SAAS,cAAc,EAAE,MAAM,GAA4B;AACzD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,cAAc;AAAA,MACd,WAAU;AAAA,MAEV;AAAA,4BAAC,sBAAmB,SAAO,MACzB;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YAEV;AAAA,mCAAC,SAAI,WAAU,WACb;AAAA,oCAAC,SAAI,WAAU,gCAAgC,4BAAkB,KAAK,GAAE;AAAA,gBACxE,oBAAC,SAAI,WAAU,mDACZ,gBAAM,UAAU,MAAM,IACzB;AAAA,iBACF;AAAA,cACA,qBAAC,SAAI,WAAU,uBACb;AAAA,qCAAC,SAAI,WAAU,oCAAmC;AAAA;AAAA,kBAAE,MAAM;AAAA,mBAAS;AAAA,gBACnE,oBAAC,SAAI,WAAU,gCAAgC,0BAAgB,MAAM,UAAU,GAAE;AAAA,iBACnF;AAAA;AAAA;AAAA,QACF,GACF;AAAA,QACA,oBAAC,sBACC,8BAAC,SAAI,WAAU,iGACZ,eAAK,UAAU,MAAM,SAAS,MAAM,CAAC,GACxC,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,YAAY,EAAE,MAAM,GAAuB;AAClD,QAAM,OAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AAC1C,SACE,qBAAC,SAAI,WAAU,wDACb;AAAA,wBAAC,SAAI,WAAU,4DACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAAS,MAAM;AACb,eAAK,UAAU,UAAU,UAAU,IAAI;AACvC,gBAAM,QAAQ,iBAAiB;AAAA,QACjC;AAAA,QAEA;AAAA,8BAAC,YAAS,WAAU,UAAS;AAAA,UAAE;AAAA;AAAA;AAAA,IAEjC,GACF;AAAA,IACA,oBAAC,cAAW,WAAU,0BACpB,8BAAC,SAAI,WAAU,iEAAiE,gBAAK,GACvF;AAAA,KACF;AAEJ;","names":[]}
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
  import {
3
3
  SessionFeedback
4
- } from "../../../chunk-CBY5CXBD.js";
4
+ } from "../../../chunk-VWSFA4LJ.js";
5
5
  import "../../../chunk-QAWWQS4L.js";
6
6
  import "../../../chunk-WMSCYECP.js";
7
7
  import "../../../chunk-HZUL2CUH.js";
8
- import "../../../chunk-HPPKLBTJ.js";
8
+ import "../../../chunk-TJQDL3JH.js";
9
9
  import "../../../chunk-L4OF77LE.js";
10
10
  import "../../../chunk-A3KMTJZS.js";
11
11
  import "../../../chunk-HMU5IELG.js";
12
12
  import "../../../chunk-LRNZ5F2R.js";
13
13
  import "../../../chunk-J3BHDXQQ.js";
14
14
  import "../../../chunk-TXS65BB2.js";
15
- import "../../../chunk-5JZYPZ72.js";
15
+ import "../../../chunk-JFK7NTEA.js";
16
16
 
17
17
  // src/app/components/session/message-actions.tsx
18
18
  import { GitForkIcon } from "lucide-react";
@@ -12,7 +12,7 @@ import {
12
12
  } from "../../../chunk-YG6NARQY.js";
13
13
  import {
14
14
  usePage
15
- } from "../../../chunk-MYNUBDU7.js";
15
+ } from "../../../chunk-VYKW6TB2.js";
16
16
  import "../../../chunk-IZUAIHR4.js";
17
17
  import {
18
18
  userErrorText
@@ -20,34 +20,35 @@ import {
20
20
  import {
21
21
  useAppContext
22
22
  } from "../../../chunk-W6KAUGXO.js";
23
- import "../../../chunk-X7L4H4VG.js";
23
+ import "../../../chunk-F33EDYS7.js";
24
24
  import "../../../chunk-B27E3V37.js";
25
- import "../../../chunk-3KVWXKD6.js";
25
+ import "../../../chunk-LQ47YL6E.js";
26
26
  import "../../../chunk-UD2PSIIX.js";
27
- import "../../../chunk-5MZTJMZ3.js";
28
- import "../../../chunk-R63QEVPK.js";
27
+ import "../../../chunk-6MRY2RUZ.js";
28
+ import "../../../chunk-SJORXXLV.js";
29
29
  import "../../../chunk-OYQQJL3J.js";
30
- import "../../../chunk-H3LIIAGE.js";
31
30
  import "../../../chunk-RZLBICR5.js";
31
+ import "../../../chunk-H3LIIAGE.js";
32
32
  import "../../../chunk-VHB3E6PT.js";
33
33
  import "../../../chunk-YSRBFJMQ.js";
34
- import "../../../chunk-TQGJN5UZ.js";
34
+ import "../../../chunk-AW3QEFOF.js";
35
35
  import "../../../chunk-HEVQKE27.js";
36
- import "../../../chunk-ANHUMDJX.js";
37
- import "../../../chunk-STUCI6QA.js";
36
+ import "../../../chunk-WNDTLK44.js";
37
+ import "../../../chunk-ULYQEFNH.js";
38
+ import "../../../chunk-LEKBNKLD.js";
38
39
  import "../../../chunk-DNJ23AWQ.js";
39
40
  import "../../../chunk-OB3YGXHQ.js";
40
41
  import "../../../chunk-UNJPZGNK.js";
41
42
  import "../../../chunk-PEHTX3V7.js";
42
43
  import {
43
44
  useLightboxOptional
44
- } from "../../../chunk-OBQVTCTW.js";
45
+ } from "../../../chunk-ZX5H7LWD.js";
45
46
  import "../../../chunk-J3BHDXQQ.js";
46
47
  import "../../../chunk-XEA5BCMA.js";
47
48
  import "../../../chunk-SJGAHTY5.js";
48
49
  import "../../../chunk-4NHJ6EXL.js";
49
50
  import "../../../chunk-TXS65BB2.js";
50
- import "../../../chunk-5JZYPZ72.js";
51
+ import "../../../chunk-JFK7NTEA.js";
51
52
 
52
53
  // src/app/components/session/message-resource-attachments.tsx
53
54
  import { AppWindowIcon, DownloadIcon, FileJsonIcon, ImageIcon } from "lucide-react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/components/session/message-resource-attachments.tsx"],"sourcesContent":["import { AppWindowIcon, DownloadIcon, FileJsonIcon, ImageIcon } from \"lucide-react\";\nimport { useLightboxOptional } from \"../../../timeline\";\nimport { useEffect, useState } from \"react\";\nimport { toast } from \"../../lib/toast\";\nimport { useAppContext } from \"../../app-context\";\nimport { usePage } from \"../../lib/navigation\";\nimport { userErrorText } from \"../../../ui/api-error\";\nimport { cn } from \"../../lib/utils\";\nimport type { FileAsset, ResourceRef } from \"../../types\";\nimport { MessageFileSkeletons, MessageRepositoryChips } from \"./message-resource-placeholders\";\ntype FileResource = Extract<ResourceRef, { kind: \"file\" }>;\n\nexport default function MessageResourceAttachments({\n workspaceId,\n sessionId,\n resources,\n}: {\n workspaceId: string;\n sessionId?: string | undefined;\n resources: ResourceRef[];\n}) {\n const fileResources = resources.filter(\n (resource): resource is FileResource => resource.kind === \"file\",\n );\n const { assets, ready } = useFileAssets(workspaceId, fileResources, sessionId);\n const filesPending = fileResources.length > 0 && !ready;\n const imageResources = filesPending\n ? []\n : fileResources.filter((resource) => isImageAsset(assets.get(resource.fileId)));\n const otherFileResources = filesPending\n ? []\n : fileResources.filter((resource) => !isImageAsset(assets.get(resource.fileId)));\n const hasChips =\n otherFileResources.length > 0 || resources.some((resource) => resource.kind === \"repository\");\n return (\n <>\n {filesPending ? <MessageFileSkeletons resources={resources} /> : null}\n {imageResources.length > 0 ? (\n <div\n className={cn(\n \"mb-2\",\n imageResources.length === 1 ? \"max-w-md\" : \"grid grid-cols-2 gap-2\",\n )}\n >\n {imageResources.map((resource) => (\n <MessageImagePreview\n key={`${resource.fileId}:${resource.mountPath ?? \"\"}`}\n workspaceId={workspaceId}\n sessionId={sessionId}\n resource={resource}\n asset={assets.get(resource.fileId) as FileAsset}\n grid={imageResources.length > 1}\n />\n ))}\n </div>\n ) : null}\n {hasChips ? (\n <div className=\"mb-2 flex flex-wrap gap-1.5\">\n {otherFileResources.map((resource) => (\n <MessageFileAttachment\n key={`${resource.fileId}:${resource.mountPath ?? \"\"}`}\n workspaceId={workspaceId}\n sessionId={sessionId}\n resource={resource}\n asset={assets.get(resource.fileId) ?? undefined}\n />\n ))}\n <MessageRepositoryChips resources={resources} />\n </div>\n ) : null}\n </>\n );\n}\n\n/** Fetch metadata as one batch; never flash an image as a file chip first. */\nfunction useFileAssets(\n workspaceId: string,\n resources: FileResource[],\n sessionId?: string,\n): { assets: Map<string, FileAsset | null>; ready: boolean } {\n const { client } = useAppContext();\n // The map remembers WHICH id-key it was fetched for: when the attachments\n // change, the stale map must not masquerade as this message's metadata while\n // the new fetch is in flight (previews briefly showed the previous message's\n // files). `ready` is key-matched, never inferred from map size.\n const [loaded, setLoaded] = useState<{ key: string; assets: Map<string, FileAsset | null> }>({\n key: \"\",\n assets: new Map(),\n });\n const fileIdsKey = resources.map((resource) => resource.fileId).join(\",\");\n const key = `${sessionId ?? \"\"}:${fileIdsKey}`;\n useEffect(() => {\n let mounted = true;\n const ids = fileIdsKey ? fileIdsKey.split(\",\") : [];\n if (ids.length === 0) {\n setLoaded({ key, assets: new Map() });\n return;\n }\n void Promise.all(\n ids.map(async (id): Promise<readonly [string, FileAsset | null]> => {\n try {\n return [id, await client.getFile(workspaceId, id, { sessionId })] as const;\n } catch {\n return [id, null] as const;\n }\n }),\n ).then((entries) => {\n if (mounted) {\n setLoaded({ key, assets: new Map(entries) });\n }\n });\n return () => {\n mounted = false;\n };\n }, [client, workspaceId, sessionId, fileIdsKey, key]);\n return { assets: loaded.key === key ? loaded.assets : new Map(), ready: loaded.key === key };\n}\n\nfunction isImageAsset(asset: FileAsset | null | undefined): boolean {\n return Boolean(asset?.contentType.startsWith(\"image/\"));\n}\n\n/** Signed image preview with lightbox and download; failures become file chips. */\nfunction MessageImagePreview({\n workspaceId,\n sessionId,\n resource,\n asset,\n grid,\n}: {\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n asset: FileAsset;\n grid: boolean;\n}) {\n const { client } = useAppContext();\n const page = usePage();\n const lightbox = useLightboxOptional();\n const [url, setUrl] = useState<string | null>(null);\n const [failed, setFailed] = useState(false);\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n let mounted = true;\n // Same mounted instance, new file (virtualized/reused rows): the previous\n // attachment's url/failed/loaded must never bleed into this one.\n setUrl(null);\n setFailed(false);\n setLoaded(false);\n void client\n .createFileDownloadUrl(workspaceId, resource.fileId, { sessionId })\n .then((signed) => {\n if (mounted) {\n setUrl(signed.url);\n }\n })\n .catch(() => {\n if (mounted) {\n setFailed(true);\n }\n });\n return () => {\n mounted = false;\n };\n }, [client, workspaceId, sessionId, resource.fileId]);\n\n // A dead/expired signed URL degrades to the plain file card — never a broken image.\n if (failed) {\n return (\n <MessageFileAttachment\n workspaceId={workspaceId}\n sessionId={sessionId}\n resource={resource}\n asset={asset}\n />\n );\n }\n\n // An app-shot names the window it shows rather than the screenshot's file.\n const appShot = asset.appShot;\n const appShotCaption = appShot\n ? [appShot.app, appShot.title.trim()].filter(Boolean).join(\" · \")\n : \"\";\n\n const openFull = () => {\n if (!url) {\n return;\n }\n if (lightbox) {\n lightbox.open(url, asset.filename);\n } else {\n page.open(url);\n }\n };\n\n async function download() {\n try {\n const signed = await client.createFileDownloadUrl(workspaceId, resource.fileId, {\n sessionId,\n });\n page.open(signed.url);\n } catch (error) {\n toast.error(\"Couldn't download the image\", {\n description: userErrorText(error),\n });\n }\n }\n\n return (\n <figure className=\"m-0 min-w-0\">\n <button\n type=\"button\"\n onClick={openFull}\n aria-label={`Open ${asset.filename}`}\n className=\"block w-full overflow-hidden rounded-lg border border-border bg-surface outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {url ? (\n <img\n src={url}\n alt={asset.filename}\n loading=\"lazy\"\n onLoad={() => setLoaded(true)}\n onError={() => setFailed(true)}\n className={cn(\n \"w-full transition-opacity duration-200\",\n grid ? \"h-36 object-cover\" : \"max-h-80 object-contain\",\n loaded ? \"opacity-100\" : \"opacity-0\",\n )}\n />\n ) : (\n <div className={cn(\"w-full animate-pulse bg-surface-2\", grid ? \"h-36\" : \"h-40\")} />\n )}\n </button>\n <figcaption className=\"mt-1 flex items-center gap-1.5 px-0.5 text-2xs text-fg-subtle\">\n {appShot ? (\n <>\n <AppWindowIcon className=\"size-3 shrink-0\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate\" title={appShotCaption}>\n <span className=\"sr-only\">App-shot: </span>\n {appShotCaption}\n </span>\n </>\n ) : (\n <>\n <ImageIcon className=\"size-3 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\" title={asset.filename}>\n {asset.filename}\n </span>\n </>\n )}\n <button\n type=\"button\"\n onClick={() => void download()}\n aria-label={`Download ${asset.filename}`}\n className=\"inline-flex shrink-0 items-center justify-center rounded p-0.5 outline-hidden transition-colors hover:text-fg focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:size-10\"\n >\n <DownloadIcon className=\"size-3\" />\n </button>\n </figcaption>\n </figure>\n );\n}\n\n/** File chip with the download-url affordance (signed URL on click). */\nfunction MessageFileAttachment({\n workspaceId,\n sessionId,\n resource,\n asset: preloaded,\n}: {\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n /** When the parent already fetched the asset, skip the redundant lookup. */\n asset?: FileAsset | undefined;\n}) {\n const { client } = useAppContext();\n const page = usePage();\n const [file, setFile] = useState<FileAsset | null>(preloaded ?? null);\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (preloaded) {\n setFile(preloaded);\n return;\n }\n let mounted = true;\n void client\n .getFile(workspaceId, resource.fileId, { sessionId })\n .then((asset) => {\n if (mounted) {\n setFile(asset);\n }\n })\n .catch(() => undefined);\n return () => {\n mounted = false;\n };\n }, [client, workspaceId, sessionId, resource.fileId, preloaded]);\n\n async function openFile() {\n setBusy(true);\n try {\n const signed = await client.createFileDownloadUrl(workspaceId, resource.fileId, {\n sessionId,\n });\n page.open(signed.url);\n } catch (error) {\n toast.error(\"Couldn't open the file\", {\n description: userErrorText(error),\n });\n } finally {\n setBusy(false);\n }\n }\n\n const isImage = file?.contentType.startsWith(\"image/\");\n return (\n <button\n type=\"button\"\n onClick={() => void openFile()}\n disabled={busy}\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-surface px-2 py-1 text-xs text-fg-muted hover:text-fg disabled:opacity-60 pointer-coarse:min-h-10\"\n >\n {isImage ? (\n <ImageIcon className=\"size-3.5 shrink-0\" />\n ) : (\n <FileJsonIcon className=\"size-3.5 shrink-0\" />\n )}\n <span className=\"truncate\">{file?.filename ?? resource.fileId}</span>\n <DownloadIcon className=\"size-3 shrink-0\" />\n </button>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/app/components/session/message-resource-attachments.tsx"],"sourcesContent":["import { AppWindowIcon, DownloadIcon, FileJsonIcon, ImageIcon } from \"lucide-react\";\nimport { useLightboxOptional } from \"../../../timeline\";\nimport { useEffect, useState } from \"react\";\nimport { toast } from \"../../lib/toast\";\nimport { useAppContext } from \"../../app-context\";\nimport { usePage } from \"../../lib/navigation\";\nimport { userErrorText } from \"../../../ui/api-error\";\nimport { cn } from \"../../lib/utils\";\nimport type { FileAsset, ResourceRef } from \"../../types\";\nimport { MessageFileSkeletons, MessageRepositoryChips } from \"./message-resource-placeholders\";\ntype FileResource = Extract<ResourceRef, { kind: \"file\" }>;\n\nexport default function MessageResourceAttachments({\n workspaceId,\n sessionId,\n resources,\n}: {\n workspaceId: string;\n sessionId?: string | undefined;\n resources: ResourceRef[];\n}) {\n const fileResources = resources.filter(\n (resource): resource is FileResource => resource.kind === \"file\",\n );\n const { assets, ready } = useFileAssets(workspaceId, fileResources, sessionId);\n const filesPending = fileResources.length > 0 && !ready;\n const imageResources = filesPending\n ? []\n : fileResources.filter((resource) => isImageAsset(assets.get(resource.fileId)));\n const otherFileResources = filesPending\n ? []\n : fileResources.filter((resource) => !isImageAsset(assets.get(resource.fileId)));\n const hasChips =\n otherFileResources.length > 0 || resources.some((resource) => resource.kind === \"repository\");\n return (\n <>\n {filesPending ? <MessageFileSkeletons resources={resources} /> : null}\n {imageResources.length > 0 ? (\n <div\n className={cn(\n \"mb-2\",\n imageResources.length === 1 ? \"max-w-md\" : \"grid grid-cols-2 gap-2\",\n )}\n >\n {imageResources.map((resource) => (\n <MessageImagePreview\n key={`${resource.fileId}:${resource.mountPath ?? \"\"}`}\n workspaceId={workspaceId}\n sessionId={sessionId}\n resource={resource}\n asset={assets.get(resource.fileId) as FileAsset}\n grid={imageResources.length > 1}\n />\n ))}\n </div>\n ) : null}\n {hasChips ? (\n <div className=\"mb-2 flex flex-wrap gap-1.5\">\n {otherFileResources.map((resource) => (\n <MessageFileAttachment\n key={`${resource.fileId}:${resource.mountPath ?? \"\"}`}\n workspaceId={workspaceId}\n sessionId={sessionId}\n resource={resource}\n asset={assets.get(resource.fileId) ?? undefined}\n />\n ))}\n <MessageRepositoryChips resources={resources} />\n </div>\n ) : null}\n </>\n );\n}\n\n/** Fetch metadata as one batch; never flash an image as a file chip first. */\nfunction useFileAssets(\n workspaceId: string,\n resources: FileResource[],\n sessionId?: string,\n): { assets: Map<string, FileAsset | null>; ready: boolean } {\n const { client } = useAppContext();\n // The map remembers WHICH id-key it was fetched for: when the attachments\n // change, the stale map must not masquerade as this message's metadata while\n // the new fetch is in flight (previews briefly showed the previous message's\n // files). `ready` is key-matched, never inferred from map size.\n const [loaded, setLoaded] = useState<{ key: string; assets: Map<string, FileAsset | null> }>({\n key: \"\",\n assets: new Map(),\n });\n const fileIdsKey = resources.map((resource) => resource.fileId).join(\",\");\n const key = `${sessionId ?? \"\"}:${fileIdsKey}`;\n useEffect(() => {\n let mounted = true;\n const ids = fileIdsKey ? fileIdsKey.split(\",\") : [];\n if (ids.length === 0) {\n setLoaded({ key, assets: new Map() });\n return;\n }\n void Promise.all(\n ids.map(async (id): Promise<readonly [string, FileAsset | null]> => {\n try {\n return [id, await client.getFile(workspaceId, id, { sessionId })] as const;\n } catch {\n return [id, null] as const;\n }\n }),\n ).then((entries) => {\n if (mounted) {\n setLoaded({ key, assets: new Map(entries) });\n }\n });\n return () => {\n mounted = false;\n };\n }, [client, workspaceId, sessionId, fileIdsKey, key]);\n return { assets: loaded.key === key ? loaded.assets : new Map(), ready: loaded.key === key };\n}\n\nfunction isImageAsset(asset: FileAsset | null | undefined): boolean {\n return Boolean(asset?.contentType.startsWith(\"image/\"));\n}\n\n/** Signed image preview with lightbox and download; failures become file chips. */\nfunction MessageImagePreview({\n workspaceId,\n sessionId,\n resource,\n asset,\n grid,\n}: {\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n asset: FileAsset;\n grid: boolean;\n}) {\n const { client } = useAppContext();\n const page = usePage();\n const lightbox = useLightboxOptional();\n const [url, setUrl] = useState<string | null>(null);\n const [failed, setFailed] = useState(false);\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n let mounted = true;\n // Same mounted instance, new file (virtualized/reused rows): the previous\n // attachment's url/failed/loaded must never bleed into this one.\n setUrl(null);\n setFailed(false);\n setLoaded(false);\n void client\n .createFileDownloadUrl(workspaceId, resource.fileId, { sessionId })\n .then((signed) => {\n if (mounted) {\n setUrl(signed.url);\n }\n })\n .catch(() => {\n if (mounted) {\n setFailed(true);\n }\n });\n return () => {\n mounted = false;\n };\n }, [client, workspaceId, sessionId, resource.fileId]);\n\n // A dead/expired signed URL degrades to the plain file card — never a broken image.\n if (failed) {\n return (\n <MessageFileAttachment\n workspaceId={workspaceId}\n sessionId={sessionId}\n resource={resource}\n asset={asset}\n />\n );\n }\n\n // An app-shot names the window it shows rather than the screenshot's file.\n const appShot = asset.appShot;\n const appShotCaption = appShot\n ? [appShot.app, appShot.title.trim()].filter(Boolean).join(\" · \")\n : \"\";\n\n const openFull = () => {\n if (!url) {\n return;\n }\n if (lightbox) {\n lightbox.open(url, asset.filename);\n } else {\n page.open(url);\n }\n };\n\n async function download() {\n try {\n const signed = await client.createFileDownloadUrl(workspaceId, resource.fileId, {\n sessionId,\n });\n page.open(signed.url);\n } catch (error) {\n toast.error(\"Couldn't download the image\", {\n description: userErrorText(error),\n });\n }\n }\n\n return (\n <figure className=\"m-0 min-w-0\">\n <button\n type=\"button\"\n onClick={openFull}\n aria-label={`Open ${asset.filename}`}\n className=\"block w-full overflow-hidden rounded-lg border border-border bg-surface outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {url ? (\n <img\n src={url}\n alt={asset.filename}\n loading=\"lazy\"\n onLoad={() => setLoaded(true)}\n onError={() => setFailed(true)}\n className={cn(\n \"w-full transition-opacity duration-200\",\n grid ? \"h-36 object-cover\" : \"max-h-80 object-contain\",\n loaded ? \"opacity-100\" : \"opacity-0\",\n )}\n />\n ) : (\n <div className={cn(\"w-full animate-pulse bg-surface-2\", grid ? \"h-36\" : \"h-40\")} />\n )}\n </button>\n <figcaption className=\"mt-1 flex items-center gap-1.5 px-0.5 text-2xs text-fg-subtle\">\n {appShot ? (\n <>\n <AppWindowIcon className=\"size-3 shrink-0\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate\" title={appShotCaption}>\n <span className=\"sr-only\">App-shot: </span>\n {appShotCaption}\n </span>\n </>\n ) : (\n <>\n <ImageIcon className=\"size-3 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\" title={asset.filename}>\n {asset.filename}\n </span>\n </>\n )}\n <button\n type=\"button\"\n onClick={() => void download()}\n aria-label={`Download ${asset.filename}`}\n className=\"inline-flex shrink-0 items-center justify-center rounded p-0.5 outline-hidden transition-colors hover:text-fg focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:size-10\"\n >\n <DownloadIcon className=\"size-3\" />\n </button>\n </figcaption>\n </figure>\n );\n}\n\n/** File chip with the download-url affordance (signed URL on click). */\nfunction MessageFileAttachment({\n workspaceId,\n sessionId,\n resource,\n asset: preloaded,\n}: {\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n /** When the parent already fetched the asset, skip the redundant lookup. */\n asset?: FileAsset | undefined;\n}) {\n const { client } = useAppContext();\n const page = usePage();\n const [file, setFile] = useState<FileAsset | null>(preloaded ?? null);\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (preloaded) {\n setFile(preloaded);\n return;\n }\n let mounted = true;\n void client\n .getFile(workspaceId, resource.fileId, { sessionId })\n .then((asset) => {\n if (mounted) {\n setFile(asset);\n }\n })\n .catch(() => undefined);\n return () => {\n mounted = false;\n };\n }, [client, workspaceId, sessionId, resource.fileId, preloaded]);\n\n async function openFile() {\n setBusy(true);\n try {\n const signed = await client.createFileDownloadUrl(workspaceId, resource.fileId, {\n sessionId,\n });\n page.open(signed.url);\n } catch (error) {\n toast.error(\"Couldn't open the file\", {\n description: userErrorText(error),\n });\n } finally {\n setBusy(false);\n }\n }\n\n const isImage = file?.contentType.startsWith(\"image/\");\n return (\n <button\n type=\"button\"\n onClick={() => void openFile()}\n disabled={busy}\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-surface px-2 py-1 text-xs text-fg-muted hover:text-fg disabled:opacity-60 pointer-coarse:min-h-10\"\n >\n {isImage ? (\n <ImageIcon className=\"size-3.5 shrink-0\" />\n ) : (\n <FileJsonIcon className=\"size-3.5 shrink-0\" />\n )}\n <span className=\"truncate\">{file?.filename ?? resource.fileId}</span>\n <DownloadIcon className=\"size-3 shrink-0\" />\n </button>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,20 +1,20 @@
1
1
  "use client";
2
2
  import {
3
3
  ModelAccountIndicator
4
- } from "../../../chunk-GAIM5RNE.js";
4
+ } from "../../../chunk-MJQBC7C5.js";
5
5
  import "../../../chunk-M77ZQE5T.js";
6
6
  import "../../../chunk-3SMJ2BIQ.js";
7
- import "../../../chunk-HGMWMK5K.js";
7
+ import "../../../chunk-IIO2MR3B.js";
8
8
  import "../../../chunk-Z63GB7JI.js";
9
9
  import "../../../chunk-A3MTTRCX.js";
10
10
  import "../../../chunk-TREHTIBD.js";
11
11
  import "../../../chunk-5OTQA7CM.js";
12
- import "../../../chunk-DT7BORXG.js";
13
- import "../../../chunk-XWWXIZFP.js";
14
- import "../../../chunk-JKUICTLM.js";
15
- import "../../../chunk-IGVL3ELX.js";
12
+ import "../../../chunk-BMJTNPWK.js";
13
+ import "../../../chunk-DFXZYNTX.js";
14
+ import "../../../chunk-NLAFNMPK.js";
16
15
  import "../../../chunk-RZLBICR5.js";
17
- import "../../../chunk-AG7VGUIW.js";
16
+ import "../../../chunk-IGVL3ELX.js";
17
+ import "../../../chunk-ERG355NM.js";
18
18
  import "../../../chunk-PNNTR6KP.js";
19
19
  import "../../../chunk-WJPMYXKZ.js";
20
20
  import "../../../chunk-VYT4POBH.js";
@@ -23,11 +23,11 @@ import "../../../chunk-J3BHDXQQ.js";
23
23
  import "../../../chunk-CFEFYPNR.js";
24
24
  import "../../../chunk-N7S72EXK.js";
25
25
  import "../../../chunk-XEA5BCMA.js";
26
- import "../../../chunk-NAWXARTY.js";
26
+ import "../../../chunk-2KO2G3RI.js";
27
27
  import "../../../chunk-CM7LVUKC.js";
28
28
  import "../../../chunk-TVQCDDSZ.js";
29
29
  import "../../../chunk-TXS65BB2.js";
30
- import "../../../chunk-5JZYPZ72.js";
30
+ import "../../../chunk-JFK7NTEA.js";
31
31
  export {
32
32
  ModelAccountIndicator
33
33
  };
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import {
3
3
  ModelRecoveryNotice
4
- } from "../../../chunk-PTGRFAMH.js";
5
- import "../../../chunk-P5T36BA3.js";
4
+ } from "../../../chunk-3ABPIUCK.js";
5
+ import "../../../chunk-FRP64DEK.js";
6
6
  import "../../../chunk-4NHJ6EXL.js";
7
7
  import "../../../chunk-TXS65BB2.js";
8
- import "../../../chunk-5JZYPZ72.js";
8
+ import "../../../chunk-JFK7NTEA.js";
9
9
  export {
10
10
  ModelRecoveryNotice
11
11
  };