@opengeni/react 0.46.1 → 0.52.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 (341) hide show
  1. package/README.md +158 -14
  2. package/dist/artifacts-document.d.ts +3 -0
  3. package/dist/artifacts-document.js +17 -0
  4. package/dist/artifacts-document.js.map +1 -0
  5. package/dist/artifacts-presentation.d.ts +3 -0
  6. package/dist/artifacts-presentation.js +17 -0
  7. package/dist/artifacts-presentation.js.map +1 -0
  8. package/dist/artifacts-spreadsheet.d.ts +3 -0
  9. package/dist/artifacts-spreadsheet.js +17 -0
  10. package/dist/artifacts-spreadsheet.js.map +1 -0
  11. package/dist/artifacts.d.ts +2 -0
  12. package/dist/artifacts.js +170 -0
  13. package/dist/artifacts.js.map +1 -0
  14. package/dist/chunk-6BBWWOOU.js +82 -0
  15. package/dist/chunk-6BBWWOOU.js.map +1 -0
  16. package/dist/{chunk-HFO4ERGQ.js → chunk-724BW4TW.js} +586 -35
  17. package/dist/chunk-724BW4TW.js.map +1 -0
  18. package/dist/chunk-7I2KB3OK.js +3895 -0
  19. package/dist/chunk-7I2KB3OK.js.map +1 -0
  20. package/dist/chunk-7WCLAEFV.js +2828 -0
  21. package/dist/chunk-7WCLAEFV.js.map +1 -0
  22. package/dist/{chunk-U3CSCMWA.js → chunk-FK6VG4LL.js} +9 -13
  23. package/dist/chunk-FK6VG4LL.js.map +1 -0
  24. package/dist/{chunk-SRFUT2ZU.js → chunk-FWS3KC3Z.js} +120 -64
  25. package/dist/chunk-FWS3KC3Z.js.map +1 -0
  26. package/dist/{chunk-EKZH6IDG.js → chunk-HDBG7XGO.js} +62 -1
  27. package/dist/chunk-HDBG7XGO.js.map +1 -0
  28. package/dist/chunk-HUIKIDM5.js +2148 -0
  29. package/dist/chunk-HUIKIDM5.js.map +1 -0
  30. package/dist/{chunk-LGVMUIRV.js → chunk-JAGDUCZQ.js} +1053 -390
  31. package/dist/chunk-JAGDUCZQ.js.map +1 -0
  32. package/dist/{chunk-LWR4MXSS.js → chunk-JR3QFY6B.js} +420 -35
  33. package/dist/chunk-JR3QFY6B.js.map +1 -0
  34. package/dist/chunk-JVYQRRC4.js +53 -0
  35. package/dist/chunk-JVYQRRC4.js.map +1 -0
  36. package/dist/chunk-KCGXPP5V.js +157 -0
  37. package/dist/chunk-KCGXPP5V.js.map +1 -0
  38. package/dist/{chunk-EB67J347.js → chunk-KZ73RL76.js} +111 -31
  39. package/dist/chunk-KZ73RL76.js.map +1 -0
  40. package/dist/chunk-PEI6RANI.js +3234 -0
  41. package/dist/chunk-PEI6RANI.js.map +1 -0
  42. package/dist/{chunk-3PB7MIT6.js → chunk-ROIRTM37.js} +220 -72
  43. package/dist/chunk-ROIRTM37.js.map +1 -0
  44. package/dist/chunk-VZTQ73XT.js +86 -0
  45. package/dist/chunk-VZTQ73XT.js.map +1 -0
  46. package/dist/{chunk-VCBFUSUZ.js → chunk-WSK7G5LE.js} +72 -4
  47. package/dist/chunk-WSK7G5LE.js.map +1 -0
  48. package/dist/{chunk-FGZUCXZF.js → chunk-WYA65Y3F.js} +16 -16
  49. package/dist/chunk-WYA65Y3F.js.map +1 -0
  50. package/dist/{chunk-6EDV6YFE.js → chunk-X4S56Y2H.js} +147 -35
  51. package/dist/chunk-X4S56Y2H.js.map +1 -0
  52. package/dist/client.d.ts +7 -1
  53. package/dist/clipboard.d.ts +1 -0
  54. package/dist/clipboard.js +7 -0
  55. package/dist/clipboard.js.map +1 -0
  56. package/dist/commands/index.d.ts +3 -3
  57. package/dist/commands/registry.d.ts +1 -1
  58. package/dist/commands/types.d.ts +1 -1
  59. package/dist/components/approval-surface.d.ts +2 -2
  60. package/dist/components/artifacts/artifact-surface.d.ts +18 -0
  61. package/dist/components/artifacts/document-editor.d.ts +172 -0
  62. package/dist/components/artifacts/editable-artifact-ui.d.ts +13 -0
  63. package/dist/components/artifacts/editable-artifact-workbench.d.ts +49 -0
  64. package/dist/components/artifacts/editable-document.d.ts +24 -0
  65. package/dist/components/artifacts/editable-presentation.d.ts +24 -0
  66. package/dist/components/artifacts/editable-spreadsheet.d.ts +32 -0
  67. package/dist/components/artifacts/index.d.ts +8 -0
  68. package/dist/components/artifacts/presentation-editor.d.ts +297 -0
  69. package/dist/components/artifacts/spreadsheet-canvas.d.ts +120 -0
  70. package/dist/components/artifacts/spreadsheet-grid.d.ts +113 -0
  71. package/dist/components/browser-viewer.d.ts +29 -0
  72. package/dist/components/chat-composer.d.ts +13 -8
  73. package/dist/components/code-editor.d.ts +25 -3
  74. package/dist/components/command-palette.d.ts +2 -2
  75. package/dist/components/composer-transcription-control.d.ts +4 -2
  76. package/dist/components/composer.d.ts +29 -15
  77. package/dist/components/computer-viewer.d.ts +23 -0
  78. package/dist/components/copy-button.d.ts +2 -2
  79. package/dist/components/desktop-viewer.d.ts +25 -21
  80. package/dist/components/diff-view.d.ts +1 -1
  81. package/dist/components/enrollment-consent.d.ts +1 -1
  82. package/dist/components/enrollment-device-flow.d.ts +1 -1
  83. package/dist/components/file-browser.d.ts +2 -2
  84. package/dist/components/fleet-tile.d.ts +1 -1
  85. package/dist/components/generated-video-player.d.ts +10 -0
  86. package/dist/components/human-input-form.d.ts +1 -1
  87. package/dist/components/human-input-surface.d.ts +2 -2
  88. package/dist/components/interactive-workbench-viewers.d.ts +2 -0
  89. package/dist/components/machine-card.d.ts +2 -2
  90. package/dist/components/machine-dock-bar.d.ts +3 -3
  91. package/dist/components/machine-health-pill.d.ts +2 -2
  92. package/dist/components/machine-input-display.d.ts +1 -1
  93. package/dist/components/machine-metrics.d.ts +2 -2
  94. package/dist/components/machine-status-pill.d.ts +4 -4
  95. package/dist/components/machines/health.d.ts +1 -1
  96. package/dist/components/machines/machine-detail.d.ts +5 -3
  97. package/dist/components/machines/metric-history-chart.d.ts +1 -1
  98. package/dist/components/machines/metric-sparkline.d.ts +2 -2
  99. package/dist/components/machines/series.d.ts +2 -2
  100. package/dist/components/machines-dashboard.d.ts +5 -5
  101. package/dist/components/markdown.d.ts +1 -1
  102. package/dist/components/message-timeline.d.ts +22 -5
  103. package/dist/components/model-picker.d.ts +2 -2
  104. package/dist/components/model-policy-picker.d.ts +7 -7
  105. package/dist/components/pierre-diff.d.ts +1 -1
  106. package/dist/components/pierre-file.d.ts +1 -1
  107. package/dist/components/queue-draft-policy.d.ts +1 -1
  108. package/dist/components/queue-surface-implementation.d.ts +3 -3
  109. package/dist/components/queue-surface-state.d.ts +4 -4
  110. package/dist/components/queue-surface.d.ts +5 -5
  111. package/dist/components/sandbox-files.d.ts +5 -5
  112. package/dist/components/sandbox-terminal.d.ts +50 -4
  113. package/dist/components/sandbox-workspace.d.ts +30 -10
  114. package/dist/components/session-chrome.d.ts +4 -4
  115. package/dist/components/session-status.d.ts +2 -2
  116. package/dist/components/timeline-annotation-selection.d.ts +9 -0
  117. package/dist/components/timeline-annotations-dialog.d.ts +16 -0
  118. package/dist/components/timeline-annotations.d.ts +13 -0
  119. package/dist/components/tooltip.d.ts +4 -4
  120. package/dist/components/user-message-body.d.ts +2 -2
  121. package/dist/components/workbench-changes.d.ts +2 -2
  122. package/dist/components/workspace-dock.d.ts +3 -1
  123. package/dist/composer.d.ts +11 -11
  124. package/dist/composer.js +7 -7
  125. package/dist/hooks/internal.d.ts +7 -1
  126. package/dist/hooks/use-attached-browsers.d.ts +21 -0
  127. package/dist/hooks/use-available-models.d.ts +2 -2
  128. package/dist/hooks/use-billing-usage.d.ts +1 -1
  129. package/dist/hooks/use-browser-frame-stream.d.ts +28 -0
  130. package/dist/hooks/use-browser-identities.d.ts +26 -0
  131. package/dist/hooks/use-browser-session.d.ts +28 -0
  132. package/dist/hooks/use-browser-sessions.d.ts +32 -0
  133. package/dist/hooks/use-codex-accounts.d.ts +3 -3
  134. package/dist/hooks/use-composer.d.ts +36 -9
  135. package/dist/hooks/use-computer-frame-stream.d.ts +24 -0
  136. package/dist/hooks/use-computer-session.d.ts +28 -0
  137. package/dist/hooks/use-computer-sessions.d.ts +28 -0
  138. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  139. package/dist/hooks/use-environments.d.ts +11 -5
  140. package/dist/hooks/use-file-attachments.d.ts +1 -1
  141. package/dist/hooks/use-goal.d.ts +2 -2
  142. package/dist/hooks/use-human-input.d.ts +2 -2
  143. package/dist/hooks/use-last-started-turn-policy.d.ts +2 -2
  144. package/dist/hooks/use-machine-chip.d.ts +2 -2
  145. package/dist/hooks/use-machines.d.ts +10 -3
  146. package/dist/hooks/use-packs.d.ts +7 -2
  147. package/dist/hooks/use-rigs.d.ts +1 -1
  148. package/dist/hooks/use-sandbox-files.d.ts +25 -4
  149. package/dist/hooks/use-sandbox-git.d.ts +13 -5
  150. package/dist/hooks/use-sandbox-terminal.d.ts +1 -1
  151. package/dist/hooks/use-scheduled-tasks.d.ts +1 -1
  152. package/dist/hooks/use-session-capabilities.d.ts +5 -4
  153. package/dist/hooks/use-session-control.d.ts +1 -1
  154. package/dist/hooks/use-session-events.d.ts +2 -2
  155. package/dist/hooks/use-session-lineage.d.ts +1 -1
  156. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  157. package/dist/hooks/use-session.d.ts +2 -2
  158. package/dist/hooks/use-slash-commands.d.ts +1 -1
  159. package/dist/hooks/use-terminal-stream.d.ts +8 -2
  160. package/dist/hooks/use-transcription.d.ts +2 -2
  161. package/dist/hooks/use-turn-queue.d.ts +2 -2
  162. package/dist/hooks/use-video-artifact-playback.d.ts +9 -0
  163. package/dist/hooks/use-voice-input.d.ts +6 -4
  164. package/dist/hooks/use-workspace-capture.d.ts +1 -1
  165. package/dist/hooks/use-workspace-edit.d.ts +1 -1
  166. package/dist/hooks/use-workspace-sessions.d.ts +1 -1
  167. package/dist/hooks/use-workspaces.d.ts +1 -1
  168. package/dist/index.d.ts +158 -154
  169. package/dist/index.js +1718 -908
  170. package/dist/index.js.map +1 -1
  171. package/dist/interaction.d.ts +23 -0
  172. package/dist/interaction.js +36 -0
  173. package/dist/interaction.js.map +1 -0
  174. package/dist/interactive-workbench-viewers-KHNOHWQE.js +13 -0
  175. package/dist/interactive-workbench-viewers-KHNOHWQE.js.map +1 -0
  176. package/dist/lib/composer-responsive-context.d.ts +9 -0
  177. package/dist/lib/relay-wire.d.ts +4 -0
  178. package/dist/lib/sandbox-liveness.d.ts +9 -0
  179. package/dist/lib/terminal-capability.d.ts +5 -0
  180. package/dist/lib/use-portal-token-style.d.ts +14 -3
  181. package/dist/lib/xterm-theme.d.ts +1 -1
  182. package/dist/machines.d.ts +30 -30
  183. package/dist/machines.js +3 -3
  184. package/dist/provider.d.ts +4 -4
  185. package/dist/{queue-surface-implementation-J4XJFKRW.js → queue-surface-implementation-2KVJTYXH.js} +117 -64
  186. package/dist/queue-surface-implementation-2KVJTYXH.js.map +1 -0
  187. package/dist/realtime/dropdown-menu.d.ts +8 -8
  188. package/dist/realtime/realtime-control.d.ts +15 -6
  189. package/dist/realtime.d.ts +4 -4
  190. package/dist/realtime.js +30 -33
  191. package/dist/realtime.js.map +1 -1
  192. package/dist/session-context.d.ts +19 -1
  193. package/dist/session-ui.d.ts +14 -14
  194. package/dist/session-ui.js +6 -5
  195. package/dist/session.d.ts +28 -28
  196. package/dist/session.js +5 -5
  197. package/dist/timeline/activity-rail.d.ts +6 -3
  198. package/dist/timeline/disclosure-context.d.ts +1 -1
  199. package/dist/timeline/fleet-decision-projection.d.ts +1 -1
  200. package/dist/timeline/fleet-decision-row.d.ts +3 -3
  201. package/dist/timeline/index.d.ts +19 -19
  202. package/dist/timeline/parsers.d.ts +6 -3
  203. package/dist/timeline/projection.d.ts +3 -3
  204. package/dist/timeline/registry.d.ts +10 -1
  205. package/dist/timeline/screenshot-lightbox.d.ts +2 -2
  206. package/dist/timeline/shared.d.ts +21 -10
  207. package/dist/timeline/tool-diff.d.ts +2 -2
  208. package/dist/timeline/tool-renderers.d.ts +1 -1
  209. package/dist/timeline/turn-summary.d.ts +3 -3
  210. package/dist/timeline/types.d.ts +42 -2
  211. package/dist/timeline-annotation-selection-3L7LHGG2.js +187 -0
  212. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +1 -0
  213. package/dist/timeline-annotations-dialog-U7EVLR75.js +196 -0
  214. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +1 -0
  215. package/dist/voice-recording-store.d.ts +8 -2
  216. package/package.json +52 -7
  217. package/src/artifacts-document.ts +31 -0
  218. package/src/artifacts-presentation.ts +36 -0
  219. package/src/artifacts-spreadsheet.ts +21 -0
  220. package/src/artifacts.ts +86 -0
  221. package/src/client.ts +90 -1
  222. package/src/clipboard.ts +2 -0
  223. package/src/components/artifacts/artifact-surface.tsx +93 -0
  224. package/src/components/artifacts/document-editor.tsx +2255 -0
  225. package/src/components/artifacts/editable-artifact-ui.tsx +89 -0
  226. package/src/components/artifacts/editable-artifact-workbench.tsx +203 -0
  227. package/src/components/artifacts/editable-document.tsx +657 -0
  228. package/src/components/artifacts/editable-presentation.tsx +1020 -0
  229. package/src/components/artifacts/editable-spreadsheet.tsx +733 -0
  230. package/src/components/artifacts/index.ts +99 -0
  231. package/src/components/artifacts/presentation-editor.tsx +3148 -0
  232. package/src/components/artifacts/spreadsheet-canvas.ts +799 -0
  233. package/src/components/artifacts/spreadsheet-grid.tsx +2129 -0
  234. package/src/components/browser-viewer.tsx +1592 -0
  235. package/src/components/chat-composer.tsx +25 -2
  236. package/src/components/code-editor.tsx +90 -31
  237. package/src/components/command-palette.tsx +1 -1
  238. package/src/components/composer-transcription-control.tsx +51 -22
  239. package/src/components/composer.tsx +49 -23
  240. package/src/components/computer-viewer.tsx +1139 -0
  241. package/src/components/copy-button.tsx +1 -1
  242. package/src/components/desktop-viewer.tsx +103 -75
  243. package/src/components/file-browser.tsx +39 -17
  244. package/src/components/generated-video-player.tsx +89 -0
  245. package/src/components/human-input-form.tsx +2 -2
  246. package/src/components/interactive-workbench-viewers.ts +2 -0
  247. package/src/components/machine-card.tsx +1 -1
  248. package/src/components/machine-input-display.ts +3 -0
  249. package/src/components/machines/machine-detail.tsx +39 -15
  250. package/src/components/machines-dashboard.tsx +7 -6
  251. package/src/components/message-timeline.tsx +327 -37
  252. package/src/components/model-picker.tsx +2 -2
  253. package/src/components/model-policy-picker.tsx +16 -15
  254. package/src/components/queue-surface-implementation.tsx +135 -75
  255. package/src/components/queue-surface-state.tsx +2 -2
  256. package/src/components/sandbox-files.tsx +142 -62
  257. package/src/components/sandbox-terminal.tsx +119 -35
  258. package/src/components/sandbox-workspace.tsx +394 -228
  259. package/src/components/session-chrome.tsx +67 -27
  260. package/src/components/timeline-annotation-selection.tsx +221 -0
  261. package/src/components/timeline-annotations-dialog.tsx +213 -0
  262. package/src/components/timeline-annotations.tsx +84 -0
  263. package/src/components/tooltip.tsx +13 -16
  264. package/src/components/user-message-body.tsx +1 -1
  265. package/src/components/workbench-changes.tsx +192 -35
  266. package/src/components/workspace-dock.tsx +13 -5
  267. package/src/composer.ts +3 -0
  268. package/src/hooks/internal.ts +132 -38
  269. package/src/hooks/use-attached-browsers.ts +152 -0
  270. package/src/hooks/use-browser-frame-stream.ts +316 -0
  271. package/src/hooks/use-browser-identities.ts +225 -0
  272. package/src/hooks/use-browser-session.ts +476 -0
  273. package/src/hooks/use-browser-sessions.ts +281 -0
  274. package/src/hooks/use-codex-accounts.ts +4 -4
  275. package/src/hooks/use-composer.ts +769 -24
  276. package/src/hooks/use-computer-frame-stream.ts +311 -0
  277. package/src/hooks/use-computer-session.ts +442 -0
  278. package/src/hooks/use-computer-sessions.ts +245 -0
  279. package/src/hooks/use-environments.ts +24 -5
  280. package/src/hooks/use-file-attachments.ts +70 -32
  281. package/src/hooks/use-goal.ts +17 -5
  282. package/src/hooks/use-machine-chip.ts +5 -3
  283. package/src/hooks/use-machines.ts +79 -3
  284. package/src/hooks/use-packs.ts +51 -0
  285. package/src/hooks/use-sandbox-files.ts +382 -88
  286. package/src/hooks/use-sandbox-git.ts +208 -46
  287. package/src/hooks/use-sandbox-terminal.ts +3 -2
  288. package/src/hooks/use-session-capabilities.ts +94 -70
  289. package/src/hooks/use-session-events.ts +18 -4
  290. package/src/hooks/use-terminal-stream.ts +102 -23
  291. package/src/hooks/use-transcription.ts +4 -14
  292. package/src/hooks/use-turn-queue.ts +17 -5
  293. package/src/hooks/use-video-artifact-playback.ts +28 -0
  294. package/src/hooks/use-voice-input.ts +163 -19
  295. package/src/hooks/use-windowed-sections.ts +9 -7
  296. package/src/hooks/use-workspace-edit.ts +2 -1
  297. package/src/index.ts +21 -6
  298. package/src/interaction.ts +71 -0
  299. package/src/lib/composer-responsive-context.ts +15 -0
  300. package/src/lib/relay-wire.ts +4 -0
  301. package/src/lib/sandbox-liveness.ts +11 -0
  302. package/src/lib/terminal-capability.ts +10 -0
  303. package/src/lib/use-portal-token-style.ts +60 -15
  304. package/src/provider.tsx +52 -7
  305. package/src/realtime/dropdown-menu.tsx +15 -19
  306. package/src/realtime/realtime-control.tsx +16 -5
  307. package/src/session-context.ts +90 -0
  308. package/src/timeline/activity-rail.tsx +31 -6
  309. package/src/timeline/index.ts +4 -1
  310. package/src/timeline/parsers.ts +46 -20
  311. package/src/timeline/projection.ts +233 -13
  312. package/src/timeline/registry.ts +19 -0
  313. package/src/timeline/screenshot-lightbox.tsx +30 -9
  314. package/src/timeline/shared.tsx +59 -11
  315. package/src/timeline/tool-renderers.tsx +421 -24
  316. package/src/timeline/turn-summary.tsx +2 -2
  317. package/src/timeline/types.ts +58 -2
  318. package/src/voice-recording-store.ts +15 -0
  319. package/styles/compiled.css +5298 -0
  320. package/styles/compiled.d.ts +2 -0
  321. package/styles/effective-tokens.css +27 -0
  322. package/styles/index.css +18 -0
  323. package/styles/responsive.css +208 -0
  324. package/styles/responsive.d.ts +2 -0
  325. package/styles/tokens.css +50 -17
  326. package/dist/chunk-3PB7MIT6.js.map +0 -1
  327. package/dist/chunk-6EDV6YFE.js.map +0 -1
  328. package/dist/chunk-EB67J347.js.map +0 -1
  329. package/dist/chunk-EKZH6IDG.js.map +0 -1
  330. package/dist/chunk-FGZUCXZF.js.map +0 -1
  331. package/dist/chunk-HFO4ERGQ.js.map +0 -1
  332. package/dist/chunk-JB5725BI.js +0 -48
  333. package/dist/chunk-JB5725BI.js.map +0 -1
  334. package/dist/chunk-LGVMUIRV.js.map +0 -1
  335. package/dist/chunk-LWR4MXSS.js.map +0 -1
  336. package/dist/chunk-SRFUT2ZU.js.map +0 -1
  337. package/dist/chunk-U3CSCMWA.js.map +0 -1
  338. package/dist/chunk-VCBFUSUZ.js.map +0 -1
  339. package/dist/fleet-decision-projection-SLNZMS42.js +0 -241
  340. package/dist/fleet-decision-projection-SLNZMS42.js.map +0 -1
  341. package/dist/queue-surface-implementation-J4XJFKRW.js.map +0 -1
