@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,42 @@
1
+ import type { ContextCompactionItem } from "./types";
2
+
3
+ /**
4
+ * Subtitle for a settled compaction landmark. A definitive provider rejection
5
+ * repeats deterministically for the same conversation, so it names the
6
+ * rejected field and withholds the generic retry promise; every other skip
7
+ * keeps its existing copy.
8
+ */
9
+ export function compactionSkipSubtitle(
10
+ reason: string | null,
11
+ providerRejection: ContextCompactionItem["providerRejection"] = null,
12
+ ): string {
13
+ switch (reason) {
14
+ case "no_history":
15
+ return "No active history to compact";
16
+ case "replacement_not_smaller":
17
+ return "Checkpoint would not reduce memory size";
18
+ case "replacement_exceeds_model_budget":
19
+ return "Checkpoint exceeds this model's context budget. Chat history is unchanged.";
20
+ case "replacement_unchanged":
21
+ return "Checkpoint made no progress";
22
+ case "summarization_failed":
23
+ return providerRejection
24
+ ? `The model provider rejected the compaction request (${describeCompactionProviderRejection(providerRejection)}). Chat history is unchanged. Repeating it fails the same way until the conversation changes; if a new message fails again, start a new session.`
25
+ : "Request it again to retry. Chat history is unchanged.";
26
+ default:
27
+ return "Compaction was not needed. Chat history is unchanged.";
28
+ }
29
+ }
30
+
31
+ /** `HTTP 400 invalid_request_error, param input[3].encrypted_content`; identifiers only. */
32
+ export function describeCompactionProviderRejection(
33
+ rejection: NonNullable<ContextCompactionItem["providerRejection"]>,
34
+ ): string {
35
+ const parts = [
36
+ `HTTP ${rejection.httpStatus}${rejection.type ? ` ${rejection.type}` : ""}${
37
+ rejection.code ? ` ${rejection.code}` : ""
38
+ }`,
39
+ ];
40
+ if (rejection.param) parts.push(`param ${rejection.param}`);
41
+ return parts.join(", ");
42
+ }
@@ -1,4 +1,4 @@
1
- import { createContext, useContext, useRef } from "react";
1
+ import { createContext, useContext, useRef, type ReactNode } from "react";
2
2
 
3
3
  /* ----------------------------------------------------------------------------
4
4
  Entrance animation gating
@@ -15,8 +15,33 @@ import { createContext, useContext, useRef } from "react";
15
15
  -------------------------------------------------------------------------- */
16
16
 
17
17
  const EntranceAnimationContext = createContext(true);
18
+ const EntranceAnimationLiveContext = createContext(true);
18
19
 
19
- export const EntranceAnimationProvider = EntranceAnimationContext.Provider;
20
+ /**
21
+ * Freeze the mount-time gate for this subtree while publishing a separate live
22
+ * gate to activity rails that need later appends to animate after a bulk paint.
23
+ * MessageTimeline mounts one provider per durable group, so existing groups do
24
+ * not receive a context invalidation when a prepend toggles bulk mode and new
25
+ * groups still capture the value from the commit that created them.
26
+ */
27
+ export function EntranceAnimationProvider({
28
+ value,
29
+ liveValue = value,
30
+ children,
31
+ }: {
32
+ value: boolean;
33
+ liveValue?: boolean | undefined;
34
+ children: ReactNode;
35
+ }) {
36
+ const mountedValue = useRef(value).current;
37
+ return (
38
+ <EntranceAnimationContext.Provider value={mountedValue}>
39
+ <EntranceAnimationLiveContext.Provider value={liveValue}>
40
+ {children}
41
+ </EntranceAnimationLiveContext.Provider>
42
+ </EntranceAnimationContext.Provider>
43
+ );
44
+ }
20
45
 
21
46
  /**
22
47
  * Live entrance gate from the nearest provider. Prefer
@@ -25,7 +50,7 @@ export const EntranceAnimationProvider = EntranceAnimationContext.Provider;
25
50
  * later appends after a bulk window clears.
26
51
  */
27
52
  export function useEntranceAnimationLive(): boolean {
28
- return useContext(EntranceAnimationContext);
53
+ return useContext(EntranceAnimationLiveContext);
29
54
  }
30
55
 
