@opengeni/react 4.3.3-canary.39786771332001 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (710) hide show
  1. package/dist/app/app-state.js +29 -29
  2. package/dist/app/components/Composer.js +27 -27
  3. package/dist/app/components/agent/agent-capability-picker.js +4 -4
  4. package/dist/app/components/artifacts/artifact-browse-controls.js +2 -2
  5. package/dist/app/components/artifacts/artifact-library.js +19 -19
  6. package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
  7. package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
  8. package/dist/app/components/artifacts/inline-chat-image.js +31 -30
  9. package/dist/app/components/artifacts/retained-file-preview.js +35 -34
  10. package/dist/app/components/artifacts/retained-text-preview.js +5 -5
  11. package/dist/app/components/artifacts/site-audience.js +4 -4
  12. package/dist/app/components/artifacts/site-conversations.js +22 -21
  13. package/dist/app/components/artifacts/site-data.js +19 -19
  14. package/dist/app/components/artifacts/site-publishing.js +41 -41
  15. package/dist/app/components/artifacts/site-settings.js +50 -50
  16. package/dist/app/components/billing-class-mark.js +5 -5
  17. package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
  18. package/dist/app/components/capabilities/capability-logo-source.js +12 -12
  19. package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
  20. package/dist/app/components/capabilities/native-connect-setup.js +14 -14
  21. package/dist/app/components/capabilities/perform-capability-action.js +1 -1
  22. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +16 -16
  23. package/dist/app/components/capabilities/session-capability-card.js +94 -76
  24. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  25. package/dist/app/components/capabilities/session-chrome-card.css +1023 -0
  26. package/dist/app/components/capabilities/session-chrome-card.css.map +1 -0
  27. package/dist/app/components/capabilities/session-chrome-card.d.ts +18 -0
  28. package/dist/app/components/capabilities/session-chrome-card.js +72 -0
  29. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -20
  30. package/dist/app/components/capabilities/session-github-card.js +24 -24
  31. package/dist/app/components/capabilities/session-machine-card.d.ts +27 -1
  32. package/dist/app/components/capabilities/session-machine-card.js +40 -36
  33. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  34. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  35. package/dist/app/components/command-menu/chat-status.js +18 -17
  36. package/dist/app/components/command-menu/chat-switcher.js +19 -18
  37. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  38. package/dist/app/components/command-menu/command-menu.js +36 -114
  39. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  40. package/dist/app/components/command-menu/shortcut-sheet.js +17 -17
  41. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  42. package/dist/app/components/composer-mobile-plus-panel.js +20 -20
  43. package/dist/app/components/composer-mobile-plus.js +1 -1
  44. package/dist/app/components/credit-required-gate.js +1 -1
  45. package/dist/app/components/credit-required-prompt.js +12 -12
  46. package/dist/app/components/credits/coupon-redeem.js +2 -2
  47. package/dist/app/components/credits/credit-refusal-notice.js +2 -2
  48. package/dist/app/components/desktop/app-shots.js +7 -7
  49. package/dist/app/components/desktop/this-computer.js +4 -4
  50. package/dist/app/components/feedback.js +4 -4
  51. package/dist/app/components/follow-up-repository-menu-body.js +5 -5
  52. package/dist/app/components/follow-up-repository-picker.js +1 -1
  53. package/dist/app/components/github-app-connect-launcher.js +2 -2
  54. package/dist/app/components/in-app-help-link.js +2 -2
  55. package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
  56. package/dist/app/components/machines/connect-machine-dialog.js +18 -18
  57. package/dist/app/components/markdown.js +9 -9
  58. package/dist/app/components/message-context-pills.js +2 -2
  59. package/dist/app/components/models/models-ui.js +8 -8
  60. package/dist/app/components/new-session-starters.js +2 -2
  61. package/dist/app/components/pickers.js +9 -9
  62. package/dist/app/components/rail/rail-context.js +2 -2
  63. package/dist/app/components/rail/rail-sections.js +69 -66
  64. package/dist/app/components/rail/session-header.js +49 -48
  65. package/dist/app/components/rail/session-list.js +68 -65
  66. package/dist/app/components/rail/session-row-content.d.ts +6 -2
  67. package/dist/app/components/rail/session-row-content.js +1 -1
  68. package/dist/app/components/rail/session-row-hover-details.js +24 -23
  69. package/dist/app/components/rail/session-shell.js +107 -104
  70. package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
  71. package/dist/app/components/rail/site-session-group-heading.js +20 -3
  72. package/dist/app/components/repository-picker.js +5 -5
  73. package/dist/app/components/secrets/session-secrets-panel.js +3 -3
  74. package/dist/app/components/session/agent-configuration-panel.js +38 -38
  75. package/dist/app/components/session/artifact-link-boundary.js +2 -2
  76. package/dist/app/components/session/artifact-session-page.js +4 -4
  77. package/dist/app/components/session/banners.js +11 -11
  78. package/dist/app/components/session/codex-account-indicator.js +12 -12
  79. package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
  80. package/dist/app/components/session/failed-session-banner.js +11 -11
  81. package/dist/app/components/session/human-input.js +59 -55
  82. package/dist/app/components/session/inspector.js +91 -87
  83. package/dist/app/components/session/inspector.js.map +1 -1
  84. package/dist/app/components/session/message-actions.js +4 -4
  85. package/dist/app/components/session/message-resource-attachments.js +21 -20
  86. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  87. package/dist/app/components/session/model-account-indicator.js +11 -11
  88. package/dist/app/components/session/model-context-inspector.js +2 -2
  89. package/dist/app/components/session/model-recovery-notice.js +3 -3
  90. package/dist/app/components/session/new-session-settings-menu.js +12 -12
  91. package/dist/app/components/session/sandbox-switcher.js +16 -16
  92. package/dist/app/components/session/sandbox-workspace.js +83 -79
  93. package/dist/app/components/session/search-markdown-highlight.js +10 -10
  94. package/dist/app/components/session/search-results-view.js +11 -11
  95. package/dist/app/components/session/session-admin-access.js +9 -9
  96. package/dist/app/components/session/session-admission-notice.js +6 -6
  97. package/dist/app/components/session/session-machine-access-notice.js +6 -6
  98. package/dist/app/components/session/session-retention.js +4 -4
  99. package/dist/app/components/session/session-search-dialog.js +12 -12
  100. package/dist/app/components/session/session-skill-reviews.js +1 -1
  101. package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
  102. package/dist/app/components/session/session-tenancy-control.js +41 -26
  103. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  104. package/dist/app/components/session/session-usage-limit-section.js +11 -11
  105. package/dist/app/components/session/session-wait-status.js +10 -9
  106. package/dist/app/components/session/session-wait-status.js.map +1 -1
  107. package/dist/app/components/session/site-origin-link.d.ts +1 -0
  108. package/dist/app/components/session/site-origin-link.js +2 -2
  109. package/dist/app/components/session/subagents.js +17 -16
  110. package/dist/app/components/session-connectors-menu-body.js +5 -5
  111. package/dist/app/components/settings/row-select.js +1 -1
  112. package/dist/app/components/transcription-settings.js +2 -2
  113. package/dist/app/components/ui/destructive-confirm.js +6 -6
  114. package/dist/app/components/usage/usage-entry.js +8 -8
  115. package/dist/app/components/workspace-composer-plus.js +22 -22
  116. package/dist/app/embed/memory-navigation.js +2 -2
  117. package/dist/app/embed/session-app.js +275 -269
  118. package/dist/app/lib/actions/actions-provider.js +14 -14
  119. package/dist/app/lib/actions/held-modifier.d.ts +11 -0
  120. package/dist/app/lib/app-surfaces.js +2 -2
  121. package/dist/app/lib/codex-usage-query.js +6 -6
  122. package/dist/app/lib/composer-connectors.js +13 -13
  123. package/dist/app/lib/console-site.d.ts +6 -0
  124. package/dist/app/lib/console-site.js +14 -0
  125. package/dist/app/lib/console-text.js +2 -2
  126. package/dist/app/lib/events.js +18 -17
  127. package/dist/app/lib/failed-session-copy.js +3 -3
  128. package/dist/app/lib/model-access-onboarding.js +3 -3
  129. package/dist/app/lib/move-chat-to-machine.js +3 -3
  130. package/dist/app/lib/navigation.d.ts +5 -0
  131. package/dist/app/lib/navigation.js +1 -1
  132. package/dist/app/lib/routes.d.ts +17 -0
  133. package/dist/app/lib/routes.js +9 -3
  134. package/dist/app/lib/session-branch-cache.js +14 -13
  135. package/dist/app/lib/session-create.js +2 -2
  136. package/dist/app/lib/session-deep-link.js +2 -2
  137. package/dist/app/lib/session-failure-toasts.d.ts +8 -0
  138. package/dist/app/lib/session-group-pagination.js +14 -13
  139. package/dist/app/lib/session-hover-facts.js +15 -14
  140. package/dist/app/lib/session-model.js +3 -3
  141. package/dist/app/lib/session-rail.js +10 -9
  142. package/dist/app/lib/session-rename.js +3 -3
  143. package/dist/app/lib/session-ui-features.d.ts +6 -1
  144. package/dist/app/lib/session-ui-features.js +1 -1
  145. package/dist/app/lib/sessions-group.d.ts +43 -3
  146. package/dist/app/lib/sessions-group.js +22 -15
  147. package/dist/app/lib/shared-query.js +3 -3
  148. package/dist/app/lib/site-opened.d.ts +6 -0
  149. package/dist/app/lib/site-opened.js +10 -0
  150. package/dist/app/lib/turn-failure-analytics.js +5 -5
  151. package/dist/app/lib/use-duplicate-site.js +3 -3
  152. package/dist/app/lib/use-follow-up-repositories.js +4 -4
  153. package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
  154. package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
  155. package/dist/app/lib/use-workspace-machines.js +6 -6
  156. package/dist/app/lib/use-workspace-model-catalog.js +8 -8
  157. package/dist/app/lib/use-workspace-rigs.js +8 -8
  158. package/dist/app/lib/workspace-navigation-preference.js +5 -5
  159. package/dist/app/lib/workspace-scope-context.js +4 -4
  160. package/dist/app/routes/artifacts.js +136 -153
  161. package/dist/app/routes/artifacts.js.map +1 -1
  162. package/dist/app/routes/retained-artifact.js +63 -62
  163. package/dist/app/routes/retained-artifact.js.map +1 -1
  164. package/dist/app/routes/session-unavailable.js +7 -5
  165. package/dist/app/routes/session.js +177 -173
  166. package/dist/app/routes/sessions-index-hydration.js +3 -3
  167. package/dist/app/routes/sessions-index.js +123 -121
  168. package/dist/app/routes/site-view.d.ts +11 -0
  169. package/dist/app/routes/site-view.js +597 -0
  170. package/dist/app/routes/site-view.js.map +1 -0
  171. package/dist/artifacts-document.js +4 -4
  172. package/dist/artifacts-presentation.js +4 -4
  173. package/dist/artifacts-spreadsheet.js +4 -4
  174. package/dist/artifacts.js +39 -39
  175. package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-QMCNV4RI.js} +9 -7
  176. package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-PMIAUXSO.js} +6 -6
  177. package/dist/{chunk-GIZGNFIX.js → chunk-22FFOHPT.js} +11 -11
  178. package/dist/chunk-22GTC4MZ.js +15 -0
  179. package/dist/chunk-22GTC4MZ.js.map +1 -0
  180. package/dist/{chunk-Z5WMLJKI.js → chunk-22JFMNMF.js} +92 -4
  181. package/dist/chunk-22JFMNMF.js.map +1 -0
  182. package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
  183. package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
  184. package/dist/chunk-2KO2G3RI.js.map +1 -0
  185. package/dist/{chunk-5POTDNQT.js → chunk-2NC7NZCE.js} +6 -6
  186. package/dist/{chunk-ZKYYZH6L.js → chunk-2QBYDGWO.js} +9 -9
  187. package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
  188. package/dist/{chunk-LQKKSUCR.js → chunk-35BC2FU2.js} +19 -19
  189. package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
  190. package/dist/{chunk-S4SC5SSV.js → chunk-3GU7AWG7.js} +18 -18
  191. package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
  192. package/dist/{chunk-OQAAI33Y.js → chunk-3RMKPHBL.js} +3 -3
  193. package/dist/{chunk-6JKZILLF.js → chunk-3RQUWFZT.js} +67 -67
  194. package/dist/{chunk-6JKZILLF.js.map → chunk-3RQUWFZT.js.map} +1 -1
  195. package/dist/{chunk-GCGTYXJJ.js → chunk-3STBLX4O.js} +9 -9
  196. package/dist/{chunk-YXIW7H4N.js → chunk-3X5FKDYQ.js} +28 -28
  197. package/dist/{chunk-KTRKZRID.js → chunk-4GLLWX33.js} +11 -11
  198. package/dist/{chunk-ROQOVH4N.js → chunk-4HEXNAFI.js} +20 -20
  199. package/dist/chunk-4HEXNAFI.js.map +1 -0
  200. package/dist/{chunk-SD2K5ZN5.js → chunk-4LPA25NQ.js} +4 -4
  201. package/dist/{chunk-DKCX643S.js → chunk-4RMN4E2Y.js} +13 -13
  202. package/dist/{chunk-E5FCEDMU.js → chunk-4SAGYEVB.js} +2 -2
  203. package/dist/{chunk-HTT3FB7T.js → chunk-4VK2R5QC.js} +3 -3
  204. package/dist/{chunk-CKG2EG62.js → chunk-4XQC7VLT.js} +14 -14
  205. package/dist/{chunk-IVOA3DXA.js → chunk-4YXAQMTD.js} +12 -12
  206. package/dist/{chunk-HOJGAJAB.js → chunk-52WK2GGK.js} +8 -8
  207. package/dist/{chunk-NYZQ7LO7.js → chunk-552UYIQ7.js} +20 -20
  208. package/dist/{chunk-LEXPBQ56.js → chunk-5DSKMG2I.js} +4 -4
  209. package/dist/{chunk-WNG757ID.js → chunk-5FA455GR.js} +4 -4
  210. package/dist/{chunk-MNWQAYY3.js → chunk-5FEN3KYH.js} +11 -11
  211. package/dist/{chunk-OSVHU2WU.js → chunk-5JHRMUAZ.js} +12 -12
  212. package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
  213. package/dist/chunk-5MJHH72T.js.map +1 -0
  214. package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
  215. package/dist/{chunk-GFUUFM2O.js → chunk-5W6ZDKRR.js} +6 -6
  216. package/dist/{chunk-NDETTZQA.js → chunk-5W7KJ5NQ.js} +37 -37
  217. package/dist/{chunk-Q35YZVDZ.js → chunk-5Y2FPLZE.js} +9 -9
  218. package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
  219. package/dist/chunk-5YFY4SFC.js.map +1 -0
  220. package/dist/{chunk-F3NERYBQ.js → chunk-62VER7O4.js} +6 -6
  221. package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
  222. package/dist/{chunk-WUHB422G.js → chunk-73WI7FL2.js} +18 -18
  223. package/dist/chunk-756MKA2J.js +45 -0
  224. package/dist/chunk-756MKA2J.js.map +1 -0
  225. package/dist/{chunk-QECZVL7S.js → chunk-7FJMRJDG.js} +2 -2
  226. package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
  227. package/dist/{chunk-XVM566II.js → chunk-7KIENXRE.js} +2 -2
  228. package/dist/{chunk-CBY5CXBD.js → chunk-7NPCEBZE.js} +5 -5
  229. package/dist/{chunk-46VBQG2D.js → chunk-7P4AQMGA.js} +13 -13
  230. package/dist/{chunk-CKZW7A5S.js → chunk-7TCT7KPQ.js} +742 -644
  231. package/dist/chunk-7TCT7KPQ.js.map +1 -0
  232. package/dist/{chunk-O77Q4NG2.js → chunk-7XO7YKPC.js} +283 -1038
  233. package/dist/chunk-7XO7YKPC.js.map +1 -0
  234. package/dist/{chunk-S7PVL7XH.js → chunk-A4BD4ZVB.js} +4 -4
  235. package/dist/{chunk-VSQHDBHU.js → chunk-ACL2V2KE.js} +68 -35
  236. package/dist/chunk-ACL2V2KE.js.map +1 -0
  237. package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
  238. package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
  239. package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
  240. package/dist/{chunk-P5WABK2H.js → chunk-BCM7C3MJ.js} +9 -9
  241. package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
  242. package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
  243. package/dist/{chunk-3XOISKZC.js → chunk-BXQYAAVE.js} +4 -4
  244. package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
  245. package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
  246. package/dist/{chunk-GTQ3SNEI.js → chunk-CD3MO3IC.js} +2 -2
  247. package/dist/{chunk-WSMYOLHG.js → chunk-CDEXRJB6.js} +5 -5
  248. package/dist/{chunk-3GLAPCVI.js → chunk-CFFNT2OY.js} +8 -8
  249. package/dist/{chunk-FUSFVUIJ.js → chunk-CMLJSF2F.js} +12 -12
  250. package/dist/{chunk-O4DYOSOL.js → chunk-CP7ZQHBW.js} +13 -13
  251. package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
  252. package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
  253. package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
  254. package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
  255. package/dist/{chunk-4EAF3HSD.js → chunk-EJ7WARW7.js} +2 -2
  256. package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
  257. package/dist/{chunk-OOEO4MKY.js → chunk-EPWD4KRA.js} +2 -2
  258. package/dist/{chunk-V5RJAWRP.js → chunk-EQE3MNQN.js} +5 -5
  259. package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
  260. package/dist/{chunk-OO2T63BY.js → chunk-EYS4ZOF5.js} +2 -2
  261. package/dist/{chunk-IC7KNOBB.js → chunk-FDAV72IX.js} +7 -7
  262. package/dist/{chunk-AG7VGUIW.js → chunk-FFNPUSVO.js} +7 -7
  263. package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
  264. package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
  265. package/dist/{chunk-ZHFKMMOT.js → chunk-FTX5CNHA.js} +6 -6
  266. package/dist/{chunk-KYBALSWW.js → chunk-FWOBNL2A.js} +1 -1
  267. package/dist/{chunk-HJ5XWW62.js → chunk-FWYEZ3LE.js} +34 -34
  268. package/dist/{chunk-WSLPZ43N.js → chunk-G4HQUBO4.js} +12 -12
  269. package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
  270. package/dist/chunk-GGV4NSG3.js +792 -0
  271. package/dist/chunk-GGV4NSG3.js.map +1 -0
  272. package/dist/{chunk-G3S2F35T.js → chunk-GHHM6WN4.js} +3 -3
  273. package/dist/{chunk-OANSIX34.js → chunk-GRSODLVO.js} +4 -4
  274. package/dist/{chunk-DDIBZA4X.js → chunk-GT7JFQ4E.js} +405 -148
  275. package/dist/chunk-GT7JFQ4E.js.map +1 -0
  276. package/dist/{chunk-EU6XSQFM.js → chunk-GXW2I2M2.js} +2 -2
  277. package/dist/{chunk-4246UYVG.js → chunk-GZS37O3G.js} +1 -1
  278. package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
  279. package/dist/chunk-H5M33DAL.js.map +1 -0
  280. package/dist/{chunk-Y7WMW74G.js → chunk-HQWVDQXW.js} +7 -7
  281. package/dist/{chunk-YTZQV2DD.js → chunk-HU6JTNWF.js} +2 -2
  282. package/dist/{chunk-QRVNI5V6.js → chunk-I6KIQKU6.js} +3 -3
  283. package/dist/{chunk-Q262Y2YX.js → chunk-IBA5FMRE.js} +141 -137
  284. package/dist/chunk-IBA5FMRE.js.map +1 -0
  285. package/dist/{chunk-BNUPYHHZ.js → chunk-IDXTASGN.js} +4 -4
  286. package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
  287. package/dist/chunk-IECRGM6K.js.map +1 -0
  288. package/dist/chunk-IJYL5BZM.js +38 -0
  289. package/dist/chunk-IJYL5BZM.js.map +1 -0
  290. package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
  291. package/dist/{chunk-VUHPA3XQ.js → chunk-ITX2TB4K.js} +6 -6
  292. package/dist/{chunk-ETCB6SUJ.js → chunk-J22HD2PB.js} +6 -6
  293. package/dist/{chunk-U47YDYLQ.js → chunk-J5MEDX7C.js} +8 -8
  294. package/dist/{chunk-6VQTHC4W.js → chunk-J7FBBLHF.js} +36 -36
  295. package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
  296. package/dist/chunk-JFK7NTEA.js.map +1 -0
  297. package/dist/{chunk-QZRDCFHI.js → chunk-JM4HQPAI.js} +5 -5
  298. package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
  299. package/dist/{chunk-XWWXIZFP.js → chunk-JO6R5EXF.js} +7 -7
  300. package/dist/{chunk-MM7OKOTE.js → chunk-JQCGPTZ6.js} +9 -9
  301. package/dist/chunk-JRSNCSZN.js +37 -0
  302. package/dist/chunk-JRSNCSZN.js.map +1 -0
  303. package/dist/{chunk-KNFDWNCH.js → chunk-JXT5QDJC.js} +5 -5
  304. package/dist/{chunk-OR37STQZ.js → chunk-KEXYBG7Q.js} +3 -3
  305. package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
  306. package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
  307. package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
  308. package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
  309. package/dist/{chunk-C535KSTY.js → chunk-LF5CBAOS.js} +4 -4
  310. package/dist/{chunk-BJIZ7PL7.js → chunk-LHLK7FUA.js} +145 -29
  311. package/dist/chunk-LHLK7FUA.js.map +1 -0
  312. package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
  313. package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
  314. package/dist/{chunk-H5WGWAYX.js → chunk-LT4J7RHI.js} +13 -13
  315. package/dist/{chunk-DSGMYES6.js → chunk-MCTTONOW.js} +28 -28
  316. package/dist/{chunk-IGHELZI7.js → chunk-MIECLOQC.js} +9 -9
  317. package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
  318. package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
  319. package/dist/chunk-MVZYNZXE.js.map +1 -0
  320. package/dist/{chunk-RKILMLA7.js → chunk-MXLKI7BI.js} +3 -3
  321. package/dist/{chunk-45WYYFP6.js → chunk-N3ZP4IDU.js} +2 -2
  322. package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
  323. package/dist/{chunk-UWJ5P5CU.js → chunk-NEK4WB5P.js} +3 -3
  324. package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
  325. package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
  326. package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
  327. package/dist/{chunk-D3RK3NGM.js → chunk-PCFK7HKD.js} +17 -17
  328. package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
  329. package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
  330. package/dist/{chunk-HGMWMK5K.js → chunk-PO3BH3KQ.js} +2 -2
  331. package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
  332. package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
  333. package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
  334. package/dist/{chunk-QIYBOFUV.js → chunk-QFMLAT7L.js} +246 -237
  335. package/dist/chunk-QFMLAT7L.js.map +1 -0
  336. package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
  337. package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
  338. package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
  339. package/dist/{chunk-HDHK3SXK.js → chunk-RFLYID6H.js} +5 -5
  340. package/dist/{chunk-V77JK73U.js → chunk-RIYZFKIM.js} +37 -35
  341. package/dist/chunk-RIYZFKIM.js.map +1 -0
  342. package/dist/{chunk-VMFID36H.js → chunk-RQNZDTKT.js} +19 -19
  343. package/dist/{chunk-EHCUFCXM.js → chunk-RYSRFAHN.js} +32 -22
  344. package/dist/chunk-RYSRFAHN.js.map +1 -0
  345. package/dist/{chunk-I6VUUEXH.js → chunk-S2U4CDAC.js} +150 -150
  346. package/dist/chunk-S2U4CDAC.js.map +1 -0
  347. package/dist/chunk-S37GP7LX.js +204 -0
  348. package/dist/chunk-S37GP7LX.js.map +1 -0
  349. package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
  350. package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
  351. package/dist/{chunk-Q4NM77K7.js → chunk-SSOO4GWN.js} +193 -194
  352. package/dist/chunk-SSOO4GWN.js.map +1 -0
  353. package/dist/{chunk-PFKTGZKE.js → chunk-SY2AAZNB.js} +2 -2
  354. package/dist/{chunk-DFZMKCVP.js → chunk-TIQPKOFW.js} +4 -4
  355. package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
  356. package/dist/chunk-TL7BOFFL.js +89 -0
  357. package/dist/chunk-TL7BOFFL.js.map +1 -0
  358. package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
  359. package/dist/{chunk-QM5H4FPT.js → chunk-TV6BWONY.js} +3 -3
  360. package/dist/{chunk-EDFJBX3V.js → chunk-U6MPB3K6.js} +9 -9
  361. package/dist/{chunk-TZD3U2S5.js → chunk-ULJAOMJA.js} +4 -4
  362. package/dist/chunk-ULYQEFNH.js +529 -0
  363. package/dist/chunk-ULYQEFNH.js.map +1 -0
  364. package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
  365. package/dist/{chunk-324X6T6G.js → chunk-UP7I3W6O.js} +57 -55
  366. package/dist/chunk-UP7I3W6O.js.map +1 -0
  367. package/dist/{chunk-VU2EWALC.js → chunk-UUGR3X5I.js} +19 -12
  368. package/dist/chunk-UUGR3X5I.js.map +1 -0
  369. package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
  370. package/dist/{chunk-OBQVTCTW.js → chunk-UYNCMZX5.js} +4 -4
  371. package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
  372. package/dist/chunk-V3K4RQO7.js.map +1 -0
  373. package/dist/{chunk-KZHW27BV.js → chunk-V4QZ7UBK.js} +2 -2
  374. package/dist/{chunk-NEVRLD77.js → chunk-VH5EGTH2.js} +3 -3
  375. package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
  376. package/dist/chunk-VYKW6TB2.js.map +1 -0
  377. package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
  378. package/dist/{chunk-H6WWEKEV.js → chunk-WCMG4HYI.js} +10 -10
  379. package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
  380. package/dist/{chunk-VW3BBTMA.js → chunk-WKHUZIOW.js} +1 -1
  381. package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
  382. package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
  383. package/dist/{chunk-Z2DAWUO3.js → chunk-XMNUZUUA.js} +6 -6
  384. package/dist/{chunk-GAIM5RNE.js → chunk-XN7NSPE6.js} +3 -3
  385. package/dist/chunk-XV6ZYRHK.js +59 -0
  386. package/dist/chunk-XV6ZYRHK.js.map +1 -0
  387. package/dist/{chunk-FLGUVRR7.js → chunk-Y5BSA3I7.js} +5 -5
  388. package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
  389. package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
  390. package/dist/{chunk-QILLL4JE.js → chunk-YEROLKOA.js} +16 -16
  391. package/dist/{chunk-NDF3SH3X.js → chunk-YJPKDRI2.js} +15 -15
  392. package/dist/{chunk-TQGJN5UZ.js → chunk-YV56F4UP.js} +318 -700
  393. package/dist/chunk-YV56F4UP.js.map +1 -0
  394. package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
  395. package/dist/{chunk-AD22P5X3.js → chunk-YXA2EKV3.js} +3 -3
  396. package/dist/{chunk-FDNJVZRE.js → chunk-YYCOSTUU.js} +17 -17
  397. package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
  398. package/dist/{chunk-BJW7G6EF.js → chunk-Z7IGO5EA.js} +3 -3
  399. package/dist/{chunk-N7JKT4ZU.js → chunk-ZEIFJ6PX.js} +7 -7
  400. package/dist/{chunk-Q4OHNGGB.js → chunk-ZS2UQ3DV.js} +68 -11
  401. package/dist/chunk-ZS2UQ3DV.js.map +1 -0
  402. package/dist/{chunk-VRGOOVDB.js → chunk-ZVVT72MT.js} +2 -2
  403. package/dist/components/browser-viewer.d.ts +1 -1
  404. package/dist/composer.js +14 -14
  405. package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-25AJIDYA.js} +9 -9
  406. package/dist/connect.js +11 -11
  407. package/dist/desktop.js +2 -2
  408. package/dist/editor.js +2 -2
  409. package/dist/{embedded-new-voice-5PYRDZ6T.js → embedded-new-voice-RZZEJT6M.js} +8 -8
  410. package/dist/{embedded-voice-PABC5NBD.js → embedded-voice-6OKSSPLW.js} +8 -8
  411. package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
  412. package/dist/hooks/internal.d.ts +38 -0
  413. package/dist/hooks/use-client-config-flags.d.ts +12 -0
  414. package/dist/hooks/use-workspace-sessions.d.ts +10 -1
  415. package/dist/index.js +233 -227
  416. package/dist/interaction.js +11 -9
  417. package/dist/interaction.js.map +1 -1
  418. package/dist/{latest-question-5LIRVG4G.js → latest-question-2PFWQSSG.js} +4 -3
  419. package/dist/{latest-question-5LIRVG4G.js.map → latest-question-2PFWQSSG.js.map} +1 -1
  420. package/dist/machines.js +5 -5
  421. package/dist/messages/en.d.ts +3 -3
  422. package/dist/messages.js +1 -1
  423. package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-VVFGGAI6.js} +6 -6
  424. package/dist/model-policy-picker-menu-VVFGGAI6.js.map +1 -0
  425. package/dist/native-previews.js +3 -3
  426. package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
  427. package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-4SHOQPQQ.js} +10 -8
  428. package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-4SHOQPQQ.js.map} +1 -1
  429. package/dist/realtime.js +7 -7
  430. package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-CCOTGXXA.js} +11 -11
  431. package/dist/sandbox-files-CCOTGXXA.js.map +1 -0
  432. package/dist/session-app.js +277 -271
  433. package/dist/session-list-model.d.ts +1 -0
  434. package/dist/session-list-model.js +8 -2
  435. package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
  436. package/dist/session-realtime-JNKDSGH7.js.map +1 -0
  437. package/dist/session-realtime.js +2 -2
  438. package/dist/session-ui.js +77 -72
  439. package/dist/session.js +27 -25
  440. package/dist/sites.js +2 -2
  441. package/dist/terminal.js +2 -2
  442. package/dist/this-computer.js +3 -3
  443. package/dist/timeline/invoked-tool.d.ts +5 -0
  444. package/dist/timeline/tool-display-name.d.ts +2 -2
  445. package/dist/timeline/tool-icon.d.ts +14 -0
  446. package/dist/timeline/tool-presentation.d.ts +8 -3
  447. package/dist/timeline/types.d.ts +2 -0
  448. package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-KHNYNY2J.js} +5 -5
  449. package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-AXEDJHBP.js} +7 -7
  450. package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-AV4ZBXRC.js} +9 -9
  451. package/dist/timeline-model.js +28 -26
  452. package/dist/ui/access-list.js +20 -20
  453. package/dist/ui/choice-cards.js +2 -2
  454. package/dist/ui/detail-page.js +2 -2
  455. package/dist/ui/detail-sheet.js +2 -2
  456. package/dist/ui/diff-view.js +2 -2
  457. package/dist/ui/disclosure.js +4 -4
  458. package/dist/ui/flush-form-page.js +3 -3
  459. package/dist/ui/form-dialog.js +2 -2
  460. package/dist/ui/list-row.js +5 -5
  461. package/dist/ui/revision-history.js +11 -11
  462. package/dist/ui/role-select.js +6 -6
  463. package/dist/ui/settings-nav.js +3 -3
  464. package/dist/usage.js +3 -3
  465. package/dist/workbench.js +11 -11
  466. package/package.json +4 -4
  467. package/src/app/app-state.tsx +3 -1
  468. package/src/app/components/capabilities/session-capability-card.tsx +14 -1
  469. package/src/app/components/capabilities/session-chrome-card.dom-fixture.tsx +377 -0
  470. package/src/app/components/capabilities/session-chrome-card.test.tsx +18 -0
  471. package/src/app/components/capabilities/session-chrome-card.tsx +243 -0
  472. package/src/app/components/capabilities/session-machine-card.dom-fixture.tsx +2 -0
  473. package/src/app/components/capabilities/session-machine-card.tsx +74 -16
  474. package/src/app/components/rail/session-list.tsx +254 -44
  475. package/src/app/components/rail/session-row-content.tsx +24 -2
  476. package/src/app/components/rail/session-shell.tsx +14 -9
  477. package/src/app/components/rail/site-session-group-heading.tsx +59 -20
  478. package/src/app/components/session/session-tenancy-control.tsx +18 -0
  479. package/src/app/components/session/site-origin-link.test.tsx +73 -0
  480. package/src/app/components/session/site-origin-link.tsx +4 -2
  481. package/src/app/embed/memory-navigation.tsx +1 -0
  482. package/src/app/lib/actions/held-modifier.test.ts +101 -0
  483. package/src/app/lib/actions/held-modifier.ts +108 -0
  484. package/src/app/lib/console-site.tsx +38 -0
  485. package/src/app/lib/navigation.tsx +4 -0
  486. package/src/app/lib/routes.tsx +42 -0
  487. package/src/app/lib/session-failure-toasts.ts +26 -0
  488. package/src/app/lib/session-ui-features.tsx +18 -4
  489. package/src/app/lib/sessions-group.tsx +219 -30
  490. package/src/app/lib/site-opened.tsx +48 -0
  491. package/src/app/lib/site-session-groups.test.ts +173 -6
  492. package/src/app/lib/site-view-routes.test.ts +55 -0
  493. package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
  494. package/src/app/routes/artifacts.tsx +2 -29
  495. package/src/app/routes/session-transient-failures.test.tsx +343 -0
  496. package/src/app/routes/session-unavailable.tsx +74 -3
  497. package/src/app/routes/session.tsx +4 -13
  498. package/src/app/routes/sessions-index.tsx +13 -9
  499. package/src/app/routes/site-view.test.tsx +476 -0
  500. package/src/app/routes/site-view.tsx +583 -0
  501. package/src/components/browser-viewer.tsx +16 -2
  502. package/src/hooks/internal.ts +129 -6
  503. package/src/hooks/use-client-config-flags.ts +8 -0
  504. package/src/hooks/use-session-events.ts +83 -9
  505. package/src/hooks/use-workspace-sessions.ts +21 -1
  506. package/src/messages/en.ts +3 -3
  507. package/src/session-list-model.ts +4 -0
  508. package/src/timeline/activity-rail.tsx +3 -2
  509. package/src/timeline/invoked-tool.ts +14 -4
  510. package/src/timeline/projection.ts +15 -8
  511. package/src/timeline/rolling-activity.tsx +6 -2
  512. package/src/timeline/tool-display-name.ts +2 -2
  513. package/src/timeline/tool-icon.tsx +165 -0
  514. package/src/timeline/tool-presentation.ts +207 -48
  515. package/src/timeline/tool-renderers.tsx +1 -70
  516. package/src/timeline/types.ts +2 -0
  517. package/styles/compiled.css +38 -0
  518. package/dist/chunk-22ZBT6CN.js +0 -50
  519. package/dist/chunk-22ZBT6CN.js.map +0 -1
  520. package/dist/chunk-324X6T6G.js.map +0 -1
  521. package/dist/chunk-5JZYPZ72.js.map +0 -1
  522. package/dist/chunk-6W3LF3DB.js.map +0 -1
  523. package/dist/chunk-BJIZ7PL7.js.map +0 -1
  524. package/dist/chunk-CKZW7A5S.js.map +0 -1
  525. package/dist/chunk-DDIBZA4X.js.map +0 -1
  526. package/dist/chunk-EHCUFCXM.js.map +0 -1
  527. package/dist/chunk-GZ64CASI.js.map +0 -1
  528. package/dist/chunk-I6VUUEXH.js.map +0 -1
  529. package/dist/chunk-KF3MF6FP.js.map +0 -1
  530. package/dist/chunk-MYNUBDU7.js.map +0 -1
  531. package/dist/chunk-NAWXARTY.js.map +0 -1
  532. package/dist/chunk-O77Q4NG2.js.map +0 -1
  533. package/dist/chunk-PM3OSANE.js.map +0 -1
  534. package/dist/chunk-Q262Y2YX.js.map +0 -1
  535. package/dist/chunk-Q4NM77K7.js.map +0 -1
  536. package/dist/chunk-Q4OHNGGB.js.map +0 -1
  537. package/dist/chunk-QIYBOFUV.js.map +0 -1
  538. package/dist/chunk-R25ZKOZR.js +0 -24
  539. package/dist/chunk-R25ZKOZR.js.map +0 -1
  540. package/dist/chunk-RGPYMHKI.js.map +0 -1
  541. package/dist/chunk-ROQOVH4N.js.map +0 -1
  542. package/dist/chunk-TQGJN5UZ.js.map +0 -1
  543. package/dist/chunk-V77JK73U.js.map +0 -1
  544. package/dist/chunk-VSQHDBHU.js.map +0 -1
  545. package/dist/chunk-VU2EWALC.js.map +0 -1
  546. package/dist/chunk-XFNLU7EW.js.map +0 -1
  547. package/dist/chunk-Z5WMLJKI.js.map +0 -1
  548. /package/dist/{browser-viewer-RYYQSRTC.js.map → app/components/capabilities/session-chrome-card.js.map} +0 -0
  549. /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/console-site.js.map} +0 -0
  550. /package/dist/{computer-viewer-KEDVLD42.js.map → app/lib/site-opened.js.map} +0 -0
  551. /package/dist/{embedded-new-voice-5PYRDZ6T.js.map → browser-viewer-QMCNV4RI.js.map} +0 -0
  552. /package/dist/{embedded-voice-PABC5NBD.js.map → chat-interactive-block-PMIAUXSO.js.map} +0 -0
  553. /package/dist/{chunk-GIZGNFIX.js.map → chunk-22FFOHPT.js.map} +0 -0
  554. /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
  555. /package/dist/{chunk-5POTDNQT.js.map → chunk-2NC7NZCE.js.map} +0 -0
  556. /package/dist/{chunk-ZKYYZH6L.js.map → chunk-2QBYDGWO.js.map} +0 -0
  557. /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
  558. /package/dist/{chunk-LQKKSUCR.js.map → chunk-35BC2FU2.js.map} +0 -0
  559. /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
  560. /package/dist/{chunk-S4SC5SSV.js.map → chunk-3GU7AWG7.js.map} +0 -0
  561. /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
  562. /package/dist/{chunk-OQAAI33Y.js.map → chunk-3RMKPHBL.js.map} +0 -0
  563. /package/dist/{chunk-GCGTYXJJ.js.map → chunk-3STBLX4O.js.map} +0 -0
  564. /package/dist/{chunk-YXIW7H4N.js.map → chunk-3X5FKDYQ.js.map} +0 -0
  565. /package/dist/{chunk-KTRKZRID.js.map → chunk-4GLLWX33.js.map} +0 -0
  566. /package/dist/{chunk-SD2K5ZN5.js.map → chunk-4LPA25NQ.js.map} +0 -0
  567. /package/dist/{chunk-DKCX643S.js.map → chunk-4RMN4E2Y.js.map} +0 -0
  568. /package/dist/{chunk-E5FCEDMU.js.map → chunk-4SAGYEVB.js.map} +0 -0
  569. /package/dist/{chunk-HTT3FB7T.js.map → chunk-4VK2R5QC.js.map} +0 -0
  570. /package/dist/{chunk-CKG2EG62.js.map → chunk-4XQC7VLT.js.map} +0 -0
  571. /package/dist/{chunk-IVOA3DXA.js.map → chunk-4YXAQMTD.js.map} +0 -0
  572. /package/dist/{chunk-HOJGAJAB.js.map → chunk-52WK2GGK.js.map} +0 -0
  573. /package/dist/{chunk-NYZQ7LO7.js.map → chunk-552UYIQ7.js.map} +0 -0
  574. /package/dist/{chunk-LEXPBQ56.js.map → chunk-5DSKMG2I.js.map} +0 -0
  575. /package/dist/{chunk-WNG757ID.js.map → chunk-5FA455GR.js.map} +0 -0
  576. /package/dist/{chunk-MNWQAYY3.js.map → chunk-5FEN3KYH.js.map} +0 -0
  577. /package/dist/{chunk-OSVHU2WU.js.map → chunk-5JHRMUAZ.js.map} +0 -0
  578. /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
  579. /package/dist/{chunk-GFUUFM2O.js.map → chunk-5W6ZDKRR.js.map} +0 -0
  580. /package/dist/{chunk-NDETTZQA.js.map → chunk-5W7KJ5NQ.js.map} +0 -0
  581. /package/dist/{chunk-Q35YZVDZ.js.map → chunk-5Y2FPLZE.js.map} +0 -0
  582. /package/dist/{chunk-F3NERYBQ.js.map → chunk-62VER7O4.js.map} +0 -0
  583. /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
  584. /package/dist/{chunk-WUHB422G.js.map → chunk-73WI7FL2.js.map} +0 -0
  585. /package/dist/{chunk-QECZVL7S.js.map → chunk-7FJMRJDG.js.map} +0 -0
  586. /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
  587. /package/dist/{chunk-XVM566II.js.map → chunk-7KIENXRE.js.map} +0 -0
  588. /package/dist/{chunk-CBY5CXBD.js.map → chunk-7NPCEBZE.js.map} +0 -0
  589. /package/dist/{chunk-46VBQG2D.js.map → chunk-7P4AQMGA.js.map} +0 -0
  590. /package/dist/{chunk-S7PVL7XH.js.map → chunk-A4BD4ZVB.js.map} +0 -0
  591. /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
  592. /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
  593. /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
  594. /package/dist/{chunk-P5WABK2H.js.map → chunk-BCM7C3MJ.js.map} +0 -0
  595. /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
  596. /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
  597. /package/dist/{chunk-3XOISKZC.js.map → chunk-BXQYAAVE.js.map} +0 -0
  598. /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
  599. /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
  600. /package/dist/{chunk-GTQ3SNEI.js.map → chunk-CD3MO3IC.js.map} +0 -0
  601. /package/dist/{chunk-WSMYOLHG.js.map → chunk-CDEXRJB6.js.map} +0 -0
  602. /package/dist/{chunk-3GLAPCVI.js.map → chunk-CFFNT2OY.js.map} +0 -0
  603. /package/dist/{chunk-FUSFVUIJ.js.map → chunk-CMLJSF2F.js.map} +0 -0
  604. /package/dist/{chunk-O4DYOSOL.js.map → chunk-CP7ZQHBW.js.map} +0 -0
  605. /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
  606. /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
  607. /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
  608. /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
  609. /package/dist/{chunk-4EAF3HSD.js.map → chunk-EJ7WARW7.js.map} +0 -0
  610. /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
  611. /package/dist/{chunk-OOEO4MKY.js.map → chunk-EPWD4KRA.js.map} +0 -0
  612. /package/dist/{chunk-V5RJAWRP.js.map → chunk-EQE3MNQN.js.map} +0 -0
  613. /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
  614. /package/dist/{chunk-OO2T63BY.js.map → chunk-EYS4ZOF5.js.map} +0 -0
  615. /package/dist/{chunk-IC7KNOBB.js.map → chunk-FDAV72IX.js.map} +0 -0
  616. /package/dist/{chunk-AG7VGUIW.js.map → chunk-FFNPUSVO.js.map} +0 -0
  617. /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
  618. /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
  619. /package/dist/{chunk-ZHFKMMOT.js.map → chunk-FTX5CNHA.js.map} +0 -0
  620. /package/dist/{chunk-KYBALSWW.js.map → chunk-FWOBNL2A.js.map} +0 -0
  621. /package/dist/{chunk-HJ5XWW62.js.map → chunk-FWYEZ3LE.js.map} +0 -0
  622. /package/dist/{chunk-WSLPZ43N.js.map → chunk-G4HQUBO4.js.map} +0 -0
  623. /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
  624. /package/dist/{chunk-G3S2F35T.js.map → chunk-GHHM6WN4.js.map} +0 -0
  625. /package/dist/{chunk-OANSIX34.js.map → chunk-GRSODLVO.js.map} +0 -0
  626. /package/dist/{chunk-EU6XSQFM.js.map → chunk-GXW2I2M2.js.map} +0 -0
  627. /package/dist/{chunk-4246UYVG.js.map → chunk-GZS37O3G.js.map} +0 -0
  628. /package/dist/{chunk-Y7WMW74G.js.map → chunk-HQWVDQXW.js.map} +0 -0
  629. /package/dist/{chunk-YTZQV2DD.js.map → chunk-HU6JTNWF.js.map} +0 -0
  630. /package/dist/{chunk-QRVNI5V6.js.map → chunk-I6KIQKU6.js.map} +0 -0
  631. /package/dist/{chunk-BNUPYHHZ.js.map → chunk-IDXTASGN.js.map} +0 -0
  632. /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
  633. /package/dist/{chunk-VUHPA3XQ.js.map → chunk-ITX2TB4K.js.map} +0 -0
  634. /package/dist/{chunk-ETCB6SUJ.js.map → chunk-J22HD2PB.js.map} +0 -0
  635. /package/dist/{chunk-U47YDYLQ.js.map → chunk-J5MEDX7C.js.map} +0 -0
  636. /package/dist/{chunk-6VQTHC4W.js.map → chunk-J7FBBLHF.js.map} +0 -0
  637. /package/dist/{chunk-QZRDCFHI.js.map → chunk-JM4HQPAI.js.map} +0 -0
  638. /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
  639. /package/dist/{chunk-XWWXIZFP.js.map → chunk-JO6R5EXF.js.map} +0 -0
  640. /package/dist/{chunk-MM7OKOTE.js.map → chunk-JQCGPTZ6.js.map} +0 -0
  641. /package/dist/{chunk-KNFDWNCH.js.map → chunk-JXT5QDJC.js.map} +0 -0
  642. /package/dist/{chunk-OR37STQZ.js.map → chunk-KEXYBG7Q.js.map} +0 -0
  643. /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
  644. /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
  645. /package/dist/{chunk-C535KSTY.js.map → chunk-LF5CBAOS.js.map} +0 -0
  646. /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
  647. /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
  648. /package/dist/{chunk-H5WGWAYX.js.map → chunk-LT4J7RHI.js.map} +0 -0
  649. /package/dist/{chunk-DSGMYES6.js.map → chunk-MCTTONOW.js.map} +0 -0
  650. /package/dist/{chunk-IGHELZI7.js.map → chunk-MIECLOQC.js.map} +0 -0
  651. /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
  652. /package/dist/{chunk-RKILMLA7.js.map → chunk-MXLKI7BI.js.map} +0 -0
  653. /package/dist/{chunk-45WYYFP6.js.map → chunk-N3ZP4IDU.js.map} +0 -0
  654. /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
  655. /package/dist/{chunk-UWJ5P5CU.js.map → chunk-NEK4WB5P.js.map} +0 -0
  656. /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
  657. /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
  658. /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
  659. /package/dist/{chunk-D3RK3NGM.js.map → chunk-PCFK7HKD.js.map} +0 -0
  660. /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
  661. /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
  662. /package/dist/{chunk-HGMWMK5K.js.map → chunk-PO3BH3KQ.js.map} +0 -0
  663. /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
  664. /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
  665. /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
  666. /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
  667. /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
  668. /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
  669. /package/dist/{chunk-HDHK3SXK.js.map → chunk-RFLYID6H.js.map} +0 -0
  670. /package/dist/{chunk-VMFID36H.js.map → chunk-RQNZDTKT.js.map} +0 -0
  671. /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
  672. /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
  673. /package/dist/{chunk-PFKTGZKE.js.map → chunk-SY2AAZNB.js.map} +0 -0
  674. /package/dist/{chunk-DFZMKCVP.js.map → chunk-TIQPKOFW.js.map} +0 -0
  675. /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
  676. /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
  677. /package/dist/{chunk-QM5H4FPT.js.map → chunk-TV6BWONY.js.map} +0 -0
  678. /package/dist/{chunk-EDFJBX3V.js.map → chunk-U6MPB3K6.js.map} +0 -0
  679. /package/dist/{chunk-TZD3U2S5.js.map → chunk-ULJAOMJA.js.map} +0 -0
  680. /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
  681. /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
  682. /package/dist/{chunk-OBQVTCTW.js.map → chunk-UYNCMZX5.js.map} +0 -0
  683. /package/dist/{chunk-KZHW27BV.js.map → chunk-V4QZ7UBK.js.map} +0 -0
  684. /package/dist/{chunk-NEVRLD77.js.map → chunk-VH5EGTH2.js.map} +0 -0
  685. /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
  686. /package/dist/{chunk-H6WWEKEV.js.map → chunk-WCMG4HYI.js.map} +0 -0
  687. /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
  688. /package/dist/{chunk-VW3BBTMA.js.map → chunk-WKHUZIOW.js.map} +0 -0
  689. /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
  690. /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
  691. /package/dist/{chunk-Z2DAWUO3.js.map → chunk-XMNUZUUA.js.map} +0 -0
  692. /package/dist/{chunk-GAIM5RNE.js.map → chunk-XN7NSPE6.js.map} +0 -0
  693. /package/dist/{chunk-FLGUVRR7.js.map → chunk-Y5BSA3I7.js.map} +0 -0
  694. /package/dist/{chunk-QILLL4JE.js.map → chunk-YEROLKOA.js.map} +0 -0
  695. /package/dist/{chunk-NDF3SH3X.js.map → chunk-YJPKDRI2.js.map} +0 -0
  696. /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
  697. /package/dist/{chunk-AD22P5X3.js.map → chunk-YXA2EKV3.js.map} +0 -0
  698. /package/dist/{chunk-FDNJVZRE.js.map → chunk-YYCOSTUU.js.map} +0 -0
  699. /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
  700. /package/dist/{chunk-BJW7G6EF.js.map → chunk-Z7IGO5EA.js.map} +0 -0
  701. /package/dist/{chunk-N7JKT4ZU.js.map → chunk-ZEIFJ6PX.js.map} +0 -0
  702. /package/dist/{chunk-VRGOOVDB.js.map → chunk-ZVVT72MT.js.map} +0 -0
  703. /package/dist/{model-policy-picker-menu-CURJ247L.js.map → computer-viewer-25AJIDYA.js.map} +0 -0
  704. /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-new-voice-RZZEJT6M.js.map} +0 -0
  705. /package/dist/{session-realtime-2XIB254N.js.map → embedded-voice-6OKSSPLW.js.map} +0 -0
  706. /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
  707. /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
  708. /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-KHNYNY2J.js.map} +0 -0
  709. /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-AXEDJHBP.js.map} +0 -0
  710. /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-AV4ZBXRC.js.map} +0 -0
