@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
@@ -0,0 +1,208 @@
1
+ import { useEffect, useState, type ReactNode } from "react";
2
+ import { createDiscoveryCache } from "./discovery-cache";
3
+ import { BookOpenIcon } from "lucide-react";
4
+ import { CapabilityCatalogRow, type CapabilityCatalogStatus } from "./capability-catalog-row";
5
+
6
+ export type SkillDiscoveryItem = {
7
+ id: string;
8
+ name: string;
9
+ source: string;
10
+ installs: number;
11
+ url: string;
12
+ };
13
+ export type SkillDiscoveryPage = { items: SkillDiscoveryItem[]; nextCursor: null };
14
+ const discoveryCache = createDiscoveryCache<SkillDiscoveryPage>();
15
+
16
+ export type SkillDiscoveryClient = {
17
+ searchPublicSkills(workspaceId: string, query: string): Promise<SkillDiscoveryPage>;
18
+ };
19
+ export type SkillDiscoveryProps = {
20
+ installedSkills?: readonly { name: string; repositoryUrl: string; sourceUrl: string }[];
21
+ client: SkillDiscoveryClient;
22
+ workspaceId: string;
23
+ query: string;
24
+ onImport: (url: string) => void;
25
+ canManage: boolean;
26
+ localSkills?: readonly {
27
+ id: string;
28
+ name: string;
29
+ description?: string;
30
+ status?: CapabilityCatalogStatus;
31
+ statusLabel?: string;
32
+ onOpen: () => void;
33
+ }[];
34
+ resultLimit?: number;
35
+ onShowMore?: () => void;
36
+ onSearch?: (() => void) | undefined;
37
+ /** Display name for a registry slug ("agent-browser" -> "Agent browser"). Defaults to the slug. */
38
+ formatName?: (name: string) => string;
39
+ /** The line under a remote skill ("From vercel-labs on skills.sh"). Defaults to the source. */
40
+ formatSource?: (source: string) => string;
41
+ /** The row tile. Defaults to a bare book glyph. */
42
+ icon?: ReactNode;
43
+ };
44
+
45
+ /** Host-owned query and import flow; browse presentation is reusable independently. */
46
+ export function SkillDiscovery(props: SkillDiscoveryProps) {
47
+ const query = props.query.trim();
48
+ const discoveryQuery = query || "agent";
49
+ return (
50
+ <section className="og-skill-discovery" aria-label="Discover skills">
51
+ <header>
52
+ <h3>{props.resultLimit ? "Skills" : query ? "Search skills" : "Browse skills"}</h3>
53
+ {!props.resultLimit ? (
54
+ <a
55
+ href="https://skills.sh/"
56
+ target="_blank"
57
+ rel="noopener noreferrer"
58
+ className="og-skill-discovery-browse"
59
+ >
60
+ Browse skills.sh ↗
61
+ </a>
62
+ ) : null}
63
+ </header>
64
+ {!query ? (
65
+ <p>Popular on skills.sh</p>
66
+ ) : query.length < 2 ? (
67
+ <p>Enter at least two characters to search skills.sh.</p>
68
+ ) : null}
69
+ <DiscoveryResults
70
+ key={`${props.workspaceId}:${discoveryQuery}`}
71
+ {...props}
72
+ query={discoveryQuery}
73
+ />
74
+ </section>
75
+ );
76
+ }
77
+
78
+ const keepText = (value: string) => value;
79
+ const DEFAULT_ICON = <BookOpenIcon aria-hidden="true" />;
80
+ const EMPTY_LOCAL_SKILLS: NonNullable<SkillDiscoveryProps["localSkills"]> = [];
81
+ const EMPTY_INSTALLED_SKILLS: NonNullable<SkillDiscoveryProps["installedSkills"]> = [];
82
+
83
+ function DiscoveryResults({
84
+ client,
85
+ workspaceId,
86
+ query,
87
+ canManage,
88
+ onImport,
89
+ resultLimit,
90
+ onShowMore,
91
+ localSkills = EMPTY_LOCAL_SKILLS,
92
+ installedSkills = EMPTY_INSTALLED_SKILLS,
93
+ formatName = keepText,
94
+ formatSource = keepText,
95
+ icon = DEFAULT_ICON,
96
+ }: SkillDiscoveryProps) {
97
+ const cacheKey = JSON.stringify([workspaceId, query]);
98
+ const cached = discoveryCache.peek(client, cacheKey);
99
+ const [result, setResult] = useState<SkillDiscoveryPage | null>(cached ?? null);
100
+ const [loading, setLoading] = useState(query.length >= 2 && !cached);
101
+ const [error, setError] = useState(false);
102
+ const [retry, setRetry] = useState(0);
103
+ useEffect(() => {
104
+ let active = true;
105
+ setError(false);
106
+ if (query.length < 2) return;
107
+ const existing = discoveryCache.peek(client, cacheKey);
108
+ setLoading(!existing);
109
+ let timer: ReturnType<typeof setTimeout>;
110
+ const search = async (attempt: number) => {
111
+ try {
112
+ const data = await discoveryCache.read(client, cacheKey, () =>
113
+ client.searchPublicSkills(workspaceId, query),
114
+ );
115
+ if (!active) return;
116
+ setResult(data);
117
+ setLoading(false);
118
+ } catch (cause) {
119
+ if (!active) return;
120
+ const status =
121
+ typeof cause === "object" && cause !== null && "status" in cause
122
+ ? cause.status
123
+ : undefined;
124
+ const transient =
125
+ cause instanceof TypeError ||
126
+ (typeof status === "number" && status >= 500 && status <= 599);
127
+ if (attempt === 0 && transient) {
128
+ timer = setTimeout(() => void search(1), 750);
129
+ return;
130
+ }
131
+ setError(true);
132
+ setLoading(false);
133
+ }
134
+ };
135
+ timer = setTimeout(() => void search(0), existing ? 0 : 300);
136
+ return () => {
137
+ active = false;
138
+ clearTimeout(timer);
139
+ };
140
+ }, [client, workspaceId, query, cacheKey, retry]);
141
+ const remoteSkills =
142
+ result?.items.filter(
143
+ (skill) =>
144
+ !localSkills.some((local) => local.name.toLowerCase() === skill.name.toLowerCase()),
145
+ ) ?? [];
146
+ return (
147
+ <div aria-busy={loading}>
148
+ <div className="og-skill-discovery-grid">
149
+ {localSkills.slice(0, resultLimit).map((skill) => (
150
+ <CapabilityCatalogRow
151
+ key={skill.id}
152
+ name={skill.name}
153
+ description={skill.description}
154
+ icon={icon}
155
+ status={skill.status ?? "added"}
156
+ statusLabel={skill.statusLabel}
157
+ onOpen={skill.onOpen}
158
+ />
159
+ ))}
160
+ {remoteSkills
161
+ .slice(
162
+ 0,
163
+ resultLimit === undefined ? undefined : Math.max(0, resultLimit - localSkills.length),
164
+ )
165
+ .map((skill) => {
166
+ const installed = installedSkills.some(
167
+ (entry) =>
168
+ entry.sourceUrl.replace(/\/$/, "").toLowerCase() === skill.url.toLowerCase() ||
169
+ (entry.repositoryUrl.replace(/\/$/, "").toLowerCase() ===
170
+ `https://github.com/${skill.source}`.toLowerCase() &&
171
+ entry.name.toLowerCase() === skill.name.toLowerCase()),
172
+ );
173
+ return (
174
+ <CapabilityCatalogRow
175
+ key={skill.id}
176
+ disabled={!canManage}
177
+ name={formatName(skill.name)}
178
+ description={formatSource(skill.source)}
179
+ icon={icon}
180
+ status={!canManage ? "unavailable" : installed ? "added" : "available"}
181
+ statusLabel={
182
+ !canManage ? "Admin required" : installed ? "Installed" : "Available to add"
183
+ }
184
+ onOpen={() => onImport(skill.url)}
185
+ />
186
+ );
187
+ })}
188
+ </div>
189
+ {resultLimit && remoteSkills.length + localSkills.length > resultLimit && !loading ? (
190
+ <button className="og-catalog-more" type="button" onClick={onShowMore}>
191
+ View all skills
192
+ </button>
193
+ ) : null}
194
+ {loading ? <p role="status">Loading skills…</p> : null}
195
+ {error ? (
196
+ <div role="alert" className="og-skill-discovery-error">
197
+ Could not load skills.
198
+ <button type="button" onClick={() => setRetry((value) => value + 1)}>
199
+ Retry
200
+ </button>
201
+ </div>
202
+ ) : null}
203
+ {result && !remoteSkills.length && !localSkills.length && !loading && !error ? (
204
+ <p role="status">{`No matches for “${query}”.`}</p>
205
+ ) : null}
206
+ </div>
207
+ );
208
+ }
@@ -0,0 +1,26 @@
1
+ import {
2
+ registerSandboxTerminal,
3
+ type SandboxTerminalPeers,
4
+ type WorkbenchPeerLoader,
5
+ } from "./lib/workbench-peers";
6
+
7
+ export { SandboxTerminal } from "./components/sandbox-terminal";
8
+ export type { SandboxTerminalProps, XtermTheme } from "./components/sandbox-terminal";
9
+ export { registerSandboxTerminal } from "./lib/workbench-peers";
10
+
11
+ async function loadTerminal(): Promise<SandboxTerminalPeers> {
12
+ const [{ Terminal }, { FitAddon }, { WebLinksAddon }] = await Promise.all([
13
+ import("@xterm/xterm"),
14
+ import("@xterm/addon-fit"),
15
+ import("@xterm/addon-web-links"),
16
+ ]);
17
+ return { Terminal, FitAddon, WebLinksAddon };
18
+ }
19
+
20
+ /** Opt in once on a terminal route; WebGL remains a separate optional import. */
21
+ export function enableSandboxTerminal(options?: { webgl?: WorkbenchPeerLoader | undefined }): void {
22
+ const loadWebgl = options?.webgl;
23
+ registerSandboxTerminal(
24
+ loadWebgl ? async () => ({ ...(await loadTerminal()), loadWebgl }) : loadTerminal,
25
+ );
26
+ }
@@ -1,11 +1,18 @@
1
+ import { KnowledgeReceiptRow } from "./knowledge-receipt";
2
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react";
3
+ import { GenieLoading } from "./genie-loading";
4
+ import { useStartupDetails } from "./startup-preference";
5
+ import { ArrowRightIcon, BotIcon, BrainCircuitIcon, MessageSquareTextIcon } from "lucide-react";
1
6
  import {
2
- ArrowRightIcon,
3
- BotIcon,
4
- BrainCircuitIcon,
5
- BrainIcon,
6
- SquareTerminalIcon,
7
- } from "lucide-react";
8
- import { lazy, Suspense, useLayoutEffect, useRef } from "react";
7
+ createContext,
8
+ lazy,
9
+ Suspense,
10
+ useContext,
11
+ useLayoutEffect,
12
+ useRef,
13
+ useState,
14
+ type ReactNode,
15
+ } from "react";
9
16
  import { jsx as rowJsx, jsxs as rowJsxs } from "react/jsx-runtime";
