@opengeni/react 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-BO2IWXVK.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
@@ -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>;
@@ -569,9 +643,17 @@ function reconcileOptimisticSendFromEvents(
569
643
  );
570
644
  const triggerEventId = operation.triggerEventId ?? accepted?.id ?? null;
571
645
  const turnId = operation.turnId ?? promptTurnIdForTrigger(triggerEventId, events);
646
+ const acceptedRouting = promptRoutingFromAcceptedEvent(accepted ?? null);
647
+ const destination =
648
+ acceptedRouting === "queued_for_execution"
649
+ ? "queue"
650
+ : acceptedRouting === "accepted_for_execution" || acceptedRouting === "accepted_for_steering"
651
+ ? "chat"
652
+ : operation.destination;
572
653
  const needsAdmissionUpdate =
573
654
  accepted !== undefined &&
574
655
  (operation.state !== "queued" ||
656
+ operation.destination !== destination ||
575
657
  operation.triggerEventId !== triggerEventId ||
576
658
  operation.turnId !== turnId ||
577
659
  operation.error !== undefined ||
@@ -580,6 +662,7 @@ function reconcileOptimisticSendFromEvents(
580
662
  ? {
581
663
  ...operation,
582
664
  state: "queued",
665
+ destination,
583
666
  triggerEventId,
584
667
  turnId,
585
668
  error: undefined,
@@ -628,6 +711,7 @@ export function useComposer(
628
711
  options: UseComposerOptions = {},
629
712
  ): ComposerControllerState {
630
713
  const { client, workspaceId, registerSessionReconciler } = useEmbeddedSession(options);
714
+ const formatError = useErrorMessage();
631
715
  const durableDrafts = options.draftPersistence !== "disabled";
632
716
  if (!durableDrafts && !options.initialPolicy) {
633
717
  throw new Error("useComposer requires initialPolicy when draft persistence is disabled");
@@ -637,7 +721,9 @@ export function useComposer(
637
721
  const initialPendingOperation = restorePendingComposerOperation(pendingOperationKey);
638
722
  const initialOptimisticSends = restoreOptimisticSendOperations(pendingOperationKey);
639
723
  const initialShadow =
640
- initialPendingOperation?.newerShadow ?? initialOptimisticSends.at(-1)?.newerShadow;
724
+ initialPendingOperation?.newerShadow ??
725
+ initialOptimisticSends.at(-1)?.newerShadow ??
726
+ initialComposerShadow(options.initialDraft);
641
727
  const [value, setValue] = useState(() => initialShadow?.text ?? "");
642
728
  const [annotations, setAnnotations] = useState<DraftTimelineAnnotation[]>(
643
729
  () => initialShadow?.annotations ?? [],
@@ -666,6 +752,8 @@ export function useComposer(
666
752
  const [acceptedControl, setAcceptedControl] = useState<EffectiveSessionControl | null>(null);
667
753
  const [resuming, setResuming] = useState(false);
668
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);
669
757
  const [draft, setDraft] = useState<ComposerDraft | null>(null);
670
758
  const [draftLoading, setDraftLoading] = useState(Boolean(sessionId) && durableDrafts);
671
759
  const [draftSaving, setDraftSaving] = useState(false);
@@ -697,6 +785,7 @@ export function useComposer(
697
785
  const targetGeneration = useRef(0);
698
786
  const draftReadGeneration = useRef(0);
699
787
  const draftReadInFlightRef = useRef<string | null>(null);
788
+ const draftReadAbortRef = useRef<AbortController | null>(null);
700
789
  const draftReadRetryRef = useRef<{
701
790
  targetKey: string;
702
791
  failures: number;
@@ -704,8 +793,18 @@ export function useComposer(
704
793
  }>({ targetKey, failures: 0, timer: null });
705
794
  const lastSavedSignature = useRef<string | null>(null);
706
795
  const saveChain = useRef<Promise<void>>(Promise.resolve());
707
- const onSent = options.onSent;
708
- 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
+ );
709
808
  const onDeliveryErrorRef = useRef(options.onDeliveryError);
710
809
  onDeliveryErrorRef.current = options.onDeliveryError;
711
810
  useLayoutEffect(() => {
@@ -733,6 +832,8 @@ export function useComposer(
733
832
  if (draftReadRetryRef.current.timer !== null) {
734
833
  clearTimeout(draftReadRetryRef.current.timer);
735
834
  }
835
+ draftReadAbortRef.current?.abort();
836
+ draftReadAbortRef.current = null;
736
837
  draftReadRetryRef.current = { targetKey, failures: 0, timer: null };
737
838
  targetKeyRef.current = targetKey;
738
839
  targetGeneration.current += 1;
@@ -745,7 +846,9 @@ export function useComposer(
745
846
  steeringSettlementEventsRef.current = [];
746
847
  pendingClientEventId.current = pendingOperationRef.current?.input.clientEventId ?? null;
747
848
  const shadow =
748
- pendingOperationRef.current?.newerShadow ?? restoredOptimisticSends.at(-1)?.newerShadow;
849
+ pendingOperationRef.current?.newerShadow ??
850
+ restoredOptimisticSends.at(-1)?.newerShadow ??
851
+ initialComposerShadow(options.initialDraft);
749
852
  localEditRevision.current = shadow ? 1 : 0;
750
853
  valueRef.current = shadow?.text ?? "";
751
854
  annotationsRef.current = shadow?.annotations ?? [];
@@ -780,17 +883,30 @@ export function useComposer(
780
883
  setAcceptedControl(null);
781
884
  setResuming(false);
782
885
  setError(null);
886
+ setDraftReadError(null);
783
887
  setDraft(null);
784
888
  setDraftLoading(Boolean(sessionId) && durableDrafts);
785
889
  setDraftSaving(false);
786
890
  setDraftConflict(null);
787
891
  setRestoredResources(shadow?.resources ?? []);
788
- }, [durableDrafts, options.initialPolicy, pendingOperationKey, sessionId, targetKey]);
892
+ }, [
893
+ durableDrafts,
894
+ options.initialPolicy,
895
+ options.initialDraft,
896
+ pendingOperationKey,
897
+ sessionId,
898
+ targetKey,
899
+ ]);
789
900
  useEffect(
790
901
  () => () => {
791
902
  if (draftReadRetryRef.current.timer !== null) {
792
903
  clearTimeout(draftReadRetryRef.current.timer);
793
904
  }
905
+ targetGeneration.current += 1;
906
+ draftReadGeneration.current += 1;
907
+ draftReadInFlightRef.current = null;
908
+ draftReadAbortRef.current?.abort();
909
+ draftReadAbortRef.current = null;
794
910
  },
795
911
  [],
796
912
  );
@@ -901,6 +1017,7 @@ export function useComposer(
901
1017
  if (targetKeyRef.current !== targetKey) return;
902
1018
  if (!sessionId || !durableDrafts) {
903
1019
  setDraftLoading(false);
1020
+ setDraftReadError(null);
904
1021
  return;
905
1022
  }
906
1023
  let retry = draftReadRetryRef.current;
@@ -929,6 +1046,9 @@ export function useComposer(
929
1046
  draftReadInFlightRef.current = targetKey;
930
1047
  const generation = targetGeneration.current;
931
1048
  const readTicket = ++draftReadGeneration.current;
1049
+ const requestAbort = new AbortController();
1050
+ draftReadAbortRef.current?.abort();
1051
+ draftReadAbortRef.current = requestAbort;
932
1052
  const localAtStart = localEditRevision.current;
933
1053
  const baseAtStart = draftRef.current;
934
1054
  const policyAtStart = policyRef.current;
@@ -958,7 +1078,9 @@ export function useComposer(
958
1078
  setDraftLoading(true);
959
1079
  }
960
1080
  try {
961
- const fetched = await client.getComposerDraft(workspaceId, sessionId);
1081
+ const fetched = await client.getComposerDraft(workspaceId, sessionId, {
1082
+ signal: requestAbort.signal,
1083
+ });
962
1084
  if (
963
1085
  generation !== targetGeneration.current ||
964
1086
  targetKeyRef.current !== targetKey ||
@@ -969,6 +1091,8 @@ export function useComposer(
969
1091
  if (retry.timer !== null) clearTimeout(retry.timer);
970
1092
  retry.failures = 0;
971
1093
  retry.timer = null;
1094
+ // Recovery also counts when the server returns the same draft revision.
1095
+ setDraftReadError(null);
972
1096
  const currentRevision = draftRef.current?.revision ?? -1;
973
1097
  // Reconnect and client-generation effects can legitimately ask for the
974
1098
  // draft again. A same-revision response is not new authority: publishing
@@ -1021,12 +1145,20 @@ export function useComposer(
1021
1145
  }
1022
1146
  } catch (cause) {
1023
1147
  if (
1148
+ !requestAbort.signal.aborted &&
1024
1149
  generation === targetGeneration.current &&
1025
1150
  targetKeyRef.current === targetKey &&
1026
1151
  readTicket === draftReadGeneration.current
1027
1152
  ) {
1028
- 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
+ );
1029
1160
  if (
1161
+ timedOut ||
1030
1162
  cause instanceof TypeError ||
1031
1163
  (cause && typeof cause === "object" && "retryable" in cause && cause.retryable === true)
1032
1164
  ) {
@@ -1049,6 +1181,9 @@ export function useComposer(
1049
1181
  if (draftReadInFlightRef.current === targetKey) {
1050
1182
  draftReadInFlightRef.current = null;
1051
1183
  }
1184
+ if (draftReadAbortRef.current === requestAbort) {
1185
+ draftReadAbortRef.current = null;
1186
+ }
1052
1187
  }
1053
1188
  },
1054
1189
  [client, durableDrafts, sessionId, targetKey, workspaceId],
@@ -1327,21 +1462,34 @@ export function useComposer(
1327
1462
  optimisticProcessorBusyRef.current = true;
1328
1463
  void (async () => {
1329
1464
  let mutationFailureObserved = false;
1330
- const markFailed = (problem: Error, outcomeUnknown: boolean): void => {
1465
+ const markFailed = (cause: unknown, outcomeUnknown: boolean): void => {
1331
1466
  if (
1332
1467
  targetKeyRef.current !== ownedTargetKey ||
1333
1468
  targetGeneration.current !== ownedGeneration
1334
1469
  ) {
1335
1470
  return;
1336
1471
  }
1472
+ const problem = asError(cause);
1337
1473
  replaceOptimisticSends((current) =>
1338
1474
  current.map((candidate) =>
1339
1475
  candidate.clientEventId === operation.clientEventId
1340
1476
  ? {
1341
1477
  ...candidate,
1342
1478
  state: "failed",
1343
- 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),
1344
1488
  outcomeUnknown,
1489
+ correlationId:
1490
+ problem instanceof OpenGeniApiError
1491
+ ? problem.correlationId
1492
+ : candidate.correlationId,
1345
1493
  }
1346
1494
  : candidate,
1347
1495
  ),
@@ -1368,7 +1516,7 @@ export function useComposer(
1368
1516
  // This read cannot settle the prior mutation in either direction.
1369
1517
  // Preserve its exact key and uncertain status until reconciliation
1370
1518
  // succeeds or that same mutation is actually replayed.
1371
- markFailed(asError(cause), true);
1519
+ markFailed(cause, true);
1372
1520
  return;
1373
1521
  }
1374
1522
  const reconciled = reconcileOptimisticSendFromEvents(operation, events);
@@ -1392,15 +1540,13 @@ export function useComposer(
1392
1540
  return;
1393
1541
  }
1394
1542
  if (!operation.canRetry) {
1395
- throw new Error(
1396
- "OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
1397
- );
1543
+ throw new ComposerReconciliationRequiredError();
1398
1544
  }
1399
1545
  }
1400
1546
  let expectedDraftRevision: number | undefined;
1401
1547
  if (durableDrafts && operation.draftPayload) {
1402
1548
  if (!(await persistPayload(operation.draftPayload))) {
1403
- 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.");
1404
1550
  }
1405
1551
  expectedDraftRevision = draftRef.current?.revision;
1406
1552
  }
@@ -1418,7 +1564,7 @@ export function useComposer(
1418
1564
  let acceptedEvent: SessionEvent | null = null;
1419
1565
  if (durableDrafts) {
1420
1566
  if (!operation.draftPayload || expectedDraftRevision === undefined) {
1421
- 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.");
1422
1568
  }
1423
1569
  const result = await client
1424
1570
  .submitComposerDraft(workspaceId, sessionId, {
@@ -1436,9 +1582,10 @@ export function useComposer(
1436
1582
  ...(wireInput.mcpCredentialUpdates
1437
1583
  ? { mcpCredentialUpdates: wireInput.mcpCredentialUpdates }
1438
1584
  : {}),
1439
- ...(wireInput.connectionAuthorities
1440
- ? { connectionAuthorities: wireInput.connectionAuthorities }
1585
+ ...(wireInput.connectionAccounts
1586
+ ? { connectionAccounts: wireInput.connectionAccounts }
1441
1587
  : {}),
1588
+
1442
1589
  ...(wireInput.personalResourceAttachment
1443
1590
  ? { personalResourceAttachment: wireInput.personalResourceAttachment }
1444
1591
  : {}),
@@ -1463,10 +1610,13 @@ export function useComposer(
1463
1610
  ) {
1464
1611
  return;
1465
1612
  }
1613
+ const acceptedRouting =
1614
+ acceptedResult?.routing ?? promptRoutingFromAcceptedEvent(acceptedEvent);
1466
1615
  const acceptedDestination =
1467
- acceptedResult?.routing === "queued_for_execution"
1616
+ acceptedRouting === "queued_for_execution"
1468
1617
  ? "queue"
1469
- : acceptedResult?.routing === "accepted_for_execution"
1618
+ : acceptedRouting === "accepted_for_execution" ||
1619
+ acceptedRouting === "accepted_for_steering"
1470
1620
  ? "chat"
1471
1621
  : operation.destination;
1472
1622
  if (options.events === undefined && acceptedDestination === "chat") {
@@ -1505,14 +1655,14 @@ export function useComposer(
1505
1655
  return;
1506
1656
  }
1507
1657
  const problem = asError(cause);
1508
- onDeliveryErrorRef.current?.(problem, operation.input, "send");
1658
+ notifyComposerObserver(onDeliveryErrorRef.current, problem, operation.input, "send");
1509
1659
  // Only an actual mutation replay can replace prior uncertainty with a
1510
1660
  // definitive response. Local preparation failures remain retry-only.
1511
1661
  const outcomeUnknown =
1512
1662
  operation.outcomeUnknown && !mutationFailureObserved
1513
1663
  ? true
1514
1664
  : isOutcomeUnknownError(cause);
1515
- markFailed(problem, outcomeUnknown);
1665
+ markFailed(cause, outcomeUnknown);
1516
1666
  } finally {
1517
1667
  optimisticProcessorBusyRef.current = false;
1518
1668
  if (targetKeyRef.current === ownedTargetKey) {
@@ -1524,6 +1674,7 @@ export function useComposer(
1524
1674
  adoptDraftBase,
1525
1675
  client,
1526
1676
  durableDrafts,
1677
+ formatError,
1527
1678
  markOptimisticAccepted,
1528
1679
  loadDraft,
1529
1680
  onSent,
@@ -1692,7 +1843,7 @@ export function useComposer(
1692
1843
  input.reasoningEffort === undefined ||
1693
1844
  input.latencyMode === undefined
1694
1845
  ) {
1695
- 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.");
1696
1847
  }
1697
1848
  const result = await client.submitComposerDraft(workspaceId, sessionId, {
1698
1849
  text: input.text,
@@ -1709,9 +1860,7 @@ export function useComposer(
1709
1860
  ...(input.mcpCredentialUpdates
1710
1861
  ? { mcpCredentialUpdates: input.mcpCredentialUpdates }
1711
1862
  : {}),
1712
- ...(input.connectionAuthorities
1713
- ? { connectionAuthorities: input.connectionAuthorities }
1714
- : {}),
1863
+ ...(input.connectionAccounts ? { connectionAccounts: input.connectionAccounts } : {}),
1715
1864
  ...(input.personalResourceAttachment
1716
1865
  ? { personalResourceAttachment: input.personalResourceAttachment }
1717
1866
  : {}),
@@ -1799,11 +1948,7 @@ export function useComposer(
1799
1948
  return true;
1800
1949
  }
1801
1950
  if (!pending.canRetry) {
1802
- setError(
1803
- new Error(
1804
- "OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
1805
- ),
1806
- );
1951
+ setError(new ComposerReconciliationRequiredError());
1807
1952
  return false;
1808
1953
  }
1809
1954
  try {
@@ -1823,7 +1968,12 @@ export function useComposer(
1823
1968
  } catch (cause) {
1824
1969
  const problem = asError(cause);
1825
1970
  const outcomeUnknown = isOutcomeUnknownError(cause);
1826
- onDeliveryErrorRef.current?.(problem, pending.input, pending.delivery);
1971
+ notifyComposerObserver(
1972
+ onDeliveryErrorRef.current,
1973
+ problem,
1974
+ pending.input,
1975
+ pending.delivery,
1976
+ );
1827
1977
  if (!outcomeUnknown) {
1828
1978
  clearPending();
1829
1979
  keepSteering = false;
@@ -1926,7 +2076,12 @@ export function useComposer(
1926
2076
  });
1927
2077
  }
1928
2078
  } catch (cause) {
1929
- onDeliveryErrorRef.current?.(asError(cause), operation.input, operation.delivery);
2079
+ notifyComposerObserver(
2080
+ onDeliveryErrorRef.current,
2081
+ asError(cause),
2082
+ operation.input,
2083
+ operation.delivery,
2084
+ );
1930
2085
  if (!isOutcomeUnknownError(cause)) {
1931
2086
  clearPending();
1932
2087
  } else if (delivery === "steer") {
@@ -2097,6 +2252,7 @@ export function useComposer(
2097
2252
  if (operation.outcomeUnknown) {
2098
2253
  return { ...operation, state: "sending", error: undefined };
2099
2254
  }
2255
+ if (operation.retryable === false) return operation;
2100
2256
  const nextClientEventId = generateClientEventId();
2101
2257
  const currentPersonalResourceAttachment = resolveSendExtras(
2102
2258
  sendExtrasRef.current,
@@ -2126,6 +2282,7 @@ export function useComposer(
2126
2282
  occurredAt: new Date().toISOString(),
2127
2283
  state: "sending",
2128
2284
  error: undefined,
2285
+ retryable: undefined,
2129
2286
  outcomeUnknown: false,
2130
2287
  canRetry: true,
2131
2288
  };
@@ -2196,7 +2353,7 @@ export function useComposer(
2196
2353
  targetKeyRef.current === ownedTargetKey &&
2197
2354
  targetGeneration.current === ownedGeneration
2198
2355
  ) {
2199
- setError(cause instanceof Error ? cause : new Error(String(cause)));
2356
+ setError(normalizeError(cause));
2200
2357
  }
2201
2358
  } finally {
2202
2359
  if (
@@ -2240,7 +2397,7 @@ export function useComposer(
2240
2397
  targetKeyRef.current === ownedTargetKey &&
2241
2398
  targetGeneration.current === ownedGeneration
2242
2399
  ) {
2243
- setError(cause instanceof Error ? cause : new Error(String(cause)));
2400
+ setError(normalizeError(cause));
2244
2401
  }
2245
2402
  } finally {
2246
2403
  if (
@@ -2267,9 +2424,7 @@ export function useComposer(
2267
2424
  (blocker) => blocker.kind === "workspace",
2268
2425
  );
2269
2426
  if (!client.setWorkspaceInferenceState) {
2270
- throw new Error(
2271
- "@opengeni/react: workspace-scoped resume requires setWorkspaceInferenceState.",
2272
- );
2427
+ throw new ComposerWorkspaceControlUnavailableError();
2273
2428
  }
2274
2429
  const clientEventId = generateClientEventId();
2275
2430
  await replayOutcomeUnknown(() =>
@@ -2399,7 +2554,7 @@ export function useComposer(
2399
2554
  const addAnnotation = useCallback(
2400
2555
  (annotation: DraftTimelineAnnotation) => {
2401
2556
  if (annotationsRef.current.length >= 12) {
2402
- 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."));
2403
2558
  return;
2404
2559
  }
2405
2560
  const next = [...annotationsRef.current, annotation];
@@ -2430,6 +2585,20 @@ export function useComposer(
2430
2585
  setAnnotationReviewTargetId(null);
2431
2586
  }, []);
2432
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
+
2433
2602
  const updatePolicy = useCallback(
2434
2603
  (next: ComposerPolicy): void => {
2435
2604
  if (targetKeyRef.current !== targetKey) return;
@@ -2518,6 +2687,42 @@ export function useComposer(
2518
2687
  );
2519
2688
  }, []);
2520
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
+
2521
2726
  const resolveDraftConflict = useCallback(
2522
2727
  async (choice: "keep_mine" | "use_remote"): Promise<void> => {
2523
2728
  const ownedTargetKey = targetKey;
@@ -2595,6 +2800,7 @@ export function useComposer(
2595
2800
  const clearError = useCallback(() => {
2596
2801
  if (targetKeyRef.current !== targetKey) return;
2597
2802
  setError(null);
2803
+ setDraftReadError(null);
2598
2804
  setDraftConflict(null);
2599
2805
  }, [targetKey]);
2600
2806
  // `valueRef` is the synchronous composer authority. React state exists to
@@ -2615,10 +2821,15 @@ export function useComposer(
2615
2821
  removeAnnotation,
2616
2822
  annotationReviewTargetId: identityMatches ? annotationReviewTargetId : null,
2617
2823
  clearAnnotationReviewTarget,
2824
+ requestAnnotationReview,
2618
2825
  hasDraftContent,
2619
2826
  send,
2620
2827
  optimisticMessages: visibleOptimisticMessages,
2621
2828
  retryOptimisticMessage,
2829
+ restoreOptimisticMessage:
2830
+ !draftLoading && !pendingOperationRef.current && !hasDraftContent()
2831
+ ? restoreOptimisticMessage
2832
+ : undefined,
2622
2833
  removeOptimisticMessage,
2623
2834
  steer,
2624
2835
  steering: visibleSteering,
@@ -2661,7 +2872,7 @@ export function useComposer(
2661
2872
  resolveDraftConflict,
2662
2873
  restoredResources: identityMatches ? restoredResources : [],
2663
2874
  removeRestoredResource,
2664
- error: identityMatches ? error : null,
2875
+ error: identityMatches ? (error ?? draftReadError) : null,
2665
2876
  clearError,
2666
2877
  };
2667
2878
  }
@@ -2740,7 +2951,25 @@ async function replayOutcomeUnknown<T>(command: () => Promise<T>): Promise<T> {
2740
2951
  }
2741
2952
 
2742
2953
  function asError(cause: unknown): Error {
2743
- return cause instanceof Error ? cause : new Error(String(cause));
2954
+ return normalizeError(cause);
2955
+ }
2956
+
2957
+ function promptRoutingFromAcceptedEvent(
2958
+ event: SessionEvent | null,
2959
+ ): "accepted_for_execution" | "queued_for_execution" | "accepted_for_steering" | null {
2960
+ if (
2961
+ typeof event?.payload !== "object" ||
2962
+ event.payload === null ||
2963
+ Array.isArray(event.payload)
2964
+ ) {
2965
+ return null;
2966
+ }
2967
+ const routing = (event.payload as Record<string, unknown>).routing;
2968
+ return routing === "accepted_for_execution" ||
2969
+ routing === "queued_for_execution" ||
2970
+ routing === "accepted_for_steering"
2971
+ ? routing
2972
+ : null;
2744
2973
  }
2745
2974
 
2746
2975
  function isDraftConflictError(error: Error): boolean {