@opengeni/react 4.2.1-canary.39642758903001 → 4.3.1

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 (693) hide show
  1. package/dist/app/app-state.js +27 -27
  2. package/dist/app/components/Composer.js +27 -26
  3. package/dist/app/components/agent/agent-capability-picker.js +5 -5
  4. package/dist/app/components/artifacts/artifact-library.js +19 -19
  5. package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
  6. package/dist/app/components/artifacts/inline-chat-image.js +31 -30
  7. package/dist/app/components/artifacts/retained-file-preview.js +35 -34
  8. package/dist/app/components/artifacts/retained-text-preview.js +5 -5
  9. package/dist/app/components/artifacts/site-audience.js +5 -5
  10. package/dist/app/components/artifacts/site-conversations.js +24 -22
  11. package/dist/app/components/artifacts/site-data.js +20 -20
  12. package/dist/app/components/artifacts/site-publishing.js +39 -39
  13. package/dist/app/components/artifacts/site-settings.js +48 -48
  14. package/dist/app/components/billing-class-mark.js +5 -5
  15. package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
  16. package/dist/app/components/capabilities/capability-logo-source.js +13 -12
  17. package/dist/app/components/capabilities/connection-account-picker.js +2 -2
  18. package/dist/app/components/capabilities/connector-tool-permissions.js +5 -5
  19. package/dist/app/components/capabilities/native-connect-setup.js +14 -13
  20. package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
  21. package/dist/app/components/capabilities/perform-capability-action.js +3 -3
  22. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -14
  23. package/dist/app/components/capabilities/session-capability-card.js +78 -77
  24. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  25. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
  26. package/dist/app/components/capabilities/session-github-card.js +25 -24
  27. package/dist/app/components/capabilities/session-machine-card.js +38 -38
  28. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  29. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  30. package/dist/app/components/command-menu/chat-switcher.d.ts +12 -0
  31. package/dist/app/components/command-menu/chat-switcher.js +142 -0
  32. package/dist/app/components/command-menu/chat-switcher.js.map +1 -0
  33. package/dist/app/components/command-menu/command-menu.d.ts +15 -0
  34. package/dist/app/components/command-menu/command-menu.js +812 -0
  35. package/dist/app/components/command-menu/command-menu.js.map +1 -0
  36. package/dist/app/components/command-menu/keycaps.d.ts +21 -0
  37. package/dist/app/components/command-menu/keycaps.js +12 -0
  38. package/dist/app/components/command-menu/shortcut-sheet.d.ts +12 -0
  39. package/dist/app/components/command-menu/shortcut-sheet.js +150 -0
  40. package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -0
  41. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  42. package/dist/app/components/composer-mobile-plus-panel.js +21 -21
  43. package/dist/app/components/composer-mobile-plus.js +3 -3
  44. package/dist/app/components/credit-required-gate.js +1 -1
  45. package/dist/app/components/credit-required-prompt.js +16 -16
  46. package/dist/app/components/credits/coupon-redeem.js +2 -2
  47. package/dist/app/components/credits/credit-refusal-notice.d.ts +18 -0
  48. package/dist/app/components/credits/credit-refusal-notice.js +17 -0
  49. package/dist/app/components/cross-slot-deep-link-recovery.js +1 -1
  50. package/dist/app/components/desktop/app-shots.js +6 -6
  51. package/dist/app/components/desktop/this-computer.js +4 -4
  52. package/dist/app/components/feedback.js +5 -5
  53. package/dist/app/components/follow-up-repository-menu-body.js +7 -7
  54. package/dist/app/components/follow-up-repository-picker.js +3 -3
  55. package/dist/app/components/github-app-connect-launcher.js +1 -1
  56. package/dist/app/components/knowledge/agent-learning-settings.js +6 -6
  57. package/dist/app/components/machines/connect-machine-dialog.js +18 -18
  58. package/dist/app/components/manual-repository-editor.js +2 -2
  59. package/dist/app/components/markdown.js +10 -9
  60. package/dist/app/components/message-context-pills.js +2 -2
  61. package/dist/app/components/models/models-ui.js +10 -10
  62. package/dist/app/components/pickers.js +10 -10
  63. package/dist/app/components/rail/rail-context.d.ts +6 -0
  64. package/dist/app/components/rail/rail-context.js +3 -3
  65. package/dist/app/components/rail/rail-sections.js +61 -55
  66. package/dist/app/components/rail/session-browse-order-controls.js +2 -2
  67. package/dist/app/components/rail/session-header.js +50 -36
  68. package/dist/app/components/rail/session-list.js +59 -52
  69. package/dist/app/components/rail/session-row-hover-details.js +25 -23
  70. package/dist/app/components/rail/session-shell.js +96 -91
  71. package/dist/app/components/repository-picker.js +7 -7
  72. package/dist/app/components/secrets/session-secrets-panel.js +4 -4
  73. package/dist/app/components/session/agent-configuration-panel.js +34 -34
  74. package/dist/app/components/session/banners.js +12 -11
  75. package/dist/app/components/session/codex-account-indicator.js +12 -12
  76. package/dist/app/components/session/composer-menu-radio.js +2 -2
  77. package/dist/app/components/session/conversation-find.js +1 -1
  78. package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
  79. package/dist/app/components/session/failed-session-banner.js +12 -12
  80. package/dist/app/components/session/human-input.js +48 -47
  81. package/dist/app/components/session/inspector.js +80 -79
  82. package/dist/app/components/session/inspector.js.map +1 -1
  83. package/dist/app/components/session/message-actions.js +5 -5
  84. package/dist/app/components/session/message-resource-attachments.js +21 -20
  85. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  86. package/dist/app/components/session/model-account-indicator.js +11 -11
  87. package/dist/app/components/session/model-context-inspector.js +2 -2
  88. package/dist/app/components/session/model-recovery-notice.js +3 -3
  89. package/dist/app/components/session/new-session-settings-menu.js +13 -13
  90. package/dist/app/components/session/sandbox-switcher.js +16 -16
  91. package/dist/app/components/session/sandbox-workspace.js +68 -67
  92. package/dist/app/components/session/search-markdown-highlight.js +11 -10
  93. package/dist/app/components/session/search-results-view.js +12 -11
  94. package/dist/app/components/session/session-admin-access.js +11 -11
  95. package/dist/app/components/session/session-retention.js +4 -4
  96. package/dist/app/components/session/session-search-dialog.d.ts +5 -0
  97. package/dist/app/components/session/session-search-dialog.js +22 -12
  98. package/dist/app/components/session/session-search-dialog.js.map +1 -1
  99. package/dist/app/components/session/session-skill-reviews.js +3 -3
  100. package/dist/app/components/session/session-tenancy-control.js +25 -25
  101. package/dist/app/components/session/session-usage-limit-section.js +9 -9
  102. package/dist/app/components/session/session-wait-status.js +11 -9
  103. package/dist/app/components/session/session-wait-status.js.map +1 -1
  104. package/dist/app/components/session/subagents.js +17 -15
  105. package/dist/app/components/session/subscription-account-menu.js +2 -2
  106. package/dist/app/components/session-connectors-menu-body.js +6 -6
  107. package/dist/app/components/settings/row-select.js +1 -1
  108. package/dist/app/components/transcription-settings.js +2 -2
  109. package/dist/app/components/ui/destructive-confirm.js +8 -8
  110. package/dist/app/components/usage/usage-entry.js +6 -6
  111. package/dist/app/components/workspace-composer-plus.js +22 -21
  112. package/dist/app/embed/session-app.js +264 -258
  113. package/dist/app/lib/actions/actions-provider.d.ts +30 -0
  114. package/dist/app/lib/actions/actions-provider.js +32 -0
  115. package/dist/app/lib/actions/chat-directory.d.ts +30 -0
  116. package/dist/app/lib/actions/chat-operations.d.ts +11 -0
  117. package/dist/app/lib/actions/chat-switcher.d.ts +31 -0
  118. package/dist/app/lib/actions/chords.d.ts +40 -0
  119. package/dist/app/lib/actions/events.d.ts +6 -0
  120. package/dist/app/lib/actions/rank.d.ts +17 -0
  121. package/dist/app/lib/actions/registry.d.ts +71 -0
  122. package/dist/app/lib/codex-usage-query.js +3 -3
  123. package/dist/app/lib/composer-connectors.js +14 -13
  124. package/dist/app/lib/console-text.js +2 -2
  125. package/dist/app/lib/credit-coverage.d.ts +21 -0
  126. package/dist/app/lib/credit-coverage.js +15 -0
  127. package/dist/app/lib/deployment-free-model.js +2 -2
  128. package/dist/app/lib/events.js +19 -18
  129. package/dist/app/lib/failed-session-copy.js +5 -5
  130. package/dist/app/lib/free-credit-gap.d.ts +9 -0
  131. package/dist/app/lib/free-credit-gap.js +4 -2
  132. package/dist/app/lib/integration-connect-analytics.d.ts +1 -1
  133. package/dist/app/lib/integration-connect-analytics.js +1 -1
  134. package/dist/app/lib/integration-connect-redirect.js +1 -1
  135. package/dist/app/lib/model-access-onboarding.js +4 -4
  136. package/dist/app/lib/model-policy.js +1 -1
  137. package/dist/app/lib/models-route.d.ts +6 -2
  138. package/dist/app/lib/models-route.js +6 -3
  139. package/dist/app/lib/models-route.js.map +1 -1
  140. package/dist/app/lib/move-chat-to-machine.js +3 -3
  141. package/dist/app/lib/session-branch-cache.js +15 -13
  142. package/dist/app/lib/session-create.js +2 -2
  143. package/dist/app/lib/session-group-pagination.js +15 -13
  144. package/dist/app/lib/session-hover-facts.js +16 -14
  145. package/dist/app/lib/session-model.js +3 -3
  146. package/dist/app/lib/session-rail.js +11 -9
  147. package/dist/app/lib/session-rename.js +3 -3
  148. package/dist/app/lib/session-search-route.d.ts +1 -1
  149. package/dist/app/lib/session-search-route.js +1 -1
  150. package/dist/app/lib/session-ui-features.d.ts +11 -3
  151. package/dist/app/lib/session-ui-features.js +1 -1
  152. package/dist/app/lib/sessions-group.js +15 -13
  153. package/dist/app/lib/turn-failure-analytics.js +7 -7
  154. package/dist/app/lib/unavailable-session-model.js +2 -2
  155. package/dist/app/lib/use-duplicate-site.js +2 -2
  156. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  157. package/dist/app/lib/use-workspace-machines.js +8 -8
  158. package/dist/app/lib/use-workspace-model-catalog.js +6 -6
  159. package/dist/app/lib/use-workspace-rigs.js +4 -4
  160. package/dist/app/lib/workspace-navigation-preference.js +5 -5
  161. package/dist/app/lib/workspace-scope-context.js +4 -4
  162. package/dist/app/routes/artifacts.js +124 -122
  163. package/dist/app/routes/artifacts.js.map +1 -1
  164. package/dist/app/routes/retained-artifact.js +69 -68
  165. package/dist/app/routes/retained-artifact.js.map +1 -1
  166. package/dist/app/routes/session-unavailable.js +3 -3
  167. package/dist/app/routes/session.js +168 -166
  168. package/dist/app/routes/sessions-index-hydration.js +3 -3
  169. package/dist/app/routes/sessions-index.js +122 -116
  170. package/dist/artifacts-document.js +4 -4
  171. package/dist/artifacts-presentation.js +4 -4
  172. package/dist/artifacts-spreadsheet.js +4 -4
  173. package/dist/artifacts.js +39 -39
  174. package/dist/{browser-viewer-ZRFZX3VN.js → browser-viewer-HPUMK7UP.js} +7 -7
  175. package/dist/{chat-interactive-block-HUMYWVCK.js → chat-interactive-block-22PPECCT.js} +6 -6
  176. package/dist/{chunk-GVIQ7H62.js → chunk-2LUBBDZV.js} +5 -5
  177. package/dist/{chunk-SWWYYGQO.js → chunk-325C2TCI.js} +5 -2
  178. package/dist/chunk-325C2TCI.js.map +1 -0
  179. package/dist/{chunk-XMMVIY7B.js → chunk-3CCJWHQY.js} +2 -2
  180. package/dist/{chunk-XS2FZ6DX.js → chunk-3F5ZPIWI.js} +2 -2
  181. package/dist/{chunk-72US6QNB.js → chunk-3J2YZRY5.js} +2 -2
  182. package/dist/{chunk-D4YQF4E3.js → chunk-3SMJ2BIQ.js} +2 -2
  183. package/dist/{chunk-TBJINQXA.js → chunk-3WCYK36X.js} +17 -17
  184. package/dist/{chunk-WPCF34V6.js → chunk-3WG3CRL7.js} +14 -14
  185. package/dist/{chunk-JI5BYQKO.js → chunk-3X46PNBX.js} +14 -14
  186. package/dist/{chunk-UO36FC3S.js → chunk-46I7MMAL.js} +6 -2
  187. package/dist/chunk-46I7MMAL.js.map +1 -0
  188. package/dist/{chunk-PBK44WJC.js → chunk-4GJ37O6G.js} +2 -2
  189. package/dist/chunk-4IWBQUQU.js +152 -0
  190. package/dist/chunk-4IWBQUQU.js.map +1 -0
  191. package/dist/{chunk-LEXPBQ56.js → chunk-4SKJX3C4.js} +6 -6
  192. package/dist/{chunk-ZA6YD2LW.js → chunk-57SYK776.js} +2 -2
  193. package/dist/{chunk-22LBKJDE.js → chunk-5DIAN5GQ.js} +12 -12
  194. package/dist/{chunk-LJ3TDK2L.js → chunk-5FA455GR.js} +4 -4
  195. package/dist/{chunk-N2BEUKXT.js → chunk-5FBZDEHE.js} +228 -228
  196. package/dist/chunk-5FBZDEHE.js.map +1 -0
  197. package/dist/{chunk-YPR5INHV.js → chunk-5X3E2Z3D.js} +4 -4
  198. package/dist/{chunk-OXNWZTEU.js → chunk-5ZJCL6X4.js} +5 -5
  199. package/dist/{chunk-62OAZ4LO.js → chunk-6C5GQQMC.js} +12 -12
  200. package/dist/{chunk-VGITH57T.js → chunk-6ERTXDZM.js} +4 -4
  201. package/dist/{chunk-ZQ7XQZCF.js → chunk-6FX73Y4I.js} +8 -8
  202. package/dist/{chunk-QZO2KK2F.js → chunk-6P44NG6Y.js} +2 -2
  203. package/dist/{chunk-N2DDJLTM.js → chunk-6T7Y33JA.js} +3 -3
  204. package/dist/{chunk-RBAGC2MJ.js → chunk-75VE5QUS.js} +22 -22
  205. package/dist/{chunk-MRXOGI3O.js → chunk-77CUDSHG.js} +9 -9
  206. package/dist/{chunk-F2GXK2Z6.js → chunk-7G446JFO.js} +431 -348
  207. package/dist/chunk-7G446JFO.js.map +1 -0
  208. package/dist/{chunk-GZ65XQR5.js → chunk-7T7FHSGS.js} +3 -3
  209. package/dist/{chunk-YGAH34CD.js → chunk-A3S26JSP.js} +8 -8
  210. package/dist/{chunk-GYPAO6RS.js → chunk-A664GSDM.js} +8 -8
  211. package/dist/{chunk-JSZSNMDR.js → chunk-ASUYLXKO.js} +2 -2
  212. package/dist/{chunk-RTK7SUPL.js → chunk-AUUJLVA3.js} +7 -7
  213. package/dist/{chunk-OOTBYSCA.js → chunk-BBWKPNJB.js} +5 -5
  214. package/dist/{chunk-BGZIMIUU.js → chunk-BCUYWOQU.js} +2 -2
  215. package/dist/{chunk-EKN4N4LS.js → chunk-BDFMNJZJ.js} +2 -2
  216. package/dist/{chunk-YZKGOWCC.js → chunk-BIDXQAGO.js} +2 -2
  217. package/dist/{chunk-Q2UUANHF.js → chunk-BIKAJ4DY.js} +5 -5
  218. package/dist/{chunk-5IQBF2X3.js → chunk-BJPJ2OUX.js} +3 -3
  219. package/dist/{chunk-EY2EMHZW.js → chunk-BPM2OTYK.js} +8 -8
  220. package/dist/{chunk-MT4TBRQB.js → chunk-BSWS2RUZ.js} +2 -2
  221. package/dist/{chunk-T7YD3VGK.js → chunk-C52MNKXU.js} +12 -12
  222. package/dist/{chunk-THNW33K7.js → chunk-CEUDV4OA.js} +18 -18
  223. package/dist/{chunk-GRLPRM56.js → chunk-CFEFYPNR.js} +8 -2
  224. package/dist/chunk-CFEFYPNR.js.map +1 -0
  225. package/dist/{chunk-LHGIS6SZ.js → chunk-CVK74BH7.js} +2 -2
  226. package/dist/{chunk-DFO2UCYG.js → chunk-CW5I65ZX.js} +11 -11
  227. package/dist/chunk-DKNTQDVL.js +86 -0
  228. package/dist/chunk-DKNTQDVL.js.map +1 -0
  229. package/dist/{chunk-SKRLKQEG.js → chunk-DOSC2HRQ.js} +79 -79
  230. package/dist/{chunk-KVB6XDLP.js → chunk-DPJ2CWVN.js} +2 -2
  231. package/dist/{chunk-4J6V4DH7.js → chunk-DXMRO2MU.js} +3 -3
  232. package/dist/{chunk-42I4O4WQ.js → chunk-EE55IDDR.js} +26 -26
  233. package/dist/{chunk-2RA6XABP.js → chunk-EEERTLFF.js} +12 -12
  234. package/dist/{chunk-PTOTKUKO.js → chunk-EEO744XR.js} +8 -8
  235. package/dist/{chunk-LD3HVI2J.js → chunk-EMFGBAQL.js} +6 -6
  236. package/dist/{chunk-FQGUK4ST.js → chunk-ENPJKVMN.js} +38 -38
  237. package/dist/{chunk-HDHK3SXK.js → chunk-EU6RLHMP.js} +4 -4
  238. package/dist/{chunk-G7VLL3PG.js → chunk-F2YABPRJ.js} +13 -4
  239. package/dist/chunk-F2YABPRJ.js.map +1 -0
  240. package/dist/{chunk-MRUWRQBX.js → chunk-FET6XHGS.js} +2 -2
  241. package/dist/{chunk-M6KUY3YH.js → chunk-FIICQA55.js} +2 -2
  242. package/dist/{chunk-NLWLCYCT.js → chunk-FTZXCPE3.js} +19 -19
  243. package/dist/{chunk-FN2KA3MJ.js → chunk-FUS76DO4.js} +3 -3
  244. package/dist/{chunk-AM4IIPWI.js → chunk-G7N5NPRJ.js} +2 -2
  245. package/dist/{chunk-CCQ7YKOD.js → chunk-GBYZ6653.js} +2 -2
  246. package/dist/{chunk-SOOWLNC5.js → chunk-GJUPLSC5.js} +330 -109
  247. package/dist/chunk-GJUPLSC5.js.map +1 -0
  248. package/dist/{chunk-YKKVIJVX.js → chunk-GQDSC6QZ.js} +5 -5
  249. package/dist/chunk-GQGNRL2L.js +53 -0
  250. package/dist/chunk-GQGNRL2L.js.map +1 -0
  251. package/dist/{chunk-5X6JP75Q.js → chunk-GRSODLVO.js} +4 -4
  252. package/dist/{chunk-73YP3R5X.js → chunk-GSESCQFY.js} +4 -4
  253. package/dist/{chunk-KWB5U3ZT.js → chunk-GWRW4N3T.js} +199 -137
  254. package/dist/chunk-GWRW4N3T.js.map +1 -0
  255. package/dist/{chunk-RTR7RNG4.js → chunk-GYRU4PNM.js} +9 -7
  256. package/dist/{chunk-RTR7RNG4.js.map → chunk-GYRU4PNM.js.map} +1 -1
  257. package/dist/{chunk-MZLEBFUZ.js → chunk-GZD6VBIK.js} +3 -3
  258. package/dist/{chunk-IZR2QRFF.js → chunk-H3HH5AHS.js} +4 -4
  259. package/dist/{chunk-DN3TKURW.js → chunk-H3LIIAGE.js} +4 -54
  260. package/dist/chunk-H3LIIAGE.js.map +1 -0
  261. package/dist/{chunk-NPLEQMNM.js → chunk-H5GWAG4I.js} +7 -5
  262. package/dist/{chunk-NPLEQMNM.js.map → chunk-H5GWAG4I.js.map} +1 -1
  263. package/dist/{chunk-OJPUVUB6.js → chunk-HAOZCLLA.js} +3 -3
  264. package/dist/{chunk-ZBHDGAYL.js → chunk-HEFE4OZJ.js} +2 -2
  265. package/dist/{chunk-WTG34JVA.js → chunk-HI75UTI6.js} +2 -2
  266. package/dist/{chunk-OMBIG3NC.js → chunk-HM633ROV.js} +14 -14
  267. package/dist/{chunk-WDFZWSKD.js → chunk-HRIP4M6H.js} +3 -3
  268. package/dist/{chunk-A2BCW6CQ.js → chunk-HU2DRFFI.js} +3 -3
  269. package/dist/{chunk-PO35PBAB.js → chunk-HVH7FFJH.js} +2 -2
  270. package/dist/{chunk-EG7KNUF7.js → chunk-HYTXTKST.js} +18 -18
  271. package/dist/{chunk-TFHG75A4.js → chunk-I4XMDFUJ.js} +7 -7
  272. package/dist/{chunk-IZHVZZQA.js → chunk-ICAUYWSL.js} +9 -9
  273. package/dist/{chunk-ZSERYHHT.js → chunk-IDMXEPHL.js} +150 -150
  274. package/dist/chunk-IDMXEPHL.js.map +1 -0
  275. package/dist/{chunk-DCLPWYP3.js → chunk-IEVPJ3G6.js} +2 -2
  276. package/dist/{chunk-EVWZHDSF.js → chunk-IKH3VTA4.js} +2 -2
  277. package/dist/{chunk-L5UCO2UV.js → chunk-ILBSBZGC.js} +13 -4
  278. package/dist/chunk-ILBSBZGC.js.map +1 -0
  279. package/dist/{chunk-IO6K6UYJ.js → chunk-IQ64BNAG.js} +4 -2
  280. package/dist/chunk-IQ64BNAG.js.map +1 -0
  281. package/dist/{chunk-TYHLEFD2.js → chunk-IZJNMRIR.js} +9 -9
  282. package/dist/{chunk-D2SR3TEB.js → chunk-J243WGUA.js} +2 -2
  283. package/dist/{chunk-QGSGIYE3.js → chunk-J2C6LB6W.js} +4 -4
  284. package/dist/{chunk-MT6TRTXF.js → chunk-J5MEDX7C.js} +9 -9
  285. package/dist/{chunk-6QHUKBJP.js → chunk-J7SKOO44.js} +2 -2
  286. package/dist/{chunk-W2QK7PYS.js → chunk-JAAST75A.js} +11 -11
  287. package/dist/{chunk-NQCMS4AJ.js → chunk-JQCGPTZ6.js} +9 -9
  288. package/dist/chunk-JRJUSKDY.js +832 -0
  289. package/dist/chunk-JRJUSKDY.js.map +1 -0
  290. package/dist/{chunk-CMUXJHGH.js → chunk-JRSCWQMC.js} +9 -9
  291. package/dist/{chunk-Q4OHNGGB.js → chunk-JRXHSVD5.js} +4 -4
  292. package/dist/{chunk-SD2K5ZN5.js → chunk-JXYLDT6X.js} +4 -4
  293. package/dist/{chunk-S3M5WCZW.js → chunk-KA4LV7G6.js} +35 -50
  294. package/dist/chunk-KA4LV7G6.js.map +1 -0
  295. package/dist/{chunk-IXX6ZOL2.js → chunk-KGTMHEAP.js} +7 -7
  296. package/dist/{chunk-22OBGVEJ.js → chunk-KOXVGPW4.js} +3 -3
  297. package/dist/{chunk-NOZ5CGZE.js → chunk-L5GPPMUB.js} +2 -2
  298. package/dist/{chunk-KIHYJM5F.js → chunk-LXJT4WAW.js} +58 -58
  299. package/dist/{chunk-KIHYJM5F.js.map → chunk-LXJT4WAW.js.map} +1 -1
  300. package/dist/{chunk-4FOOHMTU.js → chunk-LY6727IF.js} +1 -1
  301. package/dist/{chunk-PT7MTXRE.js → chunk-MAOCN7J6.js} +2 -2
  302. package/dist/{chunk-4K2JSJNX.js → chunk-MB5LZVDO.js} +2 -2
  303. package/dist/chunk-MF464AKA.js +139 -0
  304. package/dist/chunk-MF464AKA.js.map +1 -0
  305. package/dist/{chunk-UYSZKDQY.js → chunk-MK54JLE4.js} +1 -1
  306. package/dist/chunk-MK54JLE4.js.map +1 -0
  307. package/dist/{chunk-5LES64PP.js → chunk-MKOQAVOE.js} +21 -21
  308. package/dist/{chunk-BMV2SNYX.js → chunk-MUPWNSEJ.js} +18 -18
  309. package/dist/{chunk-Y5TRG22C.js → chunk-NRXIECWC.js} +2 -2
  310. package/dist/{chunk-GOE7G5JX.js → chunk-NWSAF6P5.js} +2 -2
  311. package/dist/chunk-OB3YGXHQ.js +158 -0
  312. package/dist/chunk-OB3YGXHQ.js.map +1 -0
  313. package/dist/{chunk-DUM363VS.js → chunk-OFZQJNF6.js} +5 -5
  314. package/dist/{chunk-CKN5QPEL.js → chunk-OMF7POEY.js} +2 -2
  315. package/dist/{chunk-MVXKO2BD.js → chunk-OXD6ET34.js} +1 -1
  316. package/dist/{chunk-47JUEVME.js → chunk-PALX6HWV.js} +21 -21
  317. package/dist/{chunk-B6OGSG7I.js → chunk-PE3BLBDT.js} +3 -3
  318. package/dist/{chunk-RVISSNVE.js → chunk-PMZKJOG6.js} +15 -15
  319. package/dist/{chunk-CESAMXWX.js → chunk-PQUTMG3S.js} +2 -2
  320. package/dist/{chunk-7VFCOKPG.js → chunk-PWBGODZU.js} +3 -3
  321. package/dist/{chunk-MOPAXD2H.js → chunk-QCADUTYX.js} +2 -2
  322. package/dist/{chunk-CT5FBO7E.js → chunk-RPOUJI25.js} +1 -1
  323. package/dist/{chunk-VE3FKXJ7.js → chunk-RUSXEE7X.js} +35 -32
  324. package/dist/chunk-RUSXEE7X.js.map +1 -0
  325. package/dist/{chunk-WKHYOS72.js → chunk-RW4GFE56.js} +3 -3
  326. package/dist/{chunk-FH4GO7HO.js → chunk-RYLVVDR7.js} +1 -1
  327. package/dist/{chunk-QZRDCFHI.js → chunk-S66SBBFQ.js} +5 -5
  328. package/dist/{chunk-CQJFIPAH.js → chunk-S7TNV2I7.js} +14 -14
  329. package/dist/{chunk-ZBQSIGGR.js → chunk-SC773IMJ.js} +13 -13
  330. package/dist/{chunk-RZV7SXED.js → chunk-SF3M27AN.js} +37 -12
  331. package/dist/chunk-SF3M27AN.js.map +1 -0
  332. package/dist/{chunk-FBJ2HK7A.js → chunk-SGPJ3YS2.js} +20 -20
  333. package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
  334. package/dist/chunk-SWCLN6JE.js +40 -0
  335. package/dist/chunk-SWCLN6JE.js.map +1 -0
  336. package/dist/{chunk-OS3EQOIS.js → chunk-T4F5TW2X.js} +29 -24
  337. package/dist/chunk-T4F5TW2X.js.map +1 -0
  338. package/dist/{chunk-RKZWCTXV.js → chunk-TAEKDMEF.js} +2 -2
  339. package/dist/{chunk-6AVCAUGL.js → chunk-TASEV25T.js} +3 -3
  340. package/dist/{chunk-3XOISKZC.js → chunk-TLGDPMUX.js} +6 -6
  341. package/dist/{chunk-MOF3XSUM.js → chunk-TREHTIBD.js} +3 -2
  342. package/dist/chunk-TREHTIBD.js.map +1 -0
  343. package/dist/{chunk-HUQHJSPV.js → chunk-TTPXGD5S.js} +68 -33
  344. package/dist/chunk-TTPXGD5S.js.map +1 -0
  345. package/dist/{chunk-NFCYIZHX.js → chunk-TXIIBNCA.js} +7 -3
  346. package/dist/{chunk-NFCYIZHX.js.map → chunk-TXIIBNCA.js.map} +1 -1
  347. package/dist/{chunk-5IUW34PG.js → chunk-TY3QYPJ6.js} +7 -7
  348. package/dist/{chunk-VQFR4EU4.js → chunk-U3JK5VJV.js} +2 -2
  349. package/dist/{chunk-2AWMJO54.js → chunk-U42P3RMZ.js} +5 -5
  350. package/dist/{chunk-2RIUMV7S.js → chunk-UBIJBLUK.js} +234 -234
  351. package/dist/chunk-UBIJBLUK.js.map +1 -0
  352. package/dist/{chunk-GUU75DES.js → chunk-UEJTOPLW.js} +8 -8
  353. package/dist/{chunk-QWCTYLMD.js → chunk-URDONAEJ.js} +240 -204
  354. package/dist/chunk-URDONAEJ.js.map +1 -0
  355. package/dist/{chunk-OZOEWLGR.js → chunk-UT6JAORE.js} +4 -4
  356. package/dist/{chunk-5TELOQA6.js → chunk-UTHPUINA.js} +3 -3
  357. package/dist/{chunk-SOV7DTTU.js → chunk-V6HZ2HJZ.js} +67 -67
  358. package/dist/{chunk-SOV7DTTU.js.map → chunk-V6HZ2HJZ.js.map} +1 -1
  359. package/dist/{chunk-26RQ6JBR.js → chunk-VBVCNH6D.js} +5 -5
  360. package/dist/{chunk-P646DND6.js → chunk-VCMQPCME.js} +2 -2
  361. package/dist/{chunk-LV7FMIMM.js → chunk-VGUHAHHV.js} +2 -2
  362. package/dist/{chunk-GYVXARCY.js → chunk-VIBPFVU4.js} +41 -41
  363. package/dist/{chunk-KHPOKZ6Z.js → chunk-VMAC66JX.js} +6 -6
  364. package/dist/{chunk-SHKRS6I5.js → chunk-VRPNETPK.js} +3 -3
  365. package/dist/{chunk-6U4J6RVS.js → chunk-WCHW4XN7.js} +14 -14
  366. package/dist/{chunk-CJH6QUQJ.js → chunk-WD3UXNJV.js} +3 -3
  367. package/dist/{chunk-H5EVWF6L.js → chunk-WR67FJMX.js} +4 -4
  368. package/dist/{chunk-XLIJ36RG.js → chunk-WRMQ7EX4.js} +5 -5
  369. package/dist/{chunk-VVFWOBAM.js → chunk-WTJUKYB2.js} +15 -16
  370. package/dist/chunk-WTJUKYB2.js.map +1 -0
  371. package/dist/{chunk-7KLCFJ5G.js → chunk-X4PPGXQG.js} +2 -2
  372. package/dist/{chunk-ZE2JTVCQ.js → chunk-X5BMQXFD.js} +11 -11
  373. package/dist/{chunk-OYJY4Y4A.js → chunk-XFNLU7EW.js} +14 -7
  374. package/dist/chunk-XFNLU7EW.js.map +1 -0
  375. package/dist/{chunk-UECU6LZI.js → chunk-XXRBOSWV.js} +3 -3
  376. package/dist/{chunk-SPKAIDWX.js → chunk-XZEFCPBL.js} +2 -2
  377. package/dist/{chunk-EZ5NYRHK.js → chunk-YL6N7QLA.js} +5 -5
  378. package/dist/{chunk-Q2ZJOECN.js → chunk-YMVTIV5L.js} +19 -19
  379. package/dist/chunk-YMVTIV5L.js.map +1 -0
  380. package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
  381. package/dist/{chunk-AR62NQXE.js → chunk-Z2S5VQG7.js} +2 -2
  382. package/dist/{chunk-2MXUB3ZO.js → chunk-Z5OGTWMZ.js} +15 -2
  383. package/dist/chunk-Z5OGTWMZ.js.map +1 -0
  384. package/dist/{chunk-7UQJEADK.js → chunk-ZL2O4BYP.js} +2 -2
  385. package/dist/{chunk-FOOITLHR.js → chunk-ZZHBT5WQ.js} +2 -2
  386. package/dist/{chunk-X6VJQJYY.js → chunk-ZZWHKC6A.js} +3 -3
  387. package/dist/components/timeline-annotation-shared.d.ts +1 -9
  388. package/dist/composer-messages.js +2 -2
  389. package/dist/composer.js +15 -15
  390. package/dist/{computer-viewer-D4NHQB5D.js → computer-viewer-S6TE6TN7.js} +8 -8
  391. package/dist/connect.js +12 -11
  392. package/dist/desktop.js +2 -2
  393. package/dist/editor.js +2 -2
  394. package/dist/{embedded-new-voice-X4ZW6SY4.js → embedded-new-voice-ZDZPGX25.js} +8 -8
  395. package/dist/{embedded-voice-4OD6Z3HU.js → embedded-voice-FKCUXSJO.js} +8 -8
  396. package/dist/{fleet-decision-row-5UCJXTDP.js → fleet-decision-row-VCGWYJAV.js} +2 -2
  397. package/dist/hooks/page-wake.d.ts +21 -0
  398. package/dist/hooks/use-session-events.d.ts +1 -0
  399. package/dist/index.js +206 -205
  400. package/dist/interaction.js +9 -9
  401. package/dist/{latest-question-VGVNUGAU.js → latest-question-SINEV4U6.js} +3 -3
  402. package/dist/lib/format.d.ts +3 -2
  403. package/dist/machines.js +6 -6
  404. package/dist/messages/en.d.ts +12 -3
  405. package/dist/messages.js +1 -1
  406. package/dist/model-picker-model.js +2 -2
  407. package/dist/{model-policy-picker-menu-XOPYY6YA.js → model-policy-picker-menu-66JPM3G5.js} +6 -6
  408. package/dist/model-policy-picker-menu-66JPM3G5.js.map +1 -0
  409. package/dist/model-policy.js +1 -1
  410. package/dist/native-previews.js +3 -3
  411. package/dist/{platform-activity-row-56XOVTRA.js → platform-activity-row-LU5WABI2.js} +2 -2
  412. package/dist/{queue-surface-implementation-OZDOBJ6W.js → queue-surface-implementation-Y4OUVS7N.js} +8 -7
  413. package/dist/{queue-surface-implementation-OZDOBJ6W.js.map → queue-surface-implementation-Y4OUVS7N.js.map} +1 -1
  414. package/dist/realtime.js +7 -7
  415. package/dist/{sandbox-files-LJCR437H.js → sandbox-files-NBIVKVCZ.js} +11 -11
  416. package/dist/sandbox-files-NBIVKVCZ.js.map +1 -0
  417. package/dist/session-app.js +266 -260
  418. package/dist/session-list-model.js +3 -3
  419. package/dist/{session-realtime-UISLBZ4A.js → session-realtime-3PALSNMJ.js} +3 -3
  420. package/dist/session-realtime-3PALSNMJ.js.map +1 -0
  421. package/dist/session-realtime.js +2 -2
  422. package/dist/session-ui.js +62 -61
  423. package/dist/session.d.ts +1 -1
  424. package/dist/session.js +17 -17
  425. package/dist/sites.js +2 -2
  426. package/dist/terminal.js +2 -2
  427. package/dist/this-computer.js +3 -3
  428. package/dist/timeline/annotation-model.d.ts +48 -0
  429. package/dist/{timeline-annotation-markers-ACT7XRMW.js → timeline-annotation-markers-6526H2NM.js} +11 -9
  430. package/dist/{timeline-annotation-markers-ACT7XRMW.js.map → timeline-annotation-markers-6526H2NM.js.map} +1 -1
  431. package/dist/{timeline-annotation-selection-2IA7T5VR.js → timeline-annotation-selection-KV5SM6TA.js} +16 -62
  432. package/dist/timeline-annotation-selection-KV5SM6TA.js.map +1 -0
  433. package/dist/{timeline-annotations-dialog-W5B2HMYY.js → timeline-annotations-dialog-7CDHWC7Y.js} +12 -10
  434. package/dist/{timeline-annotations-dialog-W5B2HMYY.js.map → timeline-annotations-dialog-7CDHWC7Y.js.map} +1 -1
  435. package/dist/timeline-model.d.ts +3 -0
  436. package/dist/timeline-model.js +40 -14
  437. package/dist/ui/access-list.js +24 -24
  438. package/dist/ui/choice-cards.js +2 -2
  439. package/dist/ui/composer-menu-action.js +2 -2
  440. package/dist/ui/context-menu.d.ts +3 -1
  441. package/dist/ui/context-menu.js +3 -1
  442. package/dist/ui/detail-page.js +3 -3
  443. package/dist/ui/detail-sheet.js +3 -3
  444. package/dist/ui/diff-view.js +3 -3
  445. package/dist/ui/disclosure.js +5 -5
  446. package/dist/ui/dropdown-menu.js +1 -1
  447. package/dist/ui/flush-form-page.js +5 -5
  448. package/dist/ui/form-dialog.js +4 -4
  449. package/dist/ui/list-row.js +5 -5
  450. package/dist/ui/load-failure.js +3 -3
  451. package/dist/ui/page-actions.js +3 -3
  452. package/dist/ui/revision-history.js +11 -11
  453. package/dist/ui/role-select.js +8 -8
  454. package/dist/ui/segmented-control.js +1 -1
  455. package/dist/ui/settings-nav.js +3 -3
  456. package/dist/ui/toolbar.js +3 -3
  457. package/dist/usage.js +2 -2
  458. package/dist/workbench.js +11 -11
  459. package/package.json +4 -4
  460. package/src/app/app-state.tsx +2 -1
  461. package/src/app/components/command-menu/chat-switcher.tsx +135 -0
  462. package/src/app/components/command-menu/command-menu.tsx +840 -0
  463. package/src/app/components/command-menu/keycaps.tsx +56 -0
  464. package/src/app/components/command-menu/shortcut-sheet.tsx +155 -0
  465. package/src/app/components/credits/credit-refusal-notice.test.tsx +132 -0
  466. package/src/app/components/credits/credit-refusal-notice.tsx +92 -0
  467. package/src/app/components/rail/rail-context.tsx +28 -5
  468. package/src/app/components/rail/rail-sections.tsx +3 -5
  469. package/src/app/components/rail/session-header-mute.test.tsx +23 -1
  470. package/src/app/components/rail/session-header.test.tsx +21 -2
  471. package/src/app/components/rail/session-header.tsx +31 -1
  472. package/src/app/components/rail/session-list.tsx +89 -16
  473. package/src/app/components/rail/session-shell.tsx +0 -14
  474. package/src/app/components/session/session-search-dialog.tsx +12 -1
  475. package/src/app/embed/session-app.tsx +6 -3
  476. package/src/app/lib/actions/actions-provider.tsx +486 -0
  477. package/src/app/lib/actions/actions.test.ts +249 -0
  478. package/src/app/lib/actions/chat-directory.ts +231 -0
  479. package/src/app/lib/actions/chat-operations.ts +145 -0
  480. package/src/app/lib/actions/chat-switcher.ts +62 -0
  481. package/src/app/lib/actions/chords.ts +185 -0
  482. package/src/app/lib/actions/events.ts +10 -0
  483. package/src/app/lib/actions/rank.ts +119 -0
  484. package/src/app/lib/actions/registry.ts +333 -0
  485. package/src/app/lib/credit-coverage.test.ts +83 -0
  486. package/src/app/lib/credit-coverage.tsx +48 -0
  487. package/src/app/lib/free-credit-gap.test.ts +32 -1
  488. package/src/app/lib/free-credit-gap.tsx +32 -2
  489. package/src/app/lib/integration-connect-analytics.test.ts +1 -0
  490. package/src/app/lib/integration-connect-analytics.tsx +4 -0
  491. package/src/app/lib/models-route.test.ts +18 -0
  492. package/src/app/lib/models-route.tsx +26 -4
  493. package/src/app/lib/session-search-route.tsx +6 -1
  494. package/src/app/lib/session-ui-features.tsx +28 -9
  495. package/src/app/routes/session.tsx +74 -16
  496. package/src/app/routes/sessions-index.tsx +83 -4
  497. package/src/components/timeline-annotation-selection.tsx +9 -64
  498. package/src/components/timeline-annotation-shared.ts +9 -57
  499. package/src/hooks/page-wake.ts +80 -0
  500. package/src/hooks/use-session-events.ts +309 -81
  501. package/src/lib/format.ts +3 -2
  502. package/src/messages/en.ts +13 -3
  503. package/src/model-picker-model.ts +3 -0
  504. package/src/model-policy.ts +9 -1
  505. package/src/session.ts +1 -0
  506. package/src/timeline/annotation-model.ts +217 -0
  507. package/src/timeline/projection.ts +27 -21
  508. package/src/timeline-model.ts +14 -0
  509. package/src/ui/context-menu.tsx +16 -0
  510. package/src/ui/dropdown-menu.tsx +4 -1
  511. package/src/ui/segmented-control.tsx +3 -0
  512. package/styles/compiled.css +92 -0
  513. package/dist/app/lib/keyboard-shortcuts.d.ts +0 -51
  514. package/dist/app/lib/keyboard-shortcuts.js +0 -16
  515. package/dist/chunk-2MXUB3ZO.js.map +0 -1
  516. package/dist/chunk-2RIUMV7S.js.map +0 -1
  517. package/dist/chunk-53IXIUYP.js +0 -39
  518. package/dist/chunk-53IXIUYP.js.map +0 -1
  519. package/dist/chunk-DN3TKURW.js.map +0 -1
  520. package/dist/chunk-F2GXK2Z6.js.map +0 -1
  521. package/dist/chunk-G7VLL3PG.js.map +0 -1
  522. package/dist/chunk-GRLPRM56.js.map +0 -1
  523. package/dist/chunk-HUQHJSPV.js.map +0 -1
  524. package/dist/chunk-IO6K6UYJ.js.map +0 -1
  525. package/dist/chunk-KWB5U3ZT.js.map +0 -1
  526. package/dist/chunk-L5UCO2UV.js.map +0 -1
  527. package/dist/chunk-MOF3XSUM.js.map +0 -1
  528. package/dist/chunk-N2BEUKXT.js.map +0 -1
  529. package/dist/chunk-OS3EQOIS.js.map +0 -1
  530. package/dist/chunk-OYJY4Y4A.js.map +0 -1
  531. package/dist/chunk-Q2ZJOECN.js.map +0 -1
  532. package/dist/chunk-QWCTYLMD.js.map +0 -1
  533. package/dist/chunk-RZV7SXED.js.map +0 -1
  534. package/dist/chunk-S3M5WCZW.js.map +0 -1
  535. package/dist/chunk-SOOWLNC5.js.map +0 -1
  536. package/dist/chunk-SWWYYGQO.js.map +0 -1
  537. package/dist/chunk-UO36FC3S.js.map +0 -1
  538. package/dist/chunk-UYSZKDQY.js.map +0 -1
  539. package/dist/chunk-VE3FKXJ7.js.map +0 -1
  540. package/dist/chunk-VVFWOBAM.js.map +0 -1
  541. package/dist/chunk-ZSERYHHT.js.map +0 -1
  542. package/dist/timeline-annotation-selection-2IA7T5VR.js.map +0 -1
  543. package/src/app/lib/keyboard-shortcuts.test.ts +0 -47
  544. package/src/app/lib/keyboard-shortcuts.tsx +0 -58
  545. /package/dist/app/{lib/keyboard-shortcuts.js.map → components/command-menu/keycaps.js.map} +0 -0
  546. /package/dist/{browser-viewer-ZRFZX3VN.js.map → app/components/credits/credit-refusal-notice.js.map} +0 -0
  547. /package/dist/{chat-interactive-block-HUMYWVCK.js.map → app/lib/actions/actions-provider.js.map} +0 -0
  548. /package/dist/{computer-viewer-D4NHQB5D.js.map → app/lib/credit-coverage.js.map} +0 -0
  549. /package/dist/{embedded-new-voice-X4ZW6SY4.js.map → browser-viewer-HPUMK7UP.js.map} +0 -0
  550. /package/dist/{embedded-voice-4OD6Z3HU.js.map → chat-interactive-block-22PPECCT.js.map} +0 -0
  551. /package/dist/{chunk-GVIQ7H62.js.map → chunk-2LUBBDZV.js.map} +0 -0
  552. /package/dist/{chunk-XMMVIY7B.js.map → chunk-3CCJWHQY.js.map} +0 -0
  553. /package/dist/{chunk-XS2FZ6DX.js.map → chunk-3F5ZPIWI.js.map} +0 -0
  554. /package/dist/{chunk-72US6QNB.js.map → chunk-3J2YZRY5.js.map} +0 -0
  555. /package/dist/{chunk-D4YQF4E3.js.map → chunk-3SMJ2BIQ.js.map} +0 -0
  556. /package/dist/{chunk-TBJINQXA.js.map → chunk-3WCYK36X.js.map} +0 -0
  557. /package/dist/{chunk-WPCF34V6.js.map → chunk-3WG3CRL7.js.map} +0 -0
  558. /package/dist/{chunk-JI5BYQKO.js.map → chunk-3X46PNBX.js.map} +0 -0
  559. /package/dist/{chunk-PBK44WJC.js.map → chunk-4GJ37O6G.js.map} +0 -0
  560. /package/dist/{chunk-LEXPBQ56.js.map → chunk-4SKJX3C4.js.map} +0 -0
  561. /package/dist/{chunk-ZA6YD2LW.js.map → chunk-57SYK776.js.map} +0 -0
  562. /package/dist/{chunk-22LBKJDE.js.map → chunk-5DIAN5GQ.js.map} +0 -0
  563. /package/dist/{chunk-LJ3TDK2L.js.map → chunk-5FA455GR.js.map} +0 -0
  564. /package/dist/{chunk-YPR5INHV.js.map → chunk-5X3E2Z3D.js.map} +0 -0
  565. /package/dist/{chunk-OXNWZTEU.js.map → chunk-5ZJCL6X4.js.map} +0 -0
  566. /package/dist/{chunk-62OAZ4LO.js.map → chunk-6C5GQQMC.js.map} +0 -0
  567. /package/dist/{chunk-VGITH57T.js.map → chunk-6ERTXDZM.js.map} +0 -0
  568. /package/dist/{chunk-ZQ7XQZCF.js.map → chunk-6FX73Y4I.js.map} +0 -0
  569. /package/dist/{chunk-QZO2KK2F.js.map → chunk-6P44NG6Y.js.map} +0 -0
  570. /package/dist/{chunk-N2DDJLTM.js.map → chunk-6T7Y33JA.js.map} +0 -0
  571. /package/dist/{chunk-RBAGC2MJ.js.map → chunk-75VE5QUS.js.map} +0 -0
  572. /package/dist/{chunk-MRXOGI3O.js.map → chunk-77CUDSHG.js.map} +0 -0
  573. /package/dist/{chunk-GZ65XQR5.js.map → chunk-7T7FHSGS.js.map} +0 -0
  574. /package/dist/{chunk-YGAH34CD.js.map → chunk-A3S26JSP.js.map} +0 -0
  575. /package/dist/{chunk-GYPAO6RS.js.map → chunk-A664GSDM.js.map} +0 -0
  576. /package/dist/{chunk-JSZSNMDR.js.map → chunk-ASUYLXKO.js.map} +0 -0
  577. /package/dist/{chunk-RTK7SUPL.js.map → chunk-AUUJLVA3.js.map} +0 -0
  578. /package/dist/{chunk-OOTBYSCA.js.map → chunk-BBWKPNJB.js.map} +0 -0
  579. /package/dist/{chunk-BGZIMIUU.js.map → chunk-BCUYWOQU.js.map} +0 -0
  580. /package/dist/{chunk-EKN4N4LS.js.map → chunk-BDFMNJZJ.js.map} +0 -0
  581. /package/dist/{chunk-YZKGOWCC.js.map → chunk-BIDXQAGO.js.map} +0 -0
  582. /package/dist/{chunk-Q2UUANHF.js.map → chunk-BIKAJ4DY.js.map} +0 -0
  583. /package/dist/{chunk-5IQBF2X3.js.map → chunk-BJPJ2OUX.js.map} +0 -0
  584. /package/dist/{chunk-EY2EMHZW.js.map → chunk-BPM2OTYK.js.map} +0 -0
  585. /package/dist/{chunk-MT4TBRQB.js.map → chunk-BSWS2RUZ.js.map} +0 -0
  586. /package/dist/{chunk-T7YD3VGK.js.map → chunk-C52MNKXU.js.map} +0 -0
  587. /package/dist/{chunk-THNW33K7.js.map → chunk-CEUDV4OA.js.map} +0 -0
  588. /package/dist/{chunk-LHGIS6SZ.js.map → chunk-CVK74BH7.js.map} +0 -0
  589. /package/dist/{chunk-DFO2UCYG.js.map → chunk-CW5I65ZX.js.map} +0 -0
  590. /package/dist/{chunk-SKRLKQEG.js.map → chunk-DOSC2HRQ.js.map} +0 -0
  591. /package/dist/{chunk-KVB6XDLP.js.map → chunk-DPJ2CWVN.js.map} +0 -0
  592. /package/dist/{chunk-4J6V4DH7.js.map → chunk-DXMRO2MU.js.map} +0 -0
  593. /package/dist/{chunk-42I4O4WQ.js.map → chunk-EE55IDDR.js.map} +0 -0
  594. /package/dist/{chunk-2RA6XABP.js.map → chunk-EEERTLFF.js.map} +0 -0
  595. /package/dist/{chunk-PTOTKUKO.js.map → chunk-EEO744XR.js.map} +0 -0
  596. /package/dist/{chunk-LD3HVI2J.js.map → chunk-EMFGBAQL.js.map} +0 -0
  597. /package/dist/{chunk-FQGUK4ST.js.map → chunk-ENPJKVMN.js.map} +0 -0
  598. /package/dist/{chunk-HDHK3SXK.js.map → chunk-EU6RLHMP.js.map} +0 -0
  599. /package/dist/{chunk-MRUWRQBX.js.map → chunk-FET6XHGS.js.map} +0 -0
  600. /package/dist/{chunk-M6KUY3YH.js.map → chunk-FIICQA55.js.map} +0 -0
  601. /package/dist/{chunk-NLWLCYCT.js.map → chunk-FTZXCPE3.js.map} +0 -0
  602. /package/dist/{chunk-FN2KA3MJ.js.map → chunk-FUS76DO4.js.map} +0 -0
  603. /package/dist/{chunk-AM4IIPWI.js.map → chunk-G7N5NPRJ.js.map} +0 -0
  604. /package/dist/{chunk-CCQ7YKOD.js.map → chunk-GBYZ6653.js.map} +0 -0
  605. /package/dist/{chunk-YKKVIJVX.js.map → chunk-GQDSC6QZ.js.map} +0 -0
  606. /package/dist/{chunk-5X6JP75Q.js.map → chunk-GRSODLVO.js.map} +0 -0
  607. /package/dist/{chunk-73YP3R5X.js.map → chunk-GSESCQFY.js.map} +0 -0
  608. /package/dist/{chunk-MZLEBFUZ.js.map → chunk-GZD6VBIK.js.map} +0 -0
  609. /package/dist/{chunk-IZR2QRFF.js.map → chunk-H3HH5AHS.js.map} +0 -0
  610. /package/dist/{chunk-OJPUVUB6.js.map → chunk-HAOZCLLA.js.map} +0 -0
  611. /package/dist/{chunk-ZBHDGAYL.js.map → chunk-HEFE4OZJ.js.map} +0 -0
  612. /package/dist/{chunk-WTG34JVA.js.map → chunk-HI75UTI6.js.map} +0 -0
  613. /package/dist/{chunk-OMBIG3NC.js.map → chunk-HM633ROV.js.map} +0 -0
  614. /package/dist/{chunk-WDFZWSKD.js.map → chunk-HRIP4M6H.js.map} +0 -0
  615. /package/dist/{chunk-A2BCW6CQ.js.map → chunk-HU2DRFFI.js.map} +0 -0
  616. /package/dist/{chunk-PO35PBAB.js.map → chunk-HVH7FFJH.js.map} +0 -0
  617. /package/dist/{chunk-EG7KNUF7.js.map → chunk-HYTXTKST.js.map} +0 -0
  618. /package/dist/{chunk-TFHG75A4.js.map → chunk-I4XMDFUJ.js.map} +0 -0
  619. /package/dist/{chunk-IZHVZZQA.js.map → chunk-ICAUYWSL.js.map} +0 -0
  620. /package/dist/{chunk-DCLPWYP3.js.map → chunk-IEVPJ3G6.js.map} +0 -0
  621. /package/dist/{chunk-EVWZHDSF.js.map → chunk-IKH3VTA4.js.map} +0 -0
  622. /package/dist/{chunk-TYHLEFD2.js.map → chunk-IZJNMRIR.js.map} +0 -0
  623. /package/dist/{chunk-D2SR3TEB.js.map → chunk-J243WGUA.js.map} +0 -0
  624. /package/dist/{chunk-QGSGIYE3.js.map → chunk-J2C6LB6W.js.map} +0 -0
  625. /package/dist/{chunk-MT6TRTXF.js.map → chunk-J5MEDX7C.js.map} +0 -0
  626. /package/dist/{chunk-6QHUKBJP.js.map → chunk-J7SKOO44.js.map} +0 -0
  627. /package/dist/{chunk-W2QK7PYS.js.map → chunk-JAAST75A.js.map} +0 -0
  628. /package/dist/{chunk-NQCMS4AJ.js.map → chunk-JQCGPTZ6.js.map} +0 -0
  629. /package/dist/{chunk-CMUXJHGH.js.map → chunk-JRSCWQMC.js.map} +0 -0
  630. /package/dist/{chunk-Q4OHNGGB.js.map → chunk-JRXHSVD5.js.map} +0 -0
  631. /package/dist/{chunk-SD2K5ZN5.js.map → chunk-JXYLDT6X.js.map} +0 -0
  632. /package/dist/{chunk-IXX6ZOL2.js.map → chunk-KGTMHEAP.js.map} +0 -0
  633. /package/dist/{chunk-22OBGVEJ.js.map → chunk-KOXVGPW4.js.map} +0 -0
  634. /package/dist/{chunk-NOZ5CGZE.js.map → chunk-L5GPPMUB.js.map} +0 -0
  635. /package/dist/{chunk-4FOOHMTU.js.map → chunk-LY6727IF.js.map} +0 -0
  636. /package/dist/{chunk-PT7MTXRE.js.map → chunk-MAOCN7J6.js.map} +0 -0
  637. /package/dist/{chunk-4K2JSJNX.js.map → chunk-MB5LZVDO.js.map} +0 -0
  638. /package/dist/{chunk-5LES64PP.js.map → chunk-MKOQAVOE.js.map} +0 -0
  639. /package/dist/{chunk-BMV2SNYX.js.map → chunk-MUPWNSEJ.js.map} +0 -0
  640. /package/dist/{chunk-Y5TRG22C.js.map → chunk-NRXIECWC.js.map} +0 -0
  641. /package/dist/{chunk-GOE7G5JX.js.map → chunk-NWSAF6P5.js.map} +0 -0
  642. /package/dist/{chunk-DUM363VS.js.map → chunk-OFZQJNF6.js.map} +0 -0
  643. /package/dist/{chunk-CKN5QPEL.js.map → chunk-OMF7POEY.js.map} +0 -0
  644. /package/dist/{chunk-MVXKO2BD.js.map → chunk-OXD6ET34.js.map} +0 -0
  645. /package/dist/{chunk-47JUEVME.js.map → chunk-PALX6HWV.js.map} +0 -0
  646. /package/dist/{chunk-B6OGSG7I.js.map → chunk-PE3BLBDT.js.map} +0 -0
  647. /package/dist/{chunk-RVISSNVE.js.map → chunk-PMZKJOG6.js.map} +0 -0
  648. /package/dist/{chunk-CESAMXWX.js.map → chunk-PQUTMG3S.js.map} +0 -0
  649. /package/dist/{chunk-7VFCOKPG.js.map → chunk-PWBGODZU.js.map} +0 -0
  650. /package/dist/{chunk-MOPAXD2H.js.map → chunk-QCADUTYX.js.map} +0 -0
  651. /package/dist/{chunk-CT5FBO7E.js.map → chunk-RPOUJI25.js.map} +0 -0
  652. /package/dist/{chunk-WKHYOS72.js.map → chunk-RW4GFE56.js.map} +0 -0
  653. /package/dist/{chunk-FH4GO7HO.js.map → chunk-RYLVVDR7.js.map} +0 -0
  654. /package/dist/{chunk-QZRDCFHI.js.map → chunk-S66SBBFQ.js.map} +0 -0
  655. /package/dist/{chunk-CQJFIPAH.js.map → chunk-S7TNV2I7.js.map} +0 -0
  656. /package/dist/{chunk-ZBQSIGGR.js.map → chunk-SC773IMJ.js.map} +0 -0
  657. /package/dist/{chunk-FBJ2HK7A.js.map → chunk-SGPJ3YS2.js.map} +0 -0
  658. /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
  659. /package/dist/{chunk-RKZWCTXV.js.map → chunk-TAEKDMEF.js.map} +0 -0
  660. /package/dist/{chunk-6AVCAUGL.js.map → chunk-TASEV25T.js.map} +0 -0
  661. /package/dist/{chunk-3XOISKZC.js.map → chunk-TLGDPMUX.js.map} +0 -0
  662. /package/dist/{chunk-5IUW34PG.js.map → chunk-TY3QYPJ6.js.map} +0 -0
  663. /package/dist/{chunk-VQFR4EU4.js.map → chunk-U3JK5VJV.js.map} +0 -0
  664. /package/dist/{chunk-2AWMJO54.js.map → chunk-U42P3RMZ.js.map} +0 -0
  665. /package/dist/{chunk-GUU75DES.js.map → chunk-UEJTOPLW.js.map} +0 -0
  666. /package/dist/{chunk-OZOEWLGR.js.map → chunk-UT6JAORE.js.map} +0 -0
  667. /package/dist/{chunk-5TELOQA6.js.map → chunk-UTHPUINA.js.map} +0 -0
  668. /package/dist/{chunk-26RQ6JBR.js.map → chunk-VBVCNH6D.js.map} +0 -0
  669. /package/dist/{chunk-P646DND6.js.map → chunk-VCMQPCME.js.map} +0 -0
  670. /package/dist/{chunk-LV7FMIMM.js.map → chunk-VGUHAHHV.js.map} +0 -0
  671. /package/dist/{chunk-GYVXARCY.js.map → chunk-VIBPFVU4.js.map} +0 -0
  672. /package/dist/{chunk-KHPOKZ6Z.js.map → chunk-VMAC66JX.js.map} +0 -0
  673. /package/dist/{chunk-SHKRS6I5.js.map → chunk-VRPNETPK.js.map} +0 -0
  674. /package/dist/{chunk-6U4J6RVS.js.map → chunk-WCHW4XN7.js.map} +0 -0
  675. /package/dist/{chunk-CJH6QUQJ.js.map → chunk-WD3UXNJV.js.map} +0 -0
  676. /package/dist/{chunk-H5EVWF6L.js.map → chunk-WR67FJMX.js.map} +0 -0
  677. /package/dist/{chunk-XLIJ36RG.js.map → chunk-WRMQ7EX4.js.map} +0 -0
  678. /package/dist/{chunk-7KLCFJ5G.js.map → chunk-X4PPGXQG.js.map} +0 -0
  679. /package/dist/{chunk-ZE2JTVCQ.js.map → chunk-X5BMQXFD.js.map} +0 -0
  680. /package/dist/{chunk-UECU6LZI.js.map → chunk-XXRBOSWV.js.map} +0 -0
  681. /package/dist/{chunk-SPKAIDWX.js.map → chunk-XZEFCPBL.js.map} +0 -0
  682. /package/dist/{chunk-EZ5NYRHK.js.map → chunk-YL6N7QLA.js.map} +0 -0
  683. /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
  684. /package/dist/{chunk-AR62NQXE.js.map → chunk-Z2S5VQG7.js.map} +0 -0
  685. /package/dist/{chunk-7UQJEADK.js.map → chunk-ZL2O4BYP.js.map} +0 -0
  686. /package/dist/{chunk-FOOITLHR.js.map → chunk-ZZHBT5WQ.js.map} +0 -0
  687. /package/dist/{chunk-X6VJQJYY.js.map → chunk-ZZWHKC6A.js.map} +0 -0
  688. /package/dist/{model-policy-picker-menu-XOPYY6YA.js.map → computer-viewer-S6TE6TN7.js.map} +0 -0
  689. /package/dist/{sandbox-files-LJCR437H.js.map → embedded-new-voice-ZDZPGX25.js.map} +0 -0
  690. /package/dist/{session-realtime-UISLBZ4A.js.map → embedded-voice-FKCUXSJO.js.map} +0 -0
  691. /package/dist/{fleet-decision-row-5UCJXTDP.js.map → fleet-decision-row-VCGWYJAV.js.map} +0 -0
  692. /package/dist/{latest-question-VGVNUGAU.js.map → latest-question-SINEV4U6.js.map} +0 -0
  693. /package/dist/{platform-activity-row-56XOVTRA.js.map → platform-activity-row-LU5WABI2.js.map} +0 -0
