@opengeni/react 3.1.0 → 3.1.3-canary.38890816741001

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
@@ -0,0 +1,143 @@
1
+ // @opengeni/react/timeline-model: the pure presentation model behind the web timeline,
2
+ // shared with non-DOM renderers (React Native). No DOM, no CSS, no styled components:
3
+ // renderers that consume it make the same decisions the web MessageTimeline makes.
4
+ export {
5
+ BUILT_IN_TURN_SUMMARY_FACET_IDS,
6
+ BUILT_IN_TURN_SUMMARY_FACETS,
7
+ createTurnSummaryContext,
8
+ formatDurationFacet,
9
+ formatElapsed,
10
+ resolveTurnSummaryFacets,
11
+ } from "./timeline/turn-summary-model";
12
+ export type {
13
+ BuiltInTurnSummaryFacetId,
14
+ TurnSummaryContext,
15
+ TurnSummaryFacet,
16
+ TurnSummaryFacetConfiguration,
17
+ TurnSummaryFacetResult,
18
+ TurnSummaryOptions,
19
+ TurnSummaryStatus,
20
+ } from "./timeline/turn-summary-model";
21
+ export {
22
+ clusterIsSettled,
23
+ compactedLandmarkCount,
24
+ durationBetween,
25
+ flattenActivityItems,
26
+ isPreparingWork,
27
+ readableWorkDefaultOpen,
28
+ readableWorkShowsPreview,
29
+ readableWorkStatus,
30
+ rollingActivityItem,
31
+ } from "./timeline/work-presentation";
32
+ export type { ActivityGroup, ReadableWorkOptions, TurnGroup } from "./timeline/work-presentation";
33
+ export { timelineGroupContainsPresentedImage } from "./timeline/presented-image";
34
+ export { mcpToolLeaf, toolDisplayName } from "./timeline/tool-display-name";
35
+ export { rawTypeOf } from "./timeline/registry";
36
+ export {
37
+ applyPatchOpsFromToolItem,
38
+ isApplyPatch,
39
+ parseToolArgs,
40
+ sandboxCommandExitCode,
41
+ stripExecBanner,
42
+ tailPeek,
43
+ unwrapMcpOutput,
44
+ } from "./timeline/parsers";
45
+ export { formatClockTime } from "./lib/format";
46
+ export {
47
+ applyPatchPresentation,
48
+ askPresentation,
49
+ execPresentation,
50
+ genericToolIconKind,
51
+ genericToolPresentation,
52
+ pathBasename,
53
+ pathDirname,
54
+ presentedToolKind,
55
+ runOnPresentation,
56
+ toolRowPresentation,
57
+ truncatePreview,
58
+ webSearchPresentation,
59
+ withComputePreview,
60
+ writeStdinPresentation,
61
+ } from "./timeline/tool-presentation";
62
+ export type {
63
+ PresentedToolKind,
64
+ ToolBody,
65
+ ToolChip,
66
+ ToolIconKind,
67
+ ToolIconTone,
68
+ ToolPatchFile,
69
+ ToolPresentationContext,
70
+ ToolPreview,
71
+ ToolRowPresentation,
72
+ WebSearchResult,
73
+ } from "./timeline/tool-presentation";
74
+
75
+ export {
76
+ namedAgentTitle,
77
+ sandboxRowTitle,
78
+ startupDuration,
79
+ startupPhaseTitle,
80
+ STARTUP_WAIT_TITLES,
81
+ workerRowTitle,
82
+ workerRowTitleParts,
83
+ type AgentTitleParts,
84
+ } from "./timeline/platform-activity-presentation";
85
+ export { formatBytes, stringifyPayload, tryParseJson } from "./lib/format";
86
+ export { selectTurnSummaryFacets } from "./timeline/turn-summary-model";
87
+ export { GENIE_PREPARING_PHRASES, GENIE_WAITING_PHRASES } from "./timeline/genie-copy";
88
+ export {
89
+ answersFromDrafts,
90
+ defaultHumanInputFormMessages,
91
+ emptyDraft,
92
+ formatDeadline,
93
+ humanInputHeading,
94
+ initialDrafts,
95
+ resolveSecretSaveTo,
96
+ SECRET_SAVE_TO_ORDER,
97
+ secretAnswerFromReading,
98
+ secretAnswerLabel,
99
+ secretAutocomplete,
100
+ secretCanGenerate,
101
+ secretConcealed,
102
+ secretFieldLabel,
103
+ secretInputMode,
104
+ secretPatternMismatch,
105
+ secretVaultForTarget,
106
+ } from "./human-input-model";
107
+ export type {
108
+ HumanInputAnswerDraft,
109
+ HumanInputFormMessages,
110
+ SecretAutocomplete,
111
+ SecretFieldReading,
112
+ SecretSaveToChoice,
113
+ } from "./human-input-model";
114
+ export { secretReferenceLabel, secretReferenceLabelText } from "./secret-reference-label";
115
+ export type { SecretReferenceLabel } from "./secret-reference-label";
116
+ export { isActionableHumanInputRequest } from "./human-input";
117
+ export {
118
+ SESSION_STATUS_BADGE,
119
+ SESSION_STATUS_PRESENTATION,
120
+ sessionAdmissionBlocked,
121
+ sessionDisplayStatus,
122
+ } from "./session-status-model";
123
+ export type { SessionDisplayStatus, SessionStatusTone } from "./session-status-model";
124
+ export { formatRelativeTime } from "./lib/format";
125
+ export {
126
+ noticeDisplayText,
127
+ noticeIsResolvedApproval,
128
+ noticeTone,
129
+ recordedWaitSummaryText,
130
+ } from "./timeline/notice-presentation";
131
+ export {
132
+ QUESTION_NAV_HIDDEN_PX,
133
+ QUESTION_NAV_MARGIN_PX,
134
+ questionNavTarget,
135
+ } from "./timeline/question-nav-model";
136
+ export type { QuestionNavPrompt } from "./timeline/question-nav-model";
137
+ export { timelineGroupIndexAtSequence, timelineGroupSequences } from "./timeline/focus-sequence";
138
+ export {
139
+ notificationPlainText,
140
+ parseNotificationInline,
141
+ parseNotificationText,
142
+ } from "./notification-text";
143
+ export type { NotificationBlock, NotificationSpan } from "./notification-text";
@@ -0,0 +1,64 @@
1
+ // Shared, replaceable words for usage allowances. The timeline refusal row
2
+ // (session graph) and the opt-in `@opengeni/react/usage` surfaces both read
3
+ // these, so a host that renames "workspace" or "admin" does it once.
4
+ //
5
+ // Product rule: never show raw credit amounts here. Hosts that want money or
6
+ // plan multiples opt in with `formatAmount` on the meter components.
7
+
8
+ /** Which ceiling ran out: the shared workspace pool, or one member's share of it. */
9
+ export type AllowanceScope = "workspace" | "member";
10
+
11
+ export type AllowanceLabels = {
12
+ /** "Usage limit reached" for a member ceiling. */
13
+ memberLimitReachedTitle: string;
14
+ /** "Workspace usage limit reached" for the shared pool. */
15
+ workspaceLimitReachedTitle: string;
16
+ /** Who can fix a member ceiling. */
17
+ memberRemedy: string;
18
+ /** Who can fix the workspace pool. */
19
+ workspaceRemedy: string;
20
+ /** "Resets Nov 1". `date` is already formatted by `formatDate`. */
21
+ resets: (date: string) => string;
22
+ /** Shown when a ceiling has no automatic reset. */
23
+ noReset: string;
24
+ /** Formats a reset instant for `resets`. Defaults to a short local date. */
25
+ formatDate: (iso: string) => string;
26
+ };
27
+
28
+ export function formatAllowanceDate(iso: string, now: Date = new Date()): string {
29
+ const date = new Date(iso);
30
+ if (Number.isNaN(date.getTime())) return iso;
31
+ return new Intl.DateTimeFormat(undefined, {
32
+ month: "short",
33
+ day: "numeric",
34
+ ...(date.getFullYear() === now.getFullYear() ? {} : { year: "numeric" }),
35
+ }).format(date);
36
+ }
37
+
38
+ /** Full local date and time, for a title/tooltip next to the short date. */
39
+ export function formatAllowanceInstant(iso: string): string {
40
+ const date = new Date(iso);
41
+ if (Number.isNaN(date.getTime())) return iso;
42
+ return new Intl.DateTimeFormat(undefined, { dateStyle: "medium", timeStyle: "short" }).format(
43
+ date,
44
+ );
45
+ }
46
+
47
+ export const DEFAULT_ALLOWANCE_LABELS: AllowanceLabels = {
48
+ memberLimitReachedTitle: "Usage limit reached",
49
+ workspaceLimitReachedTitle: "Workspace usage limit reached",
50
+ memberRemedy: "A workspace admin can raise this limit.",
51
+ workspaceRemedy: "An organization admin can raise the workspace budget.",
52
+ resets: (date) => `Resets ${date}.`,
53
+ noReset: "It doesn't reset automatically.",
54
+ formatDate: (iso) => formatAllowanceDate(iso),
55
+ };
56
+
57
+ export function allowanceLabels(overrides?: Partial<AllowanceLabels>): AllowanceLabels {
58
+ return overrides ? { ...DEFAULT_ALLOWANCE_LABELS, ...overrides } : DEFAULT_ALLOWANCE_LABELS;
59
+ }
60
+
61
+ /** "Resets Nov 1." or the no-reset sentence. */
62
+ export function allowanceResetSentence(labels: AllowanceLabels, resetsAt: string | null): string {
63
+ return resetsAt === null ? labels.noReset : labels.resets(labels.formatDate(resetsAt));
64
+ }
@@ -0,0 +1,266 @@
1
+ // Per-task usage limits as a person reads them. Pure and React-free, so the
2
+ // timeline projection, the web console and native clients share one wording.
3
+ //
4
+ // Amounts are API-equivalent model usage (provider list-price estimate) in USD
5
+ // micros, not a bill. Unknown usage is never shown as $0: a task whose usage
6
+ // is still being prepared or can't be read says so in words instead.
7
+ import {
8
+ formatSessionUsageMicros,
9
+ type ParsedSessionUsageLimitReachedRefusal,
10
+ type SessionUsageLimit,
11
+ } from "@opengeni/sdk/session-usage-limits";
12
+
13
+ /** Share of the limit at which a quiet, dismissible near-limit notice appears. */
14
+ export const SESSION_USAGE_LIMIT_NEAR_FRACTION = 0.8;
15
+
16
+ export type SessionUsageLimitLabels = {
17
+ /** The setting's name: "Usage limit". */
18
+ title: string;
19
+ /** The one explanation, shown once next to the setting. */
20
+ explanation: string;
21
+ /** Short help: what the amount is not. */
22
+ notYourBill: string;
23
+ noLimit: string;
24
+ /** "Pause at $50.00". */
25
+ pauseAt: (limit: string) => string;
26
+ /** "$12.34 of $50.00". */
27
+ usedOfLimit: (used: string, limit: string) => string;
28
+ /** "At least $12.34 of $50.00" when some usage has no known price. */
29
+ atLeastOfLimit: (used: string, limit: string) => string;
30
+ /** "$12.34 used" without a limit. */
31
+ used: (used: string) => string;
32
+ /** "At least $12.34 used". */
33
+ atLeastUsed: (used: string) => string;
34
+ preparing: string;
35
+ unavailable: string;
36
+ /** Notes under the amount when the total is incomplete. */
37
+ unpricedNote: string;
38
+ legacyNote: string;
39
+ preparingNote: string;
40
+ unavailableNote: string;
41
+ /** A refresh failed after a good read: the last known amount is shown. */
42
+ staleNote: string;
43
+ reachedTitle: string;
44
+ /** "$52.10 of $50.00 API-equivalent model usage." */
45
+ reachedAmount: (amount: string) => string;
46
+ reachedRemedy: string;
47
+ /** Added when the goal paused at the limit: raising it never resumes by itself. */
48
+ reachedGoalRemedy: string;
49
+ /** Added to a read-only (child or no permission) reached notice. */
50
+ reachedReadOnlyRemedy: string;
51
+ /** "This task has used 84% of its usage limit ($42.00 of $50.00)." */
52
+ near: (percent: string, amount: string) => string;
53
+ changeLimit: string;
54
+ openMainTask: string;
55
+ dismiss: string;
56
+ };
57
+
58
+ export const DEFAULT_SESSION_USAGE_LIMIT_LABELS: SessionUsageLimitLabels = {
59
+ title: "Usage limit",
60
+ explanation:
61
+ "API-equivalent model usage for this chat and its agents. In-progress requests may take usage above the limit.",
62
+ notYourBill:
63
+ "Estimated from model list prices, whoever pays for the model. It's not your bill and doesn't change your credits.",
64
+ noLimit: "No limit",
65
+ pauseAt: (limit) => `Pause at ${limit}`,
66
+ usedOfLimit: (used, limit) => `${used} of ${limit}`,
67
+ atLeastOfLimit: (used, limit) => `At least ${used} of ${limit}`,
68
+ used: (used) => `${used} used`,
69
+ atLeastUsed: (used) => `At least ${used} used`,
70
+ preparing: "Preparing usage",
71
+ unavailable: "Usage unavailable",
72
+ unpricedNote: "Some model usage has no known price, so it isn't counted.",
73
+ legacyNote: "This chat started before usage limits, so some earlier usage may be missing.",
74
+ preparingNote: "Earlier usage is still being counted. You can set a limit when it's ready.",
75
+ unavailableNote: "Couldn't read this chat's usage right now. A set limit still applies.",
76
+ staleNote: "Couldn't refresh, so this may be out of date. The limit still applies.",
77
+ reachedTitle: "Usage limit reached",
78
+ reachedAmount: (amount) => `${amount} API-equivalent model usage.`,
79
+ reachedRemedy: "Raise or remove the limit to continue.",
80
+ reachedGoalRemedy: "Raise or remove the limit, then resume the goal.",
81
+ reachedReadOnlyRemedy: "Someone who can run the main task can raise or remove its limit.",
82
+ near: (percent, amount) => `This task has used ${percent}% of its usage limit (${amount}).`,
83
+ changeLimit: "Change limit",
84
+ openMainTask: "Open main task",
85
+ dismiss: "Dismiss",
86
+ };
87
+
88
+ export function sessionUsageLimitLabels(
89
+ overrides?: Partial<SessionUsageLimitLabels>,
90
+ ): SessionUsageLimitLabels {
91
+ return { ...DEFAULT_SESSION_USAGE_LIMIT_LABELS, ...overrides };
92
+ }
93
+
94
+ export type SessionUsageLimitState =
95
+ | "unknown"
96
+ | "unlimited"
97
+ | "within"
98
+ | "near"
99
+ | "reached"
100
+ | "preparing"
101
+ | "unavailable";
102
+
103
+ export type SessionUsageLimitSummary = {
104
+ state: SessionUsageLimitState;
105
+ /** Configured limit, null for none or while unreadable. */
106
+ limitMicros: number | null;
107
+ /** Recorded known usage; null whenever it is not known (never $0 then). */
108
+ usedMicros: number | null;
109
+ /** Some usage is missing from the total: show "at least". */
110
+ partial: boolean;
111
+ /** Used share of the limit, clamped to 0..1 for a bar; null without both amounts. */
112
+ barFraction: number | null;
113
+ /** Unclamped share; may exceed 1 when in-progress requests overshot. */
114
+ fraction: number | null;
115
+ /** "$12.34 of $50.00", "At least $12.34 used", "Preparing usage", ... */
116
+ amountText: string | null;
117
+ /** Plain sentences explaining an incomplete or unreadable total. */
118
+ notes: string[];
119
+ inherited: boolean;
120
+ rootSessionId: string | null;
121
+ version: number | null;
122
+ /** The last refresh failed: amounts are the last known ones, maybe out of date. */
123
+ stale: boolean;
124
+ };
125
+
126
+ const UNKNOWN: SessionUsageLimitSummary = {
127
+ state: "unknown",
128
+ limitMicros: null,
129
+ usedMicros: null,
130
+ partial: false,
131
+ barFraction: null,
132
+ fraction: null,
133
+ amountText: null,
134
+ notes: [],
135
+ inherited: false,
136
+ rootSessionId: null,
137
+ version: null,
138
+ stale: false,
139
+ };
140
+
141
+ /**
142
+ * Fold the server's usage-limit projection into what to show. `null` or
143
+ * `undefined` (an older server, or not loaded yet) is `unknown`: render
144
+ * nothing rather than "No limit" or "$0".
145
+ */
146
+ export function summarizeSessionUsageLimit(
147
+ usage: SessionUsageLimit | null | undefined,
148
+ overrides?: Partial<SessionUsageLimitLabels>,
149
+ options?: {
150
+ /**
151
+ * The last refresh failed after this projection was read. The amounts and
152
+ * any reached state stay (never $0); a note says they may be out of date.
153
+ */
154
+ stale?: boolean;
155
+ },
156
+ ): SessionUsageLimitSummary {
157
+ if (!usage) return UNKNOWN;
158
+ const summary = summarizeFresh(usage, overrides);
159
+ if (!options?.stale) return summary;
160
+ const labels = sessionUsageLimitLabels(overrides);
161
+ return { ...summary, stale: true, notes: [...summary.notes, labels.staleNote] };
162
+ }
163
+
164
+ function summarizeFresh(
165
+ usage: SessionUsageLimit,
166
+ overrides?: Partial<SessionUsageLimitLabels>,
167
+ ): SessionUsageLimitSummary {
168
+ const labels = sessionUsageLimitLabels(overrides);
169
+ const base = {
170
+ inherited: usage.inherited,
171
+ rootSessionId: usage.rootSessionId,
172
+ version: usage.version,
173
+ stale: false,
174
+ };
175
+ if (usage.status === "unavailable") {
176
+ return {
177
+ ...UNKNOWN,
178
+ ...base,
179
+ state: "unavailable",
180
+ amountText: labels.unavailable,
181
+ notes: [labels.unavailableNote],
182
+ };
183
+ }
184
+ if (usage.status === "preparing" || usage.usedMicros === null) {
185
+ return {
186
+ ...UNKNOWN,
187
+ ...base,
188
+ state: usage.status === "preparing" ? "preparing" : "unavailable",
189
+ limitMicros: usage.limitMicros,
190
+ amountText: usage.status === "preparing" ? labels.preparing : labels.unavailable,
191
+ notes: [usage.status === "preparing" ? labels.preparingNote : labels.unavailableNote],
192
+ };
193
+ }
194
+ const used = usage.usedMicros;
195
+ const limit = usage.limitMicros;
196
+ const legacy = usage.history === "legacy_partial";
197
+ const unpriced = usage.unpricedCalls > 0;
198
+ const partial = usage.coverage === "partial" || legacy || unpriced;
199
+ const notes = [
200
+ ...(unpriced ? [labels.unpricedNote] : []),
201
+ ...(legacy ? [labels.legacyNote] : []),
202
+ ];
203
+ const usedText = formatSessionUsageMicros(used);
204
+ if (limit === null) {
205
+ return {
206
+ ...base,
207
+ state: "unlimited",
208
+ limitMicros: null,
209
+ usedMicros: used,
210
+ partial,
211
+ barFraction: null,
212
+ fraction: null,
213
+ amountText: partial ? labels.atLeastUsed(usedText) : labels.used(usedText),
214
+ notes,
215
+ };
216
+ }
217
+ const fraction = limit === 0 ? (used > 0 ? Infinity : 1) : used / limit;
218
+ const reached = usage.status === "reached" || used >= limit;
219
+ const limitText = formatSessionUsageMicros(limit);
220
+ return {
221
+ ...base,
222
+ state: reached ? "reached" : fraction >= SESSION_USAGE_LIMIT_NEAR_FRACTION ? "near" : "within",
223
+ limitMicros: limit,
224
+ usedMicros: used,
225
+ partial,
226
+ barFraction: Math.min(1, Math.max(0, Number.isFinite(fraction) ? fraction : 1)),
227
+ fraction: Number.isFinite(fraction) ? fraction : null,
228
+ // Text keeps the real overshoot; only the bar is clamped.
229
+ amountText: partial
230
+ ? labels.atLeastOfLimit(usedText, limitText)
231
+ : labels.usedOfLimit(usedText, limitText),
232
+ notes,
233
+ };
234
+ }
235
+
236
+ /**
237
+ * A summary for a refused Send before the projection was re-read: the refusal
238
+ * carries the amounts that applied when the server refused.
239
+ */
240
+ export function summarizeSessionUsageLimitRefusal(
241
+ refusal: Pick<
242
+ ParsedSessionUsageLimitReachedRefusal,
243
+ "limitMicros" | "usedMicros" | "rootSessionId"
244
+ >,
245
+ overrides?: Partial<SessionUsageLimitLabels>,
246
+ ): SessionUsageLimitSummary {
247
+ const labels = sessionUsageLimitLabels(overrides);
248
+ return {
249
+ ...UNKNOWN,
250
+ state: "reached",
251
+ limitMicros: refusal.limitMicros,
252
+ usedMicros: refusal.usedMicros,
253
+ barFraction: 1,
254
+ fraction: refusal.limitMicros === 0 ? null : refusal.usedMicros / refusal.limitMicros,
255
+ amountText: labels.usedOfLimit(
256
+ formatSessionUsageMicros(refusal.usedMicros),
257
+ formatSessionUsageMicros(refusal.limitMicros),
258
+ ),
259
+ rootSessionId: refusal.rootSessionId,
260
+ };
261
+ }
262
+
263
+ /** "84" for 0.84; never rounds a near-limit share up to a misleading 100. */
264
+ export function sessionUsageLimitPercent(fraction: number): string {
265
+ return String(Math.min(99, Math.floor(fraction * 100)));
266
+ }
@@ -0,0 +1,93 @@
1
+ import type {
2
+ MemberAllowanceUsage,
3
+ UsageAllowanceStatus,
4
+ WorkspaceAllowanceUsage,
5
+ WorkspaceUsageResponse,
6
+ } from "@opengeni/sdk/usage-allowances";
7
+
8
+ import type { AllowanceScope } from "./allowance-copy";
9
+
10
+ /** One ceiling as a person reads it: how much of it is used, and when it resets. */
11
+ export type UsageReading = {
12
+ scope: AllowanceScope;
13
+ /** Used share of the ceiling. Can exceed 1 after post-call overshoot. */
14
+ fraction: number;
15
+ status: UsageAllowanceStatus;
16
+ resetsAt: string | null;
17
+ /** USD micros. Only shown when a host opts in with `formatAmount`. */
18
+ used: number;
19
+ limit: number;
20
+ remaining: number;
21
+ };
22
+
23
+ /**
24
+ * What a member can still do: `unlimited` when no ceiling applies, otherwise
25
+ * the state of whichever ceiling stops them first (`binding`).
26
+ */
27
+ export type UsageSummary = {
28
+ state: "unlimited" | "ok" | "warning" | "exhausted";
29
+ /** The ceiling a person would ask to raise; null when unlimited. */
30
+ binding: UsageReading | null;
31
+ /** Their own ceiling, when one applies. */
32
+ member: UsageReading | null;
33
+ /** The shared workspace pool, when one is set. */
34
+ workspace: UsageReading | null;
35
+ };
36
+
37
+ function reading(
38
+ scope: AllowanceScope,
39
+ usage: Pick<
40
+ WorkspaceAllowanceUsage | MemberAllowanceUsage,
41
+ "limit" | "used" | "remaining" | "fraction" | "status" | "resetsAt"
42
+ >,
43
+ ): UsageReading | null {
44
+ if (usage.limit === null) return null;
45
+ return {
46
+ scope,
47
+ fraction: usage.fraction ?? (usage.limit === 0 ? 1 : usage.used / usage.limit),
48
+ status: usage.status,
49
+ resetsAt: usage.resetsAt,
50
+ used: usage.used,
51
+ limit: usage.limit,
52
+ remaining: Math.max(0, usage.remaining ?? usage.limit - usage.used),
53
+ };
54
+ }
55
+
56
+ /**
57
+ * Fold a usage response (normally `/usage/me`) into what to tell one member.
58
+ * The server's `status` decides warning/exhausted (it applies the configured
59
+ * thresholds); when both ceilings apply, the one with less room left binds.
60
+ */
61
+ export function summarizeUsage(
62
+ usage: WorkspaceUsageResponse,
63
+ subjectId?: string | undefined,
64
+ ): UsageSummary {
65
+ const row =
66
+ subjectId === undefined
67
+ ? usage.members[0]
68
+ : usage.members.find((member) => member.subjectId === subjectId);
69
+ const member = row ? reading("member", row) : null;
70
+ const workspace = reading("workspace", usage.workspace);
71
+ const readings = [member, workspace].filter((value): value is UsageReading => value !== null);
72
+ if (readings.length === 0) return { state: "unlimited", binding: null, member, workspace };
73
+ // Raising a member ceiling cannot help while the shared pool is spent, so an
74
+ // exhausted workspace binds first.
75
+ const exhausted =
76
+ (workspace?.status === "exhausted" ? workspace : null) ??
77
+ (member?.status === "exhausted" ? member : null);
78
+ if (exhausted) return { state: "exhausted", binding: exhausted, member, workspace };
79
+ const warnings = readings.filter((value) => value.status === "warning");
80
+ const candidates = warnings.length > 0 ? warnings : readings;
81
+ const binding = candidates.reduce((tightest, value) =>
82
+ value.remaining < tightest.remaining ? value : tightest,
83
+ );
84
+ return { state: warnings.length > 0 ? "warning" : "ok", binding, member, workspace };
85
+ }
86
+
87
+ /** A whole-number percentage for display: "<1" for a sliver, never "0" for some use. */
88
+ export function usagePercentLabel(fraction: number): string {
89
+ if (!Number.isFinite(fraction) || fraction <= 0) return "0";
90
+ if (fraction < 0.01) return "<1";
91
+ if (fraction < 1 && Math.round(fraction * 100) === 100) return "99";
92
+ return String(Math.round(fraction * 100));
93
+ }
package/src/usage.ts ADDED
@@ -0,0 +1,70 @@
1
+ // @opengeni/react/usage — usage allowances for people, kept out of the package
2
+ // root and the session entry so hosts that don't meter usage never load it.
3
+ //
4
+ // Member-facing: `useUsage` + `<UsageMeter>` read the signed-in member's own
5
+ // `/usage/me` (the session proxy serves exactly that route) and
6
+ // `<UsageLimitNotice>` is the calm near/at-limit line for a composer header.
7
+ // Admin-facing: `<UsageMemberList>` shows every member against their limit and
8
+ // edits it with a share-of-budget slider; your backend saves the rule.
9
+ //
10
+ // Shares and percentages only by default. Pass `formatAmount` / `amounts` to
11
+ // show money, credits, or plan multiples in your own unit.
12
+ export { useUsage } from "./hooks/use-usage";
13
+ export type { UsageClientLike, UseUsageOptions, UseUsageResult } from "./hooks/use-usage";
14
+ export { summarizeUsage, usagePercentLabel } from "./usage/summary";
15
+ export type { UsageReading, UsageSummary } from "./usage/summary";
16
+ export {
17
+ DEFAULT_ALLOWANCE_LABELS,
18
+ allowanceLabels,
19
+ allowanceResetSentence,
20
+ formatAllowanceDate,
21
+ } from "./usage/allowance-copy";
22
+ export type { AllowanceLabels, AllowanceScope } from "./usage/allowance-copy";
23
+ export { DEFAULT_USAGE_METER_LABELS, UsageMeter, UsageMeterView } from "./components/usage-meter";
24
+ export type {
25
+ UsageMeterBaseProps,
26
+ UsageMeterLabels,
27
+ UsageMeterProps,
28
+ UsageMeterViewProps,
29
+ } from "./components/usage-meter";
30
+ export {
31
+ DEFAULT_USAGE_LIMIT_NOTICE_LABELS,
32
+ UsageLimitNotice,
33
+ UsageLimitNoticeView,
34
+ } from "./components/usage-limit-notice";
35
+ export type {
36
+ UsageLimitNoticeLabels,
37
+ UsageLimitNoticeProps,
38
+ } from "./components/usage-limit-notice";
39
+ export {
40
+ DEFAULT_USAGE_MEMBER_LIST_LABELS,
41
+ UsageMemberList,
42
+ describeMemberLimit,
43
+ } from "./components/usage-member-list";
44
+ export type {
45
+ UsageAmountFormat,
46
+ UsageMemberIdentity,
47
+ UsageMemberListLabels,
48
+ UsageMemberListProps,
49
+ } from "./components/usage-member-list";
50
+ export type { RenderAllowanceExhausted } from "./timeline/allowance-exhausted-row";
51
+
52
+ // Per-task usage limits: one optional limit on a root chat's API-equivalent
53
+ // model usage, shared by its agents. `summarizeSessionUsageLimit` turns the
54
+ // server projection into words ("At least $12.34 of $50.00", "Preparing
55
+ // usage") and `<SessionUsageLimitNotice>` is the calm near/at-limit line.
56
+ export {
57
+ DEFAULT_SESSION_USAGE_LIMIT_LABELS,
58
+ SESSION_USAGE_LIMIT_NEAR_FRACTION,
59
+ sessionUsageLimitLabels,
60
+ sessionUsageLimitPercent,
61
+ summarizeSessionUsageLimit,
62
+ summarizeSessionUsageLimitRefusal,
63
+ } from "./usage/session-usage-limit";
64
+ export type {
65
+ SessionUsageLimitLabels,
66
+ SessionUsageLimitState,
67
+ SessionUsageLimitSummary,
68
+ } from "./usage/session-usage-limit";
69
+ export { SessionUsageLimitNotice } from "./components/session-usage-limit-notice";
70
+ export type { SessionUsageLimitNoticeProps } from "./components/session-usage-limit-notice";
@@ -98,6 +98,28 @@ async function createUnderlyingOwnerLease(): Promise<UnderlyingOwnerLease> {
98
98
  return { ownerId, release: () => undefined };
99
99
  }
100
100
 
101
+ /**
102
+ * Owner ids whose document still holds its Web Lock, or null when this browser
103
+ * cannot answer. A lock is released the moment its tab closes or crashes, so a
104
+ * recording whose owner is absent here is recoverable immediately instead of
105
+ * after the heartbeat stale window.
106
+ */
107
+ export async function liveVoiceRecordingOwnerIds(): Promise<ReadonlySet<string> | null> {
108
+ if (!hasWebLocks() || typeof navigator.locks.query !== "function") return null;
109
+ try {
110
+ const snapshot = await navigator.locks.query();
111
+ const live = new Set<string>();
112
+ for (const lock of [...(snapshot.held ?? []), ...(snapshot.pending ?? [])]) {
113
+ if (lock.name?.startsWith(VOICE_RECORDING_OWNER_LOCK_PREFIX)) {
114
+ live.add(lock.name.slice(VOICE_RECORDING_OWNER_LOCK_PREFIX.length));
115
+ }
116
+ }
117
+ return live;
118
+ } catch {
119
+ return null;
120
+ }
121
+ }
122
+
101
123
  function hasWebLocks(): boolean {
102
124
  return (
103
125
  typeof navigator !== "undefined" &&