@opengeni/react 3.1.0 → 3.1.3-canary.38890816741001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-BO2IWXVK.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
@@ -11,6 +11,7 @@ import {
11
11
  } from "../voice-recording-store";
12
12
  import {
13
13
  acquireDefaultVoiceRecordingOwnerLease,
14
+ liveVoiceRecordingOwnerIds,
14
15
  type VoiceRecordingOwnerLease,
15
16
  } from "../voice-recording-owner";
16
17
  import { appendFinalTranscript } from "./use-transcription";
@@ -65,6 +66,10 @@ export type UseVoiceInputResult = {
65
66
  stream: MediaStream | null;
66
67
  recordingId: string | null;
67
68
  durationSeconds: number;
69
+ /** Wall-clock start of the current capture (epoch ms), or null when not recording. */
70
+ recordingStartedAt: number | null;
71
+ /** Capture stops and transcribes automatically after this many seconds. */
72
+ maxRecordingSeconds: number | null;
68
73
  locallySaved: boolean;
69
74
  hasRecoverableRecording: boolean;
70
75
  savedTranscript: string | null;
@@ -75,7 +80,10 @@ export type UseVoiceInputResult = {
75
80
  retry: () => void;
76
81
  /** Explicitly insert a durably saved transcript whose prior handoff may be uncertain. */
77
82
  insertSavedTranscript: () => Promise<void>;
78
- /** Cancel active work. A stopped/transcribing recording remains recoverable. */
83
+ /**
84
+ * Cancel active work without losing speech: a recording longer than a few
85
+ * seconds and any stopped/transcribing recording stay locally recoverable.
86
+ */
79
87
  cancel: () => void;
80
88
  /** Intentionally delete the current durable recording. */
81
89
  discard: () => Promise<void>;
@@ -85,6 +93,8 @@ export const VOICE_RECORDING_TIMESLICE_MILLISECONDS = 5_000;
85
93
  export const VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS = 5_000;
86
94
  export const VOICE_RECORDING_OWNER_STALE_MILLISECONDS = 30_000;
87
95
  export const VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS = 600;
96
+ // Cancel deletes only an accidental start; anything longer is kept for the user.
97
+ const VOICE_RECORDING_DISCARD_ON_CANCEL_MAX_MILLISECONDS = 3_000;
88
98
  export const VOICE_RECORDING_RESUMABLE_CLIENT_MAX_DURATION_SECONDS = 8 * 60 * 60;
89
99
  export const VOICE_RECORDING_RECOVERY_STATUS_POLL_MILLISECONDS = 2_000;
90
100
  export const VOICE_RECORDING_RECOVERY_MAX_MUTATION_DELAY_MILLISECONDS = 30_000;
@@ -159,10 +169,14 @@ export function useVoiceInput({
159
169
  const recorderRef = useRef<MediaRecorder | null>(null);
160
170
  const streamRef = useRef<MediaStream | null>(null);
161
171
  const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
172
+ // Cancel/Escape/voice takeover keep a real dictation instead of deleting it.
173
+ const holdOnStopRef = useRef(false);
174
+ const recordingStartedAtRef = useRef(0);
162
175
  const automaticRetryTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
163
176
  const automaticRetryAttemptRef = useRef(0);
164
177
  const ownerHeartbeatTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);
165
178
  const controllerRef = useRef<AbortController | null>(null);
179
+ const disabledRef = useRef(disabled);
166
180
  const valueRef = useRef(value);
167
181
  const storeRef = useRef<VoiceRecordingStore | null>(null);
168
182
  const storePromiseRef = useRef<Promise<VoiceRecordingStore> | null>(null);
@@ -176,6 +190,7 @@ export function useVoiceInput({
176
190
  const statusRef = useRef(status);
177
191
  valueRef.current = value;
178
192
  statusRef.current = status;
193
+ disabledRef.current = disabled;
179
194
  workspaceIdRef.current = workspaceId;
180
195
 
181
196
  const ensureOwnerId = useCallback(async (): Promise<string> => {
@@ -319,15 +334,31 @@ export function useVoiceInput({
319
334
  generation === generationRef.current && workspaceIdRef.current === workspaceId;
320
335
  const [store, ownerId] = await Promise.all([ensureStore(), ensureOwnerId()]);
321
336
  if (!active()) return;
322
- const staleBefore = new Date(
337
+ const heartbeatStaleBefore = new Date(
323
338
  readNow().getTime() - VOICE_RECORDING_OWNER_STALE_MILLISECONDS,
324
339
  ).toISOString();
325
- await store.cleanupHandedOffManifests({ ownerId, staleBefore }).catch(() => undefined);
340
+ await store
341
+ .cleanupHandedOffManifests({ ownerId, staleBefore: heartbeatStaleBefore })
342
+ .catch(() => undefined);
326
343
  if (!active()) return;
327
- const manifests = await store.listRecoverableManifests(workspaceId, {
328
- ownerId,
329
- staleBefore,
330
- });
344
+ // A closed or crashed tab releases its owner lock at once: recover its
345
+ // recording now rather than after the heartbeat window (the user who
346
+ // reopens the app right away must still see their dictation).
347
+ const liveOwners =
348
+ createOwnerIdRef.current === undefined ? await liveVoiceRecordingOwnerIds() : null;
349
+ if (!active()) return;
350
+ const staleBefore = liveOwners ? readNow().toISOString() : heartbeatStaleBefore;
351
+ const manifests = (
352
+ await store.listRecoverableManifests(workspaceId, { ownerId, staleBefore })
353
+ ).filter(
354
+ (manifest) =>
355
+ !liveOwners ||
356
+ !manifest.ownerId ||
357
+ manifest.ownerId === ownerId ||
358
+ !liveOwners.has(manifest.ownerId) ||
359
+ !manifest.ownerHeartbeatAt ||
360
+ manifest.ownerHeartbeatAt <= heartbeatStaleBefore,
361
+ );
331
362
  if (!active()) return;
332
363
  for (const candidate of manifests) {
333
364
  try {
@@ -351,14 +382,20 @@ export function useVoiceInput({
351
382
  }
352
383
  rememberManifest(claimed);
353
384
  beginOwnerHeartbeat(claimed);
385
+ const transcriptReady =
386
+ claimed.finalizationState === "transcript-ready" && claimed.transcriptText !== null;
354
387
  setStatus(
355
- claimed.finalizationState === "transcript-ready" && claimed.transcriptText !== null
388
+ transcriptReady
356
389
  ? "transcript-ready"
357
390
  : claimed.recoveryMode === "automatic"
358
391
  ? "retrying"
359
392
  : "recovered",
360
393
  );
361
- setError(null);
394
+ // An append-mode transcript may already be in the draft (the page
395
+ // closed between appending and recording the handoff).
396
+ setError(
397
+ transcriptReady && candidate.handoffMode === "append" ? "handoff_uncertain" : null,
398
+ );
362
399
  return;
363
400
  } catch (reason) {
364
401
  if (reason instanceof VoiceRecordingOwnedError) continue;
@@ -462,12 +499,21 @@ export function useVoiceInput({
462
499
 
463
500
  automaticRetryAttemptRef.current = 0;
464
501
  if (ready.handoffMode === "explicit") {
502
+ // Never appended: offer an explicit insert, not an "already inserted?" warning.
465
503
  setStatus("transcript-ready");
466
- setError("handoff_uncertain");
504
+ setError(null);
467
505
  focusInput();
468
506
  return;
469
507
  }
470
508
 
509
+ // Session creation can disable the composer while a recording is
510
+ // transcribing. Keep the durable transcript for explicit insertion
511
+ // later; never append text after Send captured its visible snapshot.
512
+ if (disabledRef.current) {
513
+ setStatus("transcript-ready");
514
+ return;
515
+ }
516
+
471
517
  const next = appendFinalTranscript(valueRef.current, response.text);
472
518
  if (next !== valueRef.current) {
473
519
  valueRef.current = next;
@@ -814,6 +860,15 @@ export function useVoiceInput({
814
860
  await preserveForRetry(retained, attemptCaptureLimitError, generation);
815
861
  return;
816
862
  }
863
+ if (holdOnStopRef.current) {
864
+ holdOnStopRef.current = false;
865
+ const retained = await updateManifestBestEffort(stopped, {
866
+ recoveryMode: "manual",
867
+ handoffMode: "explicit",
868
+ });
869
+ await preserveForRetry(retained, null, generation);
870
+ return;
871
+ }
817
872
  await finalizePersistedRecording(generation);
818
873
  });
819
874
  };
@@ -822,6 +877,8 @@ export function useVoiceInput({
822
877
  resolveCaptureSettledRef.current = resolve;
823
878
  });
824
879
  attemptRecordingStartedAt = readNow().getTime();
880
+ recordingStartedAtRef.current = attemptRecordingStartedAt;
881
+ holdOnStopRef.current = false;
825
882
  recorder.start(VOICE_RECORDING_TIMESLICE_MILLISECONDS);
826
883
  recorderStarted = true;
827
884
  setStatus("recording");
@@ -944,6 +1001,7 @@ export function useVoiceInput({
944
1001
  const insertSavedTranscript = useCallback(async (): Promise<void> => {
945
1002
  const manifest = manifestRef.current;
946
1003
  if (
1004
+ disabledRef.current ||
947
1005
  !manifest ||
948
1006
  manifest.workspaceId !== workspaceId ||
949
1007
  manifest.finalizationState !== "transcript-ready" ||
@@ -955,7 +1013,7 @@ export function useVoiceInput({
955
1013
  controllerRef.current?.abort();
956
1014
  controllerRef.current = null;
957
1015
  const store = await ensureStore();
958
- if (generation !== generationRef.current) return;
1016
+ if (generation !== generationRef.current || disabledRef.current) return;
959
1017
  const next = appendFinalTranscript(valueRef.current, manifest.transcriptText);
960
1018
  if (next !== valueRef.current) {
961
1019
  valueRef.current = next;
@@ -1058,7 +1116,27 @@ export function useVoiceInput({
1058
1116
  ]);
1059
1117
 
1060
1118
  const cancel = useCallback(() => {
1061
- if (status === "recording" || status === "requesting-permission") {
1119
+ if (status === "recording") {
1120
+ const recorder = recorderRef.current;
1121
+ const elapsed = readNow().getTime() - recordingStartedAtRef.current;
1122
+ if (
1123
+ recorder &&
1124
+ recorder.state !== "inactive" &&
1125
+ elapsed >= VOICE_RECORDING_DISCARD_ON_CANCEL_MAX_MILLISECONDS
1126
+ ) {
1127
+ // Never delete real speech on Cancel/Escape: stop, keep it locally, and
1128
+ // let the user transcribe or explicitly discard it.
1129
+ if (timerRef.current) clearTimeout(timerRef.current);
1130
+ timerRef.current = null;
1131
+ holdOnStopRef.current = true;
1132
+ setStatus("saving");
1133
+ recorder.stop();
1134
+ return;
1135
+ }
1136
+ void discard();
1137
+ return;
1138
+ }
1139
+ if (status === "requesting-permission") {
1062
1140
  void discard();
1063
1141
  return;
1064
1142
  }
@@ -1082,7 +1160,7 @@ export function useVoiceInput({
1082
1160
  await preserveForRetry(retained, null, generation);
1083
1161
  });
1084
1162
  }
1085
- }, [discard, preserveForRetry, status, updateManifestBestEffort]);
1163
+ }, [discard, preserveForRetry, readNow, status, updateManifestBestEffort]);
1086
1164
 
1087
1165
  useEffect(() => {
1088
1166
  const current = manifestRef.current;
@@ -1145,6 +1223,8 @@ export function useVoiceInput({
1145
1223
  const onKeyDown = (event: KeyboardEvent) => {
1146
1224
  if (
1147
1225
  event.key === "Escape" &&
1226
+ // A dialog, menu, or popover that handled Escape owns it.
1227
+ !event.defaultPrevented &&
1148
1228
  (status === "requesting-permission" ||
1149
1229
  status === "recording" ||
1150
1230
  status === "saving" ||
@@ -1168,6 +1248,19 @@ export function useVoiceInput({
1168
1248
  automaticRetryTimerRef.current = null;
1169
1249
  const manifest = manifestRef.current;
1170
1250
  const ownerReady = ownerIdPromiseRef.current;
1251
+ const knownOwnerId = ownerIdRef.current;
1252
+ const ownerLease = ownerLeaseRef.current;
1253
+ const closingStore = storeRef.current;
1254
+ const ownsClosingStore = ownsStoreRef.current;
1255
+ // Detach synchronously: a remount of this instance (React StrictMode,
1256
+ // keyed re-render) must open a fresh store and owner instead of reusing
1257
+ // the connection this cleanup is about to close.
1258
+ storeRef.current = null;
1259
+ storePromiseRef.current = null;
1260
+ ownerIdRef.current = null;
1261
+ ownerIdPromiseRef.current = null;
1262
+ ownerLeaseRef.current = null;
1263
+ manifestRef.current = null;
1171
1264
  stopOwnerHeartbeat();
1172
1265
  const recorder = recorderRef.current;
1173
1266
  let captureSettled = persistenceQueueRef.current;
@@ -1179,9 +1272,8 @@ export function useVoiceInput({
1179
1272
  void captureSettled
1180
1273
  .catch(() => undefined)
1181
1274
  .then(async () => {
1182
- const ownerId =
1183
- ownerIdRef.current ?? (ownerReady ? await ownerReady.catch(() => null) : null);
1184
- const store = storeRef.current;
1275
+ const ownerId = knownOwnerId ?? (ownerReady ? await ownerReady.catch(() => null) : null);
1276
+ const store = closingStore;
1185
1277
  if (store && manifest && ownerId) {
1186
1278
  const wasProcessing =
1187
1279
  statusRef.current === "saving" ||
@@ -1210,12 +1302,11 @@ export function useVoiceInput({
1210
1302
  )
1211
1303
  .catch(() => undefined);
1212
1304
  }
1213
- if (ownsStoreRef.current) await store?.close();
1305
+ if (ownsClosingStore) await store?.close();
1214
1306
  })
1215
1307
  .catch(() => undefined)
1216
1308
  .finally(() => {
1217
- ownerLeaseRef.current?.release();
1218
- ownerLeaseRef.current = null;
1309
+ ownerLease?.release();
1219
1310
  });
1220
1311
  },
1221
1312
  [clearCaptureRuntime, readNow, stopOwnerHeartbeat],
@@ -1228,6 +1319,17 @@ export function useVoiceInput({
1228
1319
  stream,
1229
1320
  recordingId,
1230
1321
  durationSeconds,
1322
+ recordingStartedAt: status === "recording" ? recordingStartedAtRef.current || null : null,
1323
+ maxRecordingSeconds: capability
1324
+ ? Math.min(
1325
+ capability.resumable && isResumableVoiceInputClient(client)
1326
+ ? capability.resumable.maxDurationSeconds
1327
+ : capability.maxDurationSeconds,
1328
+ capability.resumable && isResumableVoiceInputClient(client)
1329
+ ? VOICE_RECORDING_RESUMABLE_CLIENT_MAX_DURATION_SECONDS
1330
+ : VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
1331
+ )
1332
+ : null,
1231
1333
  locallySaved,
1232
1334
  hasRecoverableRecording: manifestRef.current !== null && status !== "recording",
1233
1335
  savedTranscript:
@@ -1492,6 +1594,12 @@ function errorCode(error: unknown): string {
1492
1594
  }
1493
1595
 
1494
1596
  function isRetryableVoiceInputError(error: unknown): boolean {
1597
+ if (
1598
+ ["insufficient_credits", "allowance_exhausted", "monthly_model_cost_limit"].includes(
1599
+ errorCode(error),
1600
+ )
1601
+ )
1602
+ return false;
1495
1603
  if (error instanceof OpenGeniApiError) {
1496
1604
  return error.retryable && error.status !== 409;
1497
1605
  }
@@ -194,8 +194,9 @@ export function useWorkspaceCapture(
194
194
  return;
195
195
  }
196
196
  setDegradedReason(null);
197
- // Resolve the changed-file count immediately from the response's stats — the
198
- // default-tab signal must not wait on a >2MB manifest-URL hop.
197
+ // Expose metadata while a large signed manifest downloads. Consumers
198
+ // must distinguish this pending count from a resolved capture; zero
199
+ // working-tree files can still have committed-only branch changes.
199
200
  setFileCount(res.stats.fileCount);
200
201
  // Exactly one of manifest / manifestUrl is non-null (M2 contract). The inline
201
202
  // manifest is the <200ms common case; a >2MB manifest is a signed URL hop.
@@ -1,4 +1,5 @@
1
- import { useCallback, useEffect, useRef, useState } from "react";
1
+ import type { FileSystemRouteIdentity } from "@opengeni/sdk";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
3
  import { useOpenGeni, type ClientOverride } from "../provider";
3
4
  import { sandboxAcceptsLiveIo } from "../lib/sandbox-liveness";
4
5
 
@@ -39,6 +40,9 @@ export type UseWorkspaceEditOptions = ClientOverride & {
39
40
  path?: string | null | undefined;
40
41
  /** The capture-served content loaded into the editor — the flush base (C2). */
41
42
  baseContent?: string | null | undefined;
43
+ /** Exact capability identity for the selected filesystem route. A route/root
44
+ * change discards the buffered edit and makes stale flushes fail retryably. */
45
+ route?: FileSystemRouteIdentity | undefined;
42
46
  /** `capabilities.liveness` — "warm" | "draining" | "cold". Drives the flush. */
43
47
  liveness?: string | undefined;
44
48
  /** True while the host is actively warming the box (attach in flight, not warm
@@ -95,9 +99,18 @@ export function useWorkspaceEdit(
95
99
  const { client, workspaceId } = useOpenGeni(options);
96
100
  const path = options.path ?? null;
97
101
  const baseContent = options.baseContent ?? null;
102
+ const routeEpoch = options.route?.epoch;
103
+ const routeRoot = options.route?.root;
104
+ const route = useMemo<FileSystemRouteIdentity | undefined>(
105
+ () =>
106
+ routeEpoch !== undefined && routeRoot !== undefined
107
+ ? { epoch: routeEpoch, root: routeRoot }
108
+ : undefined,
109
+ [routeEpoch, routeRoot],
110
+ );
98
111
  const live = isLive(options.liveness);
99
112
  const offline = options.offline === true;
100
- const identityKey = `${workspaceId}\u0000${sessionId ?? ""}\u0000${path ?? ""}`;
113
+ const identityKey = `${workspaceId}\u0000${sessionId ?? ""}\u0000${path ?? ""}\u0000${routeEpoch ?? ""}\u0000${routeRoot ?? ""}`;
101
114
 
102
115
  const [buffer, setBuffer] = useState<string | null>(null);
103
116
  const [wantsWarm, setWantsWarm] = useState(false);
@@ -178,7 +191,7 @@ export function useWorkspaceEdit(
178
191
  const liveRead = await client.fsRead(
179
192
  workspaceId,
180
193
  sessionId,
181
- { path },
194
+ { path, ...(route ? { route } : {}) },
182
195
  { signal: readAbort.signal },
183
196
  );
184
197
  if (readAbortRef.current === readAbort) readAbortRef.current = null;
@@ -190,7 +203,12 @@ export function useWorkspaceEdit(
190
203
  return;
191
204
  }
192
205
  }
193
- await client.fsWrite(workspaceId, sessionId, { path, content, overwrite: true });
206
+ await client.fsWrite(workspaceId, sessionId, {
207
+ path,
208
+ content,
209
+ overwrite: true,
210
+ ...(route ? { route } : {}),
211
+ });
194
212
  if (identityGenerationRef.current !== identityGeneration) return;
195
213
  setConflict(null);
196
214
  setFlush("flushed");
@@ -207,7 +225,7 @@ export function useWorkspaceEdit(
207
225
  }
208
226
  }
209
227
  },
210
- [client, workspaceId, sessionId, path, baseContent, stateIdentity, identityKey],
228
+ [client, workspaceId, sessionId, path, baseContent, route, stateIdentity, identityKey],
211
229
  );
212
230
 
213
231
  // Auto-flush once the box is warm and a buffer is pending (the wake completed).
@@ -1,16 +1,26 @@
1
- import type { Session } from "@opengeni/sdk";
1
+ import type { Session, SessionListEntry, SessionListTotals } from "@opengeni/sdk";
2
2
  import { useCallback, useEffect, useRef } from "react";
3
3
  import { useOpenGeni, type ClientOverride } from "../provider";
4
4
  import { usePolledValue } from "./internal";
5
5
 
6
6
  export type UseWorkspaceSessionsOptions = ClientOverride & {
7
+ includeTotals?: boolean | undefined;
8
+ needsYouOnly?: boolean | undefined;
9
+ /** Only read-only sessions moved to the idle-session archive. */
10
+ contentArchivedOnly?: boolean | undefined;
11
+ /** Compact list records; detail reads remain full sessions. */
12
+ projection?: "summary" | undefined;
7
13
  limit?: number | undefined;
8
14
  parentSessionId?: string | null | undefined;
9
15
  cursor?: string | undefined;
10
16
  search?: string | undefined;
11
17
  /** Return only the complete personal pinned projection. */
12
18
  pinsOnly?: boolean | undefined;
19
+ /** Skip pinned details when the pinned section is loaded separately. */
20
+ includePinned?: boolean | undefined;
13
21
  archivedOnly?: boolean | undefined;
22
+ sortBy?: "updatedAt" | "createdAt" | "name" | undefined;
23
+ archiveStatus?: "active" | "archived" | "all" | undefined;
14
24
  /** Refresh interval (ms) for fleet/manager views. Off by default. */
15
25
  pollIntervalMs?: number | undefined;
16
26
  enabled?: boolean | undefined;
@@ -18,16 +28,17 @@ export type UseWorkspaceSessionsOptions = ClientOverride & {
18
28
  beginRead?: (() => number) | undefined;
19
29
  };
20
30
 
21
- export type UseWorkspaceSessionsResult = {
31
+ export type UseWorkspaceSessionsResult<T extends Session | SessionListEntry = Session> = {
22
32
  /**
23
33
  * All visible rows, with pins first. This preserves the pre-pinning hook
24
34
  * contract for consumers that only read `sessions`.
25
35
  */
26
- sessions: Session[];
36
+ sessions: T[];
27
37
  /** The complete personal pinned section, also present in `sessions`. */
28
- pinned: Session[];
38
+ pinned: T[];
29
39
  /** True when the server omitted older pins from its bounded pinned section. */
30
40
  pinnedTruncated: boolean;
41
+ totals: SessionListTotals | null;
31
42
  nextCursor: string | null;
32
43
  loading: boolean;
33
44
  error: Error | null;
@@ -39,62 +50,115 @@ export type UseWorkspaceSessionsResult = {
39
50
  };
40
51
 
41
52
  /** List the workspace's sessions — the data behind fleet and manager views. */
53
+ export function useWorkspaceSessions(
54
+ options: UseWorkspaceSessionsOptions & { projection: "summary" },
55
+ ): UseWorkspaceSessionsResult<SessionListEntry>;
56
+ export function useWorkspaceSessions(
57
+ options?: UseWorkspaceSessionsOptions & { projection?: undefined },
58
+ ): UseWorkspaceSessionsResult;
59
+ export function useWorkspaceSessions(
60
+ options: UseWorkspaceSessionsOptions,
61
+ ): UseWorkspaceSessionsResult<Session | SessionListEntry>;
42
62
  export function useWorkspaceSessions(
43
63
  options: UseWorkspaceSessionsOptions = {},
44
- ): UseWorkspaceSessionsResult {
64
+ ): UseWorkspaceSessionsResult<Session | SessionListEntry> {
45
65
  const { client, workspaceId } = useOpenGeni(options);
66
+ const projection = options.projection;
67
+ const includeTotals = options.includeTotals;
68
+ const needsYouOnly = options.needsYouOnly;
69
+ const contentArchivedOnly = options.contentArchivedOnly;
46
70
  const limit = options.limit;
47
71
  const parentSessionId = options.parentSessionId;
48
72
  const cursor = options.cursor;
49
73
  const search = options.search;
50
74
  const pinsOnly = options.pinsOnly;
75
+ const includePinned = options.includePinned;
51
76
  const archivedOnly = options.archivedOnly;
77
+ const sortBy = options.sortBy;
78
+ const archiveStatus = options.archiveStatus;
52
79
  const enabled = options.enabled ?? true;
53
80
  const nextReadRevision = useRef(0);
54
81
  const nextReadGeneration = useRef(0);
55
82
  const beginRead = options.beginRead;
56
83
  const queryKey = [
57
84
  workspaceId,
85
+ projection ?? "full",
86
+ includeTotals ? "totals" : "",
87
+ needsYouOnly ? "needs-you" : "",
88
+ contentArchivedOnly ? "read-only" : "",
58
89
  limit ?? "",
59
90
  parentSessionId === null ? "null" : (parentSessionId ?? ""),
60
91
  cursor ?? "",
61
92
  search ?? "",
62
93
  pinsOnly ? "1" : "",
94
+ includePinned === false ? "no-pins" : "",
63
95
  archivedOnly ? "archived" : "active",
96
+ sortBy ?? "",
97
+ archiveStatus ?? "",
64
98
  ].join("\u0000");
65
99
  const previousQueryKey = useRef(queryKey);
66
100
  const queryKeyTransition = previousQueryKey.current !== queryKey;
67
101
  useEffect(() => {
68
102
  previousQueryKey.current = queryKey;
69
103
  }, [queryKey]);
70
- const load = useCallback(async () => {
71
- const readGeneration = beginRead?.() ?? ++nextReadGeneration.current;
72
- const page = await client.listSessionPage(workspaceId, {
73
- ...(limit !== undefined ? { limit } : {}),
74
- ...(parentSessionId !== undefined ? { parentSessionId } : {}),
75
- ...(cursor !== undefined ? { cursor } : {}),
76
- ...(search !== undefined ? { search } : {}),
77
- ...(pinsOnly ? { pinsOnly: true } : {}),
78
- ...(archivedOnly ? { archivedOnly: true } : {}),
79
- });
80
- return {
104
+ const load = useCallback(
105
+ async (signal?: AbortSignal) => {
106
+ const readGeneration = beginRead?.() ?? ++nextReadGeneration.current;
107
+ const query = {
108
+ ...(includeTotals ? { includeTotals: true } : {}),
109
+ ...(needsYouOnly ? { needsYouOnly: true } : {}),
110
+ ...(contentArchivedOnly ? { contentArchivedOnly: true } : {}),
111
+ ...(limit !== undefined ? { limit } : {}),
112
+ ...(parentSessionId !== undefined ? { parentSessionId } : {}),
113
+ ...(cursor !== undefined ? { cursor } : {}),
114
+ ...(search !== undefined ? { search } : {}),
115
+ ...(pinsOnly ? { pinsOnly: true } : {}),
116
+ ...(includePinned === false ? { includePinned: false } : {}),
117
+ ...(archivedOnly ? { archivedOnly: true } : {}),
118
+ ...(sortBy ? { sortBy } : {}),
119
+ ...(archiveStatus ? { archiveStatus } : {}),
120
+ signal,
121
+ };
122
+ const page =
123
+ projection === "summary"
124
+ ? client.listSessionSummaryPage
125
+ ? await client.listSessionSummaryPage(workspaceId, query)
126
+ : await client.listSessionPage(workspaceId, query).then(async (full) => {
127
+ const { sessionListEntry } = await import("@opengeni/sdk/session-list-entries");
128
+ return {
129
+ ...full,
130
+ pinned: full.pinned.map(sessionListEntry),
131
+ sessions: full.sessions.map(sessionListEntry),
132
+ };
133
+ })
134
+ : await client.listSessionPage(workspaceId, query);
135
+ return {
136
+ queryKey,
137
+ page,
138
+ revision: ++nextReadRevision.current,
139
+ readGeneration,
140
+ };
141
+ },
142
+ [
143
+ beginRead,
144
+ client,
145
+ workspaceId,
146
+ projection,
147
+ includeTotals,
148
+ needsYouOnly,
149
+ contentArchivedOnly,
150
+ limit,
151
+ parentSessionId,
152
+ cursor,
153
+ search,
154
+ pinsOnly,
155
+ includePinned,
156
+ archivedOnly,
157
+ sortBy,
158
+ archiveStatus,
81
159
  queryKey,
82
- page,
83
- revision: ++nextReadRevision.current,
84
- readGeneration,
85
- };
86
- }, [
87
- beginRead,
88
- client,
89
- workspaceId,
90
- limit,
91
- parentSessionId,
92
- cursor,
93
- search,
94
- pinsOnly,
95
- archivedOnly,
96
- queryKey,
97
- ]);
160
+ ],
161
+ );
98
162
  const state = usePolledValue(load, {
99
163
  pollIntervalMs: options.pollIntervalMs,
100
164
  enabled,
@@ -112,6 +176,7 @@ export function useWorkspaceSessions(
112
176
  sessions: [...pinned, ...ordinary],
113
177
  pinned,
114
178
  pinnedTruncated: page?.pinnedTruncated ?? false,
179
+ totals: page?.totals ?? null,
115
180
  nextCursor: page?.nextCursor ?? null,
116
181
  // `usePolledValue` clears the old data and starts the new request in an
117
182
  // effect. During that query-key transition render, its old loading flag