@opengeni/react 3.3.2 → 3.4.0

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 (855) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +2 -0
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -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-4EUKJXUO.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3RJKUVCA.js +14068 -0
  27. package/dist/chunk-3RJKUVCA.js.map +1 -0
  28. package/dist/chunk-3UZCWK46.js +298 -0
  29. package/dist/chunk-3UZCWK46.js.map +1 -0
  30. package/dist/chunk-47CKUXTW.js +293 -0
  31. package/dist/chunk-47CKUXTW.js.map +1 -0
  32. package/dist/chunk-4QYP6QUI.js +109 -0
  33. package/dist/chunk-4QYP6QUI.js.map +1 -0
  34. package/dist/chunk-5EY26VZ7.js +1053 -0
  35. package/dist/chunk-5EY26VZ7.js.map +1 -0
  36. package/dist/chunk-5I4VRWBB.js +56 -0
  37. package/dist/chunk-5I4VRWBB.js.map +1 -0
  38. package/dist/chunk-5WOR7UCL.js +191 -0
  39. package/dist/chunk-5WOR7UCL.js.map +1 -0
  40. package/dist/chunk-5YJLGOM5.js +51 -0
  41. package/dist/chunk-5YJLGOM5.js.map +1 -0
  42. package/dist/chunk-6JFN3OWG.js +386 -0
  43. package/dist/chunk-6JFN3OWG.js.map +1 -0
  44. package/dist/chunk-7QJT5O4S.js +35 -0
  45. package/dist/chunk-7QJT5O4S.js.map +1 -0
  46. package/dist/chunk-A55KV72M.js +402 -0
  47. package/dist/chunk-A55KV72M.js.map +1 -0
  48. package/dist/chunk-ADWCLI4G.js +2028 -0
  49. package/dist/chunk-ADWCLI4G.js.map +1 -0
  50. package/dist/chunk-B27E3V37.js +29 -0
  51. package/dist/chunk-B27E3V37.js.map +1 -0
  52. package/dist/chunk-B7TC2A33.js +83 -0
  53. package/dist/chunk-B7TC2A33.js.map +1 -0
  54. package/dist/chunk-BLL56F7R.js +385 -0
  55. package/dist/chunk-BLL56F7R.js.map +1 -0
  56. package/dist/chunk-BOFEQC6K.js +162 -0
  57. package/dist/chunk-BOFEQC6K.js.map +1 -0
  58. package/dist/chunk-CM7LVUKC.js +35 -0
  59. package/dist/chunk-CM7LVUKC.js.map +1 -0
  60. package/dist/chunk-CORUP6JB.js +122 -0
  61. package/dist/chunk-CORUP6JB.js.map +1 -0
  62. package/dist/chunk-CSX5FFKZ.js +35 -0
  63. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  64. package/dist/chunk-EGVHJKGJ.js +3125 -0
  65. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  66. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  67. package/dist/chunk-G76LSA76.js.map +1 -0
  68. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  69. package/dist/chunk-GQMRL52F.js.map +1 -0
  70. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  71. package/dist/chunk-GUUXOISA.js.map +1 -0
  72. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  73. package/dist/chunk-I7X2P4FU.js.map +1 -0
  74. package/dist/chunk-IGFZFLI2.js +1390 -0
  75. package/dist/chunk-IGFZFLI2.js.map +1 -0
  76. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  77. package/dist/chunk-IMSUVYQB.js.map +1 -0
  78. package/dist/chunk-IOYHDEP3.js +38 -0
  79. package/dist/chunk-IOYHDEP3.js.map +1 -0
  80. package/dist/chunk-IZV5FTJC.js +55 -0
  81. package/dist/chunk-IZV5FTJC.js.map +1 -0
  82. package/dist/chunk-KF33GTWN.js +343 -0
  83. package/dist/chunk-KF33GTWN.js.map +1 -0
  84. package/dist/chunk-KSGQ5ODA.js +457 -0
  85. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  86. package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
  87. package/dist/chunk-KZC6QRNR.js.map +1 -0
  88. package/dist/chunk-LJUMYUBO.js +218 -0
  89. package/dist/chunk-LJUMYUBO.js.map +1 -0
  90. package/dist/chunk-LSW2OJVV.js +380 -0
  91. package/dist/chunk-LSW2OJVV.js.map +1 -0
  92. package/dist/chunk-M357MHH3.js +2 -0
  93. package/dist/chunk-M357MHH3.js.map +1 -0
  94. package/dist/chunk-MK2TQO4Y.js +24 -0
  95. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  96. package/dist/chunk-N7S72EXK.js +25 -0
  97. package/dist/chunk-N7S72EXK.js.map +1 -0
  98. package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
  99. package/dist/chunk-NKMYZFHA.js.map +1 -0
  100. package/dist/chunk-NX4ADH73.js +14 -0
  101. package/dist/chunk-NX4ADH73.js.map +1 -0
  102. package/dist/chunk-O7F6UJO4.js +71 -0
  103. package/dist/chunk-O7F6UJO4.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-WBJY57A3.js +402 -0
  137. package/dist/chunk-WBJY57A3.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/grok-mark.d.ts +26 -0
  200. package/dist/components/human-input-form.d.ts +28 -32
  201. package/dist/components/human-input-surface.d.ts +7 -2
  202. package/dist/components/linkified-text.d.ts +18 -0
  203. package/dist/components/machine-input-display.d.ts +22 -1
  204. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  205. package/dist/components/machines/machine-detail.d.ts +7 -1
  206. package/dist/components/machines/machine-status.d.ts +48 -0
  207. package/dist/components/markdown-table-layout.d.ts +18 -0
  208. package/dist/components/markdown.d.ts +37 -4
  209. package/dist/components/message-timeline.d.ts +86 -7
  210. package/dist/components/model-mark.d.ts +29 -0
  211. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  212. package/dist/components/model-policy-picker.d.ts +35 -28
  213. package/dist/components/new-conversation.d.ts +32 -0
  214. package/dist/components/open-geni-chat.d.ts +73 -0
  215. package/dist/components/open-geni-links.d.ts +68 -0
  216. package/dist/components/openrouter-mark.d.ts +6 -0
  217. package/dist/components/opper-mark.d.ts +7 -0
  218. package/dist/components/preview-loading.d.ts +2 -0
  219. package/dist/components/provider-recovery-notice.d.ts +16 -0
  220. package/dist/components/queue-item-content.d.ts +9 -0
  221. package/dist/components/rehype-secret-refs.d.ts +23 -0
  222. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  223. package/dist/components/sandbox-files.d.ts +3 -1
  224. package/dist/components/sandbox-workspace.d.ts +18 -0
  225. package/dist/components/secret-question-field.d.ts +31 -0
  226. package/dist/components/secret-ref-chip.d.ts +35 -0
  227. package/dist/components/session-capability-frame.d.ts +37 -0
  228. package/dist/components/session-chrome.d.ts +57 -8
  229. package/dist/components/session-commands-panel.d.ts +6 -0
  230. package/dist/components/session-commands.d.ts +6 -0
  231. package/dist/components/session-connection-request.d.ts +8 -0
  232. package/dist/components/session-conversation.d.ts +157 -0
  233. package/dist/components/session-list.d.ts +39 -0
  234. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  235. package/dist/components/session-proxy-scope.d.ts +35 -0
  236. package/dist/components/session-status.d.ts +4 -1
  237. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  238. package/dist/components/timeline-anchor.d.ts +24 -0
  239. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  240. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  241. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  242. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  243. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  244. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  245. package/dist/components/timeline-annotations.d.ts +13 -3
  246. package/dist/components/timeline-reading-progress.d.ts +11 -0
  247. package/dist/components/timeline-search.d.ts +34 -0
  248. package/dist/components/timeline-settlement.d.ts +16 -0
  249. package/dist/components/tool-action-review.d.ts +47 -0
  250. package/dist/components/tool-review-history.d.ts +25 -0
  251. package/dist/components/usage-limit-notice.d.ts +49 -0
  252. package/dist/components/usage-member-list.d.ts +91 -0
  253. package/dist/components/usage-meter.d.ts +73 -0
  254. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  255. package/dist/components/user-message-body.d.ts +10 -1
  256. package/dist/composer-messages.d.ts +74 -0
  257. package/dist/composer-messages.js +9 -0
  258. package/dist/composer-messages.js.map +1 -0
  259. package/dist/composer-voice-events.d.ts +8 -0
  260. package/dist/composer.d.ts +5 -4
  261. package/dist/composer.js +26 -13
  262. package/dist/computer-viewer-GMLDXPON.js +20 -0
  263. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  264. package/dist/connect-account-identity.d.ts +8 -0
  265. package/dist/connect-accounts.d.ts +15 -0
  266. package/dist/connect-chooser.d.ts +18 -0
  267. package/dist/connect-panel.d.ts +18 -0
  268. package/dist/connect-setup.d.ts +18 -0
  269. package/dist/connect.d.ts +21 -0
  270. package/dist/connect.js +2149 -0
  271. package/dist/connect.js.map +1 -0
  272. package/dist/connection-catalog.d.ts +38 -0
  273. package/dist/connection-discovery.d.ts +12 -0
  274. package/dist/connection-installed.d.ts +17 -0
  275. package/dist/connection-logo.d.ts +9 -0
  276. package/dist/connection-service-logo.d.ts +8 -0
  277. package/dist/connection-service-presentation.d.ts +13 -0
  278. package/dist/connection-skeleton.d.ts +5 -0
  279. package/dist/connection-type-picker.d.ts +6 -0
  280. package/dist/conversation-timeline.d.ts +5 -0
  281. package/dist/desktop.d.ts +7 -0
  282. package/dist/desktop.js +27 -0
  283. package/dist/desktop.js.map +1 -0
  284. package/dist/device-authorization.d.ts +23 -0
  285. package/dist/diffs.d.ts +8 -0
  286. package/dist/diffs.js +15 -0
  287. package/dist/diffs.js.map +1 -0
  288. package/dist/discovery-cache.d.ts +5 -0
  289. package/dist/editor.d.ts +7 -0
  290. package/dist/editor.js +22 -0
  291. package/dist/editor.js.map +1 -0
  292. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  293. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  294. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  295. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  296. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  297. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  298. package/dist/hooks/latest-question.d.ts +25 -0
  299. package/dist/hooks/shared-machines-list.d.ts +4 -0
  300. package/dist/hooks/shared-query.d.ts +113 -0
  301. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  302. package/dist/hooks/use-auth-runs.d.ts +1 -4
  303. package/dist/hooks/use-available-models.d.ts +1 -1
  304. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  305. package/dist/hooks/use-browser-session.d.ts +12 -1
  306. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  307. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  308. package/dist/hooks/use-composer.d.ts +24 -2
  309. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  310. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  311. package/dist/hooks/use-computer-session.d.ts +4 -0
  312. package/dist/hooks/use-connect.d.ts +23 -0
  313. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  314. package/dist/hooks/use-file-attachments.d.ts +12 -0
  315. package/dist/hooks/use-goal.d.ts +2 -1
  316. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  317. package/dist/hooks/use-new-conversation.d.ts +56 -0
  318. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  319. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  320. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  321. package/dist/hooks/use-session-conversation.d.ts +49 -0
  322. package/dist/hooks/use-session-events.d.ts +26 -5
  323. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  324. package/dist/hooks/use-session-model-account.d.ts +48 -0
  325. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  326. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  327. package/dist/hooks/use-usage.d.ts +40 -0
  328. package/dist/hooks/use-vaults.d.ts +53 -0
  329. package/dist/hooks/use-voice-input.d.ts +8 -1
  330. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  331. package/dist/hooks/use-workspace-sessions.d.ts +24 -5
  332. package/dist/human-input-model.d.ts +122 -0
  333. package/dist/identity-link-accounts.d.ts +11 -0
  334. package/dist/identity-link-consent.d.ts +18 -0
  335. package/dist/index.d.ts +82 -20
  336. package/dist/index.js +2340 -6603
  337. package/dist/index.js.map +1 -1
  338. package/dist/interaction.d.ts +1 -1
  339. package/dist/interaction.js +14 -24
  340. package/dist/interaction.js.map +1 -1
  341. package/dist/latest-question-R77KWSUP.js +118 -0
  342. package/dist/latest-question-R77KWSUP.js.map +1 -0
  343. package/dist/lib/clipboard.d.ts +7 -0
  344. package/dist/lib/error-message.d.ts +7 -0
  345. package/dist/lib/format.d.ts +58 -4
  346. package/dist/lib/host-theme.d.ts +77 -0
  347. package/dist/lib/interaction-errors.d.ts +3 -0
  348. package/dist/lib/menu-styles.d.ts +22 -0
  349. package/dist/lib/notify-observer.d.ts +2 -0
  350. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  351. package/dist/lib/provider-recovery.d.ts +55 -0
  352. package/dist/lib/scrollbars.d.ts +11 -0
  353. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  354. package/dist/lib/transient-retry.d.ts +25 -0
  355. package/dist/lib/workbench-peers.d.ts +36 -0
  356. package/dist/lib/xterm-theme.d.ts +7 -5
  357. package/dist/machines.js +9 -5
  358. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  359. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  360. package/dist/mcp-connection-status.d.ts +14 -0
  361. package/dist/model-mark-paths.d.ts +34 -0
  362. package/dist/model-mark-paths.js +16 -0
  363. package/dist/model-mark-paths.js.map +1 -0
  364. package/dist/model-picker-model.d.ts +111 -0
  365. package/dist/model-picker-model.js +25 -0
  366. package/dist/model-picker-model.js.map +1 -0
  367. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  368. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  369. package/dist/model-policy.d.ts +30 -3
  370. package/dist/model-policy.js +14 -1
  371. package/dist/native-previews.d.ts +28 -0
  372. package/dist/native-previews.js +82 -0
  373. package/dist/native-previews.js.map +1 -0
  374. package/dist/new-session-draft.d.ts +7 -0
  375. package/dist/new-session-draft.js +639 -0
  376. package/dist/new-session-draft.js.map +1 -0
  377. package/dist/notification-text.d.ts +27 -0
  378. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  379. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  380. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  381. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  382. package/dist/older-history.d.ts +3 -2
  383. package/dist/organization-model.d.ts +32 -0
  384. package/dist/organization-model.js +65 -0
  385. package/dist/organization-model.js.map +1 -0
  386. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  387. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  388. package/dist/plugin-details.d.ts +14 -0
  389. package/dist/plugin-discovery.d.ts +25 -0
  390. package/dist/preview-loading-paint.d.ts +20 -0
  391. package/dist/provider.d.ts +25 -2
  392. package/dist/queue-presentation-model.d.ts +72 -0
  393. package/dist/queue-presentation-model.js +38 -0
  394. package/dist/queue-presentation-model.js.map +1 -0
  395. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  396. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  397. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  398. package/dist/realtime/embedded-voice.d.ts +1 -0
  399. package/dist/realtime/realtime-control.d.ts +4 -65
  400. package/dist/realtime/session-realtime.d.ts +78 -0
  401. package/dist/realtime.js +25 -1333
  402. package/dist/realtime.js.map +1 -1
  403. package/dist/sandbox-files-O27IPOZW.js +21 -0
  404. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  405. package/dist/sandbox-label-model.d.ts +30 -0
  406. package/dist/sandbox-label-model.js +20 -0
  407. package/dist/sandbox-label-model.js.map +1 -0
  408. package/dist/scrollbars.d.ts +1 -0
  409. package/dist/scrollbars.js +10 -0
  410. package/dist/scrollbars.js.map +1 -0
  411. package/dist/secret-reference-label.d.ts +14 -0
  412. package/dist/secrets-ui.d.ts +57 -0
  413. package/dist/session-agents-model.d.ts +10 -0
  414. package/dist/session-agents-model.js +25 -0
  415. package/dist/session-agents-model.js.map +1 -0
  416. package/dist/session-attention-model.d.ts +8 -0
  417. package/dist/session-attention-model.js +47 -0
  418. package/dist/session-attention-model.js.map +1 -0
  419. package/dist/session-auth-recommendation.d.ts +5 -0
  420. package/dist/session-capability-policy.d.ts +31 -0
  421. package/dist/session-feedback-model.d.ts +20 -0
  422. package/dist/session-feedback-model.js +56 -0
  423. package/dist/session-feedback-model.js.map +1 -0
  424. package/dist/session-list-model.d.ts +138 -0
  425. package/dist/session-list-model.js +274 -0
  426. package/dist/session-list-model.js.map +1 -0
  427. package/dist/session-realtime-7DJOIHQW.js +21 -0
  428. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  429. package/dist/session-realtime.d.ts +7 -0
  430. package/dist/session-realtime.js +19 -0
  431. package/dist/session-realtime.js.map +1 -0
  432. package/dist/session-status-model.d.ts +36 -0
  433. package/dist/session-ui.d.ts +39 -1
  434. package/dist/session-ui.js +126 -12
  435. package/dist/session-ui.js.map +1 -1
  436. package/dist/session.d.ts +8 -2
  437. package/dist/session.js +35 -20
  438. package/dist/site-snapshot.d.ts +14 -0
  439. package/dist/sites-ui.d.ts +24 -0
  440. package/dist/sites.d.ts +3 -0
  441. package/dist/sites.js +14 -0
  442. package/dist/sites.js.map +1 -0
  443. package/dist/skill-discovery.d.ts +47 -0
  444. package/dist/terminal.d.ts +8 -0
  445. package/dist/terminal.js +32 -0
  446. package/dist/terminal.js.map +1 -0
  447. package/dist/testing/session-scenarios.d.ts +10 -0
  448. package/dist/testing/session-scenarios.js +367 -0
  449. package/dist/testing/session-scenarios.js.map +1 -0
  450. package/dist/timeline/activity-rail.d.ts +11 -2
  451. package/dist/timeline/agent-identity.d.ts +30 -0
  452. package/dist/timeline/agent-row.d.ts +31 -0
  453. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  454. package/dist/timeline/compaction-copy.d.ts +46 -0
  455. package/dist/timeline/focus-sequence.d.ts +9 -0
  456. package/dist/timeline/genie-copy.d.ts +3 -0
  457. package/dist/timeline/genie-loading.d.ts +47 -0
  458. package/dist/timeline/index.d.ts +10 -5
  459. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  460. package/dist/timeline/message-sender.d.ts +19 -0
  461. package/dist/timeline/notice-presentation.d.ts +13 -0
  462. package/dist/timeline/parsers.d.ts +11 -0
  463. package/dist/timeline/patch-apply-command.d.ts +18 -0
  464. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  465. package/dist/timeline/platform-activity-row.d.ts +1 -2
  466. package/dist/timeline/presented-image.d.ts +11 -0
  467. package/dist/timeline/projection.d.ts +31 -2
  468. package/dist/timeline/provider-logo.d.ts +15 -0
  469. package/dist/timeline/question-nav-model.d.ts +23 -0
  470. package/dist/timeline/registry.d.ts +12 -1
  471. package/dist/timeline/retained-image.d.ts +18 -0
  472. package/dist/timeline/retained-loaders.d.ts +27 -0
  473. package/dist/timeline/rolling-activity.d.ts +11 -0
  474. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  475. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  476. package/dist/timeline/shared.d.ts +4 -1
  477. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  478. package/dist/timeline/startup-preference.d.ts +3 -0
  479. package/dist/timeline/startup-timings.d.ts +4 -0
  480. package/dist/timeline/tool-display-name.d.ts +5 -2
  481. package/dist/timeline/tool-presentation.d.ts +172 -0
  482. package/dist/timeline/turn-summary-model.d.ts +95 -0
  483. package/dist/timeline/turn-summary.d.ts +20 -54
  484. package/dist/timeline/types.d.ts +179 -7
  485. package/dist/timeline/work-presentation.d.ts +60 -0
  486. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  487. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  488. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  489. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  490. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  491. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  492. package/dist/timeline-model.d.ts +29 -0
  493. package/dist/timeline-model.js +254 -0
  494. package/dist/timeline-model.js.map +1 -0
  495. package/dist/usage/allowance-copy.d.ts +25 -0
  496. package/dist/usage/session-usage-limit.d.ts +88 -0
  497. package/dist/usage/summary.d.ts +35 -0
  498. package/dist/usage.d.ts +17 -0
  499. package/dist/usage.js +1187 -0
  500. package/dist/usage.js.map +1 -0
  501. package/dist/voice-recording-owner.d.ts +7 -0
  502. package/package.json +106 -7
  503. package/src/approvals.ts +8 -1
  504. package/src/artifacts-spreadsheet.ts +1 -0
  505. package/src/artifacts.ts +44 -0
  506. package/src/assets/README.md +8 -0
  507. package/src/assets/gmail.ico +0 -0
  508. package/src/assets/outlook.ico +0 -0
  509. package/src/capability-catalog-row.tsx +94 -0
  510. package/src/capability-logo-fallback.ts +22 -0
  511. package/src/client.ts +20 -31
  512. package/src/commands/registry.ts +18 -15
  513. package/src/commands/types.ts +2 -0
  514. package/src/components/anthropic-mark.tsx +10 -0
  515. package/src/components/approval-surface.tsx +401 -138
  516. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  517. package/src/components/artifacts/artifact-sandbox.tsx +193 -0
  518. package/src/components/artifacts/artifact-surface.tsx +40 -20
  519. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  520. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  521. package/src/components/artifacts/document-editor.tsx +141 -16
  522. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  523. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  524. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  525. package/src/components/artifacts/editable-document.tsx +37 -36
  526. package/src/components/artifacts/editable-presentation.tsx +36 -18
  527. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  528. package/src/components/artifacts/index.ts +45 -0
  529. package/src/components/artifacts/inline-html-document.ts +24 -0
  530. package/src/components/artifacts/latest-task-runner.ts +49 -0
  531. package/src/components/artifacts/presentation-editor.tsx +323 -67
  532. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  533. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  534. package/src/components/artifacts/site-view.tsx +121 -0
  535. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  536. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  537. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  538. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  539. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  540. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  541. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  542. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  543. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  544. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  545. package/src/components/browser-select-control.tsx +312 -0
  546. package/src/components/browser-viewer.tsx +778 -318
  547. package/src/components/chat-composer.tsx +47 -5
  548. package/src/components/child-session-link.tsx +36 -0
  549. package/src/components/claude-mark.tsx +11 -0
  550. package/src/components/code-editor.tsx +13 -16
  551. package/src/components/composer-transcription-control.tsx +128 -30
  552. package/src/components/composer.tsx +404 -195
  553. package/src/components/computer-viewer.tsx +880 -253
  554. package/src/components/copy-button.tsx +13 -5
  555. package/src/components/desktop-viewer.tsx +1 -1
  556. package/src/components/enrollment-consent.tsx +1 -1
  557. package/src/components/enrollment-device-flow.tsx +1 -1
  558. package/src/components/file-browser.tsx +10 -14
  559. package/src/components/fleet-tile.tsx +5 -3
  560. package/src/components/generated-video-player.tsx +4 -2
  561. package/src/components/grok-mark.tsx +34 -0
  562. package/src/components/human-input-form.tsx +590 -283
  563. package/src/components/human-input-surface.tsx +11 -0
  564. package/src/components/interaction-intervention-banner.tsx +2 -2
  565. package/src/components/linkified-text.tsx +79 -0
  566. package/src/components/machine-card.tsx +35 -78
  567. package/src/components/machine-dock-bar.tsx +1 -1
  568. package/src/components/machine-input-display.ts +197 -3
  569. package/src/components/machines/agent-status-icon.tsx +31 -0
  570. package/src/components/machines/machine-detail.tsx +200 -31
  571. package/src/components/machines/machine-operation-policy.tsx +1 -1
  572. package/src/components/machines/machine-status.ts +241 -0
  573. package/src/components/machines-dashboard.tsx +2 -17
  574. package/src/components/markdown-table-layout.ts +143 -0
  575. package/src/components/markdown.tsx +466 -129
  576. package/src/components/message-timeline.tsx +2370 -667
  577. package/src/components/model-mark.tsx +102 -0
  578. package/src/components/model-picker.tsx +15 -4
  579. package/src/components/model-policy-picker-menu.tsx +371 -0
  580. package/src/components/model-policy-picker.tsx +252 -429
  581. package/src/components/new-conversation.tsx +221 -0
  582. package/src/components/open-geni-chat.tsx +309 -0
  583. package/src/components/open-geni-links.tsx +179 -0
  584. package/src/components/openrouter-mark.tsx +13 -0
  585. package/src/components/opper-mark.tsx +18 -0
  586. package/src/components/pierre-diff.tsx +41 -16
  587. package/src/components/pierre-file.tsx +35 -10
  588. package/src/components/preview-loading.tsx +109 -0
  589. package/src/components/provider-recovery-notice.tsx +49 -0
  590. package/src/components/queue-item-content.ts +14 -0
  591. package/src/components/queue-surface-implementation.tsx +51 -356
  592. package/src/components/queue-surface-state.tsx +3 -1
  593. package/src/components/rehype-secret-refs.ts +98 -0
  594. package/src/components/remark-soft-line-breaks.ts +166 -0
  595. package/src/components/sandbox-files.tsx +91 -15
  596. package/src/components/sandbox-terminal.tsx +84 -13
  597. package/src/components/sandbox-workspace.tsx +147 -51
  598. package/src/components/secret-question-field.tsx +324 -0
  599. package/src/components/secret-ref-chip.tsx +185 -0
  600. package/src/components/session-capability-frame.tsx +197 -0
  601. package/src/components/session-chrome.tsx +842 -251
  602. package/src/components/session-commands-panel.tsx +126 -0
  603. package/src/components/session-commands.tsx +18 -0
  604. package/src/components/session-connection-request.tsx +97 -0
  605. package/src/components/session-conversation.tsx +876 -0
  606. package/src/components/session-list.tsx +257 -0
  607. package/src/components/session-mcp-capability-card.tsx +680 -0
  608. package/src/components/session-proxy-scope.tsx +153 -0
  609. package/src/components/session-status.tsx +26 -17
  610. package/src/components/session-usage-limit-notice.tsx +174 -0
  611. package/src/components/timeline-anchor.tsx +119 -0
  612. package/src/components/timeline-annotation-chrome.tsx +196 -0
  613. package/src/components/timeline-annotation-layout.ts +268 -0
  614. package/src/components/timeline-annotation-markers.tsx +185 -0
  615. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  616. package/src/components/timeline-annotation-selection.tsx +106 -54
  617. package/src/components/timeline-annotation-shared.ts +245 -0
  618. package/src/components/timeline-annotations-dialog.tsx +185 -128
  619. package/src/components/timeline-annotations.tsx +189 -45
  620. package/src/components/timeline-reading-progress.ts +80 -0
  621. package/src/components/timeline-search.tsx +168 -0
  622. package/src/components/timeline-settlement.ts +60 -0
  623. package/src/components/tool-action-review.tsx +650 -0
  624. package/src/components/tool-review-history.tsx +88 -0
  625. package/src/components/usage-limit-notice.tsx +179 -0
  626. package/src/components/usage-member-list.tsx +792 -0
  627. package/src/components/usage-meter.tsx +382 -0
  628. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  629. package/src/components/user-message-body.tsx +27 -2
  630. package/src/components/workspace-dock.tsx +18 -1
  631. package/src/composer-messages.ts +150 -0
  632. package/src/composer-voice-events.ts +12 -0
  633. package/src/composer.ts +6 -1
  634. package/src/connect-account-identity.tsx +34 -0
  635. package/src/connect-accounts.tsx +233 -0
  636. package/src/connect-chooser.tsx +336 -0
  637. package/src/connect-panel.tsx +99 -0
  638. package/src/connect-setup.tsx +355 -0
  639. package/src/connect.ts +60 -0
  640. package/src/connection-assets.d.ts +4 -0
  641. package/src/connection-catalog.tsx +162 -0
  642. package/src/connection-discovery.tsx +238 -0
  643. package/src/connection-installed.tsx +51 -0
  644. package/src/connection-logo.tsx +37 -0
  645. package/src/connection-service-logo.tsx +55 -0
  646. package/src/connection-service-presentation.ts +46 -0
  647. package/src/connection-skeleton.tsx +16 -0
  648. package/src/connection-type-picker.tsx +36 -0
  649. package/src/conversation-timeline.ts +92 -0
  650. package/src/desktop.ts +24 -0
  651. package/src/device-authorization.tsx +98 -0
  652. package/src/diffs.ts +16 -0
  653. package/src/discovery-cache.ts +42 -0
  654. package/src/editor.ts +13 -0
  655. package/src/hooks/internal.ts +3 -2
  656. package/src/hooks/latest-question.ts +164 -0
  657. package/src/hooks/shared-machines-list.ts +34 -1
  658. package/src/hooks/shared-query.ts +721 -0
  659. package/src/hooks/use-attached-browsers.ts +1 -1
  660. package/src/hooks/use-auth-runs.ts +0 -27
  661. package/src/hooks/use-available-models.ts +2 -2
  662. package/src/hooks/use-browser-frame-stream.ts +19 -2
  663. package/src/hooks/use-browser-session.ts +680 -205
  664. package/src/hooks/use-browser-sessions.ts +32 -1
  665. package/src/hooks/use-client-config-flags.ts +118 -0
  666. package/src/hooks/use-codex-accounts.ts +247 -47
  667. package/src/hooks/use-composer.ts +227 -44
  668. package/src/hooks/use-computer-frame-stream.ts +25 -7
  669. package/src/hooks/use-computer-input-posture.ts +94 -0
  670. package/src/hooks/use-computer-session.ts +409 -95
  671. package/src/hooks/use-connect.ts +23 -0
  672. package/src/hooks/use-desktop-stream.ts +19 -28
  673. package/src/hooks/use-file-attachments.ts +80 -4
  674. package/src/hooks/use-goal.ts +79 -9
  675. package/src/hooks/use-last-started-turn-policy.ts +37 -11
  676. package/src/hooks/use-machines.ts +4 -0
  677. package/src/hooks/use-new-conversation.ts +374 -0
  678. package/src/hooks/use-new-session-draft.ts +813 -0
  679. package/src/hooks/use-realtime-voice-models.ts +46 -0
  680. package/src/hooks/use-sandbox-files.ts +68 -20
  681. package/src/hooks/use-session-background-commands.ts +22 -11
  682. package/src/hooks/use-session-capabilities.ts +3 -2
  683. package/src/hooks/use-session-conversation.ts +150 -0
  684. package/src/hooks/use-session-events.ts +531 -335
  685. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  686. package/src/hooks/use-session-model-account.ts +174 -0
  687. package/src/hooks/use-session.ts +30 -2
  688. package/src/hooks/use-slash-commands.ts +6 -11
  689. package/src/hooks/use-supergrok-accounts.ts +22 -8
  690. package/src/hooks/use-terminal-stream.ts +153 -27
  691. package/src/hooks/use-transcription.ts +6 -0
  692. package/src/hooks/use-turn-queue.ts +2 -1
  693. package/src/hooks/use-usage.ts +100 -0
  694. package/src/hooks/use-vaults.ts +153 -0
  695. package/src/hooks/use-video-artifact-playback.ts +1 -1
  696. package/src/hooks/use-voice-input.ts +127 -19
  697. package/src/hooks/use-workspace-capture.ts +3 -2
  698. package/src/hooks/use-workspace-edit.ts +23 -5
  699. package/src/hooks/use-workspace-sessions.ts +74 -7
  700. package/src/human-input-model.ts +359 -0
  701. package/src/identity-link-accounts.tsx +148 -0
  702. package/src/identity-link-consent.tsx +192 -0
  703. package/src/index.ts +262 -16
  704. package/src/interaction.ts +1 -0
  705. package/src/lib/clipboard.ts +29 -0
  706. package/src/lib/error-message.ts +37 -0
  707. package/src/lib/format.ts +205 -10
  708. package/src/lib/host-theme.ts +529 -0
  709. package/src/lib/interaction-errors.ts +15 -0
  710. package/src/lib/menu-styles.ts +44 -0
  711. package/src/lib/notify-observer.ts +15 -0
  712. package/src/lib/pierre-diffs-loader.ts +53 -0
  713. package/src/lib/provider-recovery.ts +243 -0
  714. package/src/lib/scrollbars.ts +30 -0
  715. package/src/lib/terminal-input-readiness.ts +51 -0
  716. package/src/lib/transient-retry.ts +99 -0
  717. package/src/lib/workbench-peers.ts +62 -0
  718. package/src/lib/xterm-theme.ts +23 -21
  719. package/src/mcp-connection-status.ts +35 -0
  720. package/src/model-mark-paths.ts +53 -0
  721. package/src/model-picker-model.ts +330 -0
  722. package/src/model-policy.ts +299 -74
  723. package/src/native-previews.ts +100 -0
  724. package/src/new-session-draft.ts +22 -0
  725. package/src/notification-text.ts +81 -0
  726. package/src/older-history.ts +22 -4
  727. package/src/organization-model.ts +118 -0
  728. package/src/plugin-details.tsx +185 -0
  729. package/src/plugin-discovery.tsx +196 -0
  730. package/src/preview-loading-paint.ts +68 -0
  731. package/src/provider.tsx +74 -15
  732. package/src/queue-presentation-model.ts +464 -0
  733. package/src/realtime/dropdown-menu.tsx +19 -12
  734. package/src/realtime/embedded-new-voice.tsx +1 -0
  735. package/src/realtime/embedded-voice.tsx +3 -0
  736. package/src/realtime/realtime-control.tsx +138 -550
  737. package/src/realtime/session-realtime.ts +566 -0
  738. package/src/sandbox-label-model.ts +53 -0
  739. package/src/scrollbars.ts +3 -0
  740. package/src/secret-reference-label.ts +43 -0
  741. package/src/secrets-ui.tsx +59 -0
  742. package/src/session-agents-model.ts +33 -0
  743. package/src/session-attention-model.ts +62 -0
  744. package/src/session-auth-recommendation.ts +48 -0
  745. package/src/session-capability-policy.ts +196 -0
  746. package/src/session-context.ts +3 -4
  747. package/src/session-feedback-model.ts +95 -0
  748. package/src/session-list-model.ts +434 -0
  749. package/src/session-realtime.ts +18 -0
  750. package/src/session-status-model.ts +99 -0
  751. package/src/session-ui.ts +98 -1
  752. package/src/session.ts +17 -1
  753. package/src/site-snapshot.ts +74 -0
  754. package/src/sites-ui.tsx +348 -0
  755. package/src/sites.ts +3 -0
  756. package/src/skill-discovery.tsx +208 -0
  757. package/src/terminal.ts +26 -0
  758. package/src/testing/session-scenarios.ts +404 -0
  759. package/src/timeline/activity-rail.tsx +242 -101
  760. package/src/timeline/agent-identity.tsx +84 -0
  761. package/src/timeline/agent-row.tsx +231 -0
  762. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  763. package/src/timeline/compaction-copy.ts +115 -0
  764. package/src/timeline/fleet-decision-projection.ts +2 -1
  765. package/src/timeline/fleet-decision-row.tsx +1 -0
  766. package/src/timeline/focus-sequence.ts +44 -0
  767. package/src/timeline/genie-copy.ts +19 -0
  768. package/src/timeline/genie-loading.tsx +143 -0
  769. package/src/timeline/index.ts +30 -2
  770. package/src/timeline/knowledge-receipt.tsx +100 -0
  771. package/src/timeline/message-sender.tsx +71 -0
  772. package/src/timeline/notice-presentation.ts +48 -0
  773. package/src/timeline/parsers.ts +42 -2
  774. package/src/timeline/patch-apply-command.tsx +135 -0
  775. package/src/timeline/platform-activity-presentation.ts +166 -0
  776. package/src/timeline/platform-activity-row.tsx +15 -90
  777. package/src/timeline/presented-image.ts +63 -0
  778. package/src/timeline/projection.ts +1742 -76
  779. package/src/timeline/provider-logo.tsx +53 -0
  780. package/src/timeline/question-nav-model.ts +28 -0
  781. package/src/timeline/registry.ts +26 -4
  782. package/src/timeline/retained-image.ts +97 -0
  783. package/src/timeline/retained-loaders.ts +91 -0
  784. package/src/timeline/rolling-activity.tsx +80 -0
  785. package/src/timeline/screenshot-lightbox.tsx +228 -5
  786. package/src/timeline/session-usage-limit-row.tsx +42 -0
  787. package/src/timeline/shared.tsx +42 -15
  788. package/src/timeline/startup-dispatch-details.tsx +36 -0
  789. package/src/timeline/startup-preference.ts +33 -0
  790. package/src/timeline/startup-timings.tsx +145 -0
  791. package/src/timeline/tool-display-name.ts +19 -7
  792. package/src/timeline/tool-presentation.ts +1316 -0
  793. package/src/timeline/tool-renderers.tsx +835 -1138
  794. package/src/timeline/turn-summary-model.ts +343 -0
  795. package/src/timeline/turn-summary.tsx +272 -365
  796. package/src/timeline/types.ts +189 -6
  797. package/src/timeline/work-presentation.ts +189 -0
  798. package/src/timeline-model.ts +143 -0
  799. package/src/usage/allowance-copy.ts +64 -0
  800. package/src/usage/session-usage-limit.ts +266 -0
  801. package/src/usage/summary.ts +93 -0
  802. package/src/usage.ts +70 -0
  803. package/src/voice-recording-owner.ts +22 -0
  804. package/styles/compiled.css +2319 -748
  805. package/styles/connect.css +290 -0
  806. package/styles/connect.d.ts +1 -0
  807. package/styles/effective-tokens.css +1 -0
  808. package/styles/index.css +309 -9
  809. package/styles/responsive.css +99 -7
  810. package/styles/session-capability.css +44 -0
  811. package/styles/tokens.css +134 -66
  812. package/dist/browser-viewer-MKKFRRRV.js +0 -14
  813. package/dist/chunk-2DZVYHVO.js +0 -470
  814. package/dist/chunk-2DZVYHVO.js.map +0 -1
  815. package/dist/chunk-3AGBGTRT.js.map +0 -1
  816. package/dist/chunk-4MDLEHXL.js.map +0 -1
  817. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  818. package/dist/chunk-7EAFGICR.js +0 -302
  819. package/dist/chunk-7EAFGICR.js.map +0 -1
  820. package/dist/chunk-ELIYWBZR.js.map +0 -1
  821. package/dist/chunk-H5YGYNXS.js.map +0 -1
  822. package/dist/chunk-HUIKIDM5.js.map +0 -1
  823. package/dist/chunk-ICA6R6TW.js.map +0 -1
  824. package/dist/chunk-IOLVN74D.js.map +0 -1
  825. package/dist/chunk-JAQ5K7W6.js.map +0 -1
  826. package/dist/chunk-JVYQRRC4.js.map +0 -1
  827. package/dist/chunk-KCGXPP5V.js.map +0 -1
  828. package/dist/chunk-KZ73RL76.js.map +0 -1
  829. package/dist/chunk-NEXLLTP4.js.map +0 -1
  830. package/dist/chunk-PEI6RANI.js.map +0 -1
  831. package/dist/chunk-VTOREEXF.js +0 -142
  832. package/dist/chunk-VTOREEXF.js.map +0 -1
  833. package/dist/chunk-WSK7G5LE.js +0 -170
  834. package/dist/chunk-WSK7G5LE.js.map +0 -1
  835. package/dist/chunk-X4A66EWZ.js +0 -223
  836. package/dist/chunk-X4A66EWZ.js.map +0 -1
  837. package/dist/chunk-XYRDDSXF.js.map +0 -1
  838. package/dist/chunk-YG4QEQF5.js +0 -9557
  839. package/dist/chunk-YG4QEQF5.js.map +0 -1
  840. package/dist/chunk-YVCHAQZY.js.map +0 -1
  841. package/dist/chunk-ZPBTI3TE.js.map +0 -1
  842. package/dist/computer-viewer-FWEZISW4.js +0 -16
  843. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  844. package/dist/hooks/use-environments.d.ts +0 -41
  845. package/dist/hooks/use-packs.d.ts +0 -32
  846. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  847. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  848. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  849. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  850. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  851. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  852. package/src/hooks/use-environments.ts +0 -182
  853. package/src/hooks/use-packs.ts +0 -157
  854. /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  855. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
