@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,260 @@
1
+ import type { OpenGeniClient, ToolGatewayIdentity } from "@opengeni/sdk";
2
+ import { useEffect, useMemo, useState } from "react";
3
+
4
+ import { loadSiteSnapshot } from "../../sites-ui";
5
+ import { useOpenGeniLinkResolver } from "../open-geni-links";
6
+ import {
7
+ ArtifactButton,
8
+ ArtifactLabelsProvider,
9
+ ArtifactSelect,
10
+ useArtifactLabels,
11
+ type ArtifactLabels,
12
+ } from "./artifact-chrome";
13
+ import { ArtifactSandbox } from "./artifact-sandbox";
14
+ import { DeferredChatMedia } from "./deferred-chat-media";
15
+ import { inlineHtmlDocument } from "./inline-html-document";
16
+ import type { PublishedHtmlArtifactToolBridge } from "./published-html-artifact-frame";
17
+
18
+ // Fixed chat viewports keep async Site loads and fragment resize messages from
19
+ // moving the conversation. Full-screen remains available for larger content.
20
+ const INLINE_PREVIEW_HEIGHT = 360;
21
+ const SITE_PREVIEW_HEIGHT = 400;
22
+ const PREVIEW_CHROME_HEIGHT = 50;
23
+
24
+ /** Reads a Site needs to render; the console client, the SDK client, or a proxy. */
25
+ export type SiteSnapshotClient = Pick<
26
+ OpenGeniClient,
27
+ "getWorkspaceArtifact" | "getWorkspaceArtifactHtml"
28
+ > &
29
+ Partial<Pick<OpenGeniClient, "getWorkspaceArtifactContent">>;
30
+
31
+ /** The exact saved Site a tool bridge is pinned to (absent for inline HTML). */
32
+ export type SiteToolScope = {
33
+ artifactId: string;
34
+ siteVersionId: string;
35
+ requestedTools: readonly ToolGatewayIdentity[];
36
+ };
37
+
38
+ /** Host-owned Site API access. Omit it and Sites render without workspace tools. */
39
+ export type SiteToolBridgeFactory = (
40
+ site?: SiteToolScope,
41
+ ) => PublishedHtmlArtifactToolBridge | undefined;
42
+
43
+ export type ChatInteractiveBlockProps = {
44
+ workspaceId: string;
45
+ kind: "html" | "site";
46
+ content: string;
47
+ client: SiteSnapshotClient;
48
+ toolBridge?: SiteToolBridgeFactory | undefined;
49
+ theme?: "light" | "dark" | undefined;
50
+ /** Translations for the preview's copy; defaults to English. */
51
+ labels?: Partial<ArtifactLabels> | undefined;
52
+ };
53
+
54
+ /**
55
+ * Inline preview for an assistant `opengeni-html` or `opengeni-site` fence, as
56
+ * the Opengeni console renders it. "Open Site" goes through the nearest
57
+ * `resolveLink`, so a host decides where a Site opens.
58
+ */
59
+ export function ChatInteractiveBlock({ labels, ...props }: ChatInteractiveBlockProps) {
60
+ return (
61
+ <ArtifactLabelsProvider labels={labels}>
62
+ <InteractiveBlock {...props} />
63
+ </ArtifactLabelsProvider>
64
+ );
65
+ }
66
+
67
+ function InteractiveBlock(props: ChatInteractiveBlockProps) {
68
+ const labels = useArtifactLabels();
69
+ const height =
70
+ (props.kind === "html" ? INLINE_PREVIEW_HEIGHT : SITE_PREVIEW_HEIGHT) + PREVIEW_CHROME_HEIGHT;
71
+ return (
72
+ <DeferredChatMedia
73
+ key={`${props.workspaceId}:${props.kind}:${props.kind === "site" ? props.content : "inline"}`}
74
+ height={height}
75
+ actionLabel={props.kind === "html" ? labels.loadPreview : labels.loadSitePreview}
76
+ >
77
+ <div style={{ height }}>
78
+ <LoadedChatInteractiveBlock {...props} />
79
+ </div>
80
+ </DeferredChatMedia>
81
+ );
82
+ }
83
+
84
+ function LoadedChatInteractiveBlock(props: ChatInteractiveBlockProps) {
85
+ const labels = useArtifactLabels();
86
+ if (props.kind === "html") return <InlineHtml {...props} />;
87
+ try {
88
+ const value = JSON.parse(props.content);
89
+ if (
90
+ !value ||
91
+ typeof value.siteId !== "string" ||
92
+ !/^[0-9a-f-]{36}$/i.test(value.siteId) ||
93
+ (value.versionId !== undefined &&
94
+ (typeof value.versionId !== "string" || !/^[0-9a-f-]{36}$/i.test(value.versionId)))
95
+ )
96
+ throw new Error("Invalid Site reference");
97
+ return (
98
+ <SiteEmbed
99
+ key={`${props.workspaceId}:${value.siteId}:${value.versionId ?? "current"}`}
100
+ {...props}
101
+ siteId={value.siteId}
102
+ initialVersionId={value.versionId}
103
+ />
104
+ );
105
+ } catch {
106
+ return <p role="alert">{labels.siteReferenceInvalid}</p>;
107
+ }
108
+ }
109
+
110
+ function InlineHtml({ content, toolBridge, theme }: ChatInteractiveBlockProps) {
111
+ const labels = useArtifactLabels();
112
+ const html = useMemo(() => inlineHtmlDocument(content), [content]);
113
+ const bridge = useMemo(() => toolBridge?.(), [toolBridge]);
114
+ return (
115
+ <ArtifactSandbox
116
+ title={labels.preview}
117
+ showTitle={false}
118
+ showLiveStatus={false}
119
+ html={html}
120
+ toolBridge={bridge}
121
+ height={INLINE_PREVIEW_HEIGHT}
122
+ className="h-full"
123
+ fill
124
+ theme={theme}
125
+ />
126
+ );
127
+ }
128
+
129
+ function SiteEmbed(
130
+ props: ChatInteractiveBlockProps & { siteId: string; initialVersionId?: string },
131
+ ) {
132
+ const [versionId, setVersionId] = useState(props.initialVersionId);
133
+ return (
134
+ <SiteEmbedContent
135
+ key={versionId ?? "current"}
136
+ {...props}
137
+ versionId={versionId}
138
+ onVersionChange={setVersionId}
139
+ />
140
+ );
141
+ }
142
+
143
+ function SiteEmbedContent({
144
+ workspaceId,
145
+ client,
146
+ toolBridge,
147
+ theme,
148
+ siteId,
149
+ versionId,
150
+ onVersionChange,
151
+ }: ChatInteractiveBlockProps & {
152
+ siteId: string;
153
+ versionId?: string | undefined;
154
+ onVersionChange: (id: string) => void;
155
+ }) {
156
+ const [loaded, setLoaded] = useState<{
157
+ client: SiteSnapshotClient;
158
+ snapshot: Awaited<ReturnType<typeof loadSiteSnapshot>>;
159
+ } | null>(null);
160
+ const snapshot = loaded?.client === client ? loaded.snapshot : null;
161
+ const [error, setError] = useState(false);
162
+ const [retry, setRetry] = useState(0);
163
+ useEffect(() => {
164
+ const abort = new AbortController();
165
+ setError(false);
166
+ setLoaded(null);
167
+ void loadSiteSnapshot(client, workspaceId, siteId, {
168
+ signal: abort.signal,
169
+ ...(versionId ? { versionId } : {}),
170
+ })
171
+ .then((value) => {
172
+ if (!abort.signal.aborted) setLoaded({ client, snapshot: value });
173
+ })
174
+ .catch(() => {
175
+ if (!abort.signal.aborted) setError(true);
176
+ });
177
+ return () => abort.abort();
178
+ }, [client, workspaceId, siteId, versionId, retry]);
179
+ const content = snapshot?.content;
180
+ const bridge = useMemo(
181
+ () =>
182
+ content
183
+ ? toolBridge?.({
184
+ artifactId: siteId,
185
+ siteVersionId: content.versionId,
186
+ requestedTools: content.requestedTools,
187
+ })
188
+ : undefined,
189
+ [toolBridge, siteId, content],
190
+ );
191
+ const open = useOpenGeniLinkResolver()?.({ kind: "site", artifactId: siteId, workspaceId });
192
+ const labels = useArtifactLabels();
193
+ if (error)
194
+ return (
195
+ <p role="alert">
196
+ {labels.siteLoadFailed}{" "}
197
+ <ArtifactButton size="sm" onClick={() => setRetry((v) => v + 1)}>
198
+ {labels.retry}
199
+ </ArtifactButton>
200
+ </p>
201
+ );
202
+ if (!snapshot) return <p role="status">{labels.loadingSite}</p>;
203
+ if (!content) return <p>{labels.siteUnpublished}</p>;
204
+ return (
205
+ <ArtifactSandbox
206
+ title={snapshot.detail.artifact.title}
207
+ html={content.html}
208
+ toolBridge={bridge}
209
+ height={SITE_PREVIEW_HEIGHT}
210
+ className="h-full"
211
+ fill
212
+ theme={theme}
213
+ headerControls={
214
+ <>
215
+ {/* One published version has nothing to choose; keep the bar for the title. */}
216
+ {snapshot.detail.versions.length > 1 ||
217
+ !snapshot.detail.versions.some((v) => v.id === content.versionId) ? (
218
+ <ArtifactSelect
219
+ aria-label={labels.siteVersion}
220
+ className="bg-transparent text-xs"
221
+ value={content.versionId}
222
+ onChange={(e) => onVersionChange(e.target.value)}
223
+ >
224
+ {!snapshot.detail.versions.some((v) => v.id === content.versionId) && (
225
+ <option value={content.versionId}>{labels.savedVersion}</option>
226
+ )}
227
+ {snapshot.detail.versions.map((v) => (
228
+ <option key={v.id} value={v.id}>
229
+ {labels.version(v.revision)}
230
+ </option>
231
+ ))}
232
+ </ArtifactSelect>
233
+ ) : null}
234
+ {open?.href ? (
235
+ <a
236
+ className="shrink-0 whitespace-nowrap text-xs underline"
237
+ href={open.href}
238
+ data-og-open-site=""
239
+ >
240
+ {labels.openSite}
241
+ </a>
242
+ ) : open?.open ? (
243
+ <button
244
+ type="button"
245
+ className="shrink-0 cursor-pointer whitespace-nowrap text-xs underline"
246
+ data-og-open-site=""
247
+ onClick={() =>
248
+ void Promise.resolve()
249
+ .then(open.open)
250
+ .catch(() => undefined)
251
+ }
252
+ >
253
+ {labels.openSite}
254
+ </button>
255
+ ) : null}
256
+ </>
257
+ }
258
+ />
259
+ );
260
+ }
@@ -0,0 +1,67 @@
1
+ import { useEffect, useRef, useState, type ReactNode } from "react";
2
+
3
+ /**
4
+ * Reserve the chat slot before starting expensive media work. Activation is
5
+ * one-way: scrolling away must not discard an interactive preview's state.
6
+ * The timeline parks at its initial tip in layout effects before this observer
7
+ * is attached, so historical previews above the entry viewport stay dormant.
8
+ */
9
+ export function DeferredChatMedia({
10
+ children,
11
+ height,
12
+ label,
13
+ actionLabel,
14
+ }: {
15
+ children: ReactNode;
16
+ height: number;
17
+ /** What is loading, as in "Load {label}". */
18
+ label?: string | undefined;
19
+ /** The complete (translated) activation label; overrides `label`. */
20
+ actionLabel?: string | undefined;
21
+ }) {
22
+ const host = useRef<HTMLDivElement>(null);
23
+ const [active, setActive] = useState(false);
24
+ useEffect(() => {
25
+ const node = host.current;
26
+ if (active || !node) return;
27
+ if (typeof IntersectionObserver === "undefined") {
28
+ setActive(true);
29
+ return;
30
+ }
31
+ let disposed = false;
32
+ const observer = new IntersectionObserver(
33
+ (entries) => {
34
+ if (disposed || !entries.some((entry) => entry.isIntersecting)) return;
35
+ setActive(true);
36
+ observer.disconnect();
37
+ },
38
+ {
39
+ root: node.closest("[data-og-timeline-scroller]"),
40
+ rootMargin: "200px 0px",
41
+ },
42
+ );
43
+ observer.observe(node);
44
+ return () => {
45
+ disposed = true;
46
+ observer.disconnect();
47
+ };
48
+ }, [active]);
49
+
50
+ return (
51
+ <div ref={host} data-chat-media={active ? "active" : "deferred"}>
52
+ {active ? (
53
+ children
54
+ ) : (
55
+ <div className="flex w-full items-center justify-center" style={{ height }}>
56
+ <button
57
+ type="button"
58
+ className="rounded-md px-3 py-2 text-sm text-fg-muted hover:text-fg focus-visible:outline-2 focus-visible:outline-ring"
59
+ onClick={() => setActive(true)}
60
+ >
61
+ {actionLabel ?? `Load ${label ?? "media"}`}
62
+ </button>
63
+ </div>
64
+ )}
65
+ </div>
66
+ );
67
+ }
@@ -204,6 +204,7 @@ export type DocumentProjectionArtifactSurfaceProps = Omit<
204
204
  "ariaLabel" | "className"
