@opengeni/react 3.1.0 → 3.1.2

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 (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  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-BO2IWXVK.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-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -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-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.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-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.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-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  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/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
@@ -9,6 +9,7 @@ import {
9
9
  } from "./human-input-form";
10
10
 
11
11
  export type HumanInputSurfaceProps = {
12
+ loadSkillReview?: HumanInputFormProps["loadSkillReview"];
12
13
  requests: SessionHumanInputRequest[];
13
14
  onSubmit: (requestId: string, response: SubmitHumanInputResponseRequest) => void | Promise<void>;
14
15
  respondingRequestId?: string | null | undefined;
@@ -17,6 +18,10 @@ export type HumanInputSurfaceProps = {
17
18
  className?: string | undefined;
18
19
  /** Forwarded to the active form. Defaults true. */
19
20
  autoFocus?: boolean | undefined;
21
+ /** Forwarded to the active form: yes/no decisions as two buttons. */
22
+ decisionButtons?: boolean | undefined;
23
+ /** Forwarded to the active form: where secret answers may be saved. */
24
+ allowedSaveTo?: HumanInputFormProps["allowedSaveTo"];
20
25
  };
21
26
 
22
27
  /**
@@ -28,11 +33,14 @@ export type HumanInputSurfaceProps = {
28
33
  export function HumanInputSurface({
29
34
  requests,
30
35
  onSubmit,
36
+ loadSkillReview,
31
37
  respondingRequestId = null,
32
38
  error,
33
39
  messages,
34
40
  className,
35
41
  autoFocus = true,
42
+ decisionButtons,
43
+ allowedSaveTo,
36
44
  }: HumanInputSurfaceProps) {
37
45
  const batchTotalRef = useRef(0);
38
46
 
@@ -68,10 +76,13 @@ export function HumanInputSurface({
68
76
 
69
77
  const formProps: HumanInputFormProps = {
70
78
  request: active,
79
+ loadSkillReview,
71
80
  submitting: respondingRequestId !== null,
72
81
  error: error ?? null,
73
82
  progressLabel,
74
83
  autoFocus,
84
+ decisionButtons,
85
+ allowedSaveTo,
75
86
  ...(messages ? { messages } : {}),
76
87
  onSubmit: (response) => onSubmit(active.id, response),
77
88
  };
@@ -50,7 +50,7 @@ export function InteractionInterventionBanner({
50
50
  type="button"
51
51
  onClick={() => onOpen(intervention)}
52
52
  disabled={mutating}
53
- className="h-7 shrink-0 rounded-og-sm border border-og-border bg-og-surface-1 px-2.5 text-og-control font-medium text-og-fg transition hover:bg-og-surface-2 disabled:opacity-50"
53
+ className="h-7 shrink-0 rounded-og-sm border border-og-primary-border bg-og-primary px-2.5 text-og-control font-medium text-og-primary-fg transition hover:bg-og-primary-hover disabled:opacity-50"
54
54
  >
55
55
  Open
56
56
  </button>
@@ -59,7 +59,7 @@ export function InteractionInterventionBanner({
59
59
  type="button"
60
60
  onClick={() => onResolve(intervention, "completed")}
61
61
  disabled={mutating}
62
- className="inline-flex h-7 shrink-0 items-center gap-1 rounded-og-sm bg-og-accent px-2.5 text-og-control font-medium text-og-accent-fg transition hover:brightness-105 disabled:opacity-50"
62
+ className="inline-flex h-7 shrink-0 items-center gap-1 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-2.5 text-og-control font-medium transition hover:bg-og-primary-hover disabled:opacity-50"
63
63
  >
64
64
  {mutating ? (
65
65
  <LoaderCircleIcon className="size-3 animate-spin" />
@@ -0,0 +1,79 @@
1
+ import { Fragment, type ReactNode } from "react";
2
+
3
+ // Bare http(s) URLs in plain agent-written text (question prompts, help text).
4
+ const URL_PATTERN = /https?:\/\/[^\s<>"'`]+/g;
5
+ // Sentence punctuation that follows a URL is not part of it.
6
+ const TRAILING_PUNCTUATION = /[.,;:!?]+$/;
7
+
8
+ export const LINKIFIED_LINK_CLASS = "font-medium og-link [overflow-wrap:anywhere]";
9
+
10
+ type Segment = { kind: "text"; value: string } | { kind: "link"; value: string };
11
+
12
+ function trimUrl(raw: string): string {
13
+ let url = raw.replace(TRAILING_PUNCTUATION, "");
14
+ // Drop a closing paren that wraps the URL rather than belonging to it.
15
+ while (url.endsWith(")") && countOf(url, "(") < countOf(url, ")")) {
16
+ url = url.slice(0, -1).replace(TRAILING_PUNCTUATION, "");
17
+ }
18
+ return url;
19
+ }
20
+
21
+ function countOf(value: string, char: string): number {
22
+ let count = 0;
23
+ for (const current of value) if (current === char) count += 1;
24
+ return count;
25
+ }
26
+
27
+ function isValidUrl(value: string): boolean {
28
+ try {
29
+ return /^https?:$/u.test(new URL(value).protocol);
30
+ } catch {
31
+ return false;
32
+ }
33
+ }
34
+
35
+ /** Split plain text into text and bare http(s) URL segments. */
36
+ export function linkifySegments(text: string): Segment[] {
37
+ const segments: Segment[] = [];
38
+ let cursor = 0;
39
+ for (const match of text.matchAll(URL_PATTERN)) {
40
+ const start = match.index ?? 0;
41
+ const url = trimUrl(match[0]);
42
+ if (!isValidUrl(url)) continue;
43
+ if (start > cursor) segments.push({ kind: "text", value: text.slice(cursor, start) });
44
+ segments.push({ kind: "link", value: url });
45
+ cursor = start + url.length;
46
+ }
47
+ if (cursor < text.length) segments.push({ kind: "text", value: text.slice(cursor) });
48
+ return segments;
49
+ }
50
+
51
+ /**
52
+ * Render plain text with bare http(s) URLs as links that open in a new tab and
53
+ * wrap anywhere, so a long sign-in or approval URL stays clickable and inside
54
+ * its card. Non-string nodes pass through unchanged.
55
+ */
56
+ export function linkifyText(node: ReactNode): ReactNode {
57
+ if (typeof node !== "string") return node;
58
+ const segments = linkifySegments(node);
59
+ if (!segments.some((segment) => segment.kind === "link")) return node;
60
+ // Segments are contiguous, so each one's text offset is a stable unique key.
61
+ let offset = 0;
62
+ return segments.map((segment) => {
63
+ const key = offset;
64
+ offset += segment.value.length;
65
+ return segment.kind === "link" ? (
66
+ <a
67
+ key={key}
68
+ className={LINKIFIED_LINK_CLASS}
69
+ href={segment.value}
70
+ target="_blank"
71
+ rel="noreferrer noopener"
72
+ >
73
+ {segment.value}
74
+ </a>
75
+ ) : (
76
+ <Fragment key={key}>{segment.value}</Fragment>
77
+ );
78
+ });
79
+ }
@@ -2,20 +2,20 @@ import {
2
2
  AlertTriangleIcon,
3
3
  ArrowRightIcon,
4
4
  CpuIcon,
5
- CircleCheckIcon,
6
- DownloadIcon,
7
5
  LaptopIcon,
8
6
  MonitorIcon,
9
7
  MonitorOffIcon,
10
- LoaderCircleIcon,
11
8
  ServerIcon,
12
9
  UsersIcon,
13
10
  } from "lucide-react";
14
11
  import { cn } from "../lib/cn";
15
12
  import { formatRelativeTime } from "../lib/format";
13
+ import { machineScopeLabel } from "../sandbox-label-model";
16
14
  import type { MachineView, MetricSample } from "../types/machines";
17
15
  import { MachineHealthPill } from "./machine-health-pill";
18
16
  import { MachineMetrics } from "./machine-metrics";
17
+ import { AgentStatusIcon } from "./machines/agent-status-icon";
18
+ import { describeAgentRuntime, runnerConflict, STATUS_TONE_TEXT } from "./machines/machine-status";
19
19
  import { MetricSparkline } from "./machines/metric-sparkline";
20
20
 
21
21
  export type MachineCardProps = {
@@ -36,10 +36,12 @@ export type MachineCardProps = {
36
36
  };
37
37
 
38
38
  function KindIcon({ machine }: { machine: MachineView }) {
39
- if (machine.isSessionGroup)
39
+ if (machine.kind === "local" || machine.kind === "selfhosted")
40
+ return <LaptopIcon className="size-4 text-og-fg-subtle" aria-hidden />;
41
+ if (machine.kind === "docker" || machine.isSessionGroup)
40
42
  return <ServerIcon className="size-4 text-og-fg-subtle" aria-hidden />;
41
43
  if (machine.kind === "modal") return <CpuIcon className="size-4 text-og-fg-subtle" aria-hidden />;
42
- return <LaptopIcon className="size-4 text-og-fg-subtle" aria-hidden />;
44
+ return <ServerIcon className="size-4 text-og-fg-subtle" aria-hidden />;
43
45
  }
44
46
 
45
47
  /**
@@ -69,42 +71,10 @@ export function MachineCard({
69
71
  const cpuPts = (series ?? []).map((s) => ({ t: new Date(s.sampledAt).getTime(), v: s.cpuPct }));
70
72
  const openable = Boolean(onOpenDetail);
71
73
  const runtime = machine.runtime;
72
- const updateRunning = runtime?.versionState === "updating";
73
- const dispatchConfirmationStalled =
74
- runtime?.update?.status === "requested" &&
75
- clockNow - new Date(runtime.update.updatedAt).getTime() >= 30_000;
76
- const canUpdate =
77
- Boolean(machine.enrollmentId && onUpdateAgent) &&
78
- !offline &&
79
- (runtime?.versionState === "outdated" ||
80
- runtime?.versionState === "update_failed" ||
81
- dispatchConfirmationStalled);
82
- const updateLabel = (() => {
83
- const update = runtime?.update;
84
- if (!update) return null;
85
- switch (update.status) {
86
- case "requested":
87
- return dispatchConfirmationStalled ? "Agent confirmation delayed" : "Confirming with agent";
88
- case "accepted":
89
- return "Update accepted";
90
- case "waiting_for_idle":
91
- return "Waiting for current work";
92
- case "downloading":
93
- case "verifying":
94
- case "applying":
95
- return `${update.status}…`;
96
- case "restarting":
97
- return "Restarting agent";
98
- case "succeeded":
99
- return `Updated · v${update.targetVersion}`;
100
- case "failed": {
101
- const detail = update.errorCode?.replaceAll("_", " ");
102
- return update.rolledBack
103
- ? `Update rolled back safely${detail ? ` · ${detail}` : ""}`
104
- : `Update failed${detail ? ` · ${detail}` : ""}`;
105
- }
106
- }
107
- })();
74
+ const agent = runtime ? describeAgentRuntime(runtime, clockNow) : null;
75
+ const updateAction =
76
+ agent?.action && machine.enrollmentId && onUpdateAgent && !offline ? agent.action : null;
77
+ const conflict = runnerConflict(machine.connectionAuthority, clockNow);
108
78
 
109
79
  return (
110
80
  <div
@@ -154,13 +124,9 @@ export function MachineCard({
154
124
  ) : null}
155
125
  </div>
156
126
  <div className="mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-og-xs text-og-fg-subtle">
157
- <span data-machine-scope={machine.scope} className="capitalize">
158
- {machine.scope === "user" ? "personal" : machine.scope}
159
- </span>
127
+ <span data-machine-scope={machine.scope}>{machineScopeLabel(machine.scope)}</span>
160
128
  <span aria-hidden>·</span>
161
- <span className="capitalize">
162
- {machine.isSessionGroup ? "session sandbox" : machine.kind}
163
- </span>
129
+ <span className="capitalize">{machine.kind}</span>
164
130
  <span aria-hidden>·</span>
165
131
  <span className="font-og-mono">
166
132
  {machine.os}/{machine.arch}
@@ -196,48 +162,45 @@ export function MachineCard({
196
162
  </p>
197
163
  ) : null}
198
164
 
199
- {machine.connectionAuthority.duplicateRunnerDeniedCount > 0 ? (
165
+ {conflict?.active ? (
200
166
  <p
201
167
  data-runner-conflict
202
- className="flex items-center gap-1.5 rounded-og-md border border-og-status-failed/30 bg-og-status-failed/5 px-2.5 py-1.5 text-og-xs text-og-status-failed"
168
+ className="flex items-start gap-1.5 rounded-og-md border border-og-status-waiting/30 bg-og-status-waiting/5 px-2.5 py-1.5 text-og-xs text-og-fg-muted"
203
169
  >
204
- <AlertTriangleIcon className="size-3.5 shrink-0" aria-hidden />
205
- Competing agent process blocked. Open diagnostics for details.
170
+ <AlertTriangleIcon
171
+ className="mt-px size-3.5 shrink-0 text-og-status-waiting"
172
+ aria-hidden
173
+ />
174
+ <span>
175
+ A second copy of the agent is running on this machine. It's kept out, so work isn't
176
+ affected. Stop the extra copy.
177
+ </span>
206
178
  </p>
207
179
  ) : null}
208
180
 
209
- {runtime ? (
181
+ {agent ? (
210
182
  <div
211
183
  data-agent-runtime
212
184
  className="flex items-center justify-between gap-3 rounded-og-md border border-og-border/70 bg-og-surface-2/35 px-2.5 py-2 text-og-xs"
213
185
  >
214
186
  <div className="min-w-0">
215
187
  <div className="flex items-center gap-1.5 text-og-fg-muted">
216
- {runtime.versionState === "current" ? (
217
- <CircleCheckIcon className="size-3.5 text-og-status-idle" aria-hidden />
218
- ) : updateRunning ? (
219
- <LoaderCircleIcon className="size-3.5 animate-og-spin text-og-accent" aria-hidden />
220
- ) : (
221
- <DownloadIcon className="size-3.5" aria-hidden />
222
- )}
223
- <span className="truncate">
224
- Agent{" "}
225
- {runtime.installedVersion ? `v${runtime.installedVersion}` : "version unknown"}
226
- </span>
188
+ <AgentStatusIcon tone={agent.tone} />
189
+ <span className="truncate">{agent.title}</span>
227
190
  </div>
228
- <p className="mt-0.5 truncate text-og-fg-subtle">
229
- {updateLabel ??
230
- (runtime.versionState === "current"
231
- ? `Current · ${runtime.updateChannel ?? "channel unknown"}`
232
- : runtime.desiredVersion
233
- ? `Promoted v${runtime.desiredVersion}`
234
- : "No promoted version configured")}
191
+ <p
192
+ data-agent-status={agent.tone}
193
+ className={cn("mt-0.5", STATUS_TONE_TEXT[agent.tone])}
194
+ >
195
+ {agent.status}
235
196
  </p>
197
+ {agent.note ? <p className="mt-1 text-og-fg-muted">{agent.note}</p> : null}
236
198
  </div>
237
- {canUpdate ? (
199
+ {updateAction ? (
238
200
  <button
239
201
  type="button"
240
202
  data-update-agent
203
+ data-update-action={updateAction.kind}
241
204
  disabled={updatingAgent}
242
205
  onClick={(event) => {
243
206
  event.stopPropagation();
@@ -245,13 +208,7 @@ export function MachineCard({
245
208
  }}
246
209
  className="shrink-0 rounded-og-sm border border-og-border px-2 py-1 font-medium text-og-fg-muted transition-colors hover:border-og-border-strong hover:text-og-fg disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:min-h-11"
247
210
  >
248
- {updatingAgent
249
- ? "Starting…"
250
- : dispatchConfirmationStalled
251
- ? "Retry delivery"
252
- : runtime.versionState === "update_failed"
253
- ? "Retry"
254
- : "Update"}
211
+ {updatingAgent ? "Starting…" : updateAction.label}
255
212
  </button>
256
213
  ) : null}
257
214
  </div>
@@ -23,7 +23,7 @@ export type MachineDockBarProps = {
23
23
  * chrome (the dock-parity contract: selfhosted == Modal for the surfaces).
24
24
  */
25
25
  export function MachineDockBar({ name, kind, state, className }: MachineDockBarProps) {
26
- const Icon = kind === "selfhosted" ? LaptopIcon : CpuIcon;
26
+ const Icon = kind === "selfhosted" || kind === "local" ? LaptopIcon : CpuIcon;
27
27
  const stateBadge = MACHINE_STATE_BADGE_META[state];
28
28
  return (
29
29
  <div
@@ -1,11 +1,15 @@
1
+ import { isSessionId } from "../timeline/agent-identity";
2
+ import { namedAgentTitle, type AgentTitleParts } from "../timeline/platform-activity-presentation";
1
3
  import type { MachineInputMember } from "../timeline/types";
2
4
 
3
5
  export const MACHINE_INPUT_META: Record<MachineInputMember["kind"], string> = {
4
6
  scheduled_occurrence: "Scheduled update",
5
7
  goal_continuation: "Goal continued",
8
+ background_command_result: "Command result received",
9
+ session_wait_timeout: "Wait ended",
6
10
  agent_message: "Agent update",
7
11
  agent_steer_instruction: "Agent direction",
8
- child_terminal_result: "Agent finished",
12
+ child_terminal_result: "Agent result received",
9
13
  media_generation_result: "Video update",
10
14
  child_requires_action: "Agent needs input",
11
15
  child_requires_action_resolved: "Agent unblocked",
@@ -17,9 +21,16 @@ export const MACHINE_INPUT_META: Record<MachineInputMember["kind"], string> = {
17
21
  /**
18
22
  * Collapsed landmark label for a coalesced machine-input batch.
19
23
  * Same-kind batches get a natural plural; mixed kinds stay short.
24
+ * When every agent update's sender has a known title, the label names them
25
+ * ("Update from Release audit", "3 updates from Audit and Flake · Wait ended").
20
26
  */
21
- export function machineInputBatchLabel(members: readonly MachineInputMember[]): string {
27
+ export function machineInputBatchLabel(
28
+ members: readonly MachineInputMember[],
29
+ titleFor?: ((sessionId: string) => string | null) | undefined,
30
+ ): string {
22
31
  if (members.length === 0) return "Updates";
32
+ const named = titleFor ? namedAgentBatchLabel(members, titleFor) : null;
33
+ if (named) return named;
23
34
  const counts = new Map<MachineInputMember["kind"], number>();
24
35
  for (const member of members) {
25
36
  counts.set(member.kind, (counts.get(member.kind) ?? 0) + 1);
@@ -28,8 +39,12 @@ export function machineInputBatchLabel(members: readonly MachineInputMember[]):
28
39
  const kind = members[0]!.kind;
29
40
  const n = members.length;
30
41
  switch (kind) {
42
+ case "background_command_result":
43
+ return n === 1 ? "Command result received" : `${n} command results received`;
44
+ case "session_wait_timeout":
45
+ return n === 1 ? "Wait ended" : `${n} waits ended`;
31
46
  case "child_terminal_result":
32
- return n === 1 ? "Agent finished" : `${n} agents finished`;
47
+ return n === 1 ? "Agent result received" : `${n} agent results received`;
33
48
  case "goal_continuation":
34
49
  return n === 1 ? "Goal continued" : `${n} goal continuations`;
35
50
  case "scheduled_occurrence":
@@ -61,6 +76,41 @@ export function machineInputBatchLabel(members: readonly MachineInputMember[]):
61
76
  return `${members.length} updates · ${preview}${suffix}`;
62
77
  }
63
78
 
79
+ function namedAgentBatchLabel(
80
+ members: readonly MachineInputMember[],
81
+ titleFor: (sessionId: string) => string | null,
82
+ ): string | null {
83
+ const agents = members.filter(isAgentMember);
84
+ if (agents.length === 0) return null;
85
+ const names: string[] = [];
86
+ for (const member of agents) {
87
+ const sessionId = agentMemberSessionId(member);
88
+ const name = sessionId ? titleFor(sessionId) : null;
89
+ if (!name) return null;
90
+ if (!names.includes(name)) names.push(name);
91
+ }
92
+ const others = members.filter((member) => !isAgentMember(member));
93
+ const agentPart =
94
+ agents.length === 1
95
+ ? agentMemberTitle(agents[0]!, names[0]!).text
96
+ : `${agents.length} updates from ${
97
+ names.length === 1
98
+ ? names[0]
99
+ : names.length === 2
100
+ ? `${names[0]} and ${names[1]}`
101
+ : `${names.length} agents`
102
+ }`;
103
+ if (others.length === 0) return agentPart;
104
+ const counts = new Map<MachineInputMember["kind"], number>();
105
+ for (const member of others) counts.set(member.kind, (counts.get(member.kind) ?? 0) + 1);
106
+ const rest = [...counts.entries()]
107
+ .map(([kind, count]) =>
108
+ count === 1 ? MACHINE_INPUT_META[kind] : `${count}× ${MACHINE_INPUT_META[kind]}`,
109
+ )
110
+ .join(", ");
111
+ return `${agentPart} · ${rest}`;
112
+ }
113
+
64
114
  /** Strip protocol prefixes and worker/session UUIDs from display summaries. */
65
115
  export function cleanMachineInputSummary(summary: string): string {
66
116
  return summary
@@ -99,3 +149,147 @@ export function machineInputSummaryIsUseful(
99
149
  }
100
150
  return true;
101
151
  }
152
+
153
+ /* --- agent members ----------------------------------------------------------- */
154
+
155
+ const AGENT_MEMBER_KINDS: ReadonlySet<MachineInputMember["kind"]> = new Set([
156
+ "agent_message",
157
+ "agent_steer_instruction",
158
+ "child_terminal_result",
159
+ "child_requires_action",
160
+ "child_requires_action_resolved",
161
+ "child_paused",
162
+ "child_waiting_capacity",
163
+ "child_progress",
164
+ ]);
165
+
166
+ /** Members sent by (or about) another agent session. */
167
+ export function isAgentMember(member: Pick<MachineInputMember, "kind">): boolean {
168
+ return AGENT_MEMBER_KINDS.has(member.kind);
169
+ }
170
+
171
+ /** The agent session a member came from; only typed UUID sources route. */
172
+ export function agentMemberSessionId(
173
+ member: Pick<MachineInputMember, "kind" | "sourceId">,
174
+ ): string | null {
175
+ return isAgentMember(member) && isSessionId(member.sourceId) ? member.sourceId : null;
176
+ }
177
+
178
+ /**
179
+ * The row title for an agent member. A child result only means the agent went
180
+ * idle, so it reads "Result from …", never "finished".
181
+ */
182
+ export function agentMemberTitle(
183
+ member: Pick<MachineInputMember, "kind" | "classification">,
184
+ name: string | null,
185
+ ): AgentTitleParts {
186
+ const fallback = MACHINE_INPUT_META[member.kind];
187
+ switch (member.kind) {
188
+ case "agent_message":
189
+ return namedAgentTitle(name, "Update from ", "", fallback);
190
+ case "agent_steer_instruction":
191
+ return namedAgentTitle(name, "Direction from ", "", fallback);
192
+ case "child_terminal_result":
193
+ return member.classification === "failure"
194
+ ? namedAgentTitle(name, "", " failed", "Agent failed")
195
+ : namedAgentTitle(name, "Result from ", "", fallback);
196
+ case "child_requires_action":
197
+ return namedAgentTitle(name, "", " needs input", fallback);
198
+ case "child_requires_action_resolved":
199
+ return namedAgentTitle(name, "", " unblocked", fallback);
200
+ case "child_paused":
201
+ return namedAgentTitle(name, "", " paused", fallback);
202
+ case "child_waiting_capacity":
203
+ return namedAgentTitle(name, "", " is waiting for capacity", fallback);
204
+ case "child_progress":
205
+ return namedAgentTitle(name, "Progress from ", "", fallback);
206
+ default:
207
+ return namedAgentTitle(null, "", "", fallback);
208
+ }
209
+ }
210
+
211
+ function capitalize(text: string): string {
212
+ return text ? text[0]!.toUpperCase() + text.slice(1) : text;
213
+ }
214
+
215
+ /**
216
+ * Drop the protocol tag and "Worker session id: …" routing note from a
217
+ * server-written child notice, keeping every other character (and line break)
218
+ * of the agent's own words.
219
+ */
220
+ function cleanLines(text: string): string {
221
+ return text
222
+ .split("\n")
223
+ .map((line) =>
224
+ line
225
+ .replace(/^\[[A-Z][A-Z _-]*(?:\s+\d+\/\d+)?\]\s*/, "")
226
+ .replace(/\s*\bWorker session id:\s*[0-9a-f]{8}-[0-9a-f-]{27,}\b\.?/gi, "")
227
+ .trim(),
228
+ )
229
+ .filter((line) => line.length > 0)
230
+ .join("\n");
231
+ }
232
+
233
+ /**
234
+ * Human text for an agent member: the agent's own words where the summary
235
+ * carries them, without the model-facing "Worker <id> …" framing. `preview`
236
+ * is the most useful single passage; `body` is everything worth reading.
237
+ */
238
+ export function agentMemberText(member: Pick<MachineInputMember, "kind" | "summary">): {
239
+ preview: string;
240
+ body: string;
241
+ } {
242
+ const raw = member.summary.trim();
243
+ const same = (text: string) => ({ preview: text.replace(/\s+/g, " "), body: text });
244
+ switch (member.kind) {
245
+ case "child_progress":
246
+ return same(cleanLines(raw.replace(/^Worker \S+ progress:\s*/, "")));
247
+ case "child_requires_action":
248
+ return same(
249
+ cleanLines(
250
+ raw
251
+ .replace(/^Worker \S+ is blocked and needs input(?: \(turn [^)]*\))?\.\s*/, "")
252
+ .replace(/^It asked:\s*/, "")
253
+ .replace(/([?!])\.$/, "$1"),
254
+ ),
255
+ );
256
+ case "child_requires_action_resolved":
257
+ return same(capitalize(cleanLines(raw.replace(/^Worker \S+:\s*/, ""))));
258
+ case "child_paused": {
259
+ const match = /^Worker \S+ was paused by (.+?)\.(?:\s*Reason:\s*([\s\S]*))?$/.exec(raw);
260
+ if (!match) return same(cleanLines(raw));
261
+ return same(match[2]?.trim() ? cleanLines(match[2]) : `Paused by ${match[1]}`);
262
+ }
263
+ case "child_waiting_capacity":
264
+ return same(capitalize(cleanLines(raw.replace(/^Worker \S+ is\s+/, ""))));
265
+ case "child_terminal_result": {
266
+ const lines = raw.split("\n").map((line) => line.trim());
267
+ const rest = lines.filter(
268
+ (line) => line.length > 0 && !/^A worker session you spawned has\b/i.test(line),
269
+ );
270
+ const field = (prefix: string) =>
271
+ rest
272
+ .find((line) => line.startsWith(prefix))
273
+ ?.slice(prefix.length)
274
+ .trim() || null;
275
+ const goal = field("Worker goal:");
276
+ const evidence = field("Completion evidence:");
277
+ const rationale = field("Pause rationale:");
278
+ const body = cleanLines(
279
+ rest
280
+ .map((line) =>
281
+ line
282
+ .replace(/^Worker goal:\s*/, "Goal: ")
283
+ .replace(/^Completion evidence:\s*/, "Evidence: ")
284
+ .replace(/^Pause rationale:\s*/, "Paused because: "),
285
+ )
286
+ .join("\n"),
287
+ );
288
+ const preview = cleanLines(evidence ?? rationale ?? goal ?? body);
289
+ return { preview: preview.replace(/\s+/g, " "), body };
290
+ }
291
+ default:
292
+ // Agent messages and directions are the sender's own words, verbatim.
293
+ return same(raw);
294
+ }
295
+ }
@@ -0,0 +1,31 @@
1
+ import {
2
+ CircleAlertIcon,
3
+ CircleCheckIcon,
4
+ ClockIcon,
5
+ DownloadIcon,
6
+ LoaderCircleIcon,
7
+ TriangleAlertIcon,
8
+ } from "lucide-react";
9
+ import { cn } from "../../lib/cn";
10
+ import type { StatusTone } from "./machine-status";
11
+
12
+ /** The leading glyph for an agent status line; color follows the shared tone. */
13
+ export function AgentStatusIcon({ tone, className }: { tone: StatusTone; className?: string }) {
14
+ const size = cn("size-3.5 shrink-0", className);
15
+ switch (tone) {
16
+ case "ok":
17
+ return <CircleCheckIcon className={cn(size, "text-og-status-idle")} aria-hidden />;
18
+ case "progress":
19
+ return (
20
+ <LoaderCircleIcon className={cn(size, "animate-og-spin text-og-accent")} aria-hidden />
21
+ );
22
+ case "waiting":
23
+ return <ClockIcon className={cn(size, "text-og-fg-subtle")} aria-hidden />;
24
+ case "attention":
25
+ return <TriangleAlertIcon className={cn(size, "text-og-status-waiting")} aria-hidden />;
26
+ case "failed":
27
+ return <CircleAlertIcon className={cn(size, "text-og-status-failed")} aria-hidden />;
28
+ default:
29
+ return <DownloadIcon className={cn(size, "text-og-fg-subtle")} aria-hidden />;
30
+ }
31
+ }