@opengeni/react 3.1.0 → 3.1.3-canary.38890816741001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-BO2IWXVK.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
@@ -0,0 +1,48 @@
1
+ import type { EditableArtifactResource } from "@opengeni/sdk/artifacts";
2
+ import { type CreateBrowserEditableArtifactSessionOptions, type EditableArtifactBrowserRuntime, type EditableArtifactCacheAuthority } from "@opengeni/sdk/editable-artifacts";
3
+ import { type ArtifactLoadErrorView } from "./artifact-chrome.js";
4
+ /**
5
+ * The browser kernels an editor needs, one per modality, plus the host-built
6
+ * Worker URL (for Vite: `@opengeni/sdk/editable-artifacts/worker?worker&url`).
7
+ * Kernels come from `@opengeni/artifact-kernel-wasm-{document,spreadsheet,presentation}`.
8
+ */
9
+ export type EditableArtifactRuntimes = Readonly<{
10
+ document: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
11
+ spreadsheet: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
12
+ presentation: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
13
+ workerUrl: string;
14
+ applicationOrigin?: string | undefined;
15
+ /** Loopback development only. */
16
+ allowInsecureDevelopmentAssets?: boolean | undefined;
17
+ }>;
18
+ /** Everything needed to open one artifact for the current principal. */
19
+ export type OpenedEditableArtifact = Readonly<{
20
+ artifact: EditableArtifactResource;
21
+ authority: EditableArtifactCacheAuthority;
22
+ replicaId: string;
23
+ }>;
24
+ export type EditableArtifactViewProps = Readonly<{
25
+ /** Absolute API (or session proxy) base the live transport talks to. */
26
+ baseUrl: URL;
27
+ workspaceId: string;
28
+ artifactId: string;
29
+ /** Resolve metadata, cache authority, and replica; called again on retry. */
30
+ open: (signal: AbortSignal) => Promise<OpenedEditableArtifact>;
31
+ runtimes: EditableArtifactRuntimes;
32
+ transport?: CreateBrowserEditableArtifactSessionOptions["transport"];
33
+ /** Show the editor's own title header (hosts with their own header hide it). */
34
+ showHeader?: boolean | undefined;
35
+ /** Re-open when this changes (for example the host's credential version). */
36
+ authorityKey?: string | undefined;
37
+ describeError?: ((error: unknown) => ArtifactLoadErrorView) | undefined;
38
+ onTitle?: ((title: string) => void) | undefined;
39
+ /** Loading copy; defaults to the `opening` label. */
40
+ loadingLabel?: string | undefined;
41
+ /** Host-authenticated XLSX export; omitted for hosts without export support. */
42
+ downloadSpreadsheet?: ((opened: OpenedEditableArtifact, signal: AbortSignal) => Promise<Blob>) | undefined;
43
+ }>;
44
+ /**
45
+ * One editable document, spreadsheet, or presentation with its first-party
46
+ * editor. The console dock/page and embedding hosts supply only data access.
47
+ */
48
+ export declare function EditableArtifactView({ baseUrl, workspaceId, artifactId, open, runtimes, transport, showHeader, authorityKey, describeError, onTitle, loadingLabel, downloadSpreadsheet, }: EditableArtifactViewProps): import("react").JSX.Element;
@@ -12,7 +12,7 @@ export type EditableDocumentArtifactSurfaceProps = Omit<DocumentProjectionArtifa
12
12
  * Durable document editor over the public SDK session. Canonical state and
13
13
  * speculative replay remain Worker-owned; React receives bounded projections.
14
14
  */
15
- export declare function EditableDocumentArtifactSurface({ session, title, subtitle, readOnly, onCommit, onCommandError, ...surfaceProps }: EditableDocumentArtifactSurfaceProps): import("react").JSX.Element;
15
+ export declare function EditableDocumentArtifactSurface({ session, title, showHeader, subtitle, readOnly, onCommit, onCommandError, ...surfaceProps }: EditableDocumentArtifactSurfaceProps): import("react").JSX.Element;
16
16
  /** Deterministically composes summary/body/sections/review at one Worker revision. */
17
17
  export declare function composeDocumentEditorProjection(session: EditableArtifactSession): Promise<DocumentEditorProjection>;