@@ -5,12 +5,12 @@ import {
5
5
  DocumentProjectionArtifactSurface,
6
6
  DocumentProjectionEditor,
7
7
  EditableDocumentArtifactSurface
8
- } from "./chunk-UWJ5P5CU.js";
8
+ } from "./chunk-NEK4WB5P.js";
9
9
  import "./chunk-2DDJ6YH6.js";
10
- import "./chunk-6JKZILLF.js";
11
- import "./chunk-ZOC3OP6F.js";
10
+ import "./chunk-3RQUWFZT.js";
11
+ import "./chunk-CCR33J7L.js";
12
12
  import "./chunk-TXS65BB2.js";
13
- import "./chunk-5JZYPZ72.js";
13
+ import "./chunk-JFK7NTEA.js";
14
14
  export {
15
15
  DocumentArtifactSurface,
16
16
  DocumentEditor,
@@ -5,12 +5,12 @@ import {
5
5
  PresentationEditor,
6
6
  PresentationProjectionArtifactSurface,
7
7
  PresentationProjectionEditor
8
- } from "./chunk-OR37STQZ.js";
8
+ } from "./chunk-KEXYBG7Q.js";
9
9
  import "./chunk-2DDJ6YH6.js";
10
- import "./chunk-6JKZILLF.js";
11
- import "./chunk-ZOC3OP6F.js";
10
+ import "./chunk-3RQUWFZT.js";
11
+ import "./chunk-CCR33J7L.js";
12
12
  import "./chunk-TXS65BB2.js";