@@ -3,6 +3,9 @@ import {
3
3
  deniesRetainedView,
4
4
  useRetainedSessionView
5
5
  } from "./chunk-TWXIFWBD.js";
6
+ import {
7
+ useFileAttachments
8
+ } from "./chunk-I6FIXEL4.js";
6
9
  import {
7
10
  projectPendingApprovals
8
11
  } from "./chunk-UD2PSIIX.js";
@@ -12,10 +15,7 @@ import {
12
15
  isToolOutputPreviewEvent,
13
16
  sessionStatusFromEvents,
14
17
  useToolOutputReads
15
- } from "./chunk-OS3EQOIS.js";
16
- import {
17
- useFileAttachments
18
- } from "./chunk-I6FIXEL4.js";
18
+ } from "./chunk-T4F5TW2X.js";
19
19
  import {
20
20
  useSharedQuery
21
21
  } from "./chunk-JKUICTLM.js";
@@ -23,25 +23,22 @@ import {
23
23
  cachedClientConfigRead,
24
24
  joinClientConfigRead
25
25
  } from "./chunk-IGVL3ELX.js";
26
- import {
27
- readAcknowledgementFrontier,
28
- sessionAttentionReadThroughSequence
29
- } from "./chunk-C5ZCSVZ7.js";
30
- import {
31
- isActionableHumanInputRequest
32
- } from "./chunk-IZV5FTJC.js";
33
26
  import {
34
27
  FILE_ONLY_MESSAGE_TEXT,
35
28
  notifyObserver,
36
29
  useComposer
37
- } from "./chunk-5IQBF2X3.js";
30
+ } from "./chunk-BJPJ2OUX.js";
38
31
  import {
39
32
  coerceReasoningEffortForModel,
40
33
  defaultEffortForModel,
41
34
  projectPickerRows,
42
35
  runnableLatencyModesForModel,
43
36
  sortPickerRows
44
- } from "./chunk-GRLPRM56.js";
37
+ } from "./chunk-CFEFYPNR.js";
38
+ import {
39
+ readAcknowledgementFrontier,
40
+ sessionAttentionReadThroughSequence
41
+ } from "./chunk-C5ZCSVZ7.js";
45
42
  import {
46
43
  projectionReadThrough,
47
44
  useDebouncedCallback,
@@ -61,9 +58,12 @@ import {
61
58
  useOpenGeni,
62
59
  useOpenGeniClient
63
60
  } from "./chunk-TVQCDDSZ.js";
61
+ import {
62
+ isActionableHumanInputRequest
63
+ } from "./chunk-IZV5FTJC.js";
64
64
  import {
65
65
  useOpenGeniText
66
- } from "./chunk-G7VLL3PG.js";
66
+ } from "./chunk-F2YABPRJ.js";
67
67
 
