@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
@@ -1,9 +1,10 @@
1
- import { ChevronRightIcon, CircleSlashIcon, TriangleAlertIcon } from "lucide-react";
1
+ import { ChevronRightIcon, CircleSlashIcon, ShrinkIcon, TriangleAlertIcon } from "lucide-react";
2
2
  import {
3
3
  Component,
4
4
  createContext,
5
5
  useContext,
6
6
  useEffect,
7
+ useLayoutEffect,
7
8
  useMemo,
8
9
  useRef,
9
10
  useState,
@@ -13,17 +14,32 @@ import { Collapsible } from "radix-ui";
13
14
  import { CopyButton } from "../components/copy-button";
14
15
  import { cn } from "../lib/cn";
15
16
  import { MOTION_INSPECT_SCALE } from "../lib/motion-inspect";
17
+ import { presentTurnFailureText } from "./compaction-copy";
16
18
  import { useForcedDefaultOpen } from "./disclosure-context";
19
+ import { useTimelineSearchReveal } from "../components/timeline-search";
17
20
  import { useEntranceAnimation } from "./entrance";
18
21
  import { useFoldMemory, type FoldRestingState } from "./fold-memory";
19
22
  import {
20
- applyPatchOpsFromToolItem,
21
- isApplyPatch,
22
- mediaPreviewFact,
23
- screenshotDataUrl,
24
- } from "./parsers";
25
- import { rawTypeOf } from "./registry";
26
- import type { ActivityItem, ToolCallItem, TurnOutcome } from "./types";
23
+ BUILT_IN_TURN_SUMMARY_FACET_IDS,
24
+ createTurnSummaryContext,
25
+ formatElapsed,
26
+ resolveTurnSummaryFacets,
27
+ selectTurnSummaryFacets,
28
+ type TurnSummaryFacetConfiguration,
29
+ type TurnSummaryStatus,
30
+ } from "./turn-summary-model";
31
+ import type { ActivityItem, TurnOutcome } from "./types";
32
+
33
+ export { BUILT_IN_TURN_SUMMARY_FACET_IDS, formatElapsed };
34
+ export type {
35
+ BuiltInTurnSummaryFacetId,
36
+ TurnSummaryContext,
37
+ TurnSummaryFacet,
38
+ TurnSummaryFacetConfiguration,
39
+ TurnSummaryFacetResult,
40
+ TurnSummaryOptions,
41
+ TurnSummaryStatus,
42
+ } from "./turn-summary-model";
27
43
  export type { TurnOutcome } from "./types";
28
44
 
