@opengeni/react 0.57.0 → 1.0.2-canary.37191796234001

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 (629) hide show
  1. package/README.md +654 -22
  2. package/dist/accounts.d.ts +64 -0
  3. package/dist/accounts.js +822 -0
  4. package/dist/accounts.js.map +1 -0
  5. package/dist/approvals.d.ts +2 -1
  6. package/dist/artifacts-document.js +3 -2
  7. package/dist/artifacts-presentation.js +3 -2
  8. package/dist/artifacts-spreadsheet.js +2 -2
  9. package/dist/artifacts.d.ts +4 -1
  10. package/dist/artifacts.js +518 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-GTR5XQ7X.js +16 -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-UGBTNB3L.js +11 -0
  16. package/dist/chat-interactive-block-UGBTNB3L.js.map +1 -0
  17. package/dist/{chunk-5UQPNLIO.js → chunk-23J2ZNXT.js} +4117 -3896
  18. package/dist/chunk-23J2ZNXT.js.map +1 -0
  19. package/dist/chunk-447JLCBU.js +209 -0
  20. package/dist/chunk-447JLCBU.js.map +1 -0
  21. package/dist/chunk-4RVYOY4O.js +379 -0
  22. package/dist/chunk-4RVYOY4O.js.map +1 -0
  23. package/dist/chunk-5CVXZA3Y.js +292 -0
  24. package/dist/chunk-5CVXZA3Y.js.map +1 -0
  25. package/dist/chunk-5J4FOW6Q.js +108 -0
  26. package/dist/chunk-5J4FOW6Q.js.map +1 -0
  27. package/dist/chunk-A2PI6UMY.js +41 -0
  28. package/dist/chunk-A2PI6UMY.js.map +1 -0
  29. package/dist/{chunk-7WCLAEFV.js → chunk-A4UJB2MM.js} +37 -27
  30. package/dist/chunk-A4UJB2MM.js.map +1 -0
  31. package/dist/chunk-B3V6TG77.js +41 -0
  32. package/dist/chunk-B3V6TG77.js.map +1 -0
  33. package/dist/chunk-BRM6FVZA.js +302 -0
  34. package/dist/chunk-BRM6FVZA.js.map +1 -0
  35. package/dist/chunk-C5X5AJXK.js +182 -0
  36. package/dist/chunk-C5X5AJXK.js.map +1 -0
  37. package/dist/chunk-CR7U7HAR.js +453 -0
  38. package/dist/chunk-CR7U7HAR.js.map +1 -0
  39. package/dist/{chunk-R3AZOAB5.js → chunk-DYWBUX5Q.js} +29 -123
  40. package/dist/chunk-DYWBUX5Q.js.map +1 -0
  41. package/dist/chunk-E3G7SAYZ.js +3124 -0
  42. package/dist/chunk-E3G7SAYZ.js.map +1 -0
  43. package/dist/chunk-ELCE5SXV.js +359 -0
  44. package/dist/chunk-ELCE5SXV.js.map +1 -0
  45. package/dist/chunk-ERGYJIBB.js +21 -0
  46. package/dist/chunk-ERGYJIBB.js.map +1 -0
  47. package/dist/chunk-FFA2OVOV.js +319 -0
  48. package/dist/chunk-FFA2OVOV.js.map +1 -0
  49. package/dist/chunk-FZCP527Y.js +116 -0
  50. package/dist/chunk-FZCP527Y.js.map +1 -0
  51. package/dist/chunk-GIMRELBW.js +14 -0
  52. package/dist/chunk-GIMRELBW.js.map +1 -0
  53. package/dist/{chunk-6KLX2RH5.js → chunk-H2NJQORO.js} +1069 -79
  54. package/dist/chunk-H2NJQORO.js.map +1 -0
  55. package/dist/chunk-I7IWRQLN.js +1608 -0
  56. package/dist/chunk-I7IWRQLN.js.map +1 -0
  57. package/dist/{chunk-HA46CYQK.js → chunk-IQUCRAT7.js} +792 -537
  58. package/dist/chunk-IQUCRAT7.js.map +1 -0
  59. package/dist/chunk-IWIDV7SB.js +1 -0
  60. package/dist/chunk-IWIDV7SB.js.map +1 -0
  61. package/dist/chunk-J2QWVSQY.js +312 -0
  62. package/dist/chunk-J2QWVSQY.js.map +1 -0
  63. package/dist/chunk-JFNEV4LU.js +2733 -0
  64. package/dist/chunk-JFNEV4LU.js.map +1 -0
  65. package/dist/chunk-JT4JW7BC.js +54 -0
  66. package/dist/chunk-JT4JW7BC.js.map +1 -0
  67. package/dist/chunk-K3HQAKQX.js +24 -0
  68. package/dist/chunk-K3HQAKQX.js.map +1 -0
  69. package/dist/{chunk-C5ZPSSS5.js → chunk-NEXLLTP4.js} +2 -1
  70. package/dist/{chunk-C5ZPSSS5.js.map → chunk-NEXLLTP4.js.map} +1 -1
  71. package/dist/chunk-NZUI76EM.js +371 -0
  72. package/dist/chunk-NZUI76EM.js.map +1 -0
  73. package/dist/{chunk-PEI6RANI.js → chunk-PNY3JKBJ.js} +309 -74
  74. package/dist/chunk-PNY3JKBJ.js.map +1 -0
  75. package/dist/{chunk-IGC6A2ZI.js → chunk-Q5QBEZIQ.js} +777 -246
  76. package/dist/chunk-Q5QBEZIQ.js.map +1 -0
  77. package/dist/chunk-RHREZ7BO.js +11 -0
  78. package/dist/chunk-RHREZ7BO.js.map +1 -0
  79. package/dist/chunk-SCOTPE2I.js +589 -0
  80. package/dist/chunk-SCOTPE2I.js.map +1 -0
  81. package/dist/{chunk-B6WPZSTT.js → chunk-SJZDKVW2.js} +1331 -1163
  82. package/dist/chunk-SJZDKVW2.js.map +1 -0
  83. package/dist/chunk-TMJRG4YC.js +12803 -0
  84. package/dist/chunk-TMJRG4YC.js.map +1 -0
  85. package/dist/chunk-TMYGL6X5.js +742 -0
  86. package/dist/chunk-TMYGL6X5.js.map +1 -0
  87. package/dist/chunk-UGLEYEMP.js +33 -0
  88. package/dist/chunk-UGLEYEMP.js.map +1 -0
  89. package/dist/chunk-UK4TINKT.js +27 -0
  90. package/dist/chunk-UK4TINKT.js.map +1 -0
  91. package/dist/chunk-UTRTG6LH.js +220 -0
  92. package/dist/chunk-UTRTG6LH.js.map +1 -0
  93. package/dist/chunk-WEHMPOXK.js +39 -0
  94. package/dist/chunk-WEHMPOXK.js.map +1 -0
  95. package/dist/chunk-WRHIZYZF.js +988 -0
  96. package/dist/chunk-WRHIZYZF.js.map +1 -0
  97. package/dist/{chunk-HUIKIDM5.js → chunk-WUISZ3WU.js} +223 -115
  98. package/dist/chunk-WUISZ3WU.js.map +1 -0
  99. package/dist/chunk-XCHWDJ22.js +107 -0
  100. package/dist/chunk-XCHWDJ22.js.map +1 -0
  101. package/dist/chunk-XOAMRDDK.js +481 -0
  102. package/dist/chunk-XOAMRDDK.js.map +1 -0
  103. package/dist/chunk-XUW2UWQM.js +299 -0
  104. package/dist/chunk-XUW2UWQM.js.map +1 -0
  105. package/dist/{chunk-KCGXPP5V.js → chunk-Y2PRMYLC.js} +11 -6
  106. package/dist/chunk-Y2PRMYLC.js.map +1 -0
  107. package/dist/chunk-YBXQDQFX.js +1772 -0
  108. package/dist/chunk-YBXQDQFX.js.map +1 -0
  109. package/dist/{chunk-KZ73RL76.js → chunk-YQEAA6LT.js} +7 -3
  110. package/dist/chunk-YQEAA6LT.js.map +1 -0
  111. package/dist/chunk-YV4L3ILF.js +9 -0
  112. package/dist/chunk-YV4L3ILF.js.map +1 -0
  113. package/dist/{chunk-LLOLUHVG.js → chunk-YWFG7ZX7.js} +1358 -2746
  114. package/dist/chunk-YWFG7ZX7.js.map +1 -0
  115. package/dist/chunk-ZYRGEKWS.js +216 -0
  116. package/dist/chunk-ZYRGEKWS.js.map +1 -0
  117. package/dist/client.d.ts +7 -4
  118. package/dist/clipboard.js +1 -0
  119. package/dist/commands/types.d.ts +2 -0
  120. package/dist/components/anthropic-mark.d.ts +3 -0
  121. package/dist/components/approval-surface.d.ts +15 -0
  122. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  123. package/dist/components/artifacts/artifact-sandbox.d.ts +27 -0
  124. package/dist/components/artifacts/artifact-surface.d.ts +3 -1
  125. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  126. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  127. package/dist/components/artifacts/document-editor.d.ts +4 -2
  128. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  129. package/dist/components/artifacts/editable-artifact-view.d.ts +46 -0
  130. package/dist/components/artifacts/editable-document.d.ts +1 -1
  131. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  132. package/dist/components/artifacts/editable-spreadsheet.d.ts +2 -1
  133. package/dist/components/artifacts/index.d.ts +8 -1
  134. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  135. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  136. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  137. package/dist/components/artifacts/published-html-artifact-frame.d.ts +48 -3
  138. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  139. package/dist/components/artifacts/site-view.d.ts +23 -0
  140. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  141. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  142. package/dist/components/browser-select-control.d.ts +16 -0
  143. package/dist/components/browser-viewer.d.ts +10 -1
  144. package/dist/components/chat-composer.d.ts +21 -3
  145. package/dist/components/child-session-link.d.ts +5 -0
  146. package/dist/components/claude-mark.d.ts +3 -0
  147. package/dist/components/code-editor.d.ts +1 -4
  148. package/dist/components/composer.d.ts +45 -4
  149. package/dist/components/computer-viewer.d.ts +4 -1
  150. package/dist/components/copy-button.d.ts +3 -1
  151. package/dist/components/desktop-viewer.d.ts +1 -1
  152. package/dist/components/enrollment-consent.d.ts +6 -3
  153. package/dist/components/file-browser.d.ts +10 -1
  154. package/dist/components/fleet-tile.d.ts +2 -2
  155. package/dist/components/grok-mark.d.ts +26 -0
  156. package/dist/components/human-input-form.d.ts +21 -2
  157. package/dist/components/human-input-surface.d.ts +6 -3
  158. package/dist/components/machine-card.d.ts +4 -1
  159. package/dist/components/machines/machine-detail.d.ts +4 -1
  160. package/dist/components/machines/machine-operation-policy.d.ts +11 -0
  161. package/dist/components/machines-dashboard.d.ts +3 -1
  162. package/dist/components/markdown-table-layout.d.ts +12 -0
  163. package/dist/components/markdown.d.ts +47 -3
  164. package/dist/components/message-timeline.d.ts +72 -9
  165. package/dist/components/model-mark.d.ts +29 -0
  166. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  167. package/dist/components/model-policy-picker.d.ts +62 -13
  168. package/dist/components/open-geni-chat.d.ts +55 -0
  169. package/dist/components/open-geni-links.d.ts +68 -0
  170. package/dist/components/openrouter-mark.d.ts +6 -0
  171. package/dist/components/pierre-file.d.ts +1 -1
  172. package/dist/components/preview-loading.d.ts +2 -0
  173. package/dist/components/queue-item-content.d.ts +9 -0
  174. package/dist/components/sandbox-files.d.ts +13 -2
  175. package/dist/components/sandbox-workspace.d.ts +43 -3
  176. package/dist/components/session-capability-frame.d.ts +35 -0
  177. package/dist/components/session-chrome.d.ts +66 -8
  178. package/dist/components/session-commands-panel.d.ts +6 -0
  179. package/dist/components/session-commands.d.ts +6 -0
  180. package/dist/components/session-connection-request.d.ts +8 -0
  181. package/dist/components/session-conversation.d.ts +86 -0
  182. package/dist/components/session-list.d.ts +36 -0
  183. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  184. package/dist/components/timeline-anchor.d.ts +24 -0
  185. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  186. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  187. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  188. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  189. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  190. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  191. package/dist/components/timeline-annotations.d.ts +13 -3
  192. package/dist/components/timeline-reading-progress.d.ts +11 -0
  193. package/dist/components/timeline-search.d.ts +34 -0
  194. package/dist/components/timeline-settlement.d.ts +16 -0
  195. package/dist/components/tip-follow.d.ts +16 -0
  196. package/dist/components/usage-limit-notice.d.ts +49 -0
  197. package/dist/components/usage-member-list.d.ts +91 -0
  198. package/dist/components/usage-meter.d.ts +73 -0
  199. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  200. package/dist/components/user-message-body.d.ts +10 -1
  201. package/dist/components/workspace-dock.d.ts +6 -2
  202. package/dist/composer.d.ts +5 -4
  203. package/dist/composer.js +15 -9
  204. package/dist/computer-viewer-ENHVAZ2Q.js +19 -0
  205. package/dist/computer-viewer-ENHVAZ2Q.js.map +1 -0
  206. package/dist/connect-account-identity.d.ts +8 -0
  207. package/dist/connect-accounts.d.ts +15 -0
  208. package/dist/connect-chooser.d.ts +18 -0
  209. package/dist/connect-panel.d.ts +18 -0
  210. package/dist/connect-setup.d.ts +16 -0
  211. package/dist/connect.d.ts +21 -0
  212. package/dist/connect.js +2129 -0
  213. package/dist/connect.js.map +1 -0
  214. package/dist/connection-catalog.d.ts +38 -0
  215. package/dist/connection-discovery.d.ts +12 -0
  216. package/dist/connection-installed.d.ts +17 -0
  217. package/dist/connection-logo.d.ts +9 -0
  218. package/dist/connection-service-logo.d.ts +8 -0
  219. package/dist/connection-service-presentation.d.ts +13 -0
  220. package/dist/connection-skeleton.d.ts +5 -0
  221. package/dist/connection-type-picker.d.ts +6 -0
  222. package/dist/conversation-timeline.d.ts +5 -0
  223. package/dist/desktop.d.ts +7 -0
  224. package/dist/desktop.js +26 -0
  225. package/dist/desktop.js.map +1 -0
  226. package/dist/device-authorization.d.ts +23 -0
  227. package/dist/diffs.d.ts +8 -0
  228. package/dist/diffs.js +14 -0
  229. package/dist/diffs.js.map +1 -0
  230. package/dist/discovery-cache.d.ts +5 -0
  231. package/dist/editor.d.ts +7 -0
  232. package/dist/editor.js +21 -0
  233. package/dist/editor.js.map +1 -0
  234. package/dist/embedded-session-client.d.ts +23 -0
  235. package/dist/file-node-visibility.d.ts +15 -0
  236. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-YZ3ZKWMM.js} +2 -1
  237. package/dist/fleet-decision-row-YZ3ZKWMM.js.map +1 -0
  238. package/dist/hooks/channel-cache.d.ts +23 -0
  239. package/dist/hooks/latest-question.d.ts +25 -0
  240. package/dist/hooks/shared-machines-list.d.ts +14 -0
  241. package/dist/hooks/use-attached-browsers.d.ts +2 -1
  242. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  243. package/dist/hooks/use-browser-session.d.ts +12 -1
  244. package/dist/hooks/use-channels.d.ts +1 -0
  245. package/dist/hooks/use-codex-accounts.d.ts +25 -7
  246. package/dist/hooks/use-composer.d.ts +45 -9
  247. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  248. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  249. package/dist/hooks/use-computer-session.d.ts +2 -0
  250. package/dist/hooks/use-connect.d.ts +22 -0
  251. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  252. package/dist/hooks/use-file-attachments.d.ts +21 -2
  253. package/dist/hooks/use-machine-chip.d.ts +3 -3
  254. package/dist/hooks/use-machines.d.ts +19 -1
  255. package/dist/hooks/use-sandbox-files.d.ts +5 -1
  256. package/dist/hooks/use-session-background-commands.d.ts +14 -0
  257. package/dist/hooks/use-session-events.d.ts +30 -8
  258. package/dist/hooks/use-session-lineage.d.ts +4 -0
  259. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  260. package/dist/hooks/use-session.d.ts +6 -0
  261. package/dist/hooks/use-turn-queue.d.ts +12 -0
  262. package/dist/hooks/use-usage.d.ts +40 -0
  263. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  264. package/dist/hooks/use-workspace-sessions.d.ts +27 -5
  265. package/dist/human-input.d.ts +3 -1
  266. package/dist/identity-link-accounts.d.ts +11 -0
  267. package/dist/identity-link-consent.d.ts +18 -0
  268. package/dist/index.d.ts +60 -17
  269. package/dist/index.js +2237 -6200
  270. package/dist/index.js.map +1 -1
  271. package/dist/interaction.d.ts +1 -1
  272. package/dist/interaction.js +35 -184
  273. package/dist/interaction.js.map +1 -1
  274. package/dist/latest-question-755OW5DS.js +117 -0
  275. package/dist/latest-question-755OW5DS.js.map +1 -0
  276. package/dist/lib/error-message.d.ts +7 -0
  277. package/dist/lib/format.d.ts +36 -2
  278. package/dist/lib/host-theme.d.ts +70 -0
  279. package/dist/lib/interaction-errors.d.ts +6 -0
  280. package/dist/lib/menu-styles.d.ts +22 -0
  281. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  282. package/dist/lib/workbench-peers.d.ts +36 -0
  283. package/dist/lib/xterm-theme.d.ts +7 -5
  284. package/dist/machines.d.ts +4 -2
  285. package/dist/machines.js +14 -4
  286. package/dist/markdown-table-layout-QXSLK4BY.js +106 -0
  287. package/dist/markdown-table-layout-QXSLK4BY.js.map +1 -0
  288. package/dist/mcp-connection-status.d.ts +14 -0
  289. package/dist/model-policy-picker-menu-PWRI7R2X.js +14 -0
  290. package/dist/model-policy-picker-menu-PWRI7R2X.js.map +1 -0
  291. package/dist/model-policy.d.ts +19 -3
  292. package/dist/model-policy.js +9 -1
  293. package/dist/older-history.d.ts +30 -0
  294. package/dist/platform-activity-row-627BFZ46.js +182 -0
  295. package/dist/platform-activity-row-627BFZ46.js.map +1 -0
  296. package/dist/plugin-details.d.ts +14 -0
  297. package/dist/plugin-discovery.d.ts +25 -0
  298. package/dist/provider.d.ts +13 -1
  299. package/dist/{queue-surface-implementation-2KVJTYXH.js → queue-surface-implementation-ZHFI5JBP.js} +131 -44
  300. package/dist/queue-surface-implementation-ZHFI5JBP.js.map +1 -0
  301. package/dist/realtime/realtime-control.d.ts +10 -3
  302. package/dist/realtime.js +229 -83
  303. package/dist/realtime.js.map +1 -1
  304. package/dist/sandbox-files-BBC47SLD.js +20 -0
  305. package/dist/sandbox-files-BBC47SLD.js.map +1 -0
  306. package/dist/session-auth-recommendation.d.ts +5 -0
  307. package/dist/session-capability-policy.d.ts +12 -0
  308. package/dist/session-ui.d.ts +30 -2
  309. package/dist/session-ui.js +85 -7
  310. package/dist/session-ui.js.map +1 -1
  311. package/dist/session.d.ts +8 -2
  312. package/dist/session.js +30 -19
  313. package/dist/sites-ui.d.ts +34 -0
  314. package/dist/sites.d.ts +3 -0
  315. package/dist/sites.js +11 -0
  316. package/dist/sites.js.map +1 -0
  317. package/dist/skill-discovery.d.ts +47 -0
  318. package/dist/terminal.d.ts +8 -0
  319. package/dist/terminal.js +31 -0
  320. package/dist/terminal.js.map +1 -0
  321. package/dist/timeline/activity-rail.d.ts +11 -2
  322. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  323. package/dist/timeline/compaction-copy.d.ts +10 -0
  324. package/dist/timeline/entrance.d.ts +13 -1
  325. package/dist/timeline/genie-loading.d.ts +34 -0
  326. package/dist/timeline/index.d.ts +6 -2
  327. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  328. package/dist/timeline/platform-activity-row.d.ts +14 -0
  329. package/dist/timeline/presented-image.d.ts +6 -0
  330. package/dist/timeline/projection.d.ts +31 -2
  331. package/dist/timeline/registry.d.ts +2 -0
  332. package/dist/timeline/retained-image.d.ts +18 -0
  333. package/dist/timeline/rolling-activity.d.ts +11 -0
  334. package/dist/timeline/screenshot-lightbox.d.ts +16 -1
  335. package/dist/timeline/shared.d.ts +8 -3
  336. package/dist/timeline/startup-preference.d.ts +3 -0
  337. package/dist/timeline/startup-timings.d.ts +4 -0
  338. package/dist/timeline/tool-display-name.d.ts +2 -1
  339. package/dist/timeline/turn-summary.d.ts +32 -3
  340. package/dist/timeline/types.d.ts +141 -7
  341. package/dist/timeline-annotation-markers-GNDHTGBD.js +165 -0
  342. package/dist/timeline-annotation-markers-GNDHTGBD.js.map +1 -0
  343. package/dist/timeline-annotation-selection-DMLMM2TX.js +241 -0
  344. package/dist/timeline-annotation-selection-DMLMM2TX.js.map +1 -0
  345. package/dist/timeline-annotations-dialog-ELRDBHTS.js +273 -0
  346. package/dist/timeline-annotations-dialog-ELRDBHTS.js.map +1 -0
  347. package/dist/types/machines.d.ts +2 -2
  348. package/dist/usage/allowance-copy.d.ts +25 -0
  349. package/dist/usage/summary.d.ts +35 -0
  350. package/dist/usage.d.ts +13 -0
  351. package/dist/usage.js +1074 -0
  352. package/dist/usage.js.map +1 -0
  353. package/package.json +44 -4
  354. package/src/accounts.tsx +1072 -0
  355. package/src/approvals.ts +8 -1
  356. package/src/artifacts.ts +42 -0
  357. package/src/assets/README.md +8 -0
  358. package/src/assets/gmail.ico +0 -0
  359. package/src/assets/outlook.ico +0 -0
  360. package/src/capability-catalog-row.tsx +94 -0
  361. package/src/capability-logo-fallback.ts +22 -0
  362. package/src/client.ts +22 -13
  363. package/src/commands/registry.ts +18 -15
  364. package/src/commands/types.ts +2 -0
  365. package/src/components/anthropic-mark.tsx +10 -0
  366. package/src/components/approval-surface.tsx +171 -37
  367. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  368. package/src/components/artifacts/artifact-sandbox.tsx +185 -0
  369. package/src/components/artifacts/artifact-surface.tsx +39 -19
  370. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  371. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  372. package/src/components/artifacts/document-editor.tsx +141 -16
  373. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  374. package/src/components/artifacts/editable-artifact-view.tsx +187 -0
  375. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  376. package/src/components/artifacts/editable-document.tsx +37 -36
  377. package/src/components/artifacts/editable-presentation.tsx +36 -18
  378. package/src/components/artifacts/editable-spreadsheet.tsx +5 -2
  379. package/src/components/artifacts/index.ts +44 -0
  380. package/src/components/artifacts/inline-html-document.ts +24 -0
  381. package/src/components/artifacts/latest-task-runner.ts +49 -0
  382. package/src/components/artifacts/presentation-editor.tsx +323 -67
  383. package/src/components/artifacts/published-html-artifact-frame.tsx +338 -5
  384. package/src/components/artifacts/session-artifact-viewer.tsx +376 -0
  385. package/src/components/artifacts/site-view.tsx +116 -0
  386. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  387. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  388. package/src/components/artifacts/spreadsheet-grid.tsx +12 -13
  389. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  390. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  391. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  392. package/src/components/browser-select-control.tsx +312 -0
  393. package/src/components/browser-viewer.tsx +1054 -314
  394. package/src/components/chat-composer.tsx +131 -85
  395. package/src/components/child-session-link.tsx +27 -0
  396. package/src/components/claude-mark.tsx +10 -0
  397. package/src/components/code-editor.tsx +13 -16
  398. package/src/components/composer-transcription-control.tsx +7 -5
  399. package/src/components/composer.tsx +376 -49
  400. package/src/components/computer-viewer.tsx +1041 -329
  401. package/src/components/copy-button.tsx +13 -5
  402. package/src/components/desktop-viewer.tsx +1 -1
  403. package/src/components/enrollment-consent.tsx +65 -7
  404. package/src/components/enrollment-device-flow.tsx +1 -1
  405. package/src/components/file-browser.tsx +158 -34
  406. package/src/components/fleet-tile.tsx +8 -16
  407. package/src/components/generated-video-player.tsx +4 -2
  408. package/src/components/grok-mark.tsx +33 -0
  409. package/src/components/human-input-form.tsx +455 -114
  410. package/src/components/human-input-surface.tsx +18 -7
  411. package/src/components/interaction-intervention-banner.tsx +2 -2
  412. package/src/components/machine-card.tsx +119 -4
  413. package/src/components/machine-dock-bar.tsx +1 -1
  414. package/src/components/machine-input-display.ts +23 -2
  415. package/src/components/machines/machine-detail.tsx +52 -2
  416. package/src/components/machines/machine-operation-policy.tsx +179 -0
  417. package/src/components/machines-dashboard.tsx +8 -17
  418. package/src/components/markdown-table-layout.ts +132 -0
  419. package/src/components/markdown.tsx +473 -44
  420. package/src/components/message-timeline.tsx +2498 -663
  421. package/src/components/model-mark.tsx +90 -0
  422. package/src/components/model-picker.tsx +15 -4
  423. package/src/components/model-policy-picker-menu.tsx +424 -0
  424. package/src/components/model-policy-picker.tsx +337 -381
  425. package/src/components/open-geni-chat.tsx +319 -0
  426. package/src/components/open-geni-links.tsx +179 -0
  427. package/src/components/openrouter-mark.tsx +13 -0
  428. package/src/components/pierre-diff.tsx +41 -16
  429. package/src/components/pierre-file.tsx +36 -11
  430. package/src/components/preview-loading.tsx +154 -0
  431. package/src/components/queue-item-content.ts +14 -0
  432. package/src/components/queue-surface-implementation.tsx +132 -42
  433. package/src/components/queue-surface-state.tsx +3 -1
  434. package/src/components/sandbox-files.tsx +267 -35
  435. package/src/components/sandbox-terminal.tsx +48 -11
  436. package/src/components/sandbox-workspace.tsx +337 -135
  437. package/src/components/session-capability-frame.tsx +192 -0
  438. package/src/components/session-chrome.tsx +1027 -328
  439. package/src/components/session-commands-panel.tsx +126 -0
  440. package/src/components/session-commands.tsx +18 -0
  441. package/src/components/session-connection-request.tsx +97 -0
  442. package/src/components/session-conversation.tsx +512 -0
  443. package/src/components/session-list.tsx +250 -0
  444. package/src/components/session-mcp-capability-card.tsx +680 -0
  445. package/src/components/session-status.tsx +1 -1
  446. package/src/components/timeline-anchor.tsx +119 -0
  447. package/src/components/timeline-annotation-chrome.tsx +196 -0
  448. package/src/components/timeline-annotation-layout.ts +268 -0
  449. package/src/components/timeline-annotation-markers.tsx +185 -0
  450. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  451. package/src/components/timeline-annotation-selection.tsx +106 -54
  452. package/src/components/timeline-annotation-shared.ts +245 -0
  453. package/src/components/timeline-annotations-dialog.tsx +185 -128
  454. package/src/components/timeline-annotations.tsx +189 -45
  455. package/src/components/timeline-reading-progress.ts +80 -0
  456. package/src/components/timeline-search.tsx +168 -0
  457. package/src/components/timeline-settlement.ts +60 -0
  458. package/src/components/tip-follow.ts +70 -7
  459. package/src/components/tooltip.tsx +38 -5
  460. package/src/components/usage-limit-notice.tsx +179 -0
  461. package/src/components/usage-member-list.tsx +792 -0
  462. package/src/components/usage-meter.tsx +382 -0
  463. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  464. package/src/components/user-message-body.tsx +194 -49
  465. package/src/components/workspace-dock.tsx +141 -175
  466. package/src/composer.ts +6 -1
  467. package/src/connect-account-identity.tsx +34 -0
  468. package/src/connect-accounts.tsx +233 -0
  469. package/src/connect-chooser.tsx +336 -0
  470. package/src/connect-panel.tsx +99 -0
  471. package/src/connect-setup.tsx +307 -0
  472. package/src/connect.ts +60 -0
  473. package/src/connection-assets.d.ts +4 -0
  474. package/src/connection-catalog.tsx +162 -0
  475. package/src/connection-discovery.tsx +235 -0
  476. package/src/connection-installed.tsx +51 -0
  477. package/src/connection-logo.tsx +37 -0
  478. package/src/connection-service-logo.tsx +55 -0
  479. package/src/connection-service-presentation.ts +46 -0
  480. package/src/connection-skeleton.tsx +16 -0
  481. package/src/connection-type-picker.tsx +36 -0
  482. package/src/conversation-timeline.ts +92 -0
  483. package/src/desktop.ts +24 -0
  484. package/src/device-authorization.tsx +98 -0
  485. package/src/diffs.ts +16 -0
  486. package/src/discovery-cache.ts +42 -0
  487. package/src/editor.ts +13 -0
  488. package/src/embedded-session-client.ts +104 -0
  489. package/src/file-node-visibility.ts +66 -0
  490. package/src/hooks/channel-cache.ts +104 -0
  491. package/src/hooks/internal.ts +3 -2
  492. package/src/hooks/latest-question.ts +164 -0
  493. package/src/hooks/shared-machines-list.ts +239 -0
  494. package/src/hooks/use-attached-browsers.ts +5 -1
  495. package/src/hooks/use-available-models.ts +20 -14
  496. package/src/hooks/use-browser-frame-stream.ts +25 -3
  497. package/src/hooks/use-browser-session.ts +271 -71
  498. package/src/hooks/use-browser-sessions.ts +7 -1
  499. package/src/hooks/use-channels.ts +32 -10
  500. package/src/hooks/use-codex-accounts.ts +78 -21
  501. package/src/hooks/use-composer.ts +1034 -320
  502. package/src/hooks/use-computer-frame-stream.ts +39 -16
  503. package/src/hooks/use-computer-input-posture.ts +94 -0
  504. package/src/hooks/use-computer-session.ts +110 -32
  505. package/src/hooks/use-computer-sessions.ts +8 -1
  506. package/src/hooks/use-connect.ts +23 -0
  507. package/src/hooks/use-desktop-stream.ts +19 -28
  508. package/src/hooks/use-file-attachments.ts +118 -10
  509. package/src/hooks/use-goal.ts +36 -9
  510. package/src/hooks/use-human-input.ts +31 -4
  511. package/src/hooks/use-last-started-turn-policy.ts +15 -13
  512. package/src/hooks/use-machine-chip.ts +23 -6
  513. package/src/hooks/use-machines.ts +104 -6
  514. package/src/hooks/use-sandbox-files.ts +253 -150
  515. package/src/hooks/use-sandbox-git.ts +58 -29
  516. package/src/hooks/use-session-background-commands.ts +67 -0
  517. package/src/hooks/use-session-capabilities.ts +21 -2
  518. package/src/hooks/use-session-events.ts +759 -433
  519. package/src/hooks/use-session-lineage.ts +28 -6
  520. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  521. package/src/hooks/use-session.ts +75 -16
  522. package/src/hooks/use-slash-commands.ts +6 -11
  523. package/src/hooks/use-turn-queue.ts +113 -13
  524. package/src/hooks/use-usage.ts +100 -0
  525. package/src/hooks/use-voice-input.ts +12 -1
  526. package/src/hooks/use-workspace-capture.ts +3 -2
  527. package/src/hooks/use-workspace-edit.ts +23 -5
  528. package/src/hooks/use-workspace-sessions.ts +99 -11
  529. package/src/human-input.ts +12 -1
  530. package/src/identity-link-accounts.tsx +148 -0
  531. package/src/identity-link-consent.tsx +192 -0
  532. package/src/index.ts +157 -12
  533. package/src/interaction.ts +1 -0
  534. package/src/lib/error-message.ts +37 -0
  535. package/src/lib/format.ts +150 -14
  536. package/src/lib/host-theme.ts +511 -0
  537. package/src/lib/interaction-errors.ts +33 -0
  538. package/src/lib/menu-styles.ts +44 -0
  539. package/src/lib/pierre-diffs-loader.ts +53 -0
  540. package/src/lib/workbench-peers.ts +62 -0
  541. package/src/lib/xterm-theme.ts +23 -21
  542. package/src/machines.ts +9 -1
  543. package/src/mcp-connection-status.ts +35 -0
  544. package/src/model-policy.ts +223 -69
  545. package/src/older-history.ts +87 -0
  546. package/src/plugin-details.tsx +185 -0
  547. package/src/plugin-discovery.tsx +196 -0
  548. package/src/provider.tsx +55 -14
  549. package/src/realtime/dropdown-menu.tsx +19 -12
  550. package/src/realtime/realtime-control.tsx +274 -60
  551. package/src/session-auth-recommendation.ts +48 -0
  552. package/src/session-capability-policy.ts +83 -0
  553. package/src/session-context.ts +1 -0
  554. package/src/session-ui.ts +66 -2
  555. package/src/session.ts +18 -1
  556. package/src/sites-ui.tsx +402 -0
  557. package/src/sites.ts +3 -0
  558. package/src/skill-discovery.tsx +208 -0
  559. package/src/terminal.ts +26 -0
  560. package/src/timeline/activity-rail.tsx +171 -80
  561. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  562. package/src/timeline/compaction-copy.ts +42 -0
  563. package/src/timeline/entrance.tsx +28 -3
  564. package/src/timeline/fleet-decision-projection.ts +2 -1
  565. package/src/timeline/fleet-decision-row.tsx +1 -0
  566. package/src/timeline/genie-loading.tsx +136 -0
  567. package/src/timeline/index.ts +11 -0
  568. package/src/timeline/knowledge-receipt.tsx +100 -0
  569. package/src/timeline/parsers.ts +2 -2
  570. package/src/timeline/platform-activity-row.tsx +216 -0
  571. package/src/timeline/presented-image.ts +49 -0
  572. package/src/timeline/projection.ts +1600 -84
  573. package/src/timeline/registry.ts +15 -3
  574. package/src/timeline/retained-image.ts +97 -0
  575. package/src/timeline/rolling-activity.tsx +92 -0
  576. package/src/timeline/screenshot-lightbox.tsx +115 -17
  577. package/src/timeline/shared.tsx +47 -15
  578. package/src/timeline/startup-preference.ts +33 -0
  579. package/src/timeline/startup-timings.tsx +145 -0
  580. package/src/timeline/tool-display-name.ts +8 -6
  581. package/src/timeline/tool-renderers.tsx +497 -128
  582. package/src/timeline/turn-summary.tsx +208 -44
  583. package/src/timeline/types.ts +186 -7
  584. package/src/types/machines.ts +10 -0
  585. package/src/usage/allowance-copy.ts +64 -0
  586. package/src/usage/summary.ts +93 -0
  587. package/src/usage.ts +50 -0
  588. package/styles/compiled.css +2098 -757
  589. package/styles/connect.css +284 -0
  590. package/styles/connect.d.ts +1 -0
  591. package/styles/effective-tokens.css +1 -0
  592. package/styles/index.css +201 -9
  593. package/styles/responsive.css +27 -1
  594. package/styles/session-capability.css +44 -0
  595. package/styles/tokens.css +135 -65
  596. package/dist/chunk-5UQPNLIO.js.map +0 -1
  597. package/dist/chunk-6KLX2RH5.js.map +0 -1
  598. package/dist/chunk-7WCLAEFV.js.map +0 -1
  599. package/dist/chunk-B6WPZSTT.js.map +0 -1
  600. package/dist/chunk-FK6VG4LL.js +0 -90
  601. package/dist/chunk-FK6VG4LL.js.map +0 -1
  602. package/dist/chunk-HA46CYQK.js.map +0 -1
  603. package/dist/chunk-HUIKIDM5.js.map +0 -1
  604. package/dist/chunk-IGC6A2ZI.js.map +0 -1
  605. package/dist/chunk-KCGXPP5V.js.map +0 -1
  606. package/dist/chunk-KZ73RL76.js.map +0 -1
  607. package/dist/chunk-LAKLF4PA.js +0 -141
  608. package/dist/chunk-LAKLF4PA.js.map +0 -1
  609. package/dist/chunk-LLOLUHVG.js.map +0 -1
  610. package/dist/chunk-MKPIAGVL.js +0 -465
  611. package/dist/chunk-MKPIAGVL.js.map +0 -1
  612. package/dist/chunk-PEI6RANI.js.map +0 -1
  613. package/dist/chunk-R3AZOAB5.js.map +0 -1
  614. package/dist/chunk-WSK7G5LE.js +0 -170
  615. package/dist/chunk-WSK7G5LE.js.map +0 -1
  616. package/dist/chunk-XBZWOM2K.js +0 -218
  617. package/dist/chunk-XBZWOM2K.js.map +0 -1
  618. package/dist/chunk-Y7OEDUJ5.js +0 -8810
  619. package/dist/chunk-Y7OEDUJ5.js.map +0 -1
  620. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  621. package/dist/hooks/use-packs.d.ts +0 -32
  622. package/dist/interactive-workbench-viewers-TOHBXJEE.js +0 -15
  623. package/dist/queue-surface-implementation-2KVJTYXH.js.map +0 -1
  624. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  625. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  626. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  627. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  628. package/src/hooks/use-packs.ts +0 -157
  629. /package/dist/{interactive-workbench-viewers-TOHBXJEE.js.map → browser-viewer-GTR5XQ7X.js.map} +0 -0
