@opengeni/react 3.3.2 → 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-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +12 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +30 -3
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +404 -195
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -429
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +80 -4
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +299 -74
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2319 -748
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-2DZVYHVO.js +0 -470
  814. package/dist/chunk-2DZVYHVO.js.map +0 -1
  815. package/dist/chunk-3AGBGTRT.js.map +0 -1
  816. package/dist/chunk-4MDLEHXL.js.map +0 -1
  817. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  818. package/dist/chunk-7EAFGICR.js +0 -302
  819. package/dist/chunk-7EAFGICR.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X4A66EWZ.js +0 -223
  836. package/dist/chunk-X4A66EWZ.js.map +0 -1
  837. package/dist/chunk-XYRDDSXF.js.map +0 -1
  838. package/dist/chunk-YG4QEQF5.js +0 -9557
  839. package/dist/chunk-YG4QEQF5.js.map +0 -1
  840. package/dist/chunk-YVCHAQZY.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
@@ -0,0 +1,529 @@
1
+ import { type CSSProperties, type RefObject, useLayoutEffect, useEffect, useState } from "react";
2
+ import { markClassicScrollbars } from "./scrollbars";
3
+
4
+ /* ----------------------------------------------------------------------------
5
+ Host theme
6
+
7
+ The embedded chat should look native in someone else's product with zero
8
+ styling. Two things decide that:
9
+
10
+ 1. Light or dark follows the HOST, not the operating system. An explicit
11
+ `theme` prop wins; then the nearest `data-og-theme` / `.og-light`
12
+ ancestor; then the host's own signals on <html>/<body> (`class="dark"`,
13
+ `data-theme`, `data-mode`, `data-bs-theme`, ...); then the background
14
+ the chat actually sits on; then the host's explicit `color-scheme` (which
15
+ also colors an unpainted page canvas). A host whose page stays light while
16
+ the OS is dark gets a light chat.
17
+
18
+ 2. Surfaces derive from the host background ("host" surface), so a navy app
19
+ gets navy-tinted cards instead of neutral grey boxes, and a white app gets
20
+ a white chat instead of a grey panel. Each surface is an opaque mix of the
21
+ host background and the theme's text color, so portalled menus that copy
22
+ the tokens stay opaque. A host that customizes the `--og-color-*` surface
23
+ tokens keeps them: blending only replaces the stock defaults, and only
24
+ when the background agrees with the resolved theme.
25
+
26
+ An embed root nested in another (the conversation inside OpenGeniChat)
27
+ inherits the enclosing root's resolution instead of resolving again.
28
+ -------------------------------------------------------------------------- */
29
+
30
+ /** Marks an embed root that resolves the host theme for its subtree. */
31
+ export const HOST_THEME_ROOT_ATTRIBUTE = "data-og-host-theme";
32
+
33
+ export type HostThemePreference = "auto" | "light" | "dark";
34
+ export type HostSurfacePreference = "host" | "theme";
35
+ export type ResolvedHostTheme = "light" | "dark";
36
+
37
+ const HOST_THEME_ATTRIBUTES = [
38
+ "data-theme",
39
+ "data-mode",
40
+ "data-color-mode",
41
+ "data-color-scheme",
42
+ "data-bs-theme",
43
+ "data-mantine-color-scheme",
44
+ ] as const;
45
+
46
+ /**
47
+ * Stock literal color tokens as `[dark, light]`, mirroring `styles/tokens.css`
48
+ * (a test keeps them in sync). A different value inherited from the host means
49
+ * the host customized that token.
50
+ */
51
+ export const STOCK_COLOR_TOKENS: Readonly<Record<string, readonly [string, string]>> = {
52
+ "--og-color-bg": ["#303030", "#f6f6f6"],
53
+ "--og-color-canvas": ["#202020", "#ffffff"],
54
+ "--og-color-surface-1": ["#333333", "#ffffff"],
55
+ "--og-color-surface-2": ["#383838", "#eeeeee"],
56
+ "--og-color-surface-3": ["#404040", "#e5e5e5"],
57
+ "--og-color-selection": ["#484848", "#e2e2e2"],
58
+ "--og-color-border": ["#454545", "#dedede"],
59
+ "--og-color-border-strong": ["#555555", "#bdbdbd"],
60
+ "--og-color-fg": ["#e6e6e6", "#242424"],
61
+ "--og-color-fg-label": ["#d4d4d4", "#3a3a3a"],
62
+ "--og-color-fg-muted": ["#b8b8b8", "#5f5f5f"],
63
+ "--og-color-fg-subtle": ["#a3a3a3", "#696969"],
64
+ "--og-color-accent": ["#c4c4c4", "#545454"],
65
+ "--og-color-accent-strong": ["#dcdcdc", "#383838"],
66
+ "--og-color-accent-deep": ["#d5d5d5", "#383838"],
67
+ "--og-color-accent-fg": ["#242424", "#ffffff"],
68
+ "--og-color-primary": ["#2b3432", "#ebf2f0"],
69
+ "--og-color-primary-fg": ["#eeeeee", "#292929"],
70
+ "--og-color-primary-border": ["#4e5e59", "#c4d5d0"],
71
+ "--og-color-switch-track": ["#454545", "#bdbdbd"],
72
+ "--og-color-switch-thumb": ["#a3a3a3", "#ffffff"],
73
+ "--og-color-status-queued": ["#a3a3a3", "#696969"],
74
+ "--og-color-status-running": ["#d5bd72", "#716122"],
75
+ "--og-color-status-idle": ["#83cbb0", "#237058"],
76
+ "--og-color-status-waiting": ["#e9ab77", "#8c5524"],
77
+ "--og-color-status-failed": ["oklch(0.77 0.12 22)", "oklch(0.5 0.19 22)"],
78
+ "--og-color-status-cancelled": ["#a3a3a3", "#696969"],
79
+ "--og-color-danger": ["oklch(0.76 0.13 22)", "oklch(0.52 0.2 22)"],
80
+ "--og-color-danger-fill": ["oklch(0.52 0.16 22)", "oklch(0.5 0.19 22)"],
81
+ "--og-color-danger-fg": ["#ffffff", "#ffffff"],
82
+ };
83
+
84
+ const SURFACE_TOKENS = [
85
+ "--og-color-canvas",
86
+ "--og-color-bg",
87
+ "--og-color-surface-1",
88
+ "--og-color-surface-2",
89
+ ] as const;
90
+
91
+ /** Percent of the theme's text color mixed into the host background. */
92
+ const SURFACE_MIX: Record<ResolvedHostTheme, Record<string, number>> = {
93
+ light: {
94
+ "--og-color-canvas": 0,
95
+ "--og-color-bg": 0,
96
+ "--og-color-surface-1": 0,
97
+ "--og-color-surface-2": 5,
98
+ "--og-color-surface-3": 8,
99
+ "--og-color-selection": 9,
100
+ "--og-color-border": 11,
101
+ "--og-color-border-strong": 24,
102
+ },
103
+ dark: {
104
+ "--og-color-canvas": 0,
105
+ "--og-color-bg": 0,
106
+ "--og-color-surface-1": 5,
107
+ "--og-color-surface-2": 8,
108
+ "--og-color-surface-3": 12,
109
+ "--og-color-selection": 15,
110
+ "--og-color-border": 14,
111
+ "--og-color-border-strong": 24,
112
+ },
113
+ };
114
+
115
+ /**
116
+ * Tokens derived from the surfaces (or theme-tuned shadows), redeclared on the
117
+ * root whenever its surfaces or theme are replaced inline: custom properties
118
+ * resolve `var()` where they are declared, so values computed on an ancestor
119
+ * would otherwise keep the ancestor's surfaces.
120
+ */
121
+ const DERIVED_TOKENS: Record<ResolvedHostTheme, Record<string, string>> = {
122
+ light: {
123
+ "--og-session-chrome-surface":
124
+ "color-mix(in oklch, var(--og-color-surface-2) 88%, transparent)",
125
+ "--og-session-chrome-surface-open": "var(--og-color-surface-2)",
126
+ "--og-session-chrome-border": "color-mix(in oklch, var(--og-color-border) 90%, transparent)",
127
+ "--og-session-chrome-border-open": "var(--og-color-border)",
128
+ "--og-session-chrome-highlight": "var(--og-color-surface-3)",
129
+ "--og-session-chrome-row-hover":
130
+ "color-mix(in oklch, var(--og-color-surface-3) 70%, transparent)",
131
+ },
132
+ dark: {
133
+ "--og-session-chrome-surface":
134
+ "color-mix(in oklch, var(--og-color-surface-2) 82%, transparent)",
135
+ "--og-session-chrome-surface-open":
136
+ "color-mix(in oklch, var(--og-color-surface-2) 92%, transparent)",
137
+ "--og-session-chrome-border": "color-mix(in oklch, var(--og-color-border) 85%, transparent)",
138
+ "--og-session-chrome-border-open": "var(--og-color-border)",
139
+ "--og-session-chrome-highlight": "var(--og-color-surface-3)",
140
+ "--og-session-chrome-row-hover":
141
+ "color-mix(in oklch, var(--og-color-surface-3) 55%, transparent)",
142
+ },
143
+ };
144
+
145
+ /** The rest of the stock dark theme, for a dark root under a light ancestor. */
146
+ const DARK_RESET_EXTRA: Record<string, string> = {
147
+ "--og-color-hover": "color-mix(in srgb, var(--og-color-fg) 8%, transparent)",
148
+ "--og-color-accent-soft": "color-mix(in oklch, var(--og-color-accent) 16%, transparent)",
149
+ "--og-color-primary-hover":
150
+ "color-mix(in srgb, var(--og-color-primary) 85%, var(--og-color-primary-fg))",
151
+ "--og-color-diff-add-bg": "color-mix(in oklch, var(--og-color-status-idle) 14%, transparent)",
152
+ "--og-color-diff-del-bg": "color-mix(in oklch, var(--og-color-status-failed) 14%, transparent)",
153
+ "--og-shadow-sm": "0 1px 2px oklch(0 0 0 / 0.28)",
154
+ "--og-shadow-md": "0 2px 8px oklch(0 0 0 / 0.32), 0 1px 2px oklch(0 0 0 / 0.24)",
155
+ "--og-shadow-lg": "0 8px 28px oklch(0 0 0 / 0.42), 0 2px 8px oklch(0 0 0 / 0.28)",
156
+ "--og-shadow-glow": "0 0 24px color-mix(in oklch, var(--og-color-accent) 10%, transparent)",
157
+ "--og-glow-teal": "#79d9c125",
158
+ "--og-glow-peach": "#ffb78724",
159
+ "--og-glow-teal-quiet": "#79d9c115",
160
+ "--og-glow-peach-quiet": "#ffb78714",
161
+ "--og-session-chrome-highlight-ring": "color-mix(in oklch, var(--og-color-fg) 16%, transparent)",
162
+ "--og-session-chrome-shadow": "0 6px 22px -14px oklch(0 0 0 / 0.42)",
163
+ "--og-session-chrome-shadow-open": "0 10px 28px -16px oklch(0 0 0 / 0.5)",
164
+ "--_og-color-scheme": "dark",
165
+ colorScheme: "dark",
166
+ };
167
+
168
+ /** Neutral tokens are designed for one theme; brand/status tokens travel. */
169
+ const NEUTRAL_TOKEN =
170
+ /^--og-color-(bg|canvas|surface-\d|selection|border(-strong)?|fg(-\w+)?|switch-\w+)$/;
171
+
172
+ type Rgba = { r: number; g: number; b: number; a: number };
173
+
174
+ /** Parse the `rgb()/rgba()` strings that `getComputedStyle` returns. */
175
+ export function parseComputedColor(value: string | null | undefined): Rgba | null {
176
+ if (!value) return null;
177
+ const match =
178
+ /^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*([\d.]+%?))?\s*\)$/i.exec(
179
+ value.trim(),
180
+ );
181
+ if (!match) return null;
182
+ const alphaText = match[4];
183
+ const alpha =
184
+ alphaText === undefined
185
+ ? 1
186
+ : alphaText.endsWith("%")
187
+ ? Number(alphaText.slice(0, -1)) / 100
188
+ : Number(alphaText);
189
+ return { r: Number(match[1]), g: Number(match[2]), b: Number(match[3]), a: alpha };
190
+ }
191
+
192
+ /** WCAG relative luminance, 0 (black) to 1 (white). */
193
+ export function relativeLuminance({ r, g, b }: Pick<Rgba, "r" | "g" | "b">): number {
194
+ const channel = (value: number) => {
195
+ const srgb = value / 255;
196
+ return srgb <= 0.03928 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;
197
+ };
198
+ return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);
199
+ }
200
+
201
+ /** Parse a `#rgb`/`#rrggbb` or `rgb()` token value; null for anything else. */
202
+ export function parseTokenColor(value: string): Rgba | null {
203
+ const text = value.trim();
204
+ const hex = /^#([\da-f]{3}|[\da-f]{6})$/i.exec(text)?.[1];
205
+ if (hex) {
206
+ const full = hex.length === 3 ? [...hex].map((digit) => digit + digit).join("") : hex;
207
+ return {
208
+ r: parseInt(full.slice(0, 2), 16),
209
+ g: parseInt(full.slice(2, 4), 16),
210
+ b: parseInt(full.slice(4, 6), 16),
211
+ a: 1,
212
+ };
213
+ }
214
+ return parseComputedColor(text);
215
+ }
216
+
217
+ const STOCK_LIGHT_TEXT = relativeLuminance({ r: 0x24, g: 0x24, b: 0x24 });
218
+ const STOCK_DARK_TEXT = relativeLuminance({ r: 0xe6, g: 0xe6, b: 0xe6 });
219
+
220
+ /**
221
+ * The theme whose text reads better on this background: dark when the stock
222
+ * light text has the higher contrast ratio. Mid-tone and saturated brand
223
+ * backgrounds land on whichever text actually stays legible.
224
+ */
225
+ export function themeForBackground(color: Pick<Rgba, "r" | "g" | "b">): ResolvedHostTheme {
226
+ const background = relativeLuminance(color);
227
+ const contrast = (a: number, b: number) => (Math.max(a, b) + 0.05) / (Math.min(a, b) + 0.05);
228
+ return contrast(STOCK_DARK_TEXT, background) > contrast(STOCK_LIGHT_TEXT, background)
229
+ ? "dark"
230
+ : "light";
231
+ }
232
+
233
+ function themeWord(value: string | null | undefined): ResolvedHostTheme | null {
234
+ if (!value) return null;
235
+ const words = value.toLowerCase().split(/[\s_-]+/);
236
+ if (words.includes("dark")) return "dark";
237
+ if (words.includes("light")) return "light";
238
+ return null;
239
+ }
240
+
241
+ function classTheme(element: Element | null): ResolvedHostTheme | null {
242
+ if (!element) return null;
243
+ const classes = element.classList;
244
+ if (classes.contains("dark") || classes.contains("theme-dark") || classes.contains("dark-mode"))
245
+ return "dark";
246
+ if (
247
+ classes.contains("light") ||
248
+ classes.contains("theme-light") ||
249
+ classes.contains("light-mode")
250
+ )
251
+ return "light";
252
+ for (const attribute of HOST_THEME_ATTRIBUTES) {
253
+ const theme = themeWord(element.getAttribute(attribute));
254
+ if (theme) return theme;
255
+ }
256
+ return null;
257
+ }
258
+
259
+ function colorSchemeTheme(element: Element): ResolvedHostTheme | null {
260
+ const scheme = getComputedStyle(element).colorScheme?.toLowerCase() ?? "";
261
+ const words = scheme.split(/\s+/).filter((word) => word && word !== "only");
262
+ // `light dark` only says the page supports both; the background decides.
263
+ if (words.length === 1 && (words[0] === "dark" || words[0] === "light")) return words[0];
264
+ return null;
265
+ }
266
+
267
+ /**
268
+ * The first opaque background the element sits on (its ancestors only), or
269
+ * null when the page paints none of its own and the browser canvas shows.
270
+ */
271
+ export function hostBackground(element: Element): Rgba | null {
272
+ let current: Element | null = element.parentElement;
273
+ while (current) {
274
+ const color = parseComputedColor(getComputedStyle(current).backgroundColor);
275
+ if (color && color.a >= 0.5) return color;
276
+ current = current.parentElement;
277
+ }
278
+ return null;
279
+ }
280
+
281
+ /**
282
+ * Resolve light or dark for an embedded root from its host page. Pure DOM
283
+ * reads; never consults `prefers-color-scheme` on its own.
284
+ */
285
+ export function resolveHostTheme(element: Element): ResolvedHostTheme {
286
+ const parent = element.parentElement;
287
+ const tagged = parent?.closest("[data-og-theme], .og-light");
288
+ if (tagged) {
289
+ if (tagged.classList.contains("og-light")) return "light";
290
+ return tagged.getAttribute("data-og-theme") === "light" ? "light" : "dark";
291
+ }
292
+ const document = element.ownerDocument;
293
+ const signalled = classTheme(document.documentElement) ?? classTheme(document.body);
294
+ if (signalled) return signalled;
295
+ // What the chat actually sits on is the strongest remaining signal. A
296
+ // color-scheme alone can come from a stylesheet (including our own
297
+ // tokens.css on :root) without the page being painted that way.
298
+ const background = hostBackground(element);
299
+ if (background) return themeForBackground(background);
300
+ // No host paint: the browser canvas shows, colored by the root scheme.
301
+ const scheme =
302
+ (parent ? colorSchemeTheme(parent) : null) ?? colorSchemeTheme(document.documentElement);
303
+ if (scheme) return scheme;
304
+ // A page that supports both schemes follows the OS on its canvas.
305
+ const rootScheme = getComputedStyle(document.documentElement).colorScheme ?? "";
306
+ if (/\bdark\b/.test(rootScheme) && /\blight\b/.test(rootScheme)) {
307
+ return document.defaultView?.matchMedia?.("(prefers-color-scheme: dark)").matches
308
+ ? "dark"
309
+ : "light";
310
+ }
311
+ return "light";
312
+ }
313
+
314
+ /**
315
+ * Canonical text for comparing a token value with the stock one. The
316
+ * published `compiled.css` is minified (`#333`, `oklch(.52 .16 22)`), so the
317
+ * same color must compare equal in short and long form; otherwise every stock
318
+ * token reads as a host customization and dark values leak into light themes.
319
+ */
320
+ export function normalizeToken(value: string): string {
321
+ return value
322
+ .trim()
323
+ .toLowerCase()
324
+ .replace(/\s+/g, " ")
325
+ .replace(/#([\da-f])([\da-f])([\da-f])(?![\da-f])/g, "#$1$1$2$2$3$3")
326
+ .replace(/(^|[\s(,/])0+(\.\d)/g, "$1$2")
327
+ .replace(/(\.\d*?)0+(?=[\s),/%]|$)/g, "$1")
328
+ .replace(/\.(?=[\s),/%]|$)/g, "");
329
+ }
330
+
331
+ /**
332
+ * Tokens the host customized on an ancestor, by value. Setting our own
333
+ * `data-og-theme` would otherwise reset them to the theme's stock values.
334
+ */
335
+ export function hostTokenOverrides(element: Element): Record<`--${string}`, string> {
336
+ const parent = element.parentElement;
337
+ const overrides: Record<`--${string}`, string> = {};
338
+ if (!parent) return overrides;
339
+ const computed = getComputedStyle(parent);
340
+ for (const [token, stock] of Object.entries(STOCK_COLOR_TOKENS)) {
341
+ const value = computed.getPropertyValue(token);
342
+ if (!value.trim()) continue;
343
+ const normalized = normalizeToken(value);
344
+ if (!stock.some((candidate) => normalizeToken(candidate) === normalized)) {
345
+ overrides[token as `--${string}`] = value.trim();
346
+ }
347
+ }
348
+ return overrides;
349
+ }
350
+
351
+ /** Inline token overrides that blend the stock surfaces into the host background. */
352
+ export function hostSurfaceStyle(
353
+ theme: ResolvedHostTheme,
354
+ background: Pick<Rgba, "r" | "g" | "b"> | null,
355
+ ): Record<`--${string}`, string> {
356
+ const base = background
357
+ ? `rgb(${Math.round(background.r)} ${Math.round(background.g)} ${Math.round(background.b)})`
358
+ : "Canvas";
359
+ const style: Record<`--${string}`, string> = {};
360
+ for (const [token, percent] of Object.entries(SURFACE_MIX[theme])) {
361
+ style[token as `--${string}`] =
362
+ percent === 0 ? base : `color-mix(in srgb, var(--og-color-fg) ${percent}%, ${base})`;
363
+ }
364
+ return style;
365
+ }
366
+
367
+ export type HostTheme = {
368
+ /** `data-og-theme` to set on the root, or undefined to inherit. */
369
+ attribute: ResolvedHostTheme | undefined;
370
+ theme: ResolvedHostTheme | undefined;
371
+ style: CSSProperties | undefined;
372
+ };
373
+
374
+ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
375
+
376
+ /** The theme a set of customized neutral tokens was designed for, if any. */
377
+ function designedTheme(overrides: Record<string, string>): ResolvedHostTheme | null {
378
+ for (const token of ["--og-color-fg", "--og-color-bg", "--og-color-canvas"] as const) {
379
+ const value = overrides[token];
380
+ const color = value ? parseTokenColor(value) : null;
381
+ if (!color) continue;
382
+ const luminance = relativeLuminance(color);
383
+ // Text colors are dark on light themes; backgrounds the other way round.
384
+ const light = token === "--og-color-fg" ? luminance < 0.19 : luminance >= 0.19;
385
+ return light ? "light" : "dark";
386
+ }
387
+ return null;
388
+ }
389
+
390
+ /** Inline style and theme for one embed root. Pure; exported for tests. */
391
+ export function resolveHostThemeState(
392
+ element: Element,
393
+ preference: HostThemePreference,
394
+ surface: HostSurfacePreference,
395
+ ): { theme: ResolvedHostTheme; inherited: boolean; style: Record<string, string> | null } {
396
+ const theme = preference === "auto" ? resolveHostTheme(element) : preference;
397
+ const tagged = element.parentElement?.closest("[data-og-theme], .og-light");
398
+ const inheritedTheme = tagged
399
+ ? tagged.classList.contains("og-light") || tagged.getAttribute("data-og-theme") === "light"
400
+ ? "light"
401
+ : "dark"
402
+ : // Untagged ancestors carry the stock dark defaults.
403
+ "dark";
404
+ const inherited = inheritedTheme === theme;
405
+ const overrides = hostTokenOverrides(element);
406
+ // Customized neutrals designed for the other theme would put dark text on a
407
+ // dark root (or light on light) once the theme flips; brand colors travel.
408
+ const designed = designedTheme(overrides);
409
+ const carried = Object.fromEntries(
410
+ Object.entries(overrides).filter(
411
+ ([token]) => !NEUTRAL_TOKEN.test(token) || designed === null || designed === theme,
412
+ ),
413
+ );
414
+ const surfacesCustomized = SURFACE_TOKENS.some((token) => token in carried);
415
+ const background = hostBackground(element);
416
+ // Blend only when the background agrees with the theme: light text on a
417
+ // white card (or the reverse) would be unreadable.
418
+ const blends =
419
+ surface === "host" &&
420
+ !surfacesCustomized &&
421
+ (background === null || themeForBackground(background) === theme);
422
+ const darkReset =
423
+ !inherited && theme === "dark"
424
+ ? {
425
+ ...Object.fromEntries(
426
+ Object.entries(STOCK_COLOR_TOKENS).map(([token, [dark]]) => [token, dark]),
427
+ ),
428
+ ...DARK_RESET_EXTRA,
429
+ }
430
+ : {};
431
+ const replacesSurfaces = blends || Object.keys(darkReset).length > 0;
432
+ const style: Record<string, string> = {
433
+ ...darkReset,
434
+ ...(blends ? hostSurfaceStyle(theme, background) : {}),
435
+ ...(replacesSurfaces ? DERIVED_TOKENS[theme] : {}),
436
+ // Re-declaring the theme on this root would reset the host's own
437
+ // customizations; carry them over explicitly.
438
+ ...(inherited ? {} : carried),
439
+ };
440
+ return { theme, inherited, style: Object.keys(style).length > 0 ? style : null };
441
+ }
442
+
443
+ /**
444
+ * Resolve and track the host theme for an embedded root. Re-resolves when the
445
+ * host flips `class`/`data-*`/`style` on <html>, <body> or an ancestor, and
446
+ * when the OS scheme changes (which only matters for hosts that follow it).
447
+ * A root nested inside another embed root inherits its resolution.
448
+ */
449
+ export function useHostTheme(
450
+ ref: RefObject<HTMLElement | null>,
451
+ options: { theme?: HostThemePreference | undefined; surface?: HostSurfacePreference | undefined },
452
+ ): HostTheme {
453
+ const preference = options.theme ?? "auto";
454
+ const surface = options.surface ?? "host";
455
+ const [state, setState] = useState<{
456
+ theme: ResolvedHostTheme | undefined;
457
+ inherited: boolean;
458
+ style: Record<string, string> | null;
459
+ }>({ theme: preference === "auto" ? undefined : preference, inherited: false, style: null });
460
+
461
+ useIsomorphicLayoutEffect(() => {
462
+ markClassicScrollbars(ref.current?.ownerDocument);
463
+ }, [ref]);
464
+
465
+ useIsomorphicLayoutEffect(() => {
466
+ const element = ref.current;
467
+ if (!element || typeof window === "undefined") return;
468
+ // The enclosing embed root resolves for this subtree; its attribute is
469
+ // rendered from the first commit, so there is no ordering race.
470
+ if (preference === "auto" && element.parentElement?.closest(`[${HOST_THEME_ROOT_ATTRIBUTE}]`)) {
471
+ setState((current) =>
472
+ current.inherited && current.style === null
473
+ ? current
474
+ : { theme: undefined, inherited: true, style: null },
475
+ );
476
+ return;
477
+ }
478
+ let signature = "";
479
+ const sync = () => {
480
+ const next = resolveHostThemeState(element, preference, surface);
481
+ const nextSignature = JSON.stringify(next);
482
+ if (nextSignature === signature) return;
483
+ signature = nextSignature;
484
+ setState(next);
485
+ };
486
+ sync();
487
+ // Host mutations (resizable panels restyle every frame) coalesce per frame.
488
+ let frame: number | null = null;
489
+ const schedule = () => {
490
+ if (frame !== null) return;
491
+ frame = window.requestAnimationFrame(() => {
492
+ frame = null;
493
+ sync();
494
+ });
495
+ };
496
+ const document = element.ownerDocument;
497
+ const observers: MutationObserver[] = [];
498
+ if (typeof MutationObserver !== "undefined") {
499
+ const watched = new Set<Element>([document.documentElement]);
500
+ if (document.body) watched.add(document.body);
501
+ for (let ancestor = element.parentElement; ancestor; ancestor = ancestor.parentElement) {
502
+ watched.add(ancestor);
503
+ }
504
+ for (const target of watched) {
505
+ const observer = new MutationObserver(schedule);
506
+ observer.observe(target, {
507
+ attributes: true,
508
+ attributeFilter: ["class", "style", "data-og-theme", ...HOST_THEME_ATTRIBUTES],
509
+ });
510
+ observers.push(observer);
511
+ }
512
+ }
513
+ const media = window.matchMedia?.("(prefers-color-scheme: dark)");
514
+ media?.addEventListener?.("change", schedule);
515
+ return () => {
516
+ if (frame !== null) window.cancelAnimationFrame(frame);
517
+ for (const observer of observers) observer.disconnect();
518
+ media?.removeEventListener?.("change", schedule);
519
+ };
520
+ }, [preference, ref, surface]);
521
+
522
+ return {
523
+ theme: state.theme,
524
+ // Re-declaring the inherited theme on this root would reset tokens that an
525
+ // enclosing embed root already blended or the host customized.
526
+ attribute: state.theme && !state.inherited ? state.theme : undefined,
527
+ style: state.style ? (state.style as CSSProperties) : undefined,
528
+ };
529
+ }
@@ -1,4 +1,19 @@
1
1
  import { OpenGeniApiError } from "@opengeni/sdk";
