@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
package/dist/client.d.ts CHANGED
@@ -4,7 +4,7 @@ import type { OpenGeniClient } from "@opengeni/sdk";
4
4
  * pass the real SDK client, a proxy-backed client that routes through their
5
5
  * own API, or a scripted client in tests/demos.
6
6
  */
7
- export type SessionClientLike = Pick<OpenGeniClient, "getClientConfig" | "getSession" | "getSessionLineage" | "updateSession" | "updateSessionPin" | "listSessions" | "listSessionPage" | "sendMessage" | "steerMessage" | "pauseSession" | "resumeSession" | "sendApprovalDecision" | "listHumanInputRequests" | "getHumanInputRequest" | "submitHumanInputResponse" | "listEvents" | "streamEvents" | "getQueue" | "moveQueueItem" | "editQueueItem" | "steerQueueItem" | "deleteQueueItem" | "getComposerDraft" | "saveComposerDraft" | "listTurns" | "getGoal" | "updateGoal" | "deleteGoal" | "clearSessionContext" | "compactSessionContext" | "listScheduledTasks" | "uploadFile" | "getFile" | "createFileDownloadUrl" | "listVariableSets" | "getVariableSetVariable" | "createVariableSet" | "updateVariableSet" | "deleteVariableSet" | "setVariableSetVariable" | "deleteVariableSetVariable" | "listEnvironments" | "createEnvironment" | "updateEnvironment" | "deleteEnvironment" | "setEnvironmentVariable" | "deleteEnvironmentVariable" | "listRigs" | "createRig" | "getRig" | "updateRig" | "deleteRig" | "listRigVersions" | "activateRigVersion" | "listRigChanges" | "proposeRigChange" | "getRigChange" | "verifyRigChange" | "promoteRigChange" | "verifyRig" | "listPacks" | "registerPack" | "enablePack" | "previewPackInstallation" | "installPack" | "previewPackUninstall" | "uninstallPack" | "deletePack" | "listWorkspaces" | "createWorkspace" | "updateWorkspace" | "setWorkspaceInferenceState" | "getWorkspace" | "getWorkspaceModelCatalog" | "listWorkspaceControlEvents" | "streamWorkspaceControlEvents" | "getBillingUsage" | "getClientConfig" | "getStreamCapabilities" | "acknowledgeStream" | "attachViewer" | "heartbeatViewer" | "detachViewer" | "listAttachedBrowsers" | "getAttachedBrowser" | "listBrowserIdentities" | "getBrowserIdentity" | "createBrowserIdentity" | "listBrowserRevisions" | "listBrowserSessions" | "getBrowserSession" | "createBrowserSession" | "listBrowserTargets" | "openBrowserTarget" | "selectBrowserTarget" | "closeBrowserTarget" | "observeBrowserTarget" | "actInBrowser" | "getBrowserActionReceipt" | "listBrowserDiagnostics" | "attachBrowserSession" | "heartbeatBrowserSession" | "publishBrowserRevision" | "suspendBrowserSession" | "resumeBrowserSession" | "endBrowserSession" | "listComputerSessions" | "getComputerSession" | "createComputerSession" | "listComputerTargets" | "observeComputerTarget" | "actInComputer" | "getComputerActionReceipt" | "attachComputerSession" | "heartbeatComputerSession" | "endComputerSession" | "fsList" | "fsListBatch" | "fsRead" | "fsWrite" | "fsDelete" | "fsMove" | "fsMkdir" | "gitStatus" | "gitDiff" | "gitReadBatch" | "getWorkspaceCapture" | "getWorkspaceCaptureFile" | "terminalExec" | "terminalPtyOpen" | "terminalPtyWrite" | "terminalPtyResize" | "terminalPtyClose"> & Partial<Pick<OpenGeniClient, "createVideoArtifactPlaybackSource">>;
7
+ export type SessionClientLike = Pick<OpenGeniClient, "getClientConfig" | "getSession" | "getSessionLineage" | "updateSession" | "updateSessionPin" | "listSessions" | "listSessionPage" | "sendMessage" | "steerMessage" | "pauseSession" | "resumeSession" | "sendApprovalDecision" | "listHumanInputRequests" | "getHumanInputRequest" | "submitHumanInputResponse" | "listEvents" | "streamEvents" | "getQueue" | "moveQueueItem" | "editQueueItem" | "steerQueueItem" | "deleteQueueItem" | "getComposerDraft" | "saveComposerDraft" | "listTurns" | "getGoal" | "updateGoal" | "deleteGoal" | "clearSessionContext" | "compactSessionContext" | "listScheduledTasks" | "uploadFile" | "getFile" | "createFileDownloadUrl" | "listVariableSets" | "getVariableSetVariable" | "createVariableSet" | "updateVariableSet" | "deleteVariableSet" | "setVariableSetVariable" | "deleteVariableSetVariable" | "listEnvironments" | "createEnvironment" | "updateEnvironment" | "deleteEnvironment" | "setEnvironmentVariable" | "deleteEnvironmentVariable" | "listChannels" | "createChannel" | "updateChannel" | "deleteChannel" | "updateSessionChannel" | "listRigs" | "createRig" | "getRig" | "updateRig" | "deleteRig" | "listRigVersions" | "activateRigVersion" | "listRigChanges" | "proposeRigChange" | "getRigChange" | "verifyRigChange" | "promoteRigChange" | "verifyRig" | "listPacks" | "registerPack" | "enablePack" | "previewPackInstallation" | "installPack" | "previewPackUninstall" | "uninstallPack" | "deletePack" | "listWorkspaces" | "createWorkspace" | "updateWorkspace" | "setWorkspaceInferenceState" | "getWorkspace" | "getWorkspaceModelCatalog" | "listWorkspaceControlEvents" | "streamWorkspaceControlEvents" | "streamWorkspaceInteractionRevisions" | "getBillingUsage" | "getClientConfig" | "getStreamCapabilities" | "acknowledgeStream" | "attachViewer" | "heartbeatViewer" | "detachViewer" | "listNetworkRoutes" | "getNetworkRoute" | "createNetworkRoute" | "updateNetworkRoute" | "listSiteAuthConnections" | "getSiteAuthConnection" | "createSiteAuthConnection" | "updateSiteAuthConnection" | "listAuthRuns" | "getAuthRun" | "startBrowserAuthRun" | "reportBrowserAuthRun" | "protectedBrowserAuthFill" | "verifyBrowserAuthRun" | "listInteractionInterventions" | "getInteractionIntervention" | "createInteractionIntervention" | "resolveInteractionIntervention" | "listAttachedBrowsers" | "getAttachedBrowser" | "listBrowserIdentities" | "getBrowserIdentity" | "createBrowserIdentity" | "updateBrowserIdentity" | "listBrowserRevisions" | "listBrowserSessions" | "getBrowserSession" | "readBrowserClipboard" | "listBrowserDownloads" | "getBrowserDownload" | "saveBrowserDownload" | "createBrowserSession" | "listBrowserTargets" | "openBrowserTarget" | "selectBrowserTarget" | "closeBrowserTarget" | "observeBrowserTarget" | "actInBrowser" | "getBrowserActionReceipt" | "listBrowserDiagnostics" | "attachBrowserSession" | "heartbeatBrowserSession" | "publishBrowserRevision" | "suspendBrowserSession" | "resumeBrowserSession" | "endBrowserSession" | "listComputerSessions" | "getComputerSession" | "readComputerClipboard" | "createComputerSession" | "listComputerTargets" | "observeComputerTarget" | "actInComputer" | "getComputerActionReceipt" | "attachComputerSession" | "heartbeatComputerSession" | "endComputerSession" | "fsList" | "fsListBatch" | "fsRead" | "fsWrite" | "fsDelete" | "fsMove" | "fsMkdir" | "gitStatus" | "gitDiff" | "gitReadBatch" | "getWorkspaceCapture" | "getWorkspaceCaptureFile" | "terminalExec" | "terminalPtyOpen" | "terminalPtyWrite" | "terminalPtyResize" | "terminalPtyClose"> & Partial<Pick<OpenGeniClient, "createVideoArtifactPlaybackSource" | "streamWorkspaceLiveEvents">>;
8
8
  /**
9
9
  * Tenant-safe client surface required by the session-only React entry.
10
10
  *
@@ -32,10 +32,12 @@ export type EmbeddedHumanInputSessionClientLike = EmbeddedSessionEventClientLike
32
32
  /** Exact client surface required by MCP approval-policy hooks. */