@@ -2,13 +2,14 @@ import {
2
2
  buildTimeline,
3
3
  groupTimeline,
4
4
  sessionStatusFromEvents
5
- } from "./chunk-LWR4MXSS.js";
5
+ } from "./chunk-JR3QFY6B.js";
6
6
  import {
7
7
  useDebouncedCallback,
8
8
  useMutationRunner,
9
+ usePageLiveActivity,
9
10
  usePolledValue,
10
11
  useSessionEventTrigger
11
- } from "./chunk-EB67J347.js";
12
+ } from "./chunk-KZ73RL76.js";
12
13
  import {
13
14
  useEmbeddedFileAttachments,
14
15
  useEmbeddedGoal,
@@ -17,7 +18,7 @@ import {
17
18
  useEmbeddedSessionLineage,
18
19
  useEmbeddedSessionMcpApprovalPolicy,
19
20
  useEmbeddedSessionRead
20
- } from "./chunk-EKZH6IDG.js";
21
+ } from "./chunk-HDBG7XGO.js";
21
22
 
22
23
  // src/hooks/use-session.ts
23
24
  import { useCallback, useEffect, useMemo, useState } from "react";
@@ -152,6 +153,8 @@ var EMPTY_EVENT_WINDOW = {
152
153
  function useSessionEvents(sessionId, options = {}) {
153
154
  const { client, workspaceId, reconcileSession } = useEmbeddedSession(options);
154
155
  const enabled = options.enabled ?? true;
156
+ const pageLive = usePageLiveActivity();
157
+ const streamEnabled = enabled && pageLive;
155
158
  const after = options.after ?? 0;
156
159
  const replay = options.replay ?? "windowed";
157
160
  const fullReplay = replay === "full" || after !== 0;
@@ -228,7 +231,7 @@ function useSessionEvents(sessionId, options = {}) {
228
231
  loadingOlderRef.current = false;
229
232
  setLoadingOlder(false);
230
233
  }
231
- if (!sessionId || !enabled) {
234
+ if (!sessionId || !streamEnabled) {
232
235
  setConnectionState("idle");
233
236
  return;
234
237
  }
@@ -323,7 +326,13 @@ function useSessionEvents(sessionId, options = {}) {
323
326
  const stream = client.streamEvents(workspaceId, sessionId, {
324
327
  after: streamResumeSequenceRef.current,
325
328
  signal: controller.signal,
326
- beforeLive: async () => await reconcileSession(sessionId),
329
+ onOpen: () => {
330
+ void Promise.resolve().then(() => reconcileSession(sessionId)).catch((cause) => {
331
+ if (isCurrent()) {
332
+ setError(cause instanceof Error ? cause : new Error(String(cause)));
333
+ }
334
+ });
335
+ },
327
336
  onStateChange: (state) => {
328
337
  if (isCurrent()) {
329
338
  setConnectionState(state);
@@ -375,7 +384,7 @@ function useSessionEvents(sessionId, options = {}) {
375
384
  workspaceId,
376
385
  sessionId,
377
386
  after,
378
- enabled,
387
+ streamEnabled,
379
388
  fullReplay,
380
389
  streamKey,
381
390
  streamEpoch,
@@ -956,7 +965,7 @@ async function loadPreviousPage(client, workspaceId, sessionId, before, options)
956
965
  compact: true,
957
966
  // Monitoring summaries omit correlation fields once a bounded durable
958
967
  // payload exceeds their preview threshold. The browser timeline needs the
959
- // sanitized stored payload so persisted tool outputs still match their
968
+ // exact stored payload so persisted tool outputs still match their
960
969
  // calls and expose truthful truncation telemetry after a reload.
961
970
  payloadMode: "full"
962
971
  });
@@ -1039,20 +1048,61 @@ function abortError() {
1039
1048
  }
1040
1049
 
1041
1050
  // src/hooks/use-file-attachments.ts
1042
- import { useCallback as useCallback3, useRef as useRef2, useState as useState3 } from "react";
1051
+ import { useCallback as useCallback3, useEffect as useEffect3, useRef as useRef2, useState as useState3 } from "react";
1043
1052
  var isImage = (file) => file.type.startsWith("image/");
1044
1053
  function useFileAttachments(options = {}) {
1045
1054
  const { client, workspaceId } = useEmbeddedFileAttachments(options);
1046
1055
  const pasteFilter = options.pasteFilter ?? isImage;
1047
1056
  const [attachments, setAttachments] = useState3([]);
1048
1057
  const sources = useRef2(/* @__PURE__ */ new Map());
1058
+ const previewUrls = useRef2(/* @__PURE__ */ new Map());
1059
+ const revokePreview = useCallback3((id) => {
1060
+ const previewUrl = previewUrls.current.get(id);
1061
+ if (!previewUrl) return;
1062
+ previewUrls.current.delete(id);
1063
+ URL.revokeObjectURL(previewUrl);
1064
+ }, []);
1065
+ const revokeAllPreviews = useCallback3(() => {
1066
+ const urls = [...previewUrls.current.values()];
1067
+ previewUrls.current.clear();
1068
+ for (const previewUrl of urls) URL.revokeObjectURL(previewUrl);
1069
+ }, []);
1070
+ const committedAttachmentIds = useRef2(/* @__PURE__ */ new Set());
1071
+ useEffect3(() => {
1072
+ const currentIds = new Set(attachments.map((attachment) => attachment.id));
1073
+ for (const id of committedAttachmentIds.current) {
1074
+ if (!currentIds.has(id)) revokePreview(id);
1075
+ }
1076
+ committedAttachmentIds.current = currentIds;
1077
+ }, [attachments, revokePreview]);
1078
+ const scopeGeneration = useRef2(0);
1079
+ const previousScope = useRef2({ client, workspaceId });
1080
+ useEffect3(() => {
1081
+ const previous = previousScope.current;
1082
+ if (previous.client === client && previous.workspaceId === workspaceId) return;
1083
+ previousScope.current = { client, workspaceId };
1084
+ scopeGeneration.current += 1;
1085
+ sources.current.clear();
1086
+ revokeAllPreviews();
1087
+ setAttachments([]);
1088
+ }, [client, revokeAllPreviews, workspaceId]);
1089
+ useEffect3(
1090
+ () => () => {
1091
+ scopeGeneration.current += 1;
1092
+ sources.current.clear();
1093
+ revokeAllPreviews();
1094
+ },
1095
+ [revokeAllPreviews]
1096
+ );
1049
1097
  const startUpload = useCallback3(
1050
1098
  (id, file) => {
1099
+ const generation = scopeGeneration.current;
1051
1100
  void client.uploadFile(workspaceId, {
1052
1101
  filename: file.name || "file",
1053
1102
  contentType: file.type || "application/octet-stream",
1054
1103
  data: file
1055
1104
  }).then((asset) => {
1105
+ if (scopeGeneration.current !== generation) return;
1056
1106
  sources.current.delete(id);
1057
1107
  setAttachments(
1058
1108
  (current) => current.map(
@@ -1068,6 +1118,7 @@ function useFileAttachments(options = {}) {
1068
1118
  )
1069
1119
  );
1070
1120
  }).catch((error) => {
1121
+ if (scopeGeneration.current !== generation) return;
1071
1122
  setAttachments(
1072
1123
  (current) => current.map(
1073
1124
  (attachment) => attachment.id === id ? {
@@ -1087,6 +1138,7 @@ function useFileAttachments(options = {}) {
1087
1138
  const id = crypto.randomUUID();
1088
1139
  sources.current.set(id, file);
1089
1140
  const previewUrl = isImage(file) ? URL.createObjectURL(file) : void 0;
1141
+ if (previewUrl) previewUrls.current.set(id, previewUrl);
1090
1142
  setAttachments((current) => [
1091
1143
  ...current,
1092
1144
  {
@@ -1167,51 +1219,33 @@ function useFileAttachments(options = {}) {
1167
1219
  // only authority restored across page/device boundaries.
1168
1220
  };
1169
1221
  });
1170
- for (const [fileId, attachment] of existingReady) {
1171
- if (!incoming.has(fileId) && attachment.previewUrl) {
1172
- URL.revokeObjectURL(attachment.previewUrl);
1173
- }
1174
- }
1175
1222
  return [...unresolved, ...restored];
1176
1223
  });
1177
1224
  },
1178
1225
  [workspaceId]
1179
1226
  );
1180
- const remove = useCallback3((id) => {
1181
- sources.current.delete(id);
1182
- setAttachments((current) => {
1183
- const removed = current.find((attachment) => attachment.id === id);
1184
- if (removed?.previewUrl) {
1185
- URL.revokeObjectURL(removed.previewUrl);
1186
- }
1187
- return current.filter((attachment) => attachment.id !== id);
1188
- });
1189
- }, []);
1227
+ const remove = useCallback3(
1228
+ (id) => {
1229
+ sources.current.delete(id);
1230
+ revokePreview(id);
1231
+ setAttachments((current) => current.filter((attachment) => attachment.id !== id));
1232
+ },
1233
+ [revokePreview]
1234
+ );
1190
1235
  const removeReadyFiles = useCallback3((fileIds) => {
1191
1236
  const accepted = new Set(fileIds);
1192
1237
  if (accepted.size === 0) return;
1193
1238
  setAttachments(
1194
1239
  (current) => current.filter((attachment) => {
1195
- const removeAccepted = attachment.status === "ready" && attachment.file !== void 0 && accepted.has(attachment.file.id);
1196
- if (removeAccepted) {
1197
- sources.current.delete(attachment.id);
1198
- if (attachment.previewUrl) URL.revokeObjectURL(attachment.previewUrl);
1199
- }
1200
- return !removeAccepted;
1240
+ return !(attachment.status === "ready" && attachment.file !== void 0 && accepted.has(attachment.file.id));
1201
1241
  })
1202
1242
  );
1203
1243
  }, []);
1204
1244
  const clear = useCallback3(() => {
1205
1245
  sources.current.clear();
1206
- setAttachments((current) => {
1207
- for (const attachment of current) {
1208
- if (attachment.previewUrl) {
1209
- URL.revokeObjectURL(attachment.previewUrl);
1210
- }
1211
- }
1212
- return [];
1213
- });
1214
- }, []);
1246
+ revokeAllPreviews();
1247
+ setAttachments([]);
1248
+ }, [revokeAllPreviews]);
1215
1249
  return {
1216
1250
  attachments,
1217
1251
  readyResources: attachments.flatMap(
@@ -1230,7 +1264,7 @@ function useFileAttachments(options = {}) {
1230
1264
  }
1231
1265
 
1232
1266
  // src/hooks/use-turn-queue.ts
1233
- import { useCallback as useCallback4, useEffect as useEffect3, useLayoutEffect, useMemo as useMemo3, useRef as useRef3, useState as useState4 } from "react";
1267
+ import { useCallback as useCallback4, useEffect as useEffect4, useLayoutEffect, useMemo as useMemo3, useRef as useRef3, useState as useState4 } from "react";
1234
1268
  function isTurnQueueEvent(event) {
1235
1269
  return event.type.startsWith("turn.") || event.type.startsWith("session.queue.") || event.type.startsWith("session.control.") || event.type.startsWith("system.update.") || event.type.startsWith("workspace.inference.");
1236
1270
  }
@@ -1244,6 +1278,7 @@ function useTurnQueue(sessionId, options = {}) {
1244
1278
  const { client, workspaceId, workspaceControlEvent, registerSessionReconciler } = useEmbeddedSession(options);
1245
1279
  const enabled = (options.enabled ?? true) && Boolean(sessionId);
1246
1280
  const targetKey = `${workspaceId}\0${sessionId ?? ""}`;
1281
+ const pageLive = usePageLiveActivity();
1247
1282
  const [snapshot, setSnapshot] = useState4(null);
1248
1283
  const [stateTargetKey, setStateTargetKey] = useState4(targetKey);
1249
1284
  const [loading, setLoading] = useState4(enabled);
@@ -1312,29 +1347,39 @@ function useTurnQueue(sessionId, options = {}) {
1312
1347
  },
1313
1348
  [client, workspaceId, sessionId, acceptSnapshot]
1314
1349
  );
1315
- useEffect3(() => {
1316
- if (!enabled) {
1350
+ useEffect4(() => {
1351
+ if (!enabled || !pageLive) {
1317
1352
  setLoading(false);
1318
1353
  return;
1319
1354
  }
1320
1355
  setLoading(true);
1321
- void load();
1322
1356
  const pollIntervalMs = options.pollIntervalMs;
1323
1357
  if (pollIntervalMs === void 0 || pollIntervalMs <= 0) {
1358
+ void load();
1324
1359
  return () => {
1325
1360
  readGeneration.current += 1;
1326
1361
  };
1327
1362
  }
1328
- const timer = setInterval(() => void load(), pollIntervalMs);
1363
+ let cancelled = false;
1364
+ let timer = null;
1365
+ const schedule = () => {
1366
+ if (cancelled) return;
1367
+ timer = setTimeout(() => {
1368
+ timer = null;
1369
+ void load().finally(schedule);
1370
+ }, pollIntervalMs);
1371
+ };
1372
+ void load().finally(schedule);
1329
1373
  return () => {
1330
- clearInterval(timer);
1374
+ cancelled = true;
1375
+ if (timer !== null) clearTimeout(timer);
1331
1376
  readGeneration.current += 1;
1332
1377
  };
1333
- }, [load, enabled, options.pollIntervalMs]);
1334
- useEffect3(() => {
1378
+ }, [load, enabled, pageLive, options.pollIntervalMs]);
1379
+ useEffect4(() => {
1335
1380
  if (enabled && workspaceControlEvent) void load();
1336
1381
  }, [enabled, load, workspaceControlEvent]);
1337
- useEffect3(() => {
1382
+ useEffect4(() => {
1338
1383
  if (!sessionId || !enabled) return;
1339
1384
  return registerSessionReconciler(sessionId, "queue", load);
1340
1385
  }, [enabled, load, registerSessionReconciler, sessionId]);
@@ -1491,7 +1536,7 @@ function asError(cause) {
1491
1536
 
1492
1537
  // src/hooks/use-goal.ts
1493
1538
  import { OpenGeniApiError } from "@opengeni/sdk";
1494
- import { useCallback as useCallback5, useEffect as useEffect4, useRef as useRef4, useState as useState5 } from "react";
1539
+ import { useCallback as useCallback5, useEffect as useEffect5, useRef as useRef4, useState as useState5 } from "react";
1495
1540
  function isGoalEvent(event) {
1496
1541
  return event.type.startsWith("goal.");
1497
1542
  }
@@ -1504,6 +1549,7 @@ function useGoal(sessionId, options = {}) {
1504
1549
  const enabled = (options.enabled ?? true) && Boolean(sessionId);
1505
1550
  const sharedEvents = options.events;
1506
1551
  const sharedFeed = sharedEvents !== void 0;
1552
+ const pageLive = usePageLiveActivity();
1507
1553
  const [goal, setGoal] = useState5(null);
1508
1554
  const [loading, setLoading] = useState5(enabled);
1509
1555
  const [error, setError] = useState5(null);
@@ -1535,14 +1581,14 @@ function useGoal(sessionId, options = {}) {
1535
1581
  setLoading(false);
1536
1582
  }
1537
1583
  }, [client, workspaceId, sessionId]);
1538
- useEffect4(() => {
1584
+ useEffect5(() => {
1539
1585
  const targetKey = `${workspaceId} ${sessionId ?? ""}`;
1540
1586
  if (targetKeyRef.current !== targetKey) {
1541
1587
  targetKeyRef.current = targetKey;
1542
1588
  setGoal(null);
1543
1589
  setError(null);
1544
1590
  }
1545
- if (!enabled) {
1591
+ if (!enabled || !pageLive) {
1546
1592
  setLoading(false);
1547
1593
  return;
1548
1594
  }
@@ -1553,19 +1599,29 @@ function useGoal(sessionId, options = {}) {
1553
1599
  };
1554
1600
  }
1555
1601
  setLoading(true);
1556
- void load();
1557
1602
  const pollIntervalMs = options.pollIntervalMs;
1558
1603
  if (pollIntervalMs === void 0 || pollIntervalMs <= 0) {
1604
+ void load();
1559
1605
  return () => {
1560
1606
  generation.current += 1;
1561
1607
  };
1562
1608
  }
1563
- const timer = setInterval(() => void load(), pollIntervalMs);
1609
+ let cancelled = false;
1610
+ let timer = null;
1611
+ const schedule = () => {
1612
+ if (cancelled) return;
1613
+ timer = setTimeout(() => {
1614
+ timer = null;
1615
+ void load().finally(schedule);
1616
+ }, pollIntervalMs);
1617
+ };
1618
+ void load().finally(schedule);
1564
1619
  return () => {
1565
- clearInterval(timer);
1620
+ cancelled = true;
1621
+ if (timer !== null) clearTimeout(timer);
1566
1622
  generation.current += 1;
1567
1623
  };
1568
- }, [load, enabled, workspaceId, sessionId, options.pollIntervalMs, sharedFeed]);
1624
+ }, [load, enabled, pageLive, workspaceId, sessionId, options.pollIntervalMs, sharedFeed]);
1569
1625
  const scheduleRefresh = useDebouncedCallback(() => void load());
1570
1626
  useSessionEventTrigger(client, workspaceId, sessionId, isGoalRefreshEvent, scheduleRefresh, {
1571
1627
  enabled,
@@ -1632,7 +1688,7 @@ function useGoal(sessionId, options = {}) {
1632
1688
  }
1633
1689
 
1634
1690
  // src/hooks/use-session-lineage.ts
1635
- import { useCallback as useCallback6, useEffect as useEffect5, useRef as useRef5 } from "react";
1691
+ import { useCallback as useCallback6, useEffect as useEffect6, useRef as useRef5 } from "react";
1636
1692
  function isLineageRefreshEvent(event) {
1637
1693
  if (event.type === "session.status.changed" || event.type === "session.created") {
1638
1694
  return true;
@@ -1661,16 +1717,16 @@ function useSessionLineage(sessionId, options = {}) {
1661
1717
  );
1662
1718
  const state = usePolledValue(load, { pollIntervalMs: options.pollIntervalMs, enabled });
1663
1719
  const refresh = state.refresh;
1664
- useEffect5(() => {
1720
+ useEffect6(() => {
1665
1721
  if (enabled && workspaceControlEvent) void refresh();
1666
1722
  }, [enabled, refresh, workspaceControlEvent]);
1667
- useEffect5(() => {
1723
+ useEffect6(() => {
1668
1724
  if (!sessionId || !enabled) return;
1669
1725
  return registerSessionReconciler(sessionId, "lineage", refresh);
1670
1726
  }, [enabled, refresh, registerSessionReconciler, sessionId]);
1671
1727
  const refreshSoon = useDebouncedCallback(() => void refresh(), 150);
1672
1728
  const delayedChildRefreshRef = useRef5(null);
1673
- useEffect5(() => {
1729
+ useEffect6(() => {
1674
1730
  return () => {
1675
1731
  if (delayedChildRefreshRef.current !== null) {
1676
1732
  clearTimeout(delayedChildRefreshRef.current);
@@ -1814,7 +1870,7 @@ function useSessionControl(sessionId, options = {}) {
1814
1870
  }
1815
1871
 
1816
1872
  // src/hooks/use-session-mcp-approval-policy.ts
1817
- import { useCallback as useCallback8, useEffect as useEffect6, useLayoutEffect as useLayoutEffect3, useMemo as useMemo4, useRef as useRef7, useState as useState6 } from "react";
1873
+ import { useCallback as useCallback8, useEffect as useEffect7, useLayoutEffect as useLayoutEffect3, useMemo as useMemo4, useRef as useRef7, useState as useState6 } from "react";
1818
1874
  function isSessionMcpApprovalPolicyEvent(event, serverId) {
1819
1875
  if (event.type !== "session.mcp.approval_policy.updated") {
1820
1876
  return false;
@@ -1858,7 +1914,7 @@ function useSessionMcpApprovalPolicy(sessionId, serverId, options = {}) {
1858
1914
  enabled,
1859
1915
  pollIntervalMs: options.pollIntervalMs
1860
1916
  });
1861
- useEffect6(() => {
1917
+ useEffect7(() => {
1862
1918
  if (data?.targetKey === targetKey && data.generation === authoritativeGeneration.current) {
1863
1919
  setOverride(null);
1864
1920
  }
@@ -2008,7 +2064,7 @@ function isRecord(value) {
2008
2064
  }
2009
2065
 
2010
2066
  // src/hooks/use-human-input.ts
2011
- import { useCallback as useCallback9, useEffect as useEffect7, useRef as useRef8, useState as useState7 } from "react";
2067
+ import { useCallback as useCallback9, useEffect as useEffect8, useRef as useRef8, useState as useState7 } from "react";
2012
2068
  function isHumanInputEvent(event) {
2013
2069
  return event.type === "session.humanInput.requested" || event.type === "user.humanInputResponse" || event.type === "turn.completed" || event.type === "turn.failed" || event.type === "turn.cancelled";
2014
2070
  }
@@ -2026,11 +2082,11 @@ function useHumanInputRequests(sessionId, options = {}) {
2026
2082
  const mutation = useMutationRunner(`${workspaceId}\0${sessionId ?? ""}`);
2027
2083
  const [respondingRequestId, setRespondingRequestId] = useState7(null);
2028
2084
  const respondingRequestRef = useRef8(null);
2029
- useEffect7(() => {
2085
+ useEffect8(() => {
2030
2086
  respondingRequestRef.current = null;
2031
2087
  setRespondingRequestId(null);
2032
2088
  }, [sessionId, workspaceId]);
2033
- useEffect7(() => {
2089
+ useEffect8(() => {
2034
2090
  if (!sessionId || !enabled) return;
2035
2091
  return registerSessionReconciler(sessionId, "human-input", state.refresh);
2036
2092
  }, [enabled, registerSessionReconciler, sessionId, state.refresh]);
@@ -2102,4 +2158,4 @@ export {
2102
2158
  isHumanInputEvent,
2103
2159
  useHumanInputRequests
2104
2160
  };
2105
- //# sourceMappingURL=chunk-SRFUT2ZU.js.map
2161
+ //# sourceMappingURL=chunk-FWS3KC3Z.js.map