2
+ import { interactionControlFailureFromError } from "@opengeni/sdk/interaction";
3
+
4
+ /** Media can remain live when the independent control service is unavailable.
5
+ * A target refusal or an uncertain mutation does not establish a service outage. */
6
+ export function isInteractionControlUnavailable(
7
+ error: unknown,
8
+ request: "control" | "observation" = "control",
9
+ ): error is OpenGeniApiError {
10
+ if (!(error instanceof OpenGeniApiError)) return false;
11
+ const failure = interactionControlFailureFromError(error);
12
+ if (failure) return failure.code === "agent_offline" || failure.code === "draining";
13
+ return (
14
+ request === "control" && !error.outcomeUnknown && (error.status >= 500 || error.status === 0)
15
+ );
16
+ }
2
17
 
3
18
  export function isNonRetryableInteractionError(error: unknown): error is OpenGeniApiError {
4
19
  return error instanceof OpenGeniApiError && error.retryable === false;
@@ -0,0 +1,44 @@
1
+ /* ----------------------------------------------------------------------------
2
+ The one menu spec, SDK side. Mirrors `apps/web/src/components/ui/menu-styles.ts`
3
+ (and apps/web DESIGN.md "Menus and popovers") in `og-` token names so the
4
+ SDK's menus and pickers draw the same surface and rows as the web app's.
5
+ Change both together.
6
+ -------------------------------------------------------------------------- */
7
+
8
+ /** The panel: surface-1, 1px hairline, 16px radius, shadow-md, 6px inset. */
9
+ export const MENU_SURFACE_CLASS =
10
+ "rounded-2xl border border-og-border bg-og-surface-1 p-1.5 text-og-fg shadow-og-md";
11
+
12
+ /** One row: 32px (44px on coarse pointers), 10px radius, 16px muted icons, 14/400 label. */
13
+ export const MENU_ITEM_BASE_CLASS =
14
+ "relative flex min-h-8 w-full min-w-0 cursor-default items-center gap-2.5 rounded-og-md px-2.5 py-1.5 text-left text-og-menu font-normal text-og-fg outline-hidden select-none transition-colors duration-[120ms] pointer-coarse:min-h-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-og-fg-muted";
15
+
16
+ /** Radix menu items: hover and keyboard focus take the hover wash; disabled is 50%. */
17
+ export const MENU_ITEM_STATE_CLASS =
18
+ "focus:bg-og-hover data-[highlighted]:bg-og-hover data-[state=open]:bg-og-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[variant=destructive]:text-og-danger data-[variant=destructive]:focus:bg-og-danger/10 data-[variant=destructive]:*:[svg]:text-og-danger!";
19
+
20
+ export const MENU_ITEM_CLASS = `${MENU_ITEM_BASE_CLASS} ${MENU_ITEM_STATE_CLASS}`;
21
+
22
+ /** The same row as a plain button inside a hand-built popover. */
23
+ export const MENU_BUTTON_STATE_CLASS =
24
+ "cursor-pointer hover:bg-og-hover focus-visible:bg-og-hover focus-visible:outline-2 focus-visible:-outline-offset-2! focus-visible:outline-og-accent/55 disabled:pointer-events-none disabled:opacity-50";
25
+
26
+ export const MENU_BUTTON_CLASS = `${MENU_ITEM_BASE_CLASS} ${MENU_BUTTON_STATE_CLASS}`;
27
+
28
+ /** A group heading inside a menu: 12/500 fg-muted, sentence case. */
29
+ export const MENU_LABEL_CLASS = "px-2.5 pt-2 pb-1 text-og-sm font-medium text-og-fg-muted";
30
+
31
+ /** The hairline between groups, inside the panel's 6px inset. */
32
+ export const MENU_SEPARATOR_CLASS = "my-1.5 h-px shrink-0 bg-og-border";
33
+
34
+ /** Right-side meta on a row (counts, the current value). */
35
+ export const MENU_META_CLASS = "ml-auto shrink-0 text-og-sm text-og-fg-muted tabular-nums";
36
+
37
+ /** The selected option's mark, always on the right. */
38
+ export const MENU_CHECK_CLASS = "size-4 shrink-0 text-og-fg";
39
+
40
+ /** "Opens a submenu" chevron on the right. */
41
+ export const MENU_CHEVRON_CLASS = "size-4 shrink-0 text-og-fg-muted";
42
+
43
+ /** A plain sentence inside a menu (empty, loading, unavailable). Never a box. */
44
+ export const MENU_NOTE_CLASS = "px-2.5 py-2 text-og-menu text-og-fg-muted";
@@ -0,0 +1,15 @@
1
+ /** Notifications cannot change the result of an already accepted operation. */
2
+ export function notifyObserver<Args extends unknown[]>(
3
+ observer: ((...args: Args) => unknown) | undefined,
4
+ ...args: Args
5
+ ): void {
6
+ const report = (cause: unknown) => globalThis.reportError?.(cause);
7
+ try {
8
+ const result = observer?.(...args);
9
+ if (result && typeof (result as PromiseLike<unknown>).then === "function") {
10
+ void Promise.resolve(result).catch(report);
11
+ }
12
+ } catch (cause) {
13
+ report(cause);
14
+ }
15
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `@pierre/diffs` is an optional heavy peer. The package never names it in an
3
+ * `import()` that the conversation surfaces can reach: bundlers such as
4
+ * Turbopack resolve every reachable dynamic import at build time, so a host
5
+ * without the peer would fail to build. Hosts that install it opt in once with
6
+ * `enablePierreDiffs()` from `@opengeni/react/diffs` (or register their own
7
+ * loader); otherwise diffs and file views use the plain-text renderer.
8
+ */
9
+ export type PierreDiffsLoader = () => Promise<unknown>;
10
+
11
+ let loader: PierreDiffsLoader | null = null;
12
+ let loaded: Promise<unknown> | null = null;
13
+ let revision = 0;
14
+ const listeners = new Set<() => void>();
15
+
16
+ /**
17
+ * Register (or clear with `null`) the loader for `@pierre/diffs/react`.
18
+ * Views already on screen retry with the new loader, so a host may register
19
+ * lazily (for example from the route that renders diffs).
20
+ */
21
+ export function registerPierreDiffs(next: PierreDiffsLoader | null): void {
22
+ if (next === loader) return;
23
+ loader = next;
24
+ loaded = null;
25
+ revision += 1;
26
+ for (const listener of listeners) listener();
27
+ }
28
+
29
+ /** Changes whenever the registered loader changes (for `useSyncExternalStore`). */
30
+ export function pierreDiffsRevision(): number {
31
+ return revision;
32
+ }
33
+
34
+ export function subscribePierreDiffs(listener: () => void): () => void {
35
+ listeners.add(listener);
36
+ return () => listeners.delete(listener);
37
+ }
38
+
39
+ /** Resolve the registered `@pierre/diffs/react` module; rejects when none is registered. */
40
+ export function loadPierreDiffs(): Promise<unknown> {
41
+ if (!loader) {
42
+ return Promise.reject(
43
+ new Error(
44
+ "@pierre/diffs is not enabled; call enablePierreDiffs() from @opengeni/react/diffs",
45
+ ),
46
+ );
47
+ }
48
+ loaded ??= loader().catch((error: unknown) => {
49
+ loaded = null;
50
+ throw error;
51
+ });
52
+ return loaded;
53
+ }