@opengeni/react 3.3.2-canary.1 → 3.4.0

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-ZKNTK7IA.js → chunk-2I6R3GCZ.js} +4284 -3983
  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-E5KISKFG.js → chunk-X5UVUIMF.js} +1709 -1184
  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 +10 -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 +28 -2
  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 +390 -191
  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 -454
  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 +53 -3
  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 +261 -27
  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 +2318 -752
  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-4MDLEHXL.js.map +0 -1
  814. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  815. package/dist/chunk-7EAFGICR.js +0 -302
  816. package/dist/chunk-7EAFGICR.js.map +0 -1
  817. package/dist/chunk-7KBJLTKS.js +0 -494
  818. package/dist/chunk-7KBJLTKS.js.map +0 -1
  819. package/dist/chunk-E5KISKFG.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-X5S426G2.js +0 -217
  836. package/dist/chunk-X5S426G2.js.map +0 -1
  837. package/dist/chunk-YG4QEQF5.js +0 -9557
  838. package/dist/chunk-YG4QEQF5.js.map +0 -1
  839. package/dist/chunk-YVCHAQZY.js.map +0 -1
  840. package/dist/chunk-ZKNTK7IA.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
@@ -3,6 +3,7 @@ import {
3
3
  modelPickerBillingClassFor,
4
4
  type ModelPickerBillingClass,
5
5
  } from "@opengeni/sdk/model-picker-order";
6
+ import { modelDisplayName } from "@opengeni/sdk/model-display";
6
7
  import type { ClientModel, ReasoningEffort, WorkspaceModelCatalogModel } from "@opengeni/sdk";
7
8
 
8
9
  export type PickerBillingClass = ModelPickerBillingClass;
@@ -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;
@@ -24,11 +26,22 @@ export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogM
24
26
  export type LatencyModeId = "standard" | "priority" | "fast";
25
27
 
26
28
  const BILLING_CLASS_LABELS: Record<PickerBillingClass, string> = {
27
- opengeni_credits: "OpenGeni",
29
+ opengeni_credits: "Models",
28
30
  external: "External",
29
31
  codex_subscription: "Codex",
30
32
  supergrok_subscription: "SuperGrok",
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,
31
43
  byok: "Workspace providers",
44
+ organization_byok: "Organization providers",
32
45
  };
33
46
 
