@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
@@ -17,6 +17,11 @@ import {
17
17
  STREAM_KIND_PTY,
18
18
  STREAM_ROLE_CLIENT,
19
19
  } from "../lib/relay-wire";
20
+ import {
21
+ TERMINAL_INPUT_READY_PREFERENCE,
22
+ TERMINAL_INPUT_READY_PROTOCOL,
23
+ terminalInputReadyDecoder,
24
+ } from "../lib/terminal-input-readiness";
20
25
 
21
26
  /** The ttyd connection lifecycle as surfaced to the component. */
22
27
  export type TerminalStreamStatus = "connecting" | "open" | "closed" | "error";
@@ -25,8 +30,12 @@ export type UseTerminalStreamOptions = {
25
30
  /** The Terminal cell of the negotiated capabilities (`capabilities.Terminal`).
26
31
  * The stream connects ONLY when `transport === "pty-ws"` and `url` is set; on a
27
32
  * cold box (`transport === "sse-events"` / no url) it stays idle and the caller
28
- * falls back to the Channel-A read-only firehose. */
29
- capability: Pick<TerminalCapability, "transport" | "url" | "token" | "expiresAt"> | null;
33
+ * falls back to the Channel-A firehose. Explicit PTY-capable cold cells may
34
+ * buffer input, but cannot connect or flush until the grant arrives. */
35
+ capability:
36
+ | (Pick<TerminalCapability, "transport" | "url" | "token" | "expiresAt"> &
37
+ Partial<Pick<TerminalCapability, "ptyCapable" | "reason">>)
38
+ | null;
30
39
  /** Called for each OUTPUT payload from ttyd (write verbatim into xterm). */
31
40
  onOutput?: ((data: string) => void) | undefined;
32
41
  /** Called when ttyd sends a SET_WINDOW_TITLE frame. */
@@ -40,11 +49,16 @@ export type UseTerminalStreamOptions = {
40
49
  };
41
50
 
42
51
  export type UseTerminalStreamResult = {
43
- /** True once the ttyd socket is open (and the auth frame has been sent). */
52
+ /** True when input can be sent. Legacy ttyd does not guarantee shell readiness. */
44
53
  connected: boolean;
45
54
  status: TerminalStreamStatus;
55
+ /** `waiting` requires explicit shell readiness; `legacy` has no such guarantee. */
56
+ inputReadiness: "pending" | "waiting" | "ready" | "legacy";
57
+ /** Deliberate escape for startup prompts/no-Readline shells. Clears queued
58
+ * typing without executing it, then enables unguaranteed manual input. */
59
+ useLegacyInput: () => void;
46
60
  /** Pipe a keystroke/paste to PTY stdin. Input during CONNECTING is bounded and
47
- * replayed only after ttyd authentication succeeds. */
61
+ * replayed after negotiated readiness (or legacy ttyd preferences). */
48
62
  write: (data: string) => void;
49
63
  /** Tell ttyd the PTY window changed size (on xterm fit/resize). */
50
64
  resize: (cols: number, rows: number) => void;
@@ -52,8 +66,8 @@ export type UseTerminalStreamResult = {
52
66
  disconnect: () => void;
53
67
  };
54
68
 
55
- // Keystrokes entered during the websocket handshake are held until ttyd has
56
- // accepted its auth/resize frames. Bound the queue by UTF-16 code units (a hard
69
+ // Keystrokes entered during startup are held until the negotiated input boundary.
70
+ // Old ttyd servers retain explicitly legacy semantics. Bound by UTF-16 code units (a hard
57
71
  // <=128 KiB string payload in current JS engines) so a paste cannot turn a slow
58
72
  // handshake into unbounded renderer memory. Overflow rejects the whole pending
59
73
  // input rather than ever executing a truncated shell command.
@@ -161,7 +175,7 @@ function closeSocket(socket: WebSocket | null): void {
161
175
  * - first frame: `JSON.stringify({ AuthToken: "" })` (+ optional columns/rows).
162
176
  * - client→server: INPUT = "0"+data ; RESIZE = "1"+JSON({columns,rows}).
163
177
  * - server→client: "0" = OUTPUT (→ xterm) ; "1" = SET_WINDOW_TITLE ;
164
- * "2" = SET_PREFERENCES (ignored). Binary frames are decoded the same way.
178
+ * "2" = SET_PREFERENCES (readiness negotiation). Binary frames decode identically.
165
179
  *
166
180
  * On a `url`/`token` rotation (a box rollover folds a fresh address into the cell)
167
181
  * the effect re-runs: the old socket closes and a fresh one connects — a brief
@@ -171,11 +185,15 @@ function closeSocket(socket: WebSocket | null): void {
171
185
  export function useTerminalStream(options: UseTerminalStreamOptions): UseTerminalStreamResult {
172
186
  const { capability, onOutput, onTitle, onReconnectNeeded, initialCols, initialRows } = options;
173
187
  const [status, setStatus] = useState<TerminalStreamStatus>("closed");
188
+ const [inputReadiness, setInputReadiness] =
189
+ useState<UseTerminalStreamResult["inputReadiness"]>("pending");
174
190
  const [reconnectGeneration, setReconnectGeneration] = useState(0);
175
191
  const wsRef = useRef<WebSocket | null>(null);
176
192
  const pendingInputRef = useRef("");
177
193
  const socketFailedRef = useRef(false);
178
194
  const socketAuthenticatedRef = useRef(false);
195
+ const legacyInputRef = useRef<(() => void) | null>(null);
196
+ const manuallyDisconnectedRef = useRef(false);
179
197
  const relayChannelRef = useRef<RelayChannel | null>(null);
180
198
  const relayIdentityRef = useRef<string | null>(null);
181
199
  const relayInputSequenceRef = useRef(0n);
@@ -205,8 +223,18 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
205
223
  const expiresAt = capability?.expiresAt ?? null;
206
224
  const transportRef = useRef(transport);
207
225
  transportRef.current = transport;
226
+ // A cold, explicitly PTY-capable cell may collect input before its viewer
227
+ // grant arrives. This is not a socket credential or a readiness assertion.
228
+ const acquiringPty =
229
+ transport === "sse-events" &&
230
+ capability?.ptyCapable === true &&
231
+ (capability.reason === "lease_cold" || capability.reason === "not_provisioned");
232
+ const acquiringPtyRef = useRef(acquiringPty);
233
+ acquiringPtyRef.current = acquiringPty;
208
234
 
209
235
  useEffect(() => {
236
+ manuallyDisconnectedRef.current = false;
237
+ setInputReadiness("pending");
210
238
  // SSR / no WebSocket / not a live pty-ws cell: stay closed; the caller falls
211
239
  // back to the Channel-A read-only firehose.
212
240
  if (typeof window === "undefined" || typeof WebSocket === "undefined") return;
@@ -222,6 +250,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
222
250
  reconnectAttemptRef.current = 0;
223
251
  credentialIdentityRef.current = null;
224
252
  refreshRequestedRef.current = false;
253
+ socketFailedRef.current = false;
225
254
  setStatus("closed");
226
255
  return;
227
256
  }
@@ -258,6 +287,11 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
258
287
  let reconnectTimer: ReturnType<typeof setTimeout> | null = null;
259
288
  let socket: WebSocket;
260
289
  let relayChannel: RelayChannel | null = null;
290
+ let authSent = false;
291
+ let preferencesReceived = false;
292
+ let readinessNegotiated = false;
293
+ let sentSize: { cols: number; rows: number } | null = null;
294
+ const decodeReadyOutput = terminalInputReadyDecoder();
261
295
  const relayOutputDecoder = new TextDecoder();
262
296
  setStatus("connecting");
263
297
  try {
@@ -311,12 +345,47 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
311
345
  setStatus("connecting");
312
346
  reconnectTimer = setTimeout(() => {
313
347
  reconnectTimer = null;
314
- if (!disposed) setReconnectGeneration((generation) => generation + 1);
348
+ if (!disposed && !manuallyDisconnectedRef.current)
349
+ setReconnectGeneration((generation) => generation + 1);
315
350
  }, delay);
316
351
  };
317
352
 
353
+ const openTtydInput = (mode: "ready" | "legacy", discardPending = false) => {
354
+ if (
355
+ disposed ||
356
+ wsRef.current !== socket ||
357
+ socket.readyState !== WebSocket.OPEN ||
358
+ !authSent ||
359
+ socketFailedRef.current
360
+ )
361
+ return;
362
+ if (discardPending) pendingInputRef.current = "";
363
+ try {
364
+ // A fit/resize may have happened while shell readiness was pending.
365
+ if (sentSize?.cols !== sizeRef.current.cols || sentSize.rows !== sizeRef.current.rows) {
366
+ socket.send(ttydResizeFrame(sizeRef.current.cols, sizeRef.current.rows));
367
+ sentSize = { ...sizeRef.current };
368
+ }
369
+ if (pendingInputRef.current.length > 0) {
370
+ socket.send(ttydInputFrame(pendingInputRef.current));
371
+ pendingInputRef.current = "";
372
+ }
373
+ socketAuthenticatedRef.current = true;
374
+ legacyInputRef.current = null;
375
+ setInputReadiness(mode);
376
+ setStatus("open");
377
+ reconnectAttemptRef.current = 0;
378
+ refreshRequestedRef.current = false;
379
+ } catch {
380
+ socketAuthenticatedRef.current = false;
381
+ setInputReadiness("pending");
382
+ setStatus("connecting");
383
+ closeSocket(socket);
384
+ }
385
+ };
386
+
318
387
  socket.onopen = () => {
319
- if (disposed) return;
388
+ if (disposed || wsRef.current !== socket || socketFailedRef.current) return;
320
389
  if (relay && relayChannel) {
321
390
  try {
322
391
  socket.send(
@@ -343,26 +412,18 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
343
412
  try {
344
413
  socket.send(ttydAuthFrame({ columns: sizeRef.current.cols, rows: sizeRef.current.rows }));
345
414
  socket.send(ttydResizeFrame(sizeRef.current.cols, sizeRef.current.rows));
346
- if (pendingInputRef.current.length > 0) {
347
- // One websocket frame makes the pre-open queue all-or-nothing from this
348
- // client's perspective; never execute a prefix of a buffered command.
349
- socket.send(ttydInputFrame(pendingInputRef.current));
350
- pendingInputRef.current = "";
351
- }
352
- socketAuthenticatedRef.current = true;
415
+ sentSize = { ...sizeRef.current };
416
+ authSent = true;
353
417
  } catch {
354
418
  socketFailedRef.current = false;
355
419
  setStatus("connecting");
356
420
  closeSocket(socket);
357
421
  return;
358
422
  }
359
- setStatus("open");
360
- reconnectAttemptRef.current = 0;
361
- refreshRequestedRef.current = false;
362
423
  };
363
424
 
364
425
  socket.onmessage = (ev: MessageEvent) => {
365
- if (disposed) return;
426
+ if (disposed || wsRef.current !== socket || socketFailedRef.current) return;
366
427
  if (relay) {
367
428
  if (!(ev.data instanceof ArrayBuffer) || !relayChannel) return;
368
429
  const bytes = new Uint8Array(ev.data);
@@ -386,6 +447,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
386
447
  pendingInputRef.current = "";
387
448
  }
388
449
  setStatus("open");
450
+ setInputReadiness("ready");
389
451
  } catch {
390
452
  socketFailedRef.current = true;
391
453
  setStatus("error");
@@ -410,19 +472,49 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
410
472
  const { command, payload } = decodeFrame(ev.data as string | ArrayBuffer);
411
473
  switch (command) {
412
474
  case TtydServerCommand.OUTPUT:
413
- onOutputRef.current?.(payload);
475
+ if (readinessNegotiated) {
476
+ const decoded = decodeReadyOutput(payload);
477
+ if (decoded.output) onOutputRef.current?.(decoded.output);
478
+ if (decoded.ready && !socketAuthenticatedRef.current) openTtydInput("ready");
479
+ } else {
480
+ onOutputRef.current?.(payload);
481
+ }
414
482
  break;
415
483
  case TtydServerCommand.SET_WINDOW_TITLE:
416
484
  onTitleRef.current?.(payload);
417
485
  break;
418
- // SET_PREFERENCES ("2") and anything else: ignored.
486
+ case TtydServerCommand.SET_PREFERENCES:
487
+ if (!authSent || preferencesReceived || socketAuthenticatedRef.current) break;
488
+ preferencesReceived = true;
489
+ try {
490
+ const preferences = JSON.parse(payload) as Record<string, unknown>;
491
+ if (!preferences || typeof preferences !== "object" || Array.isArray(preferences)) {
492
+ throw new Error("invalid ttyd preferences");
493
+ }
494
+ const protocol = preferences[TERMINAL_INPUT_READY_PREFERENCE];
495
+ if (protocol === undefined) {
496
+ // Old images/running daemons do not acquire a guarantee merely
497
+ // because this client is new. Preserve their legacy input path.
498
+ openTtydInput("legacy");
499
+ } else {
500
+ readinessNegotiated = protocol === TERMINAL_INPUT_READY_PROTOCOL;
501
+ setInputReadiness("waiting");
502
+ legacyInputRef.current = () => openTtydInput("legacy", true);
503
+ }
504
+ } catch {
505
+ // Invalid negotiation is not readiness. Manual input remains a
506
+ // deliberate escape, never an automatic fallback or timer flush.
507
+ setInputReadiness("waiting");
508
+ legacyInputRef.current = () => openTtydInput("legacy", true);
509
+ }
510
+ break;
419
511
  default:
420
512
  break;
421
513
  }
422
514
  };
423
515
 
424
516
  socket.onerror = () => {
425
- if (!disposed) {
517
+ if (!disposed && wsRef.current === socket && !intentionalCloseRef.current.has(socket)) {
426
518
  // A network/relay outage is retryable with the same credential and PTY.
427
519
  // Keep accepting bounded input while the transport comes back.
428
520
  socketFailedRef.current = false;
@@ -431,8 +523,11 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
431
523
  }
432
524
  };
433
525
  socket.onclose = () => {
526
+ if (disposed || wsRef.current !== socket) return;
434
527
  if (wsRef.current === socket) wsRef.current = null;
435
528
  socketAuthenticatedRef.current = false;
529
+ legacyInputRef.current = null;
530
+ setInputReadiness("pending");
436
531
  if (!disposed) {
437
532
  if (socketFailedRef.current) setStatus("error");
438
533
  else scheduleTransportReconnect();
@@ -443,6 +538,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
443
538
  disposed = true;
444
539
  wsRef.current = null;
445
540
  socketAuthenticatedRef.current = false;
541
+ legacyInputRef.current = null;
446
542
  relayChannelRef.current = null;
447
543
  if (reconnectTimer !== null) clearTimeout(reconnectTimer);
448
544
  // Drop handlers so an in-flight close/error doesn't mutate state post-unmount.
@@ -454,7 +550,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
454
550
  };
455
551
  // A url/token change (rotation) re-runs this effect → close old, open new.
456
552
  // eslint-disable-next-line react-hooks/exhaustive-deps
457
- }, [transport, url, token, expiresAt, reconnectGeneration]);
553
+ }, [transport, url, token, expiresAt, acquiringPty, reconnectGeneration]);
458
554
 
459
555
  const write = useCallback((data: string) => {
460
556
  const currentTransport = transportRef.current;
@@ -468,12 +564,30 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
468
564
  ws.send(ttydInputFrame(data));
469
565
  }
470
566
  } catch {
567
+ // A synchronous ttyd send failure did not enqueue these bytes. Retain
568
+ // them for the next explicit readiness boundary, never replay a send
569
+ // which returned successfully. Relay sequencing keeps its own contract.
570
+ if (currentTransport === "pty-ws") {
571
+ const nextSize = pendingInputRef.current.length + data.length;
572
+ if (nextSize > MAX_PENDING_TERMINAL_INPUT_CODE_UNITS) {
573
+ pendingInputRef.current = "";
574
+ socketFailedRef.current = true;
575
+ socketAuthenticatedRef.current = false;
576
+ setStatus("error");
577
+ closeSocket(ws);
578
+ return;
579
+ }
580
+ pendingInputRef.current += data;
581
+ }
582
+ socketAuthenticatedRef.current = false;
471
583
  socketFailedRef.current = false;
472
584
  setStatus("connecting");
473
585
  closeSocket(ws);
474
586
  }
475
587
  } else if (
476
- (currentTransport === "pty-ws" || currentTransport === "relay-pty") &&
588
+ (currentTransport === "pty-ws" ||
589
+ currentTransport === "relay-pty" ||
590
+ acquiringPtyRef.current) &&
477
591
  !socketFailedRef.current
478
592
  ) {
479
593
  const nextSize = pendingInputRef.current.length + data.length;
@@ -502,18 +616,30 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
502
616
  }
503
617
  }, []);
504
618
  const disconnect = useCallback(() => {
619
+ manuallyDisconnectedRef.current = true;
505
620
  const ws = wsRef.current;
506
621
  wsRef.current = null;
507
622
  pendingInputRef.current = "";
508
623
  socketFailedRef.current = false;
509
624
  socketAuthenticatedRef.current = false;
625
+ legacyInputRef.current = null;
510
626
  relayChannelRef.current = null;
511
627
  setStatus("closed");
628
+ setInputReadiness("pending");
512
629
  if (ws) intentionalCloseRef.current.add(ws);
513
630
  closeSocket(ws);
514
631
  }, []);
632
+ const useLegacyInput = useCallback(() => legacyInputRef.current?.(), []);
515
633
 
516
634
  return useMemo<UseTerminalStreamResult>(() => {
517
- return { connected: status === "open", status, write, resize, disconnect };
518
- }, [status, write, resize, disconnect]);
635
+ return {
636
+ connected: status === "open",
637
+ status,
638
+ inputReadiness,
639
+ useLegacyInput,
640
+ write,
641
+ resize,
642
+ disconnect,
643
+ };
644
+ }, [status, inputReadiness, useLegacyInput, write, resize, disconnect]);
519
645
  }
@@ -611,6 +611,12 @@ function classifyStartError(error: unknown): TranscriptionErrorCode {
611
611
 
612
612
  export function normalizeTranscriptionErrorCode(code: unknown): TranscriptionErrorCode {
613
613
  switch (code) {
614
+ case "insufficient_credits":
615
+ case "allowance_exhausted":
616
+ case "monthly_model_cost_limit":
617
+ case "unavailable":
618
+ case "too_large":
619
+ case "invalid_audio":
614
620
  case "permission_denied":
615
621
  case "not_supported":
616
622
  case "network":
@@ -10,6 +10,7 @@ import type {
10
10
  } from "@opengeni/sdk";
11
11
  import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
12
12
  import { useEmbeddedSession, type EmbeddedSessionClientOverride } from "../session-context";
13
+ import { normalizeError } from "../lib/error-message";
13
14
  import {
14
15
  useDebouncedCallback,
15
16
  usePageLiveActivity,
@@ -463,7 +464,7 @@ function operationKey(): string {
463
464
  }
464
465
 
465
466
  function asError(cause: unknown): Error {
466
- return cause instanceof Error ? cause : new Error(String(cause));
467
+ return normalizeError(cause);
467
468
  }
468
469
 
469
470
  function isOutcomeUnknownError(cause: unknown): boolean {
@@ -0,0 +1,100 @@
1
+ import type { OpenGeniClient } from "@opengeni/sdk";
2
+ import {
3
+ getMyUsage,
4
+ type UsageAllowancePeriod,
5
+ type WorkspaceUsageResponse,
6
+ } from "@opengeni/sdk/usage-allowances";
7
+ import { useCallback, useContext, useEffect, useMemo, useRef } from "react";
8
+
9
+ import { OpenGeniContext } from "../session-context";
10
+ import { summarizeUsage, type UsageSummary } from "../usage/summary";
11
+ import { usePolledValue } from "./internal";
12
+
13
+ /**
14
+ * Anything that can read the signed-in member's own usage: the root SDK client
15
+ * pointed at your session proxy (`getMyUsage`), or any client exposing
16
+ * `requestJson` (for example the narrower browser client).
17
+ */
18
+ export type UsageClientLike =
19
+ | Pick<OpenGeniClient, "getMyUsage">
20
+ | Pick<OpenGeniClient, "requestJson">;
21
+
22
+ export type UseUsageOptions = {
23
+ /** Defaults to the `<OpenGeniProvider>` client. */
24
+ client?: UsageClientLike | undefined;
25
+ /** Defaults to the `<OpenGeniProvider>` workspace. */
26
+ workspaceId?: string | undefined;
27
+ /** `"current"` (default) or a `YYYY-MM` allowance period. */
28
+ period?: UsageAllowancePeriod | undefined;
29
+ /** Re-read on an interval. Off by default; usage changes only when work settles. */
30
+ pollIntervalMs?: number | undefined;
31
+ enabled?: boolean | undefined;
32
+ /**
33
+ * Re-read whenever this value changes, keeping the current reading while it
34
+ * loads. Pass something that changes when work settles (a turn count, the
35
+ * session status) so the meter follows real usage without polling.
36
+ */
37
+ refreshKey?: unknown;
38
+ };
39
+
40
+ export type UseUsageResult = {
41
+ /** The raw `/usage/me` response: the workspace pool and your own row. */
42
+ usage: WorkspaceUsageResponse | null;
43
+ /** What to tell this member; null until loaded. */
44
+ summary: UsageSummary | null;
45
+ loading: boolean;
46
+ error: Error | null;
47
+ refresh: () => Promise<void>;
48
+ };
49
+
50
+ function readOwnUsage(
51
+ client: UsageClientLike,
52
+ workspaceId: string,
53
+ period: UsageAllowancePeriod | undefined,
54
+ signal: AbortSignal | undefined,
55
+ ): Promise<WorkspaceUsageResponse> {
56
+ const query = period === undefined ? {} : { period };
57
+ const options = signal ? { signal } : {};
58
+ if ("getMyUsage" in client && typeof client.getMyUsage === "function") {
59
+ return client.getMyUsage(workspaceId, query, options);
60
+ }
61
+ if ("requestJson" in client && typeof client.requestJson === "function") {
62
+ return getMyUsage(client, workspaceId, query, options);
63
+ }
64
+ throw new Error("@opengeni/react: the usage client needs getMyUsage or requestJson.");
65
+ }
66
+
67
+ /**
68
+ * The signed-in member's own usage in one workspace, read through `/usage/me`
69
+ * (the session proxy serves exactly this route). Never reads another member.
70
+ */
71
+ export function useUsage(options: UseUsageOptions = {}): UseUsageResult {
72
+ const context = useContext(OpenGeniContext);
73
+ const client = (options.client ?? context?.client) as UsageClientLike | undefined;
74
+ const workspaceId = options.workspaceId ?? context?.workspaceId;
75
+ if (!client || !workspaceId) {
76
+ throw new Error(
77
+ "@opengeni/react: useUsage needs a client and workspace. Wrap the tree in <OpenGeniProvider> or pass { client, workspaceId }.",
78
+ );
79
+ }
80
+ const period = options.period;
81
+ const load = useCallback(
82
+ (signal?: AbortSignal) => readOwnUsage(client, workspaceId, period, signal),
83
+ [client, workspaceId, period],
84
+ );
85
+ const state = usePolledValue(load, {
86
+ pollIntervalMs: options.pollIntervalMs,
87
+ enabled: options.enabled,
88
+ });
89
+ const refreshKey = options.refreshKey;
90
+ const seenKey = useRef(refreshKey);
91
+ const refresh = state.refresh;
92
+ useEffect(() => {
93
+ if (Object.is(seenKey.current, refreshKey)) return;
94
+ seenKey.current = refreshKey;
95
+ void refresh();
96
+ }, [refreshKey, refresh]);
97
+ const usage = state.data;
98
+ const summary = useMemo(() => (usage ? summarizeUsage(usage) : null), [usage]);
99
+ return { usage, summary, loading: state.loading, error: state.error, refresh };
100
+ }
@@ -0,0 +1,153 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import { useOpenGeni, type ClientOverride } from "../provider";
3
+ import type {
4
+ ListVaultItemsQuery,
5
+ SessionSecretsView,
6
+ VaultFieldVersionMeta,
7
+ VaultItem,
8
+ VaultItemSummary,
9
+ VaultSummary,
10
+ } from "@opengeni/sdk";
11
+ import { asVaultClient, vaultsApi, type VaultsApi } from "@opengeni/sdk";
12
+ import { usePolledValue } from "./internal";
13
+
14
+ export type UseVaultQueryOptions = ClientOverride & {
15
+ pollIntervalMs?: number | undefined;
16
+ enabled?: boolean | undefined;
17
+ };
18
+
19
+ type QueryResult<T> = {
20
+ loading: boolean;
21
+ error: Error | null;
22
+ refresh: () => Promise<void>;
23
+ } & T;
24
+
25
+ /**
26
+ * The workspace's vault REST surface for the current client. Mutations are
27
+ * plain promises: callers refresh the affected query afterwards. Plaintext
28
+ * (`revealField`) is returned to the caller only and never stored here.
29
+ */
30
+ export function useVaultsApi(options: ClientOverride = {}): VaultsApi {
31
+ const { client, workspaceId } = useOpenGeni(options);
32
+ return useMemo(() => vaultsApi(asVaultClient(client), workspaceId), [client, workspaceId]);
33
+ }
34
+
35
+ /** Vaults the caller can see in this workspace (metadata only). */
36
+ export function useVaults(
37
+ options: UseVaultQueryOptions = {},
38
+ ): QueryResult<{ vaults: VaultSummary[] | null; api: VaultsApi }> {
39
+ const api = useVaultsApi(options);
40
+ const load = useCallback((signal?: AbortSignal) => api.listVaults(signal), [api]);
41
+ const { data, loading, error, refresh } = usePolledValue(load, {
42
+ pollIntervalMs: options.pollIntervalMs,
43
+ enabled: options.enabled,
44
+ });
45
+ return { vaults: data, loading, error, refresh, api };
46
+ }
47
+
48
+ /** One vault's metadata. */
49
+ export function useVault(
50
+ vaultId: string,
51
+ options: UseVaultQueryOptions = {},
52
+ ): QueryResult<{ vault: VaultSummary | null; api: VaultsApi }> {
53
+ const api = useVaultsApi(options);
54
+ const load = useCallback((signal?: AbortSignal) => api.getVault(vaultId, signal), [api, vaultId]);
55
+ const { data, loading, error, refresh } = usePolledValue(load, {
56
+ pollIntervalMs: options.pollIntervalMs,
57
+ enabled: options.enabled,
58
+ });
59
+ return { vault: data, loading, error, refresh, api };
60
+ }
61
+
62
+ /** The contract's maximum page size (`ListVaultItemsQuery.limit`). */
63
+ export const VAULT_ITEM_PAGE_LIMIT = 200;
64
+
65
+ /**
66
+ * A vault's items (metadata only). Follows cursors so a dense vault renders
67
+ * as one list; `q`/`type` filter server-side.
68
+ */
69
+ export function useVaultItems(
70
+ vaultId: string,
71
+ query: ListVaultItemsQuery = {},
72
+ options: UseVaultQueryOptions = {},
73
+ ): QueryResult<{ items: VaultItemSummary[] | null; api: VaultsApi }> {
74
+ const api = useVaultsApi(options);
75
+ const { q, type, includeArchived } = query;
76
+ const load = useCallback(
77
+ async (signal?: AbortSignal) => {
78
+ const items: VaultItemSummary[] = [];
79
+ let cursor: string | undefined;
80
+ for (let page = 0; page < 40; page += 1) {
81
+ const result = await api.listItems(
82
+ vaultId,
83
+ { q, type, includeArchived, cursor, limit: VAULT_ITEM_PAGE_LIMIT },
84
+ signal,
85
+ );
86
+ items.push(...result.items);
87
+ if (!result.nextCursor) break;
88
+ cursor = result.nextCursor;
89
+ }
90
+ return items;
91
+ },
92
+ [api, vaultId, q, type, includeArchived],
93
+ );
94
+ const { data, loading, error, refresh } = usePolledValue(load, {
95
+ pollIntervalMs: options.pollIntervalMs,
96
+ enabled: options.enabled,
97
+ });
98
+ return { items: data, loading, error, refresh, api };
99
+ }
100
+
101
+ /** One item with its fields' metadata (concealed values are never included). */
102
+ export function useVaultItem(
103
+ vaultId: string,
104
+ itemId: string,
105
+ options: UseVaultQueryOptions = {},
106
+ ): QueryResult<{ item: VaultItem | null; api: VaultsApi }> {
107
+ const api = useVaultsApi(options);
108
+ const load = useCallback(
109
+ (signal?: AbortSignal) => api.getItem(vaultId, itemId, signal),
110
+ [api, vaultId, itemId],
111
+ );
112
+ const { data, loading, error, refresh } = usePolledValue(load, {
113
+ pollIntervalMs: options.pollIntervalMs,
114
+ enabled: options.enabled,
115
+ });
116
+ return { item: data, loading, error, refresh, api };
117
+ }
118
+
119
+ /** A field's version history (metadata only). */
120
+ export function useVaultFieldVersions(
121
+ vaultId: string,
122
+ itemId: string,
123
+ fieldId: string,
124
+ options: UseVaultQueryOptions = {},
125
+ ): QueryResult<{ versions: VaultFieldVersionMeta[] | null }> {
126
+ const api = useVaultsApi(options);
127
+ const load = useCallback(
128
+ (signal?: AbortSignal) => api.listFieldVersions(vaultId, itemId, fieldId, signal),
129
+ [api, vaultId, itemId, fieldId],
130
+ );
131
+ const { data, loading, error, refresh } = usePolledValue(load, {
132
+ pollIntervalMs: options.pollIntervalMs,
133
+ enabled: options.enabled,
134
+ });
135
+ return { versions: data, loading, error, refresh };
136
+ }
137
+
138
+ /** A session's secrets view: policy, reachable vaults and its task vault. */
139
+ export function useSessionSecrets(
140
+ sessionId: string | null | undefined,
141
+ options: UseVaultQueryOptions = {},
142
+ ): QueryResult<{ secrets: SessionSecretsView | null; api: VaultsApi }> {
143
+ const api = useVaultsApi(options);
144
+ const load = useCallback(
145
+ (signal?: AbortSignal) => api.getSessionSecrets(sessionId ?? "", signal),
146
+ [api, sessionId],
147
+ );
148
+ const { data, loading, error, refresh } = usePolledValue(load, {
149
+ pollIntervalMs: options.pollIntervalMs,
150
+ enabled: (options.enabled ?? true) && !!sessionId,
151
+ });
152
+ return { secrets: data, loading, error, refresh, api };
153
+ }
@@ -15,7 +15,7 @@ export function useVideoArtifactPlaybackLoader(
15
15
  return useMemo(
16
16
  () => async (artifactId: string, signal?: AbortSignal) => {
17
17
  if (typeof client.createVideoArtifactPlaybackSource !== "function") {
18
- throw new Error("This OpenGeni host does not expose retained-video playback.");
18
+ throw new Error("This Opengeni host does not expose retained-video playback.");
19
19
  }
20
20
  return await client.createVideoArtifactPlaybackSource(
21
21
  workspaceId,