@opengeni/react 0.57.0 → 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 +654 -22
  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 +10 -3
  302. package/dist/realtime.js +229 -83
  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 +274 -60
  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,376 @@
1
+ import { SESSION_SCOPE_HEADER, type ClientConfig, type OpenGeniClient } from "@opengeni/sdk";
2
+ import { createEditableArtifactReplicaId } from "@opengeni/sdk/editable-artifacts";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+
5
+ import { cn } from "../../lib/cn";
6
+ import { useOpenGeni, type ClientOverride } from "../../session-context";
7
+ import {
8
+ ArtifactLabelsProvider,
9
+ ArtifactLoading,
10
+ ArtifactProblem,
11
+ ArtifactViewerHeader,
12
+ artifactLoadErrorView,
13
+ useArtifactLabels,
14
+ type ArtifactKind,
15
+ type ArtifactLabels,
16
+ } from "./artifact-chrome";
17
+ import { EditableArtifactView, type EditableArtifactRuntimes } from "./editable-artifact-view";
18
+ import type { SiteToolBridgeFactory } from "./chat-interactive-block";
19
+ import { SiteView } from "./site-view";
20
+
21
+ /** An artifact opened from a session: the targets agent links and Site previews name. */
22
+ export type SessionArtifactTarget = Readonly<
23
+ | { kind: "editable-artifact"; artifactId: string; title?: string | undefined }
24
+ | { kind: "site"; artifactId: string; title?: string | undefined }
25
+ >;
26
+
27
+ /** Every string the viewer shows, including its Site frame and states. */
28
+ export type SessionArtifactViewerLabels = Partial<ArtifactLabels>;
29
+
30
+ export type SessionArtifactViewerProps = ClientOverride &
31
+ Readonly<{
32
+ /** The conversation the artifact belongs to; the proxy only serves its artifacts. */
33
+ sessionId: string;
34
+ target: SessionArtifactTarget;
35
+ onClose: () => void;
36
+ /** Show a Back control, for example to return to the conversation on phones. */
37
+ onBack?: (() => void) | undefined;
38
+ /** Browser kernels and Worker for documents, spreadsheets, and presentations. */
39
+ editableRuntimes?: EditableArtifactRuntimes | undefined;
40
+ theme?: "light" | "dark" | undefined;
41
+ /** Host-owned Site API access; omit it and Sites render without workspace tools. */
42
+ siteToolBridge?: SiteToolBridgeFactory | undefined;
43
+ labels?: SessionArtifactViewerLabels | undefined;
44
+ className?: string | undefined;
45
+ }>;
46
+
47
+ type ViewerClient = Pick<
48
+ OpenGeniClient,
49
+ | "withHeaders"
50
+ | "apiUrl"
51
+ | "fetchApi"
52
+ | "getClientConfig"
53
+ | "getEditableArtifact"
54
+ | "getWorkspaceArtifact"
55
+ | "getWorkspaceArtifactHtml"
56
+ >;
57
+
58
+ const viewerClientKeys = new WeakMap<ViewerClient, string>();
59
+
60
+ function viewerClientKey(client: ViewerClient): string {
61
+ let key = viewerClientKeys.get(client);
62
+ if (!key) {
63
+ key = crypto.randomUUID();
64
+ viewerClientKeys.set(client, key);
65
+ }
66
+ return key;
67
+ }
68
+
69
+ /**
70
+ * A host-mountable viewer for one editable artifact or Site from a session,
71
+ * with its own header (title, Back, Close). Mount it in any sized container
72
+ * (a side panel, a sheet); it fills it. Data flows through the provider's
73
+ * client and `createSessionProxyHandler({ artifacts: true })`, scoped to
74
+ * `sessionId`.
75
+ */
76
+ export function SessionArtifactViewer({ labels, ...props }: SessionArtifactViewerProps) {
77
+ return (
78
+ <ArtifactLabelsProvider labels={labels}>
79
+ <Viewer {...props} />
80
+ </ArtifactLabelsProvider>
81
+ );
82
+ }
83
+
84
+ function Viewer({
85
+ client: clientOverride,
86
+ workspaceId: workspaceOverride,
87
+ sessionId,
88
+ target,
89
+ onClose,
90
+ onBack,
91
+ editableRuntimes,
92
+ theme,
93
+ siteToolBridge,
94
+ className,
95
+ }: Omit<SessionArtifactViewerProps, "labels">) {
96
+ const labels = useArtifactLabels();
97
+ const context = useOpenGeni({ client: clientOverride, workspaceId: workspaceOverride });
98
+ const base = context.client as unknown as ViewerClient;
99
+ const workspaceId = context.workspaceId;
100
+ const client = useMemo(
101
+ () => base.withHeaders({ [SESSION_SCOPE_HEADER]: sessionId }),
102
+ [base, sessionId],
103
+ );
104
+ const [loaded, setLoaded] = useState<{
105
+ key: string;
106
+ client: ViewerClient;
107
+ workspaceId: string;
108
+ title: string;
109
+ kind: ArtifactKind | null;
110
+ } | null>(null);
111
+ const targetKey = `${target.kind}:${target.artifactId}`;
112
+ const current =
113
+ loaded?.key === targetKey && loaded.client === client && loaded.workspaceId === workspaceId
114
+ ? loaded
115
+ : null;
116
+ const kind: ArtifactKind | null = target.kind === "site" ? "site" : (current?.kind ?? null);
117
+ const [unavailable, setUnavailable] = useState<{
118
+ key: string;
119
+ client: ViewerClient;
120
+ workspaceId: string;
121
+ } | null>(null);
122
+ const markUnavailable = useCallback(
123
+ () => setUnavailable({ key: targetKey, client, workspaceId }),
124
+ [client, targetKey, workspaceId],
125
+ );
126
+ const title =
127
+ current?.title ??
128
+ target.title ??
129
+ (unavailable?.key === targetKey &&
130
+ unavailable.client === client &&
131
+ unavailable.workspaceId === workspaceId
132
+ ? labels.artifact
133
+ : labels.opening);
134
+ return (
135
+ <section
136
+ aria-label={title}
137
+ data-og-artifact-viewer={target.kind}
138
+ className={cn("og-root flex h-full min-h-0 w-full min-w-0 flex-col bg-bg text-fg", className)}
139
+ >
140
+ <ArtifactViewerHeader
141
+ kind={kind}
142
+ title={title}
143
+ onBack={onBack}
144
+ backLabel={labels.back}
145
+ onClose={onClose}
146
+ closeLabel={labels.close}
147
+ />
148
+ <div className="flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden">
149
+ {target.kind === "site" ? (
150
+ <SiteView
151
+ key={targetKey}
152
+ client={client}
153
+ workspaceId={workspaceId}
154
+ siteId={target.artifactId}
155
+ theme={theme}
156
+ toolBridge={siteToolBridge}
157
+ showTitle={false}
158
+ onTitle={(next) =>
159
+ setLoaded({ key: targetKey, client, workspaceId, title: next, kind: "site" })
160
+ }
161
+ />
162
+ ) : (
163
+ <EditableBody
164
+ key={targetKey}
165
+ client={client}
166
+ workspaceId={workspaceId}
167
+ sessionId={sessionId}
168
+ artifactId={target.artifactId}
169
+ runtimes={editableRuntimes}
170
+ onOpened={(next, modality) =>
171
+ setLoaded({ key: targetKey, client, workspaceId, title: next, kind: modality })
172
+ }
173
+ onUnavailable={markUnavailable}
174
+ />
175
+ )}
176
+ </div>
177
+ </section>
178
+ );
179
+ }
180
+
181
+ function EditableBody({
182
+ client,
183
+ workspaceId,
184
+ sessionId,
185
+ artifactId,
186
+ runtimes,
187
+ onOpened,
188
+ onUnavailable,
189
+ }: {
190
+ client: ViewerClient;
191
+ workspaceId: string;
192
+ sessionId: string;
193
+ artifactId: string;
194
+ runtimes: EditableArtifactRuntimes | undefined;
195
+ onOpened: (title: string, modality: ArtifactKind) => void;
196
+ onUnavailable: () => void;
197
+ }) {
198
+ const labels = useArtifactLabels();
199
+ const clientKey = viewerClientKey(client);
200
+ const [retryEpoch, setRetryEpoch] = useState(0);
201
+ const [configState, setConfigState] = useState<{
202
+ client: ViewerClient;
203
+ workspaceId: string;
204
+ sessionId: string;
205
+ result:
206
+ | { kind: "ready"; config: NonNullable<ClientConfig["artifacts"]> }
207
+ | { kind: "unavailable" }
208
+ | { kind: "error"; error: unknown };
209
+ } | null>(null);
210
+ const current =
211
+ configState?.client === client &&
212
+ configState.workspaceId === workspaceId &&
213
+ configState.sessionId === sessionId
214
+ ? configState.result
215
+ : null;
216
+ const config = current?.kind === "ready" ? current.config : null;
217
+ const scopeRef = useRef({ client, workspaceId, sessionId });
218
+ scopeRef.current = { client, workspaceId, sessionId };
219
+ useEffect(() => {
220
+ let live = true;
221
+ setConfigState(null);
222
+ client.getClientConfig().then(
223
+ (value) =>
224
+ live &&
225
+ setConfigState({
226
+ client,
227
+ workspaceId,
228
+ sessionId,
229
+ result: value.artifacts
230
+ ? { kind: "ready", config: value.artifacts }
231
+ : { kind: "unavailable" },
232
+ }),
233
+ (error: unknown) =>
234
+ live &&
235
+ setConfigState({ client, workspaceId, sessionId, result: { kind: "error", error } }),
236
+ );
237
+ return () => {
238
+ live = false;
239
+ };
240
+ }, [client, retryEpoch, sessionId, workspaceId]);
241
+ const baseUrl = useMemo(
242
+ () => new URL(client.apiUrl("/"), globalThis.location?.href ?? "http://localhost/"),
243
+ [client],
244
+ );
245
+ const transport = useMemo(() => {
246
+ if (!config) return undefined;
247
+ const socket = new URL(config.editableLiveUrl);
248
+ let scope = new AbortController();
249
+ const checkCurrent = (signal: AbortSignal) => {
250
+ signal.throwIfAborted();
251
+ if (
252
+ scopeRef.current.client !== client ||
253
+ scopeRef.current.workspaceId !== workspaceId ||
254
+ scopeRef.current.sessionId !== sessionId
255
+ ) {
256
+ throw new DOMException("Artifact viewer scope changed", "AbortError");
257
+ }
258
+ };
259
+ return {
260
+ activate: () => {
261
+ if (scope.signal.aborted) scope = new AbortController();
262
+ },
263
+ abort: () => scope.abort(),
264
+ fetch: (async (input: RequestInfo | URL, init?: RequestInit) => {
265
+ const signal = AbortSignal.any([scope.signal, ...(init?.signal ? [init.signal] : [])]);
266
+ checkCurrent(signal);
267
+ const url = new URL(input instanceof Request ? input.url : input, baseUrl);
268
+ if (
269
+ init?.method === "POST" &&
270
+ url.pathname ===
271
+ new URL(
272
+ `v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/live-ticket`,
273
+ baseUrl,
274
+ ).pathname
275
+ ) {
276
+ // A reconnect must revalidate the current host principal before
277
+ // minting a ticket for the editor's retained cache partition.
278
+ const next = (await client.getClientConfig({ signal })).artifacts;
279
+ checkCurrent(signal);
280
+ if (!next || artifactCapabilityKey(next) !== artifactCapabilityKey(config)) {
281
+ setConfigState({
282
+ client,
283
+ workspaceId,
284
+ sessionId,
285
+ result: next ? { kind: "ready", config: next } : { kind: "unavailable" },
286
+ });
287
+ scope.abort();
288
+ signal.throwIfAborted();
289
+ }
290
+ const { replicaId } = (await new Request(input, init).json()) as {
291
+ replicaId?: unknown;
292
+ };
293
+ if (typeof replicaId !== "string") throw new TypeError("Artifact replica is required");
294
+ await client.getEditableArtifact(workspaceId, artifactId, { replicaId, signal });
295
+ checkCurrent(signal);
296
+ }
297
+ return client.fetchApi(url, { ...init, signal });
298
+ }) as typeof fetch,
299
+ webSocketUrl: socket,
300
+ ...(isLoopback(baseUrl) && isLoopback(socket)
301
+ ? { allowInsecureDevelopmentTransport: true }
302
+ : {}),
303
+ };
304
+ }, [artifactId, baseUrl, client, config, sessionId, workspaceId]);
305
+ useEffect(() => {
306
+ transport?.activate();
307
+ return () => transport?.abort();
308
+ }, [transport]);
309
+ const blocked = current !== null && (current.kind !== "ready" || !runtimes);
310
+ useEffect(() => {
311
+ if (blocked) onUnavailable();
312
+ }, [blocked, onUnavailable]);
313
+ if (!current) return <ArtifactLoading label={labels.opening} />;
314
+ if (current.kind === "error") {
315
+ return (
316
+ <ArtifactProblem
317
+ view={artifactLoadErrorView(current.error, "editable", labels)}
318
+ onRetry={() => setRetryEpoch((value) => value + 1)}
319
+ />
320
+ );
321
+ }
322
+ if (!config || !transport) {
323
+ return <ArtifactProblem view={{ ...labels.viewingDisabled, retryable: false }} />;
324
+ }
325
+ if (!runtimes) {
326
+ return <ArtifactProblem view={{ ...labels.editorsMissing, retryable: false }} />;
327
+ }
328
+ return (
329
+ <EditableArtifactView
330
+ baseUrl={baseUrl}
331
+ workspaceId={workspaceId}
332
+ artifactId={artifactId}
333
+ authorityKey={JSON.stringify([clientKey, sessionId, artifactCapabilityKey(config)])}
334
+ runtimes={{
335
+ ...runtimes,
336
+ ...(isLoopback(baseUrl) ? { allowInsecureDevelopmentAssets: true } : {}),
337
+ }}
338
+ transport={transport}
339
+ showHeader={false}
340
+ open={async (signal) => {
341
+ const replicaId = createEditableArtifactReplicaId();
342
+ const artifact = await client.getEditableArtifact(workspaceId, artifactId, {
343
+ replicaId,
344
+ signal,
345
+ });
346
+ signal.throwIfAborted();
347
+ onOpened(artifact.title, artifact.modality);
348
+ return {
349
+ artifact,
350
+ replicaId,
351
+ authority: {
352
+ deploymentOrigin: baseUrl.origin,
353
+ workspaceId,
354
+ ...config.cachePartition,
355
+ },
356
+ };
357
+ }}
358
+ />
359
+ );
360
+ }
361
+
362
+ function artifactCapabilityKey(config: NonNullable<ClientConfig["artifacts"]>): string {
363
+ return JSON.stringify([
364
+ config.editableLiveUrl,
365
+ config.cachePartition.accountId,
366
+ config.cachePartition.principalId,
367
+ config.cachePartition.authorizationEpoch,
368
+ ]);
369
+ }
370
+
371
+ function isLoopback(url: URL): boolean {
372
+ return (
373
+ (url.protocol === "http:" || url.protocol === "ws:") &&
374
+ (url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "[::1]")
375
+ );
376
+ }
@@ -0,0 +1,116 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+
3
+ import { loadSiteSnapshot } from "../../sites-ui";
4
+ import {
5
+ ArtifactLoading,
6
+ ArtifactProblem,
7
+ artifactLoadErrorView,
8
+ useArtifactLabels,
9
+ } from "./artifact-chrome";
10
+ import { ArtifactSandbox } from "./artifact-sandbox";
11
+ import type { SiteSnapshotClient, SiteToolBridgeFactory } from "./chat-interactive-block";
12
+
13
+ type Snapshot = Awaited<ReturnType<typeof loadSiteSnapshot>>;
14
+
15
+ export type SiteViewProps = {
16
+ client: SiteSnapshotClient;
17
+ workspaceId: string;
18
+ siteId: string;
19
+ /** Host-owned Site API access. Omit it and the Site renders without workspace tools. */
20
+ toolBridge?: SiteToolBridgeFactory | undefined;
21
+ theme?: "light" | "dark" | undefined;
22
+ /** Shown instead of the archived notice; the console links to its full page. */
23
+ archivedMessage?: string | undefined;
24
+ /** Show the Site title in the frame bar; hide it under a host header that already does. */
25
+ showTitle?: boolean | undefined;
26
+ /** Loading copy; defaults to "Loading Site…". */
27
+ loadingLabel?: string | undefined;
28
+ /** Called with the loaded title, for a host header. */
29
+ onTitle?: ((title: string) => void) | undefined;
30
+ className?: string | undefined;
31
+ };
32
+
33
+ /**
34
+ * A published Site filling its container: the console's session dock and an
35
+ * embedding host's artifact viewer render the same view.
36
+ */
37
+ export function SiteView({
38
+ client,
39
+ workspaceId,
40
+ siteId,
41
+ toolBridge,
42
+ theme,
43
+ archivedMessage,
44
+ showTitle = true,
45
+ loadingLabel,
46
+ onTitle,
47
+ className,
48
+ }: SiteViewProps) {
49
+ const labels = useArtifactLabels();
50
+ const [snapshot, setSnapshot] = useState<Snapshot | null>(null);
51
+ const [error, setError] = useState<unknown>(null);
52
+ const readAbort = useRef<AbortController | null>(null);
53
+ const onTitleRef = useRef(onTitle);
54
+ onTitleRef.current = onTitle;
55
+ const load = useCallback(async () => {
56
+ readAbort.current?.abort();
57
+ const abort = new AbortController();
58
+ readAbort.current = abort;
59
+ try {
60
+ setError(null);
61
+ const next = await loadSiteSnapshot(client, workspaceId, siteId, {
62
+ signal: abort.signal,
63
+ includeArchivedContent: true,
64
+ });
65
+ if (abort.signal.aborted) return;
66
+ setSnapshot(next);
67
+ onTitleRef.current?.(next.detail.artifact.title);
68
+ } catch (nextError) {
69
+ if (abort.signal.aborted) return;
70
+ setSnapshot(null);
71
+ setError(nextError);
72
+ }
73
+ }, [client, siteId, workspaceId]);
74
+ useEffect(() => {
75
+ setSnapshot(null);
76
+ void load();
77
+ return () => readAbort.current?.abort();
78
+ }, [load]);
79
+ const content = snapshot?.content;
80
+ const bridge = useMemo(
81
+ () =>
82
+ content
83
+ ? toolBridge?.({
84
+ artifactId: siteId,
85
+ siteVersionId: content.versionId,
86
+ requestedTools: content.requestedTools,
87
+ })
88
+ : undefined,
89
+ [content, siteId, toolBridge],
90
+ );
91
+ if (error)
92
+ return (
93
+ <ArtifactProblem
94
+ view={artifactLoadErrorView(error, "site", labels)}
95
+ onRetry={() => void load()}
96
+ />
97
+ );
98
+ if (!snapshot || !content) return <ArtifactLoading label={loadingLabel ?? labels.loadingSite} />;
99
+ if (snapshot.detail.artifact.status === "archived")
100
+ return (
101
+ <div className="p-4 text-sm text-fg-muted">{archivedMessage ?? labels.siteArchived}</div>
102
+ );
103
+ return (
104
+ <ArtifactSandbox
105
+ html={content.html}
106
+ title={snapshot.detail.artifact.title}
107
+ showTitle={showTitle}
108
+ versionLabel={`v${snapshot.detail.artifact.currentVersion?.revision}`}
109
+ toolBridge={bridge}
110
+ connectedToolCount={content.requestedTools.length}
111
+ theme={theme}
112
+ fill
113
+ className={className ?? "h-full rounded-none border-0"}
114
+ />
115
+ );
116
+ }
@@ -1,3 +1,5 @@
1
+ import { formatSpreadsheetGeneralDisplay } from "./spreadsheet-general-display";
2
+
1
3
  const TILE_SIZE = 256;