@@ -1,4 +1,4 @@
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,
@@ -14,15 +14,18 @@ import { CopyButton } from "../components/copy-button";
14
14
  import { cn } from "../lib/cn";
15
15
  import { MOTION_INSPECT_SCALE } from "../lib/motion-inspect";
16
16
  import { useForcedDefaultOpen } from "./disclosure-context";
17
+ import { useTimelineSearchReveal } from "../components/timeline-search";
17
18
  import { useEntranceAnimation } from "./entrance";
18
19
  import { useFoldMemory, type FoldRestingState } from "./fold-memory";
19
20
  import {
20
21
  applyPatchOpsFromToolItem,
21
22
  isApplyPatch,
22
23
  mediaPreviewFact,
24
+ retainedScreenshotMetadata,
23
25
  screenshotDataUrl,
24
26
  } from "./parsers";
25
27
  import { rawTypeOf } from "./registry";
28
+ import { mcpToolLeaf } from "./tool-display-name";
26
29
  import type { ActivityItem, ToolCallItem, TurnOutcome } from "./types";
27
30
  export type { TurnOutcome } from "./types";
28
31
 
@@ -115,16 +118,38 @@ type ReplaceTurnSummaryFacets = Readonly<{
115
118
  export type TurnSummaryFacetConfiguration = ModifyTurnSummaryFacets | ReplaceTurnSummaryFacets;
116
119
 
117
120
  export type TurnSummaryOptions = Readonly<{
121
+ /**
122
+ * Readable per-turn presentation. Assistant progress stays fully formatted;
123
+ * each turn has its own Working / Worked row and rolling latest step.
124
+ * Ordinary tip-follow and manual scrolling are unchanged.
125
+ */
126
+ rolling?: boolean;
118
127
  facets?: TurnSummaryFacetConfiguration;
119
128
  }>;
120
129
 
130
+ /**
131
+ * Exchange status shown in place of the plain facet line. `working` and
132
+ * `waiting` run a live clock from `since`; `worked` shows the settled span.
133
+ */
134
+ export type TurnSummaryStatus = Readonly<{
135
+ kind: "working" | "waiting" | "worked";
136
+ /** Replaces the default "Working" / "Waiting" wording. */
137
+ label?: string | undefined;
138
+ /** Live clock start for `working` and `waiting`. */
139
+ since?: string | undefined;
140
+ /** Settled span for `worked`. */
141
+ durationMs?: number | undefined;
142
+ /** Live step preview under the row while it is collapsed. */
143
+ preview?: ReactNode;
144
+ }>;
145
+
121
146
  export type TurnSummaryProps = {
122
147
  /** The activity items in the turn (used only to compute the facet counts). */
123
148
  items: ActivityItem[];
124
149
  /**
125
150
  * 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.
151
+ * turn, which folds neutrally. Only unfinished activity inside this summary
152
+ * animates; the parent turn may still be composing a response elsewhere.
128
153
  */
129
154
  outcome?: TurnOutcome | undefined;
130
155
  /** A short failure reason shown inline on a failed chip (never hidden). */
@@ -133,6 +158,7 @@ export type TurnSummaryProps = {
133
158
  durationMs?: number | undefined;
134
159
  /** Start expanded. */
135
160
  defaultOpen?: boolean | undefined;
161
+ liveHeader?: ReactNode;
136
162
  /**
137
163
  * A nested fold — a cluster or sub-turn INSIDE an already-expanded turn. It
138
164
  * drops the bordered/filled chip and renders as a plain disclosure node on the
@@ -170,6 +196,11 @@ export type TurnSummaryProps = {
170
196
  copyText?: string | undefined;
171
197
  /** Adjacent compaction landmark count for the secondary chip facet. */
172
198
  contextCompactionCount?: number | undefined;
199
+ /**
200
+ * Exchange status line (compact progress presentation). Replaces the state
201
+ * marker and the duration facet; a settled `worked` row reads as a separator.
202
+ */
203
+ status?: TurnSummaryStatus | undefined;
173
204
  /** The rendered activity rail revealed on expand. */
174
205
  children: ReactNode;
175
206
  };
@@ -187,17 +218,20 @@ export function TurnSummary({
187
218
  failureText,
188
219
  durationMs,
189
220
  defaultOpen,
221
+ liveHeader,
190
222
  bare,
191
223
  facets: facetConfiguration,
192
224
  settleFold,
193
225
  foldKey,
194
226
  copyText,
195
227
  contextCompactionCount,
228
+ status,
196
229
  children,
197
230
  }: TurnSummaryProps) {
198
231
  // An explicit `defaultOpen` always wins; otherwise an ancestor may seed it
199
232
  // (screenshot instrumentation); otherwise the turn starts folded.
200
233
  const forcedDefaultOpen = useForcedDefaultOpen();
234
+ const searchReveal = useTimelineSearchReveal();
201
235
  const foldMemory = useFoldMemory();
202
236
  // A remembered resting state outranks author defaults: a fold that already
203
237
  // finished its settle collapse (or that the reader closed) mounts closed
@@ -213,6 +247,13 @@ export function TurnSummary({
213
247
  const initialSettle = Boolean(settleFold) && !restingOpen && remembered === undefined;
214
248
  const [settling, setSettling] = useState(initialSettle);
215
249
  const [open, setOpen] = useState(initialSettle ? true : restingOpen);
250
+ const readerOwnsOpen = useRef(remembered !== undefined);
251
+ useEffect(() => {
252
+ // Readable work can produce primary media or fail after mounting. Reveal
253
+ // that output without remounting existing tool controls, while preserving
254
+ // every explicit reader-owned open/closed choice.
255
+ if (status && defaultOpen && remembered === undefined && !readerOwnsOpen.current) setOpen(true);
256
+ }, [status, defaultOpen, remembered]);
216
257
  // While true, a close uses the slow settle collapse. Cleared after that
217
258
  // auto-collapse finishes (or on first user interaction) so later manual
218
259
  // closes are the fast disclose pair.
@@ -311,7 +352,20 @@ export function TurnSummary({
311
352
  }
312
353
  // oxlint-disable-next-line react-hooks/exhaustive-deps
313
354
  }, [settleFold]);
355
+ useEffect(() => {
356
+ if (!searchReveal) return;
357
+ clearSettleTimers();
358
+ settleArmedRef.current = false;
359
+ setSettling(false);
360
+ setSettlePhase(false);
361
+ setNestSuppressLatch(false);
362
+ setOpen(true);
363
+ rememberResting("open");
364
+ // Search is an explicit, persistent reader action, not a new fold default.
365
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
366
+ }, [searchReveal]);
314
367
  const onOpenChange = (next: boolean) => {
368
+ readerOwnsOpen.current = true;
315
369
  // The reader took over — cancel the pending auto-collapse for good.
316
370
  // Clear settle CSS phase immediately (fast collapse) but keep nest latch
317
371
  // through the disclose window so nested chips stay force-open mid-close
@@ -364,9 +418,25 @@ export function TurnSummary({
364
418
  () => resolveTurnSummaryFacets(facetConfiguration),
365
419
  [facetConfiguration],
366
420
  );
421
+ const statusKind = status?.kind;
367
422
  const facets = useMemo(
368
423
  () =>
369
424
  facetDefinitions.flatMap((facet) => {
425
+ // The status line owns elapsed time; a live line keeps only the step
426
+ // count (plus host facets) so it stays one short line.
427
+ if (
428
+ statusKind &&
429
+ (facet.id === "duration" ||
430
+ (facet === BUILT_IN_TURN_SUMMARY_FACETS[0] &&
431
+ context.items.every(
432
+ (item) => item.kind === "startup-phase" || item.kind === "agent-message",
433
+ )) ||
434
+ (statusKind !== "worked" &&
435
+ facet.id !== "steps" &&
436
+ BUILT_IN_TURN_SUMMARY_FACET_IDS.includes(facet.id as BuiltInTurnSummaryFacetId)))
437
+ ) {
438
+ return [];
439
+ }
370
440
  try {
371
441
  const result = facet.summarize(context);
372
442
  return result && hasFacetContent(result.content) ? [{ facet, result }] : [];
@@ -376,7 +446,7 @@ export function TurnSummary({
376
446
  return [];
377
447
  }
378
448
  }),
379
- [context, facetDefinitions],
449
+ [context, facetDefinitions, statusKind],
380
450
  );
381
451
 
382
452
  // Live open shell: keep the chip in-flow (so settle never inserts layout)
@@ -389,6 +459,8 @@ export function TurnSummary({
389
459
  // Nested chips stay force-open for this window (stable height).
390
460
  const settleChrome = settling || settlePhase || nestSuppressLatch;
391
461
 
462
+ const statusLine = status ? turnSummaryStatusLine(status) : null;
463
+
392
464
  // Copy only on the collapsed chip — when open, per-message copy is enough
393
465
  // and a second control on the summary row felt crowded / off.
394
466
  const copyable = Boolean(
@@ -399,6 +471,7 @@ export function TurnSummary({
399
471
  <TurnSettleChromeContext.Provider value={settleChrome}>
400
472
  <div className={cn(copyable && "group/copy relative")}>
401
473
  <Collapsible.Root
474
+ data-og-work-section={bare ? undefined : ""}
402
475
  open={open}
403
476
  onOpenChange={onOpenChange}
404
477
  // History-only entrance. Never toggle this on after mount — see
@@ -406,7 +479,12 @@ export function TurnSummary({
406
479
  className={allowEnterAnimation && !liveShell ? "animate-og-enter" : undefined}
407
480
  >
408
481
  <Collapsible.Trigger
482
+ data-og-work-header={bare ? "nested" : "outer"}
409
483
  className={cn(
484
+ // The section, not the viewport, bounds this sticky row. Content
485
+ // is a sibling: its disclosure overflow never traps the header.
486
+ // Nested rail folds must never stack additional sticky headers.
487
+ !bare && open && "sticky top-[var(--og-work-header-top,0px)] z-10 bg-og-bg",
410
488
  settling && "animate-og-settle-chip",
411
489
  // Top-level turn fold and (when used) nested cluster folds render as
412
490
  // FLAT rail rows — chevron + glyph + facets on the page background, no
@@ -428,6 +506,8 @@ export function TurnSummary({
428
506
  ? "hover:bg-og-status-failed/[0.06] hover:text-og-fg"
429
507
  : "hover:bg-og-surface-1 hover:text-og-fg",
430
508
  liveShell && "text-og-fg-subtle",
509
+ // Phones hide the hint, so keep the copy control clear of the separator.
510
+ status && copyable && "max-sm:pr-10",
431
511
  )}
432
512
  >
433
513
  {/* Disclosure grammar matches the rows: chevron leads (far left), then any
@@ -443,7 +523,9 @@ export function TurnSummary({
443
523
  />
444
524
  {/* Completion is the quiet default and needs no repeated glyph. Failed,
445
525
  cancelled, and still-running folds retain a visible state marker. */}
446
- {outcome === "complete" ? null : (
526
+ {status ||
527
+ outcome === "complete" ||
528
+ (!outcome && (liveHeader || context.settled)) ? null : (
447
529
  <span
448
530
  className={cn(
449
531
  "inline-flex shrink-0 items-center justify-center",
@@ -461,23 +543,30 @@ export function TurnSummary({
461
543
  </span>
462
544
  )}
463
545
  <span
464
- className={cn("min-w-0 flex-1 truncate", bare ? "text-og-sm" : "text-og-fg-muted")}
546
+ className={cn(
547
+ "min-w-0 truncate",
548
+ status?.kind === "worked" ? "shrink" : "flex-1",
549
+ bare ? "text-og-sm" : "text-og-fg-muted",
550
+ )}
465
551
  >
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}
552
+ {statusLine}
553
+ {liveHeader && !open && !status
554
+ ? liveHeader
555
+ : facets.map(({ facet, result }, index) => (
556
+ <FacetRenderBoundary key={facet.id}>
557
+ <>
558
+ {index > 0 || statusLine ? " · " : null}
559
+ <span aria-label={result.ariaLabel} title={result.title}>
560
+ {result.icon ? (
561
+ <span aria-hidden className="mr-1 inline-flex align-[-0.125em]">
562
+ {result.icon}
563
+ </span>
564
+ ) : null}
565
+ {result.content}
474
566
  </span>
475
- ) : null}
476
- {result.content}
477
- </span>
478
- </>
479
- </FacetRenderBoundary>
480
- ))}
567
+ </>
568
+ </FacetRenderBoundary>
569
+ ))}
481
570
  {outcome === "failed" && failureText ? (
482
571
  <span className="text-og-status-failed"> · {failureText}</span>
483
572
  ) : null}
@@ -485,24 +574,28 @@ export function TurnSummary({
485
574
  <span className="text-og-fg-subtle"> · interrupted</span>
486
575
  ) : null}
487
576
  </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
495
- 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",
501
- )}
502
- >
503
- {open ? "hide steps" : "show steps"}
504
- </span>
577
+ {/* A settled exchange reads as a separator above its answer. */}
578
+ {status?.kind === "worked" ? (
579
+ <span aria-hidden className="ml-1 h-px min-w-0 flex-1 bg-og-border" />
580
+ ) : null}
581
+ {status && status.kind !== "worked" && (contextCompactionCount ?? 0) > 0 ? (
582
+ <ShrinkIcon
583
+ className="size-3.5 shrink-0"
584
+ aria-label="Context compacted; expand for details"
585
+ />
586
+ ) : null}
505
587
  </Collapsible.Trigger>
588
+ {status && !open && status.preview ? (
589
+ // Readable progress under the status line; the line above stays
590
+ // the one disclosure control, so a click here is a mouse shortcut.
591
+ <div
592
+ data-og-exchange-preview=""
593
+ className="flex min-w-0 cursor-pointer flex-col gap-0.5 pb-1 pl-6"
594
+ onClick={() => onOpenChange(true)}
595
+ >
596
+ {status.preview ? <div className="min-w-0">{status.preview}</div> : null}
597
+ </div>
598
+ ) : null}
506
599
  <Collapsible.Content
507
600
  {...(nestSuppressLatch ? { forceMount: true as const } : {})}
508
601
  data-og-fold-content=""
@@ -532,6 +625,58 @@ export function TurnSummary({
532
625
  );
533
626
  }
534
627
 
628
+ /**
629
+ * "Working · 2m 14s", "Waiting for 2 agents · 3m 5s", or "Worked for 4m 10s";
630
+ * null when a settled span is too short to state.
631
+ */
632
+ function turnSummaryStatusLine(status: TurnSummaryStatus): ReactNode {
633
+ if (status.kind === "worked") {
634
+ return status.durationMs !== undefined &&
635
+ Number.isFinite(status.durationMs) &&
636
+ status.durationMs >= 1000 ? (
637
+ <span data-og-exchange-status="worked">
638
+ {status.label ?? "Worked for"} {formatElapsed(status.durationMs)}
639
+ </span>
640
+ ) : null;
641
+ }
642
+ const label = status.label ?? (status.kind === "working" ? "Working" : "Waiting");
643
+ return (
644
+ <span data-og-exchange-status={status.kind}>
645
+ <span className={status.kind === "working" ? "og-shimmer-text" : undefined}>{label}</span>
646
+ {status.since ? <LiveElapsed since={status.since} /> : null}
647
+ </span>
648
+ );
649
+ }
650
+
651
+ /** A second-resolution clock; unmounts with the live row. */
652
+ function LiveElapsed({ since }: { since: string }) {
653
+ const startedAt = Date.parse(since);
654
+ const [now, setNow] = useState(() => Date.now());
655
+ useEffect(() => {
656
+ const timer = setInterval(() => setNow(Date.now()), 1000);
657
+ return () => clearInterval(timer);
658
+ }, []);
659
+ if (!Number.isFinite(startedAt)) return null;
660
+ return (
661
+ <span className="tabular-nums">{` · ${formatElapsed(Math.max(0, now - startedAt))}`}</span>
662
+ );
663
+ }
664
+
665
+ /** Elapsed wall time with seconds below an hour: "14s", "2m 14s", "1h 05m". */
666
+ export function formatElapsed(durationMs: number): string {
667
+ const totalSeconds = Math.max(0, Math.floor(durationMs / 1000));
668
+ if (totalSeconds < 60) {
669
+ return `${totalSeconds}s`;
670
+ }
671
+ const totalMinutes = Math.floor(totalSeconds / 60);
672
+ if (totalMinutes < 60) {
673
+ const seconds = totalSeconds % 60;
674
+ return seconds ? `${totalMinutes}m ${seconds}s` : `${totalMinutes}m`;
675
+ }
676
+ const hours = Math.floor(totalMinutes / 60);
677
+ return `${hours}h ${String(totalMinutes % 60).padStart(2, "0")}m`;
678
+ }
679
+
535
680
  function createTurnSummaryContext(
536
681
  items: ActivityItem[],
537
682
  outcome: TurnOutcome | undefined,
@@ -544,10 +689,15 @@ function createTurnSummaryContext(
544
689
  itemSnapshot.filter((item): item is ToolCallItem => item.kind === "tool-call"),
545
690
  );
546
691
  const settled = itemSnapshot.every((item) => {
547
- if (item.kind === "reasoning") {
692
+ if (item.kind === "reasoning" || item.kind === "agent-message") {
548
693
  return !item.streaming;
549
694
  }
550
- if (item.kind === "tool-call" || item.kind === "worker" || item.kind === "sandbox") {
695
+ if (
696
+ item.kind === "tool-call" ||
697
+ item.kind === "worker" ||
698
+ item.kind === "sandbox" ||
699
+ item.kind === "startup-phase"
700
+ ) {
551
701
  return item.status !== "running";
552
702
  }
553
703
  return true;
@@ -566,9 +716,17 @@ function createTurnSummaryContext(
566
716
  const BUILT_IN_TURN_SUMMARY_FACETS: readonly TurnSummaryFacet[] = Object.freeze([
567
717
  {
568
718
  id: "steps",
569
- summarize: ({ items }) => ({
570
- content: `${items.length} ${items.length === 1 ? "step" : "steps"}`,
571
- }),
719
+ summarize: ({ items }) => {
720
+ // Progress notes narrate steps; they are not steps themselves.
721
+ const count = items.filter(
722
+ (item) => item.kind !== "startup-phase" && item.kind !== "agent-message",
723
+ ).length;
724
+ return count
725
+ ? { content: `${count} ${count === 1 ? "step" : "steps"}` }
726
+ : items.some((item) => item.kind === "startup-phase")
727
+ ? { content: "Preparation" }
728
+ : null;
729
+ },
572
730
  },
573
731
  {
574
732
  id: "files",
@@ -596,11 +754,17 @@ const BUILT_IN_TURN_SUMMARY_FACETS: readonly TurnSummaryFacet[] = Object.freeze(
596
754
  summarize: ({ toolCalls }) => {
597
755
  let screenshots = 0;
598
756
  for (const item of toolCalls) {
757
+ const leaf = mcpToolLeaf(item.name);
599
758
  if (
600
759
  (rawTypeOf(item) === "computer_call" ||
601
760
  item.name === "computer_call" ||
602
- item.name === "computer_screenshot") &&
603
- (screenshotDataUrl(item.output) !== null || mediaPreviewFact(item.output) !== null)
761
+ item.name === "computer_screenshot" ||
762
+ leaf === "browser_screenshot" ||
763
+ leaf === "browser_observe" ||
764
+ leaf === "browser_act") &&
765
+ (retainedScreenshotMetadata(item.output) !== null ||
766
+ screenshotDataUrl(item.output) !== null ||
767
+ mediaPreviewFact(item.output) !== null)
604
768
  ) {
605
769
  screenshots += 1;
606
770
  }