@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
@@ -1,11 +1,12 @@
1
+ import {
2
+ compareModelPickerOrder,
3
+ modelPickerBillingClassFor,
4
+ type ModelPickerBillingClass,
5
+ } from "@opengeni/sdk/model-picker-order";
6
+ import { modelDisplayName } from "@opengeni/sdk/model-display";
1
7
  import type { ClientModel, ReasoningEffort, WorkspaceModelCatalogModel } from "@opengeni/sdk";
2
8
 
3
- export type PickerBillingClass =
4
- | "opengeni_credits"
5
- | "external"
6
- | "codex_subscription"
7
- | "supergrok_subscription"
8
- | "byok";
9
+ export type PickerBillingClass = ModelPickerBillingClass;
9
10
 
10
11
  export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogModel> = {
11
12
  id: string;
@@ -16,6 +17,7 @@ export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogM
16
17
  billingClassLabel: string;
17
18
  selectable: boolean;
18
19
  unavailableReason: string | null;
20
+ fundingHint?: string | undefined;
19
21
  provider: string;
20
22
  providerLabel: string;
21
23
  catalog: TCatalog;
@@ -23,20 +25,23 @@ export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogM
23
25
 
24
26
  export type LatencyModeId = "standard" | "priority" | "fast";
25
27
 
26
- const BILLING_CLASS_ORDER: PickerBillingClass[] = [
27
- "opengeni_credits",
28
- "external",
29
- "codex_subscription",
30
- "supergrok_subscription",
31
- "byok",
32
- ];
33
-
34
28
  const BILLING_CLASS_LABELS: Record<PickerBillingClass, string> = {
35
- opengeni_credits: "OpenGeni",
29
+ opengeni_credits: "Models",
36
30
  external: "External",
37
31
  codex_subscription: "Codex",
38
32
  supergrok_subscription: "SuperGrok",
39
- byok: "Your Gateway",
33
+ claude_subscription: "Claude subscription",
34
+ // Who connected the key (organization or workspace) is a settings fact, not
35
+ // a model choice: both scopes share one label and one picker group.
36
+ byok: "API keys",
37
+ organization_byok: "API keys",
38
+ };
39
+
40
+ /** Models settings keeps naming who connected the key. */
41
+ const SCOPED_BILLING_CLASS_LABELS: Record<PickerBillingClass, string> = {
42
+ ...BILLING_CLASS_LABELS,
43
+ byok: "Workspace providers",
44
+ organization_byok: "Organization providers",
40
45
  };
41
46
 
42
47
  const AVAILABILITY_REASON_LABELS: Record<string, string> = {
@@ -47,42 +52,41 @@ const AVAILABILITY_REASON_LABELS: Record<string, string> = {
47
52
  provider_unhealthy: "Provider unavailable",
48
53
  policy_blocked: "Blocked by workspace policy",
49
54
  unsupported: "Unsupported",
55
+ credits_disabled: "Opengeni credits off",
50
56
  };
51
57
 
52
58
  export function billingClassForModel(model: ClientModel): PickerBillingClass {
53
- if (model.billing?.metering === "external" && model.billing.upstreamPayer === "deployment") {
54
- return "external";
55
- }
56
- if (model.source === "supergrok") {
57
- return "supergrok_subscription";
59
+ if (
60
+ model.provider === "organization-gateway" ||
61
+ model.provider === "organization-openrouter" ||
62
+ model.provider === "organization-opper"
63
+ ) {
64
+ return "organization_byok";
58
65
  }
59
- if (model.source === "codex") {
60
- return "codex_subscription";
61
- }
62
- if (model.source === "workspace_gateway") {
66
+ if (
67
+ model.provider?.startsWith("workspace-openai-") ||
68
+ model.provider?.startsWith("workspace-azure-openai-")
69
+ )
63
70
  return "byok";
64
- }
65
- if (model.credentialSource?.kind === "connected_subscription") {
66
- return model.credentialSource.provider === "xai"
67
- ? "supergrok_subscription"
68
- : "codex_subscription";
69
- }
70
- if (model.credentialSource?.kind === "workspace_connection") {
71
+ if (
72
+ model.provider === "workspace-gateway" ||
73
+ model.provider === "workspace-openrouter" ||
74
+ model.provider === "workspace-opper"
75
+ ) {
71
76
  return "byok";
72
77
  }
73
- if (model.billing?.upstreamPayer === "connected_subscription") {
74
- return "codex_subscription";
75
- }
76
- if (model.billing?.upstreamPayer === "workspace") {
77
- return "byok";
78
- }
79
- return "opengeni_credits";
78
+ return modelPickerBillingClassFor(model);
80
79
  }
81
80
 
82
81
  export function billingClassLabel(billingClass: PickerBillingClass): string {
83
82
  return BILLING_CLASS_LABELS[billingClass];
84
83
  }
85
84
 
85
+ /** The group label that names the connection scope, for Models settings only. */
86
+ export function scopedBillingClassLabel(billingClass: PickerBillingClass): string {
87
+ return SCOPED_BILLING_CLASS_LABELS[billingClass];
88
+ }
89
+
86
90
  export function availabilityReasonLabel(
87
91
  reason: WorkspaceModelCatalogModel["availability"]["reason"],
88
92
  ): string | null {
@@ -121,6 +125,30 @@ export function coerceReasoningEffortForModel(
121
125
  return defaultEffortForModel(model);
122
126
  }
123
127
 
128
+ /** Whether the composer offers (and therefore labels) a reasoning-effort choice. */
129
+ export function modelOffersEffortChoice(model: ClientModel): boolean {
130
+ return (
131
+ effortOptionsForModel(model).length > 1 && model.capabilities?.reasoning.runnable !== false
132
+ );
133
+ }
134
+
135
+ /**
136
+ * The composer model pill at phone width: the catalog's compact name (falling
137
+ * back to the display name) and the effort label when effort is a choice.
138
+ */
139
+ export function compactModelPill(
140
+ models: readonly ClientModel[],
141
+ modelId: string,
142
+ effort: ReasoningEffort | null | undefined,
143
+ ): { name: string; effort: string | null } {
144
+ const row = findPickerRow(projectClientModelRows([...models]), modelId);
145
+ return {
146
+ name: row?.shortLabel ?? row?.label ?? modelDisplayName(modelId),
147
+ effort:
148
+ row && effort && modelOffersEffortChoice(row.catalog) ? labelReasoningEffort(effort) : null,
149
+ };
150
+ }
151
+
124
152
  export function runnableLatencyModesForModel(model: ClientModel): LatencyModeId[] {
125
153
  const modes = model.capabilities?.latencyModes ?? [];
126
154
  return modes.filter((mode) => mode.runnable).map((mode) => mode.id);
@@ -143,39 +171,87 @@ export function labelReasoningEffort(effort: ReasoningEffort): string {
143
171
  return effort.slice(0, 1).toUpperCase() + effort.slice(1);
144
172
  }
145
173
 
174
+ /** Payment prompts must use cost policy, never the presentation group. */
175
+ export function modelUsesCredits(model: ClientModel | undefined): boolean {
176
+ if (model?.cost !== undefined) return model.cost === "credits";
177
+ return model?.billing?.metering === "opengeni_credits";
178
+ }
179
+
146
180
  export function payerSummaryForModel(model: ClientModel): string {
181
+ if (model.cost === "free") {
182
+ return "Free in this deployment";
183
+ }
184
+ if (model.cost === "credits") {
185
+ return "Opengeni credits";
186
+ }
187
+ if (model.cost === "subscription") {
188
+ return model.credentialSource?.kind === "connected_subscription" &&
189
+ model.credentialSource.provider === "claude"
190
+ ? "Claude subscription · external billing"
191
+ : model.source === "supergrok"
192
+ ? "SuperGrok subscription · external billing"
193
+ : "Codex subscription · external billing";
194
+ }
195
+ if (model.cost === "workspace") {
196
+ return workspaceProviderPayerSummary(model);
197
+ }
198
+ if (model.cost === "organization") {
199
+ return organizationProviderPayerSummary(model);
200
+ }
201
+
202
+ // Older client-config payloads do not carry `cost`; preserve their existing
203
+ // settlement-derived label until every deployment has rolled forward.
147
204
  const billing = model.billing;
148
205
  if (!billing) {
149
206
  return "Route unknown";
150
207
  }
151
208
  if (billing.metering === "opengeni_credits") {
152
- return "OpenGeni credits · automatic managed route";
209
+ return "Opengeni credits · automatic managed route";
153
210
  }
154
211
  if (billing.upstreamPayer === "connected_subscription") {
155
- return model.source === "supergrok"
156
- ? "SuperGrok subscription · external billing"
157
- : "Codex subscription · external billing";
212
+ return model.credentialSource?.kind === "connected_subscription" &&
213
+ model.credentialSource.provider === "claude"
214
+ ? "Claude subscription · external billing"
215
+ : model.source === "supergrok"
216
+ ? "SuperGrok subscription · external billing"
217
+ : "Codex subscription · external billing";
158
218
  }
159
219
  if (billing.upstreamPayer === "workspace") {
160
- return "Billed to your AI Gateway";
220
+ return workspaceProviderPayerSummary(model);
161
221
  }
162
- return "External provider · no OpenGeni credits";
222
+ if (billing.upstreamPayer === "organization") {
223
+ return organizationProviderPayerSummary(model);
224
+ }
225
+ return billing.upstreamPayer === "deployment"
226
+ ? "Opengeni · no model credits"
227
+ : "External provider · no Opengeni credits";
163
228
  }
164
229
 
165
230
  export function advancedSourceSummary(model: ClientModel): string | null {
166
231
  const source = model.credentialSource;
167
232
  if (!source) {
168
233
  return model.billing?.metering === "external" && model.billing.upstreamPayer === "deployment"
169
- ? "Deployment route · no authentication"
234
+ ? "Deployment-provided connection"
170
235
  : null;
171
236
  }
172
237
  if (source.kind === "connected_subscription") {
173
- return source.provider === "xai"
174
- ? "Connected SuperGrok subscription"
175
- : "Connected Codex subscription";
238
+ return source.provider === "claude"
239
+ ? "Connected Claude subscription"
240
+ : source.provider === "xai"
241
+ ? "Connected SuperGrok subscription"
242
+ : "Connected Codex subscription";
176
243
  }
177
244
  if (source.kind === "workspace_connection") {
178
- return "Workspace AI Gateway";
245
+ if (model.provider === "workspace-openrouter") {
246
+ return "Workspace OpenRouter connection";
247
+ }
248
+ if (model.provider === "workspace-opper") {
249
+ return "Workspace Opper connection";
250
+ }
251
+ if (model.provider === "workspace-gateway" || model.source === "workspace_gateway") {
252
+ return "Workspace Vercel AI Gateway";
253
+ }
254
+ return "Workspace provider connection";
179
255
  }
180
256
  if (source.kind === "deployment") {
181
257
  return source.mechanism === "azure_ad_bearer"
@@ -185,21 +261,98 @@ export function advancedSourceSummary(model: ClientModel): string | null {
185
261
  return null;
186
262
  }
187
263
 
264
+ function workspaceProviderPayerSummary(model: ClientModel): string {
265
+ if (model.provider === "workspace-anthropic")
266
+ return "Billed to the workspace Anthropic API account";
267
+ if (model.provider === "workspace-claude-subscription")
268
+ return "Uses the workspace Claude subscription · no Opengeni credits";
269
+ if (model.provider === "workspace-openrouter") {
270
+ return "Billed to the workspace OpenRouter account";
271
+ }
272
+ if (model.provider === "workspace-opper") {
273
+ return "Billed to the workspace Opper account";
274
+ }
275
+ if (model.provider === "workspace-gateway" || model.source === "workspace_gateway") {
276
+ return "Billed to the workspace Vercel account";
277
+ }
278
+ return "Billed to the workspace provider account";
279
+ }
280
+
281
+ function organizationProviderPayerSummary(model: ClientModel): string {
282
+ if (model.provider === "organization-anthropic")
283
+ return "Billed to the organization Anthropic API account";
284
+ if (model.provider === "organization-claude-subscription")
285
+ return "Uses the connected Claude subscription · no Opengeni credits";
286
+ if (model.provider === "organization-openrouter") {
287
+ return "Billed to the organization OpenRouter account";
288
+ }
289
+ if (model.provider === "organization-opper") {
290
+ return "Billed to the organization Opper account";
291
+ }
292
+ if (model.provider === "organization-gateway") {
293
+ return "Billed to the organization Vercel account";
294
+ }
295
+ return "Billed to the organization provider account";
296
+ }
297
+
298
+ /**
299
+ * The curated compact label, else a derived one for narrow triggers: the name
300
+ * without trailing access and release-stage qualifiers ("Muse Spark 1.3
301
+ * Contributor Free" → "Muse Spark 1.3"), which the picker's groups and
302
+ * descriptions already carry. Claude names are already family-free
303
+ * ("Opus 5.5") in the shared display name.
304
+ */
305
+ function compactLabel(catalog: ClientModel): { shortLabel?: string } {
306
+ if (catalog.shortLabel) return { shortLabel: catalog.shortLabel };
307
+ const name = modelDisplayName(catalog);
308
+ const trimmed = withoutTrailingQualifiers(name);
309
+ return trimmed !== name ? { shortLabel: trimmed } : {};
310
+ }
311
+
312
+ const TRAILING_QUALIFIERS = new Set([
313
+ "free",
314
+ "contributor",
315
+ "preview",
316
+ "beta",
317
+ "experimental",
318
+ "exp",
319
+ "latest",
320
+ ]);
321
+
322
+ /** Drops trailing qualifier words ("Free", "Preview", "(free)") while a name remains. */
323
+ function withoutTrailingQualifiers(name: string): string {
324
+ const words = name.trim().split(/\s+/u);
325
+ while (words.length > 1) {
326
+ const last = words
327
+ .at(-1)!
328
+ .replace(/^[([]|[)\]]$/gu, "")
329
+ .toLowerCase();
330
+ if (!TRAILING_QUALIFIERS.has(last)) break;
331
+ words.pop();
332
+ }
333
+ return words.join(" ");
334
+ }
335
+
188
336
  export function projectPickerRows(models: WorkspaceModelCatalogModel[]): PickerModelRow[] {
189
337
  return models
190
- .filter((catalog) => {
191
- const billingClass = billingClassForModel(catalog);
192
- return billingClass === "opengeni_credits" || catalog.credentialReadiness.status === "ready";
193
- })
338
+ .filter((catalog) => catalog.credentialReadiness.status === "ready")
194
339
  .map((catalog) => {
195
340
  const billingClass = billingClassForModel(catalog);
196
341
  return {
197
342
  id: catalog.id,
198
- label: catalog.label,
199
- ...(catalog.shortLabel ? { shortLabel: catalog.shortLabel } : {}),
343
+ label: modelDisplayName(catalog),
344
+ ...compactLabel(catalog),
200
345
  billingClass,
201
346
  billingClassLabel: billingClassLabel(billingClass),
202
347
  selectable: catalog.availability.selectable,
348
+ fundingHint:
349
+ catalog.creditFunding === "promotional"
350
+ ? "Free credits"
351
+ : catalog.creditFunding === "general"
352
+ ? "Uses credits"
353
+ : catalog.creditFunding === "unavailable"
354
+ ? "Needs credits"
355
+ : undefined,
203
356
  unavailableReason: catalog.availability.selectable
204
357
  ? null
205
358
  : availabilityReasonLabel(catalog.availability.reason),
@@ -216,8 +369,8 @@ export function projectClientModelRows(models: ClientModel[]): PickerModelRow<Cl
216
369
  const billingClass = billingClassForModel(catalog);
217
370
  return {
218
371
  id: catalog.id,
219
- label: catalog.label,
220
- ...(catalog.shortLabel ? { shortLabel: catalog.shortLabel } : {}),
372
+ label: modelDisplayName(catalog),
373
+ ...compactLabel(catalog),
221
374
  billingClass,
222
375
  billingClassLabel: billingClassLabel(billingClass),
223
376
  selectable: true,
@@ -232,18 +385,7 @@ export function projectClientModelRows(models: ClientModel[]): PickerModelRow<Cl
232
385
  export function sortPickerRows<TCatalog extends ClientModel>(
233
386
  rows: PickerModelRow<TCatalog>[],
234
387
  ): PickerModelRow<TCatalog>[] {
235
- return [...rows].sort((left, right) => {
236
- const classDelta =
237
- BILLING_CLASS_ORDER.indexOf(left.billingClass) -
238
- BILLING_CLASS_ORDER.indexOf(right.billingClass);
239
- if (classDelta !== 0) {
240
- return classDelta;
241
- }
242
- if (left.selectable !== right.selectable) {
243
- return left.selectable ? -1 : 1;
244
- }
245
- return left.label.localeCompare(right.label);
246
- });
388
+ return [...rows].sort(compareModelPickerOrder);
247
389
  }
248
390
 
249
391
  export function findPickerRow<TCatalog extends ClientModel>(
@@ -253,11 +395,62 @@ export function findPickerRow<TCatalog extends ClientModel>(
253
395
  return rows.find((row) => row.id === modelId) ?? null;
254
396
  }
255
397
 
398
+ export type GroupPickerRowsOptions = {
399
+ codexOnly?: boolean;
400
+ /**
401
+ * Default true: organization- and workspace-connected keys share one group
402
+ * and identical copies show once. Models settings passes false.
403
+ */
404
+ collapseScopes?: boolean | undefined;
405
+ /** Kept visible when it has an identical twin (see below). */
406
+ selectedId?: string | undefined;
407
+ };
408
+
409
+ /**
410
+ * Organization- and workspace-connected API keys are one choice for the person
411
+ * picking a model, so they share one group.
412
+ */
413
+ function displayGroupFor(billingClass: PickerBillingClass): PickerBillingClass {
414
+ return billingClass === "organization_byok" ? "byok" : billingClass;
415
+ }
416
+
417
+ /**
418
+ * The same model through the same provider kind, whichever scope connected it:
419
+ * `organization-anthropic/claude-opus-5-5` and `workspace-anthropic/claude-opus-5-5`
420
+ * share a key, while OpenRouter and the Anthropic API never do (different
421
+ * accounts and bills).
422
+ */
423
+ function scopeFreeIdentity(row: PickerModelRow<ClientModel>): string | null {
424
+ const provider = row.provider.replace(/^(?:organization|workspace)-/, "");
425
+ if (provider === row.provider) return null;
426
+ const upstream =
427
+ row.catalog.deployment?.upstreamModelId ??
428
+ (row.id.startsWith(`${row.provider}/`) ? row.id.slice(row.provider.length + 1) : row.id);
429
+ return `${provider}\u0000${upstream}`;
430
+ }
431
+
432
+ /**
433
+ * Two rows that are the same model through the same provider kind, connected
434
+ * by the organization and by the workspace, are one choice: show one. Keep the
435
+ * current selection, else a selectable row, else the first in picker order.
436
+ */
437
+ function prefersTwin<TCatalog extends ClientModel>(
438
+ candidate: PickerModelRow<TCatalog>,
439
+ current: PickerModelRow<TCatalog>,
440
+ selectedId: string | undefined,
441
+ ): boolean {
442
+ if (selectedId !== undefined && current.id === selectedId) return false;
443
+ if (selectedId !== undefined && candidate.id === selectedId) return true;
444
+ return candidate.selectable && !current.selectable;
445
+ }
446
+
256
447
  export function groupPickerRowsByBillingClass(
257
448
  rows: PickerModelRow[],
449
+ options?: GroupPickerRowsOptions,
258
450
  ): Array<{ billingClass: PickerBillingClass; label: string; rows: PickerModelRow[] }>;
259
451
  export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
260
452
  rows: PickerModelRow<TCatalog>[],
453
+ options?: GroupPickerRowsOptions,
261
454
  ): Array<{
262
455
  billingClass: PickerBillingClass;
263
456
  label: string;
@@ -265,6 +458,7 @@ export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
265
458
  }>;
266
459
  export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
267
460
  rows: PickerModelRow<TCatalog>[],
461
+ options?: GroupPickerRowsOptions,
268
462
  ): Array<{
269
463
  billingClass: PickerBillingClass;
270
464
  label: string;
@@ -277,16 +471,47 @@ export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
277
471
  rows: PickerModelRow<TCatalog>[];
278
472
  }> = [];
279
473
  for (const row of sorted) {
280
- const existing = groups.find((group) => group.billingClass === row.billingClass);
474
+ const collapse = options?.collapseScopes !== false;
475
+ const billingClass = collapse ? displayGroupFor(row.billingClass) : row.billingClass;
476
+ const existing = groups.find((group) => group.billingClass === billingClass);
281
477
  if (existing) {
282
- existing.rows.push(row);
478
+ const identity = collapse ? scopeFreeIdentity(row) : null;
479
+ const twin =
480
+ identity === null
481
+ ? -1
482
+ : existing.rows.findIndex((candidate) => scopeFreeIdentity(candidate) === identity);
483
+ if (twin < 0) {
484
+ existing.rows.push(row);
485
+ } else if (prefersTwin(row, existing.rows[twin]!, options?.selectedId)) {
486
+ existing.rows[twin] = row;
487
+ }
283
488
  continue;
284
489
  }
285
490
  groups.push({
286
- billingClass: row.billingClass,
287
- label: row.billingClassLabel,
491
+ billingClass,
492
+ label:
493
+ billingClass === row.billingClass ? row.billingClassLabel : billingClassLabel(billingClass),
288
494
  rows: [row],
289
495
  });
290
496
  }
497
+ const codexIndex = groups.findIndex((group) => group.billingClass === "codex_subscription");
498
+ const codex = groups[codexIndex];
499
+ const selectableOpenGeni = groups
500
+ .find((group) => group.billingClass === "opengeni_credits")
501
+ ?.rows.filter((row) => row.selectable);
502
+ // Presentation only: never change the catalog/default model ordering or selection.
503
+ const onlyFreeOpenGeni =
504
+ selectableOpenGeni !== undefined &&
505
+ selectableOpenGeni.length > 0 &&
506
+ selectableOpenGeni.every((row) => row.catalog.cost === "free");
507
+ if (
508
+ codex &&
509
+ codex.rows.some((row) => row.selectable) &&
510
+ (options?.codexOnly || onlyFreeOpenGeni)
511
+ ) {
512
+ groups.splice(codexIndex, 1);
513
+ groups.unshift(codex);
514
+ }
291
515
  return groups;
292
516
  }
517
+ export { modelDisplayName, modelVendor } from "@opengeni/sdk/model-display";
@@ -0,0 +1,100 @@
1
+ /**
2
+ * DOM-free building blocks for showing agent previews outside a browser page
3
+ * (React Native web views): the same documents and loading surface the web
4
+ * chat uses, as strings and pure functions.
5
+ */
6
+ import { PREVIEW_LOADING_COLORS } from "./preview-loading-paint";
7
+
8
+ export { inlineHtmlDocument } from "./components/artifacts/inline-html-document";
9
+ export {
10
+ loadSiteSnapshot,
11
+ type SiteDisplayContent,
12
+ type SiteSnapshotReadClient,
13
+ } from "./site-snapshot";
14
+ export { paintPreviewLoading, PREVIEW_LOADING_COLORS } from "./preview-loading-paint";
15
+
16
+ /** Fence languages the assistant uses for interactive previews. */
17
+ export type InteractivePreviewKind = "html" | "site";
18
+
19
+ export function interactivePreviewKind(language: string): InteractivePreviewKind | null {
20
+ return language === "opengeni-html" ? "html" : language === "opengeni-site" ? "site" : null;
21
+ }
22
+
23
+ /** A Site fence body: `{"siteId": "…", "versionId"?: "…"}`; null when malformed. */
24
+ export function parseSiteFence(content: string): { siteId: string; versionId?: string } | null {
25
+ try {
26
+ const value = JSON.parse(content) as { siteId?: unknown; versionId?: unknown };
27
+ const uuid = /^[0-9a-f-]{36}$/i;
28
+ if (!value || typeof value.siteId !== "string" || !uuid.test(value.siteId)) return null;
29
+ if (value.versionId === undefined) return { siteId: value.siteId };
30
+ return typeof value.versionId === "string" && uuid.test(value.versionId)
31
+ ? { siteId: value.siteId, versionId: value.versionId }
32
+ : null;
33
+ } catch {
34
+ return null;
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Script source of `paintPreviewLoading` (kept in lockstep by a test), for
40
+ * documents that run outside this bundle. Release React Native builds compile
41
+ * functions to bytecode, so `Function.prototype.toString` cannot be used.
42
+ */
43
+ export const PREVIEW_LOADING_PAINT_SCRIPT = `function paintPreviewLoading(context,width,height,time,ink,glowColor){
44
+ context.clearRect(0,0,width,height);
45
+ const cx=width*(0.5+0.13*Math.sin(time*0.21));
46
+ const cy=height*(0.5+0.12*Math.cos(time*0.27));
47
+ const glow=context.createRadialGradient(cx,cy,0,cx,cy,Math.max(width,height)*0.65);
48
+ glow.addColorStop(0,glowColor);glow.addColorStop(1,"transparent");
49
+ context.globalAlpha=0.09;context.fillStyle=glow;context.fillRect(0,0,width,height);
50
+ const rows=Math.ceil(height/18)+7;const cols=Math.ceil(width/18)+7;
51
+ const points=Array.from({length:rows},(_row,r)=>Array.from({length:cols},(_col,c)=>{
52
+ const x=(c-3)*18;const y=(r-3)*18;const dist=Math.hypot((x-cx)*0.8,y-cy);
53
+ const wave=Math.sin(dist*0.032-time*0.95);
54
+ return {x:x+((x-cx)/Math.max(dist,1))*wave*4,y:y+((y-cy)/Math.max(dist,1))*wave*4,l:Math.pow((wave+1)/2,5)};}));
55
+ context.strokeStyle=ink;context.fillStyle=ink;context.lineWidth=0.65;
56
+ points.forEach((row,r)=>row.forEach((p,c)=>{
57
+ context.globalAlpha=0.035+p.l*0.055;context.beginPath();
58
+ if(c+1<cols){context.moveTo(p.x,p.y);context.lineTo(row[c+1].x,row[c+1].y);}
59
+ if(r+1<rows){context.moveTo(p.x,p.y);context.lineTo(points[r+1][c].x,points[r+1][c].y);}
60
+ context.stroke();
61
+ context.globalAlpha=0.15+p.l*0.55;context.beginPath();
62
+ context.arc(p.x,p.y,0.85+p.l*0.65,0,Math.PI*2);context.fill();}));
63
+ context.globalAlpha=1;}`;
64
+
65
+ const escapeHtml = (value: string) =>
66
+ value.replace(
67
+ /[&<>"']/g,
68
+ (char) =>
69
+ ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[char] ?? char,
70
+ );
71
+
72
+ /**
73
+ * A standalone page for the web's "Preparing preview…" surface: the animated
74
+ * ripple filling the page with a steady label, for a web view while the
75
+ * assistant is still writing the preview. Never contains the unfinished fence.
76
+ */
77
+ export function previewLoadingDocument(options: {
78
+ scheme: "light" | "dark";
79
+ label?: string;
80
+ labelColor?: string;
81
+ reducedMotion?: boolean;
82
+ }): string {
83
+ const colors = PREVIEW_LOADING_COLORS[options.scheme];
84
+ const label = escapeHtml(options.label ?? "Preparing preview…");
85
+ const labelColor = options.labelColor ?? (options.scheme === "dark" ? "#a1a1a1" : "#6b6b6b");
86
+ return `<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><style>
87
+ html,body{margin:0;height:100%;overflow:hidden;background:${colors.background};-webkit-user-select:none;user-select:none}
88
+ canvas{position:fixed;inset:0;width:100%;height:100%;display:block}
89
+ span{position:fixed;left:16px;bottom:14px;color:${labelColor};font:400 12px/16px -apple-system,system-ui,sans-serif}
90
+ </style></head><body><canvas aria-hidden="true"></canvas><span role="status">${label}</span><script>
91
+ ${PREVIEW_LOADING_PAINT_SCRIPT}
92
+ (()=>{const canvas=document.querySelector("canvas");const context=canvas.getContext("2d");if(!context)return;
93
+ const still=${options.reducedMotion === true};let time=2;let last;
94
+ const draw=()=>{const w=canvas.clientWidth,h=canvas.clientHeight;if(!w||!h)return;const d=Math.min(window.devicePixelRatio||1,2);
95
+ if(canvas.width!==Math.round(w*d)||canvas.height!==Math.round(h*d)){canvas.width=Math.round(w*d);canvas.height=Math.round(h*d);}
96
+ context.setTransform(d,0,0,d,0,0);paintPreviewLoading(context,w,h,time,${JSON.stringify(colors.ink)},${JSON.stringify(colors.glow)});};
97
+ const tick=(stamp)=>{if(!document.hidden){if(last!==undefined)time+=Math.min((stamp-last)/1000,0.05);last=stamp;draw();}else last=undefined;requestAnimationFrame(tick);};
98
+ window.addEventListener("resize",draw);draw();if(!still)requestAnimationFrame(tick);})();
99
+ </script></body></html>`;
100
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The new-session composer's server-authoritative draft (text, model, options,
3
+ * project, attachments), shared by the web app and native apps so a draft
4
+ * started on one device continues on another.
5
+ */
6
+ export {
7
+ isNewSessionDraftConflict,
8
+ useNewSessionDraft,
9
+ type AcknowledgeConsumedNewSessionDraftResult,
10
+ type FlushedNewSessionDraft,
11
+ type NewSessionDraftEditable,
12
+ type UseNewSessionDraftOptions,
13
+ type UseNewSessionDraftResult,
14
+ } from "./hooks/use-new-session-draft";
15
+ export {
16
+ isTransientServiceFailure,
17
+ OPENGENI_UPDATING_NOTICE,
18
+ retryTransient,
19
+ TRANSIENT_RECONNECT_INTERVAL_MS,
20
+ TRANSIENT_RETRY_DELAYS_MS,
21
+ type RetryTransientOptions,
22
+ } from "./lib/transient-retry";