2
4
  const MAX_CACHE_PHYSICAL_PIXELS = 32_000_000;
3
5
  const MAX_CACHE_TILES = 96;
@@ -430,7 +432,7 @@ export class SpreadsheetCanvasRenderer {
430
432
 
431
433
  for (const cell of cells) {
432
434
  const value = input.projection.valueAt(cell);
433
- const text = displayValue(value);
435
+ const text = formatSpreadsheetGeneralDisplay(value);
434
436
  if (!text) continue;
435
437
  paintCellText(context, input, cell, text, tileLeft, tileTop);
436
438
  }
@@ -550,7 +552,7 @@ function paintSelection(context: CanvasRenderingContext2D, input: SpreadsheetCan
550
552
  const bottom =
551
553
  input.columnHeaderHeight + input.rows.offsetAt(selection.bottom + 1) - input.logicalScrollTop;
552
554
  context.save();
553
- setFill(context, input.theme.accent, "#3b82f6");
555
+ setFill(context, input.theme.accent, "#545454");
554
556
  context.globalAlpha = 0.1;
555
557
  context.fillRect(left, top, right - left, bottom - top);
556
558
  context.restore();
@@ -562,7 +564,7 @@ function paintSelection(context: CanvasRenderingContext2D, input: SpreadsheetCan
562
564
  const activeWidth = input.columns.sizeAt(selection.focusColumn);
563
565
  const activeHeight = input.rows.sizeAt(selection.focusRow);
564
566
  context.save();
565
- setStroke(context, input.theme.accent, "#3b82f6");
567
+ setStroke(context, input.theme.accent, "#545454");
566
568
  context.lineWidth = 2;
567
569
  context.strokeRect(
568
570
  activeLeft + 1,
@@ -776,13 +778,6 @@ function finitePositive(value: number | undefined, fallback: number): number {
776
778
  return value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;
777
779
  }
778
780
 
779
- function displayValue(value: unknown): string {
780
- if (value === null || value === undefined) return "";
781
- if (value instanceof Date) return Number.isNaN(value.getTime()) ? "" : value.toLocaleDateString();
782
- if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
783
- return String(value);
784
- }
785
-
786
781
  function columnName(index: number): string {
787
782
  let value = index + 1;
788
783
  let result = "";
@@ -0,0 +1,43 @@
1
+ /**
2
+ * DISPLAY-ONLY General number formatting for spreadsheet canvas and a11y
3
+ * labels. This is not numeric arithmetic and must never feed formula-bar /
4
+ * cell-edit `input`, stored cells, formula results, or serialized exports.
5
+ *
6
+ * Policy for independent review:
7
+ * IEEE-754 cannot represent many decimal fractions exactly, so values such as
8
+ * `110.00000000000001` and `0.1 + 0.2` leak binary residue through `String(n)`.
9
+ * General display therefore collapses a finite number to 15 significant decimal
10
+ * digits — the same bound spreadsheet General uses — via
11
+ * `String(Number(value.toPrecision(15)))`.
12
+ *
13
+ * That mapping yields `110` / `220` / `0.3` for the noisy cases while keeping
14
+ * exponent-scale values (`1e-20`, `1e21`) and ~15-digit legitimate precision.
15
+ * Integers stringify without a decimal; `-0` displays as `0`; non-finite
16
+ * numbers, dates, booleans, errors, and strings keep their existing labels.
17
+ *
18
+ * Do not reuse `Intl.NumberFormat({ maximumFractionDigits: 12 })` from the
19
+ * artifact-tool renderer: 12 fraction digits rounds `1e-20` to `0` and truncates
20
+ * high-precision values that General should still show.
21
+ */
22
+ export function formatSpreadsheetGeneralDisplay(value: unknown): string {
23
+ if (value === null || value === undefined) return "";
24
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? "" : value.toLocaleDateString();
25
+ if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
26
+ if (typeof value === "number") {
27
+ if (Object.is(value, -0) || value === 0) return "0";
28
+ if (!Number.isFinite(value)) return String(value);
29
+ const rounded = Number(value.toPrecision(15));
30
+ // Rounding at the finite IEEE-754 boundary can overflow. A display policy
31
+ // must not turn a finite source into an infinity label.
32
+ return String(Number.isFinite(rounded) ? rounded : value);
33
+ }
34
+ return String(value);
35
+ }
36
+
37
+ /** Exact edit/formula-bar source. Numbers stay `String(value)` with no General collapse. */
38
+ export function spreadsheetCellEditSource(value: unknown): string {
39
+ if (value === null || value === undefined) return "";
40
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? "" : value.toLocaleDateString();
41
+ if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
42
+ return String(value);
43
+ }
@@ -26,6 +26,10 @@ import {
26
26
  type SpreadsheetCanvasProjection,
27
27
  type SpreadsheetCanvasTheme,
28
28
  } from "./spreadsheet-canvas";
29
+ import {
30
+ formatSpreadsheetGeneralDisplay,
31
+ spreadsheetCellEditSource,
32
+ } from "./spreadsheet-general-display";
29
33
 
30
34
  const MAX_ROWS = 1_048_576;
31
35
  const MAX_COLUMNS = 16_384;
@@ -494,13 +498,6 @@ function isCellSelected(selection: SpreadsheetSelection, row: number, col: numbe
494
498
  );
495
499
  }
496
500
 
497
- function displayValue(value: unknown): string {
498
- if (value === null || value === undefined) return "";
499
- if (value instanceof Date) return Number.isNaN(value.getTime()) ? "" : value.toLocaleDateString();
500
- if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
501
- return String(value);
502
- }
503
-
504
501
  function parseCellInput(input: string): string | number | boolean | null {
505
502
  if (input === "") return null;
506
503
  const normalized = input.trim();
@@ -634,7 +631,7 @@ function spreadsheetCanvasTheme(element: HTMLElement): SpreadsheetCanvasTheme {
634
631
  const border = computedToken(style, "--og-color-border", "#d1d5db");
635
632
  const foreground = style.color || computedToken(style, "--og-color-fg", "#111827");
636
633
  const mutedForeground = computedToken(style, "--og-color-fg-muted", "#6b7280");
637
- const accent = computedToken(style, "--og-color-accent", "#3b82f6");
634
+ const accent = computedToken(style, "--og-color-accent", "#545454");
638
635
  const error = computedToken(style, "--og-color-status-failed", "#dc2626");
639
636
  const fontFamily =
640
637
  style.fontFamily ||
@@ -816,7 +813,7 @@ export function SpreadsheetArtifactSurface({
816
813
  <button
817
814
  type="button"
818
815
  onClick={addSheet}
819
- className="mt-3 rounded-og-sm bg-og-accent-deep px-3 py-1.5 text-og-sm font-medium text-og-accent-fg"
816
+ 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"
820
817
  >
821
818
  Add worksheet
822
819
  </button>
@@ -906,7 +903,7 @@ export function SpreadsheetGrid({
906
903
  const data = worksheet.cellData(row, col);
907
904
  return {
908
905
  value: data.formula ? workbook.valueAt(worksheet, { row, col }) : data.value,
909
- input: data.formula ?? displayValue(data.value),
906
+ input: data.formula ?? spreadsheetCellEditSource(data.value),
910
907
  format: data.format,
911
908
  };
912
909
  },
@@ -2059,7 +2056,7 @@ export function SpreadsheetProjectionGrid({
2059
2056
  role="gridcell"
2060
2057
  aria-colindex={col + 1}
2061
2058
  aria-selected={selected}
2062
- aria-label={`${address}${value === null ? "" : `, ${displayValue(value)}`}`}
2059
+ aria-label={`${address}${value === null ? "" : `, ${formatSpreadsheetGeneralDisplay(value)}`}`}
2063
2060
  data-og-cell={address}
2064
2061
  className={cn(
2065
2062
  "pointer-events-none absolute top-0 flex h-full min-w-0 overflow-hidden border-b border-r border-og-border px-1.5 text-og-fg",
@@ -2099,7 +2096,7 @@ export function SpreadsheetProjectionGrid({
2099
2096
  />
2100
2097
  ) : (
2101
2098
  <span className="block min-w-0 overflow-hidden text-ellipsis">
2102
- {displayValue(value)}
2099
+ {formatSpreadsheetGeneralDisplay(value)}
2103
2100
  </span>
2104
2101
  )}
2105
2102
  </div>
@@ -2117,7 +2114,9 @@ export function SpreadsheetProjectionGrid({
2117
2114
  aria-colindex={selection.focus.col + 1}
2118
2115
  aria-selected="true"
2119
2116
  aria-label={`${cellName(selection.focus)}${
2120
- hiddenActiveValue == null ? "" : `, ${displayValue(hiddenActiveValue)}`
2117
+ hiddenActiveValue == null
2118
+ ? ""
2119
+ : `, ${formatSpreadsheetGeneralDisplay(hiddenActiveValue)}`
2121
2120
  }`}
2122
2121
  />
2123
2122
  </div>