@opengeni/react 3.3.2 → 3.4.1-canary.38960406141001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +2 -0
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +12 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +30 -3
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +404 -195
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -429
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +80 -4
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +299 -74
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2319 -748
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-2DZVYHVO.js +0 -470
  814. package/dist/chunk-2DZVYHVO.js.map +0 -1
  815. package/dist/chunk-3AGBGTRT.js.map +0 -1
  816. package/dist/chunk-4MDLEHXL.js.map +0 -1
  817. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  818. package/dist/chunk-7EAFGICR.js +0 -302
  819. package/dist/chunk-7EAFGICR.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X4A66EWZ.js +0 -223
  836. package/dist/chunk-X4A66EWZ.js.map +0 -1
  837. package/dist/chunk-XYRDDSXF.js.map +0 -1
  838. package/dist/chunk-YG4QEQF5.js +0 -9557
  839. package/dist/chunk-YG4QEQF5.js.map +0 -1
  840. package/dist/chunk-YVCHAQZY.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  type EffectiveControlResumeOption,
6
6
  type EffectiveSessionControl,
7
7
  type LatencyMode,
8
- type OpenGeniApiError,
8
+ OpenGeniApiError,
9
9
  type ReasoningEffort,
10
10
  type ResourceRef,
11
11
  type SaveComposerDraftRequest,
@@ -15,6 +15,16 @@ import {
15
15
  } from "@opengeni/sdk";
16
16
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
17
17
  import { useEmbeddedSession, type EmbeddedSessionClientOverride } from "../session-context";
18
+ import {
19
+ COMPOSER_MODEL_UNAVAILABLE_MESSAGE,
20
+ ComposerReconciliationRequiredError,
21
+ ComposerStateError,
22
+ ComposerWorkspaceControlUnavailableError,
23
+ composerSubmissionCanRetry,
24
+ composerSubmissionErrorMessage,
25
+ } from "../lib/format";
26
+ import { normalizeError, useErrorMessage } from "../lib/error-message";
27
+ import { notifyObserver as notifyComposerObserver } from "../lib/notify-observer";
18
28
  import { useSessionEventTrigger, type SessionEventFeedOptions } from "./internal";
19
29
 
