@opengeni/react 0.48.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/README.md +138 -2
  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 +199 -0
  13. package/dist/artifacts.js.map +1 -0
  14. package/dist/{chunk-NJ7M2B6Z.js → chunk-5UQPNLIO.js} +16 -8
  15. package/dist/{chunk-NJ7M2B6Z.js.map → chunk-5UQPNLIO.js.map} +1 -1
  16. package/dist/{chunk-LHLYWG5R.js → chunk-6KLX2RH5.js} +461 -38
  17. package/dist/chunk-6KLX2RH5.js.map +1 -0
  18. package/dist/chunk-7WCLAEFV.js +2828 -0
  19. package/dist/chunk-7WCLAEFV.js.map +1 -0
  20. package/dist/{chunk-I4MPFDRP.js → chunk-B6WPZSTT.js} +104 -104
  21. package/dist/{chunk-I4MPFDRP.js.map → chunk-B6WPZSTT.js.map} +1 -1
  22. package/dist/{chunk-EKZH6IDG.js → chunk-C5ZPSSS5.js} +111 -1
  23. package/dist/chunk-C5ZPSSS5.js.map +1 -0
  24. package/dist/{chunk-OL6QVXGF.js → chunk-HA46CYQK.js} +152 -8
  25. package/dist/chunk-HA46CYQK.js.map +1 -0
  26. package/dist/chunk-HUIKIDM5.js +2148 -0
  27. package/dist/chunk-HUIKIDM5.js.map +1 -0
  28. package/dist/{chunk-FWXGSNXT.js → chunk-IGC6A2ZI.js} +585 -34
  29. package/dist/chunk-IGC6A2ZI.js.map +1 -0
  30. package/dist/chunk-JVYQRRC4.js +53 -0
  31. package/dist/chunk-JVYQRRC4.js.map +1 -0
  32. package/dist/chunk-KCGXPP5V.js +157 -0
  33. package/dist/chunk-KCGXPP5V.js.map +1 -0
  34. package/dist/chunk-LLOLUHVG.js +5937 -0
  35. package/dist/chunk-LLOLUHVG.js.map +1 -0
  36. package/dist/{chunk-WYA65Y3F.js → chunk-MKPIAGVL.js} +13 -3
  37. package/dist/chunk-MKPIAGVL.js.map +1 -0
  38. package/dist/chunk-PEI6RANI.js +3234 -0
  39. package/dist/chunk-PEI6RANI.js.map +1 -0
  40. package/dist/chunk-R3AZOAB5.js +933 -0
  41. package/dist/chunk-R3AZOAB5.js.map +1 -0
  42. package/dist/{chunk-O4VXOBGF.js → chunk-WSK7G5LE.js} +70 -2
  43. package/dist/chunk-WSK7G5LE.js.map +1 -0
  44. package/dist/{chunk-23EJ676W.js → chunk-XBZWOM2K.js} +9 -4
  45. package/dist/chunk-XBZWOM2K.js.map +1 -0
  46. package/dist/{chunk-XCNTXWBB.js → chunk-Y7OEDUJ5.js} +856 -338
  47. package/dist/chunk-Y7OEDUJ5.js.map +1 -0
  48. package/dist/client.d.ts +10 -2
  49. package/dist/clipboard.d.ts +1 -0
  50. package/dist/clipboard.js +7 -0
  51. package/dist/clipboard.js.map +1 -0
  52. package/dist/commands/index.d.ts +3 -3
  53. package/dist/commands/registry.d.ts +1 -1
  54. package/dist/commands/types.d.ts +1 -1
  55. package/dist/components/approval-surface.d.ts +2 -2
  56. package/dist/components/artifacts/artifact-surface.d.ts +18 -0
  57. package/dist/components/artifacts/document-editor.d.ts +172 -0
  58. package/dist/components/artifacts/editable-artifact-ui.d.ts +13 -0
  59. package/dist/components/artifacts/editable-artifact-workbench.d.ts +49 -0
  60. package/dist/components/artifacts/editable-document.d.ts +24 -0
  61. package/dist/components/artifacts/editable-presentation.d.ts +24 -0
  62. package/dist/components/artifacts/editable-spreadsheet.d.ts +32 -0
  63. package/dist/components/artifacts/index.d.ts +9 -0
  64. package/dist/components/artifacts/presentation-editor.d.ts +297 -0
  65. package/dist/components/artifacts/published-html-artifact-frame.d.ts +14 -0
  66. package/dist/components/artifacts/spreadsheet-canvas.d.ts +120 -0
  67. package/dist/components/artifacts/spreadsheet-grid.d.ts +113 -0
  68. package/dist/components/browser-input.d.ts +7 -0
  69. package/dist/components/browser-viewer.d.ts +30 -0
  70. package/dist/components/chat-composer.d.ts +8 -8
  71. package/dist/components/code-editor.d.ts +25 -3
  72. package/dist/components/command-palette.d.ts +2 -2
  73. package/dist/components/composer-transcription-control.d.ts +2 -2
  74. package/dist/components/composer.d.ts +17 -17
  75. package/dist/components/computer-viewer.d.ts +24 -0
  76. package/dist/components/copy-button.d.ts +2 -2
  77. package/dist/components/desktop-viewer.d.ts +50 -22
  78. package/dist/components/diff-view.d.ts +1 -1
  79. package/dist/components/enrollment-consent.d.ts +1 -1
  80. package/dist/components/enrollment-device-flow.d.ts +1 -1
  81. package/dist/components/file-browser.d.ts +2 -2
  82. package/dist/components/fleet-tile.d.ts +1 -1
  83. package/dist/components/generated-video-player.d.ts +10 -0
  84. package/dist/components/human-input-form.d.ts +1 -1
  85. package/dist/components/human-input-surface.d.ts +2 -2
  86. package/dist/components/interaction-intervention-banner.d.ts +11 -0
  87. package/dist/components/interactive-workbench-viewers.d.ts +2 -0
  88. package/dist/components/machine-card.d.ts +2 -2
  89. package/dist/components/machine-dock-bar.d.ts +3 -3
  90. package/dist/components/machine-health-pill.d.ts +2 -2
  91. package/dist/components/machine-input-display.d.ts +1 -1
  92. package/dist/components/machine-metrics.d.ts +2 -2
  93. package/dist/components/machine-status-pill.d.ts +4 -4
  94. package/dist/components/machines/health.d.ts +1 -1
  95. package/dist/components/machines/machine-detail.d.ts +3 -3
  96. package/dist/components/machines/metric-history-chart.d.ts +1 -1
  97. package/dist/components/machines/metric-sparkline.d.ts +2 -2
  98. package/dist/components/machines/series.d.ts +2 -2
  99. package/dist/components/machines-dashboard.d.ts +2 -2
  100. package/dist/components/markdown.d.ts +1 -1
  101. package/dist/components/message-timeline.d.ts +12 -5
  102. package/dist/components/model-picker.d.ts +2 -2
  103. package/dist/components/model-policy-picker.d.ts +7 -7
  104. package/dist/components/pierre-diff.d.ts +1 -1
  105. package/dist/components/pierre-file.d.ts +1 -1
  106. package/dist/components/queue-draft-policy.d.ts +1 -1
  107. package/dist/components/queue-surface-implementation.d.ts +3 -3
  108. package/dist/components/queue-surface-state.d.ts +4 -4
  109. package/dist/components/queue-surface.d.ts +5 -5
  110. package/dist/components/sandbox-files.d.ts +3 -3
  111. package/dist/components/sandbox-terminal.d.ts +24 -4
  112. package/dist/components/sandbox-workspace.d.ts +28 -9
  113. package/dist/components/session-chrome.d.ts +4 -4
  114. package/dist/components/session-status.d.ts +2 -2
  115. package/dist/components/timeline-annotation-selection.d.ts +9 -0
  116. package/dist/components/timeline-annotations-dialog.d.ts +16 -0
  117. package/dist/components/timeline-annotations.d.ts +13 -0
  118. package/dist/components/tooltip.d.ts +4 -4
  119. package/dist/components/user-message-body.d.ts +2 -2
  120. package/dist/components/workbench-changes.d.ts +2 -2
  121. package/dist/components/workspace-dock.d.ts +1 -1
  122. package/dist/composer.d.ts +11 -11
  123. package/dist/composer.js +7 -7
  124. package/dist/hooks/internal.d.ts +1 -1
  125. package/dist/hooks/use-attached-browsers.d.ts +21 -0
  126. package/dist/hooks/use-auth-runs.d.ts +32 -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-downloads.d.ts +25 -0
  130. package/dist/hooks/use-browser-frame-stream.d.ts +28 -0
  131. package/dist/hooks/use-browser-identities.d.ts +30 -0
  132. package/dist/hooks/use-browser-session.d.ts +29 -0
  133. package/dist/hooks/use-browser-sessions.d.ts +32 -0
  134. package/dist/hooks/use-channels.d.ts +26 -0
  135. package/dist/hooks/use-codex-accounts.d.ts +2 -2
  136. package/dist/hooks/use-composer.d.ts +36 -9
  137. package/dist/hooks/use-computer-frame-stream.d.ts +24 -0
  138. package/dist/hooks/use-computer-session.d.ts +29 -0
  139. package/dist/hooks/use-computer-sessions.d.ts +28 -0
  140. package/dist/hooks/use-desktop-stream.d.ts +5 -1
  141. package/dist/hooks/use-environments.d.ts +1 -1
  142. package/dist/hooks/use-file-attachments.d.ts +1 -1
  143. package/dist/hooks/use-goal.d.ts +2 -2
  144. package/dist/hooks/use-human-input.d.ts +2 -2
  145. package/dist/hooks/use-interaction-interventions.d.ts +27 -0
  146. package/dist/hooks/use-interaction-invalidation.d.ts +19 -0
  147. package/dist/hooks/use-last-started-turn-policy.d.ts +2 -2
  148. package/dist/hooks/use-machine-chip.d.ts +2 -2
  149. package/dist/hooks/use-machines.d.ts +4 -4
  150. package/dist/hooks/use-network-routes.d.ts +25 -0
  151. package/dist/hooks/use-packs.d.ts +7 -2
  152. package/dist/hooks/use-rigs.d.ts +1 -1
  153. package/dist/hooks/use-sandbox-files.d.ts +6 -4
  154. package/dist/hooks/use-sandbox-git.d.ts +6 -5
  155. package/dist/hooks/use-sandbox-terminal.d.ts +1 -1
  156. package/dist/hooks/use-scheduled-tasks.d.ts +1 -1
  157. package/dist/hooks/use-session-capabilities.d.ts +5 -4
  158. package/dist/hooks/use-session-control.d.ts +1 -1
  159. package/dist/hooks/use-session-events.d.ts +2 -2
  160. package/dist/hooks/use-session-lineage.d.ts +1 -1
  161. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  162. package/dist/hooks/use-session.d.ts +2 -2
  163. package/dist/hooks/use-site-auth-connections.d.ts +25 -0
  164. package/dist/hooks/use-slash-commands.d.ts +1 -1
  165. package/dist/hooks/use-supergrok-accounts.d.ts +26 -0
  166. package/dist/hooks/use-terminal-stream.d.ts +11 -2
  167. package/dist/hooks/use-turn-queue.d.ts +2 -2
  168. package/dist/hooks/use-video-artifact-playback.d.ts +9 -0
  169. package/dist/hooks/use-voice-input.d.ts +1 -1
  170. package/dist/hooks/use-workspace-capture.d.ts +1 -1
  171. package/dist/hooks/use-workspace-edit.d.ts +1 -1
  172. package/dist/hooks/use-workspace-sessions.d.ts +1 -1
  173. package/dist/hooks/use-workspaces.d.ts +1 -1
  174. package/dist/index.d.ts +162 -155
  175. package/dist/index.js +1822 -1703
  176. package/dist/index.js.map +1 -1
  177. package/dist/interaction.d.ts +33 -0
  178. package/dist/interaction.js +550 -0
  179. package/dist/interaction.js.map +1 -0
  180. package/dist/interactive-workbench-viewers-TOHBXJEE.js +15 -0
  181. package/dist/interactive-workbench-viewers-TOHBXJEE.js.map +1 -0
  182. package/dist/lib/host-platform.d.ts +5 -0
  183. package/dist/lib/relay-wire.d.ts +24 -1
  184. package/dist/lib/sandbox-liveness.d.ts +9 -0
  185. package/dist/lib/terminal-capability.d.ts +5 -0
  186. package/dist/lib/xterm-theme.d.ts +1 -1
  187. package/dist/machines.d.ts +30 -30
  188. package/dist/machines.js +2 -2
  189. package/dist/model-policy.d.ts +1 -1
  190. package/dist/model-policy.js +1 -1
  191. package/dist/provider.d.ts +6 -5
  192. package/dist/{queue-surface-implementation-U5JFG7HT.js → queue-surface-implementation-2KVJTYXH.js} +100 -48
  193. package/dist/queue-surface-implementation-2KVJTYXH.js.map +1 -0
  194. package/dist/realtime/dropdown-menu.d.ts +8 -8
  195. package/dist/realtime/realtime-control.d.ts +8 -8
  196. package/dist/realtime.d.ts +4 -4
  197. package/dist/realtime.js +38 -11
  198. package/dist/realtime.js.map +1 -1
  199. package/dist/session-context.d.ts +28 -2
  200. package/dist/session-ui.d.ts +14 -14
  201. package/dist/session-ui.js +5 -4
  202. package/dist/session.d.ts +28 -28
  203. package/dist/session.js +10 -10
  204. package/dist/timeline/activity-rail.d.ts +5 -3
  205. package/dist/timeline/disclosure-context.d.ts +1 -1
  206. package/dist/timeline/fleet-decision-projection.d.ts +1 -1
  207. package/dist/timeline/fleet-decision-row.d.ts +3 -3
  208. package/dist/timeline/index.d.ts +19 -19
  209. package/dist/timeline/parsers.d.ts +4 -1
  210. package/dist/timeline/projection.d.ts +3 -3
  211. package/dist/timeline/registry.d.ts +8 -2
  212. package/dist/timeline/screenshot-lightbox.d.ts +2 -2
  213. package/dist/timeline/shared.d.ts +21 -10
  214. package/dist/timeline/tool-diff.d.ts +2 -2
  215. package/dist/timeline/tool-renderers.d.ts +1 -1
  216. package/dist/timeline/turn-summary.d.ts +3 -3
  217. package/dist/timeline/types.d.ts +44 -3
  218. package/dist/timeline-annotation-selection-3L7LHGG2.js +187 -0
  219. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +1 -0
  220. package/dist/timeline-annotations-dialog-U7EVLR75.js +196 -0
  221. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +1 -0
  222. package/package.json +36 -7
  223. package/src/artifacts-document.ts +31 -0
  224. package/src/artifacts-presentation.ts +36 -0
  225. package/src/artifacts-spreadsheet.ts +21 -0
  226. package/src/artifacts.ts +89 -0
  227. package/src/client.ts +157 -1
  228. package/src/clipboard.ts +2 -0
  229. package/src/components/artifacts/artifact-surface.tsx +93 -0
  230. package/src/components/artifacts/document-editor.tsx +2255 -0
  231. package/src/components/artifacts/editable-artifact-ui.tsx +89 -0
  232. package/src/components/artifacts/editable-artifact-workbench.tsx +203 -0
  233. package/src/components/artifacts/editable-document.tsx +657 -0
  234. package/src/components/artifacts/editable-presentation.tsx +1020 -0
  235. package/src/components/artifacts/editable-spreadsheet.tsx +733 -0
  236. package/src/components/artifacts/index.ts +104 -0
  237. package/src/components/artifacts/presentation-editor.tsx +3148 -0
  238. package/src/components/artifacts/published-html-artifact-frame.tsx +38 -0
  239. package/src/components/artifacts/spreadsheet-canvas.ts +799 -0
  240. package/src/components/artifacts/spreadsheet-grid.tsx +2129 -0
  241. package/src/components/browser-input.ts +65 -0
  242. package/src/components/browser-viewer.tsx +2702 -0
  243. package/src/components/chat-composer.tsx +13 -0
  244. package/src/components/code-editor.tsx +89 -30
  245. package/src/components/composer-transcription-control.tsx +10 -6
  246. package/src/components/computer-viewer.tsx +1636 -0
  247. package/src/components/desktop-viewer.tsx +215 -74
  248. package/src/components/generated-video-player.tsx +89 -0
  249. package/src/components/interaction-intervention-banner.tsx +99 -0
  250. package/src/components/interactive-workbench-viewers.ts +2 -0
  251. package/src/components/machine-input-display.ts +3 -0
  252. package/src/components/machines/machine-detail.tsx +1 -1
  253. package/src/components/message-timeline.tsx +289 -32
  254. package/src/components/model-policy-picker.tsx +15 -0
  255. package/src/components/queue-surface-implementation.tsx +116 -60
  256. package/src/components/sandbox-files.tsx +2 -2
  257. package/src/components/sandbox-terminal.tsx +128 -46
  258. package/src/components/sandbox-workspace.tsx +256 -90
  259. package/src/components/session-chrome.tsx +53 -13
  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/workbench-changes.tsx +188 -31
  264. package/src/components/workspace-dock.tsx +59 -5
  265. package/src/hooks/use-attached-browsers.ts +154 -0
  266. package/src/hooks/use-auth-runs.ts +278 -0
  267. package/src/hooks/use-browser-downloads.ts +218 -0
  268. package/src/hooks/use-browser-frame-stream.ts +425 -0
  269. package/src/hooks/use-browser-identities.ts +266 -0
  270. package/src/hooks/use-browser-session.ts +543 -0
  271. package/src/hooks/use-browser-sessions.ts +286 -0
  272. package/src/hooks/use-channels.ts +99 -0
  273. package/src/hooks/use-composer.ts +769 -24
  274. package/src/hooks/use-computer-frame-stream.ts +434 -0
  275. package/src/hooks/use-computer-session.ts +462 -0
  276. package/src/hooks/use-computer-sessions.ts +251 -0
  277. package/src/hooks/use-desktop-stream.ts +39 -7
  278. package/src/hooks/use-interaction-interventions.ts +242 -0
  279. package/src/hooks/use-interaction-invalidation.ts +66 -0
  280. package/src/hooks/use-machine-chip.ts +15 -3
  281. package/src/hooks/use-machines.ts +33 -3
  282. package/src/hooks/use-network-routes.ts +214 -0
  283. package/src/hooks/use-packs.ts +51 -0
  284. package/src/hooks/use-sandbox-files.ts +98 -55
  285. package/src/hooks/use-sandbox-git.ts +93 -38
  286. package/src/hooks/use-sandbox-terminal.ts +3 -2
  287. package/src/hooks/use-session-capabilities.ts +59 -46
  288. package/src/hooks/use-site-auth-connections.ts +226 -0
  289. package/src/hooks/use-supergrok-accounts.ts +81 -0
  290. package/src/hooks/use-terminal-stream.ts +359 -47
  291. package/src/hooks/use-video-artifact-playback.ts +28 -0
  292. package/src/hooks/use-workspace-edit.ts +2 -1
  293. package/src/index.ts +18 -0
  294. package/src/interaction.ts +101 -0
  295. package/src/lib/host-platform.ts +10 -0
  296. package/src/lib/relay-wire.ts +47 -4
  297. package/src/lib/sandbox-liveness.ts +11 -0
  298. package/src/lib/terminal-capability.ts +10 -0
  299. package/src/model-policy.ts +19 -4
  300. package/src/provider.tsx +133 -1
  301. package/src/realtime/realtime-control.tsx +34 -6
  302. package/src/session-context.ts +156 -1
  303. package/src/timeline/activity-rail.tsx +25 -3
  304. package/src/timeline/index.ts +3 -0
  305. package/src/timeline/parsers.ts +14 -1
  306. package/src/timeline/projection.ts +269 -14
  307. package/src/timeline/registry.ts +13 -1
  308. package/src/timeline/screenshot-lightbox.tsx +19 -9
  309. package/src/timeline/shared.tsx +56 -8
  310. package/src/timeline/tool-renderers.tsx +303 -50
  311. package/src/timeline/types.ts +57 -3
  312. package/styles/compiled.css +312 -21
  313. package/styles/index.css +15 -0
  314. package/styles/responsive.css +13 -1
  315. package/dist/chunk-23EJ676W.js.map +0 -1
  316. package/dist/chunk-EKZH6IDG.js.map +0 -1
  317. package/dist/chunk-FWXGSNXT.js.map +0 -1
  318. package/dist/chunk-LHLYWG5R.js.map +0 -1
  319. package/dist/chunk-O4VXOBGF.js.map +0 -1
  320. package/dist/chunk-OL6QVXGF.js.map +0 -1
  321. package/dist/chunk-WYA65Y3F.js.map +0 -1
  322. package/dist/chunk-XCNTXWBB.js.map +0 -1
  323. package/dist/fleet-decision-projection-SLNZMS42.js +0 -241
  324. package/dist/fleet-decision-projection-SLNZMS42.js.map +0 -1
  325. package/dist/queue-surface-implementation-U5JFG7HT.js.map +0 -1