29
45
  /* ----------------------------------------------------------------------------
@@ -51,80 +67,15 @@ export function useTurnSettleOpen(): boolean {
51
67
  return useContext(TurnSettleChromeContext);
52
68
  }
53
69
 
54
- export const BUILT_IN_TURN_SUMMARY_FACET_IDS = [
55
- "steps",
56
- "files",
57
- "commands",
58
- "screenshots",
59
- "memories",
60
- "compacted",
61
- "duration",
62
- ] as const;
63
-
64
- export type BuiltInTurnSummaryFacetId = (typeof BUILT_IN_TURN_SUMMARY_FACET_IDS)[number];
65
-
66
- export type TurnSummaryContext = Readonly<{
67
- /** Every normalized activity item folded into this summary. */
68
- items: readonly ActivityItem[];
69
- /** Tool calls from `items`, retained in timeline order for convenient aggregation. */
70
- toolCalls: readonly ToolCallItem[];
71
- /** The settled turn verdict, or absent for a neutral/incomplete cluster. */
72
- outcome: TurnOutcome | undefined;
73
- /** The bounded failure reason rendered by the enclosing summary, when present. */
74
- failureText: string | undefined;
75
- /** Total turn duration when the enclosing group has both valid timestamps. */
76
- durationMs: number | undefined;
77
- /** False when any projected activity is still running or streaming. */
78
- settled: boolean;
79
- /**
80
- * Adjacent compaction landmarks next to this fold. Landmark remains the
81
- * primary UI; this is a secondary chip signal only.
82
- */
83
- contextCompactionCount: number;
84
- }>;
85
-
86
- export type TurnSummaryFacetResult = Readonly<{
87
- icon?: ReactNode;
88
- content: ReactNode;
89
- ariaLabel?: string;
90
- title?: string;
91
- }>;
92
-
93
- export type TurnSummaryFacet = Readonly<{
94
- /** Stable identity used for removal and deterministic de-duplication. */
95
- id: string;
96
- /** Return null when this facet has nothing useful to show. */
97
- summarize(context: TurnSummaryContext): TurnSummaryFacetResult | null;
98
- }>;
99
-
100
- type ModifyTurnSummaryFacets = Readonly<{
101
- /** Appended after the remaining built-ins, in supplied order. */
102
- add?: readonly TurnSummaryFacet[];
103
- /** Built-ins to omit before custom facets are appended. */
104
- remove?: readonly BuiltInTurnSummaryFacetId[];
105
- replace?: never;
106
- }>;
107
-
108
- type ReplaceTurnSummaryFacets = Readonly<{
109
- /** The complete ordered facet list. Mutually exclusive with add/remove. */
110
- replace: readonly TurnSummaryFacet[];
111
- add?: never;
112
- remove?: never;
113
- }>;
114
-
115
- export type TurnSummaryFacetConfiguration = ModifyTurnSummaryFacets | ReplaceTurnSummaryFacets;
116
-
117
- export type TurnSummaryOptions = Readonly<{
118
- facets?: TurnSummaryFacetConfiguration;
119
- }>;
120
-
121
70
  export type TurnSummaryProps = {
71
+ /** Reports the disclosure's actual open state on mount and on every change. */
72
+ onOpenStateChange?: ((open: boolean) => void) | undefined;
122
73
  /** The activity items in the turn (used only to compute the facet counts). */
123
74
  items: ActivityItem[];
124
75
  /**
125
76
  * The settled verdict — or absent for a completed CLUSTER of a still-running
126
- * turn, which folds neutrally: no verdict glyph (the turn has none yet), a
127
- * quiet pulse dot in its place so alignment and the running feel both hold.
77
+ * turn, which folds neutrally. Only unfinished activity inside this summary
78
+ * animates; the parent turn may still be composing a response elsewhere.
128
79
  */
129
80
  outcome?: TurnOutcome | undefined;
130
81
  /** A short failure reason shown inline on a failed chip (never hidden). */
@@ -133,6 +84,7 @@ export type TurnSummaryProps = {
133
84
  durationMs?: number | undefined;
134
85
  /** Start expanded. */
135
86
  defaultOpen?: boolean | undefined;
87
+ liveHeader?: ReactNode;
136
88
  /**
137
89
  * A nested fold — a cluster or sub-turn INSIDE an already-expanded turn. It
138
90
  * drops the bordered/filled chip and renders as a plain disclosure node on the
@@ -170,6 +122,16 @@ export type TurnSummaryProps = {
170
122
  copyText?: string | undefined;
171
123
  /** Adjacent compaction landmark count for the secondary chip facet. */
172
124
  contextCompactionCount?: number | undefined;
125
+ /**
126
+ * Exchange status line (compact progress presentation). Replaces the state
127
+ * marker and the duration facet; a settled `worked` row reads as a separator.
128
+ */
129
+ status?: TurnSummaryStatus | undefined;
130
+ /**
131
+ * False when the fold has nothing to reveal: the row renders without a
132
+ * chevron and is not a disclosure control. Defaults to true.
133
+ */
134
+ expandable?: boolean | undefined;
173
135
  /** The rendered activity rail revealed on expand. */
174
136
  children: ReactNode;
175
137
  };
@@ -187,17 +149,22 @@ export function TurnSummary({
187
149
  failureText,
188
150
  durationMs,
189
151
  defaultOpen,
152
+ liveHeader,
190
153
  bare,
191
154
  facets: facetConfiguration,
192
155
  settleFold,
193
156
  foldKey,
194
157
  copyText,
195
158
  contextCompactionCount,
159
+ status,
160
+ expandable = true,
161
+ onOpenStateChange,
196
162
  children,
197
163
  }: TurnSummaryProps) {
198
164
  // An explicit `defaultOpen` always wins; otherwise an ancestor may seed it
199
165
  // (screenshot instrumentation); otherwise the turn starts folded.
200
166
  const forcedDefaultOpen = useForcedDefaultOpen();
167
+ const searchReveal = useTimelineSearchReveal();
201
168
  const foldMemory = useFoldMemory();
202
169
  // A remembered resting state outranks author defaults: a fold that already
203
170
  // finished its settle collapse (or that the reader closed) mounts closed
@@ -212,7 +179,22 @@ export function TurnSummary({
212
179
  : (defaultOpen ?? forcedDefaultOpen ?? false);
213
180
  const initialSettle = Boolean(settleFold) && !restingOpen && remembered === undefined;
214
181
  const [settling, setSettling] = useState(initialSettle);
215
- const [open, setOpen] = useState(initialSettle ? true : restingOpen);
182
+ const [openState, setOpen] = useState(initialSettle ? true : restingOpen);
183
+ // A fold with nothing to reveal never reads as open.
184
+ const open = expandable && openState;
185
+ const reportOpen = useRef(onOpenStateChange);
186
+ reportOpen.current = onOpenStateChange;
187
+ // Before paint: a listener may need to start motion in the same frame.
188
+ useLayoutEffect(() => {
189
+ reportOpen.current?.(open);
190
+ }, [open]);
191
+ const readerOwnsOpen = useRef(remembered !== undefined);
192
+ useEffect(() => {
193
+ // Readable work can produce primary media or fail after mounting. Reveal
194
+ // that output without remounting existing tool controls, while preserving
195
+ // every explicit reader-owned open/closed choice.
196
+ if (status && defaultOpen && remembered === undefined && !readerOwnsOpen.current) setOpen(true);
197
+ }, [status, defaultOpen, remembered]);
216
198
  // While true, a close uses the slow settle collapse. Cleared after that
217
199
  // auto-collapse finishes (or on first user interaction) so later manual
218
200
  // closes are the fast disclose pair.
@@ -311,7 +293,20 @@ export function TurnSummary({
311
293
  }
312
294
  // oxlint-disable-next-line react-hooks/exhaustive-deps
313
295
  }, [settleFold]);
296
+ useEffect(() => {
297
+ if (!searchReveal) return;
298
+ clearSettleTimers();
299
+ settleArmedRef.current = false;
300
+ setSettling(false);
301
+ setSettlePhase(false);
302
+ setNestSuppressLatch(false);
303
+ setOpen(true);
304
+ rememberResting("open");
305
+ // Search is an explicit, persistent reader action, not a new fold default.
306
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
307
+ }, [searchReveal]);
314
308
  const onOpenChange = (next: boolean) => {
309
+ readerOwnsOpen.current = true;
315
310
  // The reader took over — cancel the pending auto-collapse for good.
316
311
  // Clear settle CSS phase immediately (fast collapse) but keep nest latch
317
312
  // through the disclose window so nested chips stay force-open mid-close
@@ -364,20 +359,13 @@ export function TurnSummary({
364
359
  () => resolveTurnSummaryFacets(facetConfiguration),
365
360
  [facetConfiguration],
366
361
  );
362
+ const statusKind = status?.kind;
367
363
  const facets = useMemo(
368
- () =>
369
- facetDefinitions.flatMap((facet) => {
370
- try {
371
- const result = facet.summarize(context);
372
- return result && hasFacetContent(result.content) ? [{ facet, result }] : [];
373
- } catch {
374
- // A host extension is presentation-only. It must never take down the
375
- // durable timeline or hide the remaining built-in evidence.
376
- return [];
377
- }
378
- }),
379
- [context, facetDefinitions],
364
+ () => selectTurnSummaryFacets(facetDefinitions, context, statusKind),
365
+ [context, facetDefinitions, statusKind],
380
366
  );
367
+ // The chip names the failure; recorded technical text stays a hover title.
368
+ const failure = outcome === "failed" ? presentTurnFailureText(failureText) : null;
381
369
 
382
370
  // Live open shell: keep the chip in-flow (so settle never inserts layout)
383
371
  // and quieter until there is an outcome or a settle beat — but still
@@ -389,136 +377,191 @@ export function TurnSummary({
389
377
  // Nested chips stay force-open for this window (stable height).
390
378
  const settleChrome = settling || settlePhase || nestSuppressLatch;
391
379
 
380
+ const statusLine = status ? turnSummaryStatusLine(status) : null;
381
+
392
382
  // Copy only on the collapsed chip — when open, per-message copy is enough
393
383
  // and a second control on the summary row felt crowded / off.
394
384
  const copyable = Boolean(
395
385
  copyText && copyText.trim().length > 0 && !bare && !liveShell && !open && !settlePhase,
396
386
  );
397
387
 
388
+ const headerClassName = cn(
389
+ // The section, not the viewport, bounds this sticky row. Content
390
+ // is a sibling: its disclosure overflow never traps the header.
391
+ // Nested rail folds must never stack additional sticky headers.
392
+ !bare && open && "sticky top-[var(--og-work-header-top,0px)] z-10 bg-og-bg",
393
+ settling && expandable && "animate-og-settle-chip",
394
+ // Top-level turn fold and (when used) nested cluster folds render as
395
+ // FLAT rail rows — chevron + glyph + facets on the page background, no
396
+ // border, no fill. Only a hover tint hints the row is expandable, so a
397
+ // collapsed turn never reads as a boxed card. The top-level row is a
398
+ // touch larger (base text, size-5 glyph, wider gap) so it still reads
399
+ // as a turn landmark above any nested cluster rows it groups.
400
+ "group flex w-full items-center rounded-og-sm text-left transition-colors",
401
+ // A folded turn is a touch target on coarse pointers: grow the row so it
402
+ // clears the 44px minimum without disturbing the calm desktop rhythm.
403
+ expandable && "pointer-coarse:min-h-11 pointer-coarse:py-2.5",
404
+ bare
405
+ ? "gap-2 px-1.5 py-1.5 text-og-sm text-og-fg-muted"
406
+ : "-mx-2 gap-2.5 px-2 py-1.5 text-og-base text-og-fg-muted",
407
+ // A failed fold keeps its red accent (glyph + inline reason below) and a
408
+ // faint red hover wash so attention still lands there; every other
409
+ // outcome gets the neutral surface hover. A row with nothing to reveal
410
+ // is not a control and gets no hover.
411
+ !expandable
412
+ ? undefined
413
+ : outcome === "failed"
414
+ ? "hover:bg-og-status-failed/[0.06] hover:text-og-fg"
415
+ : "hover:bg-og-surface-1 hover:text-og-fg",
416
+ liveShell && "text-og-fg-subtle",
417
+ // Phones hide the hint, so keep the copy control clear of the separator.
418
+ status && copyable && "max-sm:pr-10",
419
+ );
420
+ const headerContent = (
421
+ <>
422
+ {/* Disclosure grammar matches the rows: chevron leads (far left), then any
423
+ exceptional or active state, then the facets — one expand affordance
424
+ side everywhere. A row with nothing to reveal keeps the chevron's space
425
+ so its text stays aligned with neighbouring rows. */}
426
+ {expandable ? (
427
+ <ChevronRightIcon
428
+ className={cn(
429
+ "size-3.5 shrink-0 text-og-fg-subtle transition-transform ease-og-in-out group-data-[state=open]:rotate-90",
430
+ settlePhase
431
+ ? "duration-[var(--_og-duration-disclose-settle)]"
432
+ : "duration-[var(--_og-duration-disclose)]",
433
+ )}
434
+ />
435
+ ) : (
436
+ <span aria-hidden className="size-3.5 shrink-0" />
437
+ )}
438
+ {/* Completion is the quiet default and needs no repeated glyph. Failed,
439
+ cancelled, and still-running folds retain a visible state marker. */}
440
+ {status || outcome === "complete" || (!outcome && (liveHeader || context.settled)) ? null : (
441
+ <span
442
+ className={cn(
443
+ "inline-flex shrink-0 items-center justify-center",
444
+ bare ? "size-3.5" : "size-5",
445
+ outcome === "failed" ? "text-og-status-failed" : "text-og-fg-subtle",
446
+ )}
447
+ >
448
+ {outcome === "failed" ? (
449
+ <TriangleAlertIcon className="size-3" />
450
+ ) : outcome === "cancelled" ? (
451
+ <CircleSlashIcon className="size-3" />
452
+ ) : (
453
+ <span className="size-1.5 animate-og-pulse rounded-full bg-og-fg-subtle" />
454
+ )}
455
+ </span>
456
+ )}
457
+ <span
458
+ className={cn(
459
+ "min-w-0 truncate",
460
+ status?.kind === "worked" ? "shrink" : "flex-1",
461
+ bare ? "text-og-sm" : "text-og-fg-muted",
462
+ )}
463
+ >
464
+ {statusLine}
465
+ {liveHeader && !open && !status
466
+ ? liveHeader
467
+ : facets.map(({ facet, result }, index) => (
468
+ <FacetRenderBoundary key={facet.id}>
469
+ <>
470
+ {index > 0 || statusLine ? " · " : null}
471
+ <span aria-label={result.ariaLabel} title={result.title}>
472
+ {result.icon ? (
473
+ <span aria-hidden className="mr-1 inline-flex align-[-0.125em]">
474
+ {result.icon}
475
+ </span>
476
+ ) : null}
477
+ {result.content}
478
+ </span>
479
+ </>
480
+ </FacetRenderBoundary>
481
+ ))}
482
+ {failure ? (
483
+ <span className="text-og-status-failed" title={failure.detail}>
484
+ {" "}
485
+ · {failure.summary}
486
+ </span>
487
+ ) : null}
488
+ {outcome === "cancelled" ? <span className="text-og-fg-subtle"> · interrupted</span> : null}
489
+ </span>
490
+ {/* A settled exchange reads as a separator above its answer. */}
491
+ {status?.kind === "worked" ? (
492
+ <span aria-hidden className="ml-1 h-px min-w-0 flex-1 bg-og-border" />
493
+ ) : null}
494
+ {status && status.kind !== "worked" && (contextCompactionCount ?? 0) > 0 ? (
495
+ <ShrinkIcon
496
+ className="size-3.5 shrink-0"
497
+ aria-label="Context compacted; expand for details"
498
+ />
499
+ ) : null}
500
+ </>
501
+ );
502
+
398
503
  return (
399
504
  <TurnSettleChromeContext.Provider value={settleChrome}>
400
505
  <div className={cn(copyable && "group/copy relative")}>
401
506
  <Collapsible.Root
507
+ data-og-work-section={bare ? undefined : ""}
402
508
  open={open}
403
509
  onOpenChange={onOpenChange}
404
510
  // History-only entrance. Never toggle this on after mount — see
405
511
  // allowEnterAnimation. Settle uses animate-og-settle-chip on the trigger.
406
512
  className={allowEnterAnimation && !liveShell ? "animate-og-enter" : undefined}
407
513
  >
408
- <Collapsible.Trigger
409
- className={cn(
410
- settling && "animate-og-settle-chip",
411
- // Top-level turn fold and (when used) nested cluster folds render as
412
- // FLAT rail rows — chevron + glyph + facets on the page background, no
413
- // border, no fill. Only a hover tint hints the row is expandable, so a
414
- // collapsed turn never reads as a boxed card. The top-level row is a
415
- // touch larger (base text, size-5 glyph, wider gap) so it still reads
416
- // as a turn landmark above any nested cluster rows it groups.
417
- "group flex w-full items-center rounded-og-sm text-left transition-colors",
418
- // A folded turn is a touch target on coarse pointers: grow the row so it
419
- // clears the 44px minimum without disturbing the calm desktop rhythm.
420
- "pointer-coarse:min-h-11 pointer-coarse:py-2.5",
421
- bare
422
- ? "gap-2 px-1.5 py-1.5 text-og-sm text-og-fg-muted"
423
- : "-mx-2 gap-2.5 px-2 py-1.5 text-og-base text-og-fg-muted",
424
- // A failed fold keeps its red accent (glyph + inline reason below) and a
425
- // faint red hover wash so attention still lands there; every other
426
- // outcome gets the neutral surface hover.
427
- outcome === "failed"
428
- ? "hover:bg-og-status-failed/[0.06] hover:text-og-fg"
429
- : "hover:bg-og-surface-1 hover:text-og-fg",
430
- liveShell && "text-og-fg-subtle",
431
- )}
432
- >
433
- {/* Disclosure grammar matches the rows: chevron leads (far left), then any
434
- exceptional or active state, then the facets — one expand affordance
435
- side everywhere. */}
436
- <ChevronRightIcon
514
+ {expandable ? (
515
+ <Collapsible.Trigger
516
+ data-og-work-header={bare ? "nested" : "outer"}
517
+ className={headerClassName}
518
+ >
519
+ {headerContent}
520
+ </Collapsible.Trigger>
521
+ ) : (
522
+ // Nothing to reveal: a plain status row, not a disclosure control.
523
+ <div data-og-work-header={bare ? "nested" : "outer"} className={headerClassName}>
524
+ {headerContent}
525
+ </div>
526
+ )}
527
+ {status?.guidance ? (
528
+ // Guidance the reader needs stays visible in both fold states.
529
+ <div data-og-exchange-guidance="" className="min-w-0 pb-1 pl-6">
530
+ {status.guidance}
531
+ </div>
532
+ ) : null}
533
+ {status && !open && status.preview ? (
534
+ // Readable progress under the status line; the line above stays
535
+ // the one disclosure control, so a click here is a mouse shortcut.
536
+ <div
537
+ data-og-exchange-preview=""
437
538
  className={cn(
438
- "size-3.5 shrink-0 text-og-fg-subtle transition-transform ease-og-in-out group-data-[state=open]:rotate-90",
439
- settlePhase
440
- ? "duration-[var(--_og-duration-disclose-settle)]"
441
- : "duration-[var(--_og-duration-disclose)]",
539
+ "flex min-w-0 flex-col gap-0.5 pb-1 pl-6",
540
+ expandable && "cursor-pointer",
442
541
  )}
443
- />
444
- {/* Completion is the quiet default and needs no repeated glyph. Failed,
445
- cancelled, and still-running folds retain a visible state marker. */}
446
- {outcome === "complete" ? null : (
447
- <span
448
- className={cn(
449
- "inline-flex shrink-0 items-center justify-center",
450
- bare ? "size-3.5" : "size-5",
451
- outcome === "failed" ? "text-og-status-failed" : "text-og-fg-subtle",
452
- )}
453
- >
454
- {outcome === "failed" ? (
455
- <TriangleAlertIcon className="size-3" />
456
- ) : outcome === "cancelled" ? (
457
- <CircleSlashIcon className="size-3" />
458
- ) : (
459
- <span className="size-1.5 animate-og-pulse rounded-full bg-og-fg-subtle" />
460
- )}
461
- </span>
462
- )}
463
- <span
464
- className={cn("min-w-0 flex-1 truncate", bare ? "text-og-sm" : "text-og-fg-muted")}
542
+ onClick={expandable ? () => onOpenChange(true) : undefined}
465
543
  >
466
- {facets.map(({ facet, result }, index) => (
467
- <FacetRenderBoundary key={facet.id}>
468
- <>
469
- {index > 0 ? " · " : null}
470
- <span aria-label={result.ariaLabel} title={result.title}>
471
- {result.icon ? (
472
- <span aria-hidden className="mr-1 inline-flex align-[-0.125em]">
473
- {result.icon}
474
- </span>
475
- ) : null}
476
- {result.content}
477
- </span>
478
- </>
479
- </FacetRenderBoundary>
480
- ))}
481
- {outcome === "failed" && failureText ? (
482
- <span className="text-og-status-failed"> · {failureText}</span>
483
- ) : null}
484
- {outcome === "cancelled" ? (
485
- <span className="text-og-fg-subtle"> · interrupted</span>
486
- ) : null}
487
- </span>
488
- {/* The disclosure hint. Calm at rest on fine pointers (revealed on hover
489
- and keyboard focus), but always present on coarse pointers where there
490
- is no hover to lean on — so the fold never reads as a static status
491
- line. Purely visual: the trigger's aria-expanded already conveys state
492
- to assistive tech, so the hint is hidden from the accessible name. */}
493
- <span
494
- aria-hidden
544
+ {status.preview ? <div className="min-w-0">{status.preview}</div> : null}
545
+ </div>
546
+ ) : null}
547
+ {expandable ? (
548
+ <Collapsible.Content
549
+ {...(nestSuppressLatch ? { forceMount: true as const } : {})}
550
+ data-og-fold-content=""
495
551
  className={cn(
496
- "ml-auto shrink-0 pl-2 text-og-xs text-og-fg-subtle transition-opacity duration-150",
497
- // Leave a sliver so a collapsed-chip copy icon can sit outside.
498
- copyable ? "pr-8" : null,
499
- "opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100",
500
- "pointer-coarse:opacity-100",
552
+ "overflow-hidden",
553
+ expandReady && "data-[state=open]:animate-og-expand",
554
+ // Auto-close: slow settle. Manual close (settlePhase cleared): fast.
555
+ settlePhase
556
+ ? "data-[state=closed]:animate-og-settle-collapse"
557
+ : "data-[state=closed]:animate-og-collapse",
501
558
  )}
502
559
  >
503
- {open ? "hide steps" : "show steps"}
504
- </span>
505
- </Collapsible.Trigger>
506
- <Collapsible.Content
507
- {...(nestSuppressLatch ? { forceMount: true as const } : {})}
508
- data-og-fold-content=""
509
- className={cn(
510
- "overflow-hidden",
511
- expandReady && "data-[state=open]:animate-og-expand",
512
- // Auto-close: slow settle. Manual close (settlePhase cleared): fast.
513
- settlePhase
514
- ? "data-[state=closed]:animate-og-settle-collapse"
515
- : "data-[state=closed]:animate-og-collapse",
516
- )}
517
- >
518
- {/* A nested node indents its revealed rows under the glyph (thread nesting
560
+ {/* A nested node indents its revealed rows under the glyph (thread nesting
519
561
  off the parent rail); the top-level turn body owns its own rail. */}
520
- <div className={bare ? "pt-1 pl-5" : "pt-2"}>{children}</div>
521
- </Collapsible.Content>
562
+ <div className={bare ? "pt-1 pl-5" : "pt-2"}>{children}</div>
563
+ </Collapsible.Content>
564
+ ) : null}
522
565
  </Collapsible.Root>
523
566
  {copyable ? (
524
567
  <div className="pointer-events-none absolute top-1.5 right-0 z-10">
@@ -532,160 +575,41 @@ export function TurnSummary({
532
575
  );
533
576
  }
534
577
 
535
- function createTurnSummaryContext(
536
- items: ActivityItem[],
537
- outcome: TurnOutcome | undefined,
538
- failureText: string | undefined,
539
- durationMs: number | undefined,
540
- contextCompactionCount: number,
541
- ): TurnSummaryContext {
542
- const itemSnapshot = Object.freeze([...items]);
543
- const toolCalls = Object.freeze(
544
- itemSnapshot.filter((item): item is ToolCallItem => item.kind === "tool-call"),
578
+ /**
579
+ * "Working · 2m 14s", "Waiting for 2 agents · 3m 5s", or "Worked for 4m 10s";
580
+ * null when a settled span is too short to state.
581
+ */
582
+ function turnSummaryStatusLine(status: TurnSummaryStatus): ReactNode {
583
+ if (status.kind === "worked") {
584
+ return status.durationMs !== undefined &&
585
+ Number.isFinite(status.durationMs) &&
586
+ status.durationMs >= 1000 ? (
587
+ <span data-og-exchange-status="worked">
588
+ {status.label ?? "Worked for"} {formatElapsed(status.durationMs)}
589
+ </span>
590
+ ) : null;
591
+ }
592
+ const label = status.label ?? (status.kind === "working" ? "Working" : "Waiting");
593
+ return (
594
+ <span data-og-exchange-status={status.kind}>
595
+ <span className={status.kind === "working" ? "og-shimmer-text" : undefined}>{label}</span>
596
+ {status.since ? <LiveElapsed since={status.since} /> : null}
597
+ </span>
545
598
  );
546
- const settled = itemSnapshot.every((item) => {
547
- if (item.kind === "reasoning") {
548
- return !item.streaming;
549
- }
550
- if (
551
- item.kind === "tool-call" ||
552
- item.kind === "worker" ||
553
- item.kind === "sandbox" ||
554
- item.kind === "startup-phase"
555
- ) {
556
- return item.status !== "running";
557
- }
558
- return true;
559
- });
560
- return Object.freeze({
561
- items: itemSnapshot,
562
- toolCalls,
563
- outcome,
564
- failureText,
565
- durationMs,
566
- settled,
567
- contextCompactionCount: Math.max(0, Math.floor(contextCompactionCount)),
568
- });
569
- }
570
-
571
- const BUILT_IN_TURN_SUMMARY_FACETS: readonly TurnSummaryFacet[] = Object.freeze([
572
- {
573
- id: "steps",
574
- summarize: ({ items }) => ({
575
- content: `${items.length} ${items.length === 1 ? "step" : "steps"}`,
576
- }),
577
- },
578
- {
579
- id: "files",
580
- summarize: ({ toolCalls }) => {
581
- let files = 0;
582
- for (const item of toolCalls) {
583
- if (isApplyPatch(item)) {
584
- files += applyPatchOpsFromToolItem(item).length;
585
- }
586
- }
587
- return files ? { content: `${files} ${files === 1 ? "file" : "files"} edited` } : null;
588
- },
589
- },
590
- {
591
- id: "commands",
592
- summarize: ({ toolCalls }) => {
593
- const commands = toolCalls.filter((item) => item.name === "exec_command").length;
594
- return commands
595
- ? { content: `${commands} ${commands === 1 ? "command" : "commands"}` }
596
- : null;
597
- },
598
- },
599
- {
600
- id: "screenshots",
601
- summarize: ({ toolCalls }) => {
602
- let screenshots = 0;
603
- for (const item of toolCalls) {
604
- if (
605
- (rawTypeOf(item) === "computer_call" ||
606
- item.name === "computer_call" ||
607
- item.name === "computer_screenshot") &&
608
- (screenshotDataUrl(item.output) !== null || mediaPreviewFact(item.output) !== null)
609
- ) {
610
- screenshots += 1;
611
- }
612
- }
613
- return screenshots
614
- ? {
615
- content: `${screenshots} ${screenshots === 1 ? "screenshot" : "screenshots"}`,
616
- }
617
- : null;
618
- },
619
- },
620
- {
621
- id: "memories",
622
- summarize: ({ items }) => {
623
- let saved = 0;
624
- let updated = 0;
625
- for (const item of items) {
626
- if (item.kind !== "memory") {
627
- continue;
628
- }
629
- if (item.variant === "corrected") {
630
- updated += 1;
631
- } else {
632
- saved += 1;
633
- }
634
- }
635
- const parts: string[] = [];
636
- if (saved) {
637
- parts.push(`${saved} ${saved === 1 ? "memory" : "memories"} saved`);
638
- }
639
- if (updated) {
640
- parts.push(`${updated} ${updated === 1 ? "memory" : "memories"} updated`);
641
- }
642
- return parts.length > 0 ? { content: parts.join(" · ") } : null;
643
- },
644
- },
645
- {
646
- id: "compacted",
647
- summarize: ({ contextCompactionCount }) =>
648
- contextCompactionCount > 0
649
- ? {
650
- content:
651
- contextCompactionCount === 1 ? "compacted" : `${contextCompactionCount} compacts`,
652
- ariaLabel:
653
- contextCompactionCount === 1
654
- ? "Conversation history compacted"
655
- : `${contextCompactionCount} conversation history compactions`,
656
- }
657
- : null,
658
- },
659
- {
660
- id: "duration",
661
- summarize: ({ durationMs }) => {
662
- const duration = formatDurationFacet(durationMs);
663
- return duration ? { content: duration } : null;
664
- },
665
- },
666
- ]);
667
-
668
- function resolveTurnSummaryFacets(
669
- configuration: TurnSummaryFacetConfiguration | undefined,
670
- ): readonly TurnSummaryFacet[] {
671
- const requested: readonly TurnSummaryFacet[] = configuration?.replace ?? [
672
- ...BUILT_IN_TURN_SUMMARY_FACETS.filter(
673
- (facet) => !configuration?.remove?.includes(facet.id as BuiltInTurnSummaryFacetId),
674
- ),
675
- ...(configuration?.add ?? []),
676
- ];
677
- const seen = new Set<string>();
678
- return requested.filter((facet) => {
679
- if (!facet.id || seen.has(facet.id)) {
680
- return false;
681
- }
682
- seen.add(facet.id);
683
- return true;
684
- });
685
599
  }
686
600
 
687
- function hasFacetContent(content: ReactNode): boolean {
688
- return content !== null && content !== undefined && content !== false && content !== "";
601
+ /** A second-resolution clock; unmounts with the live row. */
602
+ function LiveElapsed({ since }: { since: string }) {
603
+ const startedAt = Date.parse(since);
604
+ const [now, setNow] = useState(() => Date.now());
605
+ useEffect(() => {
606
+ const timer = setInterval(() => setNow(Date.now()), 1000);
607
+ return () => clearInterval(timer);
608
+ }, []);
609
+ if (!Number.isFinite(startedAt)) return null;
610
+ return (
611
+ <span className="tabular-nums">{` · ${formatElapsed(Math.max(0, now - startedAt))}`}</span>
612
+ );
689
613
  }
690
614
 
691
615
  class FacetRenderBoundary extends Component<{ children: ReactNode }, { failed: boolean }> {
@@ -699,20 +623,3 @@ class FacetRenderBoundary extends Component<{ children: ReactNode }, { failed: b
699
623
  return this.state.failed ? null : this.props.children;
700
624
  }
701
625
  }
702
-
703
- function formatDurationFacet(durationMs: number | undefined): string | null {
704
- if (durationMs === undefined || !Number.isFinite(durationMs) || durationMs < 1000) {
705
- return null;
706
- }
707
- const totalSeconds = Math.floor(durationMs / 1000);
708
- if (totalSeconds < 60) {
709
- return `${totalSeconds}s`;
710
- }
711
- const totalMinutes = Math.floor(totalSeconds / 60);
712
- if (totalMinutes < 60) {
713
- return `${totalMinutes}m`;
714
- }
715
- const hours = Math.floor(totalMinutes / 60);
716
- const minutes = totalMinutes % 60;
717
- return `${hours}h ${String(minutes).padStart(2, "0")}m`;
718
- }