@opengeni/react 1.0.1 → 1.0.2-canary.37202341988001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. package/README.md +660 -21
  2. package/dist/accounts.d.ts +64 -0
  3. package/dist/accounts.js +822 -0
  4. package/dist/accounts.js.map +1 -0
  5. package/dist/approvals.d.ts +2 -1
  6. package/dist/artifacts-document.js +3 -2
  7. package/dist/artifacts-presentation.js +3 -2
  8. package/dist/artifacts-spreadsheet.js +2 -2
  9. package/dist/artifacts.d.ts +4 -1
  10. package/dist/artifacts.js +518 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-SHYKQRNX.js +16 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-UGBTNB3L.js +11 -0
  16. package/dist/chat-interactive-block-UGBTNB3L.js.map +1 -0
  17. package/dist/chunk-26ZNDDLZ.js +453 -0
  18. package/dist/chunk-26ZNDDLZ.js.map +1 -0
  19. package/dist/chunk-3CTRFMAK.js +359 -0
  20. package/dist/chunk-3CTRFMAK.js.map +1 -0
  21. package/dist/chunk-447JLCBU.js +209 -0
  22. package/dist/chunk-447JLCBU.js.map +1 -0
  23. package/dist/chunk-4RVYOY4O.js +379 -0
  24. package/dist/chunk-4RVYOY4O.js.map +1 -0
  25. package/dist/chunk-5CVXZA3Y.js +292 -0
  26. package/dist/chunk-5CVXZA3Y.js.map +1 -0
  27. package/dist/chunk-5J4FOW6Q.js +108 -0
  28. package/dist/chunk-5J4FOW6Q.js.map +1 -0
  29. package/dist/chunk-742CZ3L3.js +481 -0
  30. package/dist/chunk-742CZ3L3.js.map +1 -0
  31. package/dist/chunk-A2PI6UMY.js +41 -0
  32. package/dist/chunk-A2PI6UMY.js.map +1 -0
  33. package/dist/{chunk-7WCLAEFV.js → chunk-A4UJB2MM.js} +37 -27
  34. package/dist/chunk-A4UJB2MM.js.map +1 -0
  35. package/dist/chunk-B3V6TG77.js +41 -0
  36. package/dist/chunk-B3V6TG77.js.map +1 -0
  37. package/dist/chunk-BRM6FVZA.js +302 -0
  38. package/dist/chunk-BRM6FVZA.js.map +1 -0
  39. package/dist/chunk-C5X5AJXK.js +182 -0
  40. package/dist/chunk-C5X5AJXK.js.map +1 -0
  41. package/dist/{chunk-6KLX2RH5.js → chunk-DO544OSV.js} +1075 -79
  42. package/dist/chunk-DO544OSV.js.map +1 -0
  43. package/dist/{chunk-R3AZOAB5.js → chunk-DYWBUX5Q.js} +29 -123
  44. package/dist/chunk-DYWBUX5Q.js.map +1 -0
  45. package/dist/{chunk-HA46CYQK.js → chunk-EESD3PY3.js} +792 -537
  46. package/dist/chunk-EESD3PY3.js.map +1 -0
  47. package/dist/{chunk-5UQPNLIO.js → chunk-EN3YTHKR.js} +4117 -3896
  48. package/dist/chunk-EN3YTHKR.js.map +1 -0
  49. package/dist/chunk-ERGYJIBB.js +21 -0
  50. package/dist/chunk-ERGYJIBB.js.map +1 -0
  51. package/dist/chunk-FZCP527Y.js +116 -0
  52. package/dist/chunk-FZCP527Y.js.map +1 -0
  53. package/dist/chunk-GIMRELBW.js +14 -0
  54. package/dist/chunk-GIMRELBW.js.map +1 -0
  55. package/dist/chunk-GYVRFZDY.js +2733 -0
  56. package/dist/chunk-GYVRFZDY.js.map +1 -0
  57. package/dist/{chunk-LLOLUHVG.js → chunk-HDJWDK7W.js} +1358 -2746
  58. package/dist/chunk-HDJWDK7W.js.map +1 -0
  59. package/dist/chunk-I7IWRQLN.js +1608 -0
  60. package/dist/chunk-I7IWRQLN.js.map +1 -0
  61. package/dist/chunk-IT4BJUGF.js +13055 -0
  62. package/dist/chunk-IT4BJUGF.js.map +1 -0
  63. package/dist/chunk-IWIDV7SB.js +1 -0
  64. package/dist/chunk-IWIDV7SB.js.map +1 -0
  65. package/dist/chunk-J2QWVSQY.js +312 -0
  66. package/dist/chunk-J2QWVSQY.js.map +1 -0
  67. package/dist/chunk-J6DBS4T3.js +371 -0
  68. package/dist/chunk-J6DBS4T3.js.map +1 -0
  69. package/dist/{chunk-B6WPZSTT.js → chunk-JIQYUGVL.js} +1331 -1163
  70. package/dist/chunk-JIQYUGVL.js.map +1 -0
  71. package/dist/chunk-JT4JW7BC.js +54 -0
  72. package/dist/chunk-JT4JW7BC.js.map +1 -0
  73. package/dist/chunk-K3HQAKQX.js +24 -0
  74. package/dist/chunk-K3HQAKQX.js.map +1 -0
  75. package/dist/{chunk-PEI6RANI.js → chunk-PNY3JKBJ.js} +309 -74
  76. package/dist/chunk-PNY3JKBJ.js.map +1 -0
  77. package/dist/chunk-RHREZ7BO.js +11 -0
  78. package/dist/chunk-RHREZ7BO.js.map +1 -0
  79. package/dist/chunk-RLUSC2WA.js +299 -0
  80. package/dist/chunk-RLUSC2WA.js.map +1 -0
  81. package/dist/{chunk-IGC6A2ZI.js → chunk-RSI7XYXL.js} +777 -246
  82. package/dist/chunk-RSI7XYXL.js.map +1 -0
  83. package/dist/chunk-SCOTPE2I.js +589 -0
  84. package/dist/chunk-SCOTPE2I.js.map +1 -0
  85. package/dist/{chunk-C5ZPSSS5.js → chunk-TKOTKRWY.js} +5 -4
  86. package/dist/{chunk-C5ZPSSS5.js.map → chunk-TKOTKRWY.js.map} +1 -1
  87. package/dist/chunk-TMYGL6X5.js +742 -0
  88. package/dist/chunk-TMYGL6X5.js.map +1 -0
  89. package/dist/chunk-UGLEYEMP.js +33 -0
  90. package/dist/chunk-UGLEYEMP.js.map +1 -0
  91. package/dist/chunk-UK4TINKT.js +27 -0
  92. package/dist/chunk-UK4TINKT.js.map +1 -0
  93. package/dist/chunk-UTRTG6LH.js +220 -0
  94. package/dist/chunk-UTRTG6LH.js.map +1 -0
  95. package/dist/chunk-WEHMPOXK.js +39 -0
  96. package/dist/chunk-WEHMPOXK.js.map +1 -0
  97. package/dist/chunk-WGXVEJO5.js +319 -0
  98. package/dist/chunk-WGXVEJO5.js.map +1 -0
  99. package/dist/chunk-WRHIZYZF.js +988 -0
  100. package/dist/chunk-WRHIZYZF.js.map +1 -0
  101. package/dist/{chunk-HUIKIDM5.js → chunk-WUISZ3WU.js} +223 -115
  102. package/dist/chunk-WUISZ3WU.js.map +1 -0
  103. package/dist/chunk-XCHWDJ22.js +107 -0
  104. package/dist/chunk-XCHWDJ22.js.map +1 -0
  105. package/dist/{chunk-KCGXPP5V.js → chunk-Y2PRMYLC.js} +11 -6
  106. package/dist/chunk-Y2PRMYLC.js.map +1 -0
  107. package/dist/chunk-YBXQDQFX.js +1772 -0
  108. package/dist/chunk-YBXQDQFX.js.map +1 -0
  109. package/dist/chunk-YM2DE7BQ.js +3124 -0
  110. package/dist/chunk-YM2DE7BQ.js.map +1 -0
  111. package/dist/{chunk-KZ73RL76.js → chunk-YQEAA6LT.js} +7 -3
  112. package/dist/chunk-YQEAA6LT.js.map +1 -0
  113. package/dist/chunk-YV4L3ILF.js +9 -0
  114. package/dist/chunk-YV4L3ILF.js.map +1 -0
  115. package/dist/chunk-ZYRGEKWS.js +216 -0
  116. package/dist/chunk-ZYRGEKWS.js.map +1 -0
  117. package/dist/client.d.ts +7 -4
  118. package/dist/clipboard.js +1 -0
  119. package/dist/commands/types.d.ts +2 -0
  120. package/dist/components/anthropic-mark.d.ts +3 -0
  121. package/dist/components/approval-surface.d.ts +15 -0
  122. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  123. package/dist/components/artifacts/artifact-sandbox.d.ts +27 -0
  124. package/dist/components/artifacts/artifact-surface.d.ts +3 -1
  125. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  126. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  127. package/dist/components/artifacts/document-editor.d.ts +4 -2
  128. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  129. package/dist/components/artifacts/editable-artifact-view.d.ts +46 -0
  130. package/dist/components/artifacts/editable-document.d.ts +1 -1
  131. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  132. package/dist/components/artifacts/editable-spreadsheet.d.ts +2 -1
  133. package/dist/components/artifacts/index.d.ts +8 -1
  134. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  135. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  136. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  137. package/dist/components/artifacts/published-html-artifact-frame.d.ts +48 -3
  138. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  139. package/dist/components/artifacts/site-view.d.ts +23 -0
  140. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  141. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  142. package/dist/components/browser-select-control.d.ts +16 -0
  143. package/dist/components/browser-viewer.d.ts +10 -1
  144. package/dist/components/chat-composer.d.ts +21 -3
  145. package/dist/components/child-session-link.d.ts +5 -0
  146. package/dist/components/claude-mark.d.ts +3 -0
  147. package/dist/components/code-editor.d.ts +1 -4
  148. package/dist/components/composer.d.ts +45 -4
  149. package/dist/components/computer-viewer.d.ts +4 -1
  150. package/dist/components/copy-button.d.ts +3 -1
  151. package/dist/components/desktop-viewer.d.ts +1 -1
  152. package/dist/components/enrollment-consent.d.ts +6 -3
  153. package/dist/components/file-browser.d.ts +10 -1
  154. package/dist/components/fleet-tile.d.ts +2 -2
  155. package/dist/components/grok-mark.d.ts +26 -0
  156. package/dist/components/human-input-form.d.ts +21 -2
  157. package/dist/components/human-input-surface.d.ts +6 -3
  158. package/dist/components/machine-card.d.ts +4 -1
  159. package/dist/components/machines/machine-detail.d.ts +4 -1
  160. package/dist/components/machines/machine-operation-policy.d.ts +11 -0
  161. package/dist/components/machines-dashboard.d.ts +3 -1
  162. package/dist/components/markdown-table-layout.d.ts +12 -0
  163. package/dist/components/markdown.d.ts +47 -3
  164. package/dist/components/message-timeline.d.ts +72 -9
  165. package/dist/components/model-mark.d.ts +29 -0
  166. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  167. package/dist/components/model-policy-picker.d.ts +62 -13
  168. package/dist/components/open-geni-chat.d.ts +58 -0
  169. package/dist/components/open-geni-links.d.ts +68 -0
  170. package/dist/components/openrouter-mark.d.ts +6 -0
  171. package/dist/components/pierre-file.d.ts +1 -1
  172. package/dist/components/preview-loading.d.ts +2 -0
  173. package/dist/components/queue-item-content.d.ts +9 -0
  174. package/dist/components/sandbox-files.d.ts +13 -2
  175. package/dist/components/sandbox-workspace.d.ts +43 -3
  176. package/dist/components/session-capability-frame.d.ts +35 -0
  177. package/dist/components/session-chrome.d.ts +66 -8
  178. package/dist/components/session-commands-panel.d.ts +6 -0
  179. package/dist/components/session-commands.d.ts +6 -0
  180. package/dist/components/session-connection-request.d.ts +8 -0
  181. package/dist/components/session-conversation.d.ts +89 -0
  182. package/dist/components/session-list.d.ts +36 -0
  183. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  184. package/dist/components/session-proxy-scope.d.ts +21 -0
  185. package/dist/components/timeline-anchor.d.ts +24 -0
  186. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  187. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  188. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  189. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  190. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  191. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  192. package/dist/components/timeline-annotations.d.ts +13 -3
  193. package/dist/components/timeline-reading-progress.d.ts +11 -0
  194. package/dist/components/timeline-search.d.ts +34 -0
  195. package/dist/components/timeline-settlement.d.ts +16 -0
  196. package/dist/components/tip-follow.d.ts +16 -0
  197. package/dist/components/usage-limit-notice.d.ts +49 -0
  198. package/dist/components/usage-member-list.d.ts +91 -0
  199. package/dist/components/usage-meter.d.ts +73 -0
  200. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  201. package/dist/components/user-message-body.d.ts +10 -1
  202. package/dist/components/workspace-dock.d.ts +6 -2
  203. package/dist/composer.d.ts +5 -4
  204. package/dist/composer.js +15 -9
  205. package/dist/computer-viewer-6SRGWRUX.js +19 -0
  206. package/dist/computer-viewer-6SRGWRUX.js.map +1 -0
  207. package/dist/connect-account-identity.d.ts +8 -0
  208. package/dist/connect-accounts.d.ts +15 -0
  209. package/dist/connect-chooser.d.ts +18 -0
  210. package/dist/connect-panel.d.ts +18 -0
  211. package/dist/connect-setup.d.ts +16 -0
  212. package/dist/connect.d.ts +21 -0
  213. package/dist/connect.js +2129 -0
  214. package/dist/connect.js.map +1 -0
  215. package/dist/connection-catalog.d.ts +38 -0
  216. package/dist/connection-discovery.d.ts +12 -0
  217. package/dist/connection-installed.d.ts +17 -0
  218. package/dist/connection-logo.d.ts +9 -0
  219. package/dist/connection-service-logo.d.ts +8 -0
  220. package/dist/connection-service-presentation.d.ts +13 -0
  221. package/dist/connection-skeleton.d.ts +5 -0
  222. package/dist/connection-type-picker.d.ts +6 -0
  223. package/dist/conversation-timeline.d.ts +5 -0
  224. package/dist/desktop.d.ts +7 -0
  225. package/dist/desktop.js +26 -0
  226. package/dist/desktop.js.map +1 -0
  227. package/dist/device-authorization.d.ts +23 -0
  228. package/dist/diffs.d.ts +8 -0
  229. package/dist/diffs.js +14 -0
  230. package/dist/diffs.js.map +1 -0
  231. package/dist/discovery-cache.d.ts +5 -0
  232. package/dist/editor.d.ts +7 -0
  233. package/dist/editor.js +21 -0
  234. package/dist/editor.js.map +1 -0
  235. package/dist/embedded-session-client.d.ts +23 -0
  236. package/dist/file-node-visibility.d.ts +15 -0
  237. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-YZ3ZKWMM.js} +2 -1
  238. package/dist/fleet-decision-row-YZ3ZKWMM.js.map +1 -0
  239. package/dist/hooks/channel-cache.d.ts +23 -0
  240. package/dist/hooks/latest-question.d.ts +25 -0
  241. package/dist/hooks/shared-machines-list.d.ts +14 -0
  242. package/dist/hooks/use-attached-browsers.d.ts +2 -1
  243. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  244. package/dist/hooks/use-browser-session.d.ts +12 -1
  245. package/dist/hooks/use-channels.d.ts +1 -0
  246. package/dist/hooks/use-codex-accounts.d.ts +25 -7
  247. package/dist/hooks/use-composer.d.ts +45 -9
  248. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  249. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  250. package/dist/hooks/use-computer-session.d.ts +2 -0
  251. package/dist/hooks/use-connect.d.ts +22 -0
  252. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  253. package/dist/hooks/use-file-attachments.d.ts +21 -2
  254. package/dist/hooks/use-machine-chip.d.ts +3 -3
  255. package/dist/hooks/use-machines.d.ts +19 -1
  256. package/dist/hooks/use-sandbox-files.d.ts +5 -1
  257. package/dist/hooks/use-session-background-commands.d.ts +14 -0
  258. package/dist/hooks/use-session-events.d.ts +30 -8
  259. package/dist/hooks/use-session-lineage.d.ts +4 -0
  260. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  261. package/dist/hooks/use-session.d.ts +6 -0
  262. package/dist/hooks/use-turn-queue.d.ts +12 -0
  263. package/dist/hooks/use-usage.d.ts +40 -0
  264. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  265. package/dist/hooks/use-workspace-sessions.d.ts +27 -5
  266. package/dist/human-input.d.ts +3 -1
  267. package/dist/identity-link-accounts.d.ts +11 -0
  268. package/dist/identity-link-consent.d.ts +18 -0
  269. package/dist/index.d.ts +60 -17
  270. package/dist/index.js +2238 -6201
  271. package/dist/index.js.map +1 -1
  272. package/dist/interaction.d.ts +1 -1
  273. package/dist/interaction.js +35 -184
  274. package/dist/interaction.js.map +1 -1
  275. package/dist/latest-question-HTRIS4KJ.js +117 -0
  276. package/dist/latest-question-HTRIS4KJ.js.map +1 -0
  277. package/dist/lib/error-message.d.ts +7 -0
  278. package/dist/lib/format.d.ts +36 -2
  279. package/dist/lib/host-theme.d.ts +70 -0
  280. package/dist/lib/interaction-errors.d.ts +6 -0
  281. package/dist/lib/menu-styles.d.ts +22 -0
  282. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  283. package/dist/lib/workbench-peers.d.ts +36 -0
  284. package/dist/lib/xterm-theme.d.ts +7 -5
  285. package/dist/machines.d.ts +4 -2
  286. package/dist/machines.js +14 -4
  287. package/dist/markdown-table-layout-QXSLK4BY.js +106 -0
  288. package/dist/markdown-table-layout-QXSLK4BY.js.map +1 -0
  289. package/dist/mcp-connection-status.d.ts +14 -0
  290. package/dist/model-policy-picker-menu-M54ISBMN.js +14 -0
  291. package/dist/model-policy-picker-menu-M54ISBMN.js.map +1 -0
  292. package/dist/model-policy.d.ts +19 -3
  293. package/dist/model-policy.js +9 -1
  294. package/dist/older-history.d.ts +30 -0
  295. package/dist/platform-activity-row-627BFZ46.js +182 -0
  296. package/dist/platform-activity-row-627BFZ46.js.map +1 -0
  297. package/dist/plugin-details.d.ts +14 -0
  298. package/dist/plugin-discovery.d.ts +25 -0
  299. package/dist/provider.d.ts +13 -1
  300. package/dist/{queue-surface-implementation-2KVJTYXH.js → queue-surface-implementation-ZHFI5JBP.js} +131 -44
  301. package/dist/queue-surface-implementation-ZHFI5JBP.js.map +1 -0
  302. package/dist/realtime/realtime-control.d.ts +6 -3
  303. package/dist/realtime.js +133 -74
  304. package/dist/realtime.js.map +1 -1
  305. package/dist/sandbox-files-GORZOUUJ.js +20 -0
  306. package/dist/sandbox-files-GORZOUUJ.js.map +1 -0
  307. package/dist/session-auth-recommendation.d.ts +5 -0
  308. package/dist/session-capability-policy.d.ts +12 -0
  309. package/dist/session-ui.d.ts +30 -2
  310. package/dist/session-ui.js +85 -7
  311. package/dist/session-ui.js.map +1 -1
  312. package/dist/session.d.ts +8 -2
  313. package/dist/session.js +30 -19
  314. package/dist/sites-ui.d.ts +34 -0
  315. package/dist/sites.d.ts +3 -0
  316. package/dist/sites.js +11 -0
  317. package/dist/sites.js.map +1 -0
  318. package/dist/skill-discovery.d.ts +47 -0
  319. package/dist/terminal.d.ts +8 -0
  320. package/dist/terminal.js +31 -0
  321. package/dist/terminal.js.map +1 -0
  322. package/dist/timeline/activity-rail.d.ts +11 -2
  323. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  324. package/dist/timeline/compaction-copy.d.ts +10 -0
  325. package/dist/timeline/entrance.d.ts +13 -1
  326. package/dist/timeline/genie-loading.d.ts +34 -0
  327. package/dist/timeline/index.d.ts +6 -2
  328. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  329. package/dist/timeline/platform-activity-row.d.ts +14 -0
  330. package/dist/timeline/presented-image.d.ts +6 -0
  331. package/dist/timeline/projection.d.ts +31 -2
  332. package/dist/timeline/registry.d.ts +2 -0
  333. package/dist/timeline/retained-image.d.ts +18 -0
  334. package/dist/timeline/rolling-activity.d.ts +11 -0
  335. package/dist/timeline/screenshot-lightbox.d.ts +16 -1
  336. package/dist/timeline/shared.d.ts +8 -3
  337. package/dist/timeline/startup-preference.d.ts +3 -0
  338. package/dist/timeline/startup-timings.d.ts +4 -0
  339. package/dist/timeline/tool-display-name.d.ts +2 -1
  340. package/dist/timeline/turn-summary.d.ts +34 -3
  341. package/dist/timeline/types.d.ts +147 -7
  342. package/dist/timeline-annotation-markers-GNDHTGBD.js +165 -0
  343. package/dist/timeline-annotation-markers-GNDHTGBD.js.map +1 -0
  344. package/dist/timeline-annotation-selection-DMLMM2TX.js +241 -0
  345. package/dist/timeline-annotation-selection-DMLMM2TX.js.map +1 -0
  346. package/dist/timeline-annotations-dialog-ELRDBHTS.js +273 -0
  347. package/dist/timeline-annotations-dialog-ELRDBHTS.js.map +1 -0
  348. package/dist/types/machines.d.ts +2 -2
  349. package/dist/usage/allowance-copy.d.ts +25 -0
  350. package/dist/usage/summary.d.ts +35 -0
  351. package/dist/usage.d.ts +13 -0
  352. package/dist/usage.js +1074 -0
  353. package/dist/usage.js.map +1 -0
  354. package/package.json +44 -4
  355. package/src/accounts.tsx +1072 -0
  356. package/src/approvals.ts +8 -1
  357. package/src/artifacts.ts +42 -0
  358. package/src/assets/README.md +8 -0
  359. package/src/assets/gmail.ico +0 -0
  360. package/src/assets/outlook.ico +0 -0
  361. package/src/capability-catalog-row.tsx +94 -0
  362. package/src/capability-logo-fallback.ts +22 -0
  363. package/src/client.ts +22 -13
  364. package/src/commands/registry.ts +18 -15
  365. package/src/commands/types.ts +2 -0
  366. package/src/components/anthropic-mark.tsx +10 -0
  367. package/src/components/approval-surface.tsx +171 -37
  368. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  369. package/src/components/artifacts/artifact-sandbox.tsx +185 -0
  370. package/src/components/artifacts/artifact-surface.tsx +39 -19
  371. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  372. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  373. package/src/components/artifacts/document-editor.tsx +141 -16
  374. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  375. package/src/components/artifacts/editable-artifact-view.tsx +187 -0
  376. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  377. package/src/components/artifacts/editable-document.tsx +37 -36
  378. package/src/components/artifacts/editable-presentation.tsx +36 -18
  379. package/src/components/artifacts/editable-spreadsheet.tsx +5 -2
  380. package/src/components/artifacts/index.ts +44 -0
  381. package/src/components/artifacts/inline-html-document.ts +24 -0
  382. package/src/components/artifacts/latest-task-runner.ts +49 -0
  383. package/src/components/artifacts/presentation-editor.tsx +323 -67
  384. package/src/components/artifacts/published-html-artifact-frame.tsx +338 -5
  385. package/src/components/artifacts/session-artifact-viewer.tsx +376 -0
  386. package/src/components/artifacts/site-view.tsx +116 -0
  387. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  388. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  389. package/src/components/artifacts/spreadsheet-grid.tsx +12 -13
  390. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  391. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  392. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  393. package/src/components/browser-select-control.tsx +312 -0
  394. package/src/components/browser-viewer.tsx +1054 -314
  395. package/src/components/chat-composer.tsx +131 -85
  396. package/src/components/child-session-link.tsx +27 -0
  397. package/src/components/claude-mark.tsx +10 -0
  398. package/src/components/code-editor.tsx +13 -16
  399. package/src/components/composer-transcription-control.tsx +7 -5
  400. package/src/components/composer.tsx +376 -49
  401. package/src/components/computer-viewer.tsx +1041 -329
  402. package/src/components/copy-button.tsx +13 -5
  403. package/src/components/desktop-viewer.tsx +1 -1
  404. package/src/components/enrollment-consent.tsx +65 -7
  405. package/src/components/enrollment-device-flow.tsx +1 -1
  406. package/src/components/file-browser.tsx +158 -34
  407. package/src/components/fleet-tile.tsx +8 -16
  408. package/src/components/generated-video-player.tsx +4 -2
  409. package/src/components/grok-mark.tsx +33 -0
  410. package/src/components/human-input-form.tsx +455 -114
  411. package/src/components/human-input-surface.tsx +18 -7
  412. package/src/components/interaction-intervention-banner.tsx +2 -2
  413. package/src/components/machine-card.tsx +119 -4
  414. package/src/components/machine-dock-bar.tsx +1 -1
  415. package/src/components/machine-input-display.ts +23 -2
  416. package/src/components/machines/machine-detail.tsx +52 -2
  417. package/src/components/machines/machine-operation-policy.tsx +179 -0
  418. package/src/components/machines-dashboard.tsx +8 -17
  419. package/src/components/markdown-table-layout.ts +132 -0
  420. package/src/components/markdown.tsx +473 -44
  421. package/src/components/message-timeline.tsx +2754 -665
  422. package/src/components/model-mark.tsx +90 -0
  423. package/src/components/model-picker.tsx +15 -4
  424. package/src/components/model-policy-picker-menu.tsx +424 -0
  425. package/src/components/model-policy-picker.tsx +337 -381
  426. package/src/components/open-geni-chat.tsx +338 -0
  427. package/src/components/open-geni-links.tsx +179 -0
  428. package/src/components/openrouter-mark.tsx +13 -0
  429. package/src/components/pierre-diff.tsx +41 -16
  430. package/src/components/pierre-file.tsx +36 -11
  431. package/src/components/preview-loading.tsx +154 -0
  432. package/src/components/queue-item-content.ts +14 -0
  433. package/src/components/queue-surface-implementation.tsx +132 -42
  434. package/src/components/queue-surface-state.tsx +3 -1
  435. package/src/components/sandbox-files.tsx +267 -35
  436. package/src/components/sandbox-terminal.tsx +48 -11
  437. package/src/components/sandbox-workspace.tsx +337 -135
  438. package/src/components/session-capability-frame.tsx +192 -0
  439. package/src/components/session-chrome.tsx +1027 -328
  440. package/src/components/session-commands-panel.tsx +126 -0
  441. package/src/components/session-commands.tsx +18 -0
  442. package/src/components/session-connection-request.tsx +97 -0
  443. package/src/components/session-conversation.tsx +526 -0
  444. package/src/components/session-list.tsx +250 -0
  445. package/src/components/session-mcp-capability-card.tsx +680 -0
  446. package/src/components/session-proxy-scope.tsx +92 -0
  447. package/src/components/session-status.tsx +1 -1
  448. package/src/components/timeline-anchor.tsx +119 -0
  449. package/src/components/timeline-annotation-chrome.tsx +196 -0
  450. package/src/components/timeline-annotation-layout.ts +268 -0
  451. package/src/components/timeline-annotation-markers.tsx +185 -0
  452. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  453. package/src/components/timeline-annotation-selection.tsx +106 -54
  454. package/src/components/timeline-annotation-shared.ts +245 -0
  455. package/src/components/timeline-annotations-dialog.tsx +185 -128
  456. package/src/components/timeline-annotations.tsx +189 -45
  457. package/src/components/timeline-reading-progress.ts +80 -0
  458. package/src/components/timeline-search.tsx +168 -0
  459. package/src/components/timeline-settlement.ts +60 -0
  460. package/src/components/tip-follow.ts +70 -7
  461. package/src/components/tooltip.tsx +38 -5
  462. package/src/components/usage-limit-notice.tsx +179 -0
  463. package/src/components/usage-member-list.tsx +792 -0
  464. package/src/components/usage-meter.tsx +382 -0
  465. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  466. package/src/components/user-message-body.tsx +194 -49
  467. package/src/components/workspace-dock.tsx +141 -175
  468. package/src/composer.ts +6 -1
  469. package/src/connect-account-identity.tsx +34 -0
  470. package/src/connect-accounts.tsx +233 -0
  471. package/src/connect-chooser.tsx +336 -0
  472. package/src/connect-panel.tsx +99 -0
  473. package/src/connect-setup.tsx +307 -0
  474. package/src/connect.ts +60 -0
  475. package/src/connection-assets.d.ts +4 -0
  476. package/src/connection-catalog.tsx +162 -0
  477. package/src/connection-discovery.tsx +235 -0
  478. package/src/connection-installed.tsx +51 -0
  479. package/src/connection-logo.tsx +37 -0
  480. package/src/connection-service-logo.tsx +55 -0
  481. package/src/connection-service-presentation.ts +46 -0
  482. package/src/connection-skeleton.tsx +16 -0
  483. package/src/connection-type-picker.tsx +36 -0
  484. package/src/conversation-timeline.ts +92 -0
  485. package/src/desktop.ts +24 -0
  486. package/src/device-authorization.tsx +98 -0
  487. package/src/diffs.ts +16 -0
  488. package/src/discovery-cache.ts +42 -0
  489. package/src/editor.ts +13 -0
  490. package/src/embedded-session-client.ts +104 -0
  491. package/src/file-node-visibility.ts +66 -0
  492. package/src/hooks/channel-cache.ts +104 -0
  493. package/src/hooks/internal.ts +3 -2
  494. package/src/hooks/latest-question.ts +164 -0
  495. package/src/hooks/shared-machines-list.ts +239 -0
  496. package/src/hooks/use-attached-browsers.ts +5 -1
  497. package/src/hooks/use-available-models.ts +20 -14
  498. package/src/hooks/use-browser-frame-stream.ts +25 -3
  499. package/src/hooks/use-browser-session.ts +271 -71
  500. package/src/hooks/use-browser-sessions.ts +7 -1
  501. package/src/hooks/use-channels.ts +32 -10
  502. package/src/hooks/use-codex-accounts.ts +78 -21
  503. package/src/hooks/use-composer.ts +1034 -320
  504. package/src/hooks/use-computer-frame-stream.ts +39 -16
  505. package/src/hooks/use-computer-input-posture.ts +94 -0
  506. package/src/hooks/use-computer-session.ts +110 -32
  507. package/src/hooks/use-computer-sessions.ts +8 -1
  508. package/src/hooks/use-connect.ts +23 -0
  509. package/src/hooks/use-desktop-stream.ts +19 -28
  510. package/src/hooks/use-file-attachments.ts +118 -10
  511. package/src/hooks/use-goal.ts +36 -9
  512. package/src/hooks/use-human-input.ts +31 -4
  513. package/src/hooks/use-last-started-turn-policy.ts +15 -13
  514. package/src/hooks/use-machine-chip.ts +23 -6
  515. package/src/hooks/use-machines.ts +104 -6
  516. package/src/hooks/use-sandbox-files.ts +253 -150
  517. package/src/hooks/use-sandbox-git.ts +58 -29
  518. package/src/hooks/use-session-background-commands.ts +67 -0
  519. package/src/hooks/use-session-capabilities.ts +21 -2
  520. package/src/hooks/use-session-events.ts +759 -433
  521. package/src/hooks/use-session-lineage.ts +28 -6
  522. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  523. package/src/hooks/use-session.ts +75 -16
  524. package/src/hooks/use-slash-commands.ts +6 -11
  525. package/src/hooks/use-turn-queue.ts +113 -13
  526. package/src/hooks/use-usage.ts +100 -0
  527. package/src/hooks/use-video-artifact-playback.ts +1 -1
  528. package/src/hooks/use-voice-input.ts +12 -1
  529. package/src/hooks/use-workspace-capture.ts +3 -2
  530. package/src/hooks/use-workspace-edit.ts +23 -5
  531. package/src/hooks/use-workspace-sessions.ts +99 -11
  532. package/src/human-input.ts +12 -1
  533. package/src/identity-link-accounts.tsx +148 -0
  534. package/src/identity-link-consent.tsx +192 -0
  535. package/src/index.ts +157 -12
  536. package/src/interaction.ts +1 -0
  537. package/src/lib/error-message.ts +37 -0
  538. package/src/lib/format.ts +150 -14
  539. package/src/lib/host-theme.ts +511 -0
  540. package/src/lib/interaction-errors.ts +33 -0
  541. package/src/lib/menu-styles.ts +44 -0
  542. package/src/lib/pierre-diffs-loader.ts +53 -0
  543. package/src/lib/workbench-peers.ts +62 -0
  544. package/src/lib/xterm-theme.ts +23 -21
  545. package/src/machines.ts +9 -1
  546. package/src/mcp-connection-status.ts +35 -0
  547. package/src/model-policy.ts +223 -69
  548. package/src/older-history.ts +87 -0
  549. package/src/plugin-details.tsx +185 -0
  550. package/src/plugin-discovery.tsx +196 -0
  551. package/src/provider.tsx +55 -14
  552. package/src/realtime/dropdown-menu.tsx +19 -12
  553. package/src/realtime/realtime-control.tsx +133 -46
  554. package/src/session-auth-recommendation.ts +48 -0
  555. package/src/session-capability-policy.ts +83 -0
  556. package/src/session-context.ts +4 -3
  557. package/src/session-ui.ts +66 -2
  558. package/src/session.ts +18 -1
  559. package/src/sites-ui.tsx +402 -0
  560. package/src/sites.ts +3 -0
  561. package/src/skill-discovery.tsx +208 -0
  562. package/src/terminal.ts +26 -0
  563. package/src/timeline/activity-rail.tsx +171 -80
  564. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  565. package/src/timeline/compaction-copy.ts +42 -0
  566. package/src/timeline/entrance.tsx +28 -3
  567. package/src/timeline/fleet-decision-projection.ts +2 -1
  568. package/src/timeline/fleet-decision-row.tsx +1 -0
  569. package/src/timeline/genie-loading.tsx +136 -0
  570. package/src/timeline/index.ts +11 -0
  571. package/src/timeline/knowledge-receipt.tsx +100 -0
  572. package/src/timeline/parsers.ts +2 -2
  573. package/src/timeline/platform-activity-row.tsx +216 -0
  574. package/src/timeline/presented-image.ts +49 -0
  575. package/src/timeline/projection.ts +1609 -84
  576. package/src/timeline/registry.ts +15 -3
  577. package/src/timeline/retained-image.ts +97 -0
  578. package/src/timeline/rolling-activity.tsx +92 -0
  579. package/src/timeline/screenshot-lightbox.tsx +115 -17
  580. package/src/timeline/shared.tsx +47 -15
  581. package/src/timeline/startup-preference.ts +33 -0
  582. package/src/timeline/startup-timings.tsx +145 -0
  583. package/src/timeline/tool-display-name.ts +8 -6
  584. package/src/timeline/tool-renderers.tsx +497 -128
  585. package/src/timeline/turn-summary.tsx +218 -44
  586. package/src/timeline/types.ts +192 -7
  587. package/src/types/machines.ts +10 -0
  588. package/src/usage/allowance-copy.ts +64 -0
  589. package/src/usage/summary.ts +93 -0
  590. package/src/usage.ts +50 -0
  591. package/styles/compiled.css +2098 -757
  592. package/styles/connect.css +284 -0
  593. package/styles/connect.d.ts +1 -0
  594. package/styles/effective-tokens.css +1 -0
  595. package/styles/index.css +201 -9
  596. package/styles/responsive.css +27 -1
  597. package/styles/session-capability.css +44 -0
  598. package/styles/tokens.css +135 -65
  599. package/dist/chunk-5UQPNLIO.js.map +0 -1
  600. package/dist/chunk-6KLX2RH5.js.map +0 -1
  601. package/dist/chunk-7WCLAEFV.js.map +0 -1
  602. package/dist/chunk-B6WPZSTT.js.map +0 -1
  603. package/dist/chunk-FK6VG4LL.js +0 -90
  604. package/dist/chunk-FK6VG4LL.js.map +0 -1
  605. package/dist/chunk-HA46CYQK.js.map +0 -1
  606. package/dist/chunk-HUIKIDM5.js.map +0 -1
  607. package/dist/chunk-IGC6A2ZI.js.map +0 -1
  608. package/dist/chunk-KCGXPP5V.js.map +0 -1
  609. package/dist/chunk-KZ73RL76.js.map +0 -1
  610. package/dist/chunk-LAKLF4PA.js +0 -141
  611. package/dist/chunk-LAKLF4PA.js.map +0 -1
  612. package/dist/chunk-LLOLUHVG.js.map +0 -1
  613. package/dist/chunk-MKPIAGVL.js +0 -465
  614. package/dist/chunk-MKPIAGVL.js.map +0 -1
  615. package/dist/chunk-PEI6RANI.js.map +0 -1
  616. package/dist/chunk-R3AZOAB5.js.map +0 -1
  617. package/dist/chunk-WSK7G5LE.js +0 -170
  618. package/dist/chunk-WSK7G5LE.js.map +0 -1
  619. package/dist/chunk-XBZWOM2K.js +0 -218
  620. package/dist/chunk-XBZWOM2K.js.map +0 -1
  621. package/dist/chunk-Y7OEDUJ5.js +0 -8810
  622. package/dist/chunk-Y7OEDUJ5.js.map +0 -1
  623. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  624. package/dist/hooks/use-packs.d.ts +0 -32
  625. package/dist/interactive-workbench-viewers-TOHBXJEE.js +0 -15
  626. package/dist/queue-surface-implementation-2KVJTYXH.js.map +0 -1
  627. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  628. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  629. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  630. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  631. package/src/hooks/use-packs.ts +0 -157
  632. /package/dist/{interactive-workbench-viewers-TOHBXJEE.js.map → browser-viewer-SHYKQRNX.js.map} +0 -0