205
205
  > & {
206
206
  title: string;
207
+ showHeader?: boolean | undefined;
207
208
  subtitle?: ReactNode | undefined;
208
209
  busy?: boolean | undefined;
209
210
  className?: string | undefined;
@@ -212,6 +213,7 @@ export type DocumentProjectionArtifactSurfaceProps = Omit<
212
213
 
213
214
  export type DocumentArtifactSurfaceProps = Omit<DocumentEditorProps, "ariaLabel" | "className"> & {
214
215
  title: string;
216
+ showHeader?: boolean | undefined;
215
217
  subtitle?: ReactNode | undefined;
216
218
  busy?: boolean | undefined;
217
219
  className?: string | undefined;
@@ -899,7 +901,7 @@ function DocumentEditorCore({
899
901
  <button
900
902
  type="button"
901
903
  onClick={addFirstParagraph}
902
- className="mt-3 rounded-og-md border border-og-border bg-og-surface-1 px-3 py-1.5 text-og-sm text-og-fg hover:bg-og-surface-2 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent"
904
+ className="mt-3 rounded-og-md border border-og-primary-border bg-og-primary px-3 py-1.5 text-og-sm text-og-primary-fg hover:bg-og-primary-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent"
903
905
  >
904
906
  Start writing
905
907
  </button>
@@ -907,10 +909,27 @@ function DocumentEditorCore({
907
909
  </div>
908
910
  </div>
909
911
  ) : (
910
- <div className="relative min-w-full" style={{ height: axis.total }}>
912
+ <div
913
+ className="relative min-w-full"
914
+ style={{
915
+ height: axis.total,
916
+ minWidth:
917
+ layout === "paginated"
918
+ ? pages.reduce(
919
+ (width, page) =>
920
+ Math.max(
921
+ width,
922
+ page.page.widthPt * POINT_TO_CSS_PIXEL * page.renderScale + 32,
923
+ ),
924
+ 0,
925
+ )
926
+ : undefined,
927
+ }}
928
+ >
911
929
  {mountedIndexes.map((pageIndex) => {
912
930
  const page = pages[pageIndex]!;
913
931
  const top = axis.offsets[pageIndex]!;
932
+ const pageWidth = page.page.widthPt * POINT_TO_CSS_PIXEL * page.renderScale;
914
933
  return (
915
934
  <article
916
935
  key={page.key}
@@ -923,19 +942,23 @@ function DocumentEditorCore({
923
942
  className={cn(
924
943
  "absolute overflow-hidden",
925
944
  layout === "paginated"
926
- ? "left-1/2 -translate-x-1/2 border shadow-og-sm"
945
+ ? "border shadow-og-sm"
927
946
  : "left-0 right-0 border-b border-og-border bg-og-surface-1 text-og-fg",
928
947
  )}
929
948
  style={{
930
949
  top,
950
+ // Center against the visible viewport, not the shared width
951
+ // reserved for the widest section in this document.
952
+ left:
953
+ layout === "paginated"
954
+ ? Math.max(16, (measuredViewport.width - pageWidth) / 2)
955
+ : undefined,
931
956
  color: layout === "paginated" ? "#171717" : undefined,
932
957
  backgroundColor: layout === "paginated" ? "#fff" : undefined,
933
958
  borderColor: layout === "paginated" ? "#0000001a" : undefined,
934
- width:
935
- layout === "paginated"
936
- ? page.page.widthPt * POINT_TO_CSS_PIXEL * page.renderScale
937
- : undefined,
959
+ width: layout === "paginated" ? pageWidth : undefined,
938
960
  height: page.height,
961
+ containerType: layout === "continuous" ? "inline-size" : undefined,
939
962
  }}
940
963
  >
941
964
  <MeasuredPageBody
@@ -998,6 +1021,7 @@ function DocumentEditorCore({
998
1021
  export function DocumentArtifactSurface({
999
1022
  document,
1000
1023
  title,
1024
+ showHeader,
1001
1025
  subtitle,
1002
1026
  busy,
1003
1027
  className,
@@ -1008,6 +1032,7 @@ export function DocumentArtifactSurface({
1008
1032
  <ArtifactSurface
1009
1033
  modality="document"
1010
1034
  title={title}
1035
+ showHeader={showHeader}
1011
1036
  subtitle={subtitle}
1012
1037
  busy={busy}
1013
1038
  className={className}
@@ -1026,6 +1051,7 @@ export function DocumentArtifactSurface({
1026
1051
  export function DocumentProjectionArtifactSurface({
1027
1052
  projection,
1028
1053
  title,
1054
+ showHeader,
1029
1055
  subtitle,
1030
1056
  busy,
1031
1057
  className,
@@ -1036,6 +1062,7 @@ export function DocumentProjectionArtifactSurface({
1036
1062
  <ArtifactSurface
1037
1063
  modality="document"
1038
1064
  title={title}
1065
+ showHeader={showHeader}
1039
1066
  subtitle={subtitle}
1040
1067
  busy={busy}
1041
1068
  className={className}
@@ -1261,6 +1288,7 @@ const ParagraphLeaf = memo(
1261
1288
  onKeyDown,
1262
1289
  }: ParagraphLeafProps) {
1263
1290
  const composing = useRef(false);
1291
+ const suppressNextEnter = useRef(false);
1264
1292
  const Tag = headingTag(paragraph.style.headingLevel);
1265
1293
  const label =
1266
1294
  paragraph.style.list?.kind === "number"
@@ -1292,6 +1320,15 @@ const ParagraphLeaf = memo(
1292
1320
  }}
1293
1321
  onCompositionEnd={(event) => {
1294
1322
  composing.current = false;
1323
+ // IME commit Enter often arrives in the same turn as compositionend.
1324
+ // Suppress that key so it cannot also insert a trailing newline, but
1325
+ // clear before the next task so a later explicit Enter still works.
1326
+ suppressNextEnter.current = true;
1327
+ queueMicrotask(() => {
1328
+ suppressNextEnter.current = false;
1329
+ });
1330
+ syncTrailingBreak(event.currentTarget);
1331
+ stabilizeCaretAfterTrailingNewline(event.currentTarget);
1295
1332
  onInput(paragraph, event.currentTarget.textContent ?? "");
1296
1333
  onSelection(paragraph);
1297
1334
  }}
@@ -1316,15 +1353,18 @@ const ParagraphLeaf = memo(
1316
1353
  onKeyDown={(event) => {
1317
1354
  onKeyDown(event, paragraph);
1318
1355
  if (event.defaultPrevented || readOnly) return;
1319
- if (event.key === "Enter" && !event.metaKey && !event.ctrlKey && !event.altKey) {
1320
- event.preventDefault();
1321
- insertPlainText(event.currentTarget, "\n");
1322
- onInput(paragraph, event.currentTarget.textContent ?? "");
1323
- onSelection(paragraph);
1324
- }
1356
+ if (event.key !== "Enter" || event.metaKey || event.ctrlKey || event.altKey) return;
1357
+ if (isDocumentImeComposing(event, composing.current)) return;
1358
+ event.preventDefault();
1359
+ if (suppressNextEnter.current) return;
1360
+ insertPlainText(event.currentTarget, "\n");
1361
+ onInput(paragraph, event.currentTarget.textContent ?? "");
1362
+ onSelection(paragraph);
1325
1363
  }}
1326
1364
  onInput={(event) => {
1327
1365
  if (!composing.current && !(event.nativeEvent as InputEvent).isComposing) {
1366
+ syncTrailingBreak(event.currentTarget);
1367
+ stabilizeCaretAfterTrailingNewline(event.currentTarget);
1328
1368
  onInput(paragraph, event.currentTarget.textContent ?? "");
1329
1369
  }
1330
1370
  }}
@@ -1348,6 +1388,9 @@ const ParagraphLeaf = memo(
1348
1388
  {segment.text}
1349
1389
  </span>
1350
1390
  ))}
1391
+ {segments.at(-1)?.text.endsWith("\n") ? (
1392
+ <br data-og-trailing-break="" aria-hidden="true" />
1393
+ ) : null}
1351
1394
  </Tag>
1352
1395
  );
1353
1396
  },
@@ -1366,11 +1409,12 @@ function DocumentTableView({
1366
1409
  viewBlockId: string;
1367
1410
  }) {
1368
1411
  const columnWidths = table.style.columnWidthsPt;
1412
+ const headerColor = tableHeaderTextColor(table.style.headerFill);
1369
1413
  return (
1370
1414
  <div
1371
1415
  data-og-document-block={viewBlockId}
1372
1416
  data-og-block-kind="table"
1373
- className="overflow-x-auto py-2"
1417
+ className="w-full max-w-full overflow-x-auto py-2"
1374
1418
  >
1375
1419
  <table
1376
1420
  className="w-full border-collapse text-left"
@@ -1406,6 +1450,8 @@ function DocumentTableView({
1406
1450
  style={{
1407
1451
  borderColor: table.style.borderColor ?? "#d1d5db",
1408
1452
  background: header ? (table.style.headerFill ?? "#f3f4f6") : undefined,
1453
+ // An explicitly colored run still owns its authored text style.
1454
+ color: header ? headerColor : undefined,
1409
1455
  padding: `${table.style.cellPaddingPt ?? 6}pt`,
1410
1456
  }}
1411
1457
  >
@@ -1427,6 +1473,42 @@ function DocumentTableView({
1427
1473
  );
1428
1474
  }
1429
1475
 
1476
+ /** Choose a theme-independent header color only when both light and dark backdrops allow one. */
1477
+ function tableHeaderTextColor(fill: string | undefined): string | undefined {
1478
+ if (!fill) return "#171717";
1479
+ const hex = /^#([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i.exec(fill)?.[1];
1480
+ if (!hex) return undefined;
1481
+ const channels =
1482
+ hex.length === 3
1483
+ ? [...hex].map((digit) => Number.parseInt(digit + digit, 16))
1484
+ : [0, 2, 4].map((index) => Number.parseInt(hex.slice(index, index + 2), 16));
1485
+ const alpha = hex.length === 8 ? Number.parseInt(hex.slice(6), 16) / 255 : 1;
1486
+ const luminanceOn = (backdrop: number) => {
1487
+ const linear = channels.map((channel) => {
1488
+ const normalized = (channel * alpha + backdrop * (1 - alpha)) / 255;
1489
+ return normalized <= 0.04045 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
1490
+ });
1491
+ return linear[0]! * 0.2126 + linear[1]! * 0.7152 + linear[2]! * 0.0722;
1492
+ };
1493
+ // A paginated page is white; a continuous page follows its theme. For alpha
1494
+ // fills, choose a fixed foreground only if it contrasts on both extremes.
1495
+ const backdrops = alpha < 1 ? [luminanceOn(0), luminanceOn(255)] : [luminanceOn(255)];
1496
+ const darkTextLuminance = ((23 / 255 + 0.055) / 1.055) ** 2.4;
1497
+ const whiteContrast = Math.min(...backdrops.map((value) => 1.05 / (value + 0.05)));
1498
+ const darkContrast = Math.min(
1499
+ ...backdrops.map(
1500
+ (value) =>
1501
+ (Math.max(value, darkTextLuminance) + 0.05) / (Math.min(value, darkTextLuminance) + 0.05),
1502
+ ),
1503
+ );
1504
+ if (Math.max(whiteContrast, darkContrast) < 4.5) {
1505
+ // Opaque midtones need pure black where the softer #171717 cannot meet
1506
+ // normal-text contrast. Translucent fills inherit the theme's text color.
1507
+ return alpha < 1 ? undefined : "#000";
1508
+ }
1509
+ return whiteContrast > darkContrast ? "#fff" : "#171717";
1510
+ }
1511
+
1430
1512
  function ToolbarButton({
1431
1513
  label,
1432
1514
  shortcut,
@@ -1617,7 +1699,9 @@ function responsiveDocumentPageScale(
1617
1699
  ): number {
1618
1700
  if (viewportWidth <= 0) return 1;
1619
1701
  const naturalWidth = page.widthPt * POINT_TO_CSS_PIXEL;
1620
- return Math.min(1, Math.max(0.1, (viewportWidth - 32) / naturalWidth));
1702
+ // Below this scale the page text becomes too small to read in a narrow dock.
1703
+ // The viewport can pan horizontally without changing the chosen layout.
1704
+ return Math.min(1, Math.max(0.75, (viewportWidth - 32) / naturalWidth));
1621
1705
  }
1622
1706
 
1623
1707
  function pageContentStyle(
@@ -1626,7 +1710,7 @@ function pageContentStyle(
1626
1710
  ): CSSProperties {
1627
1711
  if (layout === "continuous") {
1628
1712
  return {
1629
- padding: "24px clamp(24px, 8vw, 96px)",
1713
+ padding: "24px clamp(12px, 4cqw, 72px)",
1630
1714
  };
1631
1715
  }
1632
1716
  return {
@@ -1753,6 +1837,45 @@ function selectionOffsets(root: HTMLElement | undefined): { start: number; end:
1753
1837
  };
1754
1838
  }
1755
1839
 
1840
+ const TRAILING_BREAK_ATTR = "data-og-trailing-break";
1841
+
1842
+ function isDocumentImeComposing(
1843
+ event: ReactKeyboardEvent<HTMLElement>,
1844
+ composing: boolean,
1845
+ ): boolean {
1846
+ const native = event.nativeEvent;
1847
+ return composing || native.isComposing === true || native.keyCode === 229;
1848
+ }
1849
+
1850
+ function syncTrailingBreak(root: HTMLElement): void {
1851
+ const existing = root.querySelector(`br[${TRAILING_BREAK_ATTR}]`);
1852
+ const needsBreak = (root.textContent ?? "").endsWith("\n");
1853
+ if (needsBreak && !existing) {
1854
+ const br = globalThis.document.createElement("br");
1855
+ br.setAttribute(TRAILING_BREAK_ATTR, "");
1856
+ br.setAttribute("aria-hidden", "true");
1857
+ root.appendChild(br);
1858
+ } else if (!needsBreak && existing) {
1859
+ existing.remove();
1860
+ }
1861
+ }
1862
+
1863
+ function stabilizeCaretAfterTrailingNewline(root: HTMLElement): void {
1864
+ const text = root.textContent ?? "";
1865
+ if (!text.endsWith("\n")) return;
1866
+ const selection = globalThis.getSelection?.();
1867
+ if (!selection || selection.rangeCount === 0 || !selection.isCollapsed) return;
1868
+ const offsets = selectionOffsets(root);
1869
+ if (!offsets || offsets.start !== text.length) return;
1870
+ const br = root.querySelector(`br[${TRAILING_BREAK_ATTR}]`);
1871
+ if (!br) return;
1872
+ const range = globalThis.document.createRange();
1873
+ range.setStartBefore(br);
1874
+ range.collapse(true);
1875
+ selection.removeAllRanges();
1876
+ selection.addRange(range);
1877
+ }
1878
+
1756
1879
  function insertPlainText(root: HTMLElement, text: string): void {
1757
1880
  const selection = globalThis.getSelection?.();
1758
1881
  if (!selection || selection.rangeCount === 0) return;
@@ -1761,10 +1884,12 @@ function insertPlainText(root: HTMLElement, text: string): void {
1761
1884
  range.deleteContents();
1762
1885
  const node = globalThis.document.createTextNode(text);
1763
1886
  range.insertNode(node);
1887
+ syncTrailingBreak(root);
1764
1888
  range.setStartAfter(node);
1765
1889
  range.collapse(true);
1766
1890
  selection.removeAllRanges();
1767
1891
  selection.addRange(range);
1892
+ stabilizeCaretAfterTrailingNewline(root);
1768
1893
  }
1769
1894
 
1770
1895
  function restoreSelection(
@@ -60,10 +60,12 @@ export function EditableArtifactMessage({
60
60
  title,
61
61
  detail,
62
62
  retry,
63
+ retryLabel = "Retry",
63
64
  }: {
64
65
  title: string;
65
66
  detail: string;
66
67
  retry?: (() => void) | undefined;
68
+ retryLabel?: string | undefined;
67
69
  }) {
68
70
  return (
69
71
  <div className="grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center">
@@ -74,9 +76,9 @@ export function EditableArtifactMessage({
74
76
  <button
75
77
  type="button"
76
78
  onClick={retry}
77
- className="mt-3 rounded-og-sm bg-og-accent-deep px-3 py-1.5 text-og-sm font-medium text-og-accent-fg outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent"
79
+ className="mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent"
78
80
  >
79
- Retry
81
+ {retryLabel}
80
82
  </button>
81
83
  ) : null}
82
84
  </div>