34
47
  const AVAILABILITY_REASON_LABELS: Record<string, string> = {
@@ -39,10 +52,27 @@ const AVAILABILITY_REASON_LABELS: Record<string, string> = {
39
52
  provider_unhealthy: "Provider unavailable",
40
53
  policy_blocked: "Blocked by workspace policy",
41
54
  unsupported: "Unsupported",
55
+ credits_disabled: "Opengeni credits off",
42
56
  };
43
57
 
44
58
  export function billingClassForModel(model: ClientModel): PickerBillingClass {
45
- if (model.provider === "workspace-gateway" || model.provider === "workspace-openrouter") {
59
+ if (
60
+ model.provider === "organization-gateway" ||
61
+ model.provider === "organization-openrouter" ||
62
+ model.provider === "organization-opper"
63
+ ) {
64
+ return "organization_byok";
65
+ }
66
+ if (
67
+ model.provider?.startsWith("workspace-openai-") ||
68
+ model.provider?.startsWith("workspace-azure-openai-")
69
+ )
70
+ return "byok";
71
+ if (
72
+ model.provider === "workspace-gateway" ||
73
+ model.provider === "workspace-openrouter" ||
74
+ model.provider === "workspace-opper"
75
+ ) {
46
76
  return "byok";
47
77
  }
48
78
  return modelPickerBillingClassFor(model);
@@ -52,6 +82,11 @@ export function billingClassLabel(billingClass: PickerBillingClass): string {
52
82
  return BILLING_CLASS_LABELS[billingClass];
53
83
  }
54
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
+
55
90
  export function availabilityReasonLabel(
56
91
  reason: WorkspaceModelCatalogModel["availability"]["reason"],
57
92
  ): string | null {
@@ -90,6 +125,30 @@ export function coerceReasoningEffortForModel(
90
125
  return defaultEffortForModel(model);
91
126
  }
92
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
+
93
152
  export function runnableLatencyModesForModel(model: ClientModel): LatencyModeId[] {
94
153
  const modes = model.capabilities?.latencyModes ?? [];
95
154
  return modes.filter((mode) => mode.runnable).map((mode) => mode.id);
@@ -112,21 +171,33 @@ export function labelReasoningEffort(effort: ReasoningEffort): string {
112
171
  return effort.slice(0, 1).toUpperCase() + effort.slice(1);
113
172
  }
114
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
+
115
180
  export function payerSummaryForModel(model: ClientModel): string {
116
181
  if (model.cost === "free") {
117
182
  return "Free in this deployment";
118
183
  }
119
184
  if (model.cost === "credits") {
120
- return "OpenGeni credits";
185
+ return "Opengeni credits";
121
186
  }
122
187
  if (model.cost === "subscription") {
123
- return model.source === "supergrok"
124
- ? "SuperGrok subscription · external billing"
125
- : "Codex subscription · external billing";
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";
126
194
  }
127
195
  if (model.cost === "workspace") {
128
196
  return workspaceProviderPayerSummary(model);
129
197
  }
198
+ if (model.cost === "organization") {
199
+ return organizationProviderPayerSummary(model);
200
+ }
130
201
 
131
202
  // Older client-config payloads do not carry `cost`; preserve their existing
132
203
  // settlement-derived label until every deployment has rolled forward.
@@ -135,35 +206,48 @@ export function payerSummaryForModel(model: ClientModel): string {
135
206
  return "Route unknown";
136
207
  }
137
208
  if (billing.metering === "opengeni_credits") {
138
- return "OpenGeni credits · automatic managed route";
209
+ return "Opengeni credits · automatic managed route";
139
210
  }
140
211
  if (billing.upstreamPayer === "connected_subscription") {
141
- return model.source === "supergrok"
142
- ? "SuperGrok subscription · external billing"
143
- : "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";
144
218
  }
145
219
  if (billing.upstreamPayer === "workspace") {
146
220
  return workspaceProviderPayerSummary(model);
147
221
  }
148
- 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";
149
228
  }
150
229
 
151
230
  export function advancedSourceSummary(model: ClientModel): string | null {
152
231
  const source = model.credentialSource;
153
232
  if (!source) {
154
233
  return model.billing?.metering === "external" && model.billing.upstreamPayer === "deployment"
155
- ? "Deployment route · no authentication"
234
+ ? "Deployment-provided connection"
156
235
  : null;
157
236
  }
158
237
  if (source.kind === "connected_subscription") {
159
- return source.provider === "xai"
160
- ? "Connected SuperGrok subscription"
161
- : "Connected Codex subscription";
238
+ return source.provider === "claude"
239
+ ? "Connected Claude subscription"
240
+ : source.provider === "xai"
241
+ ? "Connected SuperGrok subscription"
242
+ : "Connected Codex subscription";
162
243
  }
163
244
  if (source.kind === "workspace_connection") {
164
245
  if (model.provider === "workspace-openrouter") {
165
246
  return "Workspace OpenRouter connection";
166
247
  }
248
+ if (model.provider === "workspace-opper") {
249
+ return "Workspace Opper connection";
250
+ }
167
251
  if (model.provider === "workspace-gateway" || model.source === "workspace_gateway") {
168
252
  return "Workspace Vercel AI Gateway";
169
253
  }
@@ -178,30 +262,97 @@ export function advancedSourceSummary(model: ClientModel): string | null {
178
262
  }
179
263
 
180
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";
181
269
  if (model.provider === "workspace-openrouter") {
182
270
  return "Billed to the workspace OpenRouter account";
183
271
  }
272
+ if (model.provider === "workspace-opper") {
273
+ return "Billed to the workspace Opper account";
274
+ }
184
275
  if (model.provider === "workspace-gateway" || model.source === "workspace_gateway") {
185
276
  return "Billed to the workspace Vercel account";
186
277
  }
187
278
  return "Billed to the workspace provider account";
188
279
  }
189
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
+
190
336
  export function projectPickerRows(models: WorkspaceModelCatalogModel[]): PickerModelRow[] {
191
337
  return models
192
- .filter((catalog) => {
193
- const billingClass = billingClassForModel(catalog);
194
- return billingClass === "opengeni_credits" || catalog.credentialReadiness.status === "ready";
195
- })
338
+ .filter((catalog) => catalog.credentialReadiness.status === "ready")
196
339
  .map((catalog) => {
197
340
  const billingClass = billingClassForModel(catalog);
198
341
  return {
199
342
  id: catalog.id,
200
- label: catalog.label,
201
- ...(catalog.shortLabel ? { shortLabel: catalog.shortLabel } : {}),
343
+ label: modelDisplayName(catalog),
344
+ ...compactLabel(catalog),
202
345
  billingClass,
203
346
  billingClassLabel: billingClassLabel(billingClass),
204
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,
205
356
  unavailableReason: catalog.availability.selectable
206
357
  ? null
207
358
  : availabilityReasonLabel(catalog.availability.reason),
@@ -218,8 +369,8 @@ export function projectClientModelRows(models: ClientModel[]): PickerModelRow<Cl
218
369
  const billingClass = billingClassForModel(catalog);
219
370
  return {
220
371
  id: catalog.id,
221
- label: catalog.label,
222
- ...(catalog.shortLabel ? { shortLabel: catalog.shortLabel } : {}),
372
+ label: modelDisplayName(catalog),
373
+ ...compactLabel(catalog),
223
374
  billingClass,
224
375
  billingClassLabel: billingClassLabel(billingClass),
225
376
  selectable: true,
@@ -244,11 +395,62 @@ export function findPickerRow<TCatalog extends ClientModel>(
244
395
  return rows.find((row) => row.id === modelId) ?? null;
245
396
  }
246
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
+
247
447
  export function groupPickerRowsByBillingClass(
248
448
  rows: PickerModelRow[],
449
+ options?: GroupPickerRowsOptions,
249
450
  ): Array<{ billingClass: PickerBillingClass; label: string; rows: PickerModelRow[] }>;
250
451
  export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
251
452
  rows: PickerModelRow<TCatalog>[],
453
+ options?: GroupPickerRowsOptions,
252
454
  ): Array<{
253
455
  billingClass: PickerBillingClass;
254
456
  label: string;
@@ -256,6 +458,7 @@ export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
256
458
  }>;
257
459
  export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
258
460
  rows: PickerModelRow<TCatalog>[],
461
+ options?: GroupPickerRowsOptions,
259
462
  ): Array<{
260
463
  billingClass: PickerBillingClass;
261
464
  label: string;
@@ -268,16 +471,47 @@ export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
268
471
  rows: PickerModelRow<TCatalog>[];
269
472
  }> = [];
270
473
  for (const row of sorted) {
271
- 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);
272
477
  if (existing) {
273
- 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
+ }
274
488
  continue;
275
489
  }
276
490
  groups.push({
277
- billingClass: row.billingClass,
278
- label: row.billingClassLabel,
491
+ billingClass,
492
+ label:
493
+ billingClass === row.billingClass ? row.billingClassLabel : billingClassLabel(billingClass),
279
494
  rows: [row],
280
495
  });
281
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
+ }
282
515
  return groups;
283
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";
@@ -0,0 +1,81 @@
1
+ /*
2
+ * The small text format of an agent's notification, shared by every surface
3
+ * that shows one (the web inbox, the native inbox): short paragraphs and "- "
4
+ * bullets, with **bold**, `code` and [links](https://…) inside a line.
5
+ * Anything else is shown as written. The phone's lock screen gets plain text
6
+ * from the server instead.
7
+ */
8
+
9
+ export type NotificationSpan =
10
+ | { kind: "text"; text: string }
11
+ | { kind: "bold"; text: string }
12
+ | { kind: "code"; text: string }
13
+ | { kind: "link"; text: string; href: string };
14
+
15
+ export type NotificationBlock =
16
+ | { kind: "paragraph"; spans: NotificationSpan[] }
17
+ | { kind: "bullets"; items: NotificationSpan[][] };
18
+
19
+ const INLINE = /\*\*(.+?)\*\*|__(.+?)__|`([^`]+)`|\[([^\]]+)\]\((https:\/\/[^\s)]+)\)/gu;
20
+
21
+ /** One line's spans. Only https links become links. */
22
+ export function parseNotificationInline(line: string): NotificationSpan[] {
23
+ const spans: NotificationSpan[] = [];
24
+ let last = 0;
25
+ for (const match of line.matchAll(INLINE)) {
26
+ const index = match.index ?? 0;
27
+ if (index > last) spans.push({ kind: "text", text: line.slice(last, index) });
28
+ const [, bold, boldAlt, code, linkText, href] = match;
29
+ if (bold ?? boldAlt) spans.push({ kind: "bold", text: (bold ?? boldAlt)! });
30
+ else if (code) spans.push({ kind: "code", text: code });
31
+ else if (linkText && href) spans.push({ kind: "link", text: linkText, href });
32
+ last = index + match[0].length;
33
+ }
34
+ if (last < line.length) spans.push({ kind: "text", text: line.slice(last) });
35
+ return spans;
36
+ }
37
+
38
+ /** Paragraphs (blank-line separated; single line breaks kept) and bullet lists. */
39
+ export function parseNotificationText(text: string): NotificationBlock[] {
40
+ const blocks: NotificationBlock[] = [];
41
+ let paragraph: string[] = [];
42
+ let bullets: NotificationSpan[][] = [];
43
+ const flushParagraph = () => {
44
+ if (paragraph.length === 0) return;
45
+ blocks.push({ kind: "paragraph", spans: parseNotificationInline(paragraph.join("\n")) });
46
+ paragraph = [];
47
+ };
48
+ const flushBullets = () => {
49
+ if (bullets.length === 0) return;
50
+ blocks.push({ kind: "bullets", items: bullets });
51
+ bullets = [];
52
+ };
53
+ for (const raw of text.replace(/\r\n?/gu, "\n").split("\n")) {
54
+ const line = raw.trimEnd();
55
+ const bullet = /^\s*[-*•]\s+(.*)$/u.exec(line);
56
+ if (bullet) {
57
+ flushParagraph();
58
+ bullets.push(parseNotificationInline(bullet[1]!));
59
+ } else if (line.trim() === "") {
60
+ flushParagraph();
61
+ flushBullets();
62
+ } else {
63
+ flushBullets();
64
+ paragraph.push(line.trim());
65
+ }
66
+ }
67
+ flushParagraph();
68
+ flushBullets();
69
+ return blocks;
70
+ }
71
+
72
+ /** The text as one plain line, for previews that clamp to a line or two. */
73
+ export function notificationPlainText(text: string): string {
74
+ return parseNotificationText(text)
75
+ .map((block) =>
76
+ block.kind === "paragraph"
77
+ ? block.spans.map((span) => span.text).join("")
78
+ : block.items.map((spans) => `• ${spans.map((span) => span.text).join("")}`).join("\n"),
79
+ )
80
+ .join("\n");
81
+ }