31
56
  /**
@@ -8,6 +8,7 @@ const FLEET_ACTUAL_REASONS = [
8
8
  "rotation",
9
9
  "active",
10
10
  "all_capped",
11
+ "allocator_disabled",
11
12
  "none",
12
13
  ] as const;
13
14
  const FLEET_SHADOW_OUTCOMES = ["selected", "paced", "none"] as const;
@@ -334,7 +335,7 @@ function fleetDecisionSemanticsAreConsistent(input: {
334
335
  input.actualOutcome === "selected"
335
336
  ? ["lease_reused", "pin", "rotation", "active"].includes(input.actualReason)
336
337
  : input.actualOutcome === "waiting"
337
- ? input.actualReason === "all_capped"
338
+ ? ["all_capped", "allocator_disabled"].includes(input.actualReason)
338
339
  : input.actualReason === "none";
339
340
  const shadowConsistent =
340
341
  input.shadowOutcome === "selected"
@@ -28,6 +28,7 @@ const FLEET_ACTUAL_REASON_LABEL: Record<FleetDecisionItem["actualReason"], strin
28
28
  rotation: "Rotated for capacity",
29
29
  active: "Used the active subscription",
30
30
  all_capped: "All observed subscriptions were capped",
31
+ allocator_disabled: "The policy-selected subscription was disabled for new allocations",
31
32
  none: "No production candidate was selected",
32
33
  };
33
34
 
@@ -0,0 +1,136 @@
1
+ import { ThinkingOrb } from "thinking-orbs";
2
+ import { useThemeType } from "../lib/use-theme-type";
3
+ import { createContext, useContext, useEffect, useState, type ReactNode } from "react";
4
+
5
+ export type GenieLoadingRenderProps = {
6
+ startedAt: string;
7
+ phase: "preparing" | "waiting";
8
+ detailsOpen: boolean;
9
+ onShowDetails: () => void;
10
+ };
11
+
12
+ export type GenieLoadingOptions = {
13
+ /** Replace the visual while preserving SDK loading visibility and transitions. */
14
+ render?: (props: GenieLoadingRenderProps) => ReactNode;
15
+ phrases?: readonly string[];
16
+ /** Native copy overrides. Omitted messages retain the default English copy. */
17
+ messages?: {
18
+ status?: string;
19
+ slowStatus?: string;
20
+ slowText?: string;
21
+ showDetails?: string;
22
+ hideDetails?: string;
23
+ };
24
+ /** Public adapter options; the renderer dependency's declarations stay private. */
25
+ orb?: {
26
+ state?:
27
+ | "working"
28
+ | "searching"
29
+ | "solving"
30
+ | "listening"
31
+ | "connecting"
32
+ | "weaving"
33
+ | "composing"
34
+ | "breathing"
35
+ | "shaping";
36
+ size?: 64 | 20;
37
+ speed?: number;
38
+ };
39
+ };
40
+ export const GenieLoadingOptionsContext = createContext<GenieLoadingOptions | undefined>(undefined);
41
+
42
+ const PHRASES = [
43
+ "Polishing the lamp…",
44
+ "Consulting the carpet…",
45
+ "Untangling wishes…",
46
+ "Summoning a little cleverness…",
47
+ "Checking the fine print on infinity…",
48
+ "Warming up the abracadabra…",
49
+ "Rearranging the stars…",
50
+ "Negotiating with the lamp…",
51
+ "Dusting off a thousand years…",
52
+ "Wishful thinking…",
53
+ "Decanting a little magic…",
54
+ "Finding the good stardust…",
55
+ "Fluffing the magic carpet…",
56
+ "Putting a wish into motion…",
57
+ "A little hocus. A little pocus…",
58
+ ];
59
+ const WAITING_PHRASES = ["Waiting for a response…"];
60
+
61
+ /** Decorative copy never substitutes for a failure or claims measurable progress. */
62
+ export function GenieLoading({
63
+ startedAt,
64
+ phase = "preparing",
65
+ onShowDetails,
66
+ detailsOpen = false,
67
+ }: {
68
+ startedAt: string;
69
+ phase?: GenieLoadingRenderProps["phase"];
70
+ onShowDetails: () => void;
71
+ detailsOpen?: boolean;
72
+ }) {
73
+ const options = useContext(GenieLoadingOptionsContext);
74
+ const waiting = phase === "waiting";
75
+ const phrases = options?.phrases?.length ? options.phrases : waiting ? WAITING_PHRASES : PHRASES;
76
+ const theme = useThemeType(undefined);
77
+ const [phrase, setPhrase] = useState(0);
78
+ const [showDetails, setShowDetails] = useState(false);
79
+ const [slow, setSlow] = useState(false);
80
+ useEffect(() => {
81
+ const update = () => {
82
+ setShowDetails(Date.now() - Date.parse(startedAt) >= 15_000);
83
+ setSlow(Date.now() - Date.parse(startedAt) >= 30_000);
84
+ if (!document.hidden) setPhrase(Math.floor(Math.random() * phrases.length));
85
+ };
86
+ update();
87
+ const timer = window.setInterval(update, 5_000);
88
+ return () => window.clearInterval(timer);
89
+ }, [startedAt, phrases]);
90
+ if (options?.render) return options.render({ startedAt, phase, detailsOpen, onShowDetails });
91
+ return (
92
+ <div className="og-genie-loading">
93
+ <div
94
+ className="og-genie-orb"
95
+ aria-hidden="true"
96
+ style={{
97
+ width: options?.orb?.size ?? 64,
98
+ height: options?.orb?.size ?? 64,
99
+ flexBasis: options?.orb?.size ?? 64,
100
+ }}
101
+ >
102
+ <ThinkingOrb state="searching" size={64} theme={theme} speed={0.8} {...options?.orb} />
103
+ </div>
104
+ <div className="og-genie-copy">
105
+ <span className="sr-only" role="status">
106
+ {slow
107
+ ? (options?.messages?.slowStatus ??
108
+ (waiting
109
+ ? "Waiting for a response. Taking longer than usual."
110
+ : "Preparing your task. Taking longer than usual."))
111
+ : (options?.messages?.status ??
112
+ (waiting ? "Waiting for a response." : "Preparing your task."))}
113
+ </span>
114
+ <span key={slow ? "slow" : phrase} className="og-genie-phrase" aria-hidden="true">
115
+ {slow
116
+ ? (options?.messages?.slowText ??
117
+ (waiting ? "Still waiting for a response…" : "A little longer than usual…"))
118
+ : phrases[phrase % phrases.length]}
119
+ </span>
120
+ {showDetails || detailsOpen ? (
121
+ <button
122
+ type="button"
123
+ className="og-genie-details"
124
+ aria-expanded={detailsOpen}
125
+ onClick={onShowDetails}
126
+ >
127
+ {detailsOpen
128
+ ? (options?.messages?.hideDetails ?? "Hide details")
129
+ : (options?.messages?.showDetails ?? (waiting ? "Show details" : "Behind the magic"))}
130
+ <span aria-hidden="true"> ↗</span>
131
+ </button>
132
+ ) : null}
133
+ </div>
134
+ </div>
135
+ );
136
+ }
@@ -26,6 +26,7 @@ export {
26
26
  toolDisplayName,
27
27
  toolMatchesLeaf,
28
28
  } from "./projection";
