@opengeni/react 1.0.1 → 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 +651 -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-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 +6 -3
  302. package/dist/realtime.js +133 -74
  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 +133 -46
  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,10 +1,18 @@
1
- import type { GitFileDiff, RetainedArtifactReference } from "@opengeni/sdk";
1
+ import { KnowledgeReceiptRow } from "./knowledge-receipt";
2
+ import { defaultUrlTransform } from "react-markdown";
3
+ import { isRetainedImageContentType, useRetainedImageObjectUrl } from "./retained-image";
4
+ import {
5
+ parseSandboxFileArtifactReceipt,
6
+ type GitFileDiff,
7
+ type RetainedArtifactReference,
8
+ } from "@opengeni/sdk";
2
9
  import {
3
10
  BoxIcon,
4
11
  BrainCircuitIcon,
5
12
  CalendarClockIcon,
6
13
  CameraIcon,
7
14
  CameraOffIcon,
15
+ DownloadIcon,
8
16
  FileDiffIcon,
9
17
  FileSearchIcon,
10
18
  FolderGitIcon,
@@ -29,8 +37,8 @@ import {
29
37
  VideoIcon,
30
38
  WrenchIcon,
31
39
  } from "lucide-react";
32
- import { useEffect, useRef, useState, type ReactNode } from "react";
33
- import { stringifyPayload, tryParseJson } from "../lib/format";
40
+ import { useContext, useState, type ReactNode } from "react";
41
+ import { formatBytes, stringifyPayload, tryParseJson } from "../lib/format";
34
42
  import { useTimelineComputeLabel } from "./compute-label";
35
43
  import {
36
44
  applyPatchOpsFromToolItem,
@@ -66,10 +74,12 @@ import {
66
74
  TermBlock,
67
75
  Thumbnail,
68
76
  ActivityDisclosure,
77
+ CompactActivityContext,
69
78
  type DisclosureChip,
70
79
  } from "./shared";
71
80
  import { RawPatch, ToolDiff } from "./tool-diff";
72
81
  import { mcpToolLeaf, toolDisplayName } from "./tool-display-name";
82
+ import { useOpenGeniLinkResolver } from "../components/open-geni-links";
73
83
 
74
84
  /* ----------------------------------------------------------------------------
75
85
  Per-tool renderers
@@ -91,9 +101,12 @@ const ICON_SIZE = "size-3.5";
91
101
  * left-to-right.
92
102
  */
93
103
  function RunningPreview({ children }: { children: ReactNode }) {
104
+ const compact = useContext(CompactActivityContext);
94
105
  return (
95
106
  <span className="inline-flex items-center gap-1.5">
96
- <span className="size-1.5 shrink-0 animate-og-pulse rounded-full bg-og-status-running" />
107
+ {!compact && (
108
+ <span className="size-1.5 shrink-0 animate-og-pulse rounded-full bg-og-status-running" />
109
+ )}
97
110
  <span className="min-w-0 truncate">{children}</span>
98
111
  </span>
99
112
  );
@@ -761,96 +774,107 @@ function ComputerCallRenderer({ item, loadRetainedScreenshot }: ToolRendererProp
761
774
  );
762
775
  }
763
776
 
764
- type RetainedImageState =
765
- | { kind: "loading" }
766
- | { kind: "ready"; url: string }
767
- | { kind: "unavailable"; label: string }
768
- | { kind: "error"; message: string };
769
-
770
- function useRetainedImageObjectUrl(
771
- artifact: RetainedArtifactReference,
772
- load: ToolRendererProps["loadRetainedArtifact"],
773
- ): RetainedImageState {
774
- const [state, setState] = useState<RetainedImageState>({ kind: "loading" });
775
- // Function outputs are commonly serialized JSON. Parsing them creates a new
776
- // object on every render, so depend on the immutable wire value rather than
777
- // object identity; otherwise the loader can refetch after its own setState.
778
- const artifactValue = retainedArtifactValue(artifact);
779
- const stableArtifactRef = useRef({ value: artifactValue, artifact });
780
- if (stableArtifactRef.current.value !== artifactValue) {
781
- stableArtifactRef.current = { value: artifactValue, artifact };
782
- }
783
- const stableArtifact = stableArtifactRef.current.artifact;
784
- useEffect(() => {
785
- if (!load) {
786
- setState({ kind: "unavailable", label: "retrieval is not configured" });
787
- return;
788
- }
789
- const controller = new AbortController();
790
- let objectUrl: string | null = null;
791
- setState({ kind: "loading" });
792
- void load(stableArtifact, controller.signal)
793
- .then((source) => {
794
- if (controller.signal.aborted) return;
795
- if (!source) {
796
- setState({ kind: "unavailable", label: "bytes are unavailable" });
797
- return;
798
- }
799
- if (!(source instanceof Uint8Array)) {
800
- if (!source.url.trim()) {
801
- setState({ kind: "unavailable", label: "URL is unavailable" });
802
- return;
803
- }
804
- setState({ kind: "ready", url: source.url });
805
- return;
806
- }
807
- objectUrl = URL.createObjectURL(
808
- new Blob([source as unknown as BlobPart], { type: stableArtifact.contentType }),
809
- );
810
- setState({ kind: "ready", url: objectUrl });
811
- })
812
- .catch((error: unknown) => {
813
- if (controller.signal.aborted) return;
814
- const status =
815
- error && typeof error === "object" && "status" in error
816
- ? Number((error as { status?: unknown }).status)
817
- : null;
818
- setState(
819
- status === 404
820
- ? { kind: "unavailable", label: "deleted" }
821
- : status === 410
822
- ? { kind: "unavailable", label: "expired or unavailable" }
823
- : { kind: "error", message: "retrieval failed" },
824
- );
825
- });
826
- return () => {
827
- controller.abort();
828
- if (objectUrl) URL.revokeObjectURL(objectUrl);
829
- };
830
- }, [stableArtifact, load]);
831
- return state;
777
+ /** Browser tool images share authenticated screenshot loading, with their own media kind. */
778
+ function BrowserScreenshotRenderer(props: ToolRendererProps) {
779
+ const { item, loadRetainedScreenshot } = props;
780
+ const leaf = mcpToolLeaf(item.name);
781
+ const title =
782
+ leaf === "browser_observe"
783
+ ? "Observed browser"
784
+ : leaf === "browser_act"
785
+ ? "Used browser"
786
+ : "Browser screenshot";
787
+ const retained = retainedScreenshotMetadata(item.output);
788
+ const isFailed = item.status === "failed";
789
+ const isCancelled = item.status === "cancelled";
790
+
791
+ if (item.status === "running" && leaf === "browser_screenshot") {
792
+ return (
793
+ <ActivityDisclosure
794
+ icon={<CameraIcon className={ICON_SIZE} />}
795
+ iconTone="running"
796
+ title={title}
797
+ running
798
+ media={<MediaSkeleton />}
799
+ >
800
+ <BodyNote>capturing frame…</BodyNote>
801
+ </ActivityDisclosure>
802
+ );
803
+ }
804
+
805
+ if (!retained) return <GenericRenderer {...props} />;
806
+ if (!retained.available) {
807
+ const state =
808
+ retained.reason === "expired" || retained.reason === "deleted"
809
+ ? retained.reason
810
+ : "unavailable";
811
+ return (
812
+ <ActivityDisclosure
813
+ icon={<CameraOffIcon className={ICON_SIZE} />}
814
+ iconTone={isFailed ? "failed" : "muted"}
815
+ title={`${title} · ${state}`}
816
+ failed={isFailed}
817
+ cancelled={isCancelled}
818
+ preview={`screenshot ${state}`}
819
+ media={<MediaEmpty />}
820
+ >
821
+ <BodyNote tone={isFailed ? "error" : undefined}>
822
+ Screenshot {state}: {retained.reason.replaceAll("_", " ")}.
823
+ </BodyNote>
824
+ </ActivityDisclosure>
825
+ );
826
+ }
827
+ return (
828
+ <RetainedSessionImageDisclosure
829
+ artifact={retained}
830
+ load={loadRetainedScreenshot}
831
+ title={title}
832
+ caption={title}
833
+ noun="screenshot"
834
+ icon={<CameraIcon className={ICON_SIZE} />}
835
+ lightboxLabel="Browser screenshot"
836
+ batched={null}
837
+ failed={isFailed}
838
+ cancelled={isCancelled}
839
+ />
840
+ );
832
841
  }
833
842
 
834
- function retainedArtifactValue(artifact: RetainedArtifactReference): string {
835
- return [
836
- artifact.artifactId,
837
- artifact.kind,
838
- artifact.contentType,
839
- artifact.originalBytes,
840
- artifact.sha256,
841
- artifact.retainedAt,
842
- artifact.dimensions?.width ?? "",
843
- artifact.dimensions?.height ?? "",
844
- artifact.retention.policy,
845
- artifact.retention.expiresAt ?? "",
846
- artifact.retrieval.method,
847
- artifact.retrieval.path,
848
- artifact.retrieval.acceptRanges,
849
- artifact.retrieval.maxRangeBytes,
850
- ].join("\0");
843
+ type RetainedSessionImageDisclosureProps = {
844
+ artifact: RetainedArtifactReference;
845
+ load: ToolRendererProps["loadRetainedArtifact"];
846
+ title: string;
847
+ caption: string;
848
+ noun: "image" | "screenshot";
849
+ icon: ReactNode;
850
+ lightboxLabel: string;
851
+ batched: string | null;
852
+ failed: boolean;
853
+ cancelled: boolean;
854
+ filename?: string;
855
+ defaultOpen?: boolean;
856
+ children?: ReactNode;
857
+ };
858
+
859
+ function RetainedSessionImageDisclosure(props: RetainedSessionImageDisclosureProps) {
860
+ const compact = useContext(CompactActivityContext);
861
+ // The rolling progress label has no screenshot loader by design. Do not run
862
+ // the full image hook there: it would report the missing loader as an error.
863
+ if (compact) {
864
+ return (
865
+ <ActivityDisclosure
866
+ icon={props.icon}
867
+ title={props.title}
868
+ compactPreview={null}
869
+ failed={props.failed}
870
+ cancelled={props.cancelled}
871
+ />
872
+ );
873
+ }
874
+ return <LoadedRetainedSessionImageDisclosure {...props} />;
851
875
  }
852
876
 
853
- function RetainedSessionImageDisclosure({
877
+ function LoadedRetainedSessionImageDisclosure({
854
878
  artifact,
855
879
  load,
856
880
  title,
@@ -861,25 +885,27 @@ function RetainedSessionImageDisclosure({
861
885
  batched,
862
886
  failed,
863
887
  cancelled,
864
- }: {
865
- artifact: RetainedArtifactReference;
866
- load: ToolRendererProps["loadRetainedScreenshot"];
867
- title: string;
868
- caption: string;
869
- noun: "image" | "screenshot";
870
- icon: ReactNode;
871
- lightboxLabel: string;
872
- batched: string | null;
873
- failed: boolean;
874
- cancelled: boolean;
875
- }) {
888
+ filename,
889
+ defaultOpen,
890
+ children,
891
+ }: RetainedSessionImageDisclosureProps) {
876
892
  const state = useRetainedImageObjectUrl(artifact, load);
893
+ const downloadFilename = filename ?? retainedImageFilename(artifact);
894
+ const figure = {
895
+ src: state.kind === "ready" ? state.url : "",
896
+ caption,
897
+ alt: caption,
898
+ expandLabel: `Expand ${noun}`,
899
+ lightboxLabel,
900
+ downloadFilename,
901
+ };
877
902
 
878
903
  return (
879
904
  <ActivityDisclosure
880
905
  icon={icon}
881
906
  iconTone={failed ? "failed" : state.kind === "ready" ? "accent" : "muted"}
882
907
  title={title}
908
+ defaultOpen={defaultOpen}
883
909
  failed={failed}
884
910
  cancelled={cancelled}
885
911
  preview={
@@ -893,13 +919,7 @@ function RetainedSessionImageDisclosure({
893
919
  }
894
920
  media={
895
921
  state.kind === "ready" ? (
896
- <Thumbnail
897
- src={state.url}
898
- caption={caption}
899
- alt={caption}
900
- expandLabel={`Expand ${noun}`}
901
- lightboxLabel={lightboxLabel}
902
- />
922
+ <Thumbnail {...figure} />
903
923
  ) : state.kind === "loading" ? (
904
924
  <MediaSkeleton />
905
925
  ) : (
@@ -908,13 +928,7 @@ function RetainedSessionImageDisclosure({
908
928
  }
909
929
  >
910
930
  {state.kind === "ready" ? (
911
- <ScreenshotFigure
912
- src={state.url}
913
- caption={caption}
914
- alt={caption}
915
- expandLabel={`Expand ${noun}`}
916
- lightboxLabel={lightboxLabel}
917
- />
931
+ <ScreenshotFigure {...figure} />
918
932
  ) : state.kind === "loading" ? (
919
933
  <BodyNote>Loading the retained {noun}…</BodyNote>
920
934
  ) : state.kind === "unavailable" ? (
@@ -922,15 +936,30 @@ function RetainedSessionImageDisclosure({
922
936
  {noun === "screenshot" ? "Screenshot" : "Image"} {state.label}.
923
937
  </BodyNote>
924
938
  ) : (
925
- <BodyNote tone="error">
926
- {noun === "screenshot" ? "Screenshot" : "Image"} retrieval failed: {state.message}
927
- </BodyNote>
939
+ <ImageRetrievalError noun={noun} retry={state.retry} />
928
940
  )}
929
941
  {batched ? <BodyNote>batched: {batched}</BodyNote> : null}
942
+ {children}
930
943
  </ActivityDisclosure>
931
944
  );
932
945
  }
933
946
 
947
+ function ImageRetrievalError({ noun = "image", retry }: { noun?: string; retry: () => void }) {
948
+ return (
949
+ <BodyNote tone="error">
950
+ {noun === "screenshot" ? "Screenshot" : "Image"} retrieval failed.{" "}
951
+ <button
952
+ type="button"
953
+ aria-label={`Retry ${noun} retrieval`}
954
+ onClick={retry}
955
+ className="underline underline-offset-2"
956
+ >
957
+ Retry
958
+ </button>
959
+ </BodyNote>
960
+ );
961
+ }
962
+
934
963
  function GeneratedImageRenderer({ item, loadRetainedArtifact }: ToolRendererProps) {
935
964
  const args = parseToolArgs(item.arguments);
936
965
  const prompt = typeof args.prompt === "string" ? args.prompt : "";
@@ -1001,6 +1030,256 @@ function GeneratedVideoRenderer({ item }: ToolRendererProps) {
1001
1030
  </ActivityDisclosure>
1002
1031
  );
1003
1032
  }
1033
+ function SandboxFilePublishRenderer({ item, loadRetainedArtifact }: ToolRendererProps) {
1034
+ const { text: output, isError } = unwrapMcpOutput(item.output);
1035
+ const receipt = parseSandboxFileArtifactReceipt(output);
1036
+ const [downloadState, setDownloadState] = useState<"idle" | "loading" | "error">("idle");
1037
+ if (item.status === "running") {
1038
+ return (
1039
+ <ActivityDisclosure
1040
+ icon={<DownloadIcon className={ICON_SIZE} />}
1041
+ iconTone="running"
1042
+ title="Publishing file"
1043
+ running
1044
+ preview={<RunningPreview>retaining workspace bytes…</RunningPreview>}
1045
+ />
1046
+ );
1047
+ }
1048
+ if (!receipt || isError || item.status === "failed") {
1049
+ return <GenericRenderer item={item} />;
1050
+ }
1051
+
1052
+ // The closed SDK receipt has already checked the workspace-qualified route.
1053
+ const workspaceId = /^\/v1\/workspaces\/([0-9a-f-]+)\/artifacts\//.exec(
1054
+ receipt.artifact.retrieval.path,
1055
+ )?.[1];
1056
+ const openLink = workspaceId ? (
1057
+ <a
1058
+ href={`/workspaces/${workspaceId}/artifacts/files/${receipt.artifact.artifactId}`}
1059
+ aria-label={`Open ${receipt.filename} in Artifacts`}
1060
+ className="inline-flex min-h-7 items-center rounded-og-sm px-2 text-og-sm font-medium text-og-accent-strong hover:bg-og-surface-2 hover:underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent pointer-coarse:min-h-10"
1061
+ onClick={(event) => event.stopPropagation()}
1062
+ onKeyDown={(event) => event.stopPropagation()}
1063
+ >
1064
+ Open in Artifacts
1065
+ </a>
1066
+ ) : null;
1067
+
1068
+ const download = async () => {
1069
+ if (!loadRetainedArtifact) {
1070
+ setDownloadState("error");
1071
+ return;
1072
+ }
1073
+ setDownloadState("loading");
1074
+ let objectUrl: string | null = null;
1075
+ try {
1076
+ const source = await loadRetainedArtifact(receipt.artifact, new AbortController().signal);
1077
+ if (!source) throw new Error("artifact unavailable");
1078
+ const url =
1079
+ source instanceof Uint8Array
1080
+ ? (objectUrl = URL.createObjectURL(
1081
+ new Blob([source as unknown as BlobPart], {
1082
+ type: receipt.artifact.contentType,
1083
+ }),
1084
+ ))
1085
+ : source.url;
1086
+ const anchor = document.createElement("a");
1087
+ anchor.href = url;
1088
+ anchor.download = receipt.filename;
1089
+ anchor.rel = "noopener";
1090
+ anchor.click();
1091
+ setDownloadState("idle");
1092
+ } catch {
1093
+ setDownloadState("error");
1094
+ } finally {
1095
+ const urlToRevoke = objectUrl;
1096
+ if (urlToRevoke) setTimeout(() => URL.revokeObjectURL(urlToRevoke), 0);
1097
+ }
1098
+ };
1099
+
1100
+ const downloadButton = (
1101
+ <button
1102
+ type="button"
1103
+ onClick={() => void download()}
1104
+ disabled={downloadState === "loading"}
1105
+ className="inline-flex items-center gap-1.5 rounded-og-sm border border-og-border px-2.5 py-1.5 text-og-sm font-medium text-og-fg transition-colors hover:border-og-border-strong hover:bg-og-surface-2 disabled:cursor-wait disabled:opacity-60"
1106
+ >
1107
+ <DownloadIcon className="size-3.5" />
1108
+ {downloadState === "loading"
1109
+ ? "Preparing…"
1110
+ : downloadState === "error"
1111
+ ? "Retry download"
1112
+ : "Download"}
1113
+ </button>
1114
+ );
1115
+
1116
+ if (isRetainedImageContentType(receipt.artifact.contentType)) {
1117
+ return (
1118
+ <RetainedSessionImageDisclosure
1119
+ artifact={receipt.artifact}
1120
+ load={loadRetainedArtifact}
1121
+ title={`Published ${receipt.filename}`}
1122
+ caption={receipt.filename}
1123
+ noun="image"
1124
+ icon={<ImageIcon className={ICON_SIZE} />}
1125
+ lightboxLabel="Image"
1126
+ batched={null}
1127
+ failed={false}
1128
+ cancelled={false}
1129
+ filename={receipt.filename}
1130
+ defaultOpen
1131
+ >
1132
+ {downloadButton}
1133
+ {openLink}
1134
+ </RetainedSessionImageDisclosure>
1135
+ );
1136
+ }
1137
+
1138
+ return (
1139
+ <ActivityDisclosure
1140
+ icon={<DownloadIcon className={ICON_SIZE} />}
1141
+ iconTone="accent"
1142
+ title={`Published ${receipt.filename}`}
1143
+ defaultOpen
1144
+ preview={formatBytes(receipt.artifact.originalBytes)}
1145
+ >
1146
+ {downloadButton}
1147
+ {openLink}
1148
+ </ActivityDisclosure>
1149
+ );
1150
+ }
1151
+
1152
+ type PublishedSiteReceipt = {
1153
+ workspaceId: string;
1154
+ artifactId: string;
1155
+ title: string;
1156
+ revision: number;
1157
+ replayed: boolean;
1158
+ };
1159
+
1160
+ function publishedSiteReceipt(output: unknown): PublishedSiteReceipt | null {
1161
+ const { text, isError } = unwrapMcpOutput(output);
1162
+ if (isError) return null;
1163
+ const parsed = tryParseJson(text);
1164
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
1165
+ const artifact = (parsed as Record<string, unknown>).artifact;
1166
+ const version = (parsed as Record<string, unknown>).version;
1167
+ if (
1168
+ !artifact ||
1169
+ typeof artifact !== "object" ||
1170
+ Array.isArray(artifact) ||
1171
+ !version ||
1172
+ typeof version !== "object" ||
1173
+ Array.isArray(version)
1174
+ ) {
1175
+ return null;
1176
+ }
1177
+ const artifactRecord = artifact as Record<string, unknown>;
1178
+ const versionRecord = version as Record<string, unknown>;
1179
+ if (
1180
+ typeof artifactRecord.workspaceId !== "string" ||
1181
+ typeof artifactRecord.id !== "string" ||
1182
+ typeof artifactRecord.title !== "string" ||
1183
+ typeof versionRecord.revision !== "number" ||
1184
+ !Number.isInteger(versionRecord.revision) ||
1185
+ versionRecord.revision < 1
1186
+ ) {
1187
+ return null;
1188
+ }
1189
+ return {
1190
+ workspaceId: artifactRecord.workspaceId,
1191
+ artifactId: artifactRecord.id,
1192
+ title: artifactRecord.title,
1193
+ revision: versionRecord.revision,
1194
+ replayed: (parsed as Record<string, unknown>).replayed === true,
1195
+ };
1196
+ }
1197
+
1198
+ const SITE_OPEN_CLASS =
1199
+ "inline-flex min-h-7 items-center rounded-og-sm px-2 text-og-sm font-medium text-og-accent-strong hover:bg-og-surface-2 hover:underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent pointer-coarse:min-h-10";
1200
+
1201
+ function SiteOpenLink({ receipt }: { receipt: PublishedSiteReceipt }) {
1202
+ const [pending, setPending] = useState(false);
1203
+ const [failed, setFailed] = useState(false);
1204
+ // The console route only exists in the OpenGeni console; a host decides.
1205
+ const resolution = useOpenGeniLinkResolver()?.({
1206
+ kind: "site",
1207
+ artifactId: receipt.artifactId,
1208
+ workspaceId: receipt.workspaceId,
1209
+ });
1210
+ const destination = resolution?.href ? defaultUrlTransform(resolution.href) : "";
1211
+ if (destination) {
1212
+ return (
1213
+ <a
1214
+ href={destination}
1215
+ aria-label={`Open ${receipt.title}`}
1216
+ className={SITE_OPEN_CLASS}
1217
+ onClick={(event) => event.stopPropagation()}
1218
+ onKeyDown={(event) => event.stopPropagation()}
1219
+ >
1220
+ Open
1221
+ </a>
1222
+ );
1223
+ }
1224
+ if (resolution?.open) {
1225
+ const open = resolution.open;
1226
+ return (
1227
+ <button
1228
+ type="button"
1229
+ aria-label={`Open ${receipt.title}`}
1230
+ aria-busy={pending}
1231
+ disabled={pending}
1232
+ className={SITE_OPEN_CLASS}
1233
+ onClick={(event) => {
1234
+ event.stopPropagation();
1235
+ if (pending) return;
1236
+ setPending(true);
1237
+ setFailed(false);
1238
+ void Promise.resolve()
1239
+ .then(open)
1240
+ .catch(() => setFailed(true))
1241
+ .finally(() => setPending(false));
1242
+ }}
1243
+ onKeyDown={(event) => event.stopPropagation()}
1244
+ >
1245
+ {pending ? "Opening…" : failed ? "Retry open" : "Open"}
1246
+ </button>
1247
+ );
1248
+ }
1249
+ return null;
1250
+ }
1251
+
1252
+ function SiteArtifactRenderer({ item }: ToolRendererProps) {
1253
+ const leaf = mcpToolLeaf(item.name);
1254
+ const publishingExisting = leaf === "artifacts_publish";
1255
+ if (item.status === "running") {
1256
+ return (
1257
+ <ActivityDisclosure
1258
+ icon={<PanelsTopLeftIcon className={ICON_SIZE} />}
1259
+ iconTone="running"
1260
+ title={publishingExisting ? "Publishing Site update" : "Publishing Site"}
1261
+ running
1262
+ preview={<RunningPreview>retaining source and compiled HTML…</RunningPreview>}
1263
+ />
1264
+ );
1265
+ }
1266
+ const receipt = publishedSiteReceipt(item.output);
1267
+ if (!receipt || item.status === "failed") return <GenericRenderer item={item} />;
1268
+ return (
1269
+ <ActivityDisclosure
1270
+ icon={<PanelsTopLeftIcon className={ICON_SIZE} />}
1271
+ iconTone="accent"
1272
+ title={publishingExisting ? `Updated ${receipt.title}` : `Published ${receipt.title}`}
1273
+ media={<SiteOpenLink receipt={receipt} />}
1274
+ >
1275
+ <BodyNote>
1276
+ Version {receipt.revision} is live
1277
+ {receipt.replayed ? " (replayed from the original publication)." : "."}
1278
+ </BodyNote>
1279
+ </ActivityDisclosure>
1280
+ );
1281
+ }
1282
+
1004
1283
  function GeneratedImageDisclosure({
1005
1284
  receipt,
1006
1285
  load,
@@ -1064,7 +1343,7 @@ function GeneratedImageDisclosure({
1064
1343
  ) : state.kind === "unavailable" ? (
1065
1344
  <BodyNote>Image {state.label}.</BodyNote>
1066
1345
  ) : (
1067
- <BodyNote tone="error">Image retrieval failed.</BodyNote>
1346
+ <ImageRetrievalError retry={state.retry} />
1068
1347
  )}
1069
1348
  <BodyNote>
1070
1349
  {dimensions.width}×{dimensions.height} · {receipt.sandboxPath}
@@ -1073,6 +1352,16 @@ function GeneratedImageDisclosure({
1073
1352
  );
1074
1353
  }
1075
1354
 
1355
+ function retainedImageFilename(artifact: RetainedArtifactReference): string {
1356
+ const extension =
1357
+ artifact.contentType === "image/jpeg"
1358
+ ? "jpg"
1359
+ : artifact.contentType === "image/webp"
1360
+ ? "webp"
1361
+ : "png";
1362
+ return `${artifact.kind}-${artifact.artifactId}.${extension}`;
1363
+ }
1364
+
1076
1365
  /* ---- web_search ------------------------------------------------------------ */
1077
1366
 
1078
1367
  type WebSearchResult = { title: string; domain: string; snippet: string };
@@ -1632,7 +1921,9 @@ function ToolSearchRenderer({ item }: ToolRendererProps) {
1632
1921
  function DocsSearchRenderer({ item }: ToolRendererProps) {
1633
1922
  const args = parseToolArgs(item.arguments);
1634
1923
  const query = typeof args.query === "string" ? args.query.trim() : "";
1635
- const title = query ? `Search “${truncatePreview(query, 48)}”` : toolDisplayName(item.name);
1924
+ const title = query
1925
+ ? `Search “${truncatePreview(query, 48)}”`
1926
+ : toolDisplayName(item.name, item.display);
1636
1927
  const running = item.status === "running";
1637
1928
 
1638
1929
  if (running) {
@@ -1706,7 +1997,7 @@ function DocsSearchRenderer({ item }: ToolRendererProps) {
1706
1997
  function SetSessionTitleRenderer({ item }: ToolRendererProps) {
1707
1998
  const args = parseToolArgs(item.arguments);
1708
1999
  const titleArg = typeof args.title === "string" ? args.title.trim() : "";
1709
- const display = toolDisplayName(item.name);
2000
+ const display = toolDisplayName(item.name, item.display);
1710
2001
  const previewTitle = titleArg ? truncatePreview(titleArg, 72) : "";
1711
2002
  const icon = <MessagesSquareIcon className={ICON_SIZE} />;
1712
2003
 
@@ -2044,7 +2335,7 @@ function RunOnRenderer({ item }: ToolRendererProps) {
2044
2335
  function GenericRenderer({ item }: ToolRendererProps) {
2045
2336
  const running = item.status === "running";
2046
2337
  const args = parseToolArgs(item.arguments);
2047
- const display = toolDisplayName(item.name);
2338
+ const display = toolDisplayName(item.name, item.display);
2048
2339
  const icon = <GenericToolIcon name={item.name} />;
2049
2340
  // Goal tools: surface the objective text on the collapsed row so the in-cluster
2050
2341
  // tool replaces the old breakaway GoalRow pill without losing the gist.
@@ -2103,7 +2394,8 @@ function goalToolPreview(name: string, args: unknown): string | null {
2103
2394
  leaf !== "goal_set" &&
2104
2395
  leaf !== "goal_update" &&
2105
2396
  leaf !== "goal_complete" &&
2106
- leaf !== "goal_pause"
2397
+ leaf !== "goal_pause" &&
2398
+ leaf !== "wait_for_input"
2107
2399
  ) {
2108
2400
  return null;
2109
2401
  }
@@ -2118,9 +2410,11 @@ function goalToolPreview(name: string, args: unknown): string | null {
2118
2410
  ? record.evidence
2119
2411
  : typeof record.rationale === "string"
2120
2412
  ? record.rationale
2121
- : typeof record.progressNote === "string"
2122
- ? record.progressNote
2123
- : null;
2413
+ : typeof record.reason === "string"
2414
+ ? record.reason
2415
+ : typeof record.progressNote === "string"
2416
+ ? record.progressNote
2417
+ : null;
2124
2418
  return text ? truncatePreview(text, 90) : null;
2125
2419
  }
2126
2420
 
@@ -2173,7 +2467,7 @@ function GenericToolIcon({ name }: { name: string }) {
2173
2467
  ? FileSearchIcon
2174
2468
  : leaf === "tool_search"
2175
2469
  ? PackageSearchIcon
2176
- : leaf === "load_skill"
2470
+ : leaf.startsWith("skill_")
2177
2471
  ? PlugIcon
2178
2472
  : WrenchIcon;
2179
2473
  return <Icon className={ICON_SIZE} />;
@@ -2181,7 +2475,54 @@ function GenericToolIcon({ name }: { name: string }) {
2181
2475
 
2182
2476
  /* ---- the default registry -------------------------------------------------- */
2183
2477
 
2478
+ function KnowledgeSaveRenderer({ item }: ToolRendererProps) {
2479
+ const output = unwrapMcpOutput(item.output);
2480
+ const parsed = tryParseJson(output.text);
2481
+ if (item.status === "running" || output.isError || !parsed || typeof parsed !== "object")
2482
+ return <GenericRenderer item={item} />;
2483
+ const value = parsed as Record<string, unknown>;
2484
+ const receipt = (value.status === "retained" ? value.receipt : value) as
2485
+ | Record<string, unknown>
2486
+ | undefined;
2487
+ if (
2488
+ !receipt ||
2489
+ typeof receipt.entryId !== "string" ||
2490
+ !["published", "pending", "rejected", "archived"].includes(String(receipt.outcome))
2491
+ )
2492
+ return <GenericRenderer item={item} />;
2493
+ const args = parseToolArgs(item.arguments);
2494
+ const entry = args.entry as Record<string, unknown> | undefined;
2495
+ return (
2496
+ <KnowledgeReceiptRow
2497
+ outcome={receipt.outcome as "published" | "pending" | "rejected" | "archived"}
2498
+ entryId={receipt.entryId}
2499
+ title={
2500
+ typeof entry?.title === "string"
2501
+ ? entry.title
2502
+ : typeof value.filename === "string"
2503
+ ? value.filename
2504
+ : undefined
2505
+ }
2506
+ source={value.status === "retained" || value.retained === true}
2507
+ />
2508
+ );
2509
+ }
2510
+
2184
2511
  const BASE_ENTRIES: ToolRegistryEntry[] = [
2512
+ ...[
2513
+ "knowledge_save",
2514
+ "knowledge_archive",
2515
+ "knowledge_retain_file",
2516
+ "knowledge_retain_message",
2517
+ "task_note_promote_knowledge",
2518
+ ].flatMap((name) =>
2519
+ [name, `opengeni__${name}`, `mcp__opengeni__${name}`].map((trustedName) => ({
2520
+ match: "name" as const,
2521
+ name: trustedName,
2522
+ matchPrefixedLeaf: false,
2523
+ render: KnowledgeSaveRenderer,
2524
+ })),
2525
+ ),
2185
2526
  // Provider-native items carry `raw.type` on the wire — this is their source of
2186
2527
  // truth and is consulted first by the registry.
2187
2528
  { match: "rawType", type: "apply_patch_call", render: ApplyPatchRenderer },
@@ -2195,6 +2536,9 @@ const BASE_ENTRIES: ToolRegistryEntry[] = [
2195
2536
  { match: "name", name: "apply_patch_call", render: ApplyPatchRenderer },
2196
2537
  { match: "name", name: "apply_patch", render: ApplyPatchRenderer },
2197
2538
  { match: "name", name: "computer_call", render: ComputerCallRenderer },
2539
+ { match: "name", name: "browser_screenshot", render: BrowserScreenshotRenderer },
2540
+ { match: "name", name: "browser_observe", render: BrowserScreenshotRenderer },
2541
+ { match: "name", name: "browser_act", render: BrowserScreenshotRenderer },
2198
2542
  // Function-mode computer tools (codex / chat-wire transports).
2199
2543
  { match: "name", name: "computer_screenshot", render: ComputerCallRenderer },
2200
2544
  { match: "name", name: "computer_click", render: ComputerCallRenderer },
@@ -2210,6 +2554,31 @@ const BASE_ENTRIES: ToolRegistryEntry[] = [
2210
2554
  { match: "name", name: "generate_video", render: GeneratedVideoRenderer },
2211
2555
  { match: "name", name: "tool_search", render: ToolSearchRenderer },
2212
2556
  { match: "name", name: "view_image", render: ViewImageRenderer },
2557
+ { match: "name", name: "sandbox_file_publish", render: SandboxFilePublishRenderer },
2558
+ {
2559
+ match: "name",
2560
+ name: "artifacts_create",
2561
+ render: SiteArtifactRenderer,
2562
+ matchPrefixedLeaf: false,
2563
+ },
2564
+ {
2565
+ match: "name",
2566
+ name: "artifacts_publish",
2567
+ render: SiteArtifactRenderer,
2568
+ matchPrefixedLeaf: false,
2569
+ },
2570
+ {
2571
+ match: "name",
2572
+ name: "opengeni__artifacts_create",
2573
+ render: SiteArtifactRenderer,
2574
+ matchPrefixedLeaf: false,
2575
+ },
2576
+ {
2577
+ match: "name",
2578
+ name: "opengeni__artifacts_publish",
2579
+ render: SiteArtifactRenderer,
2580
+ matchPrefixedLeaf: false,
2581
+ },
2213
2582
  { match: "name", name: "environment_set_variable", render: SecretSetRenderer },
2214
2583
  { match: "name", name: "variable_set_set_variable", render: SecretSetRenderer },
2215
2584
  { match: "name", name: "search_documents", render: DocsSearchRenderer },