13
- import "./chunk-5JZYPZ72.js";
13
+ import "./chunk-JFK7NTEA.js";
14
14
  export {
15
15
  EditablePresentationArtifactSurface,
16
16
  PresentationArtifactSurface,
@@ -5,11 +5,11 @@ import {
5
5
  SpreadsheetArtifactSurface,
6
6
  SpreadsheetGrid,
7
7
  SpreadsheetProjectionGrid
8
- } from "./chunk-QM5H4FPT.js";
9
- import "./chunk-6JKZILLF.js";
10
- import "./chunk-ZOC3OP6F.js";
8
+ } from "./chunk-TV6BWONY.js";
9
+ import "./chunk-3RQUWFZT.js";
10
+ import "./chunk-CCR33J7L.js";
11
11
  import "./chunk-TXS65BB2.js";
12
- import "./chunk-5JZYPZ72.js";
12
+ import "./chunk-JFK7NTEA.js";
13
13
  export {
14
14
  EditableSpreadsheetArtifactSurface,
15
15
  EditableSpreadsheetGrid,
package/dist/artifacts.js CHANGED
@@ -6,43 +6,60 @@ import {
6
6
  EditableArtifactWorkbenchHost,
7
7
  SessionArtifactViewer,
8
8
  SiteView
9
- } from "./chunk-S4SC5SSV.js";
9
+ } from "./chunk-3GU7AWG7.js";
10
10
  import {
11
11
  ArtifactSandbox,
12
12
  ChatInteractiveBlock,
13
13
  DeferredChatMedia
14
- } from "./chunk-IVOA3DXA.js";
14
+ } from "./chunk-4YXAQMTD.js";
15
15
  import {
16
- EditableSpreadsheetArtifactSurface,
17
- EditableSpreadsheetGrid,
18
- SpreadsheetArtifactSurface,
19
- SpreadsheetGrid,
20
- SpreadsheetProjectionGrid
21
- } from "./chunk-QM5H4FPT.js";
16
+ EditablePresentationArtifactSurface,
17
+ PresentationArtifactSurface,
18
+ PresentationEditor,
19
+ PresentationProjectionArtifactSurface,
20
+ PresentationProjectionEditor
21
+ } from "./chunk-KEXYBG7Q.js";
22
22
  import {
23
23
  DocumentArtifactSurface,
24
24
  DocumentEditor,
25
25
  DocumentProjectionArtifactSurface,
26
26
  DocumentProjectionEditor,
27
27
  EditableDocumentArtifactSurface
28
- } from "./chunk-UWJ5P5CU.js";
29
- import {
30
- EditablePresentationArtifactSurface,
31
- PresentationArtifactSurface,
32
- PresentationEditor,
33
- PresentationProjectionArtifactSurface,
34
- PresentationProjectionEditor
35
- } from "./chunk-OR37STQZ.js";
28
+ } from "./chunk-NEK4WB5P.js";
36
29
  import "./chunk-2DDJ6YH6.js";