10
17
  import { Markdown } from "../components/markdown";
11
18
  import { cn } from "../lib/cn";
@@ -14,11 +21,18 @@ import { defaultToolRegistry } from "./tool-renderers";
14
21
  import { useEntranceAnimation, useEntranceAnimationLive } from "./entrance";
15
22
  import type { RetainedArtifactLoader, RetainedScreenshotLoader, ToolRegistry } from "./registry";
16
23
  import { useSeenActivityIds } from "./seen-activity-ids";
17
- import { BodyNote, PayloadBlock, ActivityDisclosure, ToolCallTruncationProvider } from "./shared";
24
+ import {
25
+ BodyNote,
26
+ PayloadBlock,
27
+ ActivityDisclosure,
28
+ CompactActivityContext,
29
+ ToolCallTruncationProvider,
30
+ } from "./shared";
18
31
  import { toolDisplayName } from "./tool-display-name";
19
- import type { ActivityItem, MemoryItem, ReasoningItem, SandboxItem, WorkerItem } from "./types";
32
+ import type { ActivityItem, AgentMessageItem, MemoryItem, WorkerItem } from "./types";
20
33
 
21
34
  const LazyFleetDecisionRow = lazy(() => import("./fleet-decision-row"));
35
+ const LazyPlatformActivityRow = lazy(() => import("./platform-activity-row"));
22
36
 