@@ -0,0 +1,243 @@
1
+ import type { SessionEvent, SessionStatus } from "@opengeni/sdk";
2
+
3
+ /**
4
+ * Finite same-turn provider recovery, projected for people. Presentation only:
5
+ * the worker owns retry authority, pacing and the recovery budget. The worker
6
+ * (`apps/worker/src/activities/agent-turn/provider-recovery-copy.ts`) writes
7
+ * the same exhausted sentence into `turn.failed.error`; keep the two in step.
8
+ */
9
+ export type ProviderRecoveryCondition =
10
+ | "overloaded"
11
+ | "unavailable"
12
+ | "unresponsive"
13
+ | "rate_limited";
14
+
15
+ export type ProviderRecoveryFacts = {
16
+ /** Recorded worker failure code (`provider_unavailable`, `mcp_transport_timeout`, ...). */
17
+ code: string;
18
+ condition: ProviderRecoveryCondition | null;
19
+ /** Display label of the affected model, when the route was recorded. */
20
+ modelLabel: string | null;
21
+ /** Display label of the serving provider, when the route was recorded. */
22
+ providerLabel: string | null;
23
+ /** Automatic retries scheduled (live) or spent (exhausted). */
24
+ attempt: number | null;
25
+ /** Finite automatic retry budget. */
26
+ maxAttempts: number | null;
27
+ /** True when the model route itself is affected, so another model may help. */
28
+ modelRoute: boolean;
29
+ /** True while the turn waits for its sandbox to be saved and replaced. It
30
+ * has no retry budget: it resumes as soon as the successor box is ready. */
31
+ sandboxWait?: boolean;
32
+ /** Recorded lifecycle fence of a sandbox wait (`capture_in_progress`,
33
+ * `rotation_in_progress`, `provider_recovery_in_progress`), when known. */
34
+ sandboxTransition?: string | null;
35
+ };
36
+
37
+ const MODEL_CODES: ReadonlySet<string> = new Set([
38
+ "provider_unavailable",
39
+ "provider_rate_limited",
40
+ "provider_unknown_finish_reason",
41
+ "post_compaction_continuation_empty",
42
+ ]);
43
+
44
+ /** A recovering turn parked behind a sandbox lifecycle transition (worker
45
+ * `failure-settlement.ts`). Before, this showed only "Recovering" with no
46
+ * reason. A superseded lease
47
+ * counts only when the worker recorded the pending transition it waits for. */
48
+ const SANDBOX_WAIT_CODES: ReadonlySet<string> = new Set([
49
+ "sandbox_deadline_rotation",
50
+ "sandbox_lifecycle_transition",
51
+ "sandbox_lease_superseded",
52
+ ]);
53
+
54
+ const RECOVERY_CODES: ReadonlySet<string> = new Set([
55
+ ...MODEL_CODES,
56
+ ...SANDBOX_WAIT_CODES,
57
+ "upstream_connectivity_unavailable",
58
+ "mcp_transport_timeout",
59
+ "mcp_transport_unavailable",
60
+ "sandbox_command_start_unavailable",
61
+ "retained_attachment_unavailable",
62
+ "turn_execution_policy_definition_mismatch",
63
+ ]);
64
+
65
+ /** Matches the worker's default budget for legacy events that omit it. */
66
+ const DEFAULT_MAX_ATTEMPTS = 5;
67
+
68
+ function text(value: unknown, max = 120): string | null {
69
+ if (typeof value !== "string") return null;
70
+ const normalized = value.replace(/\s+/g, " ").trim();
71
+ return normalized ? normalized.slice(0, max) : null;
72
+ }
73
+
74
+ function count(value: unknown): number | null {
75
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
76
+ }
77
+
78
+ function condition(
79
+ payload: Record<string, unknown>,
80
+ code: string,
81
+ ): ProviderRecoveryCondition | null {
82
+ const recorded = payload.providerCondition;
83
+ if (
84
+ recorded === "overloaded" ||
85
+ recorded === "unavailable" ||
86
+ recorded === "unresponsive" ||
87
+ recorded === "rate_limited"
88
+ )
89
+ return recorded;
90
+ if (code === "provider_rate_limited") return "rate_limited";
91
+ if (code !== "provider_unavailable") return null;
92
+ // Older events predate the typed condition; their provider text still says so.
93
+ return [payload.lastRetryableError, payload.detail, payload.error].some(
94
+ (value) => typeof value === "string" && /\boverload(?:ed)?(?:_error)?\b/i.test(value),
95
+ )
96
+ ? "overloaded"
97
+ : null;
98
+ }
99
+
100
+ /**
101
+ * Read a retryable `turn.recovery.requested` payload or an exhausted
102
+ * `turn.failed` payload. Returns null for every other recovery reason (human
103
+ * Retry, worker shutdown, credential rotation, capacity waits, ...).
104
+ */
105
+ export function parseProviderRecovery(payload: unknown): ProviderRecoveryFacts | null {
106
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) return null;
107
+ const record = payload as Record<string, unknown>;
108
+ const code = text(record.code) ?? text(record.reason);
109
+ if (!code || !RECOVERY_CODES.has(code)) return null;
110
+ const rotation = text(record.rotationReason);
111
+ const transition = text(record.transitionReason);
112
+ if (code === "sandbox_lease_superseded" && !rotation && !transition) return null;
113
+ // A live recovery request is retryable; a spent budget is explicitly marked.
114
+ if (record.recoveryExhausted !== true && record.retryable === false) return null;
115
+ const attempt = count(record.providerRecoveryCount);
116
+ return {
117
+ code,
118
+ condition: condition(record, code),
119
+ modelLabel: text(record.modelLabel),
120
+ providerLabel: text(record.providerLabel),
121
+ attempt,
122
+ maxAttempts: count(record.maxProviderRecoveryCount) ?? DEFAULT_MAX_ATTEMPTS,
123
+ modelRoute: MODEL_CODES.has(code),
124
+ ...(SANDBOX_WAIT_CODES.has(code)
125
+ ? {
126
+ sandboxWait: true,
127
+ sandboxTransition: transition ?? (rotation ? "rotation_in_progress" : null),
128
+ }
129
+ : {}),
130
+ };
131
+ }
132
+
133
+ /** One present-tense clause naming what is unavailable, without a trailing period. */
134
+ export function providerRecoverySubject(facts: ProviderRecoveryFacts): string {
135
+ const model = facts.modelLabel ?? "The model";
136
+ const at = facts.providerLabel ? ` at the provider (${facts.providerLabel})` : " at the provider";
137
+ switch (facts.code) {
138
+ case "provider_rate_limited":
139
+ return `${model} is rate limited${at}`;
140
+ case "provider_unavailable":
141
+ return facts.condition === "overloaded"
142
+ ? `${model} is overloaded${at}`
143
+ : facts.condition === "unresponsive"
144
+ ? `${model} stopped responding${at}`
145
+ : `${model} is temporarily unavailable${at}`;
146
+ case "provider_unknown_finish_reason":
147
+ return `${model} ended its response unexpectedly`;
148
+ case "post_compaction_continuation_empty":
149
+ return `${model} stopped right after compacting the conversation`;
150
+ case "upstream_connectivity_unavailable":
151
+ return "Opengeni can't reach an upstream service";
152
+ case "mcp_transport_timeout":
153
+ return "A required MCP server isn't responding";
154
+ case "mcp_transport_unavailable":
155
+ return "A required MCP server is unreachable";
156
+ case "sandbox_command_start_unavailable":
157
+ return "The sandbox isn't ready yet";
158
+ case "retained_attachment_unavailable":
159
+ return "An image from earlier in this conversation can't be read from storage";
160
+ case "turn_execution_policy_definition_mismatch":
161
+ return "Opengeni is applying a configuration update";
162
+ case "sandbox_deadline_rotation":
163
+ return "The sandbox reached its maximum lifetime, so Opengeni is moving the workspace to a fresh sandbox";
164
+ case "sandbox_lifecycle_transition":
165
+ case "sandbox_lease_superseded":
166
+ return facts.sandboxTransition === "capture_in_progress"
167
+ ? "Opengeni is saving the sandbox workspace"
168
+ : facts.sandboxTransition === "provider_recovery_in_progress"
169
+ ? "Opengeni is recovering the sandbox"
170
+ : facts.sandboxTransition === "rotation_in_progress"
171
+ ? "Opengeni is moving the workspace to a fresh sandbox"
172
+ : "Opengeni is preparing the sandbox";
173
+ default:
174
+ return "A service this turn depends on is temporarily unavailable";
175
+ }
176
+ }
177
+
178
+ /** Live status while the same turn waits for its next automatic retry. */
179
+ export function providerRecoveryRetryingText(facts: ProviderRecoveryFacts): string {
180
+ if (facts.sandboxWait) return `${providerRecoverySubject(facts)}…`;
181
+ const progress =
182
+ facts.attempt !== null && facts.maxAttempts !== null
183
+ ? ` (attempt ${Math.min(facts.attempt, facts.maxAttempts)} of ${facts.maxAttempts})`
184
+ : " automatically";
185
+ return `${providerRecoverySubject(facts)} — retrying${progress}…`;
186
+ }
187
+
188
+ /** Terminal sentence once the automatic budget is spent. */
189
+ export function providerRecoveryExhaustedText(facts: ProviderRecoveryFacts): string {
190
+ const spent = facts.attempt ?? facts.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
191
+ const retried = `Opengeni retried ${spent} ${spent === 1 ? "time" : "times"} without success.`;
192
+ const remedy = facts.modelRoute
193
+ ? "Try again in a few minutes, or switch to another model."
194
+ : "Try again in a few minutes.";
195
+ return `${providerRecoverySubject(facts)}. ${retried} ${remedy}`;
196
+ }
197
+
198
+ const BOUNDARY_TYPES: ReadonlySet<string> = new Set([
199
+ "turn.recovery.requested",
200
+ "turn.started",
201
+ "turn.completed",
202
+ "turn.failed",
203
+ "turn.cancelled",
204
+ "turn.superseded",
205
+ ]);
206
+
207
+ /**
208
+ * The active turn's current automatic provider retry, or null. Only a
209
+ * `recovering`, unpaused session qualifies, and only the newest boundary of its
210
+ * exact active turn counts, so merged or replayed pages never borrow another
211
+ * turn's diagnosis.
212
+ */
213
+ export function currentProviderRecovery(
214
+ session: {
215
+ id: string;
216
+ status: SessionStatus | null | undefined;
217
+ activeTurnId: string | null | undefined;
218
+ effectiveControl?: { state: string } | null | undefined;
219
+ },
220
+ events: readonly SessionEvent[],
221
+ ): ProviderRecoveryFacts | null {
222
+ if (
223
+ session.status !== "recovering" ||
224
+ (session.effectiveControl && session.effectiveControl.state !== "active") ||
225
+ !session.activeTurnId
226
+ )
227
+ return null;
228
+ let latest: SessionEvent | undefined;
229
+ for (const event of events) {
230
+ if (
231
+ event.sessionId !== session.id ||
232
+ event.turnId !== session.activeTurnId ||
233
+ event.duplicateOfEventId ||
234
+ (event.turnAssociation && event.turnAssociation !== "current") ||
235
+ !BOUNDARY_TYPES.has(event.type)
236
+ )
237
+ continue;
238
+ if (!latest || event.sequence > latest.sequence) latest = event;
239
+ }
240
+ if (latest?.type !== "turn.recovery.requested") return null;
241
+ const payload = latest.payload as Record<string, unknown> | null | undefined;
242
+ return payload?.recoveryExhausted === true ? null : parseProviderRecovery(payload);
243
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Where a platform draws classic, always-visible scrollbars (Windows, and Linux
3
+ * or macOS when set to always show them), Chromium paints arrow buttons on the
4
+ * thin, colored scrollbars the stylesheet asks for with `scrollbar-width` and
5
+ * `scrollbar-color`. This marks such documents with
6
+ * `data-og-scrollbars="classic"` on <html> so the stylesheet can use a slim
7
+ * rounded thumb there instead. Overlay-scrollbar platforms keep their native
8
+ * scrollbars.
9
+ */
10
+ export const CLASSIC_SCROLLBARS_ATTRIBUTE = "data-og-scrollbars";
11
+
12
+ const marked = new WeakSet<Document>();
13
+
14
+ export function markClassicScrollbars(doc: Document | undefined = globalThis.document): void {
15
+ if (!doc?.documentElement || marked.has(doc)) return;
16
+ marked.add(doc);
17
+ const root = doc.documentElement;
18
+ // Probe with the platform default: the page's own scrollbar styles must not
19
+ // decide what the platform draws.
20
+ root.removeAttribute(CLASSIC_SCROLLBARS_ATTRIBUTE);
21
+ const probe = doc.createElement("div");
22
+ probe.setAttribute("aria-hidden", "true");
23
+ probe.style.cssText =
24
+ "position:absolute;top:-9999px;left:-9999px;width:100px;height:100px;" +
25
+ "overflow:scroll;visibility:hidden;scrollbar-width:auto;scrollbar-color:auto";
26
+ root.append(probe);
27
+ const classic = probe.offsetWidth - probe.clientWidth > 0;
28
+ probe.remove();
29
+ if (classic) root.setAttribute(CLASSIC_SCROLLBARS_ATTRIBUTE, "classic");
30
+ }
@@ -0,0 +1,51 @@
1
+ /** Negotiated by the stock ttyd launcher, never inferred from ordinary output.
2
+ * The Bash Readline adapter emits this OSC only at its first input boundary.
3
+ * It is metadata (ignored by older xterm clients), not a prompt string. */
4
+ export const TERMINAL_INPUT_READY_PREFERENCE = "opengeniInputReady";
5
+ export const TERMINAL_INPUT_READY_PROTOCOL = "bash-readline-v1";
6
+ const PREFIX = "\x1b]777;opengeni-input;";
7
+ const FRAME = /^\x1b\]777;opengeni-input;(hello|ready);([a-f0-9]{32})\x07$/;
8
+ const MAX_FRAME = PREFIX.length + "hello;".length + 32 + 1;
9
+
10
+ /** One decoder per WebSocket/PTY generation. Retains at most a partial marker,
11
+ * rather than buffering terminal output while the shell initializes. */
12
+ export function terminalInputReadyDecoder() {
13
+ let pending = "";
14
+ let received = false;
15
+ let identity: string | null = null;
16
+ return (data: string): { output: string; ready: boolean } => {
17
+ let input = pending + data;
18
+ let output = "";
19
+ let ready = false;
20
+ pending = "";
21
+ while (input.length > 0) {
22
+ const marker = input.indexOf(PREFIX);
23
+ if (marker < 0) break;
24
+ output += input.slice(0, marker);
25
+ input = input.slice(marker);
26
+ const end = input.indexOf("\x07", PREFIX.length);
27
+ if (end < 0 && input.length < MAX_FRAME) {
28
+ pending = input;
29
+ return { output, ready };
30
+ }
31
+ const match = end >= 0 && end < MAX_FRAME ? FRAME.exec(input.slice(0, end + 1)) : null;
32
+ if (!match) {
33
+ // Malformed/overlong metadata is ordinary output, never an unbounded
34
+ // parser buffer or permission to deliver input.
35
+ output += input[0];
36
+ input = input.slice(1);
37
+ continue;
38
+ }
39
+ input = input.slice(end + 1);
40
+ if (match[1] === "hello" && identity === null) identity = match[2]!;
41
+ if (match[1] === "ready" && match[2] === identity && !received) {
42
+ ready = true;
43
+ received = true;
44
+ }
45
+ }
46
+ let suffix = Math.min(input.length, PREFIX.length - 1);
47
+ while (suffix > 0 && !PREFIX.startsWith(input.slice(-suffix))) suffix--;
48
+ pending = suffix > 0 ? input.slice(-suffix) : "";
49
+ return { output: output + (suffix > 0 ? input.slice(0, -suffix) : input), ready };
50
+ };
51
+ }
@@ -0,0 +1,99 @@
1
+ import { OpenGeniApiError } from "@opengeni/sdk";
2
+
3
+ /*
4
+ * A deploy, failover or database restart makes the API answer 502/503/504 (or a
5
+ * retryable 500) for a few seconds, or drops the connection outright. Reads
6
+ * behind the new-chat composer retry those quietly before anything is shown;
7
+ * the person keeps typing and never sees a raw "service unavailable" line.
8
+ */
9
+
10
+ /** Backoff between attempts: about ten seconds in all before anything is shown. */
11
+ export const TRANSIENT_RETRY_DELAYS_MS: readonly number[] = [1_000, 2_000, 3_000, 4_000];
12
+
13
+ /** After the quiet retries give up, try once at this pace until Opengeni answers. */
14
+ export const TRANSIENT_RECONNECT_INTERVAL_MS = 3_000;
15
+
16
+ /** The one line shown while Opengeni is briefly unreachable. */
17
+ export const OPENGENI_UPDATING_NOTICE = "Opengeni is updating. We'll reconnect automatically.";
18
+
19
+ const NETWORK_FAILURE =
20
+ /failed to fetch|fetch failed|networkerror|load failed|network request failed/iu;
21
+
22
+ /**
23
+ * True for a failure that says the service is briefly unreachable, not that
24
+ * the request was wrong: a gateway or availability status, a 500 the API marks
25
+ * retryable, or a request that never got a response.
26
+ */
27
+ export function isTransientServiceFailure(error: unknown): boolean {
28
+ if (isAbort(error)) return false;
29
+ if (error instanceof OpenGeniApiError) {
30
+ if (error.status === 502 || error.status === 503 || error.status === 504) return true;
31
+ if (error.status === 500) return error.retryable;
32
+ // The SDK reports a mutation whose response never arrived as status 0.
33
+ return error.status === 0 && error.code === "network_error";
34
+ }
35
+ return error instanceof TypeError && NETWORK_FAILURE.test(error.message);
36
+ }
37
+
38
+ export type RetryTransientOptions = {
39
+ /** Stop waiting (and rethrow the last failure) once this returns false. */
40
+ shouldContinue?: () => boolean;
41
+ signal?: AbortSignal;
42
+ delaysMs?: readonly number[];
43
+ sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;
44
+ };
45
+
46
+ /**
47
+ * Run a read, retrying only transient service failures with backoff. Never use
48
+ * this for a request whose repeat could apply twice: it is for reads and for
49
+ * writes that are idempotent by construction.
50
+ */
51
+ export async function retryTransient<T>(
52
+ operation: () => Promise<T>,
53
+ options: RetryTransientOptions = {},
54
+ ): Promise<T> {
55
+ const delays = options.delaysMs ?? TRANSIENT_RETRY_DELAYS_MS;
56
+ const sleep = options.sleep ?? abortableSleep;
57
+ for (let attempt = 0; ; attempt += 1) {
58
+ try {
59
+ return await operation();
60
+ } catch (error) {
61
+ const delay = delays[attempt];
62
+ if (
63
+ delay === undefined ||
64
+ !isTransientServiceFailure(error) ||
65
+ options.signal?.aborted ||
66
+ options.shouldContinue?.() === false
67
+ ) {
68
+ throw error;
69
+ }
70
+ await sleep(delay, options.signal);
71
+ if (options.signal?.aborted || options.shouldContinue?.() === false) throw error;
72
+ }
73
+ }
74
+ }
75
+
76
+ function abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {
77
+ return new Promise((resolve) => {
78
+ if (signal?.aborted) {
79
+ resolve();
80
+ return;
81
+ }
82
+ const done = () => {
83
+ clearTimeout(timer);
84
+ signal?.removeEventListener("abort", done);
85
+ resolve();
86
+ };
87
+ const timer = setTimeout(done, ms);
88
+ signal?.addEventListener("abort", done, { once: true });
89
+ });
90
+ }
91
+
92
+ function isAbort(error: unknown): boolean {
93
+ return (
94
+ (typeof DOMException !== "undefined" &&
95
+ error instanceof DOMException &&
96
+ error.name === "AbortError") ||
97
+ (error instanceof Error && error.name === "AbortError")
98
+ );
99
+ }
@@ -0,0 +1,62 @@
1
+ import type { DesktopRfbFactory } from "@opengeni/sdk";
2
+
3
+ /** Host-owned imports keep optional peers outside the root's bundler graph. */
4
+ export type WorkbenchPeerLoader<T = unknown> = () => Promise<T>;
5
+ export type CodeEditorLanguage = "javascript" | "json" | "python" | "markdown" | "css" | "html";
6
+ export type CodeEditorLanguages = Partial<Record<CodeEditorLanguage, WorkbenchPeerLoader>>;
7
+ export type CodeEditorPeers = { module: unknown; languages?: CodeEditorLanguages | undefined };
8
+ export type SandboxTerminalPeers = {
9
+ Terminal: unknown;
10
+ FitAddon: unknown;
11
+ WebLinksAddon: unknown;
12
+ loadWebgl?: WorkbenchPeerLoader | undefined;
13
+ };
14
+
15
+ function optionalPeer<T>(setup: string) {
16
+ let loader: WorkbenchPeerLoader<T> | null = null;
17
+ let loaded: Promise<T> | null = null;
18
+ let version = 0;
19
+ const listeners = new Set<() => void>();
20
+ return {
21
+ register(next: WorkbenchPeerLoader<T> | null): void {
22
+ if (next === loader) return;
23
+ loader = next;
24
+ loaded = null;
25
+ version += 1;
26
+ for (const listener of listeners) listener();
27
+ },
28
+ revision: () => version,
29
+ subscribe(listener: () => void): () => void {
30
+ listeners.add(listener);
31
+ return () => listeners.delete(listener);
32
+ },
33
+ load(): Promise<T> {
34
+ if (!loader) return Promise.reject(new Error(`Call ${setup} to enable this surface`));
35
+ if (!loaded) {
36
+ // A synchronous host-loader failure is also a rejected, retryable load.
37
+ const pending = Promise.resolve()
38
+ .then(loader)
39
+ .catch((error: unknown) => {
40
+ if (loaded === pending) loaded = null;
41
+ throw error;
42
+ });
43
+ loaded = pending;
44
+ }
45
+ return loaded;
46
+ },
47
+ };
48
+ }
49
+
50
+ export const sandboxTerminalPeers = optionalPeer<SandboxTerminalPeers>(
51
+ "enableSandboxTerminal() from @opengeni/react/terminal",
52
+ );
53
+ export const codeEditorPeers = optionalPeer<CodeEditorPeers>(
54
+ "enableCodeEditor() from @opengeni/react/editor",
55
+ );
56
+ export const desktopViewerPeers = optionalPeer<DesktopRfbFactory>(
57
+ "enableDesktopViewer() from @opengeni/react/desktop",
58
+ );
59
+
60
+ export const registerSandboxTerminal = sandboxTerminalPeers.register;
61
+ export const registerCodeEditor = codeEditorPeers.register;
62
+ export const registerDesktopViewer = desktopViewerPeers.register;
@@ -24,11 +24,13 @@ export type TokenReader = (name: string) => string | undefined;
24
24
  * The 16 ANSI colors + selection/cursor treatment, designed against the og