68
68
  // src/older-history.ts
69
69
  var activeReceiptCapture;
@@ -573,6 +573,7 @@ function useSessionControl(sessionId, options = {}) {
573
573
  // src/hooks/use-session-events.ts
574
574
  import {
575
575
  isPresentedSessionToolName,
576
+ isRetryableStreamError,
576
577
  isSessionModelResponsePhase,
577
578
  SESSION_EVENT_COMPAT_EXCLUDED_STEP_TYPES,
578
579
  SESSION_EVENT_CONTENT_STEP_TYPES,
@@ -582,6 +583,65 @@ import {
582
583
  } from "@opengeni/sdk";
583
584
  import { startTransition, useCallback as useCallback6, useEffect as useEffect3, useMemo as useMemo2, useRef as useRef4, useState as useState3 } from "react";
584
585
 
586
+ // src/hooks/page-wake.ts
587
+ var PAGE_WAKE_CHECK_INTERVAL_MS = 2e3;
588
+ var PAGE_WAKE_GAP_MS = 15e3;
589
+ var listeners = /* @__PURE__ */ new Set();
590
+ var stopDetector = null;
591
+ function subscribePageWake(listener) {
592
+ listeners.add(listener);
593
+ stopDetector ??= startDetector();
594
+ return () => {
595
+ listeners.delete(listener);
596
+ if (listeners.size === 0 && stopDetector) {
597
+ stopDetector();
598
+ stopDetector = null;
599
+ }
600
+ };
601
+ }
602
+ function emitPageWake() {
603
+ for (const listener of [...listeners]) {
604
+ try {
605
+ listener();
606
+ } catch {
607
+ }
608
+ }
609
+ }
610
+ function startDetector() {
611
+ if (typeof window === "undefined" || typeof document === "undefined") return () => {
612
+ };
613
+ let lastTick = Date.now();
614
+ const check = () => {
615
+ const now = Date.now();
616
+ const elapsed = now - lastTick;
617
+ lastTick = now;
618
+ if (elapsed > PAGE_WAKE_GAP_MS) emitPageWake();
619
+ };
620
+ const onVisibility = () => {
621
+ if (document.visibilityState !== "hidden") check();
622
+ };
623
+ const onPageShow = (event) => {
624
+ lastTick = Date.now();
625
+ if (event.persisted) emitPageWake();
626
+ };
627
+ const onResume = () => {
628
+ lastTick = Date.now();
629
+ emitPageWake();
630
+ };
631
+ const timer = setInterval(check, PAGE_WAKE_CHECK_INTERVAL_MS);
632
+ document.addEventListener("visibilitychange", onVisibility);
633
+ document.addEventListener("resume", onResume);
634
+ window.addEventListener("pageshow", onPageShow);
635
+ window.addEventListener("online", onResume);
636
+ return () => {
637
+ clearInterval(timer);
638
+ document.removeEventListener("visibilitychange", onVisibility);
639
+ document.removeEventListener("resume", onResume);
640
+ window.removeEventListener("pageshow", onPageShow);
641
+ window.removeEventListener("online", onResume);
642
+ };
643
+ }
644
+
585
645
  // src/hooks/turnless-output-gaps.ts
586
646
  import { useCallback as useCallback5, useSyncExternalStore } from "react";
587
647
  var MAX_IDLE_ENTRIES = 256;
@@ -639,6 +699,10 @@ var BOUNDARY_PAGE_CAP = 1;
639
699
  var FILTERED_PAGE_CAP = 32;
640
700
  var DIRECT_REPLAY_MAX_SEQUENCES = 16;
641
701
  var CATCHUP_MAX_PAGES = 2;
702
+ var STRICT_REJOIN_ATTEMPTS = 5;
703
+ var REJOIN_STALL_TIMEOUT_MS = 3e4;
704
+ var FOREGROUND_REJOIN_RETRY_MS = 500;
705
+ var FOREGROUND_REJOIN_RETRY_MAX_MS = 8e3;
642
706
  var EMPTY_EVENTS = [];
643
707
  var encoder = new TextEncoder();
644
708
  var SESSION_EVENT_BROWSER_MAX_BYTES = 16 * 1024 * 1024;
@@ -741,8 +805,8 @@ function useSessionEvents(sessionId, options = {}) {
741
805
  setStepStores(next);
742
806
  }, []);
743
807
  const pruneStepStores = useCallback6(
744
- (window, sealedBy, rereading = null) => {
745
- const present = windowTurns(window);
808
+ (window2, sealedBy, rereading = null) => {
809
+ const present = windowTurns(window2);
746
810
  const settled = sealedBy ? settledTurns(sealedBy) : null;
747
811
  const next = /* @__PURE__ */ new Map();
748
812
  for (const [turnId, store] of stepStoresRef.current) {
@@ -1136,49 +1200,59 @@ function useSessionEvents(sessionId, options = {}) {
1136
1200
  setHasOlder(true);
1137
1201
  }
1138
1202
  };
1139
- const readSessionHead = async () => {
1140
- const joined = joinSessionDetailRead(client, workspaceId, sessionId, detailReadMark);
1203
+ const effectScope = { signal: controller.signal, isCurrent };
1204
+ const readSessionHead = async (mark, scope) => {
1205
+ const joined = joinSessionDetailRead(client, workspaceId, sessionId, mark);
1141
1206
  if (joined) {
1142
1207
  try {
1143
1208
  return await joined;
1144
1209
  } catch (cause) {
1145
- if (controller.signal.aborted) throw cause;
1210
+ if (scope.signal.aborted) throw cause;
1146
1211
  }
1147
1212
  }
1148
1213
  return await client.getSession(workspaceId, sessionId, {
1149
1214
  fresh: true,
1150
- signal: controller.signal
1215
+ signal: scope.signal
1151
1216
  });
1152
1217
  };
1153
- const rejoinLive = async (force) => {
1218
+ const rejoinLive = async (force, {
1219
+ strict = false,
1220
+ mark = detailReadMark,
1221
+ scope = effectScope
1222
+ } = {}) => {
1154
1223
  const activeTurn = activeConversationTurn(eventWindowRef.current.events);
1155
1224
  if (!force && !activeTurn) return "joined";
1156
1225
  const cursor = streamResumeSequenceRef.current;
1157
1226
  let head;
1158
1227
  let sessionActiveTurn = null;
1159
1228
  try {
1160
- const session = await readSessionHead();
1229
+ const session = await readSessionHead(mark, scope);
1230
+ scope.progress?.();
1161
1231
  head = session.lastSequence;
1162
1232
  sessionActiveTurn = session.activeTurnId;
1163
1233
  } catch (cause) {
1164
- if (controller.signal.aborted) throw cause;
1234
+ if (!scope.isCurrent() || strict && isRetryableStreamError(cause)) throw cause;
1165
1235
  return "joined";
1166
1236
  }
1167
- if (!isCurrent()) throw abortError();
1237
+ if (!scope.isCurrent()) throw abortError();
1168
1238
  if (!Number.isSafeInteger(head) || head - cursor <= DIRECT_REPLAY_MAX_SEQUENCES) {
1169
1239
  return "joined";
1170
1240
  }
1171
1241
  let catchup;
1172
1242
  try {
1173
- catchup = await loadConversationCatchup(client, workspaceId, sessionId, cursor, head, {
1174
- signal: controller.signal,
1175
- isCurrent
1176
- });
1243
+ catchup = await loadConversationCatchup(
1244
+ client,
1245
+ workspaceId,
1246
+ sessionId,
1247
+ cursor,
1248
+ head,
1249
+ scope
1250
+ );
1177
1251
  } catch (cause) {
1178
- if (!isCurrent()) throw cause;
1252
+ if (!scope.isCurrent() || strict && isRetryableStreamError(cause)) throw cause;
1179
1253
  return "joined";
1180
1254
  }
1181
- if (!isCurrent()) throw abortError();
1255
+ if (!scope.isCurrent()) throw abortError();
1182
1256
  if (catchup === null) return "reload";
1183
1257
  const previous = eventWindowRef.current.events;
1184
1258
  installCatchup(catchup, head);
@@ -1190,17 +1264,171 @@ function useSessionEvents(sessionId, options = {}) {
1190
1264
  }
1191
1265
  return "joined";
1192
1266
  };
1267
+ const loadLatestWindow = async (scope = effectScope) => {
1268
+ const window2 = await loadEventWindow(t, client, workspaceId, sessionId, {
1269
+ before: Number.MAX_SAFE_INTEGER,
1270
+ pageSize: SESSION_HISTORY_PAGE_SIZE,
1271
+ targetGroups: Number.POSITIVE_INFINITY,
1272
+ maxFetches: INITIAL_FETCH_CAP,
1273
+ boundaryPageCap: BOUNDARY_PAGE_CAP,
1274
+ signal: scope.signal,
1275
+ ...scope.progress ? { progress: scope.progress } : {},
1276
+ filter: CONVERSATION_FILTER
1277
+ });
1278
+ if (!scope.isCurrent()) {
1279
+ return false;
1280
+ }
1281
+ const status = observeSessionStatus(window2.events, sessionStatusRef);
1282
+ const retained = boundBrowserSessionEventWindow(window2.events);
1283
+ navigationGenerationRef.current += 1;
1284
+ loadingOlderRef.current = false;
1285
+ loadingNewerRef.current = false;
1286
+ loadingOldestRef.current = false;
1287
+ setLoadingOlder(false);
1288
+ setLoadingNewer(false);
1289
+ setLoadingOldest(false);
1290
+ const previous = eventWindowRef.current.events;
1291
+ eventWindowRef.current = retained;
1292
+ pruneStepStores(retained.events, previous);
1293
+ oldestSequenceRef.current = retained.events[0]?.sequence ?? window2.oldestSequence ?? window2.scanCursor;
1294
+ newestSequenceRef.current = maxResumeSequenceOrNull(retained.events) ?? window2.newestSequence;
1295
+ hasOlderRef.current = window2.hasOlder || retained.truncated;
1296
+ hasNewerRef.current = false;
1297
+ lastSequenceRef.current = Math.max(lastSequenceRef.current, window2.newestSequence);
1298
+ streamResumeSequenceRef.current = window2.newestSequence;
1299
+ skippedStepsThroughRef.current = retained.events.length === 0 && window2.newestSequence > 0 ? window2.newestSequence : null;
1300
+ initialWindowLoadedRef.current = true;
1301
+ setInitialHistoryReady(true);
1302
+ setError(null);
1303
+ if (status !== void 0) {
1304
+ setSessionStatusProjection(status);
1305
+ }
1306
+ setEventWindow(retained);
1307
+ setHasOlder(window2.hasOlder || retained.truncated);
1308
+ setHasNewer(false);
1309
+ setInitialLoading(false);
1310
+ return true;
1311
+ };
1312
+ const noteStreamResume = () => {
1313
+ if (!fullReplay && streamResumeSequenceRef.current > liveThroughRef.current) {
1314
+ markTurnlessOutputGap(workspaceId, sessionId);
1315
+ }
1316
+ liveThroughRef.current = Math.max(liveThroughRef.current, streamResumeSequenceRef.current);
1317
+ };
1318
+ const boundedRejoin = async (strict, join) => {
1319
+ if (!isCurrent()) throw abortError();
1320
+ const attempt = new AbortController();
1321
+ let timedOut = false;
1322
+ const abortAttempt = () => attempt.abort();
1323
+ controller.signal.addEventListener("abort", abortAttempt, { once: true });
1324
+ const stalled = () => {
1325
+ timedOut = true;
1326
+ attempt.abort();
1327
+ };
1328
+ let timer = setTimeout(stalled, REJOIN_STALL_TIMEOUT_MS);
1329
+ let stopWaiting;
1330
+ const stopped = new Promise((_resolve, reject) => {
1331
+ stopWaiting = () => reject(abortError());
1332
+ attempt.signal.addEventListener("abort", stopWaiting, { once: true });
1333
+ });
1334
+ const scope = {
1335
+ signal: attempt.signal,
1336
+ isCurrent: () => isCurrent() && !attempt.signal.aborted,
1337
+ progress: () => {
1338
+ if (attempt.signal.aborted) return;
1339
+ clearTimeout(timer);
1340
+ timer = setTimeout(stalled, REJOIN_STALL_TIMEOUT_MS);
1341
+ }
1342
+ };
1343
+ try {
1344
+ return await Promise.race([join(scope), stopped]);
1345
+ } catch (cause) {
1346
+ if (!isCurrent()) throw cause;
1347
+ if (timedOut) {
1348
+ return strict ? {
1349
+ retry: new TypeError(
1350
+ `rejoining the live session stalled for ${REJOIN_STALL_TIMEOUT_MS}ms`
1351
+ )
1352
+ } : "joined";
1353
+ }
1354
+ if (strict && isRetryableStreamError(cause)) return { retry: cause };
1355
+ throw cause;
1356
+ } finally {
1357
+ clearTimeout(timer);
1358
+ controller.signal.removeEventListener("abort", abortAttempt);
1359
+ if (stopWaiting) attempt.signal.removeEventListener("abort", stopWaiting);
1360
+ }
1361
+ };
1362
+ const leniently = async (join) => {
1363
+ const result = await boundedRejoin(false, join);
1364
+ return typeof result === "string" ? result : "joined";
1365
+ };
1366
+ let strictFailures = 0;
1367
+ const beforeReconnect = async (cursor) => {
1368
+ flush();
1369
+ if (!isCurrent()) throw abortError();
1370
+ const strict = strictFailures < STRICT_REJOIN_ATTEMPTS;
1371
+ const mark = sessionDetailReadMark();
1372
+ let result;
1373
+ try {
1374
+ result = await boundedRejoin(strict, async (scope) => {
1375
+ if (await rejoinLive(true, { strict, mark, scope }) === "joined") return "joined";
1376
+ let loaded;
1377
+ try {
1378
+ loaded = await loadLatestWindow(scope);
1379
+ } catch (cause) {
1380
+ if (!scope.isCurrent() || strict && isRetryableStreamError(cause)) throw cause;
1381
+ return "joined";
1382
+ }
1383
+ if (!loaded) throw abortError();
1384
+ if (await rejoinLive(true, { strict, mark, scope }) === "reload" && strict) {
1385
+ throw new TypeError("the session outran a fresh window while rejoining it");
1386
+ }
1387
+ return "joined";
1388
+ });
1389
+ } catch (cause) {
1390
+ if (!isCurrent()) throw abortError();
1391
+ if (!isRetryableStreamError(cause)) throw cause;
1392
+ throw new Error(
1393
+ `rejoining the live session failed: ${cause instanceof Error ? cause.message : String(cause)}`,
1394
+ { cause }
1395
+ );
1396
+ }
1397
+ if (!isCurrent()) throw abortError();
1398
+ if (typeof result === "object") {
1399
+ strictFailures += 1;
1400
+ throw result.retry;
1401
+ }
1402
+ noteStreamResume();
1403
+ return Math.max(cursor, streamResumeSequenceRef.current);
1404
+ };
1193
1405
  void (async () => {
1194
1406
  try {
1195
1407
  if (reconcileForegroundResume) {
1196
1408
  setConnectionState("connecting");
1197
- if (await rejoinLive(true) === "reload") {
1409
+ let outcome;
1410
+ for (let attempt = 0; ; attempt += 1) {
1411
+ const strict = attempt < STRICT_REJOIN_ATTEMPTS;
1412
+ const result = await boundedRejoin(
1413
+ strict,
1414
+ (scope) => rejoinLive(true, { strict, scope })
1415
+ );
1416
+ if (typeof result === "string") {
1417
+ outcome = result;
1418
+ break;
1419
+ }
1420
+ await abortableDelay(
1421
+ Math.min(FOREGROUND_REJOIN_RETRY_MS * 2 ** attempt, FOREGROUND_REJOIN_RETRY_MAX_MS),
1422
+ controller.signal
1423
+ );
1424
+ }
1425
+ if (outcome === "reload") {
1198
1426
  initialWindowLoadedRef.current = false;
1199
1427
  setError(null);
1200
1428
  }
1201
1429
  } else if (!fullReplay && initialWindowLoadedRef.current && rejoinPendingRef.current) {
1202
1430
  rejoinPendingRef.current = false;
1203
- if (await rejoinLive(false) === "reload") {
1431
+ if (await leniently((scope) => rejoinLive(false, { scope })) === "reload") {
1204
1432
  initialWindowLoadedRef.current = false;
1205
1433
  }
1206
1434
  }
@@ -1208,64 +1436,26 @@ function useSessionEvents(sessionId, options = {}) {
1208
1436
  const windowPasses = fullReplay ? 0 : 2;
1209
1437
  for (let attempt = 0; attempt < windowPasses && !initialWindowLoadedRef.current; attempt += 1) {
1210
1438
  setConnectionState("connecting");
1211
- const window = await loadEventWindow(t, client, workspaceId, sessionId, {
1212
- before: Number.MAX_SAFE_INTEGER,
1213
- pageSize: SESSION_HISTORY_PAGE_SIZE,
1214
- targetGroups: Number.POSITIVE_INFINITY,
1215
- maxFetches: INITIAL_FETCH_CAP,
1216
- boundaryPageCap: BOUNDARY_PAGE_CAP,
1217
- signal: controller.signal,
1218
- filter: CONVERSATION_FILTER
1219
- });
1220
- if (!isCurrent()) {
1439
+ if (!await loadLatestWindow()) {
1221
1440
  return;
1222
1441
  }
1223
- const status = observeSessionStatus(window.events, sessionStatusRef);
1224
- const retained = boundBrowserSessionEventWindow(window.events);
1225
- navigationGenerationRef.current += 1;
1226
- loadingOlderRef.current = false;
1227
- loadingNewerRef.current = false;
1228
- loadingOldestRef.current = false;
1229
- setLoadingOlder(false);
1230
- setLoadingNewer(false);
1231
- setLoadingOldest(false);
1232
- const previous = eventWindowRef.current.events;
1233
- eventWindowRef.current = retained;
1234
- pruneStepStores(retained.events, previous);
1235
- oldestSequenceRef.current = retained.events[0]?.sequence ?? window.oldestSequence ?? window.scanCursor;
1236
- newestSequenceRef.current = maxResumeSequenceOrNull(retained.events) ?? window.newestSequence;
1237
- hasOlderRef.current = window.hasOlder || retained.truncated;
1238
- hasNewerRef.current = false;
1239
- lastSequenceRef.current = Math.max(lastSequenceRef.current, window.newestSequence);
1240
- streamResumeSequenceRef.current = window.newestSequence;
1241
- skippedStepsThroughRef.current = retained.events.length === 0 && window.newestSequence > 0 ? window.newestSequence : null;
1242
- initialWindowLoadedRef.current = true;
1243
- setInitialHistoryReady(true);
1244
- setError(null);
1245
- if (status !== void 0) {
1246
- setSessionStatusProjection(status);
1247
- }
1248
- setEventWindow(retained);
1249
- setHasOlder(window.hasOlder || retained.truncated);
1250
- setHasNewer(false);
1251
- setInitialLoading(false);
1252
- if (await rejoinLive(true) === "reload" && attempt === 0) {
1442
+ if (await leniently((scope) => rejoinLive(true, { scope })) === "reload" && attempt === 0) {
1253
1443
  initialWindowLoadedRef.current = false;
1254
1444
  }
1255
1445
  }
1256
1446
  if (fullReplay) {
1257
1447
  setInitialLoading(false);
1258
1448
  }
1259
- if (!fullReplay && streamResumeSequenceRef.current > liveThroughRef.current) {
1260
- markTurnlessOutputGap(workspaceId, sessionId);
1261
- }
1262
- liveThroughRef.current = Math.max(liveThroughRef.current, streamResumeSequenceRef.current);
1449
+ noteStreamResume();
1263
1450
  const stream = client.streamEvents(workspaceId, sessionId, {
1264
1451
  after: streamResumeSequenceRef.current,
1265
1452
  signal: controller.signal,
1453
+ // Full replay keeps the SDK's exactly-once reconnects.
1454
+ ...fullReplay ? {} : { beforeReconnect },
1266
1455
  onOpen: () => {
1267
1456
  const initialOpen = openedStreamKeyRef.current !== streamKey;
1268
1457
  openedStreamKeyRef.current = streamKey;
1458
+ strictFailures = 0;
1269
1459
  void Promise.resolve().then(() => reconcileSession(sessionId, { initialOpen })).catch((cause) => {
1270
1460
  if (isCurrent()) {
1271
1461
  setError(normalizeError(cause));
@@ -1338,6 +1528,17 @@ function useSessionEvents(sessionId, options = {}) {
1338
1528
  presentedCallIds,
1339
1529
  startupTurns
1340
1530
  ]);
1531
+ useEffect3(() => {
1532
+ if (!sessionId || !streamEnabled) return;
1533
+ return subscribePageWake(() => {
1534
+ const stream = streamAbortRef.current;
1535
+ if (!stream || stream.signal.aborted || viewModeRef.current !== "live") return;
1536
+ if (!fullReplay && initialWindowLoadedRef.current) {
1537
+ reconcileAfterPageResumeRef.current = true;
1538
+ }
1539
+ setStreamEpoch((epoch) => epoch + 1);
1540
+ });
1541
+ }, [sessionId, streamEnabled, fullReplay]);
1341
1542
  const navigationBusy = () => loadingTargetRef.current || loadingOlderRef.current || loadingNewerRef.current || loadingOldestRef.current || loadingLatestRef.current;
1342
1543
  const loadOlder = useCallback6(
1343
1544
  () => createOlderHistoryLoadReceipt(async (markCommitted, preserveTail, markTailPreserved) => {
@@ -1357,7 +1558,7 @@ function useSessionEvents(sessionId, options = {}) {
1357
1558
  setLoadingOlder(true);
1358
1559
  let published = false;
1359
1560
  try {
1360
- const window = await loadEventWindow(t, client, workspaceId, sessionId, {
1561
+ const window2 = await loadEventWindow(t, client, workspaceId, sessionId, {
1361
1562
  before,
1362
1563
  pageSize: SESSION_HISTORY_PAGE_SIZE,
1363
1564
  targetGroups: OLDER_GROUP_TARGET,
@@ -1369,9 +1570,9 @@ function useSessionEvents(sessionId, options = {}) {
1369
1570
  if (!isCurrent()) {
1370
1571
  return false;
1371
1572
  }
1372
- if (window.events.length === 0) {
1373
- if (window.hasOlder && window.scanCursor < before) {
1374
- oldestSequenceRef.current = window.scanCursor;
1573
+ if (window2.events.length === 0) {
1574
+ if (window2.hasOlder && window2.scanCursor < before) {
1575
+ oldestSequenceRef.current = window2.scanCursor;
1375
1576
  return true;
1376
1577
  }
1377
1578
  oldestSequenceRef.current = null;
@@ -1380,15 +1581,15 @@ function useSessionEvents(sessionId, options = {}) {
1380
1581
  return false;
1381
1582
  }
1382
1583
  const current = eventWindowRef.current;
1383
- assertPrependOrder(current.events, window.events);
1384
- const next = boundBrowserSessionEventWindow([...window.events, ...current.events], {
1584
+ assertPrependOrder(current.events, window2.events);
1585
+ const next = boundBrowserSessionEventWindow([...window2.events, ...current.events], {
1385
1586
  direction: "oldest"
1386
1587
  });
1387
1588
  if (preserveTail && maxResumeSequence(next.events) < maxResumeSequence(current.events)) {
1388
1589
  markTailPreserved();
1389
1590
  return false;
1390
1591
  }
1391
- const status = observeSessionStatus(window.events, sessionStatusRef);
1592
+ const status = observeSessionStatus(window2.events, sessionStatusRef);
1392
1593
  const retained = {
1393
1594
  ...next,
1394
1595
  truncated: current.truncated || next.truncated
@@ -1409,7 +1610,7 @@ function useSessionEvents(sessionId, options = {}) {
1409
1610
  pruneStepStores(retained.events, current.events);
1410
1611
  } else {
1411
1612
  const skippedThrough = skippedStepsThroughRef.current;
1412
- if (skippedThrough !== null && windowTurns(window.events).size > 0) {
1613
+ if (skippedThrough !== null && windowTurns(window2.events).size > 0) {
1413
1614
  skippedStepsThroughRef.current = null;
1414
1615
  const working = activeConversationTurn(retained.events);
1415
1616
  const bounds = working ? conversationTurnBounds(retained.events).get(working) : void 0;
@@ -1424,7 +1625,7 @@ function useSessionEvents(sessionId, options = {}) {
1424
1625
  if (evictedLiveTail) {
1425
1626
  streamResumeSequenceRef.current = maxResumeSequence(retained.events);
1426
1627
  }
1427
- const olderStillAvailable = window.hasOlder;
1628
+ const olderStillAvailable = window2.hasOlder;
1428
1629
  hasOlderRef.current = olderStillAvailable;
1429
1630
  let newer = null;
1430
1631
  let enterHistory = false;
@@ -1477,7 +1678,7 @@ function useSessionEvents(sessionId, options = {}) {
1477
1678
  setLoadingOldest(true);
1478
1679
  let published = false;
1479
1680
  try {
1480
- const window = await loadForwardEventWindow(t, client, workspaceId, sessionId, {
1681
+ const window2 = await loadForwardEventWindow(t, client, workspaceId, sessionId, {
1481
1682
  after: 0,
1482
1683
  pageSize: SESSION_HISTORY_PAGE_SIZE,
1483
1684
  targetGroups: OLDEST_GROUP_TARGET,
@@ -1488,14 +1689,14 @@ function useSessionEvents(sessionId, options = {}) {
1488
1689
  if (!isCurrent()) {
1489
1690
  return false;
1490
1691
  }
1491
- if (window.events.length === 0) {
1692
+ if (window2.events.length === 0) {
1492
1693
  hasOlderRef.current = false;
1493
1694
  setHasOlder(false);
1494
1695
  return false;
1495
1696
  }
1496
1697
  streamAbortRef.current?.abort();
1497
- const status = observeSessionStatus(window.events, sessionStatusRef);
1498
- const retained = boundBrowserSessionEventWindow(window.events, { direction: "oldest" });
1698
+ const status = observeSessionStatus(window2.events, sessionStatusRef);
1699
+ const retained = boundBrowserSessionEventWindow(window2.events, { direction: "oldest" });
1499
1700
  const retainedOldest = retained.events[0]?.sequence ?? null;
1500
1701
  const retainedNewest = maxResumeSequenceOrNull(retained.events);
1501
1702
  const previous = eventWindowRef.current.events;
@@ -1507,7 +1708,7 @@ function useSessionEvents(sessionId, options = {}) {
1507
1708
  hasOlderRef.current = false;
1508
1709
  const highWater = Math.max(lastSequenceRef.current, retainedNewest ?? 0);
1509
1710
  lastSequenceRef.current = highWater;
1510
- const newer = window.hasNewer || retained.truncated || retainedNewest !== null && retainedNewest < highWater;
1711
+ const newer = window2.hasNewer || retained.truncated || retainedNewest !== null && retainedNewest < highWater;
1511
1712
  hasNewerRef.current = newer;
1512
1713
  initialWindowLoadedRef.current = true;
1513
1714
  setInitialHistoryReady(true);
@@ -1553,7 +1754,7 @@ function useSessionEvents(sessionId, options = {}) {
1553
1754
  setLoadingNewer(true);
1554
1755
  let published = false;
1555
1756
  try {
1556
- const window = await loadForwardEventWindow(t, client, workspaceId, sessionId, {
1757
+ const window2 = await loadForwardEventWindow(t, client, workspaceId, sessionId, {
1557
1758
  after: afterSequence,
1558
1759
  pageSize: SESSION_HISTORY_PAGE_SIZE,
1559
1760
  targetGroups: NEWER_GROUP_TARGET,
@@ -1565,9 +1766,9 @@ function useSessionEvents(sessionId, options = {}) {
1565
1766
  if (!isCurrent()) {
1566
1767
  return false;
1567
1768
  }
1568
- if (window.events.length === 0) {
1569
- if (window.hasNewer && window.scanCursor > afterSequence) {
1570
- newestSequenceRef.current = window.scanCursor;
1769
+ if (window2.events.length === 0) {
1770
+ if (window2.hasNewer && window2.scanCursor > afterSequence) {
1771
+ newestSequenceRef.current = window2.scanCursor;
1571
1772
  return true;
1572
1773
  }
1573
1774
  setNewerError(null);
@@ -1581,13 +1782,13 @@ function useSessionEvents(sessionId, options = {}) {
1581
1782
  return false;
1582
1783
  }
1583
1784
  const current = eventWindowRef.current;
1584
- assertAppendOrder(current.events, window.events);
1585
- const status = observeSessionStatus(window.events, sessionStatusRef);
1785
+ assertAppendOrder(current.events, window2.events);
1786
+ const status = observeSessionStatus(window2.events, sessionStatusRef);
1586
1787
  const previousOldest = current.events[0]?.sequence ?? null;
1587
- const next = appendBrowserSessionEventWindow(current, window.events);
1788
+ const next = appendBrowserSessionEventWindow(current, window2.events);
1588
1789
  const retained = {
1589
1790
  ...next,
1590
- truncated: current.truncated || next.truncated || window.hasNewer
1791
+ truncated: current.truncated || next.truncated || window2.hasNewer
1591
1792
  };
1592
1793
  const retainedOldest = retained.events[0]?.sequence ?? null;
1593
1794
  const retainedNewest = maxResumeSequenceOrNull(retained.events);
@@ -1604,7 +1805,7 @@ function useSessionEvents(sessionId, options = {}) {
1604
1805
  const rearmedOlder = hasOlderRef.current;
1605
1806
  const highWater = Math.max(lastSequenceRef.current, retainedNewest);
1606
1807
  lastSequenceRef.current = highWater;
1607
- const newer = window.hasNewer || retainedNewest < highWater;
1808
+ const newer = window2.hasNewer || retainedNewest < highWater;
1608
1809
  hasNewerRef.current = newer;
1609
1810
  let resumeLive = false;
1610
1811
  if (!newer) {
@@ -1734,7 +1935,7 @@ function useSessionEvents(sessionId, options = {}) {
1734
1935
  let generation = navigationGenerationRef.current;
1735
1936
  const current = () => ownsNavigation() && generation === navigationGenerationRef.current;
1736
1937
  try {
1737
- const { resolveLatestQuestion } = await import("./latest-question-VGVNUGAU.js");
1938
+ const { resolveLatestQuestion } = await import("./latest-question-SINEV4U6.js");
1738
1939
  if (!current()) return null;
1739
1940
  const destination = await resolveLatestQuestion(t, {
1740
1941
  client,
@@ -2070,6 +2271,7 @@ async function loadConversationCatchup(client, workspaceId, sessionId, cursor, h
2070
2271
  payloadMode: "full"
2071
2272
  });
2072
2273
  if (!options.isCurrent()) throw abortError();
2274
+ options.progress?.();
2073
2275
  const fresh = page.filter((event) => eventResumeSequence(event) > after);
2074
2276
  assertAscending(fresh);
2075
2277
  events.push(...fresh);
@@ -2100,6 +2302,7 @@ async function loadEventWindow(t, client, workspaceId, sessionId, options) {
2100
2302
  ...options.signal ? { signal: options.signal } : {}
2101
2303
  });
2102
2304
  if (options.isCurrent?.() === false) throw abortError();
2305
+ options.progress?.();
2103
2306
  if (page.raw.oldest === null) {
2104
2307
  reachedStart = true;
2105
2308
  break;
@@ -2121,6 +2324,7 @@ async function loadEventWindow(t, client, workspaceId, sessionId, options) {
2121
2324
  ...options.signal ? { signal: options.signal } : {}
2122
2325
  });
2123
2326
  if (options.isCurrent?.() === false) throw abortError();
2327
+ options.progress?.();
2124
2328
  if (page.raw.oldest === null) {
2125
2329
  reachedStart = true;
2126
2330
  break;
@@ -2339,6 +2543,23 @@ function abortError() {
2339
2543
  error.name = "AbortError";
2340
2544
  return error;
2341
2545
  }
2546
+ function abortableDelay(ms, signal) {
2547
+ return new Promise((resolve, reject) => {
2548
+ if (signal.aborted) {
2549
+ reject(abortError());
2550
+ return;
2551
+ }
2552
+ const onAbort = () => {
2553
+ clearTimeout(timer);
2554
+ reject(abortError());
2555
+ };
2556
+ const timer = setTimeout(() => {
2557
+ signal.removeEventListener("abort", onAbort);
2558
+ resolve();
2559
+ }, ms);
2560
+ signal.addEventListener("abort", onAbort, { once: true });
2561
+ });
2562
+ }
2342
2563
  var CONTENT_STEP_TYPES = new Set(SESSION_EVENT_CONTENT_STEP_TYPES);
2343
2564
  var COMPAT_EXCLUDED_TYPES = new Set(
2344
2565
  SESSION_EVENT_COMPAT_EXCLUDED_STEP_TYPES
@@ -2389,26 +2610,26 @@ function appendTurnlessSteps(current, incoming) {
2389
2610
  });
2390
2611
  return { events: kept.events, bytes: kept.bytes, ranges, appended };
2391
2612
  }
2392
- function withTurnlessSteps(window, turnless) {
2393
- const first = window[0]?.sequence;
2394
- if (first === void 0 || turnless.ranges.length === 0) return window;
2613
+ function withTurnlessSteps(window2, turnless) {
2614
+ const first = window2[0]?.sequence;
2615
+ if (first === void 0 || turnless.ranges.length === 0) return window2;
2395
2616
  const placeholders = [];
2396
2617
  for (const [start, end] of turnless.ranges) {
2397
2618
  if (end < first) continue;
2398
2619
  placeholders.push({
2399
2620
  id: `turnless-steps-${start}`,
2400
- workspaceId: window[0].workspaceId,
2401
- sessionId: window[0].sessionId,
2621
+ workspaceId: window2[0].workspaceId,
2622
+ sessionId: window2[0].sessionId,
2402
2623
  sequence: start,
2403
2624
  coveredThrough: end,
2404
2625
  type: "terminal.pty.output.delta",
2405
2626
  payload: null,
2406
- occurredAt: window[0].occurredAt,
2627
+ occurredAt: window2[0].occurredAt,
2407
2628
  turnId: null
2408
2629
  });
2409
2630
  }
2410
- if (placeholders.length === 0) return window;
2411
- return [...window, ...placeholders].sort((left, right) => left.sequence - right.sequence);
2631
+ if (placeholders.length === 0) return window2;
2632
+ return [...window2, ...placeholders].sort((left, right) => left.sequence - right.sequence);
2412
2633
  }
2413
2634
  function turnStepLowerBound(bounds) {
2414
2635
  return bounds.started !== null ? bounds.started - 1 : bounds.previous;
@@ -3843,4 +4064,4 @@ export {
3843
4064
  useSessionReadAcknowledgement,
3844
4065
  useNewConversation
3845
4066
  };
3846
- //# sourceMappingURL=chunk-SOOWLNC5.js.map
4067
+ //# sourceMappingURL=chunk-GJUPLSC5.js.map