37
30
  import {
38
- ArtifactSurface
39
- } from "./chunk-6JKZILLF.js";
31
+ inlineHtmlDocument
32
+ } from "./chunk-IGFZFLI2.js";
33
+ import {
34
+ PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
35
+ PublishedHtmlArtifactFrame,
36
+ openGeniSiteBridgePortFromBootstrap,
37
+ publishedHtmlArtifactDocument
38
+ } from "./chunk-FSP334UU.js";
39
+ import "./chunk-IOYHDEP3.js";
40
40
  import {
41
41
  PatchApplyCommand,
42
42
  useRetainedImageObjectUrl
43
- } from "./chunk-3KVWXKD6.js";
44
- import "./chunk-IGVL3ELX.js";
43
+ } from "./chunk-LQ47YL6E.js";
45
44
  import "./chunk-VHB3E6PT.js";
45
+ import "./chunk-PEHTX3V7.js";
46
+ import "./chunk-IGVL3ELX.js";
47
+ import "./chunk-TVQCDDSZ.js";
48
+ import {
49
+ isPatchFilename,
50
+ isRetainedImageContentType
51
+ } from "./chunk-WNDTLK44.js";
52
+ import "./chunk-LEKBNKLD.js";
53
+ import {
54
+ EditableSpreadsheetArtifactSurface,
55
+ EditableSpreadsheetGrid,
56
+ SpreadsheetArtifactSurface,
57
+ SpreadsheetGrid,
58
+ SpreadsheetProjectionGrid
59
+ } from "./chunk-TV6BWONY.js";
60
+ import {
61
+ ArtifactSurface
62
+ } from "./chunk-3RQUWFZT.js";
46
63
  import {
47
64
  ArtifactBadge,
48
65
  ArtifactButton,
@@ -57,26 +74,9 @@ import {
57
74
  artifactLoadErrorMessage,
58
75
  artifactLoadErrorView,
59
76
  useArtifactLabels
60
- } from "./chunk-ZOC3OP6F.js";
61
- import {
62
- PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
63
- PublishedHtmlArtifactFrame,
64
- openGeniSiteBridgePortFromBootstrap,
65
- publishedHtmlArtifactDocument
66
- } from "./chunk-KBF3SE7G.js";
67
- import {
68
- isPatchFilename,
69
- isRetainedImageContentType
70
- } from "./chunk-ANHUMDJX.js";
71
- import "./chunk-STUCI6QA.js";
72
- import {
73
- inlineHtmlDocument
74
- } from "./chunk-IGFZFLI2.js";
75
- import "./chunk-IOYHDEP3.js";
76
- import "./chunk-PEHTX3V7.js";
77
- import "./chunk-TVQCDDSZ.js";
77
+ } from "./chunk-CCR33J7L.js";
78
78
  import "./chunk-TXS65BB2.js";
