@opengeni/react 7.4.0 → 7.5.0-canary.36919050519001

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 (210) hide show
  1. package/README.md +124 -27
  2. package/dist/artifacts-document.js +3 -2
  3. package/dist/artifacts-presentation.js +3 -2
  4. package/dist/artifacts-spreadsheet.js +2 -2
  5. package/dist/artifacts.d.ts +1 -0
  6. package/dist/artifacts.js +516 -1413
  7. package/dist/artifacts.js.map +1 -1
  8. package/dist/{browser-viewer-2E6R2Y4W.js → browser-viewer-Z7S7QEJL.js} +6 -5
  9. package/dist/chat-interactive-block-UGBTNB3L.js +11 -0
  10. package/dist/{chunk-Y3QTZN2F.js → chunk-2VFNCX4E.js} +6 -6
  11. package/dist/{chunk-UDD6DLLT.js → chunk-3IJJEYW4.js} +15 -3
  12. package/dist/chunk-3IJJEYW4.js.map +1 -0
  13. package/dist/chunk-4RVYOY4O.js +379 -0
  14. package/dist/chunk-4RVYOY4O.js.map +1 -0
  15. package/dist/chunk-5CVXZA3Y.js +292 -0
  16. package/dist/chunk-5CVXZA3Y.js.map +1 -0
  17. package/dist/{chunk-5YK2ZDIG.js → chunk-5J4FOW6Q.js} +2 -10
  18. package/dist/chunk-5J4FOW6Q.js.map +1 -0
  19. package/dist/{chunk-KVERXCFY.js → chunk-5KYZIQFY.js} +40 -3
  20. package/dist/chunk-5KYZIQFY.js.map +1 -0
  21. package/dist/{chunk-KNDIXZN6.js → chunk-7UAMYXJY.js} +25 -18
  22. package/dist/{chunk-KNDIXZN6.js.map → chunk-7UAMYXJY.js.map} +1 -1
  23. package/dist/{chunk-SEEVCT36.js → chunk-A4UJB2MM.js} +2 -2
  24. package/dist/{chunk-X4HIN6TV.js → chunk-AFLPWUQ7.js} +71 -162
  25. package/dist/chunk-AFLPWUQ7.js.map +1 -0
  26. package/dist/chunk-B3V6TG77.js +41 -0
  27. package/dist/chunk-B3V6TG77.js.map +1 -0
  28. package/dist/{chunk-XEJEOAOV.js → chunk-B7WMS3CS.js} +51 -40
  29. package/dist/chunk-B7WMS3CS.js.map +1 -0
  30. package/dist/{chunk-S5JQ4R22.js → chunk-BDKR6BAR.js} +54 -24
  31. package/dist/chunk-BDKR6BAR.js.map +1 -0
  32. package/dist/{chunk-4MDLEHXL.js → chunk-DYWBUX5Q.js} +24 -12
  33. package/dist/chunk-DYWBUX5Q.js.map +1 -0
  34. package/dist/{chunk-YZ3YYMOM.js → chunk-E3G7SAYZ.js} +252 -624
  35. package/dist/chunk-E3G7SAYZ.js.map +1 -0
  36. package/dist/chunk-JT4JW7BC.js +54 -0
  37. package/dist/chunk-JT4JW7BC.js.map +1 -0
  38. package/dist/{chunk-5AZSK6MV.js → chunk-LWNLETQT.js} +5 -5
  39. package/dist/{chunk-USXVQACU.js → chunk-M7LBYP63.js} +5 -4
  40. package/dist/{chunk-USXVQACU.js.map → chunk-M7LBYP63.js.map} +1 -1
  41. package/dist/{chunk-L4OSXQ6H.js → chunk-NBOHNRLJ.js} +1289 -1060
  42. package/dist/chunk-NBOHNRLJ.js.map +1 -0
  43. package/dist/chunk-RHREZ7BO.js +11 -0
  44. package/dist/chunk-RHREZ7BO.js.map +1 -0
  45. package/dist/chunk-SCOTPE2I.js +589 -0
  46. package/dist/chunk-SCOTPE2I.js.map +1 -0
  47. package/dist/chunk-WEHMPOXK.js +39 -0
  48. package/dist/chunk-WEHMPOXK.js.map +1 -0
  49. package/dist/chunk-WRHIZYZF.js +988 -0
  50. package/dist/chunk-WRHIZYZF.js.map +1 -0
  51. package/dist/{chunk-3E2AITTZ.js → chunk-WUISZ3WU.js} +32 -28
  52. package/dist/{chunk-3E2AITTZ.js.map → chunk-WUISZ3WU.js.map} +1 -1
  53. package/dist/chunk-XCHWDJ22.js +107 -0
  54. package/dist/chunk-XCHWDJ22.js.map +1 -0
  55. package/dist/{chunk-DUEBTL3N.js → chunk-Y2PRMYLC.js} +4 -3
  56. package/dist/{chunk-DUEBTL3N.js.map → chunk-Y2PRMYLC.js.map} +1 -1
  57. package/dist/chunk-YBXQDQFX.js +1772 -0
  58. package/dist/chunk-YBXQDQFX.js.map +1 -0
  59. package/dist/chunk-YV4L3ILF.js +9 -0
  60. package/dist/chunk-YV4L3ILF.js.map +1 -0
  61. package/dist/{chunk-V2ABIVYJ.js → chunk-ZXSEDZP7.js} +70 -6
  62. package/dist/chunk-ZXSEDZP7.js.map +1 -0
  63. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  64. package/dist/components/artifacts/artifact-sandbox.d.ts +27 -0
  65. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  66. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  67. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  68. package/dist/components/artifacts/editable-artifact-view.d.ts +46 -0
  69. package/dist/components/artifacts/index.d.ts +7 -0
  70. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  71. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  72. package/dist/components/artifacts/site-view.d.ts +23 -0
  73. package/dist/components/browser-select-control.d.ts +3 -1
  74. package/dist/components/code-editor.d.ts +1 -4
  75. package/dist/components/desktop-viewer.d.ts +1 -1
  76. package/dist/components/message-timeline.d.ts +20 -3
  77. package/dist/components/open-geni-links.d.ts +16 -0
  78. package/dist/components/session-conversation.d.ts +20 -1
  79. package/dist/components/timeline-pill-geometry.d.ts +8 -0
  80. package/dist/components/timeline-pill-placement.d.ts +24 -0
  81. package/dist/components/usage-limit-notice.d.ts +49 -0
  82. package/dist/components/usage-member-list.d.ts +91 -0
  83. package/dist/components/usage-meter.d.ts +73 -0
  84. package/dist/composer.js +5 -5
  85. package/dist/{computer-viewer-WMJE6OA3.js → computer-viewer-KJWLH3GI.js} +7 -5
  86. package/dist/connect.js +7 -6
  87. package/dist/connect.js.map +1 -1
  88. package/dist/conversation-timeline.d.ts +1 -1
  89. package/dist/desktop.d.ts +7 -0
  90. package/dist/desktop.js +26 -0
  91. package/dist/desktop.js.map +1 -0
  92. package/dist/editor.d.ts +7 -0
  93. package/dist/editor.js +21 -0
  94. package/dist/editor.js.map +1 -0
  95. package/dist/hooks/latest-question.d.ts +1 -1
  96. package/dist/hooks/use-composer.d.ts +4 -0
  97. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  98. package/dist/hooks/use-usage.d.ts +40 -0
  99. package/dist/index.d.ts +7 -2
  100. package/dist/index.js +460 -1386
  101. package/dist/index.js.map +1 -1
  102. package/dist/interaction.js +8 -6
  103. package/dist/interaction.js.map +1 -1
  104. package/dist/{latest-question-QB4EUCW5.js → latest-question-IS445HOW.js} +3 -3
  105. package/dist/lib/format.d.ts +6 -1
  106. package/dist/lib/workbench-peers.d.ts +36 -0
  107. package/dist/machines.js +2 -2
  108. package/dist/{markdown-table-layout-PFUEZ2U4.js → markdown-table-layout-QXSLK4BY.js} +37 -5
  109. package/dist/markdown-table-layout-QXSLK4BY.js.map +1 -0
  110. package/dist/{queue-surface-implementation-IM2HD3SK.js → queue-surface-implementation-2CAQAIHM.js} +2 -2
  111. package/dist/realtime.js +3 -3
  112. package/dist/{sandbox-files-PXPIZAFG.js → sandbox-files-AEJTWGT4.js} +8 -5
  113. package/dist/sandbox-files-AEJTWGT4.js.map +1 -0
  114. package/dist/session-ui.d.ts +9 -2
  115. package/dist/session-ui.js +39 -20
  116. package/dist/session-ui.js.map +1 -1
  117. package/dist/session.js +4 -4
  118. package/dist/sites.js +4 -289
  119. package/dist/sites.js.map +1 -1
  120. package/dist/terminal.d.ts +8 -0
  121. package/dist/terminal.js +31 -0
  122. package/dist/terminal.js.map +1 -0
  123. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  124. package/dist/timeline/genie-loading.d.ts +3 -1
  125. package/dist/timeline/types.d.ts +8 -1
  126. package/dist/{timeline-annotation-selection-ODLVF4OI.js → timeline-annotation-selection-DMLMM2TX.js} +6 -1
  127. package/dist/timeline-annotation-selection-DMLMM2TX.js.map +1 -0
  128. package/dist/timeline-pill-geometry-Z23V243M.js +110 -0
  129. package/dist/timeline-pill-geometry-Z23V243M.js.map +1 -0
  130. package/dist/usage/allowance-copy.d.ts +25 -0
  131. package/dist/usage/summary.d.ts +35 -0
  132. package/dist/usage.d.ts +13 -0
  133. package/dist/usage.js +1073 -0
  134. package/dist/usage.js.map +1 -0
  135. package/package.json +19 -3
  136. package/src/artifacts.ts +37 -0
  137. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  138. package/src/components/artifacts/artifact-sandbox.tsx +185 -0
  139. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  140. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  141. package/src/components/artifacts/editable-artifact-ui.tsx +3 -1
  142. package/src/components/artifacts/editable-artifact-view.tsx +187 -0
  143. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  144. package/src/components/artifacts/editable-document.tsx +34 -36
  145. package/src/components/artifacts/editable-presentation.tsx +21 -16
  146. package/src/components/artifacts/index.ts +41 -0
  147. package/src/components/artifacts/latest-task-runner.ts +49 -0
  148. package/src/components/artifacts/session-artifact-viewer.tsx +376 -0
  149. package/src/components/artifacts/site-view.tsx +116 -0
  150. package/src/components/browser-select-control.tsx +4 -1
  151. package/src/components/browser-viewer.tsx +81 -22
  152. package/src/components/code-editor.tsx +13 -16
  153. package/src/components/computer-viewer.tsx +51 -23
  154. package/src/components/desktop-viewer.tsx +1 -1
  155. package/src/components/markdown-table-layout.ts +49 -5
  156. package/src/components/markdown.tsx +5 -2
  157. package/src/components/message-timeline.tsx +557 -516
  158. package/src/components/open-geni-links.tsx +24 -0
  159. package/src/components/sandbox-terminal.tsx +48 -11
  160. package/src/components/session-chrome.tsx +22 -3
  161. package/src/components/session-conversation.tsx +195 -102
  162. package/src/components/timeline-annotation-selection.tsx +7 -0
  163. package/src/components/timeline-pill-geometry.ts +169 -0
  164. package/src/components/timeline-pill-placement.ts +99 -0
  165. package/src/components/usage-limit-notice.tsx +179 -0
  166. package/src/components/usage-member-list.tsx +792 -0
  167. package/src/components/usage-meter.tsx +382 -0
  168. package/src/conversation-timeline.ts +10 -2
  169. package/src/desktop.ts +24 -0
  170. package/src/editor.ts +13 -0
  171. package/src/hooks/use-available-models.ts +1 -1
  172. package/src/hooks/use-composer.ts +57 -2
  173. package/src/hooks/use-desktop-stream.ts +19 -28
  174. package/src/hooks/use-usage.ts +100 -0
  175. package/src/index.ts +22 -0
  176. package/src/lib/format.ts +32 -6
  177. package/src/lib/workbench-peers.ts +62 -0
  178. package/src/session-ui.ts +22 -0
  179. package/src/terminal.ts +26 -0
  180. package/src/timeline/activity-rail.tsx +5 -3
  181. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  182. package/src/timeline/genie-loading.tsx +16 -6
  183. package/src/timeline/projection.ts +78 -4
  184. package/src/timeline/types.ts +8 -0
  185. package/src/usage/allowance-copy.ts +64 -0
  186. package/src/usage/summary.ts +93 -0
  187. package/src/usage.ts +50 -0
  188. package/styles/compiled.css +325 -0
  189. package/dist/chunk-4MDLEHXL.js.map +0 -1
  190. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  191. package/dist/chunk-KVERXCFY.js.map +0 -1
  192. package/dist/chunk-L4OSXQ6H.js.map +0 -1
  193. package/dist/chunk-S5JQ4R22.js.map +0 -1
  194. package/dist/chunk-UDD6DLLT.js.map +0 -1
  195. package/dist/chunk-UGMKPUEM.js +0 -299
  196. package/dist/chunk-UGMKPUEM.js.map +0 -1
  197. package/dist/chunk-V2ABIVYJ.js.map +0 -1
  198. package/dist/chunk-X4HIN6TV.js.map +0 -1
  199. package/dist/chunk-XEJEOAOV.js.map +0 -1
  200. package/dist/chunk-YZ3YYMOM.js.map +0 -1
  201. package/dist/markdown-table-layout-PFUEZ2U4.js.map +0 -1
  202. package/dist/timeline-annotation-selection-ODLVF4OI.js.map +0 -1
  203. /package/dist/{browser-viewer-2E6R2Y4W.js.map → browser-viewer-Z7S7QEJL.js.map} +0 -0
  204. /package/dist/{computer-viewer-WMJE6OA3.js.map → chat-interactive-block-UGBTNB3L.js.map} +0 -0
  205. /package/dist/{chunk-Y3QTZN2F.js.map → chunk-2VFNCX4E.js.map} +0 -0
  206. /package/dist/{chunk-SEEVCT36.js.map → chunk-A4UJB2MM.js.map} +0 -0
  207. /package/dist/{chunk-5AZSK6MV.js.map → chunk-LWNLETQT.js.map} +0 -0
  208. /package/dist/{sandbox-files-PXPIZAFG.js.map → computer-viewer-KJWLH3GI.js.map} +0 -0
  209. /package/dist/{latest-question-QB4EUCW5.js.map → latest-question-IS445HOW.js.map} +0 -0
  210. /package/dist/{queue-surface-implementation-IM2HD3SK.js.map → queue-surface-implementation-2CAQAIHM.js.map} +0 -0
