@opengeni/react 1.0.1 → 1.0.2-canary.37202341988001

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