79
- import "./chunk-5JZYPZ72.js";
79
+ import "./chunk-JFK7NTEA.js";
80
80
  export {
81
81
  ArtifactBadge,
82
82
  ArtifactButton,
@@ -2,20 +2,22 @@
2
2
  import {
3
3
  BrowserViewer,
4
4
  staleBrowserEndRetryDelayMs
5
- } from "./chunk-EHCUFCXM.js";
6
- import "./chunk-ROQOVH4N.js";
7
- import "./chunk-PEHTX3V7.js";
5
+ } from "./chunk-RYSRFAHN.js";
6
+ import "./chunk-4HEXNAFI.js";
8
7
  import "./chunk-ZUWF4NF7.js";
9
- import "./chunk-NAWXARTY.js";
8
+ import "./chunk-TNEZNMSN.js";
9
+ import "./chunk-PEHTX3V7.js";
10
+ import "./chunk-XV6ZYRHK.js";
11
+ import "./chunk-IGVL3ELX.js";
12
+ import "./chunk-2KO2G3RI.js";
10
13
  import "./chunk-CM7LVUKC.js";
11
14
  import "./chunk-TVQCDDSZ.js";
12
15
  import "./chunk-SJGAHTY5.js";
13
16
  import "./chunk-4NHJ6EXL.js";
14
- import "./chunk-TNEZNMSN.js";
15
17
  import "./chunk-TXS65BB2.js";
16
- import "./chunk-5JZYPZ72.js";
18
+ import "./chunk-JFK7NTEA.js";
17
19
  export {
18
20
  BrowserViewer,
19
21
  staleBrowserEndRetryDelayMs
20
22
  };
21
- //# sourceMappingURL=browser-viewer-RYYQSRTC.js.map
23
+ //# sourceMappingURL=browser-viewer-QMCNV4RI.js.map
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import {
3
3
  ChatInteractiveBlock
4
- } from "./chunk-IVOA3DXA.js";
5
- import "./chunk-VHB3E6PT.js";
6
- import "./chunk-ZOC3OP6F.js";
7
- import "./chunk-KBF3SE7G.js";
4
+ } from "./chunk-4YXAQMTD.js";
8
5
  import "./chunk-IGFZFLI2.js";
6
+ import "./chunk-FSP334UU.js";
9
7
  import "./chunk-IOYHDEP3.js";
8
+ import "./chunk-VHB3E6PT.js";
9
+ import "./chunk-CCR33J7L.js";
10
10
  import "./chunk-TXS65BB2.js";
11
- import "./chunk-5JZYPZ72.js";
11
+ import "./chunk-JFK7NTEA.js";
12
12
  export {
13
13
  ChatInteractiveBlock
14
14
  };
15
- //# sourceMappingURL=chat-interactive-block-ABCRKXJ4.js.map
15
+ //# sourceMappingURL=chat-interactive-block-PMIAUXSO.js.map
@@ -1,11 +1,11 @@
1
1
  "use client";
2
+ import {
3
+ openGeniGroupPresentation
4
+ } from "./chunk-PO3BH3KQ.js";
2
5
  import {
3
6
  capabilityGroupSelection,
4
7
  sessionCapabilityGroupsFor
5
8
  } from "./chunk-4NTPH5M6.js";
6
- import {
7
- openGeniGroupPresentation
8
- } from "./chunk-HGMWMK5K.js";
9
9
  import {
10
10
  cn
11
11
  } from "./chunk-A3MTTRCX.js";
@@ -15,23 +15,23 @@ import {
15
15
  ComposerMenuRowsSkeleton,
16
16
  lazyComposerPanel
17
17
  } from "./chunk-O2LGEYG4.js";
18
- import {
19
- isComposerConnector
20
- } from "./chunk-L6Y4ALSM.js";
21
18
  import {
22
19
  DropdownMenu,
23
20
  DropdownMenuContent,
24
21
  DropdownMenuTrigger
25
22
  } from "./chunk-TREHTIBD.js";
26
23
  import {
27
- Button
28
- } from "./chunk-HMU5IELG.js";
24
+ isComposerConnector
25
+ } from "./chunk-L6Y4ALSM.js";
29
26
  import {
30
27
  ModelPolicyPickerMenu
31
- } from "./chunk-5POTDNQT.js";
28
+ } from "./chunk-2NC7NZCE.js";
29
+ import {
30
+ Button
31
+ } from "./chunk-HMU5IELG.js";
32
32
  import {
33
33
  ModelPolicyPicker
34
- } from "./chunk-AG7VGUIW.js";
34
+ } from "./chunk-FFNPUSVO.js";
35
35
 
36
36
  // src/app/components/pickers.tsx
37
37
  import { ChevronDownIcon, PlugIcon } from "lucide-react";
@@ -175,4 +175,4 @@ export {
175
175
  sessionToolSelectionSummary,
176
176
  SessionToolPicker
177
177
  };