20
30
  export type ComposerPolicy = {
@@ -28,11 +38,19 @@ export type ComposerSendExtras = Omit<
28
38
  "text" | "clientEventId" | "annotations" | "model" | "reasoningEffort" | "latencyMode"
29
39
  >;
30
40
 
41
+ /** Unsent local content handed off from a new-conversation composer. */
42
+ export type InitialComposerDraft = {
43
+ text: string;
44
+ resources?: ResourceRef[] | undefined;
45
+ annotations?: DraftTimelineAnnotation[] | undefined;
46
+ policy?: ComposerPolicy | undefined;
47
+ };
48
+
31
49
  export type UseComposerOptions = EmbeddedSessionClientOverride &
32
50
  SessionEventFeedOptions & {
33
- /** Called synchronously after an ordinary Send is accepted by the local UI. */
51
+ /** Called synchronously after local submission. Observer errors never change delivery. */
34
52
  onSubmitted?: ((text: string, input: SendMessageInput) => void) | undefined;
35
- /** Called with the exact accepted wire input after a successful send. */
53
+ /** Called with the accepted wire input. Observer errors never turn acceptance into failure. */
36
54
  onSent?: ((text: string, input: SendMessageInput) => void) | undefined;
37
55
  /** Called with the exact wire input after a delivery failure. */
38
56
  onDeliveryError?:
@@ -57,6 +75,13 @@ export type UseComposerOptions = EmbeddedSessionClientOverride &
57
75
  draftPersistence?: "durable" | "disabled" | undefined;
58
76
  /** Required explicit authority when durable draft persistence is disabled. */
59
77
  initialPolicy?: ComposerPolicy | undefined;
78
+ /**
79
+ * Seed local unsent content once when this session is mounted/selected.
80
+ * The real server draft still supplies the revision used for persistence.
81
+ * A retained uncertain submission takes precedence over this handoff.
82
+ * An empty seed does not erase an existing server draft.
83
+ */
84
+ initialDraft?: InitialComposerDraft | undefined;
60
85
  };
61
86
 
62
87
  type ComposerDraftShadow = {
@@ -66,6 +91,19 @@ type ComposerDraftShadow = {
66
91
  policy?: ComposerPolicy | undefined;
67
92
  };
68
93
 
94
+ function initialComposerShadow(
95
+ seed: InitialComposerDraft | undefined,
96
+ ): ComposerDraftShadow | undefined {
97
+ if (!seed || (!seed.text && !seed.resources?.length && !seed.annotations?.length && !seed.policy))
98
+ return undefined;
99
+ return {
100
+ text: seed.text,
101
+ resources: [...(seed.resources ?? [])],
102
+ annotations: cloneAnnotations(seed.annotations ?? []),
103
+ ...(seed.policy ? { policy: { ...seed.policy } } : {}),
104
+ };
105
+ }
106
+
69
107
  type PendingComposerOperation = {
70
108
  delivery: "send" | "steer";
71
109
  input: SendMessageInput;
@@ -97,6 +135,10 @@ export type ComposerOptimisticMessage = {
97
135
  triggerEventId?: string | null | undefined;
98
136
  appliedQueueVersion?: number | null | undefined;
99
137
  error?: string | undefined;
138
+ /** Bounded support reference retained independently of display copy across remounts. */
139
+ correlationId?: string | undefined;
140
+ /** False for a definitive refusal that requires changing payment or allowance settings. */
141
+ retryable?: boolean | undefined;
100
142
  outcomeUnknown?: boolean | undefined;
101
143
  };
102
144
 
@@ -182,15 +224,43 @@ function restoreOptimisticSendOperations(key: string | null): OptimisticSendOper
182
224
  operation.state === "sending" || operation.state === "queued"
183
225
  ? true
184
226
  : operation.outcomeUnknown,
185
- error:
186
- operation.state === "sending"
187
- ? "Delivery was interrupted; retry to reconcile this message."
188
- : operation.error,
227
+ correlationId: restoredCorrelationId(operation.correlationId),
228
+ error: restoredErrorReference(
229
+ operation.correlationId,
230
+ hasMcpCredentialUpdates && (operation.state === "sending" || operation.outcomeUnknown)
231
+ ? composerSubmissionErrorMessage(new ComposerReconciliationRequiredError())
232
+ : operation.state === "sending"
233
+ ? "Delivery was interrupted; retry to reconcile this message."
234
+ : operation.outcomeUnknown
235
+ ? "The request could not be confirmed. Check its status before retrying."
236
+ : operation.error
237
+ ? composerSubmissionErrorMessage(new Error(operation.error))
238
+ : undefined,
239
+ ),
240
+ retryable:
241
+ operation.state === "sending" || operation.outcomeUnknown
242
+ ? true
243
+ : (operation.retryable ??
244
+ (operation.error ? composerSubmissionCanRetry(new Error(operation.error)) : true)),
189
245
  input: operation.input,
190
246
  canRetry: !hasMcpCredentialUpdates,
191
247
  }));
192
248
  }
193
249
 