@@ -7,19 +7,22 @@ import {
7
7
  useBrowserSession,
8
8
  useBrowserSessions,
9
9
  useSiteAuthConnections
10
- } from "./chunk-S5JQ4R22.js";
10
+ } from "./chunk-BDKR6BAR.js";
11
11
  import {
12
12
  ComputerViewer,
13
13
  useComputerFrameStream,
14
14
  useComputerSession,
15
15
  useComputerSessions
16
- } from "./chunk-XEJEOAOV.js";
16
+ } from "./chunk-B7WMS3CS.js";
17
17
  import {
18
18
  useInteractionInterventions,
19
19
  useInteractionInvalidation
20
20
  } from "./chunk-YSMMDOOE.js";
21
- import "./chunk-4MDLEHXL.js";
22
- import "./chunk-5YK2ZDIG.js";
21
+ import "./chunk-JVYQRRC4.js";
22
+ import "./chunk-DYWBUX5Q.js";
23
+ import "./chunk-RHREZ7BO.js";
24
+ import "./chunk-3IJJEYW4.js";
25
+ import "./chunk-5J4FOW6Q.js";
23
26
  import "./chunk-KZ73RL76.js";
24
27
  import {
25
28
  useEmbeddedBrowserInteraction,
@@ -27,9 +30,8 @@ import {
27
30
  useEmbeddedInteraction,
28
31
  useEmbeddedInterventions
29
32
  } from "./chunk-NEXLLTP4.js";
30
- import "./chunk-UDD6DLLT.js";
33
+ import "./chunk-JT4JW7BC.js";
31
34
  import "./chunk-22KP6LR5.js";
32
- import "./chunk-JVYQRRC4.js";
33
35
 
34
36
  // src/hooks/use-network-routes.ts
35
37
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/use-network-routes.ts","../src/hooks/use-auth-runs.ts"],"sourcesContent":["import type {\n CreateNetworkRouteRequest,\n NetworkRoute,\n NetworkRouteMutationResponse,\n UpdateNetworkRouteRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseNetworkRoutesResult = {\n revision: number;\n routes: NetworkRoute[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n update: (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n};\n\n/** Workspace network-route registry. Route mutations never expose brokered credentials. */\nexport function useNetworkRoutes(options: UseNetworkRoutesOptions = {}): UseNetworkRoutesResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listNetworkRoutes(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n routes: sortRoutes(response.routes),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n const refresh = useCallback(async () => await load(false), [load]);\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (route: NetworkRoute) => {\n setState((current) => {\n if (current.key !== key) return current;\n const routes = current.routes.filter((candidate) => candidate.id !== route.id);\n if (includeArchived || route.status !== \"archived\") routes.push(route);\n return { ...current, routes: sortRoutes(routes), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.createNetworkRoute(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateNetworkRoute(workspaceId, networkRouteId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n routes: visible.routes,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n routes: [] as NetworkRoute[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRoutes(routes: readonly NetworkRoute[]): NetworkRoute[] {\n return [...routes].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n AuthRun,\n AuthRunMutationResponse,\n ProtectedAuthFillRequest,\n ProtectedAuthFillResponse,\n ReportAuthRunRequest,\n StartAuthRunRequest,\n VerifyAuthRunRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n browserSessionId?: string | null | undefined;\n siteAuthConnectionId?: string | null | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type UseAuthRunsResult = {\n runs: AuthRun[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n start: (\n browserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n report: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n protectedFill: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<ProtectedAuthFillResponse>;\n verify: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n};\n\n/** Live authentication state machines tied to exact browser document generations. */\nexport function useAuthRuns(options: UseAuthRunsOptions = {}): UseAuthRunsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const browserSessionId = options.browserSessionId ?? null;\n const siteAuthConnectionId = options.siteAuthConnectionId ?? null;\n const includeSettled = options.includeSettled ?? false;\n const key = `${workspaceId}:${browserSessionId ?? \"*\"}:${siteAuthConnectionId ?? \"*\"}:${includeSettled}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listAuthRuns(workspaceId, {\n ...(browserSessionId ? { browserSessionId } : {}),\n ...(siteAuthConnectionId ? { siteAuthConnectionId } : {}),\n includeSettled,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n runs: sortRuns(response.runs),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (run: AuthRun) => {\n setState((current) => {\n if (current.key !== key) return current;\n const runs = current.runs.filter((candidate) => candidate.id !== run.id);\n const matches =\n (!browserSessionId || run.browserSessionId === browserSessionId) &&\n (!siteAuthConnectionId || run.siteAuthConnectionId === siteAuthConnectionId);\n if (matches && (includeSettled || !isSettled(run))) runs.push(run);\n return { ...current, runs: sortRuns(runs), error: null };\n });\n },\n [browserSessionId, includeSettled, key, siteAuthConnectionId],\n );\n\n const start = useCallback(\n async (\n scopeBrowserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const report = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.reportBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const protectedFill = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ): Promise<ProtectedAuthFillResponse> =>\n await mutate(async () => {\n const response = await client.protectedBrowserAuthFill(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const verify = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.verifyBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n runs: visible.runs,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n start,\n report,\n protectedFill,\n verify,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n runs: [] as AuthRun[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRuns(runs: readonly AuthRun[]): AuthRun[] {\n return [...runs].sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));\n}\n\nfunction isSettled(run: AuthRun): boolean {\n return run.state === \"verified\" || run.state === \"failed\" || run.state === \"cancelled\";\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type AuthRunsClient = EmbeddedBrowserInteractionClientLike;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect"]}
1
+ {"version":3,"sources":["../src/hooks/use-network-routes.ts","../src/hooks/use-auth-runs.ts"],"sourcesContent":["import type {\n CreateNetworkRouteRequest,\n NetworkRoute,\n NetworkRouteMutationResponse,\n UpdateNetworkRouteRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseNetworkRoutesResult = {\n revision: number;\n routes: NetworkRoute[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n update: (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n};\n\n/** Workspace network-route registry. Route mutations never expose brokered credentials. */\nexport function useNetworkRoutes(options: UseNetworkRoutesOptions = {}): UseNetworkRoutesResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listNetworkRoutes(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n routes: sortRoutes(response.routes),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n const refresh = useCallback(async () => await load(false), [load]);\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (route: NetworkRoute) => {\n setState((current) => {\n if (current.key !== key) return current;\n const routes = current.routes.filter((candidate) => candidate.id !== route.id);\n if (includeArchived || route.status !== \"archived\") routes.push(route);\n return { ...current, routes: sortRoutes(routes), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.createNetworkRoute(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateNetworkRoute(workspaceId, networkRouteId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n routes: visible.routes,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n routes: [] as NetworkRoute[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRoutes(routes: readonly NetworkRoute[]): NetworkRoute[] {\n return [...routes].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n AuthRun,\n AuthRunMutationResponse,\n ProtectedAuthFillRequest,\n ProtectedAuthFillResponse,\n ReportAuthRunRequest,\n StartAuthRunRequest,\n VerifyAuthRunRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n browserSessionId?: string | null | undefined;\n siteAuthConnectionId?: string | null | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type UseAuthRunsResult = {\n runs: AuthRun[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n start: (\n browserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n report: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n protectedFill: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<ProtectedAuthFillResponse>;\n verify: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n};\n\n/** Live authentication state machines tied to exact browser document generations. */\nexport function useAuthRuns(options: UseAuthRunsOptions = {}): UseAuthRunsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const browserSessionId = options.browserSessionId ?? null;\n const siteAuthConnectionId = options.siteAuthConnectionId ?? null;\n const includeSettled = options.includeSettled ?? false;\n const key = `${workspaceId}:${browserSessionId ?? \"*\"}:${siteAuthConnectionId ?? \"*\"}:${includeSettled}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listAuthRuns(workspaceId, {\n ...(browserSessionId ? { browserSessionId } : {}),\n ...(siteAuthConnectionId ? { siteAuthConnectionId } : {}),\n includeSettled,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n runs: sortRuns(response.runs),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (run: AuthRun) => {\n setState((current) => {\n if (current.key !== key) return current;\n const runs = current.runs.filter((candidate) => candidate.id !== run.id);\n const matches =\n (!browserSessionId || run.browserSessionId === browserSessionId) &&\n (!siteAuthConnectionId || run.siteAuthConnectionId === siteAuthConnectionId);\n if (matches && (includeSettled || !isSettled(run))) runs.push(run);\n return { ...current, runs: sortRuns(runs), error: null };\n });\n },\n [browserSessionId, includeSettled, key, siteAuthConnectionId],\n );\n\n const start = useCallback(\n async (\n scopeBrowserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const report = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.reportBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const protectedFill = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ): Promise<ProtectedAuthFillResponse> =>\n await mutate(async () => {\n const response = await client.protectedBrowserAuthFill(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const verify = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.verifyBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n runs: visible.runs,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n start,\n report,\n protectedFill,\n verify,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n runs: [] as AuthRun[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRuns(runs: readonly AuthRun[]): AuthRun[] {\n return [...runs].sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));\n}\n\nfunction isSettled(run: AuthRun): boolean {\n return run.state === \"verified\" || run.state === \"failed\" || run.state === \"cancelled\";\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type AuthRunsClient = EmbeddedBrowserInteractionClientLike;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AA+BlD,SAAS,iBAAiB,UAAmC,CAAC,GAA2B;AAC9F,QAAM,EAAE,QAAQ,aAAa,2BAA2B,oCAAoC,IAC1F,8BAA8B,OAAO;AACvC,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,kBAAkB,QAAQ,mBAAmB;AACnD,QAAM,MAAM,GAAG,WAAW,IAAI,kBAAkB,QAAQ,QAAQ;AAChE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,MAAM,WAAW,KAAK,OAAO,CAAC;AACjE,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,CAAC;AACpD,QAAM,aAAa,OAA2D;AAAA,IAC5E,IAAI;AAAA,IACJ,YAAY;AAAA,EACd,CAAC;AACD,QAAM,aAAa,OAAO,IAAI;AAC9B,QAAM,UAAU,MAAM,QAAQ,MAAM,QAAQ,WAAW,KAAK,OAAO;AAEnE,QAAM,aAAa,YAAY,MAAM;AACnC,eAAW,QAAQ,YAAY,MAAM;AACrC,eAAW,UAAU,EAAE,IAAI,WAAW,QAAQ,KAAK,GAAG,YAAY,KAAK;AAAA,EACzE,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO;AAAA,IACX,OAAO,eAAuC;AAC5C,UAAI,CAAC,QAAS;AACd,YAAM,KAAK,WAAW,QAAQ,KAAK;AACnC,iBAAW,QAAQ,YAAY,MAAM;AACrC,YAAM,aAAa,IAAI,gBAAgB;AACvC,iBAAW,UAAU,EAAE,IAAI,WAAW;AACtC,eAAS,CAAC,aAAa;AAAA,QACrB,GAAI,QAAQ,QAAQ,MAAM,UAAU,WAAW,KAAK,IAAI;AAAA,QACxD,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,QACb,OAAO,cAAc,QAAQ,QAAQ,MAAM,OAAO,QAAQ;AAAA,MAC5D,EAAE;AACF,UAAI;AACF,cAAM,WAAW,MAAM,OAAO,kBAAkB,aAAa;AAAA,UAC3D;AAAA,UACA,QAAQ,WAAW;AAAA,QACrB,CAAC;AACD,YAAI,CAAC,WAAW,WAAW,WAAW,QAAQ,OAAO,GAAI;AACzD,iBAAS;AAAA,UACP;AAAA,UACA,UAAU,SAAS;AAAA,UACnB,QAAQ,WAAW,SAAS,MAAM;AAAA,UAClC,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,QACT,CAAC;AAAA,MACH,SAAS,OAAO;AACd,YAAI,WAAW,OAAO,WAAW,CAAC,WAAW,WAAW,WAAW,QAAQ,OAAO;AAChF;AACF,iBAAS,CAAC,aAAa;AAAA,UACrB,GAAI,QAAQ,QAAQ,MAAM,UAAU,WAAW,KAAK,IAAI;AAAA,UACxD,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO,QAAQ,KAAK;AAAA,QACtB,EAAE;AAAA,MACJ,UAAE;AACA,YAAI,WAAW,QAAQ,OAAO,GAAI,YAAW,UAAU,EAAE,IAAI,YAAY,KAAK;AAAA,MAChF;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,SAAS,iBAAiB,KAAK,WAAW;AAAA,EACrD;AAEA,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,QAAI,CAAC,SAAS;AACZ,iBAAW;AACX,eAAS,WAAW,KAAK,KAAK,CAAC;AAC/B;AAAA,IACF;AACA,SAAK,KAAK,IAAI;AACd,WAAO,MAAM;AACX,iBAAW,UAAU;AACrB,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,KAAK,IAAI,CAAC;AAEnC,QAAM,UAAU,YAAY,YAAY,MAAM,KAAK,KAAK,GAAG,CAAC,IAAI,CAAC;AACjE,6BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,eAAe,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,SAAS,YAAY,OAAU,cAA4C;AAC/E,qBAAiB,CAAC,UAAU,QAAQ,CAAC;AACrC,QAAI;AACF,aAAO,MAAM,UAAU;AAAA,IACzB,UAAE;AACA,UAAI,WAAW,QAAS,kBAAiB,CAAC,UAAU,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC;AAAA,IAC5E;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ;AAAA,IACZ,CAAC,UAAwB;AACvB,eAAS,CAAC,YAAY;AACpB,YAAI,QAAQ,QAAQ,IAAK,QAAO;AAChC,cAAM,SAAS,QAAQ,OAAO,OAAO,CAAC,cAAc,UAAU,OAAO,MAAM,EAAE;AAC7E,YAAI,mBAAmB,MAAM,WAAW,WAAY,QAAO,KAAK,KAAK;AACrE,eAAO,EAAE,GAAG,SAAS,QAAQ,WAAW,MAAM,GAAG,OAAO,KAAK;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,IACA,CAAC,iBAAiB,GAAG;AAAA,EACvB;AAEA,QAAM,SAAS;AAAA,IACb,OACE,YAEA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM,OAAO,mBAAmB,aAAa;AAAA,QAC5D,GAAG;AAAA,QACH,aAAa,QAAQ,eAAe,OAAO,WAAW;AAAA,MACxD,CAAC;AACD,YAAM,SAAS,KAAK;AACpB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC,QAAQ,OAAO,QAAQ,WAAW;AAAA,EACrC;AAEA,QAAM,SAAS;AAAA,IACb,OACE,gBACA,YAEA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM,OAAO,mBAAmB,aAAa,gBAAgB;AAAA,QAC5E,GAAG;AAAA,QACH,aAAa,QAAQ,eAAe,OAAO,WAAW;AAAA,MACxD,CAAC;AACD,YAAM,SAAS,KAAK;AACpB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC,QAAQ,OAAO,QAAQ,WAAW;AAAA,EACrC;AAEA,SAAO;AAAA,IACL,UAAU,QAAQ;AAAA,IAClB,QAAQ,QAAQ;AAAA,IAChB,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,IACpB,UAAU,gBAAgB;AAAA,IAC1B,OAAO,QAAQ;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,WAAW,KAAa,SAAkB;AACjD,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,QAAiD;AACnE,SAAO,CAAC,GAAG,MAAM,EAAE;AAAA,IACjB,CAAC,MAAM,UACL,OAAO,KAAK,WAAW,UAAU,IAAI,OAAO,MAAM,WAAW,UAAU,KACvE,KAAK,KAAK,cAAc,MAAM,IAAI;AAAA,EACtC;AACF;AAEA,SAAS,QAAQ,OAAuB;AACtC,SAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACjE;;;AC1MA,SAAS,eAAAA,cAAa,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AA4ClD,SAAS,YAAY,UAA8B,CAAC,GAAsB;AAC/E,QAAM,EAAE,QAAQ,aAAa,2BAA2B,oCAAoC,IAC1F,8BAA8B,OAAO;AACvC,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,mBAAmB,QAAQ,oBAAoB;AACrD,QAAM,uBAAuB,QAAQ,wBAAwB;AAC7D,QAAM,iBAAiB,QAAQ,kBAAkB;AACjD,QAAM,MAAM,GAAG,WAAW,IAAI,oBAAoB,GAAG,IAAI,wBAAwB,GAAG,IAAI,cAAc;AACtG,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAS,MAAMC,YAAW,KAAK,OAAO,CAAC;AACjE,QAAM,CAAC,eAAe,gBAAgB,IAAID,UAAS,CAAC;AACpD,QAAM,aAAaE,QAA2D;AAAA,IAC5E,IAAI;AAAA,IACJ,YAAY;AAAA,EACd,CAAC;AACD,QAAM,aAAaA,QAAO,IAAI;AAC9B,QAAM,UAAU,MAAM,QAAQ,MAAM,QAAQD,YAAW,KAAK,OAAO;AAEnE,QAAM,aAAaE,aAAY,MAAM;AACnC,eAAW,QAAQ,YAAY,MAAM;AACrC,eAAW,UAAU,EAAE,IAAI,WAAW,QAAQ,KAAK,GAAG,YAAY,KAAK;AAAA,EACzE,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA;AAAA,IACX,OAAO,eAAuC;AAC5C,UAAI,CAAC,QAAS;AACd,YAAM,KAAK,WAAW,QAAQ,KAAK;AACnC,iBAAW,QAAQ,YAAY,MAAM;AACrC,YAAM,aAAa,IAAI,gBAAgB;AACvC,iBAAW,UAAU,EAAE,IAAI,WAAW;AACtC,eAAS,CAAC,aAAa;AAAA,QACrB,GAAI,QAAQ,QAAQ,MAAM,UAAUF,YAAW,KAAK,IAAI;AAAA,QACxD,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,QACb,OAAO,cAAc,QAAQ,QAAQ,MAAM,OAAO,QAAQ;AAAA,MAC5D,EAAE;AACF,UAAI;AACF,cAAM,WAAW,MAAM,OAAO,aAAa,aAAa;AAAA,UACtD,GAAI,mBAAmB,EAAE,iBAAiB,IAAI,CAAC;AAAA,UAC/C,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;AAAA,UACvD;AAAA,UACA,QAAQ,WAAW;AAAA,QACrB,CAAC;AACD,YAAI,CAAC,WAAW,WAAW,WAAW,QAAQ,OAAO,GAAI;AACzD,iBAAS;AAAA,UACP;AAAA,UACA,MAAM,SAAS,SAAS,IAAI;AAAA,UAC5B,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,QACT,CAAC;AAAA,MACH,SAAS,OAAO;AACd,YAAI,WAAW,OAAO,WAAW,CAAC,WAAW,WAAW,WAAW,QAAQ,OAAO;AAChF;AACF,iBAAS,CAAC,aAAa;AAAA,UACrB,GAAI,QAAQ,QAAQ,MAAM,UAAUA,YAAW,KAAK,IAAI;AAAA,UACxD,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAOG,SAAQ,KAAK;AAAA,QACtB,EAAE;AAAA,MACJ,UAAE;AACA,YAAI,WAAW,QAAQ,OAAO,GAAI,YAAW,UAAU,EAAE,IAAI,YAAY,KAAK;AAAA,MAChF;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB,QAAQ,SAAS,gBAAgB,KAAK,sBAAsB,WAAW;AAAA,EAC5F;AAEA,QAAM,UAAUD,aAAY,YAAY,MAAM,KAAK,KAAK,GAAG,CAAC,IAAI,CAAC;AAEjE,EAAAE,WAAU,MAAM;AACd,eAAW,UAAU;AACrB,QAAI,CAAC,SAAS;AACZ,iBAAW;AACX,eAASJ,YAAW,KAAK,KAAK,CAAC;AAC/B;AAAA,IACF;AACA,SAAK,KAAK,IAAI;AACd,WAAO,MAAM;AACX,iBAAW,UAAU;AACrB,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,KAAK,IAAI,CAAC;AAEnC,6BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB;AAAA,EACF,CAAC;AAED,QAAM,SAASE,aAAY,OAAU,cAA4C;AAC/E,qBAAiB,CAAC,UAAU,QAAQ,CAAC;AACrC,QAAI;AACF,aAAO,MAAM,UAAU;AAAA,IACzB,UAAE;AACA,UAAI,WAAW,QAAS,kBAAiB,CAAC,UAAU,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC;AAAA,IAC5E;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQA;AAAA,IACZ,CAAC,QAAiB;AAChB,eAAS,CAAC,YAAY;AACpB,YAAI,QAAQ,QAAQ,IAAK,QAAO;AAChC,cAAM,OAAO,QAAQ,KAAK,OAAO,CAAC,cAAc,UAAU,OAAO,IAAI,EAAE;AACvE,cAAM,WACH,CAAC,oBAAoB,IAAI,qBAAqB,sBAC9C,CAAC,wBAAwB,IAAI,yBAAyB;AACzD,YAAI,YAAY,kBAAkB,CAAC,UAAU,GAAG,GAAI,MAAK,KAAK,GAAG;AACjE,eAAO,EAAE,GAAG,SAAS,MAAM,SAAS,IAAI,GAAG,OAAO,KAAK;AAAA,MACzD,CAAC;AAAA,IACH;AAAA,IACA,CAAC,kBAAkB,gBAAgB,KAAK,oBAAoB;AAAA,EAC9D;AAEA,QAAM,QAAQA;AAAA,IACZ,OACE,uBACA,YAEA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM,OAAO,oBAAoB,aAAa,uBAAuB;AAAA,QACpF,GAAG;AAAA,QACH,aAAa,QAAQ,eAAe,OAAO,WAAW;AAAA,MACxD,CAAC;AACD,YAAM,SAAS,GAAG;AAClB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC,QAAQ,OAAO,QAAQ,WAAW;AAAA,EACrC;AAEA,QAAM,SAASA;AAAA,IACb,OACE,uBACA,WACA,YAEA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,GAAG,SAAS,aAAa,QAAQ,eAAe,OAAO,WAAW,EAAE;AAAA,MACxE;AACA,YAAM,SAAS,GAAG;AAClB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC,QAAQ,OAAO,QAAQ,WAAW;AAAA,EACrC;AAEA,QAAM,gBAAgBA;AAAA,IACpB,OACE,uBACA,WACA,YAEA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,GAAG,SAAS,aAAa,QAAQ,eAAe,OAAO,WAAW,EAAE;AAAA,MACxE;AACA,YAAM,SAAS,GAAG;AAClB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC,QAAQ,OAAO,QAAQ,WAAW;AAAA,EACrC;AAEA,QAAM,SAASA;AAAA,IACb,OACE,uBACA,WACA,YAEA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,GAAG,SAAS,aAAa,QAAQ,eAAe,OAAO,WAAW,EAAE;AAAA,MACxE;AACA,YAAM,SAAS,GAAG;AAClB,aAAO;AAAA,IACT,CAAC;AAAA,IACH,CAAC,QAAQ,OAAO,QAAQ,WAAW;AAAA,EACrC;AAEA,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,IACpB,UAAU,gBAAgB;AAAA,IAC1B,OAAO,QAAQ;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAASF,YAAW,KAAa,SAAkB;AACjD,SAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC;AAAA,IACP;AAAA,IACA,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,MAAqC;AACrD,SAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,MAAM,MAAM,SAAS,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC;AACjG;AAEA,SAAS,UAAU,KAAuB;AACxC,SAAO,IAAI,UAAU,cAAc,IAAI,UAAU,YAAY,IAAI,UAAU;AAC7E;AAEA,SAASG,SAAQ,OAAuB;AACtC,SAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACjE;","names":["useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect"]}
@@ -2,9 +2,9 @@ import {
2
2
  isTimelineUserQuestion,
3
3
  isTurnExecutionEvidence,
4
4
  timelineQuestionPlacement
5
- } from "./chunk-V2ABIVYJ.js";
5
+ } from "./chunk-ZXSEDZP7.js";
6
6
  import "./chunk-ERGYJIBB.js";
7
- import "./chunk-UDD6DLLT.js";
7
+ import "./chunk-3IJJEYW4.js";
8
8
 
9
9
  // src/hooks/latest-question.ts
10
10
  import { SESSION_EVENT_TYPES } from "@opengeni/sdk";
@@ -114,4 +114,4 @@ export {
114
114
  TIMELINE_TURN_ANCHOR_EVENT_TYPES,
115
115
  resolveLatestQuestion
116
116
  };
117
- //# sourceMappingURL=latest-question-QB4EUCW5.js.map
117
+ //# sourceMappingURL=latest-question-IS445HOW.js.map
@@ -18,13 +18,18 @@ export declare function tryParseJson(text: string): unknown;
18
18
  * workspace no longer has.
19
19
  */
20
20
  export declare const CREDIT_EXHAUSTION_MESSAGE = "Out of Opengeni credits \u2014 this workspace's balance is empty. Add credits to continue; the conversation is preserved.";
21
+ /** A usage ceiling refused the send; the default allowance wording, plus what is safe. */
22
+ export declare const COMPOSER_MEMBER_ALLOWANCE_MESSAGE = "Usage limit reached. A workspace admin can raise this limit. Your draft is preserved.";
23
+ export declare const COMPOSER_WORKSPACE_ALLOWANCE_MESSAGE = "Workspace usage limit reached. An organization admin can raise the workspace budget. Your draft is preserved.";
21
24
  /**
22
25
  * Actionable composer copy for an edge rejection before a turn is accepted.
23
26
  * Unlike an in-flight credit exhaustion, this path has not consumed the
24
27
  * actor-private draft or any finalized attachment.
25
28
  */
26
- export declare const COMPOSER_PAYMENT_REQUIRED_MESSAGE = "This turn requires Opengeni managed credits, but the account balance is empty. Add credits or choose a connected Codex subscription model, then retry. Your draft and attachments are preserved.";
29
+ export declare const COMPOSER_PAYMENT_REQUIRED_MESSAGE = "Your organization doesn't have enough OpenGeni credits to send this message. Add credits or choose a model with another payment source. Your message and attachments are saved.";
27
30
  export declare function composerSubmissionErrorMessage(error: Error): string;
31
+ /** These definitive refusals need a payment or allowance change, not an unchanged retry. */
32
+ export declare function composerSubmissionCanRetry(error: Error): boolean;
28
33
  /**
29
34
  * Does this failure/completion payload (or raw error string) mean the
30
35
  * workspace ran out of OpenGeni credits? Matches the engine's
@@ -0,0 +1,36 @@
1
+ import type { DesktopRfbFactory } from "@opengeni/sdk";
2
+ /** Host-owned imports keep optional peers outside the root's bundler graph. */
3
+ export type WorkbenchPeerLoader<T = unknown> = () => Promise<T>;
4
+ export type CodeEditorLanguage = "javascript" | "json" | "python" | "markdown" | "css" | "html";
5
+ export type CodeEditorLanguages = Partial<Record<CodeEditorLanguage, WorkbenchPeerLoader>>;
6
+ export type CodeEditorPeers = {
7
+ module: unknown;
8
+ languages?: CodeEditorLanguages | undefined;
9
+ };
10
+ export type SandboxTerminalPeers = {
11
+ Terminal: unknown;
12
+ FitAddon: unknown;
13
+ WebLinksAddon: unknown;
14
+ loadWebgl?: WorkbenchPeerLoader | undefined;
15
+ };
16
+ export declare const sandboxTerminalPeers: {
17
+ register(next: WorkbenchPeerLoader<SandboxTerminalPeers> | null): void;
18
+ revision: () => number;
19
+ subscribe(listener: () => void): () => void;
20
+ load(): Promise<SandboxTerminalPeers>;
21
+ };
22
+ export declare const codeEditorPeers: {
23
+ register(next: WorkbenchPeerLoader<CodeEditorPeers> | null): void;
24
+ revision: () => number;
25
+ subscribe(listener: () => void): () => void;
26
+ load(): Promise<CodeEditorPeers>;
27
+ };
28
+ export declare const desktopViewerPeers: {
29
+ register(next: WorkbenchPeerLoader<DesktopRfbFactory> | null): void;
30
+ revision: () => number;
31
+ subscribe(listener: () => void): () => void;
32
+ load(): Promise<DesktopRfbFactory>;
33
+ };
34
+ export declare const registerSandboxTerminal: (next: WorkbenchPeerLoader<SandboxTerminalPeers> | null) => void;
35
+ export declare const registerCodeEditor: (next: WorkbenchPeerLoader<CodeEditorPeers> | null) => void;
36
+ export declare const registerDesktopViewer: (next: WorkbenchPeerLoader<DesktopRfbFactory> | null) => void;
package/dist/machines.js CHANGED
@@ -28,11 +28,11 @@ import {
28
28
  healthPulses,
29
29
  pointsFor,
30
30
  useMachines
31
- } from "./chunk-5AZSK6MV.js";
31
+ } from "./chunk-LWNLETQT.js";
32
32
  import "./chunk-WZ55DVGK.js";
33
+ import "./chunk-3IJJEYW4.js";
33
34
  import "./chunk-KZ73RL76.js";
34
35
  import "./chunk-NEXLLTP4.js";
35
- import "./chunk-UDD6DLLT.js";
36
36
  import "./chunk-22KP6LR5.js";
37
37
  export {
38
38
  CONNECTION_STATUS_META,
@@ -10,10 +10,36 @@ function markdownTableWidth({
10
10
  const available = 2 * Math.min(center - contentLeft, contentRight - center);
11
11
  return Math.max(columnWidth, Math.min(preferredWidth, available));
12
12
  }
13
+ function measurementCopy(source, document) {
14
+ if (source.nodeType === Node.ELEMENT_NODE) {
15
+ const element = source;
16
+ if (element.localName.includes("-") || ["iframe", "object", "embed", "video", "audio", "canvas", "script"].includes(
17
+ element.localName
18
+ )) {
19
+ const bounds = element.getBoundingClientRect();
20
+ const placeholder = document.createElement("span");
21
+ placeholder.style.display = "inline-block";
22
+ placeholder.style.width = `${bounds.width}px`;
23
+ placeholder.style.height = `${bounds.height}px`;
24
+ return placeholder;
25
+ }
26
+ }
27
+ const copy = document.importNode(source, false);
28
+ if (copy.nodeType === Node.ELEMENT_NODE) {
29
+ const element = copy;
30
+ element.removeAttribute("id");
31
+ for (const attribute of [...element.attributes]) {
32
+ if (attribute.name.startsWith("on")) element.removeAttribute(attribute.name);
33
+ }
34
+ }
35
+ for (const child of source.childNodes) copy.appendChild(measurementCopy(child, document));
36
+ return copy;
37
+ }
13
38
  function observeMarkdownTableLayout(wrapper, table) {
14
39
  const body = wrapper.parentElement;
15
40
  const scroller = body?.closest("[data-og-wide-table-message]")?.closest("[data-og-timeline-scroller]");
16
41
  if (!body?.classList.contains("og-markdown-body") || !scroller) return;
42
+ const measurementDocument = table.ownerDocument.implementation.createHTMLDocument("");
17
43
  let width = null;
18
44
  const reset = () => {
19
45
  width = null;
@@ -33,13 +59,19 @@ function observeMarkdownTableLayout(wrapper, table) {
33
59
  const panelStyle = getComputedStyle(scroller);
34
60
  const left = panel.left + scroller.clientLeft + parseFloat(panelStyle.paddingLeft);
35
61
  const right = panel.left + scroller.clientLeft + scroller.clientWidth - parseFloat(panelStyle.paddingRight);
36
- const previousWidth = table.style.width;
62
+ const probe = table.ownerDocument.createElement("div");
63
+ probe.setAttribute("aria-hidden", "true");
64
+ probe.inert = true;
65
+ probe.style.cssText = "position:absolute;width:0;height:0;overflow:hidden;contain:layout size paint;visibility:hidden;pointer-events:none";
66
+ const copy = measurementCopy(table, measurementDocument);
67
+ copy.style.width = "max-content";
68
+ probe.append(copy);
37
69
  let preferred;
38
70
  try {
39
- table.style.width = "max-content";
40
- preferred = table.getBoundingClientRect().width;
71
+ table.parentElement.append(probe);
72
+ preferred = copy.getBoundingClientRect().width;
41
73
  } finally {
42
- table.style.width = previousWidth;
74
+ probe.remove();
43
75
  }
44
76
  const next = markdownTableWidth({
45
77
  columnLeft: column.left,
@@ -71,4 +103,4 @@ export {
71
103
  markdownTableWidth,
72
104
  observeMarkdownTableLayout
73
105
  };
74
- //# sourceMappingURL=markdown-table-layout-PFUEZ2U4.js.map
106
+ //# sourceMappingURL=markdown-table-layout-QXSLK4BY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/markdown-table-layout.ts"],"sourcesContent":["export function markdownTableWidth({\n columnLeft,\n columnWidth,\n contentLeft,\n contentRight,\n preferredWidth,\n}: {\n columnLeft: number;\n columnWidth: number;\n contentLeft: number;\n contentRight: number;\n preferredWidth: number;\n}): number {\n const center = columnLeft + columnWidth / 2;\n const available = 2 * Math.min(center - contentLeft, contentRight - center);\n return Math.max(columnWidth, Math.min(preferredWidth, available));\n}\n\nfunction measurementCopy(source: Node, document: Document): Node {\n if (source.nodeType === Node.ELEMENT_NODE) {\n const element = source as Element;\n // Inert prevents focus, not custom-element construction, media loading or\n // embedded browsing contexts. Do not clone those host-rendered surfaces.\n if (\n element.localName.includes(\"-\") ||\n [\"iframe\", \"object\", \"embed\", \"video\", \"audio\", \"canvas\", \"script\"].includes(\n element.localName,\n )\n ) {\n const bounds = element.getBoundingClientRect();\n const placeholder = document.createElement(\"span\");\n placeholder.style.display = \"inline-block\";\n placeholder.style.width = `${bounds.width}px`;\n placeholder.style.height = `${bounds.height}px`;\n return placeholder;\n }\n }\n const copy = document.importNode(source, false);\n if (copy.nodeType === Node.ELEMENT_NODE) {\n const element = copy as Element;\n element.removeAttribute(\"id\");\n for (const attribute of [...element.attributes]) {\n if (attribute.name.startsWith(\"on\")) element.removeAttribute(attribute.name);\n }\n }\n for (const child of source.childNodes) copy.appendChild(measurementCopy(child, document));\n return copy;\n}\n\n/** Loaded only for assistant tables. Keep prose and nested scroll owners intact. */\nexport function observeMarkdownTableLayout(wrapper: HTMLDivElement, table: HTMLTableElement) {\n const body = wrapper.parentElement;\n const scroller = body\n ?.closest(\"[data-og-wide-table-message]\")\n ?.closest<HTMLElement>(\"[data-og-timeline-scroller]\");\n if (!body?.classList.contains(\"og-markdown-body\") || !scroller) return;\n\n // Build the static copy without a browsing context before inserting its probe.\n const measurementDocument = table.ownerDocument.implementation.createHTMLDocument(\"\");\n let width: number | null = null;\n const reset = () => {\n width = null;\n wrapper.style.width = \"\";\n wrapper.style.maxWidth = \"\";\n wrapper.style.marginInline = \"\";\n };\n const measure = () => {\n // Intermediate clipped/scrollable surfaces own their own content bounds.\n for (\n let ancestor: HTMLElement | null = body;\n ancestor && ancestor !== scroller;\n ancestor = ancestor.parentElement\n ) {\n if (getComputedStyle(ancestor).overflowX !== \"visible\") {\n reset();\n return;\n }\n }\n const column = body.getBoundingClientRect();\n const panel = scroller.getBoundingClientRect();\n const panelStyle = getComputedStyle(scroller);\n const left = panel.left + scroller.clientLeft + parseFloat(panelStyle.paddingLeft);\n const right =\n panel.left + scroller.clientLeft + scroller.clientWidth - parseFloat(panelStyle.paddingRight);\n\n // Even a temporary max-content width on the live table changes its height\n // during forced layout. Browser scroll anchoring can retain that displacement\n // after the width is restored. Measure a copy without touching live geometry.\n const probe = table.ownerDocument.createElement(\"div\");\n probe.setAttribute(\"aria-hidden\", \"true\");\n probe.inert = true;\n // A zero-sized, contained box cannot extend the scroller's overflow area,\n // including inside transformed ancestors. Keep the same inherited styling.\n probe.style.cssText =\n \"position:absolute;width:0;height:0;overflow:hidden;contain:layout size paint;visibility:hidden;pointer-events:none\";\n const copy = measurementCopy(table, measurementDocument) as HTMLTableElement;\n copy.style.width = \"max-content\";\n probe.append(copy);\n let preferred: number;\n try {\n table.parentElement!.append(probe);\n preferred = copy.getBoundingClientRect().width;\n } finally {\n probe.remove();\n }\n const next = markdownTableWidth({\n columnLeft: column.left,\n columnWidth: column.width,\n contentLeft: left,\n contentRight: right,\n preferredWidth: preferred,\n });\n if (width !== null && Math.abs(width - next) < 0.5) return;\n width = next;\n wrapper.style.width = `${width}px`;\n wrapper.style.maxWidth = \"none\";\n wrapper.style.marginInline = `calc((100% - ${width}px) / 2)`;\n };\n\n measure();\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(measure);\n observer?.observe(scroller);\n observer?.observe(body);\n observer?.observe(table);\n return {\n measure,\n disconnect: () => {\n observer?.disconnect();\n reset();\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -8,12 +8,12 @@ import {
8
8
  } from "./chunk-YCGBREUV.js";
9
9
  import "./chunk-5QHL6BLH.js";
10
10
  import "./chunk-ZYRGEKWS.js";
11
+ import "./chunk-447JLCBU.js";
11
12
  import {
12
13
  MENU_ITEM_CLASS,
13
14
  MENU_SEPARATOR_CLASS,
14
15
  MENU_SURFACE_CLASS
15
16
  } from "./chunk-K3HQAKQX.js";
16
- import "./chunk-447JLCBU.js";
17
17
  import {
18
18
  usePortalTokenSource,
19
19
  usePortalTokenStyle
@@ -1072,4 +1072,4 @@ export {
1072
1072
  QueueSurface,
1073
1073
  queueComposerCheckoutEnabled
1074
1074
  };
1075
- //# sourceMappingURL=queue-surface-implementation-IM2HD3SK.js.map
1075
+ //# sourceMappingURL=queue-surface-implementation-2CAQAIHM.js.map
package/dist/realtime.js CHANGED
@@ -12,13 +12,13 @@ import {
12
12
  MENU_SURFACE_CLASS
13
13
  } from "./chunk-K3HQAKQX.js";
14
14
  import "./chunk-CHPKSLPN.js";
15
- import {
16
- useEmbeddedRealtimeSession
17
- } from "./chunk-NEXLLTP4.js";
18
15
  import {
19
16
  usePortalTokenSource,
20
17
  usePortalTokenStyle
21
18
  } from "./chunk-VZTQ73XT.js";
19
+ import {
20
+ useEmbeddedRealtimeSession
21
+ } from "./chunk-NEXLLTP4.js";
22
22
  import {
23
23
  cn
24
24
  } from "./chunk-22KP6LR5.js";
@@ -1,16 +1,19 @@
1
1
  import {
2
2
  SandboxFiles
3
- } from "./chunk-YZ3YYMOM.js";
3
+ } from "./chunk-E3G7SAYZ.js";
4
4
  import "./chunk-UK4TINKT.js";
5
- import "./chunk-A2PI6UMY.js";
6
5
  import "./chunk-WZ55DVGK.js";
6
+ import "./chunk-GIMRELBW.js";
7
+ import "./chunk-A2PI6UMY.js";
7
8
  import "./chunk-K3HQAKQX.js";
9
+ import "./chunk-VZTQ73XT.js";
10
+ import "./chunk-YV4L3ILF.js";
8
11
  import "./chunk-KZ73RL76.js";
9
12
  import "./chunk-NEXLLTP4.js";
10
- import "./chunk-GIMRELBW.js";
11
- import "./chunk-VZTQ73XT.js";
13
+ import "./chunk-4RVYOY4O.js";
14
+ import "./chunk-JT4JW7BC.js";
12
15
  import "./chunk-22KP6LR5.js";
13
16
  export {
14
17
  SandboxFiles
15
18
  };
16
- //# sourceMappingURL=sandbox-files-PXPIZAFG.js.map
19
+ //# sourceMappingURL=sandbox-files-AEJTWGT4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -6,9 +6,12 @@ export type { ApprovalSurfaceProps, ApprovalSurfaceMessages } from "./components
6
6
  export type { HumanInputSurfaceProps } from "./components/human-input-surface.js";
7
7
  export { MessageTimeline, TimelineRow } from "./components/message-timeline.js";
8
8
  export type { MessageTimelineProps } from "./components/message-timeline.js";
9
- export { OpenGeniLinkProvider, chainLinkResolvers, sessionLinkResolver, useOpenGeniLinkResolver, } from "./components/open-geni-links.js";
10
- export type { OpenGeniLinkResolution, OpenGeniLinkResolver, OpenGeniLinkTarget, } from "./components/open-geni-links.js";
9
+ export type { RenderAllowanceExhausted } from "./timeline/allowance-exhausted-row.js";
10
+ export type { AllowanceLabels, AllowanceScope } from "./usage/allowance-copy.js";
11
+ export { OpenGeniLinkProvider, chainLinkResolvers, sessionLinkResolver, useOpenGeniLinkResolver, viewerLinkResolver, } from "./components/open-geni-links.js";
12
+ export type { OpenGeniLinkResolution, OpenGeniLinkResolver, OpenGeniLinkTarget, OpenGeniViewerTarget, } from "./components/open-geni-links.js";
11
13
  export { parseOpenGeniLink } from "@opengeni/sdk";
14
+ export { ArtifactLabelsProvider, DEFAULT_ARTIFACT_LABELS, type ArtifactLabels, } from "./components/artifacts/artifact-chrome.js";
12
15
  export type { TimelineSearchTarget } from "./components/timeline-search.js";
13
16
  export { createOlderHistoryLoadReceipt } from "./older-history.js";
14
17
  export type { OlderHistoryLoader, OlderHistoryLoadReceipt } from "./older-history.js";
@@ -17,6 +20,10 @@ export type { UserMessageBodyProps, UserMessageDisclosureLabels, } from "./compo
17
20
  export { BUILT_IN_TURN_SUMMARY_FACET_IDS } from "./timeline/turn-summary.js";
18
21
  export type { BuiltInTurnSummaryFacetId, TurnSummaryContext, TurnSummaryFacet, TurnSummaryFacetConfiguration, TurnSummaryFacetResult, TurnSummaryOptions, } from "./timeline/turn-summary.js";
19
22
  export { QueueSurface } from "./components/queue-surface.js";
23
+ export { OpenGeniProvider } from "./provider.js";
24
+ export type { OpenGeniProviderProps } from "./provider.js";
25
+ export { createDefaultToolRegistry, createToolRegistry, defaultToolRegistry } from "./timeline/index.js";
26
+ export type { CreateToolRegistryOptions, ToolRegistry, ToolRegistryEntry, ToolRenderer, ToolRendererProps, } from "./timeline/index.js";
20
27
  export { SessionConversation } from "./components/session-conversation.js";
21
28
  export { SessionList } from "./components/session-list.js";
22
29
  export type { SessionListLabels, SessionListProps } from "./components/session-list.js";
@@ -15,57 +15,72 @@ import {
15
15
  StartupTimings,
16
16
  TimelineRow,
17
17
  UserMessageBody,
18
+ createDefaultToolRegistry,
19
+ createToolRegistry,
20
+ defaultToolRegistry,
18
21
  sessionChromeGoalPillExplanation,
19
22
  sessionChromeGoalPillLabel,
20
23
  sessionChromeGoalPillState,
21
24
  setStartupDetails,
22
25
  useStartupDetails,
23
26
  userMessageLikelyNeedsDisclosure
24
- } from "./chunk-L4OSXQ6H.js";
25
- import "./chunk-YCGBREUV.js";
27
+ } from "./chunk-NBOHNRLJ.js";
26
28
  import "./chunk-UK4TINKT.js";
29
+ import "./chunk-YCGBREUV.js";
27
30
  import "./chunk-5QHL6BLH.js";
28
31
  import "./chunk-ZYRGEKWS.js";
29
- import "./chunk-A2PI6UMY.js";
30
32
  import "./chunk-FZCP527Y.js";
33
+ import {
34
+ ArtifactLabelsProvider,
35
+ DEFAULT_ARTIFACT_LABELS
36
+ } from "./chunk-5CVXZA3Y.js";
31
37
  import {
32
38
  createOlderHistoryLoadReceipt
33
- } from "./chunk-USXVQACU.js";
34
- import "./chunk-V2ABIVYJ.js";
39
+ } from "./chunk-M7LBYP63.js";
40
+ import "./chunk-ZXSEDZP7.js";
35
41
  import "./chunk-ERGYJIBB.js";
36
- import "./chunk-WZ55DVGK.js";
37
- import "./chunk-Y3QTZN2F.js";
38
- import "./chunk-UINDK6C3.js";
39
- import "./chunk-K3HQAKQX.js";
40
- import "./chunk-KVERXCFY.js";
41
- import "./chunk-CHPKSLPN.js";
42
- import "./chunk-KZ73RL76.js";
43
- import "./chunk-NEXLLTP4.js";
42
+ import {
43
+ OpenGeniProvider
44
+ } from "./chunk-WZ55DVGK.js";
45
+ import "./chunk-AFLPWUQ7.js";
46
+ import "./chunk-GIMRELBW.js";
47
+ import "./chunk-447JLCBU.js";
44
48
  import {
45
49
  OpenGeniLinkProvider,
46
50
  chainLinkResolvers,
47
51
  sessionLinkResolver,
48
- useOpenGeniLinkResolver
49
- } from "./chunk-X4HIN6TV.js";
50
- import "./chunk-GIMRELBW.js";
51
- import "./chunk-447JLCBU.js";
52
+ useOpenGeniLinkResolver,
53
+ viewerLinkResolver
54
+ } from "./chunk-XCHWDJ22.js";
55
+ import "./chunk-A2PI6UMY.js";
56
+ import "./chunk-JVYQRRC4.js";
57
+ import "./chunk-2VFNCX4E.js";
58
+ import "./chunk-5KYZIQFY.js";
52
59
  import "./chunk-BRM6FVZA.js";
60
+ import "./chunk-UINDK6C3.js";
61
+ import "./chunk-K3HQAKQX.js";
62
+ import "./chunk-CHPKSLPN.js";
53
63
  import "./chunk-VZTQ73XT.js";
54
- import "./chunk-UDD6DLLT.js";
64
+ import "./chunk-3IJJEYW4.js";
65
+ import "./chunk-B3V6TG77.js";
66
+ import "./chunk-KZ73RL76.js";
67
+ import "./chunk-NEXLLTP4.js";
55
68
  import "./chunk-22KP6LR5.js";
56
- import "./chunk-JVYQRRC4.js";
57
69
 
58
70
  // src/session-ui.ts
59
71
  import { parseOpenGeniLink } from "@opengeni/sdk";
60
72
  export {
61
73
  ApprovalSurface,
74
+ ArtifactLabelsProvider,
62
75
  BUILT_IN_TURN_SUMMARY_FACET_IDS,
76
+ DEFAULT_ARTIFACT_LABELS,
63
77
  HumanInputForm,
64
78
  HumanInputSurface,
65
79
  KnowledgeActivityProvider,
66
80
  MessageTimeline,
67
81
  OpenGeniChat,
68
82
  OpenGeniLinkProvider,
83
+ OpenGeniProvider,
69
84
  QueueSurface,
70
85
  SessionChrome,
71
86
  SessionCommands,
@@ -76,7 +91,10 @@ export {
76
91
  TimelineRow,
77
92
  UserMessageBody,
78
93
  chainLinkResolvers,
94
+ createDefaultToolRegistry,
79
95
  createOlderHistoryLoadReceipt,
96
+ createToolRegistry,
97
+ defaultToolRegistry,
80
98
  parseOpenGeniLink,
81
99
  sessionChromeGoalPillExplanation,
82
100
  sessionChromeGoalPillLabel,
@@ -85,6 +103,7 @@ export {
85
103
  setStartupDetails,
86
104
  useOpenGeniLinkResolver,
87
105
  useStartupDetails,
88
- userMessageLikelyNeedsDisclosure
106
+ userMessageLikelyNeedsDisclosure,
107
+ viewerLinkResolver
89
108
  };
90
109
  //# sourceMappingURL=session-ui.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/session-ui.ts"],"sourcesContent":["// @opengeni/react/session-ui — styled surfaces used by the session route.\n// Keep these separate from the hook-only session entry and the broad root barrel\n// so session hosts do not pay for unrelated React surfaces.\nexport { HumanInputForm } from \"./components/human-input-form\";\nexport type {\n HumanInputAnswerDraft,\n HumanInputFormMessages,\n HumanInputFormProps,\n} from \"./components/human-input-form\";\nexport { HumanInputSurface } from \"./components/human-input-surface\";\nexport { ApprovalSurface } from \"./components/approval-surface\";\nexport type { ApprovalSurfaceProps, ApprovalSurfaceMessages } from \"./components/approval-surface\";\nexport type { HumanInputSurfaceProps } from \"./components/human-input-surface\";\nexport { MessageTimeline, TimelineRow } from \"./components/message-timeline\";\nexport type { MessageTimelineProps } from \"./components/message-timeline\";\nexport {\n OpenGeniLinkProvider,\n chainLinkResolvers,\n sessionLinkResolver,\n useOpenGeniLinkResolver,\n} from \"./components/open-geni-links\";\nexport type {\n OpenGeniLinkResolution,\n OpenGeniLinkResolver,\n OpenGeniLinkTarget,\n} from \"./components/open-geni-links\";\nexport { parseOpenGeniLink } from \"@opengeni/sdk\";\nexport type { TimelineSearchTarget } from \"./components/timeline-search\";\nexport { createOlderHistoryLoadReceipt } from \"./older-history\";\nexport type { OlderHistoryLoader, OlderHistoryLoadReceipt } from \"./older-history\";\nexport { UserMessageBody, userMessageLikelyNeedsDisclosure } from \"./components/user-message-body\";\nexport type {\n UserMessageBodyProps,\n UserMessageDisclosureLabels,\n} from \"./components/user-message-body\";\nexport { BUILT_IN_TURN_SUMMARY_FACET_IDS } from \"./timeline/turn-summary\";\nexport type {\n BuiltInTurnSummaryFacetId,\n TurnSummaryContext,\n TurnSummaryFacet,\n TurnSummaryFacetConfiguration,\n TurnSummaryFacetResult,\n TurnSummaryOptions,\n} from \"./timeline/turn-summary\";\nexport { QueueSurface } from \"./components/queue-surface\";\nexport { SessionConversation } from \"./components/session-conversation\";\nexport { SessionList } from \"./components/session-list\";\nexport type { SessionListLabels, SessionListProps } from \"./components/session-list\";\nexport { OpenGeniChat } from \"./components/open-geni-chat\";\nexport type { OpenGeniChatLabels, OpenGeniChatProps } from \"./components/open-geni-chat\";\nexport type { SessionConversationProps } from \"./components/session-conversation\";\nexport type { QueueSurfaceProps } from \"./components/queue-surface\";\nexport {\n SessionChrome,\n sessionChromeGoalPillExplanation,\n sessionChromeGoalPillLabel,\n sessionChromeGoalPillState,\n} from \"./components/session-chrome\";\nexport type {\n SessionChromeAgentsSignal,\n SessionChromeProps,\n SessionChromeSignalId,\n SessionChromeSignalTone,\n} from \"./components/session-chrome\";\nexport { SessionCommandsPanel } from \"./components/session-commands-panel\";\nexport { SessionCommands } from \"./components/session-commands\";\n\nexport { KnowledgeActivityProvider } from \"./timeline/knowledge-receipt\";\nexport type { KnowledgeActivityActions } from \"./timeline/knowledge-receipt\";\nexport { StartupTimings } from \"./timeline/startup-timings\";\nexport { useStartupDetails, setStartupDetails } from \"./timeline/startup-preference\";\nexport type { GenieLoadingOptions } from \"./timeline/genie-loading\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAS,yBAAyB;","names":[]}
1
+ {"version":3,"sources":["../src/session-ui.ts"],"sourcesContent":["// @opengeni/react/session-ui — styled surfaces used by the session route.\n// Keep these separate from the hook-only session entry and the broad root barrel\n// so session hosts do not pay for unrelated React surfaces.\nexport { HumanInputForm } from \"./components/human-input-form\";\nexport type {\n HumanInputAnswerDraft,\n HumanInputFormMessages,\n HumanInputFormProps,\n} from \"./components/human-input-form\";\nexport { HumanInputSurface } from \"./components/human-input-surface\";\nexport { ApprovalSurface } from \"./components/approval-surface\";\nexport type { ApprovalSurfaceProps, ApprovalSurfaceMessages } from \"./components/approval-surface\";\nexport type { HumanInputSurfaceProps } from \"./components/human-input-surface\";\nexport { MessageTimeline, TimelineRow } from \"./components/message-timeline\";\nexport type { MessageTimelineProps } from \"./components/message-timeline\";\nexport type { RenderAllowanceExhausted } from \"./timeline/allowance-exhausted-row\";\nexport type { AllowanceLabels, AllowanceScope } from \"./usage/allowance-copy\";\nexport {\n OpenGeniLinkProvider,\n chainLinkResolvers,\n sessionLinkResolver,\n useOpenGeniLinkResolver,\n viewerLinkResolver,\n} from \"./components/open-geni-links\";\nexport type {\n OpenGeniLinkResolution,\n OpenGeniLinkResolver,\n OpenGeniLinkTarget,\n OpenGeniViewerTarget,\n} from \"./components/open-geni-links\";\nexport { parseOpenGeniLink } from \"@opengeni/sdk\";\nexport {\n ArtifactLabelsProvider,\n DEFAULT_ARTIFACT_LABELS,\n type ArtifactLabels,\n} from \"./components/artifacts/artifact-chrome\";\nexport type { TimelineSearchTarget } from \"./components/timeline-search\";\nexport { createOlderHistoryLoadReceipt } from \"./older-history\";\nexport type { OlderHistoryLoader, OlderHistoryLoadReceipt } from \"./older-history\";\nexport { UserMessageBody, userMessageLikelyNeedsDisclosure } from \"./components/user-message-body\";\nexport type {\n UserMessageBodyProps,\n UserMessageDisclosureLabels,\n} from \"./components/user-message-body\";\nexport { BUILT_IN_TURN_SUMMARY_FACET_IDS } from \"./timeline/turn-summary\";\nexport type {\n BuiltInTurnSummaryFacetId,\n TurnSummaryContext,\n TurnSummaryFacet,\n TurnSummaryFacetConfiguration,\n TurnSummaryFacetResult,\n TurnSummaryOptions,\n} from \"./timeline/turn-summary\";\nexport { QueueSurface } from \"./components/queue-surface\";\n// The provider too, so a host needs only this entry (the root also exports the\n// workbench, whose editors, terminal and desktop are optional peers).\nexport { OpenGeniProvider } from \"./provider\";\nexport type { OpenGeniProviderProps } from \"./provider\";\n// The tool-renderer registry, so custom tool renderers need no root import.\nexport { createDefaultToolRegistry, createToolRegistry, defaultToolRegistry } from \"./timeline\";\nexport type {\n CreateToolRegistryOptions,\n ToolRegistry,\n ToolRegistryEntry,\n ToolRenderer,\n ToolRendererProps,\n} from \"./timeline\";\nexport { SessionConversation } from \"./components/session-conversation\";\nexport { SessionList } from \"./components/session-list\";\nexport type { SessionListLabels, SessionListProps } from \"./components/session-list\";\nexport { OpenGeniChat } from \"./components/open-geni-chat\";\nexport type { OpenGeniChatLabels, OpenGeniChatProps } from \"./components/open-geni-chat\";\nexport type { SessionConversationProps } from \"./components/session-conversation\";\nexport type { QueueSurfaceProps } from \"./components/queue-surface\";\nexport {\n SessionChrome,\n sessionChromeGoalPillExplanation,\n sessionChromeGoalPillLabel,\n sessionChromeGoalPillState,\n} from \"./components/session-chrome\";\nexport type {\n SessionChromeAgentsSignal,\n SessionChromeProps,\n SessionChromeSignalId,\n SessionChromeSignalTone,\n} from \"./components/session-chrome\";\nexport { SessionCommandsPanel } from \"./components/session-commands-panel\";\nexport { SessionCommands } from \"./components/session-commands\";\n\nexport { KnowledgeActivityProvider } from \"./timeline/knowledge-receipt\";\nexport type { KnowledgeActivityActions } from \"./timeline/knowledge-receipt\";\nexport { StartupTimings } from \"./timeline/startup-timings\";\nexport { useStartupDetails, setStartupDetails } from \"./timeline/startup-preference\";\nexport type { GenieLoadingOptions } from \"./timeline/genie-loading\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAS,yBAAyB;","names":[]}
package/dist/session.js CHANGED
@@ -23,14 +23,14 @@ import {
23
23
  useSessionControl,
24
24
  useSessionEvents,
25
25
  useTurnQueue
26
- } from "./chunk-USXVQACU.js";
26
+ } from "./chunk-M7LBYP63.js";
27
27
  import {
28
28
  buildTimeline,
29
29
  creditExhaustedFromEvents,
30
30
  extractSessionRef,
31
31
  groupTimeline,
32
32
  sessionStatusFromEvents
33
- } from "./chunk-V2ABIVYJ.js";
33
+ } from "./chunk-ZXSEDZP7.js";
34
34
  import {
35
35
  toolDisplayName
36
36
  } from "./chunk-ERGYJIBB.js";
@@ -40,10 +40,10 @@ import {
40
40
  shouldSteerOnKey,
41
41
  shouldSubmitOnKey,
42
42
  useComposer
43
- } from "./chunk-KVERXCFY.js";
43
+ } from "./chunk-5KYZIQFY.js";
44
+ import "./chunk-3IJJEYW4.js";
44
45
  import "./chunk-KZ73RL76.js";
45
46
  import "./chunk-NEXLLTP4.js";
46
- import "./chunk-UDD6DLLT.js";
47
47
  export {
48
48
  FILE_ONLY_MESSAGE_TEXT,
49
49
  approvalsFromRequiresAction,