18
18
  export declare function minimalUtf16TextEdit(before: string, after: string): {
@@ -1,7 +1,7 @@
1
1
  import { type EditableArtifactSession, type PresentationArtifactEditorSceneNode, type PresentationArtifactRichText } from "@opengeni/sdk/editable-artifacts";
2
2
  import { type ReactNode } from "react";
3
3
  import { type PresentationCommitHandler, type PresentationEditorProjection, type PresentationProjectionArtifactSurfaceProps } from "./presentation-editor.js";
4
- export type EditablePresentationArtifactSurfaceProps = Omit<PresentationProjectionArtifactSurfaceProps, "projection" | "commit" | "readOnly" | "busy" | "subtitle"> & {
4
+ export type EditablePresentationArtifactSurfaceProps = Omit<PresentationProjectionArtifactSurfaceProps, "projection" | "commit" | "readOnly" | "busy" | "subtitle" | "authoringBlockedReason"> & {
5
5
  session: EditableArtifactSession;
6
6
  subtitle?: ReactNode | undefined;
7
7
  readOnly?: boolean | undefined;
@@ -16,7 +16,7 @@ export type ComposedPresentationProjection = Readonly<{
16
16
  * Durable presentation editor over the public SDK. The Worker owns canonical
17
17
  * state; React only receives bounded catalog and per-slide editor projections.
18
18
  */
19
- export declare function EditablePresentationArtifactSurface({ session, title, subtitle, readOnly, onCommit, onCommandError, ...surfaceProps }: EditablePresentationArtifactSurfaceProps): import("react").JSX.Element;
19
+ export declare function EditablePresentationArtifactSurface({ session, title, showHeader, subtitle, readOnly, onCommit, onCommandError, ...surfaceProps }: EditablePresentationArtifactSurfaceProps): import("react").JSX.Element;
20
20
  /** Builds a deterministic, bounded catalog + editor-slide projection at one revision. */
21
21
  export declare function composePresentationEditorProjection(session: EditableArtifactSession): Promise<ComposedPresentationProjection>;
22
22
  export declare function flattenPresentationRichText(text: PresentationArtifactRichText): string;
@@ -1,6 +1,7 @@
1
1
  import { type EditableArtifactSession, type EditableSpreadsheetSheetMetadata } from "@opengeni/sdk/editable-artifacts";
2
2
  import { type ReactNode } from "react";
3
- import { type SpreadsheetCommit, type SpreadsheetSelection, type SpreadsheetViewport } from "./spreadsheet-grid.js";
3
+ import { type SpreadsheetDownload } from "./spreadsheet-download.js";
4
+ import { type SpreadsheetCommit, type SpreadsheetDimensionCommit, type SpreadsheetSelection, type SpreadsheetViewport } from "./spreadsheet-grid.js";
4
5
  export type EditableSpreadsheetGridProps = {
5
6
  session: EditableArtifactSession;
6
7
  sheet: EditableSpreadsheetSheetMetadata;
@@ -12,14 +13,18 @@ export type EditableSpreadsheetGridProps = {
12
13
  overscanColumns?: number | undefined;
13
14
  onSelectionChange?: ((selection: SpreadsheetSelection) => void) | undefined;
14
15
  onCommit?: ((commit: SpreadsheetCommit) => void) | undefined;
16
+ onResize?: ((change: SpreadsheetDimensionCommit) => void) | undefined;
15
17
  onCommandError?: ((error: Error) => void) | undefined;
16
18
  onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
17
19
  className?: string | undefined;
18
20
  };
19
21
  export type EditableSpreadsheetArtifactSurfaceProps = Omit<EditableSpreadsheetGridProps, "metadataRevision" | "sheet"> & {
20
22
  title?: string | undefined;
23
+ showHeader?: boolean | undefined;
21
24
  subtitle?: ReactNode | undefined;
22
25
  actions?: ReactNode | undefined;
26
+ /** Authenticated XLSX export of the current saved native head. */
27
+ download?: SpreadsheetDownload | undefined;
23
28
  initialSheetId?: string | undefined;
24
29
  allowAddSheet?: boolean | undefined;
25
30
  };
@@ -27,6 +32,6 @@ export type EditableSpreadsheetArtifactSurfaceProps = Omit<EditableSpreadsheetGr
27
32
  * Durable spreadsheet editor over one SDK session. Canonical state remains in
28
33
  * the dedicated Worker; React receives one bounded immutable viewport only.
29
34
  */
30
- export declare function EditableSpreadsheetGrid({ session, sheet, metadataRevision, readOnly, rowCount: requestedRowCount, columnCount: requestedColumnCount, overscanRows, overscanColumns, onSelectionChange, onCommit, onCommandError, onViewportChange, className, }: EditableSpreadsheetGridProps): import("react").JSX.Element;
35
+ export declare function EditableSpreadsheetGrid(props: EditableSpreadsheetGridProps): import("react").JSX.Element;
31
36
  /** Artifact chrome, sheet navigation, and one Worker-backed spreadsheet grid. */
32
- export declare function EditableSpreadsheetArtifactSurface({ session, title, subtitle, actions, initialSheetId, allowAddSheet, readOnly, ...gridProps }: EditableSpreadsheetArtifactSurfaceProps): import("react").JSX.Element;
37
+ export declare function EditableSpreadsheetArtifactSurface(props: EditableSpreadsheetArtifactSurfaceProps): import("react").JSX.Element;
@@ -1,6 +1,13 @@
1
+ export { ArtifactBadge, ArtifactLabelsProvider, DEFAULT_ARTIFACT_LABELS, useArtifactLabels, type ArtifactLabels, ArtifactButton, ArtifactLoading, ArtifactProblem, ArtifactSelect, ArtifactViewerHeader, artifactKindIcon, artifactKindSubtitle, artifactLoadErrorMessage, artifactLoadErrorView, type ArtifactKind, type ArtifactLoadErrorKind, type ArtifactLoadErrorView, } from "./artifact-chrome.js";
2
+ export { ArtifactSandbox, type ArtifactSandboxProps } from "./artifact-sandbox.js";
3
+ export { DeferredChatMedia } from "./deferred-chat-media.js";
4
+ export { ChatInteractiveBlock, type ChatInteractiveBlockProps, type SiteSnapshotClient, type SiteToolBridgeFactory, type SiteToolScope, } from "./chat-interactive-block.js";
5
+ export { SiteView, type SiteViewProps } from "./site-view.js";
6
+ export { EditableArtifactView, type EditableArtifactRuntimes, type EditableArtifactViewProps, type OpenedEditableArtifact, } from "./editable-artifact-view.js";
7
+ export { SessionArtifactViewer, type SessionArtifactTarget, type SessionArtifactViewerLabels, type SessionArtifactViewerProps, } from "./session-artifact-viewer.js";
1
8
  export { ArtifactSurface, type ArtifactModality, type ArtifactSurfaceProps, } from "./artifact-surface.js";
2
- export { PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX, PublishedHtmlArtifactFrame, type PublishedHtmlArtifactFrameProps, } from "./published-html-artifact-frame.js";
3
- export { SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./spreadsheet-grid.js";
9
+ export { PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX, PublishedHtmlArtifactFrame, openGeniSiteBridgePortFromBootstrap, publishedHtmlArtifactDocument, type PublishedHtmlArtifactFrameProps, type PublishedHtmlArtifactToolBridge, } from "./published-html-artifact-frame.js";
10
+ export { SpreadsheetArtifactSurface, SpreadsheetGrid, SpreadsheetProjectionGrid, type SpreadsheetArtifactSurfaceProps, type SpreadsheetCommit, type SpreadsheetDimensionCommit, type SpreadsheetRangeCommit, type SpreadsheetGridProps, type SpreadsheetGridProjection, type SpreadsheetProjectionCell, type SpreadsheetProjectionGridProps, type SpreadsheetSelection, type SpreadsheetViewport, } from "./spreadsheet-grid.js";
4
11
  export { EditableSpreadsheetArtifactSurface, EditableSpreadsheetGrid, type EditableSpreadsheetArtifactSurfaceProps, type EditableSpreadsheetGridProps, } from "./editable-spreadsheet.js";
5
12
  export { BrowserEditableArtifactWorkbench, EditableArtifactWorkbench, EditableArtifactWorkbenchHost, type BrowserEditableArtifactWorkbenchOptions, type BrowserEditableArtifactWorkbenchProps, type EditableArtifactWorkbenchHostProps, type EditableArtifactWorkbenchProps, } from "./editable-artifact-workbench.js";
6
13
  export { EditableDocumentArtifactSurface, type EditableDocumentArtifactSurfaceProps, } from "./editable-document.js";
@@ -0,0 +1,2 @@
1
+ /** Conversation styling/helpers only. Rendering and tool transport remain in the Site frame. */
2
+ export declare function inlineHtmlDocument(fragment: string): string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Runs one task at a time; a task scheduled while another runs replaces any
3
+ * task still waiting, so only the newest request starts next. Editors use it
4
+ * for projection loads: replaying a long history emits one revision per
5
+ * committed transaction, and composing a projection for each of them at once
6
+ * would overrun the artifact Worker's bounded request queue.
7
+ */
8
+ export declare function createLatestTaskRunner(): (task: () => Promise<void>) => void;
9
+ /**
10
+ * One runner per artifact session. A composition still pending on a replaced
11
+ * session (for example one whose Worker stopped answering) must never hold up
12
+ * the next session's first load, so the runner is scoped to the session object
13
+ * rather than to the component.
14
+ */
15
+ export declare function useLatestTaskRunner(session: object): (task: () => Promise<void>) => void;
@@ -255,6 +255,7 @@ export type PresentationProjectionEditorProps = Omit<PresentationEditorProps, "p
255
255
  };
256
256
  export type PresentationProjectionArtifactSurfaceProps = PresentationProjectionEditorProps & {
257
257
  title?: string | undefined;
258
+ showHeader?: boolean | undefined;
258
259
  subtitle?: ReactNode | undefined;
259
260
  actions?: ReactNode | undefined;
260
261
  busy?: boolean | undefined;
@@ -270,6 +271,8 @@ export type PresentationEditorProps = {
270
271
  zoom?: number | undefined;
271
272
  defaultZoom?: number | undefined;
272
273
  readOnly?: boolean | undefined;
274
+ /** Temporarily fence commands while keeping the current editor draft. */
275
+ authoringBlockedReason?: "pending_conflict" | "prior_writer" | undefined;
273
276
  className?: string | undefined;
274
277
  onSlideChange?: ((slide: Slide, index: number) => void) | undefined;
275
278
  onSelectionChange?: ((object: PresentationObject | null, slide: Slide) => void) | undefined;
@@ -279,6 +282,7 @@ export type PresentationEditorProps = {
279
282
  };
280
283
  export type PresentationArtifactSurfaceProps = PresentationEditorProps & {
281
284
  title?: string | undefined;
285
+ showHeader?: boolean | undefined;
282
286
  subtitle?: ReactNode | undefined;
283
287
  actions?: ReactNode | undefined;
284
288
  busy?: boolean | undefined;
@@ -291,7 +295,7 @@ export declare function PresentationEditor(props: PresentationEditorProps): impo
291
295
  */
292
296
  export declare function PresentationProjectionEditor({ projection, commit, onCommandError, onSlideChange, onSelectionChange, readOnly, ...props }: PresentationProjectionEditorProps): import("react").JSX.Element;
293
297
  /** Artifact chrome plus the editor, for drop-in SDK embedding. */
294
- export declare function PresentationArtifactSurface({ presentation, title, subtitle, actions, busy, className, ...editorProps }: PresentationArtifactSurfaceProps): import("react").JSX.Element;
298
+ export declare function PresentationArtifactSurface({ presentation, title, showHeader, subtitle, actions, busy, className, ...editorProps }: PresentationArtifactSurfaceProps): import("react").JSX.Element;
295
299
  /** Artifact chrome over the projection-first editor. */
296
- export declare function PresentationProjectionArtifactSurface({ projection, title, subtitle, actions, busy, className, ...editorProps }: PresentationProjectionArtifactSurfaceProps): import("react").JSX.Element;
300
+ export declare function PresentationProjectionArtifactSurface({ projection, title, showHeader, subtitle, actions, busy, className, ...editorProps }: PresentationProjectionArtifactSurfaceProps): import("react").JSX.Element;
297
301
  export {};
@@ -1,14 +1,34 @@
1
- import type { CSSProperties } from "react";
1
+ import { type SiteBridgeToolHandlers } from "@opengeni/sdk/site-bridge-host";
2
+ import type { OpenGeniSiteSignInResult, OpenGeniSiteViewer } from "@opengeni/sdk/site";
3
+ import { type CSSProperties } from "react";
4
+ export { SiteBridgeDocumentLease, SiteBridgeRequestRegistry, handleSiteBridgeRequest, openGeniSiteBridgePortFromBootstrap, siteBridgeError, siteBridgeReadyMessage, } from "@opengeni/sdk/site-bridge-host";
2
5
  export declare const PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX: string;
3
6
  export type PublishedHtmlArtifactFrameProps = {
4
7
  html: string;
8
+ autoHeight?: boolean;
9
+ theme?: "light" | "dark";
5
10
  title: string;
6
11
  className?: string;
7
12
  style?: CSSProperties;
13
+ toolBridge?: PublishedHtmlArtifactToolBridge;
14
+ /**
15
+ * The signed-in member viewing the Site, answered to `site.viewer`. When
16
+ * omitted the frame does not advertise viewers and the SDK resolves `null`.
17
+ */
18
+ viewer?: OpenGeniSiteViewer;
19
+ /**
20
+ * Answer `site.auth.signIn()`. The console viewer is already signed in, so
21
+ * the default resolves `{ started: false }`.
22
+ */
23
+ onSignIn?: () => Promise<OpenGeniSiteSignInResult> | OpenGeniSiteSignInResult;
8
24
  };
25
+ /** Host handlers for Site tools and the Site HTTP channel (see `@opengeni/sdk/site-bridge-host`). */
26
+ export type PublishedHtmlArtifactToolBridge = SiteBridgeToolHandlers;
27
+ export declare function publishedHtmlArtifactDocument(html: string, toolBridgeEnabled: boolean): string;
9
28
  /**
10
29
  * Render exact published HTML in an opaque-origin iframe. Artifact scripts,
11
- * external resources, forms, popups, and downloads work without granting
12
- * parent-origin authority, shared cookies/storage, or top-level navigation.
30
+ * external resources, forms, popups, downloads, and the host-filtered tool
31
+ * bridge work without granting parent-origin authority, shared cookies/storage,
32
+ * or top-level navigation.
13
33
  */
14
34
  export declare function PublishedHtmlArtifactFrame(props: PublishedHtmlArtifactFrameProps): import("react").JSX.Element;
@@ -0,0 +1,39 @@
1
+ import { type ClientOverride } from "../../session-context.js";
2
+ import { type ArtifactLabels } from "./artifact-chrome.js";
3
+ import { type EditableArtifactRuntimes } from "./editable-artifact-view.js";
4
+ import type { SiteToolBridgeFactory } from "./chat-interactive-block.js";
5
+ /** An artifact opened from a session: the targets agent links and Site previews name. */
6
+ export type SessionArtifactTarget = Readonly<{
7
+ kind: "editable-artifact";
8
+ artifactId: string;
9
+ title?: string | undefined;
10
+ } | {
11
+ kind: "site";
12
+ artifactId: string;
13
+ title?: string | undefined;
14
+ }>;
15
+ /** Every string the viewer shows, including its Site frame and states. */
16
+ export type SessionArtifactViewerLabels = Partial<ArtifactLabels>;
17
+ export type SessionArtifactViewerProps = ClientOverride & Readonly<{
18
+ /** The conversation the artifact belongs to; the proxy only serves its artifacts. */
19
+ sessionId: string;
20
+ target: SessionArtifactTarget;
21
+ onClose: () => void;
22
+ /** Show a Back control, for example to return to the conversation on phones. */
23
+ onBack?: (() => void) | undefined;
24
+ /** Browser kernels and Worker for documents, spreadsheets, and presentations. */
25
+ editableRuntimes?: EditableArtifactRuntimes | undefined;
26
+ theme?: "light" | "dark" | undefined;
27
+ /** Host-owned Site API access; omit it and Sites render without workspace tools. */
28
+ siteToolBridge?: SiteToolBridgeFactory | undefined;
29
+ labels?: SessionArtifactViewerLabels | undefined;
30
+ className?: string | undefined;
31
+ }>;
32
+ /**
33
+ * A host-mountable viewer for one editable artifact or Site from a session,
34
+ * with its own header (title, Back, Close). Mount it in any sized container
35
+ * (a side panel, a sheet); it fills it. Data flows through the provider's
36
+ * client and `createSessionProxyHandler({ artifacts: true })`, scoped to
37
+ * `sessionId`.
38
+ */
39
+ export declare function SessionArtifactViewer({ labels, ...props }: SessionArtifactViewerProps): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import type { SiteViewer } from "@opengeni/sdk";
2
+ import type { SiteSnapshotClient, SiteToolBridgeFactory } from "./chat-interactive-block.js";
3
+ export type SiteViewProps = {
4
+ client: SiteSnapshotClient;
5
+ workspaceId: string;
6
+ siteId: string;
7
+ /** Host-owned Site API access. Omit it and the Site renders without workspace tools. */
8
+ toolBridge?: SiteToolBridgeFactory | undefined;
9
+ /** Who is viewing, answered to the Site's `site.viewer`. */
10
+ viewer?: SiteViewer | undefined;
11
+ theme?: "light" | "dark" | undefined;
12
+ /** Shown instead of the archived notice; the console links to its full page. */
13
+ archivedMessage?: string | undefined;
14
+ /** Show the Site title in the frame bar; hide it under a host header that already does. */
15
+ showTitle?: boolean | undefined;
16
+ /** Loading copy; defaults to "Loading Site…". */
17
+ loadingLabel?: string | undefined;
18
+ /** Called with the loaded title, for a host header. */
19
+ onTitle?: ((title: string) => void) | undefined;
20
+ className?: string | undefined;
21
+ };
22
+ /**
23
+ * A published Site filling its container: the console's session dock and an
24
+ * embedding host's artifact viewer render the same view.
25
+ */
26
+ export declare function SiteView({ client, workspaceId, siteId, toolBridge, viewer, theme, archivedMessage, showTitle, loadingLabel, onTitle, className, }: SiteViewProps): import("react").JSX.Element;
@@ -0,0 +1,20 @@
1
+ export type SpreadsheetCommandTarget = {
2
+ top: number;
3
+ bottom: number;
4
+ left: number;
5
+ right: number;
6
+ };
7
+ /** Keep independent failures visible without replaying over newer overlapping edits. */
8
+ export declare function useSpreadsheetCommandQueue({ scopeKey, enabled, onCommandError, }: {
9
+ scopeKey: string;
10
+ enabled: boolean;
11
+ onCommandError?: ((error: Error) => void) | undefined;
12
+ }): {
13
+ run: (invoke: (id: number) => void | Promise<void>, retry: () => void, rollback: (id: number) => void, target?: SpreadsheetCommandTarget | (() => SpreadsheetCommandTarget), accepted?: (id: number) => void) => void;
14
+ clearPreflightFailure: () => void;
15
+ pendingCount: number;
16
+ error: {
17
+ message: string;
18
+ retry: (() => void) | undefined;
19
+ } | null;
20
+ };
@@ -0,0 +1,7 @@
1
+ import type { EditableArtifactSession } from "@opengeni/sdk/editable-artifacts";
2
+ export type SpreadsheetDownload = (signal: AbortSignal) => Promise<Blob>;
3
+ export declare function SpreadsheetDownloadButton({ session, title, download, }: {
4
+ session: EditableArtifactSession;
5
+ title: string;
6
+ download: SpreadsheetDownload;
7
+ }): import("react").JSX.Element;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * DISPLAY-ONLY General number formatting for spreadsheet canvas and a11y
3
+ * labels. This is not numeric arithmetic and must never feed formula-bar /
4
+ * cell-edit `input`, stored cells, formula results, or serialized exports.
5
+ *
6
+ * Policy for independent review:
7
+ * IEEE-754 cannot represent many decimal fractions exactly, so values such as
8
+ * `110.00000000000001` and `0.1 + 0.2` leak binary residue through `String(n)`.
9
+ * General display therefore collapses a finite number to 15 significant decimal
10
+ * digits — the same bound spreadsheet General uses — via
11
+ * `String(Number(value.toPrecision(15)))`.
12
+ *
13
+ * That mapping yields `110` / `220` / `0.3` for the noisy cases while keeping
14
+ * exponent-scale values (`1e-20`, `1e21`) and ~15-digit legitimate precision.
15
+ * Integers stringify without a decimal; `-0` displays as `0`; non-finite
16
+ * numbers, dates, booleans, errors, and strings keep their existing labels.
17
+ *
18
+ * Do not reuse `Intl.NumberFormat({ maximumFractionDigits: 12 })` from the
19
+ * artifact-tool renderer: 12 fraction digits rounds `1e-20` to `0` and truncates
20
+ * high-precision values that General should still show.
21
+ */
22
+ export declare function formatSpreadsheetGeneralDisplay(value: unknown): string;
23
+ /** Exact edit/formula-bar source. Numbers stay `String(value)` with no General collapse. */
24
+ export declare function spreadsheetCellEditSource(value: unknown): string;
@@ -1,6 +1,8 @@
1
1
  import type { Workbook, Worksheet } from "@opengeni/artifact-tool/reference";
2
2
  import { type ReactNode } from "react";
3
3
  import { type SpreadsheetCanvasCellFormat, type SpreadsheetCanvasProjection } from "./spreadsheet-canvas.js";
4
+ import { type SpreadsheetDimensionCommit } from "./spreadsheet-resize.js";
5
+ export type { SpreadsheetDimensionCommit } from "./spreadsheet-resize.js";
4
6
  type CellCoordinate = {
5
7
  row: number;
6
8
  col: number;
@@ -52,6 +54,7 @@ export type SpreadsheetGridProps = {
52
54
  overscanColumns?: number | undefined;
53
55
  onSelectionChange?: ((selection: SpreadsheetSelection) => void) | undefined;
54
56
  onCommit?: ((commit: SpreadsheetCommit) => void) | undefined;
57
+ onResize?: ((change: SpreadsheetDimensionCommit) => void) | undefined;
55
58
  onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
56
59
  className?: string | undefined;
57
60
  };
@@ -91,6 +94,11 @@ export type SpreadsheetProjectionGridProps = {
91
94
  commit?: ((commit: SpreadsheetCommit) => void | Promise<void>) | undefined;
92
95
  commitRange?: ((commit: SpreadsheetRangeCommit) => void | Promise<void>) | undefined;
93
96
  clear?: ((selection: SpreadsheetSelection) => void | Promise<void>) | undefined;
97
+ resize?: ((change: SpreadsheetDimensionCommit) => void | Promise<void>) | undefined;
98
+ /** Server-unacknowledged changes, distinct from local command acceptance. */
99
+ pendingTransactions?: number | undefined;
100
+ syncStatus?: string | undefined;
101
+ syncError?: string | undefined;
94
102
  onCommandError?: ((error: Error) => void) | undefined;
95
103
  onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
96
104
  className?: string | undefined;
@@ -104,10 +112,9 @@ export type SpreadsheetArtifactSurfaceProps = Omit<SpreadsheetGridProps, "worksh
104
112
  };
105
113
  /** A reusable workbook shell with first-class sheet switching. */
106
114
  export declare function SpreadsheetArtifactSurface({ workbook, title, subtitle, actions, initialSheetId, allowAddSheet, readOnly, ...gridProps }: SpreadsheetArtifactSurfaceProps): import("react").JSX.Element;
107
- export declare function SpreadsheetGrid({ workbook, worksheet, readOnly, rowCount: requestedRowCount, columnCount: requestedColumnCount, overscanRows, overscanColumns, onSelectionChange, onCommit, onViewportChange, className, }: SpreadsheetGridProps): import("react").JSX.Element;
115
+ export declare function SpreadsheetGrid({ workbook, worksheet, readOnly, rowCount: requestedRowCount, columnCount: requestedColumnCount, overscanRows, overscanColumns, onSelectionChange, onCommit, onResize, onViewportChange, className, }: SpreadsheetGridProps): import("react").JSX.Element;
108
116
  /**
109
117
  * Two-axis virtualized, accessible spreadsheet projection. The caller owns
110
118
  * durable model state; React owns only viewport, selection, and edit state.
111
119
  */
112
- export declare function SpreadsheetProjectionGrid({ projection, readOnly, overscanRows, overscanColumns, onSelectionChange, commit, commitRange, clear, onCommandError, onViewportChange, className, }: SpreadsheetProjectionGridProps): import("react").JSX.Element;
113
- export {};
120
+ export declare function SpreadsheetProjectionGrid({ projection, readOnly, overscanRows, overscanColumns, onSelectionChange, commit, commitRange, clear, resize, pendingTransactions, syncStatus, syncError, onCommandError, onViewportChange, className, }: SpreadsheetProjectionGridProps): import("react").JSX.Element;
@@ -0,0 +1,50 @@
1
+ import { type KeyboardEvent, type PointerEvent } from "react";
2
+ export type SpreadsheetDimensionAxis = "row" | "column";
3
+ /** One pixel dimension change, committed after a drag or keyboard gesture. */
4
+ export type SpreadsheetDimensionCommit = {
5
+ sheetId: string;
6
+ axis: SpreadsheetDimensionAxis;
7
+ index: number;
8
+ size: number;
9
+ };
10
+ type ResizeOptions = {
11
+ sheetId: string;
12
+ generationId: string | null;
13
+ revision: string | number;
14
+ rowHeights: readonly (readonly [number, number])[];
15
+ columnWidths: readonly (readonly [number, number])[];
16
+ defaultRowHeight: number;
17
+ defaultColumnWidth: number;
18
+ enabled: boolean;
19
+ commit?: ((change: SpreadsheetDimensionCommit) => void | Promise<void>) | undefined;
20
+ onCommandError?: ((error: Error) => void) | undefined;
21
+ onStart?: (() => void) | undefined;
22
+ };
23
+ /** Transient gesture/pending previews only; the caller owns durable dimensions. */
24
+ export declare function useSpreadsheetResizing(options: ResizeOptions): {
25
+ rowHeights: readonly (readonly [number, number])[];
26
+ columnWidths: readonly (readonly [number, number])[];
27
+ previewKey: string;
28
+ handleProps: (axis: SpreadsheetDimensionAxis, index: number) => {
29
+ onPointerDown(event: PointerEvent<HTMLDivElement>): void;
30
+ onPointerMove(event: PointerEvent<HTMLDivElement>): void;
31
+ onPointerUp(event: PointerEvent<HTMLDivElement>): void;
32
+ onPointerCancel(event: PointerEvent<HTMLDivElement>): void;
33
+ onLostPointerCapture(event: PointerEvent<HTMLDivElement>): void;
34
+ onKeyDown(event: KeyboardEvent<HTMLDivElement>): void;
35
+ onKeyUp(event: KeyboardEvent<HTMLDivElement>): void;
36
+ onBlur(): void;
37
+ };
38
+ pendingCount: number;
39
+ error: {
40
+ message: string;
41
+ retry: (() => void) | undefined;
42
+ } | null;
43
+ clearError: () => void;
44
+ };
45
+ export declare function SpreadsheetResizeHandle({ axis, label, size, ...handlers }: {
46
+ axis: SpreadsheetDimensionAxis;
47
+ label: string;
48
+ size: number;
49
+ } & ReturnType<ReturnType<typeof useSpreadsheetResizing>["handleProps"]>): import("react").JSX.Element;
50
+ export {};
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from "react";
2
+ export declare function SpreadsheetSubmissionProvider({ children }: {
3
+ children: ReactNode;
4
+ }): import("react").JSX.Element;
5
+ export declare function useSpreadsheetSubmissions(): {
6
+ getPending: () => number;
7
+ subscribe: (listener: () => void) => () => void;
8
+ run<T>(invoke: () => Promise<T>): Promise<T>;
9
+ };
@@ -0,0 +1,2 @@
1
+ export declare const VISUALIZATION_CSS = "/* Adapted from Codex visualize 1.0.32; shared with the Opengeni visualization skill. */\n:root {\n color-scheme: light dark;\n background-color: var(\n --background,\n var(--color-background-primary, light-dark(rgb(255 255 255), rgb(24 24 24)))\n ) !important;\n\n /* Agent-facing contract; keep in sync with SKILL.md. */\n --background: var(\n --color-background-primary,\n light-dark(rgb(255 255 255), rgb(24 24 24))\n );\n --foreground: var(\n --color-text-primary,\n light-dark(rgb(26 28 31), rgb(255 255 255))\n );\n --card: color-mix(in oklab, var(--foreground) 5%, var(--background));\n --card-foreground: var(\n --color-text-primary,\n light-dark(rgb(26 28 31), rgb(255 255 255))\n );\n --popover: var(\n --color-background-secondary,\n light-dark(rgb(255 255 255), rgb(45 45 45))\n );\n --popover-foreground: var(\n --color-text-primary,\n light-dark(rgb(26 28 31), rgb(255 255 255))\n );\n --primary: var(\n --color-text-info,\n light-dark(rgb(51 156 255), rgb(131 195 255))\n );\n --primary-foreground: var(\n --color-text-inverse,\n light-dark(rgb(255 255 255), rgb(13 13 13))\n );\n --secondary: var(\n --color-background-secondary,\n light-dark(rgb(255 255 255 / 96%), rgb(54 54 54 / 96%))\n );\n --secondary-foreground: var(\n --color-text-primary,\n light-dark(rgb(26 28 31), rgb(255 255 255))\n );\n --muted: color-mix(in srgb, var(--foreground) 10%, transparent);\n --muted-foreground: var(\n --color-text-secondary,\n light-dark(rgb(26 28 31 / 49.4%), rgb(255 255 255 / 49.8%))\n );\n --accent: var(\n --color-background-info,\n light-dark(rgb(229 242 255), rgb(13 39 63))\n );\n --accent-foreground: var(\n --color-text-info,\n light-dark(rgb(51 156 255), rgb(131 195 255))\n );\n --destructive: var(\n --color-text-warning,\n light-dark(rgb(226 85 7), rgb(255 133 73))\n );\n --border: var(\n --color-border-secondary,\n light-dark(rgb(26 28 31 / 8%), rgb(255 255 255 / 8.2%))\n );\n --input: var(\n --color-border-primary,\n light-dark(\n rgb(26 28 31 / 11.8%),\n color-mix(in oklab, rgb(0 0 0) 10%, transparent)\n )\n );\n --ring: var(\n --color-ring-primary,\n light-dark(rgb(51 156 255), rgb(131 195 255 / 76%))\n );\n --font-size-base: var(--font-text-md-size, 14px);\n --blue: light-dark(rgb(51 156 255), rgb(51 156 255));\n --orange: light-dark(rgb(226 85 7), rgb(251 106 34));\n --green: light-dark(rgb(0 162 64), rgb(64 201 119));\n --red: light-dark(rgb(224 46 42), rgb(255 103 100));\n --purple: light-dark(rgb(146 79 247), rgb(173 123 249));\n --yellow: light-dark(rgb(255 195 0), rgb(255 210 64));\n --viz-series-1: var(--primary);\n --viz-series-2: light-dark(rgb(243 136 59), rgb(245 154 86));\n --viz-series-3: light-dark(rgb(93 201 119), rgb(116 213 139));\n --viz-series-4: light-dark(rgb(235 119 177), rgb(240 143 192));\n --viz-series-5: light-dark(rgb(155 121 236), rgb(170 145 239));\n --viz-series-6: light-dark(rgb(58 185 177), rgb(90 203 194));\n\n /* Internal implementation variables; not part of the agent contract. */\n --font-sans: -apple-system, system-ui, \"Segoe UI\", sans-serif;\n --font-mono:\n ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\",\n monospace;\n --font-size-normal: max(11px, var(--font-size-base));\n --font-size-tooltip: calc(var(--font-size-base) - 1px);\n --font-size-small: max(11px, calc(var(--font-size-base) - 2px));\n --font-size-h1: calc(var(--font-size-normal) * 1.7142857143);\n --font-size-h2: calc(var(--font-size-normal) * 1.4285714286);\n --font-size-h3: calc(var(--font-size-normal) * 1.2857142857);\n --font-weight-normal: 430;\n --font-weight-medium: 500;\n --icon-size: 16px;\n --line-height-normal: calc(var(--font-size-normal) * 1.5);\n --line-height-tooltip: calc(var(--font-size-tooltip) * 1.4285714286);\n --line-height-small: calc(var(--font-size-small) + 4px);\n --corner-shape: round;\n --radius: var(--border-radius-lg, 10px);\n --radius-sm: calc(var(--radius) * 0.6);\n --radius-md: calc(var(--radius) * 0.8);\n --radius-lg: var(--radius);\n --radius-2xl: calc(var(--radius) * 1.6);\n --radius-full: 9999px;\n --shadow-sm: 0 1px 2px -1px rgb(0 0 0 / 8%);\n --checkmark-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 17'%3E%3Cpath d='M 12.8961 3.64101C13.1297 3.41418 13.4984 3.37523 13.7779 3.56581C14.0571 3.75635 14.1554 4.11331 14.0299 4.41347L13.9615 4.53847L7.71151 13.7045C7.59411 13.8767 7.4063 13.9877 7.19881 14.0072C6.99136 14.0267 6.78564 13.9533 6.63826 13.806L2.88826 10.056L2.79842 9.9457C2.6192 9.67407 2.64927 9.30496 2.88826 9.06581C3.12738 8.82669 3.49647 8.79676 3.76815 8.97597L3.8785 9.06581L7.03084 12.2182L12.8053 3.74941L12.8961 3.64101Z'/%3E%3C/svg%3E\");\n\n /* Legacy aliases; not part of the current agent contract. */\n --viz-bg: transparent;\n --viz-panel: var(--card);\n --viz-border: var(--border);\n --viz-text: var(--foreground);\n --viz-muted: var(--muted-foreground);\n --viz-accent: var(--primary);\n --viz-accent-text: var(--primary-foreground);\n --viz-accent-bg: var(--accent);\n --viz-font-size: var(--font-size-base);\n --viz-warning: var(--destructive);\n}\n\n:root[data-theme=\"light\"] {\n color-scheme: light;\n}\n\n:root[data-theme=\"dark\"] {\n color-scheme: dark;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml > body {\n /* Preserve MCP aliases for older inline renderers without creating :root cycles. */\n --color-background-primary: var(\n --background,\n light-dark(rgb(255 255 255), rgb(24 24 24))\n );\n --color-text-primary: var(\n --foreground,\n light-dark(rgb(26 28 31), rgb(255 255 255))\n );\n --color-border-secondary: var(\n --border,\n light-dark(rgb(26 28 31 / 8%), rgb(255 255 255 / 8.2%))\n );\n\n margin: 0;\n padding: var(--visualize-paint-gutter, 16px);\n color: var(--foreground);\n background: transparent !important;\n font-family: var(--font-sans) !important;\n font-size: var(--font-size-normal);\n font-weight: var(--font-weight-normal);\n line-height: var(--line-height-normal);\n}\n\na {\n color: color-mix(in srgb, var(--viz-accent) 80%, var(--viz-text) 20%);\n cursor: pointer;\n font-weight: var(--font-weight-medium, 500);\n text-decoration: none;\n text-underline-offset: 2px;\n}\n\na:is(:hover, :focus-visible) {\n text-decoration-line: underline;\n text-decoration-style: dashed;\n text-decoration-thickness: 0.5px;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n margin-block: 0;\n}\n\nh1 {\n font-size: var(--font-size-h1);\n font-weight: var(--font-weight-medium);\n line-height: 1.25;\n}\n\nh2 {\n font-size: var(--font-size-h2);\n font-weight: var(--font-weight-medium);\n line-height: 1.25;\n}\n\nh3,\nh4,\nh5,\nh6 {\n font-size: var(--font-size-h3);\n font-weight: var(--font-weight-medium);\n line-height: 1.3;\n}\n\nb,\nstrong,\nth {\n font-weight: var(--font-weight-medium);\n}\n\ncode:not(pre code) {\n display: inline;\n padding: 1px 6px;\n border-radius: var(--radius-sm);\n corner-shape: var(--corner-shape);\n background: var(--muted);\n font-family: var(--font-mono);\n font-size: 0.92em;\n overflow-wrap: anywhere;\n -webkit-box-decoration-break: clone;\n box-decoration-break: clone;\n word-break: break-word;\n}\n\n.table-responsive {\n width: 100%;\n overflow-x: auto;\n scrollbar-width: thin;\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n color: var(--foreground);\n font: inherit;\n text-align: start;\n}\n\n.table :is(th, td) {\n padding-block: 10px;\n padding-inline: 0 24px;\n overflow-wrap: anywhere;\n border-bottom: 1px solid var(--border);\n text-align: start;\n vertical-align: top;\n}\n\n.table-responsive > .table :is(th, td) {\n overflow-wrap: break-word;\n}\n\n.table :is(th, td):last-child {\n padding-inline-end: 0;\n}\n\n.table :is(caption, thead th) {\n font-weight: 600;\n}\n\n.table thead th {\n padding-block: 8px;\n border-bottom-color: color-mix(in srgb, var(--foreground) 16%, transparent);\n}\n\n.table tbody tr:last-child :is(th, td) {\n border-bottom: 0;\n}\n\n.table.table-sm :is(th, td) {\n padding-block: 6px;\n}\n\n.table.table-sm :is(th, td):not(:last-child) {\n padding-inline-end: 16px;\n}\n\n.table :is(.text-end, [align=\"right\"]) {\n text-align: end;\n font-variant-numeric: tabular-nums;\n}\n\n.table :is(.text-center, [align=\"center\"]) {\n text-align: center;\n}\n\n.table .text-nowrap {\n white-space: nowrap;\n}\n\n#widget {\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n padding: 0;\n background: transparent !important;\n}\n\n.card {\n min-width: 0;\n padding: 12px;\n overflow: hidden;\n overflow-wrap: break-word;\n border-radius: var(--radius-2xl);\n corner-shape: var(--corner-shape);\n color: var(--card-foreground);\n background: var(--card);\n}\n\n#widget > :not(.card, .progress) {\n width: 100% !important;\n max-width: none !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n border-radius: 0 !important;\n background: transparent !important;\n box-shadow: none !important;\n}\n\n.tooltip {\n position: fixed;\n z-index: 50;\n top: 0;\n left: 0;\n width: max-content;\n max-width: min(\n 20rem,\n var(--tooltip-available-width, calc(100vw - 10px)),\n calc(100vw - 10px)\n );\n max-height: min(\n var(--tooltip-available-height, calc(100vh - 10px)),\n calc(100vh - 10px)\n );\n padding: 4px 8px;\n border: 1px solid var(--border);\n border-radius: var(--radius-lg);\n corner-shape: var(--corner-shape);\n color: var(--popover-foreground);\n background: var(--popover);\n box-shadow: none;\n font-size: var(--font-size-tooltip);\n line-height: var(--line-height-tooltip);\n overflow-wrap: break-word;\n white-space: normal;\n pointer-events: none;\n user-select: none;\n}\n\n.viz-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(max(180px, 24%), 1fr));\n gap: 10px;\n}\n\n.viz-stat {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.viz-stat-value {\n font-size: var(--font-size-h2);\n font-weight: var(--font-weight-medium);\n line-height: 1.25;\n}\n\n.viz-row {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 10px;\n}\n\nhr {\n width: 100%;\n height: 1px;\n margin-block: 6px;\n border: 0;\n background: var(--border);\n}\n\n.nav {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 4px;\n}\n\n.progress {\n display: flex;\n height: 8px;\n margin-block: calc((var(--line-height-normal, 1.5em) - 8px) / 2);\n overflow: hidden;\n border: 0;\n border-radius: var(--radius-full);\n background: var(--muted);\n}\n\n.progress-bar:only-child {\n border-radius: var(--radius-full);\n}\n\n.progress-bar {\n height: 100%;\n flex-shrink: 0;\n border: 0;\n background: var(--viz-series-1);\n}\n\n.viz-badge {\n padding: 3px 8px;\n border-radius: var(--radius-full);\n color: var(--accent-foreground);\n background: var(--accent);\n font-weight: var(--font-weight-medium);\n}\n\nsmall,\n.text-small,\n.viz-badge {\n font-size: var(--font-size-small);\n line-height: var(--line-height-small);\n}\n\n.text-muted {\n color: var(--muted-foreground);\n}\n\n.tabular-nums {\n font-variant-numeric: tabular-nums;\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.viz-controls {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n\n.viz-controls > .form-label {\n display: grid;\n min-width: min(100%, 260px);\n flex: 1 1 280px;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: baseline;\n gap: 2px 12px;\n margin-bottom: 0;\n}\n\n.viz-controls > .form-label > :is(.form-control, .form-range, .form-select) {\n grid-column: 1 / -1;\n}\n\n.btn,\n.nav-link,\n.form-check-input,\n.form-control,\n.form-range,\n.form-select {\n font: inherit;\n}\n\n.btn,\n.nav-link {\n appearance: button;\n display: inline-flex;\n inline-size: fit-content;\n max-inline-size: 100%;\n min-height: 28px;\n align-items: center;\n justify-content: center;\n gap: 4px;\n margin: 0;\n padding: 0 8px;\n -webkit-app-region: no-drag;\n border: 1px solid var(--input);\n border-radius: var(--radius-lg);\n corner-shape: var(--corner-shape);\n color: var(--secondary-foreground);\n background: var(--secondary);\n cursor: var(--cursor-interaction, pointer);\n text-align: center;\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n -webkit-font-smoothing: antialiased;\n}\n\n.btn:is(.btn-block, .viz-tile) {\n inline-size: 100%;\n}\n\n.btn.viz-tile {\n min-width: 0;\n overflow-wrap: anywhere;\n white-space: normal;\n}\n\na.btn {\n cursor: pointer;\n text-decoration: none;\n}\n\n.btn:not(:disabled):hover,\n.nav-link:not(:disabled):not([aria-disabled=\"true\"]):hover {\n background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));\n}\n\n.btn-primary {\n border-color: transparent;\n color: var(--primary-foreground);\n background: var(--foreground);\n background-clip: padding-box;\n}\n\n.btn-primary .text-muted {\n color: color-mix(in srgb, var(--primary-foreground) 50%, transparent);\n}\n\n.btn-primary:not(:disabled):hover {\n background: color-mix(in srgb, var(--foreground) 80%, transparent);\n background-clip: padding-box;\n}\n\n.btn-ghost {\n border-color: transparent;\n color: var(--muted-foreground);\n background: transparent;\n}\n\n.btn-ghost:not(:disabled):hover {\n color: var(--foreground);\n background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));\n}\n\n.nav-pills .nav-link {\n min-width: 0;\n border-color: transparent;\n color: var(--muted-foreground);\n background: transparent;\n}\n\n.nav-justified .nav-link {\n flex: 1 1 0;\n overflow-wrap: anywhere;\n white-space: normal;\n}\n\n.nav-pills .nav-link.active {\n color: var(--foreground);\n background: var(--muted);\n}\n\n.btn:disabled,\n.nav-link:disabled,\n.nav-link[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n[data-lucide] {\n stroke-width: 1.6;\n}\n\n.form-label {\n display: block;\n margin-bottom: 6px;\n color: var(--foreground);\n}\n\n.form-control {\n display: block;\n width: 100%;\n min-height: 28px;\n padding: 0 8px;\n outline: none;\n border: 1px solid var(--input);\n border-radius: var(--radius-lg);\n corner-shape: var(--corner-shape);\n color: var(--foreground);\n background: var(--secondary);\n}\n\n.form-control::placeholder {\n color: var(--muted-foreground);\n}\n\n.form-control[type=\"file\"] {\n padding: 0;\n overflow: hidden;\n cursor: var(--cursor-interaction, pointer);\n}\n\n.form-control[type=\"file\"]::file-selector-button {\n min-height: 26px;\n margin-right: 8px;\n padding: 0 8px;\n border: 0;\n border-right: 1px solid var(--input);\n color: var(--secondary-foreground);\n background: var(--secondary);\n cursor: inherit;\n font: inherit;\n}\n\n.form-control[type=\"file\"]:not(:disabled):hover::file-selector-button {\n background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));\n}\n\n.form-control-color[type=\"color\"] {\n width: 40px;\n height: 28px;\n padding: 3px;\n cursor: var(--cursor-interaction, pointer);\n}\n\n.form-control-color[type=\"color\"]::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n.form-control-color[type=\"color\"]::-webkit-color-swatch {\n border: 0;\n border-radius: calc(var(--radius-lg) - 4px);\n corner-shape: var(--corner-shape);\n}\n\ntextarea.form-control {\n height: auto;\n min-height: 72px;\n padding: 8px 10px;\n resize: vertical;\n}\n\n.form-control:focus-visible {\n border-color: var(--ring);\n box-shadow: inset 0 0 0 1px var(--ring);\n}\n\n.form-control:disabled,\n.form-select:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.form-select {\n appearance: none;\n display: block;\n width: 100%;\n min-height: 28px;\n margin: 0;\n padding: 0 32px 0 8px;\n outline: none;\n border: 1px solid var(--input);\n border-radius: var(--radius-lg);\n corner-shape: var(--corner-shape);\n color: var(--foreground);\n background-color: var(--secondary);\n background-image:\n linear-gradient(45deg, transparent 50%, var(--muted-foreground) 50%),\n linear-gradient(135deg, var(--muted-foreground) 50%, transparent 50%);\n background-position:\n calc(100% - 14px) 50%,\n calc(100% - 10px) 50%;\n background-repeat: no-repeat;\n background-size: 4px 4px;\n cursor: var(--cursor-interaction, default);\n}\n\n.form-select:not(:disabled):hover {\n background-color: color-mix(in srgb, var(--foreground) 6%, var(--secondary));\n}\n\n.form-select:focus-visible {\n border-color: var(--ring);\n box-shadow: inset 0 0 0 1px var(--ring);\n}\n\n.form-check {\n display: flex;\n min-height: 20px;\n align-items: center;\n gap: 6px;\n}\n\n.form-check-input {\n appearance: none;\n width: 14px;\n height: 14px;\n flex: 0 0 auto;\n margin: 0;\n border: 1px solid var(--input);\n color: var(--primary-foreground);\n background-color: transparent;\n cursor: var(--cursor-interaction, default);\n transition:\n background-color 150ms,\n border-color 150ms,\n box-shadow 150ms;\n}\n\n.form-check:not(.form-switch) .form-check-input[type=\"checkbox\"] {\n border-color: var(--input);\n border-radius: var(--radius-sm);\n corner-shape: var(--corner-shape);\n background-color: var(--secondary);\n box-shadow: var(--shadow-sm);\n}\n\n.form-check:not(.form-switch)\n .form-check-input:not(:disabled):not(:checked):hover {\n background-color: var(--card);\n}\n\n.form-check:not(.form-switch) .form-check-input[type=\"checkbox\"]:checked {\n border-color: var(--primary);\n background-color: var(--primary);\n}\n\n.form-check:not(.form-switch)\n .form-check-input[type=\"checkbox\"]:checked::before {\n display: block;\n width: 100%;\n height: 100%;\n background: var(--primary-foreground);\n content: \"\";\n mask: var(--checkmark-image) center / 12px 12px no-repeat;\n}\n\n.form-check-input[type=\"radio\"] {\n width: 14px;\n height: 14px;\n border-radius: var(--radius-full);\n}\n\n.form-check-input[type=\"radio\"]:checked {\n border: 2px solid var(--primary);\n background:\n radial-gradient(circle, var(--primary-foreground) 0 2.5px, transparent 3px),\n var(--primary);\n}\n\n.form-check:not(.form-switch) .form-check-input:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: 2px;\n}\n\n.form-check:not(.form-switch) .form-check-input:disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.form-check:not(.form-switch) .form-check-input:disabled + .form-check-label {\n cursor: not-allowed;\n}\n\n.form-switch .form-check-input:disabled,\n.form-switch .form-check-input:disabled + .form-check-label {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.form-check-label {\n color: var(--foreground);\n cursor: var(--cursor-interaction, default);\n}\n\n.form-switch .form-check-input {\n position: relative;\n width: 32px;\n height: 20px;\n border: 0;\n border-radius: var(--radius-full);\n background: var(--muted);\n box-shadow: none;\n transition: background-color 200ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n.form-switch .form-check-input::before {\n position: absolute;\n top: 50%;\n left: 0;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border: 1px solid light-dark(var(--primary-foreground), var(--foreground));\n border-radius: var(--radius-full);\n background: light-dark(var(--primary-foreground), var(--foreground));\n box-shadow: var(--shadow-sm);\n content: \"\";\n transform: translate(2px, -50%);\n transition: transform 200ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n.form-switch .form-check-input:checked {\n background: var(--primary);\n}\n\n.form-switch .form-check-input:checked::before {\n transform: translate(14px, -50%);\n}\n\n.form-switch .form-check-input:focus-visible {\n box-shadow: 0 0 0 2px var(--ring);\n}\n\n.form-range {\n appearance: none;\n display: block;\n width: 100%;\n height: 28px;\n flex: 1;\n margin: 0;\n padding: 0;\n outline: none;\n border: 0;\n accent-color: var(--primary);\n background: linear-gradient(\n color-mix(in srgb, var(--foreground) 7%, transparent),\n color-mix(in srgb, var(--foreground) 7%, transparent)\n )\n center / 100% 2px no-repeat;\n}\n\n.form-range::-webkit-slider-runnable-track {\n height: 28px;\n background: transparent;\n}\n\n.form-range::-webkit-slider-thumb {\n appearance: none;\n width: 20px;\n height: 20px;\n margin-top: 4px;\n border: 1px solid var(--border);\n border-radius: var(--radius-full);\n background: light-dark(var(--primary-foreground), var(--foreground));\n}\n\n.form-range:focus-visible::-webkit-slider-thumb {\n border-color: var(--ring);\n box-shadow: inset 0 0 0 1px var(--ring);\n}\n\n.form-range::-moz-range-track {\n height: 28px;\n background: transparent;\n}\n\n.form-range::-moz-range-thumb {\n width: 20px;\n height: 20px;\n border: 1px solid var(--border);\n border-radius: var(--radius-full);\n background: light-dark(var(--primary-foreground), var(--foreground));\n}\n\n.form-range:focus-visible::-moz-range-thumb {\n border-color: var(--ring);\n box-shadow: inset 0 0 0 1px var(--ring);\n}\n\n.form-range:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.btn:not(.btn-primary, .viz-tile):is(\n [aria-pressed=\"true\"],\n [aria-selected=\"true\"],\n .is-selected\n) {\n border-color: var(--primary);\n color: var(--primary-foreground);\n background: var(--primary);\n}\n\n.btn.viz-tile:is([aria-pressed=\"true\"], [aria-selected=\"true\"], .is-selected) {\n border-color: var(--primary);\n box-shadow: inset 0 0 0 1px var(--primary);\n}\n\n.btn:focus-visible,\n.nav-link:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: 2px;\n}\n\n@media (pointer: coarse) {\n .btn,\n .nav-link,\n .form-control,\n .form-select {\n min-width: 44px;\n min-height: 44px;\n }\n\n /* Keep small-screen WebKit from zooming when a text field receives focus. */\n .form-control,\n .form-select {\n font-size: max(16px, var(--font-size-normal));\n }\n\n .form-control[type=\"file\"]::file-selector-button {\n min-width: 44px;\n min-height: 44px;\n }\n\n .form-control-color[type=\"color\"] {\n width: 44px;\n height: 44px;\n }\n\n .form-control:is(\n [type=\"date\"],\n [type=\"datetime-local\"],\n [type=\"month\"],\n [type=\"time\"],\n [type=\"week\"]\n ) {\n min-width: 0;\n max-width: 100%;\n padding-block: 8px;\n }\n\n .form-check {\n min-height: 44px;\n padding-inline: 15px;\n }\n\n .form-check-input {\n position: relative;\n }\n\n .form-check-input::after {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 44px;\n height: 44px;\n content: \"\";\n transform: translate(-50%, -50%);\n }\n\n .form-check-label {\n display: inline-flex;\n min-width: 44px;\n min-height: 44px;\n align-items: center;\n }\n\n .form-range {\n height: 44px;\n touch-action: pan-y;\n }\n\n .form-range::-webkit-slider-runnable-track {\n height: 44px;\n }\n\n .form-range::-moz-range-track {\n height: 44px;\n }\n\n .form-range::-webkit-slider-thumb {\n margin-top: 12px;\n }\n}\n\nsvg {\n display: block;\n max-width: 100%;\n height: auto;\n}\n\n#widget > svg {\n width: 100%;\n}\n\n/* Model-authored chart rules can otherwise stretch icons after these styles load. */\nsvg.lucide {\n display: block;\n width: var(--icon-size) !important;\n height: var(--icon-size) !important;\n flex: none;\n margin: 0 !important;\n stroke-width: 1.6;\n}\n\n.text-warning,\n.text-destructive {\n color: var(--destructive);\n}\n";
2
+ export declare const VISUALIZATION_HELPERS = "\n<script src=\"https://unpkg.com/@floating-ui/core@1.7.3/dist/floating-ui.core.umd.min.js\"></script>\n<script src=\"https://unpkg.com/@floating-ui/dom@1.7.4/dist/floating-ui.dom.umd.min.js\"></script>\n<script>\n (() => {\n if (window.FloatingUIDOM == null) {\n return;\n }\n const { autoUpdate, computePosition, flip, offset, shift, size } = window.FloatingUIDOM;\n const tooltipPlacements = new Set([\"top\", \"right\", \"bottom\", \"left\"]);\n const tooltipId = `codex-visualization-tooltip-${\n window.crypto?.randomUUID?.() ?? Date.now().toString(36)\n }`;\n const tooltipGap = 5;\n const hoverDelay = 700;\n const skipDelay = 300;\n let activeTrigger = null;\n let pendingTrigger = null;\n let tooltip = null;\n let openTimeout = null;\n let autoUpdateCleanup = null;\n let positionRequest = 0;\n let skipDelayUntil = 0;\n let lastPointerWasTouch = false;\n let pinnedByTouch = false;\n\n const getTrigger = (target) =>\n target?.nodeType === Node.ELEMENT_NODE ? target.closest(\"[data-tooltip]\") : null;\n const containsTarget = (trigger, target) =>\n target?.nodeType != null && trigger.contains(target);\n const getContent = (trigger) => trigger.getAttribute(\"data-tooltip\")?.trim() ?? \"\";\n const getPlacement = (trigger) => {\n const placement = trigger.getAttribute(\"data-tooltip-placement\");\n return tooltipPlacements.has(placement) ? placement : \"top\";\n };\n const getTooltip = () => {\n if (tooltip == null) {\n tooltip = document.createElement(\"div\");\n tooltip.id = tooltipId;\n tooltip.className = \"tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n }\n return tooltip;\n };\n const setDescribedBy = (trigger, described) => {\n const ids = new Set(\n (trigger.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter(Boolean),\n );\n if (described) {\n ids.add(tooltipId);\n } else {\n ids.delete(tooltipId);\n }\n if (ids.size === 0) {\n trigger.removeAttribute(\"aria-describedby\");\n } else {\n trigger.setAttribute(\"aria-describedby\", [...ids].join(\" \"));\n }\n };\n const clearOpenTimeout = () => {\n if (openTimeout != null) {\n window.clearTimeout(openTimeout);\n openTimeout = null;\n }\n pendingTrigger = null;\n };\n const closeTooltip = (activateSkipDelay = true) => {\n clearOpenTimeout();\n pinnedByTouch = false;\n positionRequest += 1;\n autoUpdateCleanup?.();\n autoUpdateCleanup = null;\n if (activeTrigger == null) {\n return;\n }\n setDescribedBy(activeTrigger, false);\n activeTrigger = null;\n tooltip?.remove();\n if (activateSkipDelay) {\n skipDelayUntil = Date.now() + skipDelay;\n }\n };\n const updatePosition = (trigger, floating) => {\n const request = ++positionRequest;\n void computePosition(trigger, floating, {\n middleware: [\n offset(tooltipGap),\n flip({ padding: tooltipGap }),\n shift({ padding: tooltipGap }),\n size({\n padding: tooltipGap,\n apply({ availableHeight, availableWidth, elements }) {\n elements.floating.style.setProperty(\n \"--tooltip-available-width\",\n `${Math.max(0, availableWidth)}px`,\n );\n elements.floating.style.setProperty(\n \"--tooltip-available-height\",\n `${Math.max(0, availableHeight)}px`,\n );\n },\n }),\n ],\n placement: getPlacement(trigger),\n strategy: \"fixed\",\n })\n .then(({ x, y }) => {\n if (activeTrigger !== trigger || request !== positionRequest) {\n return;\n }\n const scale = window.devicePixelRatio || 1;\n floating.style.transform = `translate(${Math.round(x * scale) / scale}px, ${Math.round(y * scale) / scale}px)`;\n floating.style.visibility = \"visible\";\n })\n .catch(() => {\n if (activeTrigger === trigger && request === positionRequest) {\n closeTooltip(false);\n }\n });\n };\n const openTooltip = (trigger) => {\n const content = getContent(trigger);\n if (!trigger.isConnected || content.length === 0) {\n return;\n }\n clearOpenTimeout();\n if (activeTrigger === trigger) {\n return;\n }\n closeTooltip();\n const floating = getTooltip();\n floating.textContent = content;\n floating.style.visibility = \"hidden\";\n floating.style.transform = \"translate(0, 0)\";\n document.body.appendChild(floating);\n activeTrigger = trigger;\n setDescribedBy(trigger, true);\n autoUpdateCleanup = autoUpdate(trigger, floating, () => {\n updatePosition(trigger, floating);\n });\n };\n const requestOpen = (trigger, immediate = false) => {\n if (\n getContent(trigger).length === 0 ||\n activeTrigger === trigger ||\n pendingTrigger === trigger\n ) {\n return;\n }\n clearOpenTimeout();\n pendingTrigger = trigger;\n const delay =\n immediate || activeTrigger != null || Date.now() < skipDelayUntil ? 0 : hoverDelay;\n if (delay === 0) {\n openTooltip(trigger);\n return;\n }\n openTimeout = window.setTimeout(() => {\n openTimeout = null;\n pendingTrigger = null;\n openTooltip(trigger);\n }, delay);\n };\n const handlePointerOpen = (event) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n const trigger = getTrigger(event.target);\n if (trigger == null || containsTarget(trigger, event.relatedTarget)) {\n return;\n }\n requestOpen(trigger);\n };\n const handlePointer = (event) => {\n lastPointerWasTouch = event.type === \"pointerdown\" && event.pointerType === \"touch\";\n };\n const handleTouchClick = (event) => {\n const isTouch = event.pointerType === \"touch\" || lastPointerWasTouch;\n lastPointerWasTouch = false;\n if (!isTouch || event.detail === 0) {\n return;\n }\n const trigger = getTrigger(event.target);\n if (\n trigger == null ||\n !trigger.isConnected ||\n getContent(trigger).length === 0 ||\n (pinnedByTouch && activeTrigger === trigger)\n ) {\n if (pinnedByTouch) {\n closeTooltip();\n }\n return;\n }\n openTooltip(trigger);\n pinnedByTouch = activeTrigger === trigger;\n window.setTimeout(() => {\n if (activeTrigger === trigger && !trigger.isConnected) {\n closeTooltip(false);\n }\n }, 0);\n };\n const handleLeave = (event) => {\n if (pinnedByTouch) {\n return;\n }\n const trigger = getTrigger(event.target);\n if (trigger == null || containsTarget(trigger, event.relatedTarget)) {\n return;\n }\n if (activeTrigger === trigger || pendingTrigger === trigger) {\n closeTooltip();\n }\n };\n const handleFocusIn = (event) => {\n const trigger = getTrigger(event.target);\n if (trigger?.matches(\":focus-visible\")) {\n requestOpen(trigger, true);\n }\n };\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n closeTooltip();\n }\n };\n const handleContextMenu = (event) => {\n lastPointerWasTouch = false;\n const trigger = getTrigger(event.target);\n if (activeTrigger === trigger || pendingTrigger === trigger) {\n closeTooltip();\n }\n };\n const destroy = () => {\n closeTooltip(false);\n lastPointerWasTouch = false;\n document.removeEventListener(\"pointerover\", handlePointerOpen);\n document.removeEventListener(\"pointerdown\", handlePointer);\n document.removeEventListener(\"pointercancel\", handlePointer);\n document.removeEventListener(\"click\", handleTouchClick);\n document.removeEventListener(\"pointerout\", handleLeave);\n document.removeEventListener(\"focusin\", handleFocusIn);\n document.removeEventListener(\"focusout\", handleLeave);\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"contextmenu\", handleContextMenu);\n tooltip = null;\n };\n\n document.addEventListener(\"pointerover\", handlePointerOpen);\n document.addEventListener(\"pointerdown\", handlePointer);\n document.addEventListener(\"pointercancel\", handlePointer);\n document.addEventListener(\"click\", handleTouchClick);\n document.addEventListener(\"pointerout\", handleLeave);\n document.addEventListener(\"focusin\", handleFocusIn);\n document.addEventListener(\"focusout\", handleLeave);\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"contextmenu\", handleContextMenu);\n window.addEventListener(\"pagehide\", destroy, { once: true });\n })();\n</script>\n<script id=\"codex-visualization-tabs\">\n (() => {\n const selector = '.nav[role=\"tablist\"] [role=\"tab\"]';\n const disabled = ':disabled,[aria-disabled=\"true\"]';\n const selectTab = (selected) => {\n const panelId = selected.getAttribute(\"aria-controls\");\n for (const tab of selected.closest('[role=\"tablist\"]').querySelectorAll('[role=\"tab\"]')) {\n const active = tab === selected;\n tab.classList.toggle(\"active\", active);\n tab.setAttribute(\"aria-selected\", String(active));\n const id = tab.getAttribute(\"aria-controls\");\n const panel = id && document.getElementById(id);\n if (panel != null) {\n panel.hidden = id !== panelId;\n if (!panel.hidden && selected.id) {\n panel.setAttribute(\"aria-labelledby\", selected.id);\n }\n }\n }\n };\n const interact = (event) => {\n const tab = event.target?.closest?.(selector);\n if (event.defaultPrevented || tab == null || tab.matches(disabled)) {\n return;\n }\n if (event.type === \"click\") {\n selectTab(tab);\n return;\n }\n const tabs = Array.from(\n tab.closest('[role=\"tablist\"]').querySelectorAll('[role=\"tab\"]'),\n ).filter((candidate) => !candidate.matches(disabled));\n const current = tabs.indexOf(tab);\n let next;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n next = (current + 1) % tabs.length;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n next = (current + tabs.length - 1) % tabs.length;\n } else if (event.key === \"Home\") {\n next = 0;\n } else if (event.key === \"End\") {\n next = tabs.length - 1;\n } else {\n return;\n }\n event.preventDefault();\n tabs[next].focus();\n selectTab(tabs[next]);\n };\n\n for (const list of document.querySelectorAll('.nav[role=\"tablist\"]')) {\n const selected =\n list.querySelector('[role=\"tab\"][aria-selected=\"true\"]') ??\n list.querySelector('[role=\"tab\"].active') ??\n list.querySelector('[role=\"tab\"]');\n if (selected != null) {\n selectTab(selected);\n }\n }\n document.addEventListener(\"click\", interact);\n document.addEventListener(\"keydown\", interact);\n window.addEventListener(\n \"pagehide\",\n () => {\n document.removeEventListener(\"click\", interact);\n document.removeEventListener(\"keydown\", interact);\n },\n { once: true },\n );\n })();\n</script>\n<script\n id=\"codex-visualization-lucide\"\n async\n src=\"https://unpkg.com/lucide@1.17.0/dist/umd/lucide.js\"\n></script>\n<script>\n (() => {\n const initialize = () => {\n globalThis.lucide?.createIcons({ attrs: { width: 16, height: 16 } });\n };\n if (globalThis.lucide != null) {\n initialize();\n return;\n }\n document\n .getElementById(\"codex-visualization-lucide\")\n ?.addEventListener(\"load\", initialize, { once: true });\n })();\n</script>\n";
@@ -0,0 +1,16 @@
1
+ import type { BrowserAction, BrowserActionReceipt, BrowserObservation } from "@opengeni/sdk/interaction";
2
+ /** Human fallback for native popup windows missing from Chromium page frames. */
3
+ export declare function BrowserSelectControl(props: {
4
+ /** Older controllers need an explicit read to discover native popup options. */
5
+ manualFallback?: boolean;
6
+ activation?: {
7
+ observation: BrowserObservation | null;
8
+ anchor: {
9
+ x: number;
10
+ y: number;
11
+ } | null;
12
+ } | null;
13
+ onDismiss?: () => void;
14
+ observe: () => Promise<BrowserObservation>;
15
+ act: (action: BrowserAction, observation: BrowserObservation) => Promise<BrowserActionReceipt>;
16
+ }): import("react").JSX.Element | null;
@@ -2,14 +2,23 @@ import type { ComputerSession, InteractionPlacement } from "@opengeni/sdk/intera
2
2
  import { type ReactNode } from "react";
3
3
  import { type BrowserFrameWebSocketFactory } from "../hooks/use-browser-frame-stream.js";
4
4
  import type { EmbeddedBrowserInteractionClientOverride } from "../session-context.js";
5
+ /**
6
+ * Delay before retrying an automatic end of a lost attached-device browser, or null to stop.
7
+ * A refusal (4xx, e.g. 409 when the server will not end it) is never retried: re-sending it on
8
+ * every registry refresh looped about one request per second on prod.
9
+ */
10
+ export declare function staleBrowserEndRetryDelayMs(cause: unknown, failedAttempts: number): number | null;
5
11
  export type BrowserViewerNotification = {
6
12
  kind: "error" | "info";
7
13
  message: string;
8
14
  };
9
15
  export type BrowserViewerProps = EmbeddedBrowserInteractionClientOverride & {
10
- /** The selected OpenGeni agent/session. Peer BrowserSessions stay discoverable. */
16
+ /** The selected Opengeni agent/session. Peer BrowserSessions stay discoverable. */
11
17
  sessionId: string;
12
18
  enabled?: boolean | undefined;
19
+ /** Whether the Browser tab is selected. Keeps the mounted media stream warm
20
+ * while pausing semantic reads behind other dock tabs. */
21
+ active?: boolean | undefined;
13
22
  className?: string | undefined;
14
23
  onNotify?: ((notification: BrowserViewerNotification) => void) | undefined;
15
24
  /** Tests/demos only. Production uses the browser's native WebSocket. */
@@ -33,4 +42,4 @@ export type BrowserViewerProps = EmbeddedBrowserInteractionClientOverride & {
33
42
  * browser/tab switching, live frames, semantic fallback, direct human input,
34
43
  * address navigation, diagnostics, and reconnect. Closing it never closes the browser.
35
44
  */
36
- export declare function BrowserViewer({ sessionId, enabled, className, onNotify, webSocketFactory, renderEmpty, createLinkedComputer, onOpenComputer, initialBrowserSessionId, onBrowserSessionIdChange, browserExtensionSetupUrl, ...override }: BrowserViewerProps): import("react").JSX.Element | null;
45
+ export declare function BrowserViewer({ sessionId, enabled, active, className, onNotify, webSocketFactory, renderEmpty, createLinkedComputer, onOpenComputer, initialBrowserSessionId, onBrowserSessionIdChange, browserExtensionSetupUrl, ...override }: BrowserViewerProps): import("react").JSX.Element | null;