@opengeni/react 3.3.2-canary.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +2 -0
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-ZKNTK7IA.js → chunk-2I6R3GCZ.js} +4284 -3983
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-E5KISKFG.js → chunk-X5UVUIMF.js} +1709 -1184
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +10 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +28 -2
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +390 -191
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -454
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +53 -3
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +261 -27
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2318 -752
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-4MDLEHXL.js.map +0 -1
  814. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  815. package/dist/chunk-7EAFGICR.js +0 -302
  816. package/dist/chunk-7EAFGICR.js.map +0 -1
  817. package/dist/chunk-7KBJLTKS.js +0 -494
  818. package/dist/chunk-7KBJLTKS.js.map +0 -1
  819. package/dist/chunk-E5KISKFG.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X5S426G2.js +0 -217
  836. package/dist/chunk-X5S426G2.js.map +0 -1
  837. package/dist/chunk-YG4QEQF5.js +0 -9557
  838. package/dist/chunk-YG4QEQF5.js.map +0 -1
  839. package/dist/chunk-YVCHAQZY.js.map +0 -1
  840. package/dist/chunk-ZKNTK7IA.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
package/src/provider.tsx CHANGED
@@ -8,7 +8,11 @@ import {
8
8
  import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from "react";
9
9
  import type { SessionClientLike } from "./client";
10
10
  import { usePageLiveActivity } from "./hooks/internal";
11
+ import { retainSharedQueries } from "./hooks/shared-query";
11
12
  import { OpenGeniContext } from "./session-context";
13
+ import { ErrorMessageContext, type ErrorMessageFormatter } from "./lib/error-message";
14
+
15
+ export type { ErrorMessageFormatter } from "./lib/error-message";
12
16
 
13
17
  export { useOpenGeni, useOpenGeniClient } from "./session-context";
14
18
  export type { ClientOverride, OpenGeniContextValue } from "./session-context";
@@ -19,11 +23,32 @@ export type OpenGeniProviderProps = {
19
23
  workspaceId: string;
20
24
  onWorkspaceControlEvent?: ((event: WorkspaceControlEvent) => void) | undefined;
21
25
  onWorkspaceInteractionEvent?: ((event: WorkspaceInteractionRevisionEvent) => void) | undefined;
26
+ /**
27
+ * Stale-tab protection for the stock Opengeni web app: when the server's API
28
+ * contract revision differs from this bundle's, cover the page and reload it
29
+ * once. Off by default, because an embedded product's page must never be
30
+ * blocked or reloaded when Opengeni deploys; there a mismatch is ignored and
31
+ * the SDK's tolerant-reader compatibility applies.
32
+ */
33
+ reloadOnApiContractChange?: boolean | undefined;
34
+ /**
35
+ * Keep subscription account lists and usage readings (`useCodexAccounts`,
36
+ * `useSuperGrokAccounts`) for `client` after the components that read them
37
+ * unmount, so returning to them renders the last rows at once and re-reads
38
+ * in the background. Off by default: then readers mounted together share one
39
+ * request, but nothing is served to a later mount. Opt in only when every
40
+ * signed-in person gets their own `client` object (the stock Opengeni console
41
+ * creates a new client on every identity change). Retained rows are dropped
42
+ * when `client` changes or this provider unmounts.
43
+ */
44
+ retainReadsAcrossMounts?: boolean | undefined;
45
+ /** Host-owned error copy. Receives the original diagnostic error and neutral default copy. */
46
+ formatError?: ErrorMessageFormatter | undefined;
22
47
  children?: ReactNode;
23
48
  };
24
49
 
25
50
  /**
26
- * Supplies the OpenGeni client + workspace to all hooks below it. Hooks also
51
+ * Supplies the Opengeni client + workspace to all hooks below it. Hooks also
27
52
  * accept `{ client, workspaceId }` overrides per call for multi-workspace UIs.
28
53
  */
29
54
  export function OpenGeniProvider({
@@ -31,6 +56,9 @@ export function OpenGeniProvider({
31
56
  workspaceId,
32
57
  onWorkspaceControlEvent,
33
58
  onWorkspaceInteractionEvent,
59
+ reloadOnApiContractChange = false,
60
+ retainReadsAcrossMounts = false,
61
+ formatError,
34
62
  children,
35
63
  }: OpenGeniProviderProps) {
36
64
  const [workspaceControlEvent, setWorkspaceControlEvent] = useState<WorkspaceControlEvent | null>(
@@ -59,10 +87,16 @@ export function OpenGeniProvider({
59
87
  callbackRef.current = onWorkspaceControlEvent;
60
88
  interactionCallbackRef.current = onWorkspaceInteractionEvent;
61
89
 
90
+ useEffect(() => {
91
+ if (!retainReadsAcrossMounts) return;
92
+ return retainSharedQueries(client);
93
+ }, [client, retainReadsAcrossMounts]);
94
+
95
+ const strictContract = reloadOnApiContractChange;
62
96
  const verifyApiContract = useCallback(async (): Promise<void> => {
63
97
  try {
64
98
  const config = await client.getClientConfig();
65
- if (config.apiContractRevision !== OPENGENI_API_CONTRACT_REVISION) {
99
+ if (strictContract && config.apiContractRevision !== OPENGENI_API_CONTRACT_REVISION) {
66
100
  throw new OpenGeniApiContractMismatchError(
67
101
  OPENGENI_API_CONTRACT_REVISION,
68
102
  String(config.apiContractRevision || "(missing)"),
@@ -70,12 +104,14 @@ export function OpenGeniProvider({
70
104
  }
71
105
  } catch (error) {
72
106
  if (error instanceof OpenGeniApiContractMismatchError) {
107
+ // Embedded hosts: a revision difference is not a reason to block or reload the page.
108
+ if (!strictContract) return;
73
109
  setContractMismatch(error);
74
110
  reloadForContractMismatchOnce(error);
75
111
  }
76
112
  throw error;
77
113
  }
78
- }, [client]);
114
+ }, [client, strictContract]);
79
115
 
80
116
  const registerSessionReconciler = useMemo(
81
117
  () =>
@@ -175,7 +211,7 @@ export function OpenGeniProvider({
175
211
  }
176
212
  }
177
213
  } catch (error) {
178
- if (error instanceof OpenGeniApiContractMismatchError) {
214
+ if (strictContract && error instanceof OpenGeniApiContractMismatchError) {
179
215
  setContractMismatch(error);
180
216
  reloadForContractMismatchOnce(error);
181
217
  }
@@ -186,7 +222,14 @@ export function OpenGeniProvider({
186
222
  }
187
223
  })();
188
224
  return () => controller.abort();
189
- }, [client, pageLive, supportsWorkspaceLiveStream, verifyApiContract, workspaceId]);
225
+ }, [
226
+ client,
227
+ pageLive,
228
+ strictContract,
229
+ supportsWorkspaceLiveStream,
230
+ verifyApiContract,
231
+ workspaceId,
232
+ ]);
190
233
 
191
234
  useEffect(() => {
192
235
  if (supportsWorkspaceLiveStream) return;
@@ -222,7 +265,7 @@ export function OpenGeniProvider({
222
265
  callbackRef.current?.(event);
223
266
  }
224
267
  } catch (error) {
225
- if (error instanceof OpenGeniApiContractMismatchError) {
268
+ if (strictContract && error instanceof OpenGeniApiContractMismatchError) {
226
269
  setContractMismatch(error);
227
270
  reloadForContractMismatchOnce(error);
228
271
  }
@@ -230,7 +273,14 @@ export function OpenGeniProvider({
230
273
  }
231
274
  })();
232
275
  return () => controller.abort();
233
- }, [client, pageLive, supportsWorkspaceLiveStream, verifyApiContract, workspaceId]);
276
+ }, [
277
+ client,
278
+ pageLive,
279
+ strictContract,
280
+ supportsWorkspaceLiveStream,
281
+ verifyApiContract,
282
+ workspaceId,
283
+ ]);
234
284
 
235
285
  useEffect(() => {
236
286
  if (supportsWorkspaceLiveStream) return;
@@ -265,7 +315,7 @@ export function OpenGeniProvider({
265
315
  interactionCallbackRef.current?.(event);
266
316
  }
267
317
  } catch (error) {
268
- if (error instanceof OpenGeniApiContractMismatchError) {
318
+ if (strictContract && error instanceof OpenGeniApiContractMismatchError) {
269
319
  setContractMismatch(error);
270
320
  reloadForContractMismatchOnce(error);
271
321
  }
@@ -273,7 +323,14 @@ export function OpenGeniProvider({
273
323
  }
274
324
  })();
275
325
  return () => controller.abort();
276
- }, [client, pageLive, supportsWorkspaceLiveStream, verifyApiContract, workspaceId]);
326
+ }, [
327
+ client,
328
+ pageLive,
329
+ strictContract,
330
+ supportsWorkspaceLiveStream,
331
+ verifyApiContract,
332
+ workspaceId,
333
+ ]);
277
334
 
278
335
  const value = useMemo(
279
336
  () => ({
@@ -298,10 +355,12 @@ export function OpenGeniProvider({
298
355
  ],
299
356
  );
300
357
  return (
301
- <OpenGeniContext.Provider value={value}>
302
- {children}
303
- {contractMismatch ? <ApiContractMismatchScreen mismatch={contractMismatch} /> : null}
304
- </OpenGeniContext.Provider>
358
+ <ErrorMessageContext.Provider value={formatError}>
359
+ <OpenGeniContext.Provider value={value}>
360
+ {children}
361
+ {contractMismatch ? <ApiContractMismatchScreen mismatch={contractMismatch} /> : null}
362
+ </OpenGeniContext.Provider>
363
+ </ErrorMessageContext.Provider>
305
364
  );
306
365
  }
307
366
 
@@ -329,7 +388,7 @@ function ApiContractMismatchScreen({ mismatch }: { mismatch: OpenGeniApiContract
329
388
  data-opengeni-api-contract-mismatch
330
389
  >
331
390
  <div className="w-full max-w-md rounded-xl border border-og-border bg-og-surface p-6 shadow-2xl">
332
- <p className="text-og-menu font-semibold text-og-fg">OpenGeni updated</p>
391
+ <p className="text-og-menu font-semibold text-og-fg">Opengeni updated</p>
333
392
  <p className="mt-2 text-og-menu leading-6 text-og-muted">
334
393
  This tab cannot safely continue with the new server version. Reload it before sending or
335
394
  controlling work.
@@ -339,7 +398,7 @@ function ApiContractMismatchScreen({ mismatch }: { mismatch: OpenGeniApiContract
339
398
  </p>
340
399
  <button
341
400
  type="button"
342
- className="mt-5 inline-flex h-9 items-center rounded-md bg-og-fg px-3 text-og-menu font-medium text-og-bg"
401
+ className="mt-5 inline-flex h-9 items-center rounded-md border border-og-primary-border bg-og-primary text-og-primary-fg hover:bg-og-primary-hover px-3 text-og-menu font-medium"
343
402
  onClick={() => window.location.reload()}
344
403
  >
345
404
  Reload now
@@ -0,0 +1,464 @@
1
+ /**
2
+ * Queue presentation shared by the web queue surface and native docks: the
3
+ * bounded head/tail previews of queued prompts, and the reorder plan and its
4
+ * optimistic projection. No DOM, no React.
5
+ */
6
+ import type { SessionQueueSnapshot, SessionTurn } from "@opengeni/sdk";
7
+ import { QUEUE_ITEM_CONTENT_UNAVAILABLE, queueItemContent } from "./components/queue-item-content";
8
+
9
+ export { QUEUE_ITEM_CONTENT_UNAVAILABLE, queueItemContent };
10
+
11
+ export const QUEUE_ROW_PREVIEW_CHARACTERS = 360;
12
+ export const QUEUE_COLLAPSED_PREVIEW_CHARACTERS = 180;
13
+ const QUEUE_PREVIEW_GRAPHEME_CONTEXT_CHARACTERS = 32;
14
+ const QUEUE_PREVIEW_REFERENCE_SAMPLE_CHARACTERS = 32;
15
+ const QUEUE_VISIBLE_END_IDENTITY_CHARACTERS = 18;
16
+ const QUEUE_PREVIEW_SEPARATOR = " … ";
17
+ // Hermes (React Native) has no Intl.Segmenter; there, previews fall back to
18
+ // code points, which keeps every boundary rule except grapheme joining.
19
+ let queuePreviewSegmenterCache: Intl.Segmenter | null | undefined;
20
+ function queuePreviewSegments(sample: string): string[] {
21
+ if (queuePreviewSegmenterCache === undefined) {
22
+ queuePreviewSegmenterCache =
23
+ typeof Intl !== "undefined" && typeof Intl.Segmenter === "function"
24
+ ? new Intl.Segmenter(undefined, { granularity: "grapheme" })
25
+ : null;
26
+ }
27
+ if (!queuePreviewSegmenterCache) return Array.from(sample);
28
+ return Array.from(queuePreviewSegmenterCache.segment(sample), (part) => part.segment);
29
+ }
30
+ const queuePromptNonRenderingCodePoint =
31
+ /[\p{White_Space}\p{Control}\p{Default_Ignorable_Code_Point}]/u;
32
+
33
+ type BoundedPromptSample = {
34
+ value: string;
35
+ characters: number;
36
+ truncated: boolean;
37
+ };
38
+
39
+ export type QueuePromptPreview = {
40
+ summary: string;
41
+ collapsedVisual: string;
42
+ visibleStart: string;
43
+ visibleIdentity: string | null;
44
+ visibleIdentityLabel: "End" | "Safe boundary" | null;
45
+ isFallback: boolean;
46
+ };
47
+
48
+ function labelQueuePreview(summary: string): QueuePromptPreview {
49
+ return {
50
+ summary,
51
+ collapsedVisual: summary,
52
+ visibleStart: summary,
53
+ visibleIdentity: null,
54
+ visibleIdentityLabel: null,
55
+ isFallback: false,
56
+ };
57
+ }
58
+
59
+ export function queueTurnPreview(
60
+ turn: SessionTurn | undefined,
61
+ maxCharacters: number,
62
+ ): QueuePromptPreview {
63
+ if (!turn) return queuePromptPreview("", maxCharacters);
64
+ return queueContentPreview(turn.prompt, turn.annotations?.length ?? 0, maxCharacters);
65
+ }
66
+
67
+ export function queueContentPreview(
68
+ prompt: string,
69
+ annotationCount: number,
70
+ maxCharacters: number,
71
+ ): QueuePromptPreview {
72
+ switch (queueItemContent(prompt, annotationCount)) {
73
+ case "text":
74
+ return queuePromptPreview(prompt, maxCharacters);
75
+ case "annotations":
76
+ return labelQueuePreview(
77
+ `${annotationCount} timeline ${annotationCount === 1 ? "annotation" : "annotations"}`,
78
+ );
79
+ case "unavailable":
80
+ return labelQueuePreview(QUEUE_ITEM_CONTENT_UNAVAILABLE);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Build a bounded head/tail summary of an arbitrary queued prompt. Sampling
86
+ * both ends distinguishes prompts with equal long prefixes. Each sampled edge
87
+ * has a small amount of grapheme context so ordinary emoji/combining sequences
88
+ * can be retained whole. A cluster that exceeds that context is omitted rather
89
+ * than fragmented, and malformed UTF-16 is replaced only in the summary. The
90
+ * durable prompt remains exact and no operation scans or copies it in full.
91
+ */
92
+ export function queuePromptPreview(prompt: string, maxCharacters: number): QueuePromptPreview {
93
+ const wholePromptProbe = samplePromptStart(prompt, maxCharacters + 1);
94
+ if (!wholePromptProbe.truncated && wholePromptProbe.characters <= maxCharacters) {
95
+ const summary = replaceLoneSurrogates(wholePromptProbe.value);
96
+ return hasVisiblePromptContent(summary)
97
+ ? {
98
+ summary,
99
+ collapsedVisual: summary,
100
+ visibleStart: summary,
101
+ visibleIdentity: null,
102
+ visibleIdentityLabel: null,
103
+ isFallback: false,
104
+ }
105
+ : fallbackPromptPreview(prompt.length, wholePromptProbe.value, wholePromptProbe.value);
106
+ }
107
+
108
+ const suffixCharacters = Math.min(Math.floor(maxCharacters / 3), 120);
109
+ const prefixCharacters =
110
+ maxCharacters - codePointLength(QUEUE_PREVIEW_SEPARATOR) - suffixCharacters;
111
+ const prefixSample = samplePromptStart(
112
+ prompt,
113
+ prefixCharacters + QUEUE_PREVIEW_GRAPHEME_CONTEXT_CHARACTERS,
114
+ );
115
+ const suffixSample = samplePromptEnd(
116
+ prompt,
117
+ suffixCharacters + QUEUE_PREVIEW_GRAPHEME_CONTEXT_CHARACTERS,
118
+ );
119
+ const prefixSegments = segmentPromptSample(prefixSample.value);
120
+ const suffixSegments = segmentPromptSample(suffixSample.value);
121
+
122
+ // A cluster at a truncated sampling edge may continue outside the sample.
123
+ // Prefix sampling starts at the true source start, so only its last segment
124
+ // is ambiguous. Suffix sampling ends at the true source end, so its first is.
125
+ if (prefixSample.truncated) prefixSegments.pop();
126
+ if (suffixSample.truncated) {
127
+ let ambiguousSegment = suffixSegments.shift();
128
+ // A locally segmented leading fragment ending in ZWJ can join the next
129
+ // pictographic segment when omitted left context supplies its base. Keep
130
+ // backing off until that uncertainty no longer propagates to the right.
131
+ while (ambiguousSegment?.endsWith("\u200d") && suffixSegments.length > 0) {
132
+ ambiguousSegment = suffixSegments.shift();
133
+ }
134
+ // Regional Indicator pairing depends on the parity of the preceding run.
135
+ // If that run reaches the unknown sample boundary, omit all of its visible
136
+ // leading segments rather than potentially recombining halves of flags.
137
+ while (suffixSegments[0] && startsWithRegionalIndicator(suffixSegments[0])) {
138
+ suffixSegments.shift();
139
+ }
140
+ }
141
+
142
+ const prefix = takeWholeGraphemesFromStart(prefixSegments, prefixCharacters);
143
+ const suffix = takeWholeGraphemesFromEnd(suffixSegments, suffixCharacters);
144
+ const reference = boundedPromptSampleReference(
145
+ prompt.length,
146
+ prefixSample.value,
147
+ suffixSample.value,
148
+ );
149
+
150
+ if (!hasVisiblePromptContent(prefix) && !hasVisiblePromptContent(suffix)) {
151
+ return fallbackPromptPreview(prompt.length, prefixSample.value, suffixSample.value);
152
+ }
153
+
154
+ const safeSuffix = hasVisiblePromptContent(suffix)
155
+ ? suffix
156
+ : promptPreviewFallbackLabel(reference);
157
+ const summary = `${prefix}${QUEUE_PREVIEW_SEPARATOR}${safeSuffix}`;
158
+ if (!hasVisiblePromptContent(prefix)) {
159
+ return {
160
+ summary,
161
+ collapsedVisual: summary,
162
+ visibleStart: safeSuffix,
163
+ visibleIdentity: null,
164
+ visibleIdentityLabel: null,
165
+ isFallback: false,
166
+ };
167
+ }
168
+
169
+ const endIdentity = takeWholeGraphemesFromEnd(
170
+ suffixSegments,
171
+ QUEUE_VISIBLE_END_IDENTITY_CHARACTERS,
172
+ );
173
+ return {
174
+ summary,
175
+ collapsedVisual: summary,
176
+ visibleStart: prefix,
177
+ visibleIdentity: hasVisiblePromptContent(endIdentity) ? endIdentity : `ref ${reference}`,
178
+ visibleIdentityLabel: hasVisiblePromptContent(endIdentity) ? "End" : "Safe boundary",
179
+ isFallback: false,
180
+ };
181
+ }
182
+
183
+ function fallbackPromptPreview(
184
+ promptLength: number,
185
+ startSample: string,
186
+ endSample: string,
187
+ ): QueuePromptPreview {
188
+ const reference = boundedPromptSampleReference(promptLength, startSample, endSample);
189
+ const summary = promptPreviewFallbackLabel(reference);
190
+ return {
191
+ summary,
192
+ collapsedVisual: `Omitted · ${reference}`,
193
+ // The complete fallback remains the canonical accessible summary. Narrow
194
+ // collapsed/row layouts paint the bounded reference in a compact truthful
195
+ // form so ellipsis cannot hide the only identifying portion.
196
+ visibleStart: `Omitted · ${reference}`,
197
+ visibleIdentity: null,
198
+ visibleIdentityLabel: null,
199
+ isFallback: true,
200
+ };
201
+ }
202
+
203
+ function promptPreviewFallbackLabel(reference: string): string {
204
+ return `Content omitted at safe boundary · ref ${reference}`;
205
+ }
206
+
207
+ function boundedPromptSampleReference(
208
+ promptLength: number,
209
+ startSample: string,
210
+ endSample: string,
211
+ ): string {
212
+ const head = samplePromptStart(startSample, QUEUE_PREVIEW_REFERENCE_SAMPLE_CHARACTERS).value;
213
+ const tail = samplePromptEnd(endSample, QUEUE_PREVIEW_REFERENCE_SAMPLE_CHARACTERS).value;
214
+ let hash = 0x811c9dc5;
215
+ for (const value of [String(promptLength), head, tail]) {
216
+ for (let index = 0; index < value.length; index += 1) {
217
+ hash ^= value.charCodeAt(index);
218
+ hash = Math.imul(hash, 0x01000193);
219
+ }
220
+ hash ^= 0xffff;
221
+ hash = Math.imul(hash, 0x01000193);
222
+ }
223
+ return (hash >>> 0).toString(16).padStart(8, "0").toUpperCase();
224
+ }
225
+
226
+ function hasVisiblePromptContent(value: string): boolean {
227
+ // Callers pass only the already-bounded whole/head/tail preview samples.
228
+ // Default-ignorables and controls can survive trim() while painting no row
229
+ // identity at all (for example ZWJ, VS16, bidi controls, and tag characters).
230
+ for (const character of value) {
231
+ if (!queuePromptNonRenderingCodePoint.test(character)) return true;
232
+ }
233
+ return false;
234
+ }
235
+
236
+ function samplePromptStart(prompt: string, maxCharacters: number): BoundedPromptSample {
237
+ let end = 0;
238
+ let characters = 0;
239
+ while (end < prompt.length && characters < maxCharacters) {
240
+ const first = prompt.charCodeAt(end);
241
+ end +=
242
+ isHighSurrogate(first) &&
243
+ end + 1 < prompt.length &&
244
+ isLowSurrogate(prompt.charCodeAt(end + 1))
245
+ ? 2
246
+ : 1;
247
+ characters += 1;
248
+ }
249
+ return { value: prompt.slice(0, end), characters, truncated: end < prompt.length };
250
+ }
251
+
252
+ function samplePromptEnd(prompt: string, maxCharacters: number): BoundedPromptSample {
253
+ let start = prompt.length;
254
+ let characters = 0;
255
+ while (start > 0 && characters < maxCharacters) {
256
+ start -= 1;
257
+ if (
258
+ isLowSurrogate(prompt.charCodeAt(start)) &&
259
+ start > 0 &&
260
+ isHighSurrogate(prompt.charCodeAt(start - 1))
261
+ ) {
262
+ start -= 1;
263
+ }
264
+ characters += 1;
265
+ }
266
+ return { value: prompt.slice(start), characters, truncated: start > 0 };
267
+ }
268
+
269
+ function segmentPromptSample(sample: string): string[] {
270
+ return queuePreviewSegments(replaceLoneSurrogates(sample));
271
+ }
272
+
273
+ function replaceLoneSurrogates(value: string): string {
274
+ let sanitized = "";
275
+ for (let index = 0; index < value.length; index += 1) {
276
+ const current = value.charCodeAt(index);
277
+ if (
278
+ isHighSurrogate(current) &&
279
+ index + 1 < value.length &&
280
+ isLowSurrogate(value.charCodeAt(index + 1))
281
+ ) {
282
+ sanitized += value.slice(index, index + 2);
283
+ index += 1;
284
+ } else if (isHighSurrogate(current) || isLowSurrogate(current)) {
285
+ sanitized += "�";
286
+ } else {
287
+ sanitized += value[index];
288
+ }
289
+ }
290
+ return sanitized;
291
+ }
292
+
293
+ function takeWholeGraphemesFromStart(segments: string[], maxCharacters: number): string {
294
+ const selected: string[] = [];
295
+ let characters = 0;
296
+ for (const segment of segments) {
297
+ const segmentCharacters = codePointLength(segment);
298
+ if (characters + segmentCharacters > maxCharacters) break;
299
+ selected.push(segment);
300
+ characters += segmentCharacters;
301
+ }
302
+ while (selected.at(-1)?.trim().length === 0) selected.pop();
303
+ return selected.join("");
304
+ }
305
+
306
+ function takeWholeGraphemesFromEnd(segments: string[], maxCharacters: number): string {
307
+ const selected: string[] = [];
308
+ let characters = 0;
309
+ for (let index = segments.length - 1; index >= 0; index -= 1) {
310
+ const segment = segments[index];
311
+ if (!segment) continue;
312
+ const segmentCharacters = codePointLength(segment);
313
+ if (characters + segmentCharacters > maxCharacters) break;
314
+ selected.unshift(segment);
315
+ characters += segmentCharacters;
316
+ }
317
+ while (selected[0]?.trim().length === 0) selected.shift();
318
+ while (selected.at(-1)?.trim().length === 0) selected.pop();
319
+ return selected.join("");
320
+ }
321
+
322
+ function codePointLength(value: string): number {
323
+ let characters = 0;
324
+ for (const _character of value) characters += 1;
325
+ return characters;
326
+ }
327
+
328
+ function startsWithRegionalIndicator(value: string): boolean {
329
+ const codePoint = value.codePointAt(0);
330
+ return codePoint !== undefined && codePoint >= 0x1f1e6 && codePoint <= 0x1f1ff;
331
+ }
332
+
333
+ function isHighSurrogate(codeUnit: number): boolean {
334
+ return codeUnit >= 0xd800 && codeUnit <= 0xdbff;
335
+ }
336
+
337
+ function isLowSurrogate(codeUnit: number): boolean {
338
+ return codeUnit >= 0xdc00 && codeUnit <= 0xdfff;
339
+ }
340
+
341
+ /** Move one item, as dnd-kit's arrayMove does. */
342
+ export function moveQueueItem<T>(items: readonly T[], from: number, to: number): T[] {
343
+ const next = items.slice();
344
+ const [item] = next.splice(from, 1);
345
+ if (item === undefined) return next;
346
+ next.splice(to < 0 ? next.length + to : to, 0, item);
347
+ return next;
348
+ }
349
+
350
+ export type QueueMovePlan = {
351
+ /** The turn ids in their new order. */
352
+ turnIds: string[];
353
+ /** The server anchor: the turn the moved one now precedes, null for last. */
354
+ beforeTurnId: string | null;
355
+ /** The bounded destination index. */
356
+ index: number;
357
+ };
358
+
359
+ /** The reorder request for moving a queued turn to an index, or null for a no-op. */
360
+ export function queueMovePlan(
361
+ queue: readonly SessionTurn[],
362
+ turnId: string,
363
+ nextIndex: number,
364
+ ): QueueMovePlan | null {
365
+ const oldIndex = queue.findIndex((turn) => turn.id === turnId);
366
+ if (oldIndex < 0) return null;
367
+ const index = Math.max(0, Math.min(nextIndex, queue.length - 1));
368
+ if (oldIndex === index) return null;
369
+ const ordered = moveQueueItem(queue, oldIndex, index);
370
+ return {
371
+ turnIds: ordered.map((turn) => turn.id),
372
+ beforeTurnId: ordered[index + 1]?.id ?? null,
373
+ index,
374
+ };
375
+ }
376
+
377
+ export type PendingQueueMove = { baseVersion: number | null; turnIds: string[] };
378
+
379
+ /**
380
+ * The queue as shown while a move is in flight: the optimistic order, unless
381
+ * any authoritative change arrived. A projection never omits or invents a row.
382
+ */
383
+ export function projectPendingQueueMove(
384
+ queue: SessionTurn[],
385
+ pendingMove: PendingQueueMove | null,
386
+ snapshot: Pick<SessionQueueSnapshot, "version"> | null,
387
+ ): SessionTurn[] {
388
+ if (
389
+ !pendingMove ||
390
+ pendingMove.baseVersion === null ||
391
+ snapshot?.version !== pendingMove.baseVersion
392
+ ) {
393
+ return queue;
394
+ }
395
+ const byId = new Map(queue.map((turn) => [turn.id, turn]));
396
+ const projected = pendingMove.turnIds.map((turnId) => byId.get(turnId));
397
+ if (projected.some((turn) => !turn) || projected.length !== queue.length) {
398
+ return queue;
399
+ }
400
+ return projected as SessionTurn[];
401
+ }
402
+
403
+ /** Copy for the "replace your draft with this queued prompt" confirmation. */
404
+ export const QUEUE_REPLACE_DRAFT_COPY = {
405
+ title: "Your composer already has a draft. Replace it with this queued prompt?",
406
+ detail:
407
+ "The current draft will be permanently discarded; this queued prompt is preserved until you confirm.",
408
+ keep: "Keep current draft",
409
+ replace: "Replace and edit",
410
+ } as const;
411
+
412
+ export type QueuedTurnPresentation = {
413
+ kind: "prompt" | "realtime_voice" | "realtime_voice_handoff";
414
+ text: string;
415
+ };
416
+
417
+ function objectValue(value: unknown): Record<string, unknown> | null {
418
+ return value !== null && typeof value === "object" && !Array.isArray(value)
419
+ ? (value as Record<string, unknown>)
420
+ : null;
421
+ }
422
+
423
+ /** What a queued row shows: the prompt, or the transcript of a voice request. */
424
+ export function queuedTurnPresentation(turn: SessionTurn): QueuedTurnPresentation {
425
+ const realtimeDelegation = objectValue(turn.metadata.realtimeDelegation);
426
+ const inputTranscript = realtimeDelegation?.inputTranscript;
427
+ if (typeof inputTranscript === "string" && inputTranscript.trim()) {
428
+ return { kind: "realtime_voice", text: inputTranscript.trim() };
429
+ }
430
+ if (objectValue(turn.metadata.realtimeTailFlush)) {
431
+ return { kind: "realtime_voice_handoff", text: "Remaining voice context" };
432
+ }
433
+ return { kind: "prompt", text: turn.prompt };
434
+ }
435
+
436
+ export function isSteeringTurn(turn: SessionTurn): boolean {
437
+ return turn.metadata.delivery === "steer";
438
+ }
439
+
440
+ /** A queued turn that is really waiting: not already a steer in flight. */
441
+ export function isAuthoritativeQueuedTurn(
442
+ turn: SessionTurn,
443
+ mutationFor: (turnId: string) => string | null,
444
+ ): boolean {
445
+ return !isSteeringTurn(turn) && mutationFor(turn.id) !== "steer";
446
+ }
447
+
448
+ export function countAuthoritativeQueuedTurns(
449
+ turns: readonly SessionTurn[],
450
+ mutationFor: (turnId: string) => string | null,
451
+ ): number {
452
+ return turns.filter((turn) => isAuthoritativeQueuedTurn(turn, mutationFor)).length;
453
+ }
454
+
455
+ /** The move anchors for one row's Move up / Move down. */
456
+ export function queueNeighborAnchors(
457
+ turns: readonly SessionTurn[],
458
+ index: number,
459
+ ): { beforeUp: string | null; beforeDown: string | null } {
460
+ return {
461
+ beforeUp: index > 0 ? (turns[index - 1]?.id ?? null) : null,
462
+ beforeDown: index < turns.length - 1 ? (turns[index + 2]?.id ?? null) : null,
463
+ };
464
+ }