178
- //# sourceMappingURL=chunk-GIZGNFIX.js.map
178
+ //# sourceMappingURL=chunk-22FFOHPT.js.map
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ // src/components/queue-draft-policy.ts
4
+ function requestQueueDraftEdit(composer, confirmReplacement, editImmediately) {
5
+ if (composer.hasDraftContent()) {
6
+ confirmReplacement();
7
+ } else {
8
+ editImmediately();
9
+ }
10
+ }
11
+
12
+ export {
13
+ requestQueueDraftEdit
14
+ };
15
+ //# sourceMappingURL=chunk-22GTC4MZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/queue-draft-policy.ts"],"sourcesContent":["import type { ComposerState } from \"../hooks/use-composer\";\n\n/**\n * Decide whether checking out a queued prompt would replace current composer\n * content. `hasDraftContent` reads the synchronous draft refs, so this stays\n * correct even when a controlled input update has not rendered yet.\n */\nexport function requestQueueDraftEdit(\n composer: Pick<ComposerState, \"hasDraftContent\">,\n confirmReplacement: () => void,\n editImmediately: () => void,\n): void {\n if (composer.hasDraftContent()) {\n confirmReplacement();\n } else {\n editImmediately();\n }\n}\n"],"mappings":";;;AAOO,SAAS,sBACd,UACA,oBACA,iBACM;AACN,MAAI,SAAS,gBAAgB,GAAG;AAC9B,uBAAmB;AAAA,EACrB,OAAO;AACL,oBAAgB;AAAA,EAClB;AACF;","names":[]}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import {
3
- sessionDisplayStatus
4
- } from "./chunk-DHXKEJBH.js";
5
2
  import {
6
3
  findPickerRow
7
4
  } from "./chunk-CFEFYPNR.js";
5
+ import {
6
+ sessionDisplayStatus
7
+ } from "./chunk-DHXKEJBH.js";
8
8
 
9
9
  // src/session-list-model.ts
