@opengeni/react 0.52.1 → 1.0.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 (132) hide show
  1. package/README.md +51 -1
  2. package/dist/artifacts.d.ts +1 -1
  3. package/dist/artifacts.js +43 -14
  4. package/dist/artifacts.js.map +1 -1
  5. package/dist/{chunk-ROIRTM37.js → chunk-5UQPNLIO.js} +6 -6
  6. package/dist/{chunk-JR3QFY6B.js → chunk-6KLX2RH5.js} +49 -2
  7. package/dist/chunk-6KLX2RH5.js.map +1 -0
  8. package/dist/{chunk-FWS3KC3Z.js → chunk-B6WPZSTT.js} +104 -104
  9. package/dist/{chunk-FWS3KC3Z.js.map → chunk-B6WPZSTT.js.map} +1 -1
  10. package/dist/{chunk-HDBG7XGO.js → chunk-C5ZPSSS5.js} +50 -1
  11. package/dist/chunk-C5ZPSSS5.js.map +1 -0
  12. package/dist/{chunk-X4S56Y2H.js → chunk-HA46CYQK.js} +135 -11
  13. package/dist/chunk-HA46CYQK.js.map +1 -0
  14. package/dist/{chunk-724BW4TW.js → chunk-IGC6A2ZI.js} +2 -2
  15. package/dist/chunk-LLOLUHVG.js +5937 -0
  16. package/dist/chunk-LLOLUHVG.js.map +1 -0
  17. package/dist/{chunk-WYA65Y3F.js → chunk-MKPIAGVL.js} +13 -3
  18. package/dist/chunk-MKPIAGVL.js.map +1 -0
  19. package/dist/chunk-R3AZOAB5.js +933 -0
  20. package/dist/chunk-R3AZOAB5.js.map +1 -0
  21. package/dist/{chunk-23EJ676W.js → chunk-XBZWOM2K.js} +9 -4
  22. package/dist/chunk-XBZWOM2K.js.map +1 -0
  23. package/dist/{chunk-JAGDUCZQ.js → chunk-Y7OEDUJ5.js} +17 -13
  24. package/dist/chunk-Y7OEDUJ5.js.map +1 -0
  25. package/dist/client.d.ts +6 -4
  26. package/dist/components/artifacts/index.d.ts +1 -0
  27. package/dist/components/artifacts/published-html-artifact-frame.d.ts +14 -0
  28. package/dist/components/browser-input.d.ts +7 -0
  29. package/dist/components/browser-viewer.d.ts +5 -4
  30. package/dist/components/computer-viewer.d.ts +2 -1
  31. package/dist/components/desktop-viewer.d.ts +26 -2
  32. package/dist/components/interaction-intervention-banner.d.ts +11 -0
  33. package/dist/components/sandbox-terminal.d.ts +4 -1
  34. package/dist/components/sandbox-workspace.d.ts +3 -0
  35. package/dist/composer.js +6 -6
  36. package/dist/hooks/use-auth-runs.d.ts +32 -0
  37. package/dist/hooks/use-browser-downloads.d.ts +25 -0
  38. package/dist/hooks/use-browser-identities.d.ts +5 -1
  39. package/dist/hooks/use-browser-session.d.ts +2 -1
  40. package/dist/hooks/use-browser-sessions.d.ts +1 -1
  41. package/dist/hooks/use-channels.d.ts +26 -0
  42. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  43. package/dist/hooks/use-computer-session.d.ts +2 -1
  44. package/dist/hooks/use-computer-sessions.d.ts +1 -1
  45. package/dist/hooks/use-desktop-stream.d.ts +4 -0
  46. package/dist/hooks/use-interaction-interventions.d.ts +27 -0
  47. package/dist/hooks/use-interaction-invalidation.d.ts +19 -0
  48. package/dist/hooks/use-network-routes.d.ts +25 -0
  49. package/dist/hooks/use-site-auth-connections.d.ts +25 -0
  50. package/dist/hooks/use-supergrok-accounts.d.ts +26 -0
  51. package/dist/hooks/use-terminal-stream.d.ts +3 -0
  52. package/dist/index.d.ts +4 -0
  53. package/dist/index.js +1220 -1545
  54. package/dist/index.js.map +1 -1
  55. package/dist/interaction.d.ts +13 -3
  56. package/dist/interaction.js +520 -6
  57. package/dist/interaction.js.map +1 -1
  58. package/dist/interactive-workbench-viewers-TOHBXJEE.js +15 -0
  59. package/dist/lib/host-platform.d.ts +5 -0
  60. package/dist/lib/relay-wire.d.ts +20 -1
  61. package/dist/machines.js +3 -3
  62. package/dist/model-policy.d.ts +1 -1
  63. package/dist/model-policy.js +1 -1
  64. package/dist/provider.d.ts +3 -2
  65. package/dist/realtime/realtime-control.d.ts +6 -2
  66. package/dist/realtime.js +138 -24
  67. package/dist/realtime.js.map +1 -1
  68. package/dist/session-context.d.ts +10 -2
  69. package/dist/session-ui.js +3 -3
  70. package/dist/session.js +11 -11
  71. package/dist/timeline/types.d.ts +5 -0
  72. package/package.json +2 -2
  73. package/src/artifacts.ts +3 -0
  74. package/src/client.ts +73 -3
  75. package/src/components/artifacts/index.ts +5 -0
  76. package/src/components/artifacts/published-html-artifact-frame.tsx +38 -0
  77. package/src/components/browser-input.ts +65 -0
  78. package/src/components/browser-viewer.tsx +1287 -177
  79. package/src/components/computer-viewer.tsx +611 -114
  80. package/src/components/desktop-viewer.tsx +114 -1
  81. package/src/components/interaction-intervention-banner.tsx +99 -0
  82. package/src/components/machines/machine-detail.tsx +1 -1
  83. package/src/components/model-policy-picker.tsx +15 -0
  84. package/src/components/sandbox-terminal.tsx +24 -7
  85. package/src/components/sandbox-workspace.tsx +42 -4
  86. package/src/components/workspace-dock.tsx +59 -5
  87. package/src/hooks/use-attached-browsers.ts +13 -11
  88. package/src/hooks/use-auth-runs.ts +278 -0
  89. package/src/hooks/use-browser-downloads.ts +218 -0
  90. package/src/hooks/use-browser-frame-stream.ts +168 -59
  91. package/src/hooks/use-browser-identities.ts +47 -6
  92. package/src/hooks/use-browser-session.ts +94 -27
  93. package/src/hooks/use-browser-sessions.ts +19 -14
  94. package/src/hooks/use-channels.ts +99 -0
  95. package/src/hooks/use-computer-frame-stream.ts +184 -61
  96. package/src/hooks/use-computer-session.ts +22 -2
  97. package/src/hooks/use-computer-sessions.ts +19 -13
  98. package/src/hooks/use-desktop-stream.ts +39 -7
  99. package/src/hooks/use-interaction-interventions.ts +242 -0
  100. package/src/hooks/use-interaction-invalidation.ts +66 -0
  101. package/src/hooks/use-machine-chip.ts +13 -3
  102. package/src/hooks/use-network-routes.ts +214 -0
  103. package/src/hooks/use-site-auth-connections.ts +226 -0
  104. package/src/hooks/use-supergrok-accounts.ts +81 -0
  105. package/src/hooks/use-terminal-stream.ts +288 -55
  106. package/src/index.ts +8 -0
  107. package/src/interaction.ts +30 -0
  108. package/src/lib/host-platform.ts +10 -0
  109. package/src/lib/relay-wire.ts +43 -4
  110. package/src/lib/terminal-capability.ts +1 -1
  111. package/src/model-policy.ts +19 -4
  112. package/src/provider.tsx +133 -1
  113. package/src/realtime/realtime-control.tsx +181 -26
  114. package/src/session-context.ts +66 -1
  115. package/src/timeline/activity-rail.tsx +6 -0
  116. package/src/timeline/projection.ts +58 -0
  117. package/src/timeline/types.ts +2 -0
  118. package/styles/compiled.css +64 -6
  119. package/dist/chunk-23EJ676W.js.map +0 -1
  120. package/dist/chunk-6BBWWOOU.js +0 -82
  121. package/dist/chunk-6BBWWOOU.js.map +0 -1
  122. package/dist/chunk-7I2KB3OK.js +0 -3895
  123. package/dist/chunk-7I2KB3OK.js.map +0 -1
  124. package/dist/chunk-HDBG7XGO.js.map +0 -1
  125. package/dist/chunk-JAGDUCZQ.js.map +0 -1
  126. package/dist/chunk-JR3QFY6B.js.map +0 -1
  127. package/dist/chunk-WYA65Y3F.js.map +0 -1
  128. package/dist/chunk-X4S56Y2H.js.map +0 -1
  129. package/dist/interactive-workbench-viewers-KHNOHWQE.js +0 -13
  130. /package/dist/{chunk-ROIRTM37.js.map → chunk-5UQPNLIO.js.map} +0 -0
  131. /package/dist/{chunk-724BW4TW.js.map → chunk-IGC6A2ZI.js.map} +0 -0
  132. /package/dist/{interactive-workbench-viewers-KHNOHWQE.js.map → interactive-workbench-viewers-TOHBXJEE.js.map} +0 -0
