@opengeni/react 3.1.0 → 3.1.3-canary.38890816741001

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 (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  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-BO2IWXVK.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-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -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-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.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-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.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-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  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/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.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
+ }