10
10
  import {
@@ -13,6 +13,90 @@ import {
13
13
  sessionTitleIsPending
14
14
  } from "@opengeni/sdk";
15
15
  import { modelDisplayName } from "@opengeni/sdk/model-display";
16
+
17
+ // src/app/lib/actions/rank.ts
18
+ var COMBINING_MARKS = /[\u0300-\u036f]/g;
19
+ var LOOSE_MATCH_BELOW = 400;
20
+ function foldForSearch(value) {
21
+ return value.normalize("NFD").replace(COMBINING_MARKS, "").toLowerCase().replace(/\s+/g, " ").trim();
22
+ }
23
+ function wordStarts(label) {
24
+ const starts = [];
25
+ for (let index = 0; index < label.length; index++) {
26
+ const previous = index === 0 ? " " : label[index - 1];
27
+ const current = label[index];
28
+ if (/[\p{L}\p{N}]/u.test(current) && !/[\p{L}\p{N}]/u.test(previous)) starts.push(index);
29
+ }
30
+ return starts;
31
+ }
32
+ function subsequenceScore(label, query) {
33
+ const startList = wordStarts(label);
34
+ const starts = new Set(startList);
35
+ const wordOf = (index) => {
36
+ let word = -1;
37
+ for (const start of startList) {
38
+ if (start > index) break;
39
+ word++;
40
+ }
41
+ return word;
42
+ };
43
+ let position = 0;
44
+ let score = 0;
45
+ let previous = -2;
46
+ const fits = (found) => found === previous + 1 || starts.has(found) || previous >= 0 && wordOf(found) === wordOf(previous);
47
+ for (const character of query) {
48
+ if (character === " ") continue;
49
+ let found = label.indexOf(character, position);
50
+ while (found >= 0 && !fits(found)) found = label.indexOf(character, found + 1);
51
+ if (found < 0) return null;
52
+ score += found === previous + 1 ? 3 : starts.has(found) ? 2 : 0;
53
+ previous = found;
54
+ position = found + 1;
55
+ }
56
+ return score;
57
+ }
58
+ function rankLabel(rawLabel, rawQuery) {
59
+ const query = foldForSearch(rawQuery);
60
+ if (!query) return 0;
61
+ const label = foldForSearch(rawLabel);
62
+ if (!label) return null;
63
+ const lengthPenalty = Math.min(label.length, 200) / 1e3;
64
+ if (label === query) return 1e3;
65
+ if (label.startsWith(query)) return 900 - lengthPenalty;
66
+ const at = label.indexOf(query);
67
+ if (at >= 0) {
68
+ const starts = wordStarts(label);
69
+ if (starts.includes(at)) return 800 - at / 100 - lengthPenalty;
70
+ return 600 - at / 100 - lengthPenalty;
71
+ }
72
+ const words = query.split(" ").filter(Boolean);
73
+ if (words.length > 1 && words.every((word) => label.includes(word))) {
74
+ const starts = wordStarts(label);
75
+ const wordStartHits = words.filter(
76
+ (word) => starts.some((start) => label.startsWith(word, start))
77
+ ).length;
78
+ return 500 + wordStartHits / words.length * 50 - lengthPenalty;
79
+ }
80
+ if (query.replace(/ /g, "").length < 2) return null;
81
+ const subsequence = subsequenceScore(label, query);
82
+ if (subsequence === null) return null;
83
+ const letters = query.replace(/ /g, "").length;
84
+ if (subsequence < letters) return null;
85
+ return 100 + Math.min(subsequence, 200) - lengthPenalty * 10;
86
+ }
87
+ function rankWithKeywords(label, keywords, query) {
88
+ let best = rankLabel(label, query);
89
+ for (const keyword of keywords ?? []) {
90
+ const rank = rankLabel(keyword, query);
91
+ if (rank !== null) {
92
+ const discounted = rank - 150;
93
+ if (best === null || discounted > best) best = discounted;
94
+ }
95
+ }
96
+ return best;
97
+ }
98
+
99
+ // src/session-list-model.ts
16
100
  function sessionDisplayTitle(session) {
17
101
  return "displayTitle" in session ? session.displayTitle : deriveSessionDisplayTitle(session);
18
102
  }
@@ -261,6 +345,10 @@ function groupSessionsByProject(sessions, projects, options = {}) {
261
345
  }
262
346
 
263
347
  export {
348
+ LOOSE_MATCH_BELOW,
349
+ foldForSearch,
350
+ rankLabel,
351
+ rankWithKeywords,
264
352
  sessionDisplayTitle,
265
353
  SESSION_TITLE_MAX_LENGTH,
266
354
  sessionRenameSeed,
@@ -289,4 +377,4 @@ export {
289
377
  homeSessionSections,
290
378
  groupSessionsByProject
291
379
  };
292
- //# sourceMappingURL=chunk-Z5WMLJKI.js.map
380
+ //# sourceMappingURL=chunk-22JFMNMF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/session-list-model.ts","../src/app/lib/actions/rank.ts"],"sourcesContent":["// Pure session-list presentation shared by the web app (rail and recent\n// sessions) and native renderers: relative-time labels, recency bucketing\n// (Today / Yesterday / Previous 7 days / Older), the running-first ordering\n// rule, status tones and the compact row metadata. No DOM, no React.\nimport {\n deriveAutomaticSessionTitlePreview,\n deriveSessionDisplayTitle,\n sessionTitleIsPending,\n type ClientModel,\n type Session,\n type SessionListEntry,\n type SessionStatus,\n} from \"@opengeni/sdk\";\nimport { modelDisplayName } from \"@opengeni/sdk/model-display\";\nimport { findPickerRow, type PickerModelRow } from \"./model-policy\";\nimport { sessionDisplayStatus, type SessionDisplayStatus } from \"./session-status-model\";\nimport { type OpenGeniText } from \"./messages/runtime\";\n\n// Title ranking shared with the web command menu, so chat search on every\n// surface orders matches the same way.\nexport { foldForSearch, LOOSE_MATCH_BELOW, rankLabel } from \"./app/lib/actions/rank\";\n\n/** A list row may be a compact page entry or a complete session response. */\nexport type SessionListRow = Session | SessionListEntry;\n\n/**\n * The title shown for a session: durable agent/user metadata once available,\n * otherwise a bounded opening-prompt preview while automatic naming is still\n * pending. Every list, header and row reads identically.\n */\nexport function sessionDisplayTitle(session: SessionListRow): string {\n return \"displayTitle\" in session ? session.displayTitle : deriveSessionDisplayTitle(session);\n}\n\n/** The maximum length a session title may be renamed to. */\nexport const SESSION_TITLE_MAX_LENGTH = 200;\n\n/**\n * The value a rename editor seeds from. A safe provisional prompt preview is\n * editable because it is also what the user sees; the UUID-derived reference\n * remains an empty draft rather than becoming an accidental rename.\n */\nexport function sessionRenameSeed(session: SessionListRow): string {\n if (\"renameSeed\" in session) return session.renameSeed;\n if (!sessionTitleIsPending(session)) {\n return session.title?.trim() || \"\";\n }\n return deriveAutomaticSessionTitlePreview(session.initialMessage) ?? \"\";\n}\n\n/**\n * Resolve a submitted draft against the current display title. Returns the\n * trimmed title to persist, or `null` when the edit is a no-op (empty,\n * unchanged from what is already shown, or still equal to the value that\n * seeded this edit) and should simply cancel.\n */\nexport function resolveRenameSubmission(\n draft: string,\n display: string,\n editSeed?: string,\n): string | null {\n const next = draft.trim();\n if (!next || next === display || (editSeed !== undefined && next === editSeed.trim())) {\n return null;\n }\n return next;\n}\n\nexport type SessionRecencyGroup = \"today\" | \"yesterday\" | \"previous7\" | \"older\";\n\nexport const SESSION_GROUP_LABELS = (t: OpenGeniText): Record<SessionRecencyGroup, string> => ({\n today: t(\"sessionListModel.today\"),\n yesterday: t(\"sessionListModel.yesterday\"),\n previous7: t(\"sessionListModel.previous7Days\"),\n older: t(\"sessionListModel.older\"),\n});\n\n/** The render order of recency groups, top → bottom. */\nexport const SESSION_GROUP_ORDER: SessionRecencyGroup[] = [\n \"today\",\n \"yesterday\",\n \"previous7\",\n \"older\",\n];\n\n/** Live states that earn the pinned-to-top, breathing-dot treatment. */\nconst RUNNING_STATUSES = new Set<SessionStatus>([\n \"running\",\n \"queued\",\n \"waiting_capacity\",\n \"recovering\",\n \"requires_action\",\n]);\n\nexport function isRunningStatus(status: SessionStatus): boolean {\n return RUNNING_STATUSES.has(status);\n}\n\n/** An idle session waiting on its own timer, while its control is active. */\nexport function sessionInputWait(\n session: Pick<SessionListRow, \"status\" | \"effectiveControl\" | \"inputWait\">,\n) {\n return session.status === \"idle\" && session.effectiveControl?.state === \"active\"\n ? (session.inputWait ?? null)\n : null;\n}\n\n/**\n * A schedule targeting this session can still start a run. Paused schedules\n * and one-time schedules whose time has passed are not upcoming. Servers\n * without the field keep the earlier any-schedule meaning.\n */\nexport function sessionHasUpcomingSchedule(\n session: Pick<SessionListRow, \"hasSchedules\" | \"hasUpcomingSchedules\">,\n): boolean {\n return session.hasUpcomingSchedules ?? session.hasSchedules === true;\n}\n\nexport function hasActiveEffectiveControl(session: SessionListRow): boolean {\n return (session.effectiveControl?.state ?? \"active\") === \"active\";\n}\n\nexport function isEffectivelyRunning(session: SessionListRow): boolean {\n // Background commands have their own chat indicator, not agent working status.\n return (\n hasActiveEffectiveControl(session) &&\n (isRunningStatus(session.status) || Boolean(sessionInputWait(session)))\n );\n}\n\n/** Most-recent activity timestamp for a session (updatedAt, then createdAt). */\nexport function sessionActivityTime(session: SessionListRow): number {\n const updated = Date.parse(session.updatedAt);\n if (!Number.isNaN(updated)) {\n return updated;\n }\n const created = Date.parse(session.createdAt);\n return Number.isNaN(created) ? 0 : created;\n}\n\n/** Deterministic newest-first ordering for every flat or forest session list. */\nexport function compareSessionActivity(left: SessionListRow, right: SessionListRow): number {\n return sessionActivityTime(right) - sessionActivityTime(left) || right.id.localeCompare(left.id);\n}\n\n/** Deterministic personal-pin order: newest pin first, then descending id. */\nexport function compareSessionPins(left: SessionListRow, right: SessionListRow): number {\n const leftPinnedAt = Date.parse(left.pinnedAt ?? \"\");\n const rightPinnedAt = Date.parse(right.pinnedAt ?? \"\");\n const leftTime = Number.isNaN(leftPinnedAt) ? 0 : leftPinnedAt;\n const rightTime = Number.isNaN(rightPinnedAt) ? 0 : rightPinnedAt;\n return rightTime - leftTime || right.id.localeCompare(left.id);\n}\n\n/** Split explicit personal pins from ordinary rows without changing the input. */\nexport function partitionPinnedSessions<T extends SessionListRow>(\n sessions: T[],\n): {\n pinned: T[];\n ordinary: T[];\n} {\n const pinned: T[] = [];\n const ordinary: T[] = [];\n for (const session of sessions) {\n (session.pinned ? pinned : ordinary).push(session);\n }\n return { pinned: pinned.sort(compareSessionPins), ordinary };\n}\n\n/** A pin-aware list as the session page returns it: the person's pins, then ordinary rows. */\nexport type PinnedSessionLists<T extends SessionListRow> = {\n pinned: T[];\n sessions: T[];\n};\n\n/** The personal pin fields a pin change or a newer read carries. */\nexport type SessionPinProjection = Pick<Session, \"id\"> &\n Partial<Pick<Session, \"pinned\" | \"pinnedAt\" | \"pinVersion\">>;\n\n/**\n * Apply one session's pin state to a pin-aware list: the row moves between the\n * pinned section (newest pin first) and the ordinary rows (newest activity\n * first). Pin revisions are monotonic, so a projection older than the row\n * already shown (a slow response after a newer change) leaves the lists as\n * they are, unless it is `authoritative` (a fresh read after a failed change,\n * which replaces an optimistic revision). A session in neither list is left out.\n */\nexport function applySessionPinToLists<T extends SessionListRow>(\n lists: PinnedSessionLists<T>,\n projection: SessionPinProjection,\n options: { authoritative?: boolean } = {},\n): PinnedSessionLists<T> {\n const current =\n lists.pinned.find((row) => row.id === projection.id) ??\n lists.sessions.find((row) => row.id === projection.id);\n if (!current) return lists;\n const pinVersion = projection.pinVersion ?? current.pinVersion ?? 0;\n if (!options.authoritative && pinVersion < (current.pinVersion ?? 0)) return lists;\n const pinned = Boolean(projection.pinned);\n const next = {\n ...current,\n pinned,\n pinnedAt: pinned ? (projection.pinnedAt ?? current.pinnedAt ?? null) : null,\n pinVersion,\n } as T;\n const others = (rows: T[]) => rows.filter((row) => row.id !== projection.id);\n return pinned\n ? {\n pinned: [...others(lists.pinned), next].sort(compareSessionPins),\n sessions: others(lists.sessions),\n }\n : {\n pinned: others(lists.pinned),\n sessions: [...others(lists.sessions), next].sort(compareSessionActivity),\n };\n}\n\n/**\n * Which recency bucket a timestamp falls into, relative to `now`. \"Today\" and\n * \"Yesterday\" are calendar-local; \"Previous 7 days\" is the rest of the trailing\n * week; everything earlier is \"Older\".\n */\nexport function recencyGroupFor(timestampMs: number, now: Date = new Date()): SessionRecencyGroup {\n const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();\n const startOfYesterday = startOfToday - 24 * 60 * 60 * 1000;\n const startOfWeekWindow = startOfToday - 7 * 24 * 60 * 60 * 1000;\n if (timestampMs >= startOfToday) {\n return \"today\";\n }\n if (timestampMs >= startOfYesterday) {\n return \"yesterday\";\n }\n if (timestampMs >= startOfWeekWindow) {\n return \"previous7\";\n }\n return \"older\";\n}\n\nexport type SessionRecencyBucket<T extends SessionListRow = SessionListRow> = {\n group: SessionRecencyGroup;\n label: string;\n sessions: T[];\n};\n\nexport type GroupedSessions<T extends SessionListRow = SessionListRow> = {\n /** Running sessions, pinned above every recency group, most-recent first. */\n running: T[];\n /** Non-running sessions bucketed by recency (empty buckets dropped). */\n grouped: SessionRecencyBucket<T>[];\n};\n\n/**\n * Order + bucket the sessions for the rail. Running sessions are lifted into a\n * synthetic, always-first position regardless of recency (rendered with a\n * \"running\" marker); the remainder are bucketed by recency, most-recent first\n * within each bucket. Empty groups are dropped.\n */\nexport function groupSessionsForRail<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n now: Date = new Date(),\n): GroupedSessions<T> {\n const running = sessions.filter(isEffectivelyRunning).sort(compareSessionActivity);\n const rest = sessions\n .filter((session) => !isEffectivelyRunning(session))\n .sort(compareSessionActivity);\n\n const buckets = new Map<SessionRecencyGroup, T[]>();\n for (const session of rest) {\n const group = recencyGroupFor(sessionActivityTime(session), now);\n const list = buckets.get(group) ?? [];\n list.push(session);\n buckets.set(group, list);\n }\n\n const grouped: SessionRecencyBucket<T>[] = [];\n for (const group of SESSION_GROUP_ORDER) {\n const list = buckets.get(group);\n if (list && list.length > 0) {\n grouped.push({\n group,\n label: SESSION_GROUP_LABELS(t)[group],\n sessions: list,\n });\n }\n }\n return { running, grouped };\n}\n\nexport function relativeTimeLabel(t: OpenGeniText, value: string, now: Date = new Date()): string {\n const timestamp = Date.parse(value);\n if (Number.isNaN(timestamp)) {\n return \"\";\n }\n const diffSeconds = Math.max(0, Math.floor((now.getTime() - timestamp) / 1000));\n if (diffSeconds < 45) {\n return \"now\";\n }\n // 45 to 59 seconds reads as a minute, never \"0m\".\n const minutes = Math.max(1, Math.floor(diffSeconds / 60));\n if (minutes < 60) {\n return `${minutes}m`;\n }\n const hours = Math.floor(minutes / 60);\n if (hours < 24) {\n return `${hours}h`;\n }\n // Past a day, count calendar days in the viewer's time zone, like the long\n // form (\"4 days ago\"), so both read the same for the same chat.\n const days = Math.max(1, localCalendarDaysBetween(new Date(timestamp), now));\n if (days < 7) {\n return `${days}d`;\n }\n return new Date(timestamp).toLocaleDateString(t.locale, {\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction localCalendarDaysBetween(from: Date, to: Date): number {\n const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());\n const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());\n return Math.round((end - start) / 86_400_000);\n}\n\n/** Codex subscription product ids are prefixed `codex/`. */\nexport function isCodexProductModel(modelId: string): boolean {\n return modelId.startsWith(\"codex/\");\n}\n\nexport type SessionStatusTone = \"queued\" | \"running\" | \"waiting\" | \"idle\" | \"failed\" | \"cancelled\";\n\nexport const SESSION_STATUS_TONE: Record<SessionDisplayStatus, SessionStatusTone> = {\n queued: \"queued\",\n running: \"running\",\n recovering: \"running\",\n waiting_capacity: \"waiting\",\n requires_action: \"waiting\",\n blocked: \"failed\",\n idle: \"idle\",\n failed: \"failed\",\n cancelled: \"cancelled\",\n};\n\n/** The status dot of a recent-session row: a background command reads as running. */\nexport function recentSessionStatus(\n session: Pick<SessionListRow, \"status\" | \"backgroundCommandActivity\" | \"admissionBlock\">,\n): { tone: SessionStatusTone; pulse: boolean } {\n const hasBackgroundCommand = session.backgroundCommandActivity !== undefined;\n return {\n tone: hasBackgroundCommand ? \"running\" : SESSION_STATUS_TONE[sessionDisplayStatus(session)],\n pulse: hasBackgroundCommand || session.status === \"running\",\n };\n}\n\n/** A short `owner/repo` label from the session's first repository resource. */\nexport function sessionRepoLabel(session: Pick<Session, \"resources\">): string | null {\n const repo = session.resources.find((resource) => resource.kind === \"repository\");\n if (!repo || repo.kind !== \"repository\") {\n return null;\n }\n const parts = repo.uri\n .replace(/\\.git$/, \"\")\n .split(\"/\")\n .filter(Boolean);\n return parts.length >= 2 ? parts.slice(-2).join(\"/\") : (parts.at(-1) ?? null);\n}\n\nexport function recentSessionModelPresentation<TCatalog extends ClientModel>(\n modelId: string,\n catalogRows: readonly PickerModelRow<TCatalog>[],\n): {\n label: string;\n billingClass: PickerModelRow[\"billingClass\"];\n logoUrl?: string | undefined;\n} {\n const row = findPickerRow([...catalogRows], modelId);\n return {\n label: row?.label ?? modelDisplayName(modelId),\n logoUrl: row?.catalog.logoUrl,\n billingClass:\n row?.billingClass ??\n (isCodexProductModel(modelId) ? \"codex_subscription\" : \"opengeni_credits\"),\n };\n}\n\n/**\n * The home screen's recent sessions: server pins first, then running, then\n * recency buckets, capped. `sessions` keeps the all-visible-row contract, so\n * its pins are removed before recombining the explicit pinned section.\n */\nexport function recentSessionsForHome<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n pinned: T[],\n limit = 6,\n now: Date = new Date(),\n): T[] {\n // Sub-agent sessions are reached from their parent. In a workspace that runs\n // many sub-agents they would otherwise take every slot (they run often) and\n // push the person's own conversations out of the list.\n const ordinary = sessions.filter((session) => !session.pinned && !session.parentSessionId);\n const { running, grouped } = groupSessionsForRail(t, ordinary, now);\n const topLevelPinned = pinned.filter((session) => !session.parentSessionId);\n return [...topLevelPinned, ...running, ...grouped.flatMap((bucket) => bucket.sessions)].slice(\n 0,\n limit,\n );\n}\n\n/**\n * The phone home screen's chats in two sections: every pinned conversation,\n * then the most recently used others (running first, then by recency), so\n * pins never push recent work off the screen. Sub-agent sessions are reached\n * from their parent and are left out of both.\n */\nexport function homeSessionSections<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n pinned: T[],\n recentLimit = 15,\n now: Date = new Date(),\n): { pinned: T[]; recent: T[] } {\n const ordinary = sessions.filter((session) => !session.pinned && !session.parentSessionId);\n const { running, grouped } = groupSessionsForRail(t, ordinary, now);\n return {\n pinned: pinned.filter((session) => !session.parentSessionId),\n recent: [...running, ...grouped.flatMap((bucket) => bucket.sessions)].slice(0, recentLimit),\n };\n}\n\n/** One project (workspace channel) and its sessions, as the web rail groups them. */\nexport type SessionProjectSection<T extends SessionListRow = SessionListRow> = {\n /** The channel id, or \"default\" for unfiled sessions. */\n key: string;\n channelId: string | null;\n name: string;\n sessions: T[];\n};\n\n/**\n * Group top-level sessions by project in the server's project order (pinned\n * projects first), then \"Default\" for unfiled ones and those whose project no\n * longer exists. Running sessions lead each project, then the most recent.\n * Sub-agent sessions are reached from their parent, so they are left out.\n * Projects without sessions are kept only when `keepEmpty` is set.\n */\nexport function groupSessionsByProject<T extends SessionListRow & { channelId?: string | null }>(\n sessions: readonly T[],\n projects: readonly { id: string; name: string }[],\n options: { keepEmpty?: boolean } = {},\n): SessionProjectSection<T>[] {\n const known = new Set(projects.map((project) => project.id));\n const byProject = new Map<string | null, T[]>();\n for (const session of sessions) {\n if (\"parentSessionId\" in session && session.parentSessionId) continue;\n const channelId = session.channelId ?? null;\n const key = channelId !== null && known.has(channelId) ? channelId : null;\n byProject.set(key, [...(byProject.get(key) ?? []), session]);\n }\n const order = (list: T[]) =>\n [...list].sort(\n (left, right) =>\n Number(isEffectivelyRunning(right)) - Number(isEffectivelyRunning(left)) ||\n compareSessionActivity(left, right),\n );\n const sections: SessionProjectSection<T>[] = projects\n .map((project) => ({\n key: project.id,\n channelId: project.id,\n name: project.name,\n sessions: order(byProject.get(project.id) ?? []),\n }))\n .filter((section) => options.keepEmpty || section.sessions.length > 0);\n const unfiled = byProject.get(null) ?? [];\n if (unfiled.length > 0) {\n sections.push({ key: \"default\", channelId: null, name: \"Default\", sessions: order(unfiled) });\n }\n return sections;\n}\n\nexport { findPickerRow };\n","/**\n * Ranks short labels (chat titles, action names) against what someone typed.\n *\n * Higher is better; `null` means no match. Tiers, best first:\n * whole label starts with the query, a word starts with it, it appears\n * anywhere, every query word appears in some order, and finally the query's\n * letters appear in order (\"kbsh\" → \"Keyboard shortcuts\"). Within a tier,\n * shorter labels and earlier positions win. Letters-in-order matches rank below\n * `LOOSE_MATCH_BELOW`, so a list can drop them once it has real matches.\n */\n\nconst COMBINING_MARKS = /[\\u0300-\\u036f]/g;\n\n/** Ranks below this are letters-in-order guesses rather than real matches. */\nexport const LOOSE_MATCH_BELOW = 400;\n\n/** Case- and accent-insensitive form used for matching. */\nexport function foldForSearch(value: string): string {\n return value\n .normalize(\"NFD\")\n .replace(COMBINING_MARKS, \"\")\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction wordStarts(label: string): number[] {\n const starts: number[] = [];\n for (let index = 0; index < label.length; index++) {\n const previous = index === 0 ? \" \" : label[index - 1]!;\n const current = label[index]!;\n if (/[\\p{L}\\p{N}]/u.test(current) && !/[\\p{L}\\p{N}]/u.test(previous)) starts.push(index);\n }\n return starts;\n}\n\nfunction subsequenceScore(label: string, query: string): number | null {\n // Letters in order, read the way people abbreviate: the first letter starts a\n // word, and moving on to a later word means landing on its first letter\n // (\"kbsh\" → Keyboard shortcuts). Consecutive letters are worth more.\n const startList = wordStarts(label);\n const starts = new Set(startList);\n const wordOf = (index: number) => {\n let word = -1;\n for (const start of startList) {\n if (start > index) break;\n word++;\n }\n return word;\n };\n let position = 0;\n let score = 0;\n let previous = -2;\n // Prefer the next letter inside the current word; otherwise only the start\n // of a later word counts.\n const fits = (found: number) =>\n found === previous + 1 ||\n starts.has(found) ||\n (previous >= 0 && wordOf(found) === wordOf(previous));\n for (const character of query) {\n if (character === \" \") continue;\n let found = label.indexOf(character, position);\n while (found >= 0 && !fits(found)) found = label.indexOf(character, found + 1);\n if (found < 0) return null;\n score += found === previous + 1 ? 3 : starts.has(found) ? 2 : 0;\n previous = found;\n position = found + 1;\n }\n return score;\n}\n\nexport function rankLabel(rawLabel: string, rawQuery: string): number | null {\n const query = foldForSearch(rawQuery);\n if (!query) return 0;\n const label = foldForSearch(rawLabel);\n if (!label) return null;\n const lengthPenalty = Math.min(label.length, 200) / 1000;\n if (label === query) return 1000;\n if (label.startsWith(query)) return 900 - lengthPenalty;\n const at = label.indexOf(query);\n if (at >= 0) {\n const starts = wordStarts(label);\n if (starts.includes(at)) return 800 - at / 100 - lengthPenalty;\n return 600 - at / 100 - lengthPenalty;\n }\n const words = query.split(\" \").filter(Boolean);\n if (words.length > 1 && words.every((word) => label.includes(word))) {\n const starts = wordStarts(label);\n const wordStartHits = words.filter((word) =>\n starts.some((start) => label.startsWith(word, start)),\n ).length;\n return 500 + (wordStartHits / words.length) * 50 - lengthPenalty;\n }\n if (query.replace(/ /g, \"\").length < 2) return null;\n const subsequence = subsequenceScore(label, query);\n if (subsequence === null) return null;\n // Only keep loose matches that hit word starts or runs; random letters scattered\n // across a long title are noise.\n const letters = query.replace(/ /g, \"\").length;\n if (subsequence < letters) return null;\n return 100 + Math.min(subsequence, 200) - lengthPenalty * 10;\n}\n\n/** The best rank across a label and extra keywords (a keyword match ranks below the same match on the name). */\nexport function rankWithKeywords(\n label: string,\n keywords: readonly string[] | undefined,\n query: string,\n): number | null {\n let best = rankLabel(label, query);\n for (const keyword of keywords ?? []) {\n const rank = rankLabel(keyword, query);\n if (rank !== null) {\n const discounted = rank - 150;\n if (best === null || discounted > best) best = discounted;\n }\n }\n return best;\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  authorizedWorkspaceFromList
4
- } from "./chunk-IOKSNX74.js";
4
+ } from "./chunk-D5OWJZQR.js";
5
5
 