29
+ export type { GroupTimelineOptions } from "./projection";
29
30
 
30
31
  // item types
31
32
  export type {
@@ -36,12 +37,17 @@ export type {
36
37
  FleetDecisionItem,
37
38
  FleetDecisionScoreItem,
38
39
  GoalItem,
40
+ HumanInputAnswerSummary,
41
+ HumanInputItem,
39
42
  MachineInputBatchItem,
40
43
  MachineInputMember,
41
44
  MemoryItem,
45
+ KnowledgeItem,
42
46
  NoticeItem,
43
47
  ReasoningItem,
44
48
  SandboxItem,
49
+ StartupPhase,
50
+ StartupPhaseItem,
45
51
  SessionStatusItem,
46
52
  TimelineGroup,
47
53
  TimelineItem,
@@ -88,6 +94,7 @@ export type { ActivityDisclosureProps, DisclosureChip } from "./shared";
88
94
 
89
95
  // screenshot lightbox
90
96
  export { LightboxProvider, useLightbox, useLightboxOptional } from "./screenshot-lightbox";
97
+ export type { LightboxControlLabels } from "./screenshot-lightbox";
91
98
 
92
99
  // disclosure defaults (opt-in initial-open seed; for screenshot/test instrumentation)
93
100
  export { DisclosureDefaultsProvider, useForcedDefaultOpen } from "./disclosure-context";
@@ -113,6 +120,7 @@ export type {
113
120
  TurnSummaryFacetResult,
114
121
  TurnSummaryOptions,
115
122
  TurnSummaryProps,
123
+ TurnSummaryStatus,
116
124
  } from "./turn-summary";
117
125
 
118
126
  // parsers (pure, reusable by custom renderers)
@@ -134,3 +142,6 @@ export {
134
142
  v4aToGitFileDiff,
135
143
  } from "./parsers";
136
144
  export type { ApplyPatchOperation } from "./parsers";
145
+
146
+ export { KnowledgeActivityProvider } from "./knowledge-receipt";
147
+ export type { KnowledgeActivityActions } from "./knowledge-receipt";
@@ -0,0 +1,100 @@
1
+ import { createContext, useContext, useState, type ReactNode } from "react";
2
+ import { BrainCircuitIcon } from "lucide-react";
3
+ import { ActivityDisclosure, BodyNote } from "./shared";
4
+
5
+ export type KnowledgeActivityActions = {
6
+ onInspect?: ((entryId: string) => void) | undefined;
7
+ onRetryFile?: ((fileId: string) => Promise<boolean | void>) | undefined;
8
+ retryDisabled?: boolean | undefined;
9
+ };
10
+ const KnowledgeActions = createContext<KnowledgeActivityActions>({});
11
+ export function KnowledgeActivityProvider({
12
+ children,
13
+ ...actions
14
+ }: KnowledgeActivityActions & { children: ReactNode }) {
15
+ return <KnowledgeActions.Provider value={actions}>{children}</KnowledgeActions.Provider>;
16
+ }
17
+
18
+ /** A saved/pending result never opens or blocks the human-input surface. */
19
+ export function KnowledgeReceiptRow(props: {
20
+ outcome: "published" | "pending" | "rejected" | "archived" | "failed";
21
+ entryId?: string | undefined;
22
+ fileId?: string | undefined;
23
+ title?: string | undefined;
24
+ source?: boolean | undefined;
25
+ }) {
26
+ const actions = useContext(KnowledgeActions);
27
+ const [retrying, setRetrying] = useState(false);
28
+ const [retrySent, setRetrySent] = useState(false);
29
+ const [error, setError] = useState<string | null>(null);
30
+ const label =
31
+ props.outcome === "pending"
32
+ ? "Knowledge saved for review"
33
+ : props.outcome === "failed"
34
+ ? "Source preparation failed"
35
+ : props.outcome === "rejected"
36
+ ? "Source remains rejected"
37
+ : props.outcome === "archived"
38
+ ? "Knowledge archived"
39
+ : props.source
40
+ ? "Source saved to Knowledge"
41
+ : "Saved to Knowledge";
42
+ const actionClass =
43
+ "rounded-og-sm px-1 py-0.5 text-og-sm text-og-fg-muted hover:text-og-fg focus-visible:outline-2 focus-visible:outline-og-accent disabled:opacity-50";
44
+ return (
45
+ <ActivityDisclosure
46
+ icon={<BrainCircuitIcon className="size-3.5" />}
47
+ iconTone="muted"
48
+ title={label}
49
+ preview={props.title}
50
+ >
51
+ {props.outcome === "pending" ? (
52
+ <BodyNote>
53
+ Saved in Needs review. This task continues; future tasks can use it after approval.
54
+ </BodyNote>
55
+ ) : null}
56
+ {props.outcome === "failed" ? (
57
+ <BodyNote>
58
+ The original file remains attached. Searchable text has not been retained.
59
+ </BodyNote>
60
+ ) : null}
61
+ {props.outcome === "rejected" ? (
62
+ <BodyNote>Processing the file again leaves the review decision unchanged.</BodyNote>
63
+ ) : null}
64
+ {props.entryId && actions.onInspect ? (
65
+ <button
66
+ className={actionClass}
67
+ type="button"
68
+ onClick={() => actions.onInspect?.(props.entryId!)}
69
+ >
70
+ {props.outcome === "pending" ? "Review in Knowledge" : "View in Knowledge"}
71
+ </button>
72
+ ) : null}
73
+ {props.outcome === "failed" && props.fileId && actions.onRetryFile ? (
74
+ <button
75
+ className={actionClass}
76
+ type="button"
77
+ disabled={retrying || retrySent || actions.retryDisabled}
78
+ onClick={() => {
79
+ setRetrying(true);
80
+ setError(null);
81
+ void actions.onRetryFile!(props.fileId!)
82
+ .then((sent) => {
83
+ if (sent !== false) setRetrySent(true);
84
+ else setError("Could not start the retry. Try again when the chat is ready.");
85
+ })
86
+ .catch(() => setError("Could not start the retry. Please try again."))
87
+ .finally(() => setRetrying(false));
88
+ }}
89
+ >
90
+ {retrying ? "Starting retry…" : retrySent ? "Retry requested" : "Retry preparation"}
91
+ </button>
92
+ ) : null}
93
+ {error ? (
94
+ <p role="alert" className="text-og-sm">
95
+ {error}
96
+ </p>
97
+ ) : null}
98
+ </ActivityDisclosure>
99
+ );
100
+ }
@@ -566,8 +566,8 @@ export function retainedScreenshotMetadata(out: unknown): RetainedArtifactMetada
566
566
  if (!value.available) {
567
567
  return typeof value.reason === "string" ? (value as unknown as RetainedArtifactMetadata) : null;
568
568
  }
569
- return value.kind === "computer_screenshot" &&
570
- value.contentType === "image/png" &&
569
+ return (value.kind === "computer_screenshot" || value.kind === "browser_screenshot") &&
570
+ ["image/png", "image/jpeg", "image/webp"].includes(String(value.contentType)) &&
571
571
  typeof value.originalBytes === "number" &&
572
572
  typeof value.sha256 === "string" &&
573
573
  value.dimensions !== null &&
@@ -0,0 +1,216 @@
1
+ import type { ReasoningItem, SandboxItem, StartupPhaseItem } from "./types";
2
+
3
+ type RowJsx = typeof import("react/jsx-runtime").jsx;
4
+ type RowJsxs = typeof import("react/jsx-runtime").jsxs;
5
+
6
+ export default function PlatformActivityRow({
7
+ item,
8
+ d: ActivityDisclosure,
9
+ p: PayloadBlock,
10
+ t: displayName,
11
+ b: BotIcon,
12
+ m: Markdown,
13
+ j,
14
+ s,
15
+ }: {
16
+ item: ReasoningItem | SandboxItem | StartupPhaseItem;
17
+ d: typeof import("./shared").ActivityDisclosure;
18
+ p: typeof import("./shared").PayloadBlock;
19
+ t: (name: string) => string;
20
+ b: typeof import("lucide-react").BotIcon;
21
+ m: typeof import("../components/markdown").Markdown;
22
+ j: RowJsx;
23
+ s: RowJsxs;
24
+ }) {
25
+ if (item.kind === "reasoning") {
26
+ return j(ActivityDisclosure, {
27
+ icon: brainIcon(j, s),
28
+ iconTone: "muted",
29
+ title: item.streaming
30
+ ? "Thinking"
31
+ : j("span", {
32
+ className: "font-normal italic text-og-fg-subtle",
33
+ children: "Thought",
34
+ }),
35
+ running: item.streaming,
36
+ compactPreview: item.text.replace(/\*\*|__|`/g, "").replace(/\s+/g, " "),
37
+ preview: j("span", {
38
+ className: "og-reasoning-preview",
39
+ children: j(Markdown, { streaming: item.streaming, children: item.text }),
40
+ }),
41
+ children: j("div", {
42
+ className: "text-og-base leading-6 text-og-fg-muted [&_strong]:text-og-fg-muted",
43
+ children: j(Markdown, { streaming: item.streaming, children: item.text }),
44
+ }),
45
+ });
46
+ }
47
+ if (item.kind === "sandbox") {
48
+ return s(ActivityDisclosure, {
49
+ icon: terminalIcon(j, s),
50
+ iconTone:
51
+ item.status === "failed" ? "failed" : item.status === "running" ? "running" : "muted",
52
+ title: sandboxRowTitle(item, displayName),
53
+ running: item.status === "running",
54
+ failed: item.status === "failed",
55
+ cancelled: item.status === "cancelled",
56
+ preview: item.command ?? undefined,
57
+ children: [
58
+ item.command ? j(PayloadBlock, { label: "Command", value: item.command }, "command") : null,
59
+ item.output ? j(PayloadBlock, { label: "Output", value: item.output }, "output") : null,
60
+ ],
61
+ });
62
+ }
63
+
64
+ const failed = item.status === "failed";
65
+ const running = item.status === "running";
66
+ const duration = startupDuration(item.durationMs);
67
+ return j(ActivityDisclosure, {
68
+ icon: j(BotIcon, { className: "size-3.5" }),
69
+ iconTone: failed ? "failed" : running ? "running" : "muted",
70
+ title: item.blockedReason
71
+ ? STARTUP_WAIT_TITLES[item.blockedReason]
72
+ : startupPhaseTitle(item.phase, item.status, item.outcome),
73
+ preview:
74
+ item.phase === "model_preparation"
75
+ ? "Includes overlapping sandbox startup, custom environment setup, repository preparation, and runtime setup shown below."
76
+ : undefined,
77
+ running,
78
+ failed,
79
+ cancelled: item.status === "cancelled",
80
+ chip: duration ? { tone: failed ? "bad" : "muted", text: duration } : undefined,
81
+ expandable: false,
82
+ });
83
+ }
84
+
85
+ function brainIcon(j: RowJsx, s: RowJsxs) {
86
+ return lucideIcon(j, s, "brain", [
87
+ j("path", { d: "M 12 18V5" }, "spine"),
88
+ j("path", { d: "M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4" }, "center"),
89
+ j("path", { d: "M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5" }, "top"),
90
+ j("path", { d: "M17.997 5.125a4 4 0 0 1 2.526 5.77" }, "upper-right"),
91
+ j("path", { d: "M18 18a4 4 0 0 0 2-7.464" }, "right"),
92
+ j("path", { d: "M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517" }, "base"),
93
+ j("path", { d: "M6 18a4 4 0 0 1-2-7.464" }, "left"),
94
+ j("path", { d: "M6.003 5.125a4 4 0 0 0-2.526 5.77" }, "upper-left"),
95
+ ]);
96
+ }
97
+
98
+ function terminalIcon(j: RowJsx, s: RowJsxs) {
99
+ return lucideIcon(j, s, "square-terminal", [
100
+ j("path", { d: "m7 11 2-2-2-2" }, "prompt"),
101
+ j("path", { d: "M11 13h4" }, "cursor"),
102
+ j("rect", { width: 18, height: 18, x: 3, y: 3, rx: 2, ry: 2 }, "frame"),
103
+ ]);
104
+ }
105
+
106
+ function lucideIcon(j: RowJsx, s: RowJsxs, name: string, children: ReturnType<RowJsx>[]) {
107
+ return s("svg", {
108
+ "aria-hidden": "true",
109
+ className: `lucide lucide-${name} size-3.5`,
110
+ fill: "none",
111
+ height: 24,
112
+ stroke: "currentColor",
113
+ strokeLinecap: "round",
114
+ strokeLinejoin: "round",
115
+ strokeWidth: 2,
116
+ viewBox: "0 0 24 24",
117
+ width: 24,
118
+ children,
119
+ });
120
+ }
121
+
122
+ function sandboxRowTitle(item: SandboxItem, displayName: (name: string) => string): string {
123
+ if (item.name === "sandbox.provision") {
124
+ return startupPhaseTitle(
125
+ "sandbox",
126
+ item.status === "cancelled" ? "complete" : item.status,
127
+ item.origin ?? null,
128
+ );
129
+ }
130
+ return displayName(item.name);
131
+ }
132
+
133
+ function startupPhaseTitle(
134
+ phase: StartupPhaseItem["phase"],
135
+ status: StartupPhaseItem["status"],
136
+ outcome: StartupPhaseItem["outcome"],
137
+ ): string {
138
+ if (status === "complete" && phase === "sandbox" && outcome && outcome !== "skipped") {
139
+ return `Sandbox ${outcome === "resumed" ? "reattached" : outcome}`;
140
+ }
141
+ if (status === "complete" && phase === "rig" && outcome === "skipped") {
142
+ return "Sandbox Environment already ready";
143
+ }
144
+ const statusIndex =
145
+ status === "running" ? 0 : status === "failed" ? 1 : status === "cancelled" ? 2 : 3;
146
+ return STARTUP_PHASE_TITLES[phase][statusIndex];
147
+ }
148
+
149
+ const STARTUP_WAIT_TITLES: Record<NonNullable<StartupPhaseItem["blockedReason"]>, string> = {
150
+ capture_in_progress: "Waiting for sandbox checkpoint",
151
+ rotation_in_progress: "Waiting for sandbox rotation",
152
+ provider_recovery_in_progress: "Waiting for sandbox recovery",
153
+ };
154
+
155
+ const STARTUP_PHASE_TITLES: Record<
156
+ StartupPhaseItem["phase"],
157
+ readonly [string, string, string, string]
158
+ > = {
159
+ queue: [
160
+ "Waiting for a worker",
161
+ "Worker startup failed",
162
+ "Worker wait interrupted",
163
+ "Worker started",
164
+ ],
165
+ sandbox: [
166
+ "Starting sandbox",
167
+ "Sandbox didn’t start",
168
+ "Sandbox startup interrupted",
169
+ "Sandbox ready",
170
+ ],
171
+ rig: [
172
+ "Setting up sandbox environment",
173
+ "Sandbox Environment setup failed",
174
+ "Sandbox Environment setup interrupted",
175
+ "Sandbox Environment ready",
176
+ ],
177
+ repository: [
178
+ "Preparing repository",
179
+ "Repository preparation failed",
180
+ "Repository preparation interrupted",
181
+ "Repository ready",
182
+ ],
183
+ files: [
184
+ "Preparing files",
185
+ "File preparation failed",
186
+ "File preparation interrupted",
187
+ "Files ready",
188
+ ],
189
+ tools: [
190
+ "Connecting tools",
191
+ "Tool connection failed",
192
+ "Tool connection interrupted",
193
+ "Tools ready",
194
+ ],
195
+ model_preparation: [
196
+ "Preparing runtime and model request",
197
+ "Runtime/model preparation failed",
198
+ "Runtime/model preparation interrupted",
199
+ "Model request dispatched",
200
+ ],
201
+ provider_first_byte: [
202
+ "Waiting for model",
203
+ "Model didn’t respond",
204
+ "Model wait interrupted",
205
+ "Model started responding",
206
+ ],
207
+ };
208
+
209
+ function startupDuration(durationMs: number | null): string | null {
210
+ if (durationMs === null || !Number.isFinite(durationMs) || durationMs < 0) return null;
211
+ if (durationMs < 1_000) return `${Math.round(durationMs)}ms`;
212
+ if (durationMs < 60_000) return `${(durationMs / 1_000).toFixed(1)}s`;
213
+ const minutes = Math.floor(durationMs / 60_000);
214
+ const seconds = Math.round((durationMs % 60_000) / 1_000);
215
+ return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
216
+ }
@@ -0,0 +1,49 @@
1
+ import { normalizeMcpOutput, parseSandboxFileArtifactReceipt } from "@opengeni/sdk";
2
+ import { mcpToolLeaf } from "./tool-display-name";
3
+ import type { ActivityItem, TimelineGroup } from "./types";
4
+
5
+ /*
6
+ * Pure presentation facts shared by the projection and the renderers. Kept
7
+ * free of React so the session-only entry can inspect primary output without pulling
8
+ * in rendering code.
9
+ */
10
+
11
+ /** Shared browser preview allowlist; other published files remain downloads. */
12
+ export function isRetainedImageContentType(contentType: string): boolean {
13
+ return [
14
+ "image/png",
15
+ "image/jpeg",
16
+ "image/gif",
17
+ "image/webp",
18
+ "image/avif",
19
+ "image/svg+xml",
20
+ ].includes(contentType);
21
+ }
22
+
23
+ /** Deliberately published images are primary output, not incidental screenshots. */
24
+ export function activityPresentsImage(items: readonly ActivityItem[]): boolean {
25
+ return items.some((item) => {
26
+ if (item.kind !== "tool-call") return false;
27
+ const name = mcpToolLeaf(item.name);
28
+ if (name === "generate_image" || name === "image_generation_call") return true;
29
+ if (item.status !== "complete" || name !== "sandbox_file_publish") return false;
30
+ const output = normalizeMcpOutput(item.output);
31
+ if (output.isError) return false;
32
+ const receipt = parseSandboxFileArtifactReceipt(output.text);
33
+ return receipt !== null && isRetainedImageContentType(receipt.artifact.contentType);
34
+ });
35
+ }
36
+
37
+ export function timelineGroupContainsPresentedImage(group: TimelineGroup): boolean {
38
+ switch (group.kind) {
39
+ case "item":
40
+ return false;
41
+ case "activity":
42
+ return (
43
+ activityPresentsImage(group.items) ||
44
+ (group.work?.details?.some(timelineGroupContainsPresentedImage) ?? false)
45
+ );
46
+ case "turn":
47
+ return group.groups.some(timelineGroupContainsPresentedImage);
48
+ }
49
+ }