@@ -0,0 +1,187 @@
1
+ import type { EditableArtifactResource } from "@opengeni/sdk/artifacts";
2
+ import {
3
+ createBrowserEditableArtifactSession,
4
+ type CreateBrowserEditableArtifactSessionOptions,
5
+ type EditableArtifactBrowserRuntime,
6
+ type EditableArtifactCacheAuthority,
7
+ type EditableArtifactModality,
8
+ } from "@opengeni/sdk/editable-artifacts";
9
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
10
+
11
+ import {
12
+ ArtifactLoading,
13
+ ArtifactProblem,
14
+ artifactLoadErrorView,
15
+ useArtifactLabels,
16
+ type ArtifactLoadErrorView,
17
+ } from "./artifact-chrome";
18
+ import { EditableArtifactWorkbenchHost } from "./editable-artifact-workbench";
19
+
20
+ /**
21
+ * The browser kernels an editor needs, one per modality, plus the host-built
22
+ * Worker URL (for Vite: `@opengeni/sdk/editable-artifacts/worker?worker&url`).
23
+ * Kernels come from `@opengeni/artifact-kernel-wasm-{document,spreadsheet,presentation}`.
24
+ */
25
+ export type EditableArtifactRuntimes = Readonly<{
26
+ document: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
27
+ spreadsheet: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
28
+ presentation: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
29
+ workerUrl: string;
30
+ applicationOrigin?: string | undefined;
31
+ /** Loopback development only. */
32
+ allowInsecureDevelopmentAssets?: boolean | undefined;
33
+ }>;
34
+
35
+ /** Everything needed to open one artifact for the current principal. */
36
+ export type OpenedEditableArtifact = Readonly<{
37
+ artifact: EditableArtifactResource;
38
+ authority: EditableArtifactCacheAuthority;
39
+ replicaId: string;
40
+ }>;
41
+
42
+ export type EditableArtifactViewProps = Readonly<{
43
+ /** Absolute API (or session proxy) base the live transport talks to. */
44
+ baseUrl: URL;
45
+ workspaceId: string;
46
+ artifactId: string;
47
+ /** Resolve metadata, cache authority, and replica; called again on retry. */
48
+ open: (signal: AbortSignal) => Promise<OpenedEditableArtifact>;
49
+ runtimes: EditableArtifactRuntimes;
50
+ transport?: CreateBrowserEditableArtifactSessionOptions["transport"];
51
+ /** Show the editor's own title header (hosts with their own header hide it). */
52
+ showHeader?: boolean | undefined;
53
+ /** Re-open when this changes (for example the host's credential version). */
54
+ authorityKey?: string | undefined;
55
+ describeError?: ((error: unknown) => ArtifactLoadErrorView) | undefined;
56
+ onTitle?: ((title: string) => void) | undefined;
57
+ /** Loading copy; defaults to the `opening` label. */
58
+ loadingLabel?: string | undefined;
59
+ }>;
60
+
61
+ type LoadState =
62
+ | Readonly<{ key: string | null; kind: "loading" }>
63
+ | Readonly<{ key: string; kind: "ready"; value: OpenedEditableArtifact }>
64
+ | Readonly<{ key: string; kind: "error"; error: unknown }>;
65
+
66
+ /**
67
+ * One editable document, spreadsheet, or presentation with its first-party
68
+ * editor. The console dock/page and embedding hosts supply only data access.
69
+ */
70
+ export function EditableArtifactView({
71
+ baseUrl,
72
+ workspaceId,
73
+ artifactId,
74
+ open,
75
+ runtimes,
76
+ transport,
77
+ showHeader = true,
78
+ authorityKey,
79
+ describeError,
80
+ onTitle,
81
+ loadingLabel,
82
+ }: EditableArtifactViewProps) {
83
+ const [loadEpoch, setLoadEpoch] = useState(0);
84
+ const labels = useArtifactLabels();
85
+ const loadKey = JSON.stringify([artifactId, authorityKey, baseUrl.href, workspaceId, loadEpoch]);
86
+ const [state, setState] = useState<LoadState>({ key: null, kind: "loading" });
87
+ const current = state.key === loadKey ? state : null;
88
+ const openRef = useRef(open);
89
+ openRef.current = open;
90
+ const onTitleRef = useRef(onTitle);
91
+ onTitleRef.current = onTitle;
92
+ useEffect(() => {
93
+ const abort = new AbortController();
94
+ setState({ key: loadKey, kind: "loading" });
95
+ void openRef
96
+ .current(abort.signal)
97
+ .then((value) => {
98
+ if (abort.signal.aborted) return;
99
+ setState({ key: loadKey, kind: "ready", value });
100
+ onTitleRef.current?.(value.artifact.title);
101
+ })
102
+ .catch((error: unknown) => {
103
+ if (!abort.signal.aborted) setState({ key: loadKey, kind: "error", error });
104
+ });
105
+ return () => abort.abort();
106
+ }, [loadKey]);
107
+
108
+ const ready = current?.kind === "ready" ? current.value : null;
109
+ const transportRef = useRef(transport);
110
+ transportRef.current = transport;
111
+ const sessionKey = useMemo(
112
+ () =>
113
+ ready
114
+ ? JSON.stringify({
115
+ baseUrl: baseUrl.href,
116
+ authorityKey,
117
+ workspaceId,
118
+ artifact: { id: ready.artifact.id, modality: ready.artifact.modality },
119
+ authority: ready.authority,
120
+ replicaId: ready.replicaId,
121
+ workerUrl: runtimes.workerUrl,
122
+ })
123
+ : "",
124
+ [authorityKey, baseUrl.href, ready, runtimes.workerUrl, workspaceId],
125
+ );
126
+ const createSession = useCallback(() => {
127
+ if (!ready) throw new Error("Artifact is not open");
128
+ return createBrowserEditableArtifactSession({
129
+ baseUrl,
130
+ workspaceId,
131
+ artifact: ready.artifact,
132
+ storageAuthority: ready.authority,
133
+ replicaId: ready.replicaId,
134
+ runtime: {
135
+ ...runtimeFor(runtimes, ready.artifact.modality),
136
+ workerUrl: runtimes.workerUrl,
137
+ ...(runtimes.applicationOrigin ? { applicationOrigin: runtimes.applicationOrigin } : {}),
138
+ ...(runtimes.allowInsecureDevelopmentAssets
139
+ ? { allowInsecureDevelopmentAssets: true }
140
+ : {}),
141
+ },
142
+ ...(transportRef.current ? { transport: transportRef.current } : {}),
143
+ });
144
+ }, [baseUrl, ready, runtimes, workspaceId]);
145
+
146
+ if (!current || current.kind === "loading")
147
+ return <ArtifactLoading label={loadingLabel ?? labels.opening} />;
148
+ if (current.kind === "error") {
149
+ return (
150
+ <ArtifactProblem
151
+ view={
152
+ describeError
153
+ ? describeError(current.error)
154
+ : artifactLoadErrorView(current.error, "editable", labels)
155
+ }
156
+ onRetry={() => setLoadEpoch((value) => value + 1)}
157
+ />
158
+ );
159
+ }
160
+ const { artifact } = current.value;
161
+ const surface = { title: artifact.title, showHeader };
162
+ return (
163
+ <div className="h-full min-h-0 bg-og-bg text-og-fg">
164
+ <EditableArtifactWorkbenchHost
165
+ sessionKey={sessionKey}
166
+ createSession={createSession}
167
+ document={surface}
168
+ spreadsheet={surface}
169
+ presentation={surface}
170
+ />
171
+ </div>
172
+ );
173
+ }
174
+
175
+ function runtimeFor(
176
+ runtimes: EditableArtifactRuntimes,
177
+ modality: EditableArtifactModality,
178
+ ): Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory"> {
179
+ switch (modality) {
180
+ case "document":
181
+ return runtimes.document;
182
+ case "spreadsheet":
183
+ return runtimes.spreadsheet;
184
+ case "presentation":
185
+ return runtimes.presentation;
186
+ }
187
+ }
@@ -6,6 +6,7 @@ import {
6
6
  } from "@opengeni/sdk/editable-artifacts";