@@ -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,19 +48,45 @@ 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
  }
53
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",
54
77
  "listAttachedBrowsers",
55
78
  "getAttachedBrowser",
56
79
  "listBrowserIdentities",
57
80
  "getBrowserIdentity",
58
81
  "createBrowserIdentity",
82
+ "updateBrowserIdentity",
59
83
  "listBrowserRevisions",
60
84
  "listBrowserSessions",
61
85
  "getBrowserSession",
86
+ "readBrowserClipboard",
87
+ "listBrowserDownloads",
88
+ "getBrowserDownload",
89
+ "saveBrowserDownload",
62
90
  "createBrowserSession",
63
91
  "listBrowserTargets",
64
92
  "openBrowserTarget",
@@ -76,8 +104,14 @@ var BROWSER_INTERACTION_METHODS = [
76
104
  "endBrowserSession"
77
105
  ];
78
106
  var COMPUTER_INTERACTION_METHODS = [
107
+ "streamWorkspaceInteractionRevisions",
108
+ "listInteractionInterventions",
109
+ "getInteractionIntervention",
110
+ "createInteractionIntervention",
111
+ "resolveInteractionIntervention",
79
112
  "listComputerSessions",
80
113
  "getComputerSession",
114
+ "readComputerClipboard",
81
115
  "createComputerSession",
82
116
  "listComputerTargets",
83
117
  "observeComputerTarget",
@@ -87,6 +121,20 @@ var COMPUTER_INTERACTION_METHODS = [
87
121
  "heartbeatComputerSession",
88
122
  "endComputerSession"
89
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
+ }
90
138
  function useEmbeddedBrowserInteraction(override = {}) {
91
139
  return useEmbeddedClientRefinement(
92
140
  override,
@@ -186,6 +234,7 @@ function useOpenGeniClient(override = {}) {
186
234
  export {
187
235
  OpenGeniContext,
188
236
  useOpenGeni,
237
+ useEmbeddedInterventions,
189
238
  useEmbeddedBrowserInteraction,
190
239
  useEmbeddedComputerInteraction,
191
240
  useEmbeddedInteraction,
@@ -199,4 +248,4 @@ export {
199
248
  useEmbeddedRealtimeSession,
200
249
  useOpenGeniClient
201
250
  };
202
- //# sourceMappingURL=chunk-HDBG7XGO.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":[]}
@@ -1,7 +1,3 @@
1
- import {
2
- formatBytes,
3
- formatRelativeTime
4
- } from "./chunk-LAKLF4PA.js";
5
1
  import {
6
2
  useMutationRunner,
7
3
  usePageLiveActivity,
@@ -10,7 +6,11 @@ import {
10
6
  import {
11
7
  OpenGeniContext,
12
8
  useOpenGeni
13
- } from "./chunk-HDBG7XGO.js";
9
+ } from "./chunk-C5ZPSSS5.js";
10
+ import {
11
+ formatBytes,
12
+ formatRelativeTime
13
+ } from "./chunk-LAKLF4PA.js";
14
14
  import {
15
15
  cn
16
16
  } from "./chunk-22KP6LR5.js";
@@ -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
  ]
@@ -2042,7 +2166,9 @@ function useMachines(options = {}) {
2042
2166
  }
2043
2167
 
2044
2168
  export {
2169
+ OpenGeniProvider,
2045
2170
  connectionStatusForState,
2171
+ useMachines,
2046
2172
  CONNECTION_STATUS_META,
2047
2173
  MACHINE_STATE_BADGE_META,
2048
2174
  ConnectionStatusPill,
@@ -2065,8 +2191,6 @@ export {
2065
2191
  MachineDockBar,
2066
2192
  SharedMachineDisclosure,
2067
2193
  EnrollmentDeviceFlow,
2068
- EnrollmentConsent,
2069
- OpenGeniProvider,
2070
- useMachines
2194
+ EnrollmentConsent
2071
2195
  };
2072
- //# sourceMappingURL=chunk-X4S56Y2H.js.map
2196
+ //# sourceMappingURL=chunk-HA46CYQK.js.map