25
25
  * OKLCH palette. Hues are borrowed from the og status ramp so terminal color
26
26
  * reads as part of the same system: red≈status-failed(22), green≈status-idle
27
- * (155), yellow≈status-running(80), blue≈accent(255), magenta≈status-waiting
28
- * (305), cyan≈200. Dark uses lifted lightness on the dark slate ground; light
29
- * uses deeper, more saturated inks on the near-white ground. Bright variants
30
- * add lightness + a touch of chroma. `black`/`white` are neutral slate ramp
31
- * stops (never pure #000/#fff — that clashes with the calm neutral ground).
27
+ * (155), yellow≈status-running(80), magenta(305), cyan≈200. The ANSI blue and
28
+ * magenta slots stay chromatic because program output means them; the app
29
+ * chrome around the terminal is neutral. Dark uses lifted lightness on the
30
+ * dark neutral ground; light uses deeper, more saturated inks on the
31
+ * near-white ground. Bright variants add lightness + a touch of chroma.
32
+ * `black`/`white` and the selection are neutral grey ramp stops (never pure
33
+ * #000/#fff — that clashes with the calm neutral ground).
32
34
  */
33
35
  export type AnsiPalette = {
34
36
  black: string;
@@ -54,47 +56,47 @@ export type AnsiPalette = {
54
56
  };
55
57
 
56
58
  const DARK_ANSI: AnsiPalette = {
57
- black: "oklch(0.3 0.014 260)",
59
+ black: "oklch(0.3 0 0)",
58
60
  red: "oklch(0.68 0.17 22)",
59
61
  green: "oklch(0.75 0.13 155)",
60
62
  yellow: "oklch(0.8 0.11 80)",
61
63
  blue: "oklch(0.7 0.14 255)",
62
64
  magenta: "oklch(0.72 0.13 305)",
63
65
  cyan: "oklch(0.75 0.1 210)",
64
- white: "oklch(0.8 0.01 260)",
65
- brightBlack: "oklch(0.45 0.014 260)",
66
+ white: "oklch(0.8 0 0)",
67
+ brightBlack: "oklch(0.45 0 0)",
66
68
  brightRed: "oklch(0.76 0.17 22)",
67
69
  brightGreen: "oklch(0.82 0.14 155)",
68
70
  brightYellow: "oklch(0.86 0.12 85)",
69
71
  brightBlue: "oklch(0.78 0.13 255)",
70
72
  brightMagenta: "oklch(0.8 0.13 305)",
71
73
  brightCyan: "oklch(0.83 0.1 200)",
72
- brightWhite: "oklch(0.97 0.005 260)",
73
- selectionBackground: "oklch(0.72 0.15 255 / 0.34)",
74
- selectionForeground: "oklch(0.985 0.005 260)",
75
- selectionInactiveBackground: "oklch(0.72 0.02 260 / 0.22)",
74
+ brightWhite: "oklch(0.97 0 0)",
75
+ selectionBackground: "oklch(0.8 0 0 / 0.3)",
76
+ selectionForeground: "oklch(0.985 0 0)",
77
+ selectionInactiveBackground: "oklch(0.72 0 0 / 0.2)",
76
78
  };
77
79
 
78
80
  const LIGHT_ANSI: AnsiPalette = {
79
- black: "oklch(0.35 0.015 260)",
81
+ black: "oklch(0.35 0 0)",
80
82
  red: "oklch(0.52 0.19 22)",
81
83
  green: "oklch(0.5 0.13 155)",
82
84
  yellow: "oklch(0.56 0.13 80)",
83
85
  blue: "oklch(0.52 0.18 255)",
84
86
  magenta: "oklch(0.52 0.16 305)",
85
87
  cyan: "oklch(0.52 0.1 210)",
86
- white: "oklch(0.7 0.01 260)",
87
- brightBlack: "oklch(0.5 0.014 260)",
88
+ white: "oklch(0.7 0 0)",
89
+ brightBlack: "oklch(0.5 0 0)",
88
90
  brightRed: "oklch(0.55 0.2 22)",
89
91
  brightGreen: "oklch(0.54 0.14 155)",
90
92
  brightYellow: "oklch(0.6 0.14 80)",
91
93
  brightBlue: "oklch(0.48 0.19 255)",
92
94
  brightMagenta: "oklch(0.54 0.17 305)",
93
95
  brightCyan: "oklch(0.54 0.11 210)",
94
- brightWhite: "oklch(0.3 0.015 260)",
95
- selectionBackground: "oklch(0.55 0.18 255 / 0.24)",
96
- selectionForeground: "oklch(0.21 0.015 260)",
97
- selectionInactiveBackground: "oklch(0.6 0.02 260 / 0.16)",
96
+ brightWhite: "oklch(0.3 0 0)",
97
+ selectionBackground: "oklch(0.45 0 0 / 0.2)",
98
+ selectionForeground: "oklch(0.21 0 0)",
99
+ selectionInactiveBackground: "oklch(0.6 0 0 / 0.14)",
98
100
  };
99
101
 
100
102
  /** The designed ANSI-16 palette for a theme mode. Pure. */
@@ -110,8 +112,8 @@ export function ogAnsiPalette(mode: ThemeMode): AnsiPalette {
110
112
  */
111
113
  export function buildXtermTheme(read: TokenReader, mode: ThemeMode): XtermTheme {
112
114
  const ansi = ogAnsiPalette(mode);
113
- const bgFallback = mode === "light" ? "oklch(0.978 0.003 260)" : "oklch(0.155 0.012 260)";
114
- const fgFallback = mode === "light" ? "oklch(0.21 0.015 260)" : "oklch(0.955 0.005 260)";
115
+ const bgFallback = mode === "light" ? "#ffffff" : "#202020";
116
+ const fgFallback = mode === "light" ? "#242424" : "#e6e6e6";
115
117
  const bg = read("--og-color-bg") ?? bgFallback;
116
118
  const fg = read("--og-color-fg") ?? fgFallback;
117
119
  const accent = read("--og-color-accent") ?? ansi.brightBlue;
@@ -0,0 +1,35 @@
1
+ import type { CapabilityCatalogItem, ConnectionMetadata } from "@opengeni/sdk";
2
+
3
+ /** Status only; runtime use is authorized for the authenticated initiating user. */
4
+ export function matchingActiveMcpConnections(
5
+ item: CapabilityCatalogItem,
6
+ connections: ConnectionMetadata[],
7
+ ) {
8
+ return matchingMcpConnections(item, connections).filter((entry) => entry.status === "active");
9
+ }
10
+
11
+ function matchingMcpConnections(item: CapabilityCatalogItem, connections: ConnectionMetadata[]) {
12
+ const ref = item.connectionRef;
13
+ if (!item.enabled || !ref) return [];
14
+ return connections.filter(
15
+ (entry) =>
16
+ entry.status !== "revoked" &&
17
+ entry.kind === "oauth2" &&
18
+ entry.metadata.mcpUrl === (item.mcpUrl ?? item.endpointUrl) &&
19
+ (ref.subjectScope !== "subject"
20
+ ? entry.id === ref.connectionId && entry.subjectId === null
21
+ : entry.subjectId !== null),
22
+ );
23
+ }
24
+
25
+ /** Installation availability is not account readiness. Revoked history is not actionable. */
26
+ export function mcpConnectionDiscoveryState(
27
+ item: CapabilityCatalogItem,
28
+ connections: ConnectionMetadata[],
29
+ ) {
30
+ const matching = matchingMcpConnections(item, connections);
31
+ const active = matching.filter((entry) => entry.status === "active");
32
+ if (active.length === 1) return { status: "added", label: "Connected" } as const;
33
+ if (matching.length > 0) return { status: "attention", label: "Review connection" } as const;
34
+ return { status: "available", label: "Connect" } as const;
35
+ }