7
7
  import { useCallback, useEffect, useRef, useState } from "react";
8
8
 
9
+ import { useArtifactLabels } from "./artifact-chrome";
9
10
  import { EditableArtifactMessage } from "./editable-artifact-ui";
10
11
  import {
11
12
  EditableDocumentArtifactSurface,
@@ -133,6 +134,7 @@ export function EditableArtifactWorkbenchHost({
133
134
  }, [retryEpoch, sessionKey]);
134
135
 
135
136
  const retry = useCallback(() => setRetryEpoch((value) => value + 1), []);
137
+ const labels = useArtifactLabels();
136
138
  const currentError = state.key === sessionKey ? state.error : null;
137
139
  if (state.key === sessionKey && state.session) {
138
140
  return (
@@ -146,9 +148,10 @@ export function EditableArtifactWorkbenchHost({
146
148
  }
147
149
  return (
148
150
  <EditableArtifactMessage
149
- title={currentError ? "Could not open this artifact" : "Opening artifact"}
150
- detail={currentError?.message ?? "Starting the secure editing session…"}
151
+ title={currentError ? labels.editableErrors.transient.title : labels.opening}
152
+ detail={currentError?.message ?? labels.startingEditor}
151
153
  retry={currentError ? retry : undefined}
154
+ retryLabel={labels.retry}
152
155
  />
153
156
  );
154
157
  }
@@ -9,6 +9,7 @@ import {
9
9
  type EditableArtifactSession,
10
10
  } from "@opengeni/sdk/editable-artifacts";
11
11
  import { type ReactNode, useCallback, useEffect, useRef, useState } from "react";
12
+ import { useLatestTaskRunner } from "./latest-task-runner";
12
13
 
13
14
  import {
14
15
  DocumentProjectionArtifactSurface,
@@ -70,6 +71,7 @@ type DocumentCommandState = {
70
71
  export function EditableDocumentArtifactSurface({
71
72
  session,
72
73
  title,
74
+ showHeader,
73
75
  subtitle,
74
76
  readOnly = false,
75
77
  onCommit,
@@ -86,6 +88,7 @@ export function EditableDocumentArtifactSurface({
86
88
  error: null,
87
89
  });
88
90
  const loadGeneration = useRef(0);
91
+ const scheduleLoad = useLatestTaskRunner(session);
89
92
  const commandStateRef = useRef<DocumentCommandState | null>(null);
90
93
  if (commandStateRef.current?.session !== session) {
91
94
  commandStateRef.current = {
@@ -106,45 +109,41 @@ export function EditableDocumentArtifactSurface({
106
109
  ? { ...current, loading: true, error: null }
107
110
  : { session, projection: null, loading: true, error: null },
108
111
  );
109
- void composeDocumentEditorProjection(session).then(
110
- (projection) => {
111
- if (
112
- cancelled ||
113
- generation !== loadGeneration.current ||
114
- commandStateRef.current !== commandState
115
- ) {
116
- return;
117
- }
118
- const nextParagraphText = paragraphTextById(projection);
119
- for (const [localId, canonicalId] of commandState.optimisticParagraphIds) {
120
- if (nextParagraphText.has(canonicalId)) continue;
121
- const optimisticText =
122
- commandState.paragraphText.get(canonicalId) ?? commandState.paragraphText.get(localId);
123
- if (optimisticText !== undefined) nextParagraphText.set(canonicalId, optimisticText);
124
- }
125
- commandState.paragraphText = nextParagraphText;
126
- setState({ session, projection, loading: false, error: null });
127
- },
128
- (cause) => {
129
- if (
130
- cancelled ||
131
- generation !== loadGeneration.current ||
132
- commandStateRef.current !== commandState
133
- ) {
134
- return;
135
- }
136
- setState({
137
- session,
138
- projection: null,
139
- loading: false,
140
- error: asEditableArtifactError(cause, "Could not open this document"),
141
- });
142
- },
143
- );
112
+ const superseded = () =>
113
+ cancelled ||
114
+ generation !== loadGeneration.current ||
115
+ commandStateRef.current !== commandState;
116
+ scheduleLoad(async () => {
117
+ if (superseded()) return;
118
+ await composeDocumentEditorProjection(session).then(
119
+ (projection) => {
120
+ if (superseded()) return;
121
+ const nextParagraphText = paragraphTextById(projection);
122
+ for (const [localId, canonicalId] of commandState.optimisticParagraphIds) {
123
+ if (nextParagraphText.has(canonicalId)) continue;
124
+ const optimisticText =
125
+ commandState.paragraphText.get(canonicalId) ??
126
+ commandState.paragraphText.get(localId);
127
+ if (optimisticText !== undefined) nextParagraphText.set(canonicalId, optimisticText);
128
+ }
129
+ commandState.paragraphText = nextParagraphText;
130
+ setState({ session, projection, loading: false, error: null });
131
+ },
132
+ (cause) => {
133
+ if (superseded()) return;
134
+ setState({
135
+ session,
136
+ projection: null,
137
+ loading: false,
138
+ error: asEditableArtifactError(cause, "Could not open this document"),
139
+ });
140
+ },
141
+ );
142
+ });
144
143
  return () => {
145
144
  cancelled = true;
146
145
  };
147
- }, [commandState, invalidator, retryEpoch, session]);
146
+ }, [commandState, invalidator, retryEpoch, scheduleLoad, session]);
148
147
 
149
148
  const refresh = useCallback(() => setRetryEpoch((value) => value + 1), []);
150
149
  const writable = !readOnly && view.writable;
@@ -260,6 +259,7 @@ export function EditableDocumentArtifactSurface({
260
259
  <DocumentProjectionArtifactSurface
261
260
  {...surfaceProps}
262
261
  title={title}
262
+ showHeader={showHeader}
263
263
  subtitle={
264
264
  subtitle ??
265
265
  `${projection.blocks.length} block${projection.blocks.length === 1 ? "" : "s"}${writable ? "" : " · Read only"}`
@@ -274,6 +274,7 @@ export function EditableDocumentArtifactSurface({
274
274
  <ArtifactSurface
275
275
  modality="document"
276
276
  title={title}
277
+ showHeader={showHeader}
277
278
  subtitle={subtitle ?? status}
278
279
  busy={!accessRevoked && !state.error}
279
280
  className={surfaceProps.className}
@@ -33,6 +33,7 @@ import {
33
33
  type PresentationSlideProjection,
34
34
  } from "./presentation-editor";
35
35
  import { ArtifactSurface } from "./artifact-surface";
36
+ import { useLatestTaskRunner } from "./latest-task-runner";
36
37
  import {
37
38
  asEditableArtifactError,
38
39
  editableArtifactAccessRevoked,
@@ -62,7 +63,7 @@ const DEFAULT_PRESENTATION_TEXT_STYLE: PresentationArtifactTextStyle = Object.fr
62
63
 
63
64
  export type EditablePresentationArtifactSurfaceProps = Omit<
64
65
  PresentationProjectionArtifactSurfaceProps,
65
- "projection" | "commit" | "readOnly" | "busy" | "subtitle"
66
+ "projection" | "commit" | "readOnly" | "busy" | "subtitle" | "authoringBlockedReason"
66
67
  > & {
67
68
  session: EditableArtifactSession;
68
69
  subtitle?: ReactNode | undefined;
@@ -89,6 +90,7 @@ type PresentationProjectionState = {
89
90
  export function EditablePresentationArtifactSurface({
90
91
  session,
91
92
  title = "Presentation",
93
+ showHeader,
92
94
  subtitle,
93
95
  readOnly = false,
94
96
  onCommit,
@@ -104,31 +106,35 @@ export function EditablePresentationArtifactSurface({
104
106
  error: null,
105
107
  });
106
108
  const loadGeneration = useRef(0);
109
+ const scheduleLoad = useLatestTaskRunner(session);
107
110
  const sceneNodes = useRef(new Map<string, PresentationArtifactEditorSceneNode>());
108
111
 
109
112
  useEffect(() => {
110
113
  const generation = ++loadGeneration.current;
111
114
  let cancelled = false;
112
115
  setState((current) => ({ ...current, loading: true, error: null }));
113
- void composePresentationEditorProjection(session).then(
114
- (composed) => {
115
- if (cancelled || generation !== loadGeneration.current) return;
116
- sceneNodes.current = new Map(composed.sceneNodes);
117
- setState({ composed, loading: false, error: null });
118
- },
119
- (cause) => {
120
- if (cancelled || generation !== loadGeneration.current) return;
121
- setState({
122
- composed: null,
123
- loading: false,
124
- error: asEditableArtifactError(cause, "Could not open this presentation"),
125
- });
126
- },
127
- );
116
+ scheduleLoad(async () => {
117
+ if (cancelled || generation !== loadGeneration.current) return;
118
+ await composePresentationEditorProjection(session).then(
119
+ (composed) => {
120
+ if (cancelled || generation !== loadGeneration.current) return;
121
+ sceneNodes.current = new Map(composed.sceneNodes);
122
+ setState({ composed, loading: false, error: null });
123
+ },
124
+ (cause) => {
125
+ if (cancelled || generation !== loadGeneration.current) return;
126
+ setState({
127
+ composed: null,
128
+ loading: false,
129
+ error: asEditableArtifactError(cause, "Could not open this presentation"),
130
+ });
131
+ },
132
+ );
133
+ });
128
134
  return () => {
129
135
  cancelled = true;
130
136
  };
131
- }, [invalidator, retryEpoch, session]);
137
+ }, [invalidator, retryEpoch, scheduleLoad, session]);
132
138
 
133
139
  const refresh = useCallback(() => setRetryEpoch((value) => value + 1), []);
134
140
  const writable = !readOnly && view.writable;
@@ -137,6 +143,7 @@ export function EditablePresentationArtifactSurface({
137
143
  const composed = state.composed;
138
144
  if (!composed) throw new Error("Presentation projection is not ready");
139
145
  if (!writable) throw new Error("This presentation is read only");
146
+ if (view.authoringBlockedReason) throw new Error("An earlier change must settle first");
140
147
  if (
141
148
  commit.revision !== undefined &&
142
149
  String(commit.revision) !== String(composed.projection.revision)
@@ -256,7 +263,15 @@ export function EditablePresentationArtifactSurface({
256
263
  notifyPresentationCommit(onCommit, onCommandError, commit);
257
264
  refresh();
258
265
  },
259
- [onCommandError, onCommit, refresh, session, state.composed, writable],
266
+ [
267
+ onCommandError,
268
+ onCommit,
269
+ refresh,
270
+ session,
271
+ state.composed,
272
+ view.authoringBlockedReason,
273
+ writable,
274
+ ],
260
275
  );
261
276
 
262
277
  const projection = state.composed?.projection ?? null;
@@ -266,6 +281,7 @@ export function EditablePresentationArtifactSurface({
266
281
  <PresentationProjectionArtifactSurface
267
282
  {...surfaceProps}
268
283
  title={title}
284
+ showHeader={showHeader}
269
285
  subtitle={
270
286
  subtitle ??
271
287
  `${projection.slides.length} slide${projection.slides.length === 1 ? "" : "s"}${writable ? "" : " · Read only"}`
@@ -273,6 +289,7 @@ export function EditablePresentationArtifactSurface({
273
289
  projection={projection}
274
290
  commit={writable ? applyCommit : undefined}
275
291
  readOnly={!writable}
292
+ authoringBlockedReason={view.authoringBlockedReason}
276
293
  busy={state.loading}
277
294
  onCommandError={onCommandError}
278
295
  />
@@ -280,6 +297,7 @@ export function EditablePresentationArtifactSurface({
280
297
  <ArtifactSurface
281
298
  modality="presentation"
282
299
  title={title}
300
+ showHeader={showHeader}
283
301
  subtitle={subtitle ?? status}
284
302
  actions={surfaceProps.actions}
285
303
  busy={!accessRevoked && !state.error}
@@ -62,6 +62,7 @@ export type EditableSpreadsheetArtifactSurfaceProps = Omit<
62
62
  "metadataRevision" | "sheet"
63
63
  > & {
64
64
  title?: string | undefined;
65
+ showHeader?: boolean | undefined;
65
66
  subtitle?: ReactNode | undefined;
66
67
  actions?: ReactNode | undefined;
67
68
  initialSheetId?: string | undefined;
@@ -311,6 +312,7 @@ export function EditableSpreadsheetGrid({
311
312
  export function EditableSpreadsheetArtifactSurface({
312
313
  session,
313
314
  title = "Workbook",
315
+ showHeader,
314
316
  subtitle,
315
317
  actions,
316
318
  initialSheetId,
@@ -392,6 +394,7 @@ export function EditableSpreadsheetArtifactSurface({
392
394
  <ArtifactSurface
393
395
  modality="spreadsheet"
394
396
  title={title}
397
+ showHeader={showHeader}
395
398
  subtitle={
396
399
  subtitle ??
397
400
  (accessRevoked
@@ -429,7 +432,7 @@ export function EditableSpreadsheetArtifactSurface({
429
432
  type="button"
430
433
  onClick={() => void addSheet()}
431
434
  disabled={creatingSheet}
432
- className="mt-3 rounded-og-sm bg-og-accent-deep px-3 py-1.5 text-og-sm font-medium text-og-accent-fg outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent disabled:opacity-50"
435
+ className="mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent disabled:opacity-50"
433
436
  >
434
437
  {creatingSheet ? "Adding…" : "Add worksheet"}
435
438
  </button>
@@ -651,7 +654,7 @@ function spreadsheetCellInput(
651
654
  input: string,
652
655
  kind: SpreadsheetCommit["kind"],
653
656
  ): SpreadsheetCellInput {
654
- if (kind === "formula") return { formula: input, cached: null };
657
+ if (kind === "formula") return { formula: input };
655
658
  if (input === "") return null;
656
659
  const normalized = input.trim();
657
660
  if (/^(?:true|false)$/i.test(normalized)) return normalized.toLowerCase() === "true";
@@ -1,3 +1,44 @@
1
+ export {
2
+ ArtifactBadge,
3
+ ArtifactLabelsProvider,
4
+ DEFAULT_ARTIFACT_LABELS,
5
+ useArtifactLabels,
6
+ type ArtifactLabels,
7
+ ArtifactButton,
8
+ ArtifactLoading,
9
+ ArtifactProblem,
10
+ ArtifactSelect,
11
+ ArtifactViewerHeader,
12
+ artifactKindIcon,
13
+ artifactKindSubtitle,
14
+ artifactLoadErrorMessage,
15
+ artifactLoadErrorView,
16
+ type ArtifactKind,
17
+ type ArtifactLoadErrorKind,
18
+ type ArtifactLoadErrorView,
19
+ } from "./artifact-chrome";
20
+ export { ArtifactSandbox, type ArtifactSandboxProps } from "./artifact-sandbox";
21
+ export { DeferredChatMedia } from "./deferred-chat-media";
22
+ export {
23
+ ChatInteractiveBlock,
24
+ type ChatInteractiveBlockProps,
25
+ type SiteSnapshotClient,
26
+ type SiteToolBridgeFactory,
27
+ type SiteToolScope,
28
+ } from "./chat-interactive-block";
29
+ export { SiteView, type SiteViewProps } from "./site-view";
30
+ export {
31
+ EditableArtifactView,
32
+ type EditableArtifactRuntimes,
33
+ type EditableArtifactViewProps,
34
+ type OpenedEditableArtifact,
35
+ } from "./editable-artifact-view";
36
+ export {
37
+ SessionArtifactViewer,
38
+ type SessionArtifactTarget,
39
+ type SessionArtifactViewerLabels,
40
+ type SessionArtifactViewerProps,
41
+ } from "./session-artifact-viewer";
1
42
  export {
2
43
  ArtifactSurface,
3
44
  type ArtifactModality,
@@ -6,7 +47,10 @@ export {
6
47
  export {
7
48
  PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
8
49
  PublishedHtmlArtifactFrame,
50
+ openGeniSiteBridgePortFromBootstrap,
51
+ publishedHtmlArtifactDocument,
9
52
  type PublishedHtmlArtifactFrameProps,
53
+ type PublishedHtmlArtifactToolBridge,
10
54
  } from "./published-html-artifact-frame";
11
55
  export {
12
56
  SpreadsheetArtifactSurface,
@@ -0,0 +1,24 @@
1
+ import { VISUALIZATION_CSS, VISUALIZATION_HELPERS } from "./visualization-assets.gen";
2
+
3
+ /** Conversation styling/helpers only. Rendering and tool transport remain in the Site frame. */
4
+ export function inlineHtmlDocument(fragment: string): string {
5
+ return (
6
+ '<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1"><style>' +
7
+ VISUALIZATION_CSS +
8
+ "</style><style>html,body{margin:0;min-height:0}body{padding:16px;box-sizing:border-box}</style></head><body>" +
9
+ fragment +
10
+ VISUALIZATION_HELPERS +
11
+ `<script>
12
+ (()=>{
13
+ window.addEventListener('message',event=>{
14
+ if(event.source!==parent||event.data?.type!=='opengeni.preview.theme')return;
15
+ if(event.data.theme==='light'||event.data.theme==='dark')document.documentElement.style.colorScheme=event.data.theme;
16
+ previous=0;resize();
17
+ });
18
+ let previous=0;
19
+ const resize=()=>{const height=Math.ceil(document.body.getBoundingClientRect().height);if(height!==previous){previous=height;parent.postMessage({type:'opengeni.preview.height',height},'*')}};
20
+ new ResizeObserver(resize).observe(document.body);resize();
21
+ })();
22
+ </script></body></html>`
23
+ );
24
+ }
@@ -0,0 +1,49 @@
1
+ import { useRef } from "react";
2
+
3
+ /**
4
+ * Runs one task at a time; a task scheduled while another runs replaces any
5
+ * task still waiting, so only the newest request starts next. Editors use it
6
+ * for projection loads: replaying a long history emits one revision per
7
+ * committed transaction, and composing a projection for each of them at once
8
+ * would overrun the artifact Worker's bounded request queue.
9
+ */
10
+ export function createLatestTaskRunner(): (task: () => Promise<void>) => void {
11
+ let running = false;
12
+ let waiting: (() => Promise<void>) | null = null;
13
+ const drain = async () => {
14
+ running = true;
15
+ try {
16
+ while (waiting) {
17
+ const task = waiting;
18
+ waiting = null;
19
+ try {
20
+ await task();
21
+ } catch {
22
+ // Tasks settle their own errors; one failure must not stall the next.
23
+ }
24
+ }
25
+ } finally {
26
+ running = false;
27
+ }
28
+ };
29
+ return (task) => {
30
+ waiting = task;
31
+ if (!running) void drain();
32
+ };
33
+ }
34
+
35
+ /**
36
+ * One runner per artifact session. A composition still pending on a replaced
37
+ * session (for example one whose Worker stopped answering) must never hold up
38
+ * the next session's first load, so the runner is scoped to the session object
39
+ * rather than to the component.
40
+ */
41
+ export function useLatestTaskRunner(session: object): (task: () => Promise<void>) => void {
42
+ const runner = useRef<{ session: object; schedule: (task: () => Promise<void>) => void } | null>(
43
+ null,
44
+ );
45
+ if (runner.current?.session !== session) {
46
+ runner.current = { session, schedule: createLatestTaskRunner() };
47
+ }
48
+ return runner.current.schedule;
49
+ }