@opengeni/react 3.3.2 → 3.4.1-canary.38960406141001

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 (855) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +2 -0
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +12 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +30 -3
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +404 -195
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -429
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +80 -4
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +299 -74
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2319 -748
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-2DZVYHVO.js +0 -470
  814. package/dist/chunk-2DZVYHVO.js.map +0 -1
  815. package/dist/chunk-3AGBGTRT.js.map +0 -1
  816. package/dist/chunk-4MDLEHXL.js.map +0 -1
  817. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  818. package/dist/chunk-7EAFGICR.js +0 -302
  819. package/dist/chunk-7EAFGICR.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X4A66EWZ.js +0 -223
  836. package/dist/chunk-X4A66EWZ.js.map +0 -1
  837. package/dist/chunk-XYRDDSXF.js.map +0 -1
  838. package/dist/chunk-YG4QEQF5.js +0 -9557
  839. package/dist/chunk-YG4QEQF5.js.map +0 -1
  840. package/dist/chunk-YVCHAQZY.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
@@ -0,0 +1,566 @@
1
+ /**
2
+ * Platform-neutral session realtime: the controller hook, admission rules and
3
+ * the workspace voice-model catalog. Free of DOM components, so web and native
4
+ * hosts (which inject their own WebRTC through `controllerFactory`) share it.
5
+ */
6
+ import { type EffectiveSessionControl, type SessionEvent, type SessionStatus } from "@opengeni/sdk";
7
+ import {
8
+ hasStoredSessionRealtimeOwnerProof,
9
+ projectSessionRealtimeLifecycle,
10
+ type CreateSessionRealtimeControllerOptions,
11
+ type SessionRealtimeClientLike,
12
+ type SessionRealtimeController,
13
+ type SessionRealtimeControllerSnapshot,
14
+ type SessionRealtimeLifecycleProjection,
15
+ type SessionRealtimeModel,
16
+ type WorkspaceRealtimeModelCatalogItem,
17
+ } from "@opengeni/sdk/realtime";
18
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
19
+ import type { EmbeddedRealtimeSessionClientLike } from "../client";
20
+ import { useEmbeddedRealtimeSession } from "../session-context";
21
+
22
+ /** An abort reason that works where DOMException is missing (React Native). */
23
+ function abortError(message: string): Error {
24
+ if (typeof DOMException !== "undefined") return new DOMException(message, "AbortError");
25
+ const error = new Error(message);
26
+ error.name = "AbortError";
27
+ return error;
28
+ }
29
+
30
+ export type RealtimeModelOption = {
31
+ id: SessionRealtimeModel;
32
+ label: string;
33
+ provider: "OpenGeni" | "Connected Codex" | "Connected SuperGrok" | "Your Gateway";
34
+ description: string;
35
+ available: boolean;
36
+ unavailableReason: string | null;
37
+ /** Machine-readable reason, e.g. `insufficient_credits` (same codes as voice input). */
38
+ unavailableCode?: string | null | undefined;
39
+ recommended: boolean;
40
+ };
41
+
42
+ export const CODEX_LIVE_MODEL: RealtimeModelOption = {
43
+ id: "gpt-live-1-boulder-alpha",
44
+ label: "Codex Live",
45
+ provider: "Connected Codex",
46
+ description: "Deep session integration",
47
+ available: false,
48
+ unavailableReason: "Connect Codex to use this voice model",
49
+ recommended: false,
50
+ };
51
+
52
+ const REALTIME_MODEL_STORAGE_PREFIX = "opengeni:realtime-model";
53
+ const REALTIME_MODEL_CATALOG_CACHE_TTL_MS = 60_000;
54
+ const REALTIME_MODEL_CATALOG_CACHE_MAX_WORKSPACES = 64;
55
+
56
+ export type RealtimeControllerClient = EmbeddedRealtimeSessionClientLike &
57
+ SessionRealtimeClientLike;
58
+
59
+ type RealtimeModelCatalogCacheEntry =
60
+ | {
61
+ state: "loading";
62
+ promise: Promise<RealtimeModelOption[]>;
63
+ controller: AbortController;
64
+ consumers: number;
65
+ }
66
+ | { state: "ready"; models: RealtimeModelOption[]; expiresAt: number };
67
+
68
+ // Scope advisory availability to the exact client object and workspace. The
69
+ // server still authorizes every realtime operation; changing principals should
70
+ // replace the client just as it does for the rest of the SDK state.
71
+ const realtimeModelCatalogCache = new WeakMap<
72
+ RealtimeControllerClient,
73
+ Map<string, RealtimeModelCatalogCacheEntry>
74
+ >();
75
+
76
+ function realtimeModelFallback(codexConnected: boolean): RealtimeModelOption[] {
77
+ return [
78
+ {
79
+ ...CODEX_LIVE_MODEL,
80
+ available: codexConnected,
81
+ unavailableReason: codexConnected ? null : CODEX_LIVE_MODEL.unavailableReason,
82
+ },
83
+ ];
84
+ }
85
+
86
+ function realtimeModelCatalogCacheFor(
87
+ client: RealtimeControllerClient,
88
+ ): Map<string, RealtimeModelCatalogCacheEntry> {
89
+ const existing = realtimeModelCatalogCache.get(client);
90
+ if (existing) return existing;
91
+ const created = new Map<string, RealtimeModelCatalogCacheEntry>();
92
+ realtimeModelCatalogCache.set(client, created);
93
+ return created;
94
+ }
95
+
96
+ function readCachedRealtimeModelCatalog(
97
+ client: RealtimeControllerClient,
98
+ workspaceId: string,
99
+ now = Date.now(),
100
+ ): RealtimeModelOption[] | null {
101
+ const cache = realtimeModelCatalogCache.get(client);
102
+ const entry = cache?.get(workspaceId);
103
+ if (!entry || entry.state === "loading") return null;
104
+ if (entry.expiresAt > now) return entry.models;
105
+ cache?.delete(workspaceId);
106
+ return null;
107
+ }
108
+
109
+ function pruneRealtimeModelCatalogCache(
110
+ cache: Map<string, RealtimeModelCatalogCacheEntry>,
111
+ now: number,
112
+ ): void {
113
+ for (const [workspaceId, entry] of cache) {
114
+ if (entry.state === "ready" && entry.expiresAt <= now) cache.delete(workspaceId);
115
+ }
116
+ while (cache.size >= REALTIME_MODEL_CATALOG_CACHE_MAX_WORKSPACES) {
117
+ const oldestWorkspaceId = cache.keys().next().value;
118
+ if (oldestWorkspaceId === undefined) return;
119
+ cache.delete(oldestWorkspaceId);
120
+ }
121
+ }
122
+
123
+ /** Shared by the lazy conversation offer and the stock voice control. */
124
+ export function loadRealtimeModelCatalog(
125
+ client: RealtimeControllerClient,
126
+ workspaceId: string,
127
+ signal?: AbortSignal,
128
+ ): Promise<RealtimeModelOption[]> | null {
129
+ const load = client.getWorkspaceRealtimeModelCatalog;
130
+ if (!load) return null;
131
+ if (signal?.aborted) {
132
+ return Promise.reject(signal.reason ?? abortError("Request aborted"));
133
+ }
134
+ const now = Date.now();
135
+ const cache = realtimeModelCatalogCacheFor(client);
136
+ const entry = cache.get(workspaceId);
137
+ if (entry?.state === "loading" && !entry.controller.signal.aborted) {
138
+ return consumeRealtimeModelCatalog(entry, signal);
139
+ }
140
+ if (entry?.state === "ready" && entry.expiresAt > now) return Promise.resolve(entry.models);
141
+ if (entry) cache.delete(workspaceId);
142
+ pruneRealtimeModelCatalogCache(cache, now);
143
+
144
+ const controller = new AbortController();
145
+ const promise = load
146
+ .call(client, workspaceId, { signal: controller.signal })
147
+ .then((response) => response.models.map(toRealtimeModelOption))
148
+ .then((models) => {
149
+ const current = cache.get(workspaceId);
150
+ if (current?.state === "loading" && current.promise === promise) {
151
+ cache.delete(workspaceId);
152
+ cache.set(workspaceId, {
153
+ state: "ready",
154
+ models,
155
+ expiresAt: Date.now() + REALTIME_MODEL_CATALOG_CACHE_TTL_MS,
156
+ });
157
+ }
158
+ return models;
159
+ })
160
+ .catch((error: unknown) => {
161
+ const current = cache.get(workspaceId);
162
+ if (current?.state === "loading" && current.promise === promise) cache.delete(workspaceId);
163
+ throw error;
164
+ });
165
+ const loading: RealtimeModelCatalogCacheEntry & { state: "loading" } = {
166
+ state: "loading",
167
+ promise,
168
+ controller,
169
+ consumers: 0,
170
+ };
171
+ cache.set(workspaceId, loading);
172
+ return consumeRealtimeModelCatalog(loading, signal);
173
+ }
174
+
175
+ function consumeRealtimeModelCatalog(
176
+ entry: RealtimeModelCatalogCacheEntry & { state: "loading" },
177
+ signal?: AbortSignal,
178
+ ): Promise<RealtimeModelOption[]> {
179
+ entry.consumers += 1;
180
+ return new Promise((resolve, reject) => {
181
+ let released = false;
182
+ const release = (abandoned: boolean) => {
183
+ if (released) return;
184
+ released = true;
185
+ entry.consumers = Math.max(0, entry.consumers - 1);
186
+ if (abandoned && entry.consumers === 0) {
187
+ entry.controller.abort(signal?.reason ?? abortError("Request abandoned"));
188
+ }
189
+ };
190
+ const onAbort = () => {
191
+ release(true);
192
+ reject(signal?.reason ?? abortError("Request aborted"));
193
+ };
194
+ signal?.addEventListener("abort", onAbort, { once: true });
195
+ void entry.promise.then(resolve, reject).finally(() => {
196
+ signal?.removeEventListener("abort", onAbort);
197
+ release(false);
198
+ });
199
+ });
200
+ }
201
+
202
+ export type SessionRealtimeControllerFactory = (
203
+ options: CreateSessionRealtimeControllerOptions,
204
+ ) => SessionRealtimeController;
205
+
206
+ type AdmissionInput = {
207
+ sessionStatus: SessionStatus;
208
+ controlState: "active" | "paused";
209
+ settlement: { state: string } | null;
210
+ codexConnected: boolean;
211
+ lifecycleActive: boolean;
212
+ };
213
+
214
+ export function codexRealtimeAdmissionAllowed(input: AdmissionInput): boolean {
215
+ return codexRealtimeAdmissionBlocker(input) === null;
216
+ }
217
+
218
+ export function codexRealtimeAdmissionBlocker(input: AdmissionInput): string | null {
219
+ if (input.sessionStatus === "cancelled") return "This session was cancelled.";
220
+ if (input.controlState !== "active") return "Resume this session before starting voice.";
221
+ if (input.settlement !== null) return "Wait for the current session transition to finish.";
222
+ if (!input.codexConnected) return "Connect Codex to use this voice model.";
223
+ if (input.lifecycleActive) return "Voice is already active for this session.";
224
+ return null;
225
+ }
226
+
227
+ export function useSessionRealtime(options: {
228
+ client?: RealtimeControllerClient | undefined;
229
+ workspaceId?: string | undefined;
230
+ sessionId: string;
231
+ sessionStatus: SessionStatus;
232
+ effectiveControl: EffectiveSessionControl;
233
+ events: SessionEvent[];
234
+ eventsReady: boolean;
235
+ codexConnected: boolean;
236
+ model?: SessionRealtimeModel | undefined;
237
+ modelAvailable?: boolean | undefined;
238
+ modelUnavailableReason?: string | null | undefined;
239
+ /** Model-visible application context captured with each durable realtime message. */
240
+ getModelContext?: (() => string | undefined) | undefined;
241
+ /** Deterministic browser-test/demo seam. Production hosts should use the SDK default. */
242
+ controllerFactory?: SessionRealtimeControllerFactory | undefined;
243
+ }) {
244
+ const { client, workspaceId } = useEmbeddedRealtimeSession({
245
+ client: options.client,
246
+ workspaceId: options.workspaceId,
247
+ });
248
+ const model = options.model ?? CODEX_LIVE_MODEL.id;
249
+ const audioRef = useRef<HTMLAudioElement>(null);
250
+ const controllerRef = useRef<SessionRealtimeController | null>(null);
251
+ const controllerModelRef = useRef<SessionRealtimeModel | null>(null);
252
+ const modelContextProviderRef = useRef(options.getModelContext);
253
+ modelContextProviderRef.current = options.getModelContext;
254
+ const [snapshot, setSnapshot] = useState<SessionRealtimeControllerSnapshot>(() => ({
255
+ status: hasStoredSessionRealtimeOwnerProof({
256
+ workspaceId,
257
+ sessionId: options.sessionId,
258
+ model,
259
+ })
260
+ ? "recovering"
261
+ : "idle",
262
+ realtimeId: null,
263
+ mode: null,
264
+ bridge: null,
265
+ microphone: "inactive",
266
+ inputMuted: false,
267
+ audibleOutput: "inactive",
268
+ outputMuted: false,
269
+ connectionGeneration: 0,
270
+ reconnectAttempt: 0,
271
+ diagnostic: null,
272
+ error: null,
273
+ }));
274
+ const lifecycle = useMemo(
275
+ () => projectSessionRealtimeLifecycle(options.events),
276
+ [options.events],
277
+ );
278
+ const lifecycleRef = useRef(lifecycle);
279
+ const eventsReadyRef = useRef(options.eventsReady);
280
+ lifecycleRef.current = lifecycle;
281
+ eventsReadyRef.current = options.eventsReady;
282
+ const lifecycleActive = sessionRealtimeLifecycleIsActive(lifecycle);
283
+
284
+ useEffect(() => {
285
+ let disposed = false;
286
+ let controller: SessionRealtimeController | null = null;
287
+ let unsubscribe: (() => void) | null = null;
288
+ void import("@opengeni/sdk/realtime")
289
+ .then(({ createSessionRealtimeController }) => {
290
+ if (disposed) return;
291
+ const controllerFactory = options.controllerFactory ?? createSessionRealtimeController;
292
+ controller = controllerFactory({
293
+ client,
294
+ workspaceId,
295
+ sessionId: options.sessionId,
296
+ ...(audioRef.current ? { remoteAudio: audioRef.current } : {}),
297
+ model,
298
+ getModelContext: () => modelContextProviderRef.current?.(),
299
+ });
300
+ controllerRef.current = controller;
301
+ controllerModelRef.current = model;
302
+ unsubscribe = controller.subscribe(setSnapshot);
303
+ if (eventsReadyRef.current) {
304
+ void controller.observeLifecycle(lifecycleRef.current).catch(() => undefined);
305
+ }
306
+ })
307
+ .catch((error: unknown) => {
308
+ if (disposed) return;
309
+ setSnapshot({
310
+ status: "error",
311
+ realtimeId: null,
312
+ mode: null,
313
+ bridge: null,
314
+ microphone: "inactive",
315
+ inputMuted: false,
316
+ audibleOutput: "inactive",
317
+ outputMuted: false,
318
+ connectionGeneration: 0,
319
+ reconnectAttempt: 0,
320
+ diagnostic: {
321
+ kind: "negotiation_failure",
322
+ message:
323
+ error instanceof Error ? error.message : "Codex realtime controller failed to load",
324
+ recoverable: false,
325
+ connectionGeneration: 0,
326
+ attempt: 0,
327
+ },
328
+ error:
329
+ error instanceof Error ? error.message : "Codex realtime controller failed to load",
330
+ });
331
+ });
332
+ return () => {
333
+ disposed = true;
334
+ unsubscribe?.();
335
+ controller?.close();
336
+ if (controllerRef.current === controller) {
337
+ controllerRef.current = null;
338
+ controllerModelRef.current = null;
339
+ }
340
+ };
341
+ }, [client, model, options.controllerFactory, options.sessionId, workspaceId]);
342
+
343
+ useEffect(() => {
344
+ if (!options.eventsReady) return;
345
+ void controllerRef.current?.observeLifecycle(lifecycle).catch(() => undefined);
346
+ }, [lifecycle, options.eventsReady]);
347
+
348
+ const start = useCallback(async () => {
349
+ const controller = controllerRef.current;
350
+ if (!controller || controllerModelRef.current !== model) {
351
+ throw new Error("The selected voice model is still preparing");
352
+ }
353
+ await controller.start();
354
+ }, [model]);
355
+ const stop = useCallback(async () => {
356
+ await controllerRef.current?.stop();
357
+ }, []);
358
+ const retry = useCallback(async () => {
359
+ await controllerRef.current?.retry();
360
+ }, []);
361
+ const retryAudibleOutput = useCallback(async () => {
362
+ await controllerRef.current?.retryAudibleOutput();
363
+ }, []);
364
+ const setInputMuted = useCallback((muted: boolean) => {
365
+ controllerRef.current?.setInputMuted(muted);
366
+ }, []);
367
+ const setOutputMuted = useCallback((muted: boolean) => {
368
+ controllerRef.current?.setOutputMuted(muted);
369
+ }, []);
370
+ const admissionInput = {
371
+ sessionStatus: options.sessionStatus,
372
+ controlState: options.effectiveControl.state,
373
+ settlement: options.effectiveControl.settlement,
374
+ codexConnected: options.modelAvailable ?? options.codexConnected,
375
+ lifecycleActive,
376
+ } satisfies AdmissionInput;
377
+ const admissionBlocker =
378
+ options.modelAvailable === false
379
+ ? (options.modelUnavailableReason ?? "This voice model is unavailable.")
380
+ : codexRealtimeAdmissionBlocker(admissionInput);
381
+ const canStart =
382
+ controllerRef.current !== null &&
383
+ controllerModelRef.current === model &&
384
+ ["idle", "error"].includes(snapshot.status) &&
385
+ admissionBlocker === null;
386
+
387
+ return {
388
+ snapshot,
389
+ lifecycleActive,
390
+ canStart,
391
+ admissionBlocker,
392
+ codexConnected: options.codexConnected,
393
+ audioRef,
394
+ start,
395
+ stop,
396
+ retry,
397
+ retryAudibleOutput,
398
+ setInputMuted,
399
+ setOutputMuted,
400
+ };
401
+ }
402
+
403
+ export function sessionRealtimeLifecycleIsActive(
404
+ lifecycle: SessionRealtimeLifecycleProjection | null,
405
+ ): boolean {
406
+ if (lifecycle?.state !== "active") return false;
407
+ const leaseExpiresAt = Date.parse(lifecycle.leaseExpiresAt);
408
+ return !Number.isFinite(leaseExpiresAt) || leaseExpiresAt > Date.now();
409
+ }
410
+
411
+ /**
412
+ * First available model; otherwise the model whose blocker the user can act on
413
+ * (for example adding credits) rather than an unrelated "connect" prompt.
414
+ */
415
+ function fallbackRealtimeModelId(models: readonly RealtimeModelOption[]): SessionRealtimeModel {
416
+ return (
417
+ models.find((model) => model.available)?.id ??
418
+ models.find((model) => model.unavailableCode)?.id ??
419
+ CODEX_LIVE_MODEL.id
420
+ );
421
+ }
422
+
423
+ export function useRealtimeModelSelection(options: {
424
+ client?: RealtimeControllerClient | undefined;
425
+ workspaceId?: string | undefined;
426
+ codexConnected: boolean;
427
+ activeModel?: SessionRealtimeModel | null | undefined;
428
+ }) {
429
+ const { client, workspaceId } = useEmbeddedRealtimeSession({
430
+ client: options.client,
431
+ workspaceId: options.workspaceId,
432
+ });
433
+ const activeModel = options.activeModel;
434
+ const initialCachedCatalog = readCachedRealtimeModelCatalog(client, workspaceId);
435
+ const [catalog, setCatalog] = useState<RealtimeModelOption[]>(
436
+ () => initialCachedCatalog ?? realtimeModelFallback(options.codexConnected),
437
+ );
438
+ const catalogScopeRef = useRef({
439
+ client,
440
+ workspaceId,
441
+ source: initialCachedCatalog ? ("cache" as const) : ("fallback" as const),
442
+ });
443
+ // Set when no real catalog will come (no loader, or loading failed): the
444
+ // fallback is then the catalog.
445
+ const [fallbackFinal, setFallbackFinal] = useState<{
446
+ client: unknown;
447
+ workspaceId: string;
448
+ } | null>(null);
449
+ const [selectedModelId, setSelectedModelId] = useState<SessionRealtimeModel>(() => {
450
+ const preferred = readRealtimeModelPreference(workspaceId) ?? CODEX_LIVE_MODEL.id;
451
+ if (!initialCachedCatalog) return preferred;
452
+ if (initialCachedCatalog.some((model) => model.id === preferred && model.available)) {
453
+ return preferred;
454
+ }
455
+ return fallbackRealtimeModelId(initialCachedCatalog);
456
+ });
457
+
458
+ useEffect(() => {
459
+ let disposed = false;
460
+ const requestAbort = new AbortController();
461
+ const applyCatalog = (models: RealtimeModelOption[]) => {
462
+ catalogScopeRef.current = { client, workspaceId, source: "cache" };
463
+ setCatalog(models);
464
+ setSelectedModelId((current) => {
465
+ if (models.some((model) => model.id === current && model.available)) return current;
466
+ return fallbackRealtimeModelId(models);
467
+ });
468
+ };
469
+ const cached = readCachedRealtimeModelCatalog(client, workspaceId);
470
+ if (cached) {
471
+ const scope = catalogScopeRef.current;
472
+ if (
473
+ scope.client !== client ||
474
+ scope.workspaceId !== workspaceId ||
475
+ scope.source !== "cache"
476
+ ) {
477
+ applyCatalog(cached);
478
+ }
479
+ return;
480
+ }
481
+ const loading = loadRealtimeModelCatalog(client, workspaceId, requestAbort.signal);
482
+ if (!loading) {
483
+ setFallbackFinal({ client, workspaceId });
484
+ return;
485
+ }
486
+ void loading
487
+ .then((models) => {
488
+ if (disposed) return;
489
+ applyCatalog(models);
490
+ })
491
+ .catch(() => {
492
+ if (!disposed) setFallbackFinal({ client, workspaceId });
493
+ });
494
+ return () => {
495
+ disposed = true;
496
+ requestAbort.abort();
497
+ };
498
+ }, [client, workspaceId]);
499
+
500
+ useEffect(() => {
501
+ if (activeModel) setSelectedModelId(activeModel);
502
+ }, [activeModel]);
503
+
504
+ const selectedModel =
505
+ catalog.find((model) => model.id === selectedModelId) ??
506
+ ({
507
+ ...CODEX_LIVE_MODEL,
508
+ available: options.codexConnected,
509
+ unavailableReason: options.codexConnected ? null : CODEX_LIVE_MODEL.unavailableReason,
510
+ } satisfies RealtimeModelOption);
511
+ const selectModel = useCallback(
512
+ (value: string) => {
513
+ const model = catalog.find((candidate) => candidate.id === value);
514
+ if (!model || !model.available || activeModel) return;
515
+ setSelectedModelId(model.id);
516
+ writeRealtimeModelPreference(workspaceId, model.id);
517
+ },
518
+ [activeModel, catalog, workspaceId],
519
+ );
520
+
521
+ // The fallback catalog is a placeholder: a caller that starts voice on its own
522
+ // (a call from outside the app) waits for the real one, or the selection
523
+ // would change under the starting connection.
524
+ const scope = catalogScopeRef.current;
525
+ const catalogReady =
526
+ (scope.source === "cache" && scope.client === client && scope.workspaceId === workspaceId) ||
527
+ (fallbackFinal?.client === client && fallbackFinal.workspaceId === workspaceId);
528
+ return { models: catalog, selectedModel, selectModel, catalogReady };
529
+ }
530
+
531
+ function toRealtimeModelOption(model: WorkspaceRealtimeModelCatalogItem): RealtimeModelOption {
532
+ return { ...model };
533
+ }
534
+
535
+ function readRealtimeModelPreference(workspaceId: string): SessionRealtimeModel | null {
536
+ if (typeof localStorage === "undefined") return null;
537
+ try {
538
+ const value = localStorage.getItem(`${REALTIME_MODEL_STORAGE_PREFIX}:${workspaceId}`);
539
+ return isRealtimeModel(value) ? value : null;
540
+ } catch {
541
+ return null;
542
+ }
543
+ }
544
+
545
+ function writeRealtimeModelPreference(workspaceId: string, model: SessionRealtimeModel): void {
546
+ if (typeof localStorage === "undefined") return;
547
+ try {
548
+ localStorage.setItem(`${REALTIME_MODEL_STORAGE_PREFIX}:${workspaceId}`, model);
549
+ } catch {
550
+ // Voice selection still works when browser storage is unavailable.
551
+ }
552
+ }
553
+
554
+ function isRealtimeModel(value: string | null): value is SessionRealtimeModel {
555
+ return (
556
+ value === "opengeni-azure/gpt-live-1" ||
557
+ value === "gpt-live-1-boulder-alpha" ||
558
+ value === "opengeni-gateway/openai/gpt-realtime-2.1" ||
559
+ value === "opengeni-gateway/openai/gpt-realtime-mini" ||
560
+ value === "opengeni-gateway/xai/grok-voice-think-fast-2.0" ||
561
+ value === "supergrok/grok-voice-think-fast-2.0" ||
562
+ value === "workspace-gateway/openai/gpt-realtime-2.1" ||
563
+ value === "workspace-gateway/openai/gpt-realtime-mini" ||
564
+ value === "workspace-gateway/xai/grok-voice-think-fast-2.0"
565
+ );
566
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * User-facing names for where a session's commands run, shared by the web
3
+ * sandbox switcher and every timeline that labels command rows ("on Cloud
4
+ * sandbox · …"). No DOM, no React.
5
+ */
6
+ import type { SandboxBackend } from "@opengeni/sdk";
7
+ import type { MachineView } from "./types/machines";
8
+
9
+ export const CLOUD_SANDBOX_LABEL = "Cloud sandbox";
10
+ export const NO_SANDBOX_LABEL = "No sandbox";
11
+ export const LOCAL_SANDBOX_LABEL = "Local sandbox";
12
+
13
+ /**
14
+ * User-facing name for a session's own managed box. Hosting vendors (Modal,
15
+ * Daytona, ...) are deployment detail, not something a user chose, so hosted
16
+ * providers read as the neutral "Cloud sandbox" and the local-dev Docker box as
17
+ * "Local sandbox". The local backend runs directly on the host, so it keeps the
18
+ * honest "this computer" instead of implying isolation. Connected Machines keep
19
+ * their own names.
20
+ */
21
+ export function sessionSandboxLabel(backend: SandboxBackend | string): string {
22
+ if (backend === "none") return NO_SANDBOX_LABEL;
23
+ if (backend === "local") return "this computer";
24
+ if (backend === "docker") return LOCAL_SANDBOX_LABEL;
25
+ return CLOUD_SANDBOX_LABEL;
26
+ }
27
+
28
+ /** Display name for a fleet row: the session's own box never shows its vendor. */
29
+ export function machineDisplayName(
30
+ machine: Pick<MachineView, "isSessionGroup" | "kind" | "name">,
31
+ ): string {
32
+ return machine.isSessionGroup ? sessionSandboxLabel(machine.kind) : machine.name;
33
+ }
34
+
35
+ /**
36
+ * Who can use a Connected Machine, in the words of the Connect dialog's
37
+ * "Who can use it?" choice: a personal machine is "Only me" (its owner, in any
38
+ * workspace they can access), a workspace machine is shared with that
39
+ * workspace's members, and an organization machine with the whole organization.
40
+ */
41
+ export function machineScopeLabel(scope: MachineView["scope"]): string {
42
+ if (scope === "user") return "Only me";
43
+ if (scope === "organization") return "Organization";
44
+ return "Workspace";
45
+ }
46
+
47
+ /** The compute label a session timeline shows: the active machine, else the cloud box. */
48
+ export function sessionComputeLabel(
49
+ machines: readonly Pick<MachineView, "active" | "isSessionGroup" | "kind" | "name">[],
50
+ ): string {
51
+ const active = machines.find((machine) => machine.active);
52
+ return active ? machineDisplayName(active) : CLOUD_SANDBOX_LABEL;
53
+ }
@@ -0,0 +1,3 @@
1
+ // Classic-scrollbar detection without the rest of the package, so an app can
2
+ // mark its document before the first paint from its eager entry chunk.
3
+ export { CLASSIC_SCROLLBARS_ATTRIBUTE, markClassicScrollbars } from "./lib/scrollbars";
@@ -0,0 +1,43 @@
1
+ import type { SecretReferenceLike } from "./secrets-ui";
2
+
3
+ /* Pure (no DOM): shared by the web chips and non-DOM renderers. */
4
+
5
+ export type SecretReferenceLabel = {
6
+ /** The part that truncates: the item name (or "Secret" for an ID reference). */
7
+ primary: string;
8
+ /** The field, one-time code and previous markers; never truncated. */
9
+ suffix: string;
10
+ };
11
+
12
+ /**
13
+ * "GitHub · password": the last path segments (the vault, when named, stays in
14
+ * the tooltip); an ID reference reads "Secret · field"; `/otp` adds
15
+ * "· one-time code" and `#previous` adds "(previous)".
16
+ */
17
+ export function secretReferenceLabel(reference: SecretReferenceLike): SecretReferenceLabel {
18
+ const target = reference.target;
19
+ let primary: string;
20
+ let field: string | null;
21
+ if (target.form === "id") {
22
+ primary = "Secret";
23
+ field = target.field;
24
+ } else {
25
+ const segments = target.segments;
26
+ if (segments.length >= 3) {
27
+ primary = segments[segments.length - 2]!;
28
+ field = segments[segments.length - 1]!;
29
+ } else {
30
+ primary = segments[0] ?? "Secret";
31
+ field = segments[1] ?? null;
32
+ }
33
+ }
34
+ let suffix = field ? ` · ${field}` : "";
35
+ if (reference.otp) suffix += " · one-time code";
36
+ if (reference.previous) suffix += " (previous)";
37
+ return { primary, suffix };
38
+ }
39
+
40
+ export function secretReferenceLabelText(reference: SecretReferenceLike): string {
41
+ const label = secretReferenceLabel(reference);
42
+ return `${label.primary}${label.suffix}`;
43
+ }