33
33
  export type EmbeddedSessionMcpApprovalPolicyClientLike = EmbeddedSessionEventClientLike & Pick<OpenGeniClient, "updateSessionMcpApprovalPolicy">;
34
34
  /** Exact client surface required by the public realtime React subpath. */
35
- export type EmbeddedRealtimeSessionClientLike = Pick<OpenGeniClient, "getWorkspaceRealtimeModelCatalog" | "beginSessionRealtime" | "heartbeatSessionRealtime" | "negotiateCodexRealtimeWebrtc" | "negotiateGatewayRealtime" | "activateCodexRealtimeConnection" | "syncSessionRealtimeLedger" | "endSessionRealtime">;
35
+ export type EmbeddedRealtimeSessionClientLike = Pick<OpenGeniClient, "getWorkspaceRealtimeModelCatalog" | "beginSessionRealtime" | "heartbeatSessionRealtime" | "negotiateCodexRealtimeWebrtc" | "negotiateGatewayRealtime" | "negotiateXaiSubscriptionRealtime" | "activateCodexRealtimeConnection" | "syncSessionRealtimeLedger" | "endSessionRealtime">;
36
+ /** Exact public SDK surface required by cross-surface human interventions. */
37
+ export type EmbeddedInterventionClientLike = Pick<OpenGeniClient, "streamWorkspaceInteractionRevisions" | "listInteractionInterventions" | "getInteractionIntervention" | "createInteractionIntervention" | "resolveInteractionIntervention">;
36
38
  /** Exact public SDK surface required by BrowserSession hooks and components. */
37
- export type EmbeddedBrowserInteractionClientLike = Pick<OpenGeniClient, "listAttachedBrowsers" | "getAttachedBrowser" | "listBrowserIdentities" | "getBrowserIdentity" | "createBrowserIdentity" | "listBrowserRevisions" | "listBrowserSessions" | "getBrowserSession" | "createBrowserSession" | "listBrowserTargets" | "openBrowserTarget" | "selectBrowserTarget" | "closeBrowserTarget" | "observeBrowserTarget" | "actInBrowser" | "getBrowserActionReceipt" | "listBrowserDiagnostics" | "attachBrowserSession" | "heartbeatBrowserSession" | "publishBrowserRevision" | "suspendBrowserSession" | "resumeBrowserSession" | "endBrowserSession">;
39
+ export type EmbeddedBrowserInteractionClientLike = Pick<OpenGeniClient, "streamWorkspaceInteractionRevisions" | "listNetworkRoutes" | "getNetworkRoute" | "createNetworkRoute" | "updateNetworkRoute" | "listSiteAuthConnections" | "getSiteAuthConnection" | "createSiteAuthConnection" | "updateSiteAuthConnection" | "listAuthRuns" | "getAuthRun" | "startBrowserAuthRun" | "reportBrowserAuthRun" | "protectedBrowserAuthFill" | "verifyBrowserAuthRun" | "listInteractionInterventions" | "getInteractionIntervention" | "createInteractionIntervention" | "resolveInteractionIntervention" | "listAttachedBrowsers" | "getAttachedBrowser" | "listBrowserIdentities" | "getBrowserIdentity" | "createBrowserIdentity" | "updateBrowserIdentity" | "listBrowserRevisions" | "listBrowserSessions" | "getBrowserSession" | "readBrowserClipboard" | "listBrowserDownloads" | "getBrowserDownload" | "saveBrowserDownload" | "createBrowserSession" | "listBrowserTargets" | "openBrowserTarget" | "selectBrowserTarget" | "closeBrowserTarget" | "observeBrowserTarget" | "actInBrowser" | "getBrowserActionReceipt" | "listBrowserDiagnostics" | "attachBrowserSession" | "heartbeatBrowserSession" | "publishBrowserRevision" | "suspendBrowserSession" | "resumeBrowserSession" | "endBrowserSession"> & EmbeddedInterventionClientLike;
38
40
  /** Exact public SDK surface required by ComputerSession hooks and components. */