23
37
  /* ----------------------------------------------------------------------------
24
38
  Activity rail
@@ -33,6 +47,8 @@ const LazyFleetDecisionRow = lazy(() => import("./fleet-decision-row"));
33
47
 
34
48
  export type ActivityRailProps = {
35
49
  items: ActivityItem[];
50
+ /** The owning turn remains active between individual phase receipts. */
51
+ startupActive?: boolean;
36
52
  /** Renderer registry for tool calls. Defaults to {@link defaultToolRegistry}. */
37
53
  toolRegistry?: ToolRegistry | undefined;
38
54
  /** Drill into a spawned worker session. */
@@ -65,6 +81,7 @@ function familyOf(item: ActivityItem): string {
65
81
 
66
82
  export function ActivityRail({
67
83
  items,
84
+ startupActive,
68
85
  toolRegistry = defaultToolRegistry,
69
86
  onOpenSession,
70
87
  onMemoryClick,
@@ -73,6 +90,38 @@ export function ActivityRail({
73
90
  bare,
74
91
  className,
75
92
  }: ActivityRailProps) {
93
+ const debug = useStartupDetails();
94
+ const reducedMotion = useReducedMotion();
95
+ const [detailsOpen, setDetailsOpen] = useState(false);
96
+ const phases = items.filter((item) => item.kind === "startup-phase");
97
+ // Empty reasoning envelopes can arrive before any visible model output.
98
+ const hasWork = items.some(
99
+ (item) =>
100
+ item.kind !== "startup-phase" && (item.kind !== "reasoning" || item.text.trim().length > 0),
101
+ );
102
+ const interrupted = phases.some(
103
+ (item) => item.status === "failed" || item.status === "cancelled",
104
+ );
105
+ const providerResponded = phases.some(
106
+ (item) => item.phase === "provider_first_byte" && item.status === "complete",
107
+ );
108
+ const responsePending = phases.some((item) => item.phase === "provider_first_byte");
109
+ const loading =
110
+ !hasWork &&
111
+ !interrupted &&
112
+ (startupActive ?? (!providerResponded && phases.some((item) => item.status === "running")));
113
+ const visibleItems =
114
+ debug || detailsOpen
115
+ ? items
116
+ : items.filter((item) =>
117
+ item.kind === "startup-phase"
118
+ ? item.status === "failed" || item.status === "cancelled"
119
+ : item.kind !== "reasoning" || item.text.trim().length > 0,
120
+ );
121
+ const startedAt = phases.reduce(
122
+ (first, item) => (item.startedAt < first ? item.startedAt : first),
123
+ phases[0]?.startedAt ?? "",
124
+ );
76
125
  const enterMounted = useEntranceAnimation();
77
126
  // Live gate: rails born during bulk capture enter=false forever; with a
78
127
  // seen-id map we still want later live appends to fade (ids gate remounts).
@@ -107,7 +156,7 @@ export function ActivityRail({
107
156
  // Rows sit TIGHT by default (gap-0.5) so a same-family run reads as one
108
157
  // calm cluster; a family change opens real breathing room (mt-3) below,
109
158
  // so a long rail reads as a few clusters, not a metronome of rows.
110
- "flex flex-col gap-0.5",
159
+ "relative flex flex-col gap-0.5",
111
160
  !bare && "border-l-2 border-og-border pl-3 sm:pl-4",
112
161
  // Whole-rail enter: standalone rails only (no seen-id map). Inside
113
162
  // MessageTimeline, unknown ids take per-row enter — remounts stay quiet.
@@ -115,8 +164,43 @@ export function ActivityRail({
115
164
  className,
116
165
  )}
117
166
  >
118
- {items.map((item, index) => {
119
- const newFamily = index > 0 && familyOf(item) !== familyOf(items[index - 1]!);
167
+ <AnimatePresence initial={false}>
168
+ {loading && !debug ? (
169
+ <motion.div
170
+ key="startup"
171
+ initial={{ opacity: 0 }}
172
+ animate={{ opacity: 1, height: "auto" }}
173
+ exit={{
174
+ opacity: 0,
175
+ height: 0,
176
+ pointerEvents: "none",
177
+ }}
178
+ transition={{
179
+ height: { duration: reducedMotion ? 0 : 0.32, ease: [0.22, 1, 0.36, 1] },
180
+ opacity: { duration: reducedMotion ? 0 : 0.16 },
181
+ }}
182
+ style={{ overflow: "hidden" }}
183
+ >
184
+ <GenieLoading
185
+ startedAt={startedAt}
186
+ phase={responsePending ? "waiting" : "preparing"}
187
+ detailsOpen={detailsOpen}
188
+ onShowDetails={() => setDetailsOpen((open) => !open)}
189
+ />
190
+ </motion.div>
191
+ ) : null}
192
+ </AnimatePresence>
193
+ {detailsOpen && !debug && !loading ? (
194
+ <button
195
+ type="button"
196
+ className="og-genie-details self-start"
197
+ onClick={() => setDetailsOpen(false)}
198
+ >
199
+ Hide startup details
200
+ </button>
201
+ ) : null}
202
+ {visibleItems.map((item, index) => {
203
+ const newFamily = index > 0 && familyOf(item) !== familyOf(visibleItems[index - 1]!);
120
204
  const row = renderActivity(
121
205
  item,
122
206
  toolRegistry,
@@ -129,6 +213,7 @@ export function ActivityRail({
129
213
  <div
130
214
  key={item.id}
131
215
  data-og-timeline-row-anchor=""
216
+ data-og-item={item.id}
132
217
  data-og-annotation-source-key={
133
218
  item.kind === "tool-call" ? item.annotationSource?.eventId : undefined
134
219
  }
@@ -142,12 +227,46 @@ export function ActivityRail({
142
227
  );
143
228
  }
144
229
 
230
+ /**
231
+ * Host message renderer for progress notes inside a rail, so notes keep the
232
+ * host's links and formatting. Without one, notes render the library Markdown.
233
+ */
234
+ export const ActivityNoteTextContext = createContext<
235
+ ((text: string, item: AgentMessageItem) => ReactNode) | null
236
+ >(null);
237
+
238
+ /**
239
+ * Assistant commentary folded into the rail: the agent's own words about the
240
+ * work, quieter than an answer and aligned with the step titles.
241
+ */
242
+ function ActivityNoteRow({ item }: { item: AgentMessageItem }) {
243
+ const renderText = useContext(ActivityNoteTextContext);
244
+ if (!item.text.trim()) return null;
245
+ return (
246
+ <div className="flex items-start gap-2 px-1.5 py-1.5" data-og-activity-note="">
247
+ <span className="size-3.5 shrink-0" aria-hidden />
248
+ <MessageSquareTextIcon aria-hidden className="mt-1 size-3.5 shrink-0 text-og-fg-subtle" />
249
+ <div
250
+ className="min-w-0 flex-1 text-og-sm text-og-fg-muted"
251
+ data-og-search-item={item.id}
252
+ data-og-annotation-source-key={item.annotationSource?.eventId}
253
+ >
254
+ {renderText ? (
255
+ renderText(item.text, item)
256
+ ) : (
257
+ <Markdown streaming={item.streaming}>{item.text}</Markdown>
258
+ )}
259
+ </div>
260
+ </div>
261
+ );
262
+ }
263
+
145
264
  /** A never-reachable guard: adding an `ActivityItem` kind is now a compile error. */
146
265
  function assertNever(item: never): never {
147
266
  throw new Error(`ActivityRail: unhandled activity item ${JSON.stringify(item)}`);
148
267
  }
149
268
 
150
- function renderActivity(
269
+ export function renderActivity(
151
270
  item: ActivityItem,
152
271
  toolRegistry: ToolRegistry,
153
272
  onOpenSession: ((sessionId: string) => void) | undefined,
@@ -157,7 +276,22 @@ function renderActivity(
157
276
  ) {
158
277
  switch (item.kind) {
159
278
  case "reasoning":
160
- return <ReasoningRow item={item} />;
279
+ case "sandbox":
280
+ case "startup-phase":
281
+ return (
282
+ <Suspense fallback={null}>
283
+ <LazyPlatformActivityRow
284
+ item={item}
285
+ d={ActivityDisclosure}
286
+ p={PayloadBlock}
287
+ t={toolDisplayName}
288
+ b={BotIcon}
289
+ m={Markdown}
290
+ j={rowJsx}
291
+ s={rowJsxs}
292
+ />
293
+ </Suspense>
294
+ );
161
295
  case "tool-call": {
162
296
  const Renderer = toolRegistry.resolve(item);
163
297
  return (
@@ -172,10 +306,20 @@ function renderActivity(
172
306
  }
173
307
  case "worker":
174
308
  return <WorkerRow item={item} onOpenSession={onOpenSession} />;
175
- case "sandbox":
176
- return <SandboxRow item={item} />;
309
+ case "knowledge":
310
+ return (
311
+ <KnowledgeReceiptRow
312
+ outcome={item.outcome}
313
+ entryId={item.entryId}
314
+ fileId={item.fileId}
315
+ title={item.filename}
316
+ source={Boolean(item.fileId)}
317
+ />
318
+ );
177
319
  case "memory":
178
320
  return <MemoryRow item={item} onMemoryClick={onMemoryClick} />;
321
+ case "agent-message":
322
+ return <ActivityNoteRow item={item} />;
179
323
  case "fleet-decision":
180
324
  return (
181
325
  <Suspense fallback={null}>
@@ -193,32 +337,6 @@ function renderActivity(
193
337
  }
194
338
  }
195
339
 
196
- function ReasoningRow({ item }: { item: ReasoningItem }) {
197
- // Reasoning recedes: a dimmer, lighter-weight title so action rows lead and
198
- // thought rows sit a half-step back in the hierarchy. Body uses the same
199
- // GFM markdown path as agent messages — Codex reasoning often carries
200
- // headings/lists/bold that were previously shown as raw plaintext.
201
- return (
202
- <ActivityDisclosure
203
- icon={<BrainIcon className="size-3.5" />}
204
- iconTone="muted"
205
- title={
206
- item.streaming ? (
207
- "Thinking"
208
- ) : (
209
- <span className="font-normal italic text-og-fg-subtle">Thought</span>
210
- )
211
- }
212
- running={item.streaming}
213
- preview={truncate(item.text, 110)}
214
- >
215
- <div className="text-og-base leading-6 text-og-fg-muted [&_strong]:text-og-fg-muted">
216
- <Markdown streaming={item.streaming}>{item.text}</Markdown>
217
- </div>
218
- </ActivityDisclosure>
219
- );
220
- }
221
-
222
340
  /**
223
341
  * Human labels for the memory kinds, translated at the SDK boundary so a raw
224
342
  * enum slug never renders as UI. Kept local to the library (the app has its own
@@ -317,44 +435,6 @@ function MemoryRow({
317
435
  );
318
436
  }
319
437
 
320
- /**
321
- * A human title for a sandbox operation row. Named platform operations (the lazy
322
- * `sandbox.provision` first-establish that now runs mid-turn) read as calm,
323
- * status-aware English instead of a raw op id — the box coming up should look
324
- * like "Starting sandbox", never an unexplained long-running command. Unnamed /
325
- * unknown ops fall back to the generic id-to-words {@link toolDisplayName}.
326
- */
327
- function sandboxRowTitle(item: SandboxItem): string {
328
- if (item.name === "sandbox.provision") {
329
- if (item.status === "failed") return "Sandbox didn’t start";
330
- if (item.status === "running") return "Starting sandbox";
331
- if (item.origin === "resumed") return "Sandbox reattached";
332
- if (item.origin === "restored") return "Sandbox restored";
333
- if (item.origin === "created") return "Sandbox created";
334
- return "Sandbox ready";
335
- }
336
- return toolDisplayName(item.name);
337
- }
338
-
339
- function SandboxRow({ item }: { item: SandboxItem }) {
340
- return (
341
- <ActivityDisclosure
342
- icon={<SquareTerminalIcon className="size-3.5" />}
343
- iconTone={
344
- item.status === "failed" ? "failed" : item.status === "running" ? "running" : "muted"
345
- }
346
- title={sandboxRowTitle(item)}
347
- running={item.status === "running"}
348
- failed={item.status === "failed"}
349
- cancelled={item.status === "cancelled"}
350
- preview={item.command ?? undefined}
351
- >
352
- {item.command ? <PayloadBlock label="Command" value={item.command} /> : null}
353
- {item.output ? <PayloadBlock label="Output" value={item.output} /> : null}
354
- </ActivityDisclosure>
355
- );
356
- }
357
-
358
438
  /** Spawned/messaged worker sessions get a first-class card, not a tool row. */
359
439
  function WorkerRow({
360
440
  item,
@@ -363,6 +443,7 @@ function WorkerRow({
363
443
  item: WorkerItem;
364
444
  onOpenSession?: ((sessionId: string) => void) | undefined;
365
445
  }) {
446
+ const compact = useContext(CompactActivityContext);
366
447
  const running = item.status === "running";
367
448
  const failed = item.status === "failed";
368
449
  const cancelled = item.status === "cancelled";
@@ -382,6 +463,16 @@ function WorkerRow({
382
463
  : cancelled
383
464
  ? "Worker interrupted"
384
465
  : "Worker messaged";
466
+ if (compact) {
467
+ return (
468
+ <ActivityDisclosure
469
+ icon={<BotIcon className="size-3.5" />}
470
+ title={title}
471
+ preview={item.prompt}
472
+ running={running}
473
+ />
474
+ );
475
+ }
385
476
  // A worker is a first-class actor but still a STEP on the rail — a borderless
386
477
  // row (no card), aligned to its sibling tool rows: the chevron column is an
387
478
  // empty spacer (a worker doesn't expand), then the bot glyph, then the title
@@ -0,0 +1,86 @@
1
+ import type { AllowanceExhaustedRefusal } from "@opengeni/sdk";
2
+ import { GaugeIcon } from "lucide-react";
3
+ import { createContext, useContext, useMemo, type ReactNode } from "react";
4
+
5
+ import { cn } from "../lib/cn";
6
+ import {
7
+ allowanceLabels,
8
+ allowanceResetSentence,
9
+ formatAllowanceInstant,
10
+ type AllowanceLabels,
11
+ } from "../usage/allowance-copy";
12
+ import { useEntranceAnimation } from "./entrance";
13
+
14
+ /**
15
+ * Replace the built-in "usage limit reached" row. Return `undefined` to keep
16
+ * the default for this refusal (for example, only customize member limits).
17
+ */
18
+ export type RenderAllowanceExhausted = (
19
+ refusal: AllowanceExhaustedRefusal,
20
+ context: { labels: AllowanceLabels; defaultRow: ReactNode },
21
+ ) => ReactNode | undefined;
22
+
23
+ type AllowancePresentation = {
24
+ render: RenderAllowanceExhausted | undefined;
25
+ labels: AllowanceLabels;
26
+ };
27
+
28
+ const AllowancePresentationContext = createContext<AllowancePresentation>({
29
+ render: undefined,
30
+ labels: allowanceLabels(),
31
+ });
32
+
33
+ export function AllowancePresentationProvider({
34
+ render,
35
+ labels,
36
+ children,
37
+ }: {
38
+ render: RenderAllowanceExhausted | undefined;
39
+ labels: Partial<AllowanceLabels> | undefined;
40
+ children: ReactNode;
41
+ }) {
42
+ const value = useMemo(() => ({ render, labels: allowanceLabels(labels) }), [render, labels]);
43
+ return (
44
+ <AllowancePresentationContext.Provider value={value}>
45
+ {children}
46
+ </AllowancePresentationContext.Provider>
47
+ );
48
+ }
49
+
50
+ /**
51
+ * A usage ceiling stopped further work. Calm by design: nothing failed, the
52
+ * conversation is kept, and the row says who can raise the limit and when it
53
+ * resets. Never the server's prose or a member identifier.
54
+ */
55
+ export function AllowanceExhaustedRow({ refusal }: { refusal: AllowanceExhaustedRefusal }) {
56
+ const { render, labels } = useContext(AllowancePresentationContext);
57
+ const enter = useEntranceAnimation();
58
+ const workspace = refusal.scope === "workspace";
59
+ const defaultRow = (
60
+ <div
61
+ className={cn(
62
+ enter && "animate-og-enter",
63
+ "flex items-start gap-2.5 rounded-og-md border border-og-status-waiting/35 bg-og-status-waiting/8 px-3.5 py-2.5 text-og-menu text-og-fg",
64
+ )}
65
+ role="status"
66
+ data-og-allowance-exhausted={refusal.scope}
67
+ >
68
+ <GaugeIcon aria-hidden className="mt-0.5 size-4 shrink-0 text-og-status-waiting" />
69
+ <div className="min-w-0 flex-1">
70
+ <p className="font-medium">
71
+ {workspace ? labels.workspaceLimitReachedTitle : labels.memberLimitReachedTitle}
72
+ </p>
73
+ <p className="mt-0.5 text-og-fg-muted">
74
+ {workspace ? labels.workspaceRemedy : labels.memberRemedy}{" "}
75
+ <span
76
+ title={refusal.resetsAt ? formatAllowanceInstant(refusal.resetsAt) : undefined}
77
+ className="whitespace-nowrap"
78
+ >
79
+ {allowanceResetSentence(labels, refusal.resetsAt)}
80
+ </span>
81
+ </p>
82
+ </div>
83
+ </div>
84
+ );
85
+ return <>{render?.(refusal, { labels, defaultRow }) ?? defaultRow}</>;
86
+ }