@opengeni/react 3.3.2 → 3.4.1-canary.38960406141001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +2 -0
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +12 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +30 -3
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +404 -195
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -429
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +80 -4
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +299 -74
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2319 -748
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-2DZVYHVO.js +0 -470
  814. package/dist/chunk-2DZVYHVO.js.map +0 -1
  815. package/dist/chunk-3AGBGTRT.js.map +0 -1
  816. package/dist/chunk-4MDLEHXL.js.map +0 -1
  817. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  818. package/dist/chunk-7EAFGICR.js +0 -302
  819. package/dist/chunk-7EAFGICR.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X4A66EWZ.js +0 -223
  836. package/dist/chunk-X4A66EWZ.js.map +0 -1
  837. package/dist/chunk-XYRDDSXF.js.map +0 -1
  838. package/dist/chunk-YG4QEQF5.js +0 -9557
  839. package/dist/chunk-YG4QEQF5.js.map +0 -1
  840. package/dist/chunk-YVCHAQZY.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
@@ -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,28 @@
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
+ /** Only workstreams the signed-in person started or messaged. */
12
+ mineOnly?: boolean | undefined;
13
+ /** Compact list records; detail reads remain full sessions. */
14
+ projection?: "summary" | undefined;
7
15
  limit?: number | undefined;
8
16
  parentSessionId?: string | null | undefined;
9
17
  cursor?: string | undefined;
10
18
  search?: string | undefined;
11
19
  /** Return only the complete personal pinned projection. */
12
20
  pinsOnly?: boolean | undefined;
21
+ /** Skip pinned details when the pinned section is loaded separately. */
22
+ includePinned?: boolean | undefined;
13
23
  archivedOnly?: boolean | undefined;
24
+ sortBy?: "updatedAt" | "createdAt" | "name" | undefined;
25
+ archiveStatus?: "active" | "archived" | "all" | undefined;
14
26
  /** Refresh interval (ms) for fleet/manager views. Off by default. */
15
27
  pollIntervalMs?: number | undefined;
16
28
  enabled?: boolean | undefined;
@@ -18,16 +30,17 @@ export type UseWorkspaceSessionsOptions = ClientOverride & {
18
30
  beginRead?: (() => number) | undefined;
19
31
  };
20
32
 