39
- export type EmbeddedComputerInteractionClientLike = Pick<OpenGeniClient, "listComputerSessions" | "getComputerSession" | "createComputerSession" | "listComputerTargets" | "observeComputerTarget" | "actInComputer" | "getComputerActionReceipt" | "attachComputerSession" | "heartbeatComputerSession" | "endComputerSession">;
41
+ export type EmbeddedComputerInteractionClientLike = Pick<OpenGeniClient, "streamWorkspaceInteractionRevisions" | "listComputerSessions" | "getComputerSession" | "readComputerClipboard" | "createComputerSession" | "listComputerTargets" | "observeComputerTarget" | "actInComputer" | "getComputerActionReceipt" | "attachComputerSession" | "heartbeatComputerSession" | "endComputerSession"> & EmbeddedInterventionClientLike;
40
42
  /** Complete public Browser + Computer interaction surface. */
41
43
  export type EmbeddedInteractionClientLike = EmbeddedBrowserInteractionClientLike & EmbeddedComputerInteractionClientLike;
@@ -1,4 +1,5 @@
1
1
  export { ArtifactSurface, type ArtifactModality, type ArtifactSurfaceProps, } from "./artifact-surface.js";
2
+ export { PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX, PublishedHtmlArtifactFrame, type PublishedHtmlArtifactFrameProps, } from "./published-html-artifact-frame.js";
2
3
  export { SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./spreadsheet-grid.js";
3
4
  export { EditableSpreadsheetArtifactSurface, EditableSpreadsheetGrid, type EditableSpreadsheetArtifactSurfaceProps, type EditableSpreadsheetGridProps, } from "./editable-spreadsheet.js";
4
5
  export { BrowserEditableArtifactWorkbench, EditableArtifactWorkbench, EditableArtifactWorkbenchHost, type BrowserEditableArtifactWorkbenchOptions, type BrowserEditableArtifactWorkbenchProps, type EditableArtifactWorkbenchHostProps, type EditableArtifactWorkbenchProps, } from "./editable-artifact-workbench.js";
@@ -0,0 +1,14 @@
1
+ import type { CSSProperties } from "react";
2
+ export declare const PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX: string;
3
+ export type PublishedHtmlArtifactFrameProps = {
4
+ html: string;
5
+ title: string;
6
+ className?: string;
7
+ style?: CSSProperties;
8
+ };
9
+ /**
10
+ * Render exact published HTML in an opaque-origin iframe. Artifact scripts,
11
+ * external resources, forms, popups, and downloads work without granting
12
+ * parent-origin authority, shared cookies/storage, or top-level navigation.
13
+ */
14
+ export declare function PublishedHtmlArtifactFrame(props: PublishedHtmlArtifactFrameProps): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { KeyboardEvent } from "react";
2
+ import { type InteractionHostPlatform } from "../lib/host-platform.js";
3
+ export declare const HUMAN_BROWSER_HOME_URL = "https://www.google.com/";
4
+ /** Apply browser-style omnibox behavior: navigate hosts, search ordinary text. */
5
+ export declare function normalizeBrowserAddress(value: string): string | null;
6
+ /** Translate executable keyboard chords for the BrowserSession action API. */
7
+ export declare function browserKey(event: Pick<KeyboardEvent<HTMLTextAreaElement>, "altKey" | "ctrlKey" | "key" | "metaKey" | "shiftKey">, hostPlatform?: InteractionHostPlatform): string | null;
@@ -1,4 +1,4 @@
1
- import type { ComputerSession } from "@opengeni/sdk/interaction";
1
+ import type { ComputerSession, InteractionPlacement } from "@opengeni/sdk/interaction";
2
2
  import { type ReactNode } from "react";
3
3
  import { type BrowserFrameWebSocketFactory } from "../hooks/use-browser-frame-stream.js";
4
4
  import type { EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
@@ -15,9 +15,10 @@ export type BrowserViewerProps = EmbeddedBrowserInteractionClientOverride & {
15
15
  /** Tests/demos only. Production uses the browser's native WebSocket. */
16
16
  webSocketFactory?: BrowserFrameWebSocketFactory | undefined;
17
17
  renderEmpty?: ((create: () => void, creating: boolean) => ReactNode) | undefined;
18
- /** Optional host capability for a headed managed browser. Browser-only
19
- * embedders remain valid and create headless sessions instead. */
20
- createLinkedComputer?: ((name: string) => Promise<Pick<ComputerSession, "id" | "placement">>) | undefined;
18
+ /** Optional host capability for placing a human-created headed browser inside
19
+ * an exact ComputerSession. Browser-only embedders still create a headed
20
+ * browser; they simply omit the linked desktop resource. */
21
+ createLinkedComputer?: ((name: string, placement?: InteractionPlacement) => Promise<Pick<ComputerSession, "id" | "placement">>) | undefined;
21
22
  /** Navigate to the exact linked ComputerSession; never a lookalike desktop. */
22
23
  onOpenComputer?: ((computerSessionId: string) => void) | undefined;
23
24
  };
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from "react";
1
+ import { type KeyboardEvent, type ReactNode } from "react";
2
2
  import { type ComputerFrameWebSocketFactory } from "../hooks/use-computer-frame-stream.js";
3
3
  import type { EmbeddedComputerInteractionClientOverride } from "../session-context.js";
4
4
  export type ComputerViewerNotification = {
@@ -21,3 +21,4 @@ export type ComputerViewerProps = EmbeddedComputerInteractionClientOverride & {
21
21
  /** Full ComputerSession surface: workspace discovery, peer switching, app/window/
22
22
  * screen navigation, semantic controls, exact-frame input, and live media. */
23
23
  export declare function ComputerViewer({ sessionId, enabled, className, onNotify, webSocketFactory, renderEmpty, requestedComputerSessionId, requestedComputerRequestId, ...override }: ComputerViewerProps): string | number | bigint | boolean | import("react").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
24
+ export declare function computerKey(event: Pick<KeyboardEvent<HTMLTextAreaElement>, "altKey" | "ctrlKey" | "key" | "metaKey" | "shiftKey">): string | null;
@@ -1,5 +1,6 @@
1
1
  import type { CapabilityUnavailableReason, DesktopRfbFactory, DesktopStreamCapability } from "@opengeni/sdk";
2
- import { type ReactNode } from "react";
2
+ import { type KeyboardEvent as ReactKeyboardEvent, type ReactNode } from "react";
3
+ import { type InteractionHostPlatform } from "../lib/host-platform.js";
3
4
  import type { DesktopWebSocketFactory } from "../hooks/use-relay-frame-stream.js";
4
5
  export type DesktopViewerProps = {
5
6
  /** The desktop cell of the negotiated capabilities (`capabilities.DesktopStream`). */
@@ -16,9 +17,22 @@ export type DesktopViewerProps = {
16
17
  scaleViewport?: boolean | undefined;
17
18
  /** Custom RFB factory (tests / a WebRTC swap). Defaults to lazy @novnc/novnc. */
18
19
  rfbFactory?: DesktopRfbFactory | undefined;
20
+ /** Authenticated controller protocols for proxied RFB transports. */
21
+ webSocketProtocols?: string[] | undefined;
19
22
  /** Custom socket factory for the self-hosted `relay-frames` transport (tests).
20
23
  * Defaults to `new WebSocket(url)`. Mirrors `rfbFactory`. */
21
24
  webSocketFactory?: DesktopWebSocketFactory | undefined;
25
+ /**
26
+ * Optional host-owned paste path. ComputerSession hosts use their native,
27
+ * target-scoped clipboard action instead of relying on an RFB server to sync
28
+ * ClientCutText into the graphical seat. Return true once the host accepted
29
+ * the text. Without a host authority the viewer leaves paste untouched rather
30
+ * than claiming success for an unreliable display-server clipboard heuristic.
31
+ */
32
+ onPasteText?: ((text: string) => boolean) | undefined;
33
+ /** OS behind the RFB seat. Used only to translate the host's primary shortcut
34
+ * (Cmd on macOS, Ctrl elsewhere) to the target's primary modifier. */
35
+ targetPlatform?: "linux" | "macos" | "windows" | null | undefined;
22
36
  /**
23
37
  * @deprecated Desktop acknowledgment is automatic. Retained as an ignored
24
38
  * compatibility prop so existing embedders keep compiling.
@@ -86,4 +100,14 @@ export type DesktopViewerProps = {
86
100
  * Genuinely-unavailable surfaces (headless/policy/os/backend) keep a clear,
87
101
  * static unavailable notice.
88
102
  */
89
- export declare function DesktopViewer({ capability, interactive, showControlToggle, scaleViewport, rfbFactory, webSocketFactory, onActivate, onAcknowledge, watching, onWarm, renderUnavailable, renderWarming, renderViewerCap, viewerCapReached, connectTimeoutMs, className, }: DesktopViewerProps): import("react").JSX.Element;
103
+ export declare function DesktopViewer({ capability, interactive, showControlToggle, scaleViewport, rfbFactory, webSocketProtocols, webSocketFactory, onPasteText, targetPlatform, onActivate, onAcknowledge, watching, onWarm, renderUnavailable, renderWarming, renderViewerCap, viewerCapReached, connectTimeoutMs, className, }: DesktopViewerProps): import("react").JSX.Element;
104
+ type RfbKeyEvent = {
105
+ keysym: number;
106
+ code: string;
107
+ down: boolean;
108
+ };
109
+ /** Translate one host-primary chord into deterministic RFB events for the
110
+ * target OS. noVNC otherwise treats a Mac Command key as remote Alt, which
111
+ * makes ordinary Cmd+A/Z shortcuts silently wrong on Linux sandboxes. */
112
+ export declare function desktopPrimaryShortcut(event: Pick<ReactKeyboardEvent<HTMLDivElement>, "altKey" | "ctrlKey" | "key" | "metaKey" | "shiftKey" | "code">, hostPlatform: InteractionHostPlatform, targetPlatform: "linux" | "macos" | "windows"): RfbKeyEvent[] | "clipboard" | null;
113
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { InteractionIntervention } from "@opengeni/sdk/interaction";
2
+ export type InteractionInterventionBannerProps = {
3
+ interventions: InteractionIntervention[];
4
+ activeTargetId?: string | null | undefined;
5
+ mutating?: boolean | undefined;
6
+ className?: string | undefined;
7
+ onOpen?: ((intervention: InteractionIntervention) => void) | undefined;
8
+ onResolve: (intervention: InteractionIntervention, outcome: "completed" | "dismissed") => void;
9
+ };
10
+ /** Compact durable human-action prompt shared by Browser and Computer viewers. */
11
+ export declare function InteractionInterventionBanner({ interventions, activeTargetId, mutating, className, onOpen, onResolve, }: InteractionInterventionBannerProps): import("react").JSX.Element | null;
@@ -81,10 +81,13 @@ export type SandboxTerminalProps = {
81
81
  * the firehose-only default).
82
82
  */
83
83
  onActivate?: (() => void) | undefined;
84
+ /** Re-negotiate the terminal capability after an unexpected socket failure. */
85
+ onReconnectNeeded?: (() => void) | undefined;
84
86
  className?: string | undefined;
85
87
  };
86
88
  type XtermLike = {
87
89
  open: (el: HTMLElement) => void;
90
+ focus: () => void;
88
91
  write: (data: string) => void;
89
92
  clear: () => void;
90
93
  onData: (cb: (data: string) => void) => {
@@ -165,5 +168,5 @@ declare global {
165
168
  * Resizes are tracked with a `ResizeObserver` on the container (not just
166
169
  * `window.resize`) so dragging the dock handle refits the grid.
167
170
  */
168
- export declare function SandboxTerminal({ result, terminalCapability, theme, fontFamily, fontSize, liveness, readOnly, placeholder, showHeader, shell, onActivate, className, }: SandboxTerminalProps): import("react").JSX.Element;
171
+ export declare function SandboxTerminal({ result, terminalCapability, theme, fontFamily, fontSize, liveness, readOnly, placeholder, showHeader, shell, onActivate, onReconnectNeeded, className, }: SandboxTerminalProps): import("react").JSX.Element;
169
172
  export {};
@@ -62,6 +62,9 @@ export type UseSandboxWorkspaceTabsOptions = ClientOverride & {
62
62
  initialTab?: string | null | undefined;
63
63
  /** Actually selected dock tab. Inactive data surfaces retain cache but issue no live reads. */
64
64
  activeTab?: string | null | undefined;
65
+ /** Whether the dock is visible. Hidden docks retain UI state but must not keep
66
+ * expensive browser/computer media streams alive. */
67
+ workspaceVisible?: boolean | undefined;
65
68
  /** Host-routed notifications (mutation errors, desktop-consent failures). The
66
69
  * package never imports a toast library — the host decides how to surface. */
67
70
  onNotify?: ((notification: WorkspaceNotification) => void) | undefined;
package/dist/composer.js CHANGED
@@ -37,7 +37,8 @@ import {
37
37
  useChatComposer,
38
38
  useChatComposerController,
39
39
  useVoiceInput
40
- } from "./chunk-ROIRTM37.js";
40
+ } from "./chunk-5UQPNLIO.js";
41
+ import "./chunk-IGC6A2ZI.js";
41
42
  import {
42
43
  BillingClassMark,
43
44
  ModelPolicyPicker,
@@ -46,14 +47,13 @@ import {
46
47
  PickerBackHeader,
47
48
  PickerNavRow,
48
49
  defaultModelPolicyPickerMessages
49
- } from "./chunk-WYA65Y3F.js";
50
- import "./chunk-23EJ676W.js";
50
+ } from "./chunk-MKPIAGVL.js";
51
+ import "./chunk-XBZWOM2K.js";
51
52
  import "./chunk-FK6VG4LL.js";
52
53
  import "./chunk-VZTQ73XT.js";
53
- import "./chunk-724BW4TW.js";
54
- import "./chunk-LAKLF4PA.js";
55
54
  import "./chunk-KZ73RL76.js";
56
- import "./chunk-HDBG7XGO.js";
55
+ import "./chunk-C5ZPSSS5.js";
56
+ import "./chunk-LAKLF4PA.js";
57
57
  import "./chunk-22KP6LR5.js";
58
58
  export {
59
59
  Actions,
@@ -0,0 +1,32 @@
1
+ import type { AuthRun, AuthRunMutationResponse, ProtectedAuthFillRequest, ProtectedAuthFillResponse, ReportAuthRunRequest, StartAuthRunRequest, VerifyAuthRunRequest } from "@opengeni/sdk/interaction";
2
+ import type { EmbeddedBrowserInteractionClientLike } from "../client.js";
3
+ import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
4
+ export type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {
5
+ enabled?: boolean | undefined;
6
+ browserSessionId?: string | null | undefined;
7
+ siteAuthConnectionId?: string | null | undefined;
8
+ includeSettled?: boolean | undefined;
9
+ };
10
+ export type UseAuthRunsResult = {
11
+ runs: AuthRun[];
12
+ loading: boolean;
13
+ refreshing: boolean;
14
+ mutating: boolean;
15
+ error: Error | null;
16
+ refresh: () => Promise<void>;
17
+ start: (browserSessionId: string, request: Omit<StartAuthRunRequest, "operationId"> & {
18
+ operationId?: string;
19
+ }) => Promise<AuthRunMutationResponse>;
20
+ report: (browserSessionId: string, authRunId: string, request: Omit<ReportAuthRunRequest, "operationId"> & {
21
+ operationId?: string;
22
+ }) => Promise<AuthRunMutationResponse>;
23
+ protectedFill: (browserSessionId: string, authRunId: string, request: Omit<ProtectedAuthFillRequest, "operationId"> & {
24
+ operationId?: string;
25
+ }) => Promise<ProtectedAuthFillResponse>;
26
+ verify: (browserSessionId: string, authRunId: string, request: Omit<VerifyAuthRunRequest, "operationId"> & {
27
+ operationId?: string;
28
+ }) => Promise<AuthRunMutationResponse>;
29
+ };
30
+ /** Live authentication state machines tied to exact browser document generations. */
31
+ export declare function useAuthRuns(options?: UseAuthRunsOptions): UseAuthRunsResult;
32
+ export type AuthRunsClient = EmbeddedBrowserInteractionClientLike;
@@ -0,0 +1,25 @@
1
+ import type { BrowserDownload, BrowserDownloadSaveResponse } from "@opengeni/sdk/interaction";
2
+ import type { EmbeddedBrowserInteractionClientLike } from "../client.js";
3
+ import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
4
+ export type UseBrowserDownloadsOptions = EmbeddedBrowserInteractionClientOverride & {
5
+ browserSessionId: string | null;
6
+ enabled?: boolean | undefined;
7
+ pollIntervalMs?: number | undefined;
8
+ };
9
+ export type BrowserDownloadSaveOptions = {
10
+ operationId?: string | undefined;
11
+ overwrite?: boolean | undefined;
12
+ };
13
+ export type UseBrowserDownloadsResult = {
14
+ downloads: BrowserDownload[];
15
+ loading: boolean;
16
+ refreshing: boolean;
17
+ savingDownloadIds: string[];
18
+ error: Error | null;
19
+ refresh: () => Promise<void>;
20
+ saveToWorkspace: (downloadId: string, destinationPath: string, options?: BrowserDownloadSaveOptions) => Promise<BrowserDownloadSaveResponse>;
21
+ };
22
+ /** Exact browser-produced files for one BrowserSession. Bytes remain private
23
+ * until `saveToWorkspace` performs the canonical workspace mutation. */
24
+ export declare function useBrowserDownloads(options: UseBrowserDownloadsOptions): UseBrowserDownloadsResult;
25
+ export type BrowserDownloadsClient = EmbeddedBrowserInteractionClientLike;
@@ -1,8 +1,9 @@
1
- import type { BrowserIdentity, BrowserIdentityMutationResponse, BrowserRevisionListResponse, CreateBrowserIdentityRequest, PublishBrowserRevisionRequest, PublishBrowserRevisionResponse } from "@opengeni/sdk/interaction";
1
+ import type { BrowserIdentity, BrowserIdentityMutationResponse, BrowserRevisionListResponse, CreateBrowserIdentityRequest, PublishBrowserRevisionRequest, PublishBrowserRevisionResponse, UpdateBrowserIdentityRequest } from "@opengeni/sdk/interaction";
2
2
  import type { EmbeddedBrowserInteractionClientLike } from "../client.js";
3
3
  import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
4
4
  export type UseBrowserIdentitiesOptions = EmbeddedBrowserInteractionClientOverride & {
5
5
  enabled?: boolean | undefined;
6
+ includeArchived?: boolean | undefined;
6
7
  };
7
8
  export type UseBrowserIdentitiesResult = {
8
9
  revision: number;
@@ -15,6 +16,9 @@ export type UseBrowserIdentitiesResult = {
15
16
  create: (request: Omit<CreateBrowserIdentityRequest, "operationId"> & {
16
17
  operationId?: string;
17
18
  }) => Promise<BrowserIdentityMutationResponse>;
19
+ update: (identityId: string, request: Omit<UpdateBrowserIdentityRequest, "operationId"> & {
20
+ operationId?: string;
21
+ }) => Promise<BrowserIdentityMutationResponse>;
18
22
  revisions: (identityId: string) => Promise<BrowserRevisionListResponse>;
19
23
  publish: (browserSessionId: string, request: Omit<PublishBrowserRevisionRequest, "operationId"> & {
20
24
  operationId?: string;
@@ -1,4 +1,4 @@
1
- import type { BrowserAction, BrowserActionBatch, BrowserActionReceipt, BrowserDiagnosticBatch, BrowserDiagnosticsOptions, BrowserFrame, BrowserObservation, BrowserSession, BrowserTarget } from "@opengeni/sdk/interaction";
1
+ import type { BrowserAction, BrowserActionBatch, BrowserActionReceipt, BrowserClipboard, BrowserDiagnosticBatch, BrowserDiagnosticsOptions, BrowserFrame, BrowserObservation, BrowserSession, BrowserTarget } from "@opengeni/sdk/interaction";
2
2
  import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
3
3
  export type UseBrowserSessionOptions = EmbeddedBrowserInteractionClientOverride & {
4
4
  browserSessionId: string | null;
@@ -21,6 +21,7 @@ export type UseBrowserSessionResult = {
21
21
  /** Dispatch input against the exact image a human saw. Stale images fail at
22
22
  * the controller fence instead of targeting a newer page. */
23
23
  actFromFrame: (action: BrowserAction | BrowserActionBatch, frame: BrowserFrame, operationId?: string) => Promise<BrowserActionReceipt>;
24
+ readClipboard: () => Promise<BrowserClipboard>;
24
25
  diagnostics: (options?: BrowserDiagnosticsOptions) => Promise<BrowserDiagnosticBatch>;
25
26
  };
26
27
  /** Selected BrowserSession control state. All human actions use the same
@@ -5,7 +5,7 @@ export type UseBrowserSessionsOptions = EmbeddedBrowserInteractionClientOverride
5
5
  /** Current agent/session relevance. Workspace peers remain in `sessions`. */
6
6
  sessionId?: string | undefined;
7
7
  enabled?: boolean | undefined;
8
- /** Temporary invalidation path until the interaction event stream lands. */
8
+ /** Polling fallback used only while the workspace invalidation stream is unavailable. */
9
9
  pollIntervalMs?: number | undefined;
10
10
  };
11
11
  export type UseBrowserSessionsResult = {
@@ -0,0 +1,26 @@
1
+ import type { Channel, CreateChannelRequest, Session, UpdateChannelRequest } from "@opengeni/sdk";
2
+ import { type ClientOverride } from "../provider.js";
3
+ export type UseChannelsOptions = ClientOverride & {
4
+ pollIntervalMs?: number | undefined;
5
+ enabled?: boolean | undefined;
6
+ };
7
+ export type UseChannelsResult = {
8
+ channels: Channel[];
9
+ loading: boolean;
10
+ error: Error | null;
11
+ refresh: () => Promise<void>;
12
+ create: (request: CreateChannelRequest) => Promise<Channel | null>;
13
+ update: (channelId: string, request: UpdateChannelRequest) => Promise<Channel | null>;
14
+ remove: (channelId: string) => Promise<boolean>;
15
+ /** Re-file a session into a channel; null moves it back to the inbox. */
16
+ moveSession: (sessionId: string, channelId: string | null) => Promise<Session | null>;
17
+ mutating: boolean;
18
+ mutationError: Error | null;
19
+ clearMutationError: () => void;
20
+ };
21
+ /**
22
+ * Workspace-shared channels: rail organization for root sessions
23
+ * ("workstreams") by work type. Pure metadata — filing a session into a
24
+ * channel never affects execution.
25
+ */
26
+ export declare function useChannels(options?: UseChannelsOptions): UseChannelsResult;
@@ -15,7 +15,7 @@ export type UseComputerFrameStreamOptions = EmbeddedComputerInteractionClientOve
15
15
  export type UseComputerFrameStreamResult = {
16
16
  state: ComputerFrameConnectionState;
17
17
  frame: ComputerFrame | null;
18
- attachment: Pick<ComputerSessionAttachment, "computerSessionId" | "controllerGeneration" | "targetId" | "expiresAt"> | null;
18
+ attachment: Pick<ComputerSessionAttachment, "computerSessionId" | "controllerGeneration" | "targetId" | "stream" | "expiresAt"> | null;
19
19
  error: Error | null;
20
20
  reconnect: () => void;
21
21
  };
@@ -1,4 +1,4 @@
1
- import type { ComputerAction, ComputerActionReceipt, ComputerFrame, ComputerObservation, ComputerSession, ComputerTarget } from "@opengeni/sdk/interaction";
1
+ import type { ComputerAction, ComputerActionReceipt, ComputerClipboard, ComputerFrame, ComputerObservation, ComputerSession, ComputerTarget } from "@opengeni/sdk/interaction";
2
2
  import { type EmbeddedComputerInteractionClientOverride } from "../session-context.js";
3
3
  export type UseComputerSessionOptions = EmbeddedComputerInteractionClientOverride & {
4
4
  computerSessionId: string | null;
@@ -14,6 +14,7 @@ export type UseComputerSessionResult = {
14
14
  mutating: boolean;
15
15
  error: Error | null;
16
16
  refresh: () => Promise<void>;
17
+ readClipboard: () => Promise<ComputerClipboard>;
17
18
  /** Changes only this viewer's target cursor; it never takes ownership or
18
19
  * foregrounds an application. */
19
20
  selectTarget: (targetId: string) => Promise<ComputerTarget>;
@@ -5,7 +5,7 @@ export type UseComputerSessionsOptions = EmbeddedComputerInteractionClientOverri
5
5
  /** Current agent/session relevance. Workspace peers remain in `sessions`. */
6
6
  sessionId?: string | undefined;
7
7
  enabled?: boolean | undefined;
8
- /** Temporary invalidation path until the interaction event stream lands. */
8
+ /** Polling fallback used only while the workspace invalidation stream is unavailable. */
9
9
  pollIntervalMs?: number | undefined;
10
10
  };
11
11
  export type UseComputerSessionsResult = {
@@ -11,6 +11,8 @@ export type UseDesktopStreamOptions = {
11
11
  scaleViewport?: boolean | undefined;
12
12
  /** Custom RFB factory (tests / a WebRTC swap). Defaults to a lazy @novnc/novnc. */
13
13
  rfbFactory?: DesktopRfbFactory | undefined;
14
+ /** Additional WebSocket protocols for an authenticated placement proxy. */
15
+ webSocketProtocols?: string[] | undefined;
14
16
  /** Custom socket factory for the `relay-frames` transport (tests). Defaults to
15
17
  * `new WebSocket(url)`. Mirrors `rfbFactory` for the frame renderer. */
16
18
  webSocketFactory?: DesktopWebSocketFactory | undefined;
@@ -20,6 +22,8 @@ export type UseDesktopStreamResult = {
20
22
  error: Error | null;
21
23
  /** Manual reconnect (e.g. after a securityfailure once a fresh URL arrives). */
22
24
  reconnect: () => void;
25
+ /** Synchronous input on the already-open RFB authority. */
26
+ sendKey?: ((keysym: number, code: string, down?: boolean) => boolean) | undefined;
23
27
  };
24
28
  /**
25
29
  * Drive the noVNC RFB lifecycle from a `DesktopStreamCapability`, using the
@@ -0,0 +1,27 @@
1
+ import type { CreateInteractionInterventionRequest, InteractionIntervention, InteractionInterventionMutationResponse, ResolveInteractionInterventionRequest } from "@opengeni/sdk/interaction";
2
+ import type { EmbeddedInterventionClientLike } from "../client.js";
3
+ import { type EmbeddedInterventionClientOverride } from "../session-context.js";
4
+ export type UseInteractionInterventionsOptions = EmbeddedInterventionClientOverride & {
5
+ enabled?: boolean | undefined;
6
+ resourceKind?: "browser_session" | "computer_session" | undefined;
7
+ resourceId?: string | null | undefined;
8
+ includeSettled?: boolean | undefined;
9
+ pollIntervalMs?: number | undefined;
10
+ };
11
+ export type UseInteractionInterventionsResult = {
12
+ interventions: InteractionIntervention[];
13
+ loading: boolean;
14
+ refreshing: boolean;
15
+ mutating: boolean;
16
+ error: Error | null;
17
+ refresh: () => Promise<void>;
18
+ create: (request: Omit<CreateInteractionInterventionRequest, "operationId"> & {
19
+ operationId?: string;
20
+ }) => Promise<InteractionInterventionMutationResponse>;
21
+ resolve: (interventionId: string, request: Omit<ResolveInteractionInterventionRequest, "operationId"> & {
22
+ operationId?: string;
23
+ }) => Promise<InteractionInterventionMutationResponse>;
24
+ };
25
+ /** Human-action bridge shared by Browser and Computer surfaces. */
26
+ export declare function useInteractionInterventions(options?: UseInteractionInterventionsOptions): UseInteractionInterventionsResult;
27
+ export type InteractionInterventionsClient = EmbeddedInterventionClientLike;
@@ -0,0 +1,19 @@
1
+ import type { StreamConnectionState, WorkspaceInteractionRevisionEvent } from "@opengeni/sdk";
2
+ export type InteractionInvalidationOptions = {
3
+ workspaceId: string;
4
+ /** Distinguishes filtered projections of the same workspace catalog. */
5
+ key: string;
6
+ enabled: boolean;
7
+ event: WorkspaceInteractionRevisionEvent | null;
8
+ connectionState: StreamConnectionState | "idle" | "error";
9
+ /** Catalog responses carry the workspace revision; live-state lists do not. */
10
+ knownRevision?: number | undefined;
11
+ refresh: () => Promise<void>;
12
+ fallbackPollIntervalMs?: number | undefined;
13
+ };
14
+ /**
15
+ * Refetch authoritative lists on the shared latest-revision stream. Poll only
16
+ * while that stream is unavailable, preserving standalone-hook degradation
17
+ * without multiplying healthy-provider traffic.
18
+ */
19
+ export declare function useInteractionInvalidation(options: InteractionInvalidationOptions): void;
@@ -0,0 +1,25 @@
1
+ import type { CreateNetworkRouteRequest, NetworkRoute, NetworkRouteMutationResponse, UpdateNetworkRouteRequest } from "@opengeni/sdk/interaction";
2
+ import type { EmbeddedBrowserInteractionClientLike } from "../client.js";
3
+ import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
4
+ export type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {
5
+ enabled?: boolean | undefined;
6
+ includeArchived?: boolean | undefined;
7
+ };
8
+ export type UseNetworkRoutesResult = {
9
+ revision: number;
10
+ routes: NetworkRoute[];
11
+ loading: boolean;
12
+ refreshing: boolean;
13
+ mutating: boolean;
14
+ error: Error | null;
15
+ refresh: () => Promise<void>;
16
+ create: (request: Omit<CreateNetworkRouteRequest, "operationId"> & {
17
+ operationId?: string;
18
+ }) => Promise<NetworkRouteMutationResponse>;
19
+ update: (networkRouteId: string, request: Omit<UpdateNetworkRouteRequest, "operationId"> & {
20
+ operationId?: string;
21
+ }) => Promise<NetworkRouteMutationResponse>;
22
+ };
23
+ /** Workspace network-route registry. Route mutations never expose brokered credentials. */
24
+ export declare function useNetworkRoutes(options?: UseNetworkRoutesOptions): UseNetworkRoutesResult;
25
+ export type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;
@@ -0,0 +1,25 @@
1
+ import type { CreateSiteAuthConnectionRequest, SiteAuthConnection, SiteAuthConnectionMutationResponse, UpdateSiteAuthConnectionRequest } from "@opengeni/sdk/interaction";
2
+ import type { EmbeddedBrowserInteractionClientLike } from "../client.js";
3
+ import { type EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
4
+ export type UseSiteAuthConnectionsOptions = EmbeddedBrowserInteractionClientOverride & {
5
+ enabled?: boolean | undefined;
6
+ includeArchived?: boolean | undefined;
7
+ };
8
+ export type UseSiteAuthConnectionsResult = {
9
+ revision: number;
10
+ connections: SiteAuthConnection[];
11
+ loading: boolean;
12
+ refreshing: boolean;
13
+ mutating: boolean;
14
+ error: Error | null;
15
+ refresh: () => Promise<void>;
16
+ create: (request: Omit<CreateSiteAuthConnectionRequest, "operationId"> & {
17
+ operationId?: string;
18
+ }) => Promise<SiteAuthConnectionMutationResponse>;
19
+ update: (connectionId: string, request: Omit<UpdateSiteAuthConnectionRequest, "operationId"> & {
20
+ operationId?: string;
21
+ }) => Promise<SiteAuthConnectionMutationResponse>;
22
+ };
23
+ /** Secret-free workspace login recipes and their verified health. */
24
+ export declare function useSiteAuthConnections(options?: UseSiteAuthConnectionsOptions): UseSiteAuthConnectionsResult;
25
+ export type SiteAuthConnectionsClient = EmbeddedBrowserInteractionClientLike;
@@ -0,0 +1,26 @@
1
+ import type { SuperGrokAccount, SuperGrokAccountsResponse } from "@opengeni/sdk";
2
+ import { type ClientOverride } from "../provider.js";
3
+ export type SuperGrokAccountsClientLike = {
4
+ listSuperGrokAccounts: (workspaceId: string) => Promise<SuperGrokAccountsResponse>;
5
+ activateSuperGrokAccount?: (workspaceId: string, accountId: string) => Promise<{
6
+ activated: boolean;
7
+ accountId: string;
8
+ }>;
9
+ };
10
+ export type UseSuperGrokAccountsOptions = ClientOverride & {
11
+ enabled?: boolean | undefined;
12
+ pollIntervalMs?: number | undefined;
13
+ supergrokClient?: SuperGrokAccountsClientLike | undefined;
14
+ };
15
+ export type UseSuperGrokAccountsResult = {
16
+ accounts: SuperGrokAccount[];
17
+ activeAccountId: string | null;
18
+ settings: SuperGrokAccountsResponse["settings"];
19
+ loading: boolean;
20
+ refresh: () => Promise<void>;
21
+ activate: (accountId: string) => Promise<boolean>;
22
+ activating: boolean;
23
+ mutationError: Error | null;
24
+ };
25
+ /** Workspace-visible xAI accounts. Workspace scope is the connection default. */
26
+ export declare function useSuperGrokAccounts(options?: UseSuperGrokAccountsOptions): UseSuperGrokAccountsResult;
@@ -11,6 +11,9 @@ export type UseTerminalStreamOptions = {
11
11
  onOutput?: ((data: string) => void) | undefined;
12
12
  /** Called when ttyd sends a SET_WINDOW_TITLE frame. */
13
13
  onTitle?: ((title: string) => void) | undefined;
14
+ /** Requests a fresh negotiated terminal grant after an unexpected transport
15
+ * failure. Intentional disconnects and effect cleanup never call it. */
16
+ onReconnectNeeded?: (() => void) | undefined;
14
17
  /** Initial PTY size to seed the ttyd auth frame + first resize. */
15
18
  initialCols?: number | undefined;
16
19
  initialRows?: number | undefined;
package/dist/index.d.ts CHANGED
@@ -44,6 +44,8 @@ export { useSessionLineage, isLineageRefreshEvent } from "./hooks/use-session-li
44
44
  export type { UseSessionLineageOptions, UseSessionLineageResult, } from "./hooks/use-session-lineage.js";
45
45
  export { useVariableSets, useEnvironments } from "./hooks/use-environments.js";
46
46
  export type { UseVariableSetsOptions, UseVariableSetsResult, UseEnvironmentsOptions, UseEnvironmentsResult, } from "./hooks/use-environments.js";
47
+ export { useChannels } from "./hooks/use-channels.js";
48
+ export type { UseChannelsOptions, UseChannelsResult } from "./hooks/use-channels.js";
47
49
  export { useRigs, useRig, useRigVersions, useRigChanges } from "./hooks/use-rigs.js";
48
50
  export type { UseRigsOptions, UseRigsResult, UseRigOptions, UseRigResult, UseRigVersionsOptions, UseRigVersionsResult, UseRigChangesOptions, UseRigChangesResult, } from "./hooks/use-rigs.js";
49
51
  export { usePacks } from "./hooks/use-packs.js";
@@ -152,6 +154,8 @@ export type { SandboxWorkspaceSurface, SandboxWorkspaceProps, UseSandboxWorkspac
152
154
  export * from "./machines.js";
153
155
  export { useCodexAccounts, isCodexAccountEvent } from "./hooks/use-codex-accounts.js";
154
156
  export type { CodexAccountsClientLike, UseCodexAccountsOptions, UseCodexAccountsResult, } from "./hooks/use-codex-accounts.js";
157
+ export { useSuperGrokAccounts } from "./hooks/use-supergrok-accounts.js";
158
+ export type { SuperGrokAccountsClientLike, UseSuperGrokAccountsOptions, UseSuperGrokAccountsResult, } from "./hooks/use-supergrok-accounts.js";
155
159
  export { gitFileDiffToPatch } from "./lib/git-patch.js";
156
160
  export { xtermThemeFromTokens } from "./lib/xterm-theme.js";
157
161
  export { cn } from "./lib/cn.js";