250
+ function restoredCorrelationId(value: unknown): string | undefined {
251
+ return typeof value === "string" && /^[\w.:-]{1,128}$/u.test(value) ? value : undefined;
252
+ }
253
+
254
+ function restoredErrorReference(
255
+ reference: unknown,
256
+ message: string | undefined,
257
+ ): string | undefined {
258
+ const correlationId = restoredCorrelationId(reference);
259
+ return message && correlationId && message !== COMPOSER_MODEL_UNAVAILABLE_MESSAGE
260
+ ? `${message} Reference: ${correlationId}.`
261
+ : message;
262
+ }
263
+
194
264
  function rememberOptimisticSendOperations(
195
265
  key: string | null,
196
266
  operations: OptimisticSendOperation[],
@@ -424,6 +494,8 @@ export type ComposerState = {
424
494
  /** Newly captured annotation the review surface should focus. */
425
495
  annotationReviewTargetId?: string | null | undefined;
426
496
  clearAnnotationReviewTarget?: (() => void) | undefined;
497
+ /** Focus an annotation, or the first incomplete note when omitted. */
498
+ requestAnnotationReview?: ((id?: string) => void) | undefined;
427
499
  /** Read the current draft synchronously before a destructive replacement. */
428
500
  hasDraftContent: () => boolean;
429
501
  /** Append the draft behind prompts already visible in the queue. */
@@ -431,6 +503,8 @@ export type ComposerState = {
431
503
  /** Locally acknowledged ordinary sends awaiting durable timeline reconciliation. */
432
504
  optimisticMessages?: ComposerOptimisticMessage[] | undefined;
433
505
  retryOptimisticMessage?: ((clientEventId: string) => void) | undefined;
506
+ /** Move a definitively refused message into an empty composer without resending it. */
507
+ restoreOptimisticMessage?: ((clientEventId: string) => void) | undefined;
434
508
  removeOptimisticMessage?: ((clientEventId: string) => void) | undefined;
435
509
  /** Supersede current direction with the draft. */
436
510
  steer: (text?: string) => Promise<boolean>;
@@ -637,6 +711,7 @@ export function useComposer(
637
711
  options: UseComposerOptions = {},
638
712
  ): ComposerControllerState {
639
713
  const { client, workspaceId, registerSessionReconciler } = useEmbeddedSession(options);
714
+ const formatError = useErrorMessage();
640
715
  const durableDrafts = options.draftPersistence !== "disabled";
641
716
  if (!durableDrafts && !options.initialPolicy) {
642
717
  throw new Error("useComposer requires initialPolicy when draft persistence is disabled");
@@ -646,7 +721,9 @@ export function useComposer(
646
721
  const initialPendingOperation = restorePendingComposerOperation(pendingOperationKey);
647
722
  const initialOptimisticSends = restoreOptimisticSendOperations(pendingOperationKey);
648
723
  const initialShadow =
649
- initialPendingOperation?.newerShadow ?? initialOptimisticSends.at(-1)?.newerShadow;
724
+ initialPendingOperation?.newerShadow ??
725
+ initialOptimisticSends.at(-1)?.newerShadow ??
726
+ initialComposerShadow(options.initialDraft);
650
727
  const [value, setValue] = useState(() => initialShadow?.text ?? "");
651
728
  const [annotations, setAnnotations] = useState<DraftTimelineAnnotation[]>(
652
729
  () => initialShadow?.annotations ?? [],
@@ -675,6 +752,8 @@ export function useComposer(
675
752
  const [acceptedControl, setAcceptedControl] = useState<EffectiveSessionControl | null>(null);
676
753
  const [resuming, setResuming] = useState(false);
677
754
  const [error, setError] = useState<Error | null>(null);
755
+ // Background draft reads recover independently of Send/Steer/control failures.
756
+ const [draftReadError, setDraftReadError] = useState<Error | null>(null);
678
757
  const [draft, setDraft] = useState<ComposerDraft | null>(null);
679
758
  const [draftLoading, setDraftLoading] = useState(Boolean(sessionId) && durableDrafts);
680
759
  const [draftSaving, setDraftSaving] = useState(false);
@@ -714,8 +793,18 @@ export function useComposer(
714
793
  }>({ targetKey, failures: 0, timer: null });
715
794
  const lastSavedSignature = useRef<string | null>(null);
716
795
  const saveChain = useRef<Promise<void>>(Promise.resolve());
717
- const onSent = options.onSent;
718
- const onSubmitted = options.onSubmitted;
796
+ const onSent = useCallback(
797
+ (text: string, input: SendMessageInput) => {
798
+ notifyComposerObserver(options.onSent, text, input);
799
+ },
800
+ [options.onSent],
801
+ );
802
+ const onSubmitted = useCallback(
803
+ (text: string, input: SendMessageInput) => {
804
+ notifyComposerObserver(options.onSubmitted, text, input);
805
+ },
806
+ [options.onSubmitted],
807
+ );
719
808
  const onDeliveryErrorRef = useRef(options.onDeliveryError);
720
809
  onDeliveryErrorRef.current = options.onDeliveryError;
721
810
  useLayoutEffect(() => {
@@ -757,7 +846,9 @@ export function useComposer(
757
846
  steeringSettlementEventsRef.current = [];
758
847
  pendingClientEventId.current = pendingOperationRef.current?.input.clientEventId ?? null;
759
848
  const shadow =
760
- pendingOperationRef.current?.newerShadow ?? restoredOptimisticSends.at(-1)?.newerShadow;
849
+ pendingOperationRef.current?.newerShadow ??
850
+ restoredOptimisticSends.at(-1)?.newerShadow ??
851
+ initialComposerShadow(options.initialDraft);
761
852
  localEditRevision.current = shadow ? 1 : 0;
762
853
  valueRef.current = shadow?.text ?? "";
763
854
  annotationsRef.current = shadow?.annotations ?? [];
@@ -792,12 +883,20 @@ export function useComposer(
792
883
  setAcceptedControl(null);
793
884
  setResuming(false);
794
885
  setError(null);
886
+ setDraftReadError(null);
795
887
  setDraft(null);
796
888
  setDraftLoading(Boolean(sessionId) && durableDrafts);
797
889
  setDraftSaving(false);
798
890
  setDraftConflict(null);
799
891
  setRestoredResources(shadow?.resources ?? []);
800
- }, [durableDrafts, options.initialPolicy, pendingOperationKey, sessionId, targetKey]);
892
+ }, [
893
+ durableDrafts,
894
+ options.initialPolicy,
895
+ options.initialDraft,
896
+ pendingOperationKey,
897
+ sessionId,
898
+ targetKey,
899
+ ]);
801
900
  useEffect(
802
901
  () => () => {
803
902
  if (draftReadRetryRef.current.timer !== null) {
@@ -918,6 +1017,7 @@ export function useComposer(
918
1017
  if (targetKeyRef.current !== targetKey) return;
919
1018
  if (!sessionId || !durableDrafts) {
920
1019
  setDraftLoading(false);
1020
+ setDraftReadError(null);
921
1021
  return;
922
1022
  }
923
1023
  let retry = draftReadRetryRef.current;
@@ -991,6 +1091,8 @@ export function useComposer(
991
1091
  if (retry.timer !== null) clearTimeout(retry.timer);
992
1092
  retry.failures = 0;
993
1093
  retry.timer = null;
1094
+ // Recovery also counts when the server returns the same draft revision.
1095
+ setDraftReadError(null);
994
1096
  const currentRevision = draftRef.current?.revision ?? -1;
995
1097
  // Reconnect and client-generation effects can legitimately ask for the
996
1098
  // draft again. A same-revision response is not new authority: publishing
@@ -1043,12 +1145,20 @@ export function useComposer(
1043
1145
  }
1044
1146
  } catch (cause) {
1045
1147
  if (
1148
+ !requestAbort.signal.aborted &&
1046
1149
  generation === targetGeneration.current &&
1047
1150
  targetKeyRef.current === targetKey &&
1048
1151
  readTicket === draftReadGeneration.current
1049
1152
  ) {
1050
- setError(asError(cause));
1153
+ const problem = asError(cause);
1154
+ const timedOut = problem.name === "TimeoutError";
1155
+ setDraftReadError(
1156
+ timedOut
1157
+ ? new ComposerStateError("Draft sync timed out. Retrying…", { cause })
1158
+ : problem,
1159
+ );
1051
1160
  if (
1161
+ timedOut ||
1052
1162
  cause instanceof TypeError ||
1053
1163
  (cause && typeof cause === "object" && "retryable" in cause && cause.retryable === true)
1054
1164
  ) {
@@ -1352,21 +1462,34 @@ export function useComposer(
1352
1462
  optimisticProcessorBusyRef.current = true;
1353
1463
  void (async () => {
1354
1464
  let mutationFailureObserved = false;
1355
- const markFailed = (problem: Error, outcomeUnknown: boolean): void => {
1465
+ const markFailed = (cause: unknown, outcomeUnknown: boolean): void => {
1356
1466
  if (
1357
1467
  targetKeyRef.current !== ownedTargetKey ||
1358
1468
  targetGeneration.current !== ownedGeneration
1359
1469
  ) {
1360
1470
  return;
1361
1471
  }
1472
+ const problem = asError(cause);
1362
1473
  replaceOptimisticSends((current) =>
1363
1474
  current.map((candidate) =>
1364
1475
  candidate.clientEventId === operation.clientEventId
1365
1476
  ? {
1366
1477
  ...candidate,
1367
1478
  state: "failed",
1368
- error: problem.message,
1479
+ error: formatError(
1480
+ cause,
1481
+ outcomeUnknown &&
1482
+ !isOutcomeUnknownError(problem) &&
1483
+ !(problem instanceof ComposerReconciliationRequiredError)
1484
+ ? `The request could not be confirmed. Check its status before retrying.${problem instanceof OpenGeniApiError && problem.correlationId ? ` Reference: ${problem.correlationId}.` : ""}`
1485
+ : composerSubmissionErrorMessage(problem),
1486
+ ),
1487
+ retryable: outcomeUnknown || composerSubmissionCanRetry(problem),
1369
1488
  outcomeUnknown,
1489
+ correlationId:
1490
+ problem instanceof OpenGeniApiError
1491
+ ? problem.correlationId
1492
+ : candidate.correlationId,
1370
1493
  }
1371
1494
  : candidate,
1372
1495
  ),
@@ -1393,7 +1516,7 @@ export function useComposer(
1393
1516
  // This read cannot settle the prior mutation in either direction.
1394
1517
  // Preserve its exact key and uncertain status until reconciliation
1395
1518
  // succeeds or that same mutation is actually replayed.
1396
- markFailed(asError(cause), true);
1519
+ markFailed(cause, true);
1397
1520
  return;
1398
1521
  }
1399
1522
  const reconciled = reconcileOptimisticSendFromEvents(operation, events);
@@ -1417,15 +1540,13 @@ export function useComposer(
1417
1540
  return;
1418
1541
  }
1419
1542
  if (!operation.canRetry) {
1420
- throw new Error(
1421
- "OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
1422
- );
1543
+ throw new ComposerReconciliationRequiredError();
1423
1544
  }
1424
1545
  }
1425
1546
  let expectedDraftRevision: number | undefined;
1426
1547
  if (durableDrafts && operation.draftPayload) {
1427
1548
  if (!(await persistPayload(operation.draftPayload))) {
1428
- throw new Error("The message draft could not be saved before delivery.");
1549
+ throw new ComposerStateError("The message draft could not be saved before delivery.");
1429
1550
  }
1430
1551
  expectedDraftRevision = draftRef.current?.revision;
1431
1552
  }
@@ -1443,7 +1564,7 @@ export function useComposer(
1443
1564
  let acceptedEvent: SessionEvent | null = null;
1444
1565
  if (durableDrafts) {
1445
1566
  if (!operation.draftPayload || expectedDraftRevision === undefined) {
1446
- throw new Error("The durable composer draft is not ready for delivery.");
1567
+ throw new ComposerStateError("The durable composer draft is not ready for delivery.");
1447
1568
  }
1448
1569
  const result = await client
1449
1570
  .submitComposerDraft(workspaceId, sessionId, {
@@ -1461,9 +1582,10 @@ export function useComposer(
1461
1582
  ...(wireInput.mcpCredentialUpdates
1462
1583
  ? { mcpCredentialUpdates: wireInput.mcpCredentialUpdates }
1463
1584
  : {}),
1464
- ...(wireInput.connectionAuthorities
1465
- ? { connectionAuthorities: wireInput.connectionAuthorities }
1585
+ ...(wireInput.connectionAccounts
1586
+ ? { connectionAccounts: wireInput.connectionAccounts }
1466
1587
  : {}),
1588
+
1467
1589
  ...(wireInput.personalResourceAttachment
1468
1590
  ? { personalResourceAttachment: wireInput.personalResourceAttachment }
1469
1591
  : {}),
@@ -1533,14 +1655,14 @@ export function useComposer(
1533
1655
  return;
1534
1656
  }
1535
1657
  const problem = asError(cause);
1536
- onDeliveryErrorRef.current?.(problem, operation.input, "send");
1658
+ notifyComposerObserver(onDeliveryErrorRef.current, problem, operation.input, "send");
1537
1659
  // Only an actual mutation replay can replace prior uncertainty with a
1538
1660
  // definitive response. Local preparation failures remain retry-only.
1539
1661
  const outcomeUnknown =
1540
1662
  operation.outcomeUnknown && !mutationFailureObserved
1541
1663
  ? true
1542
1664
  : isOutcomeUnknownError(cause);
1543
- markFailed(problem, outcomeUnknown);
1665
+ markFailed(cause, outcomeUnknown);
1544
1666
  } finally {
1545
1667
  optimisticProcessorBusyRef.current = false;
1546
1668
  if (targetKeyRef.current === ownedTargetKey) {
@@ -1552,6 +1674,7 @@ export function useComposer(
1552
1674
  adoptDraftBase,
1553
1675
  client,
1554
1676
  durableDrafts,
1677
+ formatError,
1555
1678
  markOptimisticAccepted,
1556
1679
  loadDraft,
1557
1680
  onSent,
@@ -1720,7 +1843,7 @@ export function useComposer(
1720
1843
  input.reasoningEffort === undefined ||
1721
1844
  input.latencyMode === undefined
1722
1845
  ) {
1723
- throw new Error("The durable composer draft is not ready for delivery.");
1846
+ throw new ComposerStateError("The durable composer draft is not ready for delivery.");
1724
1847
  }
1725
1848
  const result = await client.submitComposerDraft(workspaceId, sessionId, {
1726
1849
  text: input.text,
@@ -1737,9 +1860,7 @@ export function useComposer(
1737
1860
  ...(input.mcpCredentialUpdates
1738
1861
  ? { mcpCredentialUpdates: input.mcpCredentialUpdates }
1739
1862
  : {}),
1740
- ...(input.connectionAuthorities
1741
- ? { connectionAuthorities: input.connectionAuthorities }
1742
- : {}),
1863
+ ...(input.connectionAccounts ? { connectionAccounts: input.connectionAccounts } : {}),
1743
1864
  ...(input.personalResourceAttachment
1744
1865
  ? { personalResourceAttachment: input.personalResourceAttachment }
1745
1866
  : {}),
@@ -1827,11 +1948,7 @@ export function useComposer(
1827
1948
  return true;
1828
1949
  }
1829
1950
  if (!pending.canRetry) {
1830
- setError(
1831
- new Error(
1832
- "OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
1833
- ),
1834
- );
1951
+ setError(new ComposerReconciliationRequiredError());
1835
1952
  return false;
1836
1953
  }
1837
1954
  try {
@@ -1851,7 +1968,12 @@ export function useComposer(
1851
1968
  } catch (cause) {
1852
1969
  const problem = asError(cause);
1853
1970
  const outcomeUnknown = isOutcomeUnknownError(cause);
1854
- onDeliveryErrorRef.current?.(problem, pending.input, pending.delivery);
1971
+ notifyComposerObserver(
1972
+ onDeliveryErrorRef.current,
1973
+ problem,
1974
+ pending.input,
1975
+ pending.delivery,
1976
+ );
1855
1977
  if (!outcomeUnknown) {
1856
1978
  clearPending();
1857
1979
  keepSteering = false;
@@ -1954,7 +2076,12 @@ export function useComposer(
1954
2076
  });
1955
2077
  }
1956
2078
  } catch (cause) {
1957
- onDeliveryErrorRef.current?.(asError(cause), operation.input, operation.delivery);
2079
+ notifyComposerObserver(
2080
+ onDeliveryErrorRef.current,
2081
+ asError(cause),
2082
+ operation.input,
2083
+ operation.delivery,
2084
+ );
1958
2085
  if (!isOutcomeUnknownError(cause)) {
1959
2086
  clearPending();
1960
2087
  } else if (delivery === "steer") {
@@ -2125,6 +2252,7 @@ export function useComposer(
2125
2252
  if (operation.outcomeUnknown) {
2126
2253
  return { ...operation, state: "sending", error: undefined };
2127
2254
  }
2255
+ if (operation.retryable === false) return operation;
2128
2256
  const nextClientEventId = generateClientEventId();
2129
2257
  const currentPersonalResourceAttachment = resolveSendExtras(
2130
2258
  sendExtrasRef.current,
@@ -2154,6 +2282,7 @@ export function useComposer(
2154
2282
  occurredAt: new Date().toISOString(),
2155
2283
  state: "sending",
2156
2284
  error: undefined,
2285
+ retryable: undefined,
2157
2286
  outcomeUnknown: false,
2158
2287
  canRetry: true,
2159
2288
  };
@@ -2224,7 +2353,7 @@ export function useComposer(
2224
2353
  targetKeyRef.current === ownedTargetKey &&
2225
2354
  targetGeneration.current === ownedGeneration
2226
2355
  ) {
2227
- setError(cause instanceof Error ? cause : new Error(String(cause)));
2356
+ setError(normalizeError(cause));
2228
2357
  }
2229
2358
  } finally {
2230
2359
  if (
@@ -2268,7 +2397,7 @@ export function useComposer(
2268
2397
  targetKeyRef.current === ownedTargetKey &&
2269
2398
  targetGeneration.current === ownedGeneration
2270
2399
  ) {
2271
- setError(cause instanceof Error ? cause : new Error(String(cause)));
2400
+ setError(normalizeError(cause));
2272
2401
  }
2273
2402
  } finally {
2274
2403
  if (
@@ -2295,9 +2424,7 @@ export function useComposer(
2295
2424
  (blocker) => blocker.kind === "workspace",
2296
2425
  );
2297
2426
  if (!client.setWorkspaceInferenceState) {
2298
- throw new Error(
2299
- "@opengeni/react: workspace-scoped resume requires setWorkspaceInferenceState.",
2300
- );
2427
+ throw new ComposerWorkspaceControlUnavailableError();
2301
2428
  }
2302
2429
  const clientEventId = generateClientEventId();
2303
2430
  await replayOutcomeUnknown(() =>
@@ -2427,7 +2554,7 @@ export function useComposer(
2427
2554
  const addAnnotation = useCallback(
2428
2555
  (annotation: DraftTimelineAnnotation) => {
2429
2556
  if (annotationsRef.current.length >= 12) {
2430
- setError(new Error("A message can include at most 12 timeline annotations."));
2557
+ setError(new ComposerStateError("A message can include at most 12 timeline annotations."));
2431
2558
  return;
2432
2559
  }
2433
2560
  const next = [...annotationsRef.current, annotation];
@@ -2458,6 +2585,20 @@ export function useComposer(
2458
2585
  setAnnotationReviewTargetId(null);
2459
2586
  }, []);
2460
2587
 
2588
+ const requestAnnotationReview = useCallback((id?: string) => {
2589
+ const current = annotationsRef.current;
2590
+ if (current.length === 0) {
2591
+ setAnnotationReviewTargetId(null);
2592
+ return;
2593
+ }
2594
+ if (id && current.some((annotation) => annotation.id === id)) {
2595
+ setAnnotationReviewTargetId(id);
2596
+ return;
2597
+ }
2598
+ const incomplete = current.find((annotation) => annotation.note.trim().length === 0);
2599
+ setAnnotationReviewTargetId(incomplete?.id ?? current[0]!.id);
2600
+ }, []);
2601
+
2461
2602
  const updatePolicy = useCallback(
2462
2603
  (next: ComposerPolicy): void => {
2463
2604
  if (targetKeyRef.current !== targetKey) return;
@@ -2546,6 +2687,42 @@ export function useComposer(
2546
2687
  );
2547
2688
  }, []);
2548
2689
 
2690
+ const restoreOptimisticMessage = useCallback(
2691
+ (clientEventId: string): void => {
2692
+ if (
2693
+ targetKeyRef.current !== targetKey ||
2694
+ draftLoading ||
2695
+ pendingOperationRef.current ||
2696
+ hasDraftContent()
2697
+ )
2698
+ return;
2699
+ const operation = optimisticSendsRef.current.find(
2700
+ (candidate) => candidate.clientEventId === clientEventId,
2701
+ );
2702
+ if (!operation || operation.state !== "failed" || operation.outcomeUnknown) return;
2703
+ // Restoring is a new draft edit, not a retry. Keep the user's current model
2704
+ // selection and never copy credentials from the old rejected request.
2705
+ localEditRevision.current += 1;
2706
+ valueRef.current = operation.text;
2707
+ restoredResourcesRef.current = [...operation.resources];
2708
+ annotationsRef.current = cloneAnnotations(operation.annotations);
2709
+ setValue(operation.text);
2710
+ setRestoredResources(restoredResourcesRef.current);
2711
+ setAnnotations(annotationsRef.current);
2712
+ setError(null);
2713
+ setOptimisticDraftShadow({
2714
+ text: operation.text,
2715
+ resources: restoredResourcesRef.current,
2716
+ annotations: annotationsRef.current,
2717
+ policy: policyRef.current ?? undefined,
2718
+ });
2719
+ replaceOptimisticSends((current) =>
2720
+ current.filter((candidate) => candidate.clientEventId !== clientEventId),
2721
+ );
2722
+ },
2723
+ [draftLoading, hasDraftContent, replaceOptimisticSends, setOptimisticDraftShadow, targetKey],
2724
+ );
2725
+
2549
2726
  const resolveDraftConflict = useCallback(
2550
2727
  async (choice: "keep_mine" | "use_remote"): Promise<void> => {
2551
2728
  const ownedTargetKey = targetKey;
@@ -2623,6 +2800,7 @@ export function useComposer(
2623
2800
  const clearError = useCallback(() => {
2624
2801
  if (targetKeyRef.current !== targetKey) return;
2625
2802
  setError(null);
2803
+ setDraftReadError(null);
2626
2804
  setDraftConflict(null);
2627
2805
  }, [targetKey]);
2628
2806
  // `valueRef` is the synchronous composer authority. React state exists to
@@ -2643,10 +2821,15 @@ export function useComposer(
2643
2821
  removeAnnotation,
2644
2822
  annotationReviewTargetId: identityMatches ? annotationReviewTargetId : null,
2645
2823
  clearAnnotationReviewTarget,
2824
+ requestAnnotationReview,
2646
2825
  hasDraftContent,
2647
2826
  send,
2648
2827
  optimisticMessages: visibleOptimisticMessages,
2649
2828
  retryOptimisticMessage,
2829
+ restoreOptimisticMessage:
2830
+ !draftLoading && !pendingOperationRef.current && !hasDraftContent()
2831
+ ? restoreOptimisticMessage
2832
+ : undefined,
2650
2833
  removeOptimisticMessage,
2651
2834
  steer,
2652
2835
  steering: visibleSteering,
@@ -2689,7 +2872,7 @@ export function useComposer(
2689
2872
  resolveDraftConflict,
2690
2873
  restoredResources: identityMatches ? restoredResources : [],
2691
2874
  removeRestoredResource,
2692
- error: identityMatches ? error : null,
2875
+ error: identityMatches ? (error ?? draftReadError) : null,
2693
2876
  clearError,
2694
2877
  };
2695
2878
  }
@@ -2768,7 +2951,7 @@ async function replayOutcomeUnknown<T>(command: () => Promise<T>): Promise<T> {
2768
2951
  }
2769
2952
 
2770
2953
  function asError(cause: unknown): Error {
2771
- return cause instanceof Error ? cause : new Error(String(cause));
2954
+ return normalizeError(cause);
2772
2955
  }
2773
2956
 
2774
2957
  function promptRoutingFromAcceptedEvent(
@@ -57,7 +57,12 @@ export type UseComputerFrameStreamResult = {
57
57
  frame: ComputerFrame | null;
58
58
  attachment: Pick<
59
59
  ComputerSessionAttachment,
60
- "computerSessionId" | "controllerGeneration" | "targetId" | "stream" | "expiresAt"
60
+ | "computerSessionId"
61
+ | "controllerGeneration"
62
+ | "targetId"
63
+ | "inputAllowed"
64
+ | "stream"
65
+ | "expiresAt"
61
66
  > | null;
62
67
  error: Error | null;
63
68
  reconnect: () => void;
@@ -159,9 +164,19 @@ export function useComputerFrameStream(
159
164
  pendingFrame = null;
160
165
  };
161
166
 
167
+ const clearRecoveryTimers = () => {
168
+ if (reconnectTimer) clearTimeout(reconnectTimer);
169
+ if (expiryTimer) clearTimeout(expiryTimer);
170
+ reconnectTimer = null;
171
+ expiryTimer = null;
172
+ };
173
+
162
174
  const scheduleReconnect = () => {
163
175
  if (disposed || reconnectTimer) return;
164
- if (failures >= MAX_AUTOMATIC_RECONNECTS_WITHOUT_A_FRAME) return;
176
+ if (failures >= MAX_AUTOMATIC_RECONNECTS_WITHOUT_A_FRAME) {
177
+ clearRecoveryTimers();
178
+ return;
179
+ }
165
180
  const delay = Math.min(5_000, 250 * 2 ** Math.min(failures, 5));
166
181
  failures += 1;
167
182
  setResult((current) => ({ ...current, state: "reconnecting" }));
@@ -177,6 +192,7 @@ export function useComputerFrameStream(
177
192
  setResult((current) => ({ ...current, state: "error", error }));
178
193
  clearSocket();
179
194
  if (reconnectAutomatically) scheduleReconnect();
195
+ else clearRecoveryTimers();
180
196
  };
181
197
 
182
198
  const onOpen = (source: ComputerFrameWebSocket) => {
@@ -295,8 +311,7 @@ export function useComputerFrameStream(
295
311
 
296
312
  const onClose = (source: ComputerFrameWebSocket) => {
297
313
  if (disposed || source !== socket) return;
298
- clearSocket();
299
- scheduleReconnect();
314
+ fail(new Error("Desktop view lost connection."));
300
315
  };
301
316
 
302
317
  const connectSocket = () => {
@@ -356,7 +371,7 @@ export function useComputerFrameStream(
356
371
  expiresInSeconds: 120,
357
372
  ...(streamRef.current ? { stream: streamRef.current } : {}),
358
373
  },
359
- { signal: attachmentAbort.signal },
374
+ { signal: attachmentAbort.signal, timeoutMs: 15_000 },
360
375
  );
361
376
  if (disposed) return;
362
377
  if (
@@ -366,6 +381,9 @@ export function useComputerFrameStream(
366
381
  throw new Error("desktop attachment does not match the requested resource");
367
382
  }
368
383
  controllerGeneration = attachment.controllerGeneration;
384
+ // A fresh attachment owns a new producer whose sequence can restart.
385
+ // Transport reconnects reuse the attachment and retain their sequence fence.
386
+ latestRef.current = { key: "", sequence: -1 };
369
387
  activeAttachment = attachment;
370
388
  activeStream = attachment.stream;
371
389
  attachmentExpiresAt = Date.parse(attachment.expiresAt);
@@ -378,6 +396,7 @@ export function useComputerFrameStream(
378
396
  computerSessionId: attachment.computerSessionId,
379
397
  controllerGeneration: attachment.controllerGeneration,
380
398
  targetId: attachment.targetId,
399
+ inputAllowed: attachment.inputAllowed,
381
400
  stream: attachment.stream,
382
401
  expiresAt: attachment.expiresAt,
383
402
  },
@@ -406,8 +425,7 @@ export function useComputerFrameStream(
406
425
  disposed = true;
407
426
  pendingFrame = null;
408
427
  attachmentAbort.abort();
409
- if (reconnectTimer) clearTimeout(reconnectTimer);
410
- if (expiryTimer) clearTimeout(expiryTimer);
428
+ clearRecoveryTimers();
411
429
  clearSocket(true);
412
430
  };
413
431
  }, [client, enabled, nonce, options.computerSessionId, options.targetId, workspaceId]);