21
- export type UseWorkspaceSessionsResult = {
33
+ export type UseWorkspaceSessionsResult<T extends Session | SessionListEntry = Session> = {
22
34
  /**
23
35
  * All visible rows, with pins first. This preserves the pre-pinning hook
24
36
  * contract for consumers that only read `sessions`.
25
37
  */
26
- sessions: Session[];
38
+ sessions: T[];
27
39
  /** The complete personal pinned section, also present in `sessions`. */
28
- pinned: Session[];
40
+ pinned: T[];
29
41
  /** True when the server omitted older pins from its bounded pinned section. */
30
42
  pinnedTruncated: boolean;
43
+ totals: SessionListTotals | null;
31
44
  nextCursor: string | null;
32
45
  loading: boolean;
33
46
  error: Error | null;
@@ -39,28 +52,53 @@ export type UseWorkspaceSessionsResult = {
39
52
  };
40
53
 
41
54
  /** List the workspace's sessions — the data behind fleet and manager views. */
55
+ export function useWorkspaceSessions(
56
+ options: UseWorkspaceSessionsOptions & { projection: "summary" },
57
+ ): UseWorkspaceSessionsResult<SessionListEntry>;
58
+ export function useWorkspaceSessions(
59
+ options?: UseWorkspaceSessionsOptions & { projection?: undefined },
60
+ ): UseWorkspaceSessionsResult;
61
+ export function useWorkspaceSessions(
62
+ options: UseWorkspaceSessionsOptions,
63
+ ): UseWorkspaceSessionsResult<Session | SessionListEntry>;
42
64
  export function useWorkspaceSessions(
43
65
  options: UseWorkspaceSessionsOptions = {},
44
- ): UseWorkspaceSessionsResult {
66
+ ): UseWorkspaceSessionsResult<Session | SessionListEntry> {
45
67
  const { client, workspaceId } = useOpenGeni(options);
68
+ const projection = options.projection;
69
+ const includeTotals = options.includeTotals;
70
+ const needsYouOnly = options.needsYouOnly;
71
+ const contentArchivedOnly = options.contentArchivedOnly;
72
+ const mineOnly = options.mineOnly;
46
73
  const limit = options.limit;
47
74
  const parentSessionId = options.parentSessionId;
48
75
  const cursor = options.cursor;
49
76
  const search = options.search;
50
77
  const pinsOnly = options.pinsOnly;
78
+ const includePinned = options.includePinned;
51
79
  const archivedOnly = options.archivedOnly;
80
+ const sortBy = options.sortBy;
81
+ const archiveStatus = options.archiveStatus;
52
82
  const enabled = options.enabled ?? true;
53
83
  const nextReadRevision = useRef(0);
54
84
  const nextReadGeneration = useRef(0);
55
85
  const beginRead = options.beginRead;
56
86
  const queryKey = [
57
87
  workspaceId,
88
+ projection ?? "full",
89
+ includeTotals ? "totals" : "",
90
+ needsYouOnly ? "needs-you" : "",
91
+ contentArchivedOnly ? "read-only" : "",
92
+ mineOnly ? "mine" : "",
58
93
  limit ?? "",
59
94
  parentSessionId === null ? "null" : (parentSessionId ?? ""),
60
95
  cursor ?? "",
61
96
  search ?? "",
62
97
  pinsOnly ? "1" : "",
98
+ includePinned === false ? "no-pins" : "",
63
99
  archivedOnly ? "archived" : "active",
100
+ sortBy ?? "",
101
+ archiveStatus ?? "",
64
102
  ].join("\u0000");
65
103
  const previousQueryKey = useRef(queryKey);
66
104
  const queryKeyTransition = previousQueryKey.current !== queryKey;
@@ -70,15 +108,35 @@ export function useWorkspaceSessions(
70
108
  const load = useCallback(
71
109
  async (signal?: AbortSignal) => {
72
110
  const readGeneration = beginRead?.() ?? ++nextReadGeneration.current;
73
- const page = await client.listSessionPage(workspaceId, {
111
+ const query = {
112
+ ...(includeTotals ? { includeTotals: true } : {}),
113
+ ...(needsYouOnly ? { needsYouOnly: true } : {}),
114
+ ...(contentArchivedOnly ? { contentArchivedOnly: true } : {}),
115
+ ...(mineOnly ? { mineOnly: true } : {}),
74
116
  ...(limit !== undefined ? { limit } : {}),
75
117
  ...(parentSessionId !== undefined ? { parentSessionId } : {}),
76
118
  ...(cursor !== undefined ? { cursor } : {}),
77
119
  ...(search !== undefined ? { search } : {}),
78
120
  ...(pinsOnly ? { pinsOnly: true } : {}),
121
+ ...(includePinned === false ? { includePinned: false } : {}),
79
122
  ...(archivedOnly ? { archivedOnly: true } : {}),
123
+ ...(sortBy ? { sortBy } : {}),
124
+ ...(archiveStatus ? { archiveStatus } : {}),
80
125
  signal,
81
- });
126
+ };
127
+ const page =
128
+ projection === "summary"
129
+ ? client.listSessionSummaryPage
130
+ ? await client.listSessionSummaryPage(workspaceId, query)
131
+ : await client.listSessionPage(workspaceId, query).then(async (full) => {
132
+ const { sessionListEntry } = await import("@opengeni/sdk/session-list-entries");
133
+ return {
134
+ ...full,
135
+ pinned: full.pinned.map(sessionListEntry),
136
+ sessions: full.sessions.map(sessionListEntry),
137
+ };
138
+ })
139
+ : await client.listSessionPage(workspaceId, query);
82
140
  return {
83
141
  queryKey,
84
142
  page,
@@ -90,12 +148,20 @@ export function useWorkspaceSessions(
90
148
  beginRead,
91
149
  client,
92
150
  workspaceId,
151
+ projection,
152
+ includeTotals,
153
+ needsYouOnly,
154
+ contentArchivedOnly,
155
+ mineOnly,
93
156
  limit,
94
157
  parentSessionId,
95
158
  cursor,
96
159
  search,
97
160
  pinsOnly,
161
+ includePinned,
98
162
  archivedOnly,
163
+ sortBy,
164
+ archiveStatus,
99
165
  queryKey,
100
166
  ],
101
167
  );
@@ -116,6 +182,7 @@ export function useWorkspaceSessions(
116
182
  sessions: [...pinned, ...ordinary],
117
183
  pinned,
118
184
  pinnedTruncated: page?.pinnedTruncated ?? false,
185
+ totals: page?.totals ?? null,
119
186
  nextCursor: page?.nextCursor ?? null,
120
187
  // `usePolledValue` clears the old data and starts the new request in an
121
188
  // effect. During that query-key transition render, its old loading flag