@@ -24,6 +24,8 @@ function useEmbeddedClientRefinement(override, requiredMethods, hookName) {
24
24
  workspaceId,
25
25
  workspaceControlEvent: context?.workspaceControlEvent ?? null,
26
26
  workspaceControlConnectionState: context?.workspaceControlConnectionState ?? "idle",
27
+ workspaceInteractionEvent: context?.workspaceInteractionEvent ?? null,
28
+ workspaceInteractionConnectionState: context?.workspaceInteractionConnectionState ?? "idle",
27
29
  registerSessionReconciler: context?.registerSessionReconciler ?? NOOP_REGISTER_RECONCILER,
28
30
  reconcileSession: context?.reconcileSession ?? NOOP_RECONCILE_SESSION
29
31
  };
@@ -46,10 +48,114 @@ function useOpenGeni(override = {}) {
46
48
  workspaceId,
47
49
  workspaceControlEvent: context?.workspaceControlEvent ?? null,
48
50
  workspaceControlConnectionState: context?.workspaceControlConnectionState ?? "idle",
51
+ workspaceInteractionEvent: context?.workspaceInteractionEvent ?? null,
52
+ workspaceInteractionConnectionState: context?.workspaceInteractionConnectionState ?? "idle",
49
53
  registerSessionReconciler: context?.registerSessionReconciler ?? NOOP_REGISTER_RECONCILER,
50
54
  reconcileSession: context?.reconcileSession ?? NOOP_RECONCILE_SESSION
51
55
  };