6
6
  // src/app/lib/workspace-navigation-preference.tsx
7
7
  var WORKSPACE_NAVIGATION_PREFERENCE_VERSION = 1;
@@ -118,4 +118,4 @@ export {
118
118
  isAuthorizedWorkspaceId,
119
119
  resolveLandingWorkspaceId
120
120
  };
121
- //# sourceMappingURL=chunk-UHFWF6ZU.js.map
121
+ //# sourceMappingURL=chunk-2FPS5H2D.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-CM7LVUKC.js";
5
5
 
6
6
  // src/hooks/internal.ts
7
- import { observedSessionSequence } from "@opengeni/sdk";
7
+ import { isTransientRequestError, observedSessionSequence } from "@opengeni/sdk";
8
8
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
9
9
  var HIDDEN_STREAM_GRACE_MS = 2e3;
10
10
  function usePageLiveActivity(hiddenGraceMs = HIDDEN_STREAM_GRACE_MS) {
@@ -40,9 +40,31 @@ function usePageLiveActivity(hiddenGraceMs = HIDDEN_STREAM_GRACE_MS) {
40
40
  }, [hiddenGraceMs]);
41
41
  return active;
42
42
  }
43
+ var DEFAULT_TRANSIENT_READ_RETRY = Object.freeze({
44
+ quietWindowMs: 2e4,
45
+ initialDelayMs: 1e3,
46
+ maxDelayMs: 4e3,
47
+ backgroundDelayMs: 15e3
48
+ });
49
+ function jittered(delayMs) {
50
+ return Math.round(delayMs * (0.8 + Math.random() * 0.4));
51
+ }
52
+ function transientReadRetryStep(streak, now, policy) {
53
+ streak.attempts += 1;
54
+ const quiet = now - streak.since < policy.quietWindowMs;
55
+ const delayMs = quiet ? Math.min(policy.maxDelayMs, policy.initialDelayMs * 2 ** (streak.attempts - 1)) : policy.backgroundDelayMs;
56
+ return { quiet, delayMs: Math.max(0, jittered(delayMs)) };
57
+ }
43
58
  function usePolledValue(load, options = {}) {
44
59
  const enabled = options.enabled ?? true;
45
60
  const pollIntervalMs = options.pollIntervalMs;
61
+ const transientRetryRef = useRef(null);
62
+ transientRetryRef.current = options.transientRetry === false ? null : {
63
+ quietWindowMs: options.transientRetry?.quietWindowMs ?? DEFAULT_TRANSIENT_READ_RETRY.quietWindowMs,
64
+ initialDelayMs: options.transientRetry?.initialDelayMs ?? DEFAULT_TRANSIENT_READ_RETRY.initialDelayMs,
65
+ maxDelayMs: options.transientRetry?.maxDelayMs ?? DEFAULT_TRANSIENT_READ_RETRY.maxDelayMs,
66
+ backgroundDelayMs: options.transientRetry?.backgroundDelayMs ?? DEFAULT_TRANSIENT_READ_RETRY.backgroundDelayMs
67
+ };
46
68
  const pageLive = usePageLiveActivity();
47
69
  const [data, setData] = useState(null);
48
70
  const [loading, setLoading] = useState(enabled);
@@ -55,6 +77,15 @@ function usePolledValue(load, options = {}) {
55
77
  const requestAbortRef = useRef(null);
56
78
  const inFlightRef = useRef(null);
57
79
  const trailingRefreshRef = useRef(null);
80
+ const transientStreakRef = useRef(null);
81
+ const transientRetryTimerRef = useRef(null);
82
+ const retryLiveRef = useRef(false);
83
+ const cancelTransientRetry = useCallback(() => {
84
+ if (transientRetryTimerRef.current !== null) {
85
+ clearTimeout(transientRetryTimerRef.current);
86
+ transientRetryTimerRef.current = null;
87
+ }
88
+ }, []);
58
89
  const [stateIdentity, setStateIdentity] = useState(() => ({ load }));
59
90
  useEffect(() => {
60
91
  if (stateIdentity.load !== load) {
@@ -75,14 +106,39 @@ function usePolledValue(load, options = {}) {
75
106
  try {
76
107
  const result = await load(requestAbort.signal);
77
108
  if (ticket === generation.current && activeLoadRef.current === load && !requestAbort.signal.aborted) {
109
+ transientStreakRef.current = null;
110
+ cancelTransientRetry();
78
111
  setData(result);
79
112
  setError(null);
80
113
  setLoading(false);
81
114
  }
82
115
  } catch (cause) {
83
116
  if (ticket === generation.current && activeLoadRef.current === load && !requestAbort.signal.aborted) {
84
- setError(normalizeError(cause));
85
- setLoading(false);
117
+ const policy = transientRetryRef.current;
118
+ if (policy && retryLiveRef.current && isTransientRequestError(cause)) {
119
+ const now = Date.now();
120
+ const streak = transientStreakRef.current ??= {
121
+ since: now,
122
+ attempts: 0,
123
+ surfaced: false
124
+ };
125
+ const step = transientReadRetryStep(streak, now, policy);
126
+ if (!step.quiet) {
127
+ if (!streak.surfaced) setError(normalizeError(cause));
128
+ streak.surfaced = true;
129
+ setLoading(false);
130
+ }
131
+ cancelTransientRetry();
132
+ transientRetryTimerRef.current = setTimeout(() => {
133
+ transientRetryTimerRef.current = null;
134
+ if (retryLiveRef.current) void run();
135
+ }, step.delayMs);
136
+ } else {
137
+ transientStreakRef.current = null;
138
+ cancelTransientRetry();
139
+ setError(normalizeError(cause));
140
+ setLoading(false);
141
+ }
86
142
  }
87
143
  } finally {
88
144
  if (requestAbortRef.current === requestAbort) requestAbortRef.current = null;
@@ -91,7 +147,7 @@ function usePolledValue(load, options = {}) {
91
147
  })();
92
148
  inFlightRef.current = { load, promise };
93
149
  return promise;
94
- }, [load]);
150
+ }, [cancelTransientRetry, load]);
95
151
  const refresh = useCallback(() => {
96
152
  const existing = inFlightRef.current;
97
153
  if (existing?.load !== load) return run();
@@ -108,7 +164,10 @@ function usePolledValue(load, options = {}) {
108
164
  return promise;
109
165
  }, [load, run]);
110
166
  useEffect(() => {
167
+ transientStreakRef.current = null;
168
+ cancelTransientRetry();
111
169
  if (!enabled || !pageLive) {
170
+ retryLiveRef.current = false;
112
171
  setLoading(false);
113
172
  generation.current += 1;
114
173
  requestAbortRef.current?.abort();
@@ -116,6 +175,7 @@ function usePolledValue(load, options = {}) {
116
175
  trailingRefreshRef.current = null;
117
176
  return;
118
177
  }
178
+ retryLiveRef.current = true;
119
179
  setLoading(true);
120
180
  let cancelled = false;
121
181
  let timer = null;
@@ -130,6 +190,8 @@ function usePolledValue(load, options = {}) {
130
190
  if (pollIntervalMs === void 0 || pollIntervalMs <= 0) {
131
191
  return () => {
132
192
  cancelled = true;
193
+ retryLiveRef.current = false;
194
+ cancelTransientRetry();
133
195
  generation.current += 1;
134
196
  requestAbortRef.current?.abort();
135
197
  inFlightRef.current = null;
@@ -139,12 +201,14 @@ function usePolledValue(load, options = {}) {
139
201
  return () => {
140
202
  cancelled = true;
141
203
  if (timer !== null) clearTimeout(timer);
204
+ retryLiveRef.current = false;
205
+ cancelTransientRetry();
142
206
  generation.current += 1;
143
207
  requestAbortRef.current?.abort();
144
208
  inFlightRef.current = null;
145
209
  trailingRefreshRef.current = null;
146
210
  };
147
- }, [run, enabled, pageLive, pollIntervalMs]);
211
+ }, [run, enabled, pageLive, pollIntervalMs, cancelTransientRetry]);
148
212
  const identityMatches = stateIdentity.load === load;
149
213
  return {
150
214
  data: identityMatches ? data : null,
@@ -378,10 +442,12 @@ function useDebouncedCallback(callback, delayMs = 150) {
378
442
 
379
443
  export {
380
444
  usePageLiveActivity,
445
+ DEFAULT_TRANSIENT_READ_RETRY,
446
+ transientReadRetryStep,
381
447
  usePolledValue,
382
448
  useMutationRunner,
383
449
  projectionReadThrough,
384
450
  useSessionEventTrigger,
385
451
  useDebouncedCallback
386
452
  };
387
- //# sourceMappingURL=chunk-NAWXARTY.js.map
453
+ //# sourceMappingURL=chunk-2KO2G3RI.js.map