52
56
  }
57
+ var BROWSER_INTERACTION_METHODS = [
58
+ "streamWorkspaceInteractionRevisions",
59
+ "listNetworkRoutes",
60
+ "getNetworkRoute",
61
+ "createNetworkRoute",
62
+ "updateNetworkRoute",
63
+ "listSiteAuthConnections",
64
+ "getSiteAuthConnection",
65
+ "createSiteAuthConnection",
66
+ "updateSiteAuthConnection",
67
+ "listAuthRuns",
68
+ "getAuthRun",
69
+ "startBrowserAuthRun",
70
+ "reportBrowserAuthRun",
71
+ "protectedBrowserAuthFill",
72
+ "verifyBrowserAuthRun",
73
+ "listInteractionInterventions",
74
+ "getInteractionIntervention",
75
+ "createInteractionIntervention",
76
+ "resolveInteractionIntervention",
77
+ "listAttachedBrowsers",
78
+ "getAttachedBrowser",
79
+ "listBrowserIdentities",
80
+ "getBrowserIdentity",
81
+ "createBrowserIdentity",
82
+ "updateBrowserIdentity",
83
+ "listBrowserRevisions",
84
+ "listBrowserSessions",
85
+ "getBrowserSession",
86
+ "readBrowserClipboard",
87
+ "listBrowserDownloads",
88
+ "getBrowserDownload",
89
+ "saveBrowserDownload",
90
+ "createBrowserSession",
91
+ "listBrowserTargets",
92
+ "openBrowserTarget",
93
+ "selectBrowserTarget",
94
+ "closeBrowserTarget",
95
+ "observeBrowserTarget",
96
+ "actInBrowser",
97
+ "getBrowserActionReceipt",
98
+ "listBrowserDiagnostics",
99
+ "attachBrowserSession",
100
+ "heartbeatBrowserSession",
101
+ "publishBrowserRevision",
102
+ "suspendBrowserSession",
103
+ "resumeBrowserSession",
104
+ "endBrowserSession"
105
+ ];
106
+ var COMPUTER_INTERACTION_METHODS = [
107
+ "streamWorkspaceInteractionRevisions",
108
+ "listInteractionInterventions",
109
+ "getInteractionIntervention",
110
+ "createInteractionIntervention",
111
+ "resolveInteractionIntervention",
112
+ "listComputerSessions",
113
+ "getComputerSession",
114
+ "readComputerClipboard",
115
+ "createComputerSession",
116
+ "listComputerTargets",
117
+ "observeComputerTarget",
118
+ "actInComputer",
119
+ "getComputerActionReceipt",
120
+ "attachComputerSession",
121
+ "heartbeatComputerSession",
122
+ "endComputerSession"
123
+ ];
124
+ var INTERVENTION_METHODS = [
125
+ "streamWorkspaceInteractionRevisions",
126
+ "listInteractionInterventions",
127
+ "getInteractionIntervention",
128
+ "createInteractionIntervention",
129
+ "resolveInteractionIntervention"
130
+ ];
131
+ function useEmbeddedInterventions(override = {}) {
132
+ return useEmbeddedClientRefinement(
133
+ override,
134
+ INTERVENTION_METHODS,
135
+ "interaction intervention hooks"
136
+ );
137
+ }
138
+ function useEmbeddedBrowserInteraction(override = {}) {
139
+ return useEmbeddedClientRefinement(
140
+ override,
141
+ BROWSER_INTERACTION_METHODS,
142
+ "browser interaction hooks"
143
+ );
144
+ }
145
+ function useEmbeddedComputerInteraction(override = {}) {
146
+ return useEmbeddedClientRefinement(
147
+ override,
148
+ COMPUTER_INTERACTION_METHODS,
149
+ "computer interaction hooks"
150
+ );
151
+ }
152
+ function useEmbeddedInteraction(override = {}) {
153
+ return useEmbeddedClientRefinement(
154
+ override,
155
+ [...BROWSER_INTERACTION_METHODS, ...COMPUTER_INTERACTION_METHODS],
156
+ "interaction hooks"
157
+ );
158
+ }
53
159
  function useEmbeddedSession(override = {}) {
54
160
  return useEmbeddedClientRefinement(
55
161
  override,
@@ -128,6 +234,10 @@ function useOpenGeniClient(override = {}) {
128
234
  export {
129
235
  OpenGeniContext,
130
236
  useOpenGeni,
237
+ useEmbeddedInterventions,
238
+ useEmbeddedBrowserInteraction,
239
+ useEmbeddedComputerInteraction,
240
+ useEmbeddedInteraction,
131
241
  useEmbeddedSession,
132
242
  useEmbeddedSessionRead,
133
243
  useEmbeddedGoal,
@@ -138,4 +248,4 @@ export {
138
248
  useEmbeddedRealtimeSession,
139
249
  useOpenGeniClient
140
250
  };
141
- //# sourceMappingURL=chunk-EKZH6IDG.js.map
251
+ //# sourceMappingURL=chunk-C5ZPSSS5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/session-context.ts"],"sourcesContent":["import type {\n StreamConnectionState,\n WorkspaceControlEvent,\n WorkspaceInteractionRevisionEvent,\n} from \"@opengeni/sdk\";\nimport { createContext, useContext } from \"react\";\nimport type {\n EmbeddedFileAttachmentClientLike,\n EmbeddedGoalClientLike,\n EmbeddedHumanInputSessionClientLike,\n EmbeddedBrowserInteractionClientLike,\n EmbeddedComputerInteractionClientLike,\n EmbeddedInteractionClientLike,\n EmbeddedInterventionClientLike,\n EmbeddedRealtimeSessionClientLike,\n EmbeddedSessionClientLike,\n EmbeddedSessionLineageClientLike,\n EmbeddedSessionMcpApprovalPolicyClientLike,\n EmbeddedSessionReadClientLike,\n SessionClientLike,\n} from \"./client\";\n\nexport type OpenGeniContextValue = {\n client: SessionClientLike;\n workspaceId: string;\n workspaceControlEvent: WorkspaceControlEvent | null;\n workspaceControlConnectionState: StreamConnectionState | \"idle\" | \"error\";\n workspaceInteractionEvent: WorkspaceInteractionRevisionEvent | null;\n workspaceInteractionConnectionState: StreamConnectionState | \"idle\" | \"error\";\n registerSessionReconciler: (\n sessionId: string,\n key: string,\n reconcile: () => Promise<void>,\n ) => () => void;\n reconcileSession: (sessionId: string) => Promise<void>;\n};\n\nexport const OpenGeniContext = createContext<OpenGeniContextValue | null>(null);\n\nconst NOOP_REGISTER_RECONCILER: OpenGeniContextValue[\"registerSessionReconciler\"] = () => () =>\n undefined;\nconst NOOP_RECONCILE_SESSION: OpenGeniContextValue[\"reconcileSession\"] = async () => undefined;\n\nexport type ClientOverride = {\n client?: SessionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedSessionClientOverride = {\n client?: EmbeddedSessionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedHumanInputClientOverride = {\n client?: EmbeddedHumanInputSessionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedSessionMcpApprovalPolicyClientOverride = {\n client?: EmbeddedSessionMcpApprovalPolicyClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedSessionReadClientOverride = {\n client?: EmbeddedSessionReadClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedRealtimeSessionClientOverride = {\n client?: EmbeddedRealtimeSessionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedGoalClientOverride = {\n client?: EmbeddedGoalClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedSessionLineageClientOverride = {\n client?: EmbeddedSessionLineageClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedFileAttachmentClientOverride = {\n client?: EmbeddedFileAttachmentClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedInteractionClientOverride = {\n client?: EmbeddedInteractionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedInterventionClientOverride = {\n client?: EmbeddedInterventionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedBrowserInteractionClientOverride = {\n client?: EmbeddedBrowserInteractionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedComputerInteractionClientOverride = {\n client?: EmbeddedComputerInteractionClientLike | undefined;\n workspaceId?: string | undefined;\n};\n\nexport type EmbeddedSessionContextValue = Omit<OpenGeniContextValue, \"client\"> & {\n client: EmbeddedSessionClientLike;\n};\n\ntype EmbeddedClientOverride<TClient> = {\n client?: TClient | undefined;\n workspaceId?: string | undefined;\n};\n\ntype EmbeddedClientContextValue<TClient> = Omit<OpenGeniContextValue, \"client\"> & {\n client: TClient;\n};\n\nfunction useEmbeddedClientRefinement<TClient extends object>(\n override: EmbeddedClientOverride<TClient>,\n requiredMethods: readonly string[],\n hookName: string,\n): EmbeddedClientContextValue<TClient> {\n const context = useContext(OpenGeniContext);\n const candidate = override.client ?? context?.client;\n const workspaceId = override.workspaceId ?? context?.workspaceId;\n if (!candidate || !workspaceId) {\n throw new Error(\n \"@opengeni/react: no OpenGeni client/workspace available. Wrap the tree in <OpenGeniProvider> or pass { client, workspaceId } to the hook.\",\n );\n }\n const methods = candidate as Record<string, unknown>;\n const missing = requiredMethods.filter((method) => typeof methods[method] !== \"function\");\n if (missing.length > 0) {\n throw new Error(\n `@opengeni/react: ${hookName} requires client method${missing.length === 1 ? \"\" : \"s\"} ${missing.join(\", \")}.`,\n );\n }\n return {\n client: candidate as TClient,\n workspaceId,\n workspaceControlEvent: context?.workspaceControlEvent ?? null,\n workspaceControlConnectionState: context?.workspaceControlConnectionState ?? \"idle\",\n workspaceInteractionEvent: context?.workspaceInteractionEvent ?? null,\n workspaceInteractionConnectionState: context?.workspaceInteractionConnectionState ?? \"idle\",\n registerSessionReconciler: context?.registerSessionReconciler ?? NOOP_REGISTER_RECONCILER,\n reconcileSession: context?.reconcileSession ?? NOOP_RECONCILE_SESSION,\n };\n}\n\nfunction eventClientMethods(override: object, directMethods: readonly string[]): readonly string[] {\n const hasSharedEventFeed =\n \"events\" in override && (override as { events?: unknown }).events !== undefined;\n return hasSharedEventFeed ? directMethods : [\"getSession\", \"streamEvents\", ...directMethods];\n}\n\n/** Resolve client + workspace from explicit overrides or the provider. */\nexport function useOpenGeni(override: ClientOverride = {}): OpenGeniContextValue {\n const context = useContext(OpenGeniContext);\n const client = override.client ?? context?.client;\n const workspaceId = override.workspaceId ?? context?.workspaceId;\n if (!client || !workspaceId) {\n throw new Error(\n \"@opengeni/react: no OpenGeni client/workspace available. Wrap the tree in <OpenGeniProvider> or pass { client, workspaceId } to the hook.\",\n );\n }\n return {\n client,\n workspaceId,\n workspaceControlEvent: context?.workspaceControlEvent ?? null,\n workspaceControlConnectionState: context?.workspaceControlConnectionState ?? \"idle\",\n workspaceInteractionEvent: context?.workspaceInteractionEvent ?? null,\n workspaceInteractionConnectionState: context?.workspaceInteractionConnectionState ?? \"idle\",\n registerSessionReconciler: context?.registerSessionReconciler ?? NOOP_REGISTER_RECONCILER,\n reconcileSession: context?.reconcileSession ?? NOOP_RECONCILE_SESSION,\n };\n}\n\nconst BROWSER_INTERACTION_METHODS = [\n \"streamWorkspaceInteractionRevisions\",\n \"listNetworkRoutes\",\n \"getNetworkRoute\",\n \"createNetworkRoute\",\n \"updateNetworkRoute\",\n \"listSiteAuthConnections\",\n \"getSiteAuthConnection\",\n \"createSiteAuthConnection\",\n \"updateSiteAuthConnection\",\n \"listAuthRuns\",\n \"getAuthRun\",\n \"startBrowserAuthRun\",\n \"reportBrowserAuthRun\",\n \"protectedBrowserAuthFill\",\n \"verifyBrowserAuthRun\",\n \"listInteractionInterventions\",\n \"getInteractionIntervention\",\n \"createInteractionIntervention\",\n \"resolveInteractionIntervention\",\n \"listAttachedBrowsers\",\n \"getAttachedBrowser\",\n \"listBrowserIdentities\",\n \"getBrowserIdentity\",\n \"createBrowserIdentity\",\n \"updateBrowserIdentity\",\n \"listBrowserRevisions\",\n \"listBrowserSessions\",\n \"getBrowserSession\",\n \"readBrowserClipboard\",\n \"listBrowserDownloads\",\n \"getBrowserDownload\",\n \"saveBrowserDownload\",\n \"createBrowserSession\",\n \"listBrowserTargets\",\n \"openBrowserTarget\",\n \"selectBrowserTarget\",\n \"closeBrowserTarget\",\n \"observeBrowserTarget\",\n \"actInBrowser\",\n \"getBrowserActionReceipt\",\n \"listBrowserDiagnostics\",\n \"attachBrowserSession\",\n \"heartbeatBrowserSession\",\n \"publishBrowserRevision\",\n \"suspendBrowserSession\",\n \"resumeBrowserSession\",\n \"endBrowserSession\",\n] as const;\n\nconst COMPUTER_INTERACTION_METHODS = [\n \"streamWorkspaceInteractionRevisions\",\n \"listInteractionInterventions\",\n \"getInteractionIntervention\",\n \"createInteractionIntervention\",\n \"resolveInteractionIntervention\",\n \"listComputerSessions\",\n \"getComputerSession\",\n \"readComputerClipboard\",\n \"createComputerSession\",\n \"listComputerTargets\",\n \"observeComputerTarget\",\n \"actInComputer\",\n \"getComputerActionReceipt\",\n \"attachComputerSession\",\n \"heartbeatComputerSession\",\n \"endComputerSession\",\n] as const;\n\nconst INTERVENTION_METHODS = [\n \"streamWorkspaceInteractionRevisions\",\n \"listInteractionInterventions\",\n \"getInteractionIntervention\",\n \"createInteractionIntervention\",\n \"resolveInteractionIntervention\",\n] as const;\n\n/** Resolve only the workspace-wide Browser/Computer intervention surface. */\nexport function useEmbeddedInterventions(\n override: EmbeddedInterventionClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedInterventionClientLike> {\n return useEmbeddedClientRefinement(\n override,\n INTERVENTION_METHODS,\n \"interaction intervention hooks\",\n );\n}\n\n/** Resolve only BrowserSession methods for a standalone Browser embed. */\nexport function useEmbeddedBrowserInteraction(\n override: EmbeddedBrowserInteractionClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedBrowserInteractionClientLike> {\n return useEmbeddedClientRefinement(\n override,\n BROWSER_INTERACTION_METHODS,\n \"browser interaction hooks\",\n );\n}\n\n/** Resolve only ComputerSession methods for a standalone Computer embed. */\nexport function useEmbeddedComputerInteraction(\n override: EmbeddedComputerInteractionClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedComputerInteractionClientLike> {\n return useEmbeddedClientRefinement(\n override,\n COMPUTER_INTERACTION_METHODS,\n \"computer interaction hooks\",\n );\n}\n\n/** Resolve the complete Browser + Computer client surface. */\nexport function useEmbeddedInteraction(\n override: EmbeddedInteractionClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedInteractionClientLike> {\n return useEmbeddedClientRefinement(\n override,\n [...BROWSER_INTERACTION_METHODS, ...COMPUTER_INTERACTION_METHODS],\n \"interaction hooks\",\n );\n}\n\n/**\n * Resolve the narrow client required by the session-only hooks. The full\n * provider client is structurally compatible, while an explicit host proxy\n * only needs to expose session/event/composer/queue/control operations.\n */\nexport function useEmbeddedSession(\n override: EmbeddedSessionClientOverride = {},\n): EmbeddedSessionContextValue {\n return useEmbeddedClientRefinement(\n override,\n [\n \"getSession\",\n \"listEvents\",\n \"streamEvents\",\n \"getComposerDraft\",\n \"saveComposerDraft\",\n \"sendMessage\",\n \"steerMessage\",\n \"getQueue\",\n \"moveQueueItem\",\n \"editQueueItem\",\n \"steerQueueItem\",\n \"deleteQueueItem\",\n \"pauseSession\",\n \"resumeSession\",\n \"sendApprovalDecision\",\n ],\n \"session hooks\",\n );\n}\n\n/** Resolve the exact client surface required by `useSession`. */\nexport function useEmbeddedSessionRead(\n override: EmbeddedSessionReadClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedSessionReadClientLike> {\n return useEmbeddedClientRefinement(\n override,\n eventClientMethods(override, [\"getSession\", \"updateSession\"]),\n \"useSession\",\n );\n}\n\n/** Resolve the exact client surface required by `useGoal`. */\nexport function useEmbeddedGoal(\n override: EmbeddedGoalClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedGoalClientLike> {\n return useEmbeddedClientRefinement(\n override,\n eventClientMethods(override, [\"getGoal\", \"updateGoal\", \"deleteGoal\"]),\n \"useGoal\",\n );\n}\n\n/** Resolve the exact client surface required by `useSessionLineage`. */\nexport function useEmbeddedSessionLineage(\n override: EmbeddedSessionLineageClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedSessionLineageClientLike> {\n return useEmbeddedClientRefinement(\n override,\n eventClientMethods(override, [\"getSessionLineage\"]),\n \"useSessionLineage\",\n );\n}\n\n/** Resolve the exact client surface required by `useFileAttachments`. */\nexport function useEmbeddedFileAttachments(\n override: EmbeddedFileAttachmentClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedFileAttachmentClientLike> {\n return useEmbeddedClientRefinement(override, [\"uploadFile\"], \"useFileAttachments\");\n}\n\n/**\n * Resolve the structured-input refinement without widening the baseline\n * session-only proxy contract.\n */\nexport function useEmbeddedHumanInputSession(override: EmbeddedHumanInputClientOverride = {}): Omit<\n EmbeddedSessionContextValue,\n \"client\"\n> & {\n client: EmbeddedHumanInputSessionClientLike;\n} {\n return useEmbeddedClientRefinement(\n override,\n eventClientMethods(override, [\"listHumanInputRequests\", \"submitHumanInputResponse\"]),\n \"useHumanInputRequests\",\n );\n}\n\n/** Resolve the approval-policy refinement without widening session-only hosts. */\nexport function useEmbeddedSessionMcpApprovalPolicy(\n override: EmbeddedSessionMcpApprovalPolicyClientOverride = {},\n): Omit<EmbeddedSessionContextValue, \"client\"> & {\n client: EmbeddedSessionMcpApprovalPolicyClientLike;\n} {\n return useEmbeddedClientRefinement(\n override,\n eventClientMethods(override, [\"getSession\", \"updateSessionMcpApprovalPolicy\"]),\n \"useSessionMcpApprovalPolicy\",\n );\n}\n\n/** Resolve the exact browser/API surface required by `@opengeni/react/realtime`. */\nexport function useEmbeddedRealtimeSession(\n override: EmbeddedRealtimeSessionClientOverride = {},\n): EmbeddedClientContextValue<EmbeddedRealtimeSessionClientLike> {\n // Preserve the existing lazy capability behavior: proxy/test clients may\n // implement only the methods reached by their selected model and lifecycle.\n // The exported structural type remains the complete embedding contract.\n return useEmbeddedClientRefinement(override, [], \"realtime hooks\");\n}\n\n/**\n * Resolve the client only — for hooks that are not workspace-scoped\n * (`useWorkspaces`, `useBillingUsage`).\n */\nexport function useOpenGeniClient(\n override: Pick<ClientOverride, \"client\"> = {},\n): SessionClientLike {\n const context = useContext(OpenGeniContext);\n const client = override.client ?? context?.client;\n if (!client) {\n throw new Error(\n \"@opengeni/react: no OpenGeni client available. Wrap the tree in <OpenGeniProvider> or pass { client } to the hook.\",\n );\n }\n return client;\n}\n"],"mappings":"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","names":[]}
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  OpenGeniContext,
8
8
  useOpenGeni
9
- } from "./chunk-EKZH6IDG.js";
9
+ } from "./chunk-C5ZPSSS5.js";
10
10
  import {
11
11
  formatBytes,
12
12
  formatRelativeTime
@@ -1032,7 +1032,7 @@ function MachineDetail({
1032
1032
  "data-remove-machine": true,
1033
1033
  "aria-label": `Remove machine ${machine.name}`,
1034
1034
  onClick: () => onRemove(machine),
1035
- className: "inline-flex min-h-9 items-center gap-1.5 rounded-og-sm border border-og-status-failed/40 px-2.5 py-1 font-medium text-og-xs text-og-status-failed transition-colors hover:bg-og-status-failed/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-og-status-failed/50 pointer-coarse:min-h-11",
1035
+ className: "inline-flex min-h-9 items-center gap-1.5 rounded-og-sm border border-og-status-failed/40 px-2.5 py-1 font-medium text-og-xs text-og-status-failed transition-colors hover:bg-og-status-failed/10 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-status-failed/50 pointer-coarse:min-h-11",
1036
1036
  children: [
1037
1037
  /* @__PURE__ */ jsx7(Trash2Icon, { className: "size-3.5", "aria-hidden": true }),
1038
1038
  /* @__PURE__ */ jsx7("span", { className: "hidden sm:inline", children: "Remove machine" })
@@ -1738,21 +1738,28 @@ function OpenGeniProvider({
1738
1738
  client,
1739
1739
  workspaceId,
1740
1740
  onWorkspaceControlEvent,
1741
+ onWorkspaceInteractionEvent,
1741
1742
  children
1742
1743
  }) {
1743
1744
  const [workspaceControlEvent, setWorkspaceControlEvent] = useState3(
1744
1745
  null
1745
1746
  );
1746
1747
  const [workspaceControlConnectionState, setWorkspaceControlConnectionState] = useState3("idle");
1748
+ const [workspaceInteractionEvent, setWorkspaceInteractionEvent] = useState3(null);
1749
+ const [workspaceInteractionConnectionState, setWorkspaceInteractionConnectionState] = useState3("idle");
1747
1750
  const [contractMismatch, setContractMismatch] = useState3(
1748
1751
  null
1749
1752
  );
1750
1753
  const callbackRef = useRef2(onWorkspaceControlEvent);
1754
+ const interactionCallbackRef = useRef2(onWorkspaceInteractionEvent);
1751
1755
  const reconcilersRef = useRef2(/* @__PURE__ */ new Map());
1752
1756
  const reconcileInFlightRef = useRef2(/* @__PURE__ */ new Map());
1753
1757
  const workspaceControlSequencesRef = useRef2(/* @__PURE__ */ new Map());
1758
+ const workspaceInteractionSequencesRef = useRef2(/* @__PURE__ */ new Map());
1754
1759
  const pageLive = usePageLiveActivity();
1760
+ const supportsWorkspaceLiveStream = "streamWorkspaceLiveEvents" in client && typeof client.streamWorkspaceLiveEvents === "function";
1755
1761
  callbackRef.current = onWorkspaceControlEvent;
1762
+ interactionCallbackRef.current = onWorkspaceInteractionEvent;
1756
1763
  const verifyApiContract = useCallback(async () => {
1757
1764
  try {
1758
1765
  const config = await client.getClientConfig();
@@ -1806,6 +1813,77 @@ function OpenGeniProvider({
1806
1813
  [verifyApiContract]
1807
1814
  );
1808
1815
  useEffect(() => {
1816
+ if (!supportsWorkspaceLiveStream) return;
1817
+ const openLiveStream = client.streamWorkspaceLiveEvents;
1818
+ setWorkspaceControlEvent(null);
1819
+ setWorkspaceInteractionEvent(null);
1820
+ if (!pageLive) {
1821
+ setWorkspaceControlConnectionState("idle");
1822
+ setWorkspaceInteractionConnectionState("idle");
1823
+ return;
1824
+ }
1825
+ const controller = new AbortController();
1826
+ const setConnectionState = (state) => {
1827
+ setWorkspaceControlConnectionState(state);
1828
+ setWorkspaceInteractionConnectionState(state);
1829
+ };
1830
+ setConnectionState("connecting");
1831
+ void (async () => {
1832
+ try {
1833
+ await verifyApiContract();
1834
+ const workspace = await client.getWorkspace(workspaceId);
1835
+ const controlAfter = Math.max(
1836
+ workspaceControlSequencesRef.current.get(workspaceId) ?? 0,
1837
+ workspace.inferenceControl.revision
1838
+ );
1839
+ const interactionAfter = workspaceInteractionSequencesRef.current.get(workspaceId) ?? 0;
1840
+ workspaceControlSequencesRef.current.set(workspaceId, controlAfter);
1841
+ const stream = openLiveStream.call(client, workspaceId, {
1842
+ controlAfter,
1843
+ interactionAfter,
1844
+ signal: controller.signal,
1845
+ onStateChange: setConnectionState
1846
+ });
1847
+ for await (const event of stream) {
1848
+ if (controller.signal.aborted) return;
1849
+ if (event.type === "workspace.control.changed") {
1850
+ workspaceControlSequencesRef.current.set(
1851
+ workspaceId,
1852
+ Math.max(workspaceControlSequencesRef.current.get(workspaceId) ?? 0, event.sequence)
1853
+ );
1854
+ setWorkspaceControlEvent(
1855
+ (current) => !current || event.sequence > current.sequence ? event : current
1856
+ );
1857
+ callbackRef.current?.(event);
1858
+ } else {
1859
+ workspaceInteractionSequencesRef.current.set(
1860
+ workspaceId,
1861
+ Math.max(
1862
+ workspaceInteractionSequencesRef.current.get(workspaceId) ?? 0,
1863
+ event.sequence
1864
+ )
1865
+ );
1866
+ setWorkspaceInteractionEvent(
1867
+ (current) => !current || event.sequence > current.sequence ? event : current
1868
+ );
1869
+ interactionCallbackRef.current?.(event);
1870
+ }
1871
+ }
1872
+ } catch (error) {
1873
+ if (error instanceof OpenGeniApiContractMismatchError) {
1874
+ setContractMismatch(error);
1875
+ reloadForContractMismatchOnce(error);
1876
+ }
1877
+ if (!controller.signal.aborted) {
1878
+ setWorkspaceControlConnectionState("error");
1879
+ setWorkspaceInteractionConnectionState("error");
1880
+ }
1881
+ }
1882
+ })();
1883
+ return () => controller.abort();
1884
+ }, [client, pageLive, supportsWorkspaceLiveStream, verifyApiContract, workspaceId]);
1885
+ useEffect(() => {
1886
+ if (supportsWorkspaceLiveStream) return;
1809
1887
  if (!pageLive) {
1810
1888
  setWorkspaceControlConnectionState("idle");
1811
1889
  return;
@@ -1846,13 +1924,57 @@ function OpenGeniProvider({
1846
1924
  }
1847
1925
  })();
1848
1926
  return () => controller.abort();
1849
- }, [client, pageLive, verifyApiContract, workspaceId]);
1927
+ }, [client, pageLive, supportsWorkspaceLiveStream, verifyApiContract, workspaceId]);
1928
+ useEffect(() => {
1929
+ if (supportsWorkspaceLiveStream) return;
1930
+ setWorkspaceInteractionEvent(null);
1931
+ if (!pageLive) {
1932
+ setWorkspaceInteractionConnectionState("idle");
1933
+ return;
1934
+ }
1935
+ const controller = new AbortController();
1936
+ setWorkspaceInteractionConnectionState("connecting");
1937
+ void (async () => {
1938
+ try {
1939
+ await verifyApiContract();
1940
+ const resumeAfter = workspaceInteractionSequencesRef.current.get(workspaceId) ?? 0;
1941
+ const stream = client.streamWorkspaceInteractionRevisions(workspaceId, {
1942
+ after: resumeAfter,
1943
+ signal: controller.signal,
1944
+ onStateChange: setWorkspaceInteractionConnectionState
1945
+ });
1946
+ for await (const event of stream) {
1947
+ if (controller.signal.aborted) return;
1948
+ workspaceInteractionSequencesRef.current.set(
1949
+ workspaceId,
1950
+ Math.max(
1951
+ workspaceInteractionSequencesRef.current.get(workspaceId) ?? 0,
1952
+ event.sequence
1953
+ )
1954
+ );
1955
+ setWorkspaceInteractionEvent(
1956
+ (current) => !current || event.sequence > current.sequence ? event : current
1957
+ );
1958
+ interactionCallbackRef.current?.(event);
1959
+ }
1960
+ } catch (error) {
1961
+ if (error instanceof OpenGeniApiContractMismatchError) {
1962
+ setContractMismatch(error);
1963
+ reloadForContractMismatchOnce(error);
1964
+ }
1965
+ if (!controller.signal.aborted) setWorkspaceInteractionConnectionState("error");
1966
+ }
1967
+ })();
1968
+ return () => controller.abort();
1969
+ }, [client, pageLive, supportsWorkspaceLiveStream, verifyApiContract, workspaceId]);
1850
1970
  const value = useMemo(
1851
1971
  () => ({
1852
1972
  client,
1853
1973
  workspaceId,
1854
1974
  workspaceControlEvent,
1855
1975
  workspaceControlConnectionState,
1976
+ workspaceInteractionEvent,
1977
+ workspaceInteractionConnectionState,
1856
1978
  registerSessionReconciler,
1857
1979
  reconcileSession
1858
1980
  }),
@@ -1861,6 +1983,8 @@ function OpenGeniProvider({
1861
1983
  workspaceId,
1862
1984
  workspaceControlEvent,
1863
1985
  workspaceControlConnectionState,
1986
+ workspaceInteractionEvent,
1987
+ workspaceInteractionConnectionState,
1864
1988
  registerSessionReconciler,
1865
1989
  reconcileSession
1866
1990
  ]
@@ -1924,6 +2048,23 @@ function reloadForContractMismatchOnce(mismatch) {
1924
2048
 
1925
2049
  // src/hooks/use-machines.ts
1926
2050
  var EMPTY = { activeSandboxId: null, activeEpoch: 0, machines: [] };
2051
+ function swapFailureMessage(result) {
2052
+ if (result.reason?.trim()) return result.reason;
2053
+ switch (result.code) {
2054
+ case "recovery_in_progress":
2055
+ return "The managed sandbox is still recovering. Try again shortly.";
2056
+ case "recovery_degraded":
2057
+ return "The managed sandbox recovery is degraded and needs attention.";
2058
+ case "recovery_unrecoverable":
2059
+ return "The managed sandbox could not be recovered.";
2060
+ case "offline_enrollment":
2061
+ return "The selected machine is offline.";
2062
+ case "concurrent_swap":
2063
+ return "The session route changed concurrently. Refresh and try again.";
2064
+ default:
2065
+ return "The session stayed on its current sandbox.";
2066
+ }
2067
+ }
1927
2068
  function useMachines(options = {}) {
1928
2069
  const { client, workspaceId } = useOpenGeni(options);
1929
2070
  const machinesClient = options.machinesClient ?? client;
@@ -1965,7 +2106,10 @@ function useMachines(options = {}) {
1965
2106
  const ownedIdentity = identityKey;
1966
2107
  setAttachState({ identity: ownedIdentity, sandboxId });
1967
2108
  const result = await run(async () => {
1968
- await runSwap();
2109
+ const response = await runSwap();
2110
+ if (response && typeof response === "object" && "swapped" in response && response.swapped === false) {
2111
+ throw new Error(swapFailureMessage(response));
2112
+ }
1969
2113
  return true;
1970
2114
  });
1971
2115
  if (identityRef.current === ownedIdentity) {
@@ -2022,7 +2166,9 @@ function useMachines(options = {}) {
2022
2166
  }
2023
2167
 
2024
2168
  export {
2169
+ OpenGeniProvider,
2025
2170
  connectionStatusForState,
2171
+ useMachines,
2026
2172
  CONNECTION_STATUS_META,
2027
2173
  MACHINE_STATE_BADGE_META,
2028
2174
  ConnectionStatusPill,
@@ -2045,8 +2191,6 @@ export {
2045
2191
  MachineDockBar,
2046
2192
  SharedMachineDisclosure,
2047
2193
  EnrollmentDeviceFlow,
2048
- EnrollmentConsent,
2049
- OpenGeniProvider,
2050
- useMachines
2194
+ EnrollmentConsent
2051
2195
  };
2052
- //# sourceMappingURL=chunk-OL6QVXGF.js.map
2196
+ //# sourceMappingURL=chunk-HA46CYQK.js.map