@opengeni/react 6.8.0 → 6.9.1-canary.41937124785001

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 (719) hide show
  1. package/dist/app/app-state.js +8 -8
  2. package/dist/app/components/Composer.js +18 -18
  3. package/dist/app/components/agent/agent-capability-picker.js +6 -6
  4. package/dist/app/components/artifacts/artifact-library.js +6 -6
  5. package/dist/app/components/artifacts/artifact-viewer.js +18 -18
  6. package/dist/app/components/artifacts/chat-interactive-block.js +11 -11
  7. package/dist/app/components/artifacts/file-reach-dialog.js +6 -6
  8. package/dist/app/components/artifacts/inline-chat-image.js +19 -19
  9. package/dist/app/components/artifacts/retained-file-preview.js +20 -20
  10. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  11. package/dist/app/components/artifacts/site-audience.js +3 -3
  12. package/dist/app/components/artifacts/site-conversations.js +9 -9
  13. package/dist/app/components/artifacts/site-data.js +10 -10
  14. package/dist/app/components/artifacts/site-publishing-page.js +25 -25
  15. package/dist/app/components/artifacts/site-publishing.js +22 -22
  16. package/dist/app/components/artifacts/site-settings.js +24 -24
  17. package/dist/app/components/artifacts/site-version-menu.js +3 -3
  18. package/dist/app/components/billing-class-mark.js +3 -3
  19. package/dist/app/components/bots/bot-launch-strip.js +20 -20
  20. package/dist/app/components/bots/bot-template-dialog.js +26 -26
  21. package/dist/app/components/bots/bot-template-shortcuts.js +20 -20
  22. package/dist/app/components/bots/bot-templates-page.js +30 -30
  23. package/dist/app/components/capabilities/capability-detail-sheet.js +6 -6
  24. package/dist/app/components/capabilities/capability-logo-source.js +13 -13
  25. package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
  26. package/dist/app/components/capabilities/native-connect-setup.js +13 -13
  27. package/dist/app/components/capabilities/own-logins-shared-heads-up.js +3 -3
  28. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -15
  29. package/dist/app/components/capabilities/session-capability-card.js +52 -52
  30. package/dist/app/components/capabilities/session-chrome-card.js +20 -20
  31. package/dist/app/components/capabilities/session-custom-mcp-card.js +16 -16
  32. package/dist/app/components/capabilities/session-github-card.js +16 -16
  33. package/dist/app/components/capabilities/session-machine-card.js +19 -19
  34. package/dist/app/components/capabilities/session-personal-github-card.js +14 -14
  35. package/dist/app/components/capabilities/session-plugin-card.js +8 -8
  36. package/dist/app/components/command-menu/chat-status.js +15 -15
  37. package/dist/app/components/command-menu/chat-switcher.js +35 -35
  38. package/dist/app/components/command-menu/command-menu.js +39 -39
  39. package/dist/app/components/command-menu/shortcut-sheet.js +8 -8
  40. package/dist/app/components/composer-capabilities-menu-body.js +4 -4
  41. package/dist/app/components/composer-mobile-plus-panel.js +8 -8
  42. package/dist/app/components/composer-mobile-plus.js +1 -1
  43. package/dist/app/components/desktop/app-shots.js +6 -6
  44. package/dist/app/components/desktop/computer-use.js +2 -2
  45. package/dist/app/components/desktop/this-computer.js +5 -5
  46. package/dist/app/components/feedback.js +3 -3
  47. package/dist/app/components/github-app-connect-launcher.js +1 -1
  48. package/dist/app/components/machines/connect-machine-dialog.js +11 -11
  49. package/dist/app/components/markdown.js +6 -6
  50. package/dist/app/components/models/models-ui.js +5 -5
  51. package/dist/app/components/models/subscription-usage.d.ts +34 -0
  52. package/dist/app/components/models/subscription-usage.js +24 -0
  53. package/dist/app/components/my-things.js +4 -4
  54. package/dist/app/components/own-where-it-works.js +3 -3
  55. package/dist/app/components/personal-resource-attachment-surface.js +4 -4
  56. package/dist/app/components/pickers.js +5 -5
  57. package/dist/app/components/rail/channel-create-dialog.js +3 -3
  58. package/dist/app/components/rail/project-glyph.js +20 -20
  59. package/dist/app/components/rail/project-profile.js +27 -27
  60. package/dist/app/components/rail/rail-context.js +1 -1
  61. package/dist/app/components/rail/rail-sections.js +55 -55
  62. package/dist/app/components/rail/session-header.js +47 -47
  63. package/dist/app/components/rail/session-list.js +53 -53
  64. package/dist/app/components/rail/session-row-content.js +4 -4
  65. package/dist/app/components/rail/session-row-hover-details.js +14 -14
  66. package/dist/app/components/rail/session-shell.js +76 -73
  67. package/dist/app/components/rail/site-session-group-heading.js +8 -8
  68. package/dist/app/components/session/agent-configuration-panel.js +12 -12
  69. package/dist/app/components/session/banners.js +8 -8
  70. package/dist/app/components/session/console-new-conversation.js +39 -39
  71. package/dist/app/components/session/descendant-requests.js +36 -36
  72. package/dist/app/components/session/editable-artifacts-workspace.js +16 -16
  73. package/dist/app/components/session/failed-session-banner.js +6 -6
  74. package/dist/app/components/session/failure-recovery-boundary.js +3 -3
  75. package/dist/app/components/session/human-input-delegation-record.js +2 -2
  76. package/dist/app/components/session/human-input.js +33 -33
  77. package/dist/app/components/session/inspector.js +43 -43
  78. package/dist/app/components/session/message-actions.js +3 -3
  79. package/dist/app/components/session/message-resource-attachments.js +10 -10
  80. package/dist/app/components/session/model-recovery-notice.js +3 -3
  81. package/dist/app/components/session/new-session-settings-menu.js +6 -6
  82. package/dist/app/components/session/new-session-setup-strip.js +21 -21
  83. package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
  84. package/dist/app/components/session/sandbox-switcher.js +7 -7
  85. package/dist/app/components/session/sandbox-workspace.js +48 -48
  86. package/dist/app/components/session/search-markdown-highlight.js +7 -7
  87. package/dist/app/components/session/search-results-view.js +8 -8
  88. package/dist/app/components/session/session-admin-access.js +4 -4
  89. package/dist/app/components/session/session-admission-notice.js +4 -4
  90. package/dist/app/components/session/session-avatar-picker.js +21 -21
  91. package/dist/app/components/session/session-avatar.js +19 -19
  92. package/dist/app/components/session/session-machine-access-notice.js +4 -4
  93. package/dist/app/components/session/session-profile-dialog.js +25 -25
  94. package/dist/app/components/session/session-profile-editor.js +26 -26
  95. package/dist/app/components/session/session-retention.js +3 -3
  96. package/dist/app/components/session/session-search-dialog.js +8 -8
  97. package/dist/app/components/session/session-tenancy-control.js +2 -2
  98. package/dist/app/components/session/session-usage-limit-section.js +4 -4
  99. package/dist/app/components/session/share-chat-dialog.js +5 -5
  100. package/dist/app/components/session/subagents.js +8 -8
  101. package/dist/app/components/session/subscription-account-indicator.js +12 -7
  102. package/dist/app/components/session/subscription-account-menu.d.ts +15 -15
  103. package/dist/app/components/session/subscription-account-menu.js +6 -1
  104. package/dist/app/components/session/subscription-account.d.ts +16 -9
  105. package/dist/app/components/settings/row-select.js +4 -4
  106. package/dist/app/components/transcription-settings.js +6 -6
  107. package/dist/app/components/ui/destructive-confirm.js +5 -5
  108. package/dist/app/components/usage/usage-entry.js +3 -3
  109. package/dist/app/components/window-bar.js +9 -9
  110. package/dist/app/components/workspace-composer-plus.js +16 -16
  111. package/dist/app/components/workspace-reach.js +4 -4
  112. package/dist/app/embed/session-app.js +160 -157
  113. package/dist/app/lib/actions/actions-provider.js +8 -8
  114. package/dist/app/lib/agent-capabilities.d.ts +12 -2
  115. package/dist/app/lib/agent-capabilities.js +3 -3
  116. package/dist/app/lib/codex-usage-query.js +2 -2
  117. package/dist/app/lib/composer-connectors.js +14 -14
  118. package/dist/app/lib/console-site.js +2 -2
  119. package/dist/app/lib/console-text.js +2 -2
  120. package/dist/app/lib/events.js +12 -12
  121. package/dist/app/lib/failed-session-copy.js +3 -3
  122. package/dist/app/lib/model-access-onboarding.js +3 -3
  123. package/dist/app/lib/move-chat-to-machine.js +3 -3
  124. package/dist/app/lib/session-branch-cache.js +8 -8
  125. package/dist/app/lib/session-create.js +4 -4
  126. package/dist/app/lib/session-group-pagination.js +8 -8
  127. package/dist/app/lib/session-hover-facts.js +13 -13
  128. package/dist/app/lib/session-model.js +2 -2
  129. package/dist/app/lib/session-pins.js +1 -1
  130. package/dist/app/lib/session-rail.js +5 -5
  131. package/dist/app/lib/session-rename.js +3 -3
  132. package/dist/app/lib/sessions-group.d.ts +5 -3
  133. package/dist/app/lib/sessions-group.js +7 -7
  134. package/dist/app/lib/site-tool-consent-dialog.js +7 -7
  135. package/dist/app/lib/site-tool-consent.js +1 -1
  136. package/dist/app/lib/subscription-accounts.d.ts +79 -0
  137. package/dist/app/lib/subscription-accounts.js +18 -0
  138. package/dist/app/lib/turn-failure-analytics.js +4 -4
  139. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  140. package/dist/app/lib/use-workspace-machines.js +4 -4
  141. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  142. package/dist/app/lib/use-workspace-rigs.js +2 -2
  143. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  144. package/dist/app/lib/workspace-scope-context.js +3 -3
  145. package/dist/app/routes/artifacts.js +48 -48
  146. package/dist/app/routes/retained-artifact.js +32 -32
  147. package/dist/app/routes/session.js +96 -96
  148. package/dist/app/routes/sessions-index-hydration.js +5 -5
  149. package/dist/app/routes/sessions-index.js +76 -76
  150. package/dist/app/routes/site-view.js +55 -55
  151. package/dist/artifacts-document.js +4 -4
  152. package/dist/artifacts-presentation.js +4 -4
  153. package/dist/artifacts-spreadsheet.js +4 -4
  154. package/dist/artifacts.js +10 -10
  155. package/dist/automations.js +10 -10
  156. package/dist/{browser-viewer-ZHQDVHZ2.js → browser-viewer-F4FL7JKB.js} +4 -4
  157. package/dist/{chat-interactive-block-VSDD6X3M.js → chat-interactive-block-4U5JWRSY.js} +5 -5
  158. package/dist/{chunk-4K64EKM7.js → chunk-22YIIM3X.js} +4 -4
  159. package/dist/{chunk-3NNAC43A.js → chunk-2N7ACQ7M.js} +2 -2
  160. package/dist/{chunk-7Z76QP64.js → chunk-2PY5XD3F.js} +35 -5
  161. package/dist/chunk-2PY5XD3F.js.map +1 -0
  162. package/dist/{chunk-WDASYY4S.js → chunk-2TEYUDJD.js} +8 -8
  163. package/dist/{chunk-OTW25A6I.js → chunk-37JJQNZB.js} +3 -3
  164. package/dist/{chunk-VCJQQYRE.js → chunk-3DWQPURZ.js} +4 -4
  165. package/dist/{chunk-GTRAH4FG.js → chunk-3GWC3FU3.js} +2 -2
  166. package/dist/{chunk-AB5IW227.js → chunk-3ICY6LP3.js} +3 -3
  167. package/dist/{chunk-WIFDNUKD.js → chunk-3OCU5RX5.js} +3 -3
  168. package/dist/{chunk-UBRQ3PQD.js → chunk-3SPDJLOR.js} +2 -2
  169. package/dist/{chunk-IZXYFWA4.js → chunk-3WVLR7UA.js} +12 -12
  170. package/dist/{chunk-DEHLWZSI.js → chunk-3XMB3L57.js} +4 -4
  171. package/dist/{chunk-AJBDAVX3.js → chunk-4IUOBO2H.js} +7 -7
  172. package/dist/{chunk-NFCS5WYC.js → chunk-4KQ3A3EO.js} +3 -3
  173. package/dist/{chunk-LIJNVIT3.js → chunk-4L5B5AZT.js} +3 -3
  174. package/dist/{chunk-EDDKPIIV.js → chunk-4NB3TPNE.js} +2 -2
  175. package/dist/{chunk-PSM3CU7N.js → chunk-4TDKXHCD.js} +46 -39
  176. package/dist/chunk-4TDKXHCD.js.map +1 -0
  177. package/dist/{chunk-OJWDNNW3.js → chunk-4TPTGBIO.js} +5 -5
  178. package/dist/{chunk-J2WY42FA.js → chunk-4UHGW6WF.js} +2 -2
  179. package/dist/{chunk-7NLF35YL.js → chunk-4YN2JLYK.js} +4 -4
  180. package/dist/{chunk-OOOSGPJL.js → chunk-53MYEEMA.js} +1 -1
  181. package/dist/{chunk-467WDSOK.js → chunk-5HYWXPMA.js} +2 -2
  182. package/dist/{chunk-XMBOLFFS.js → chunk-5IMNL6IV.js} +2 -2
  183. package/dist/{chunk-4Z5X7PLC.js → chunk-5MLM5T5C.js} +3 -3
  184. package/dist/{chunk-YMI27QPF.js → chunk-5NKQZVXP.js} +2 -2
  185. package/dist/{chunk-ZW5YTIH3.js → chunk-5PB46DAA.js} +1 -1
  186. package/dist/{chunk-ZW5YTIH3.js.map → chunk-5PB46DAA.js.map} +1 -1
  187. package/dist/{chunk-CYDXCILL.js → chunk-5SODSGW7.js} +7 -7
  188. package/dist/{chunk-Q5EZNBPI.js → chunk-5YAJASCO.js} +3 -3
  189. package/dist/{chunk-M3FDGRB4.js → chunk-62XAL5BA.js} +3 -3
  190. package/dist/{chunk-SGH7I7OY.js → chunk-67R6NAFI.js} +2 -2
  191. package/dist/{chunk-Q5K2J5GG.js → chunk-6BN3RU7T.js} +13 -3
  192. package/dist/chunk-6BN3RU7T.js.map +1 -0
  193. package/dist/{chunk-PYB4BFEC.js → chunk-6BQLDL6R.js} +3 -3
  194. package/dist/{chunk-YJSCLGAW.js → chunk-6EZYHJTL.js} +3 -3
  195. package/dist/{chunk-OWET7EY2.js → chunk-6GW7NJMK.js} +19 -13
  196. package/dist/{chunk-OWET7EY2.js.map → chunk-6GW7NJMK.js.map} +1 -1
  197. package/dist/{chunk-G5UQBTXY.js → chunk-6LXIL3Q3.js} +2 -2
  198. package/dist/{chunk-T67LTMSW.js → chunk-6LYVAJFZ.js} +10 -10
  199. package/dist/{chunk-3L465FBR.js → chunk-6WB5UXMZ.js} +6 -6
  200. package/dist/{chunk-EKJHOWTZ.js → chunk-74UGYVCA.js} +4 -4
  201. package/dist/{chunk-PWUSSSSL.js → chunk-7BTNYZC7.js} +2 -2
  202. package/dist/{chunk-NQ2CPQJF.js → chunk-7D3WIDKK.js} +26 -3
  203. package/dist/chunk-7D3WIDKK.js.map +1 -0
  204. package/dist/{chunk-ESXAECZ3.js → chunk-7KZFGA25.js} +2 -2
  205. package/dist/{chunk-EGKARC53.js → chunk-7MGDX2TD.js} +2 -2
  206. package/dist/{chunk-Y3XZEKDQ.js → chunk-7N3GFGB6.js} +2 -2
  207. package/dist/{chunk-AH3DGOTK.js → chunk-7SFSN6AX.js} +2 -2
  208. package/dist/{chunk-QPQ7R77C.js → chunk-7SU4YVZ5.js} +5 -1
  209. package/dist/chunk-7SU4YVZ5.js.map +1 -0
  210. package/dist/{chunk-6QK65ZWM.js → chunk-7TGUHFGO.js} +3 -3
  211. package/dist/{chunk-QURYQFDN.js → chunk-7ZIWO65F.js} +2 -2
  212. package/dist/{chunk-OYCK4JRS.js → chunk-AJHLEJTK.js} +2 -2
  213. package/dist/{chunk-3PZ3LRPV.js → chunk-AN4U7EPH.js} +3 -3
  214. package/dist/{chunk-77BHKC43.js → chunk-APG6CEG7.js} +1 -1
  215. package/dist/{chunk-FSDQQQIA.js → chunk-APHLXQNP.js} +3 -3
  216. package/dist/{chunk-SN2WENRP.js → chunk-AXHQ7QXV.js} +3 -3
  217. package/dist/{chunk-54U6ZBEX.js → chunk-AYTLSPF6.js} +3 -3
  218. package/dist/{chunk-WYGTAQMX.js → chunk-AZFVRPQM.js} +76 -22
  219. package/dist/chunk-AZFVRPQM.js.map +1 -0
  220. package/dist/{chunk-R33SBMB7.js → chunk-BBSKKBMV.js} +3 -3
  221. package/dist/{chunk-2GCHGWNE.js → chunk-BGH6TU2P.js} +3 -3
  222. package/dist/{chunk-D3PTVN2I.js → chunk-BGIYL26H.js} +2 -2
  223. package/dist/{chunk-BQYRZIZ7.js → chunk-BL7UQUC3.js} +2 -2
  224. package/dist/{chunk-EBTUPRRQ.js → chunk-BOUHCYL6.js} +4 -4
  225. package/dist/{chunk-MKDFYE2E.js → chunk-BVNGDFBC.js} +2 -2
  226. package/dist/{chunk-ICAMYP5M.js → chunk-BWJK64CP.js} +2 -2
  227. package/dist/{chunk-RHXYO4H2.js → chunk-BZ2GTCQV.js} +2 -2
  228. package/dist/{chunk-GIWFLWXG.js → chunk-C2KASMJK.js} +4 -4
  229. package/dist/{chunk-KO3OHHY2.js → chunk-CAZDRDQT.js} +2 -2
  230. package/dist/{chunk-OK7BQMCI.js → chunk-CBJRZKZB.js} +9 -9
  231. package/dist/{chunk-OYOFPNLC.js → chunk-CF6NYG7J.js} +4 -4
  232. package/dist/{chunk-MT2R57SF.js → chunk-COITN7WN.js} +2 -2
  233. package/dist/{chunk-OCXTTKVA.js → chunk-CPVOXM2Q.js} +2 -2
  234. package/dist/{chunk-HYEIA25Y.js → chunk-CTZRCBKH.js} +2 -2
  235. package/dist/{chunk-OCXEY7HE.js → chunk-CWL27YTB.js} +2 -2
  236. package/dist/{chunk-K4DQS2ML.js → chunk-D2I33V5P.js} +4 -4
  237. package/dist/{chunk-736RUNIA.js → chunk-DF7WI4JH.js} +4 -4
  238. package/dist/{chunk-KUE5BOQE.js → chunk-DKZYCJCO.js} +4 -4
  239. package/dist/{chunk-74CBR5YE.js → chunk-DQ32FKFQ.js} +2 -2
  240. package/dist/{chunk-4O2XWOLZ.js → chunk-DTKG2YUF.js} +3 -3
  241. package/dist/{chunk-GMHIOYB7.js → chunk-DUDA4V5R.js} +4 -4
  242. package/dist/{chunk-XUOYNJPB.js → chunk-ECROT4M5.js} +24 -24
  243. package/dist/{chunk-PVB4YVDP.js → chunk-EOXV5XGY.js} +2 -2
  244. package/dist/{chunk-U6552Q3T.js → chunk-EQQOZ6DD.js} +2 -2
  245. package/dist/{chunk-G6ICCGJ3.js → chunk-EY6W5H4B.js} +2 -2
  246. package/dist/{chunk-HWVPLFIW.js → chunk-EYRFEWXJ.js} +2 -2
  247. package/dist/{chunk-7YTR3UFO.js → chunk-FB4JWUVJ.js} +8 -5
  248. package/dist/chunk-FB4JWUVJ.js.map +1 -0
  249. package/dist/{chunk-U4LTPFD2.js → chunk-FKK2PD7K.js} +2 -2
  250. package/dist/{chunk-PUUEI4W3.js → chunk-FPHHIC5K.js} +5 -5
  251. package/dist/{chunk-SP44O3OU.js → chunk-FQM6L22H.js} +2 -2
  252. package/dist/{chunk-2J77TWGH.js → chunk-FW22IREV.js} +3 -3
  253. package/dist/{chunk-EBIVTDEG.js → chunk-G4M6AYDB.js} +2 -2
  254. package/dist/{chunk-O4JOE3R7.js → chunk-G55NAU5M.js} +60 -74
  255. package/dist/chunk-G55NAU5M.js.map +1 -0
  256. package/dist/{chunk-BASI553K.js → chunk-G6AZ2WIU.js} +4 -4
  257. package/dist/{chunk-SJYTQLN3.js → chunk-GJ5IDSAX.js} +3 -3
  258. package/dist/{chunk-TDTD66BK.js → chunk-GRDSEZWZ.js} +2 -2
  259. package/dist/{chunk-MV2CLIO6.js → chunk-HBVJIGY2.js} +6 -6
  260. package/dist/{chunk-R4JA5JFI.js → chunk-HCWQLIOE.js} +3 -3
  261. package/dist/{chunk-MZY3VKKM.js → chunk-HEVD4A5G.js} +2 -2
  262. package/dist/{chunk-DLVIRJGK.js → chunk-HNDHSEVJ.js} +2 -2
  263. package/dist/{chunk-LPKJ77EK.js → chunk-HNTZ7B7M.js} +2 -2
  264. package/dist/{chunk-QQIZMVAJ.js → chunk-HQ7GTMII.js} +59 -57
  265. package/dist/chunk-HQ7GTMII.js.map +1 -0
  266. package/dist/{chunk-IN3VQFKS.js → chunk-I2FC7CAI.js} +2 -2
  267. package/dist/{chunk-SK5S2PCK.js → chunk-I7BGHBOM.js} +14 -14
  268. package/dist/chunk-I7BGHBOM.js.map +1 -0
  269. package/dist/{chunk-ZBHGNE2J.js → chunk-IEHZFYMH.js} +3 -3
  270. package/dist/{chunk-DWJ6J3YW.js → chunk-IXISEVD7.js} +4 -4
  271. package/dist/{chunk-TK5FWVZR.js → chunk-IZEDVQUD.js} +3 -3
  272. package/dist/{chunk-HEGV4QMS.js → chunk-J42QE4VO.js} +2 -2
  273. package/dist/{chunk-PRT4J2DL.js → chunk-J555XSUM.js} +2 -2
  274. package/dist/{chunk-SBXSKRFA.js → chunk-JNMHFSDF.js} +3 -3
  275. package/dist/{chunk-KI46GKMD.js → chunk-JTBAOPYO.js} +7 -7
  276. package/dist/{chunk-JHZRAYI4.js → chunk-JWSRFXRN.js} +2 -2
  277. package/dist/chunk-JWSRFXRN.js.map +1 -0
  278. package/dist/{chunk-SXGJL7UT.js → chunk-K376MPJH.js} +14 -14
  279. package/dist/{chunk-OSJ366KR.js → chunk-KEBVT55V.js} +30 -30
  280. package/dist/{chunk-U5UGM5XD.js → chunk-KFIZAXHI.js} +5 -5
  281. package/dist/{chunk-KFNZZ2N6.js → chunk-KKGRDBMK.js} +2 -2
  282. package/dist/{chunk-PLYVGZIN.js → chunk-KKIG6DN5.js} +1 -1
  283. package/dist/{chunk-3OK7Y6ES.js → chunk-KKQO2GAA.js} +2 -2
  284. package/dist/{chunk-DQPIEQGP.js → chunk-KO753ZCZ.js} +2 -2
  285. package/dist/{chunk-YNTLWCF4.js → chunk-KYIRWU65.js} +3 -3
  286. package/dist/{chunk-JKL5S7UQ.js → chunk-L6V63DVI.js} +6 -6
  287. package/dist/{chunk-M5IQVMLR.js → chunk-LAZ2QZTJ.js} +11 -4
  288. package/dist/chunk-LAZ2QZTJ.js.map +1 -0
  289. package/dist/{chunk-CV4VVLPZ.js → chunk-LCNJ2KNS.js} +2 -2
  290. package/dist/{chunk-D74Z2N4K.js → chunk-LE7YKMTU.js} +2 -2
  291. package/dist/{chunk-D5TIVCXG.js → chunk-LEBEOMVT.js} +2 -2
  292. package/dist/chunk-LKLQVANM.js +2 -0
  293. package/dist/{chunk-2OXSB2OL.js → chunk-LKWVBUH6.js} +3 -2
  294. package/dist/chunk-LKWVBUH6.js.map +1 -0
  295. package/dist/{chunk-WXF2RTS4.js → chunk-M6URPYUB.js} +2 -2
  296. package/dist/{chunk-H6BX6WOW.js → chunk-MDHFMRBC.js} +3 -3
  297. package/dist/{chunk-3CDJSKDW.js → chunk-MGZO7CHI.js} +3 -3
  298. package/dist/{chunk-DCEQCGVN.js → chunk-MIWU52TW.js} +2 -2
  299. package/dist/{chunk-PF2WU2IL.js → chunk-ND4IQJUM.js} +120 -17
  300. package/dist/chunk-ND4IQJUM.js.map +1 -0
  301. package/dist/{chunk-3PM3M2Q6.js → chunk-NDXBF3RW.js} +27 -11
  302. package/dist/chunk-NDXBF3RW.js.map +1 -0
  303. package/dist/{chunk-LVELUUK6.js → chunk-NF6QVVMP.js} +2 -2
  304. package/dist/{chunk-UMX6DZME.js → chunk-NTZ5ZNVK.js} +2 -2
  305. package/dist/{chunk-FBA2NXYH.js → chunk-NWLRABUR.js} +3 -3
  306. package/dist/{chunk-TNSJFZ6Q.js → chunk-O2H2U7YS.js} +4 -4
  307. package/dist/{chunk-BFFNINCC.js → chunk-OAL2PPX4.js} +3 -3
  308. package/dist/{chunk-WTSQUCHB.js → chunk-OCYTHZ4A.js} +3 -3
  309. package/dist/{chunk-ZAX4XQLN.js → chunk-OEDTCIXF.js} +2 -2
  310. package/dist/{chunk-CHU3RDV4.js → chunk-OLVSYB3P.js} +3 -3
  311. package/dist/{chunk-PZKHST7A.js → chunk-OQ6QOPK6.js} +10 -3
  312. package/dist/chunk-OQ6QOPK6.js.map +1 -0
  313. package/dist/{chunk-IFSXVU2S.js → chunk-OQHTFOCA.js} +2 -2
  314. package/dist/{chunk-OXQ2SXVC.js → chunk-P56AVROH.js} +2 -2
  315. package/dist/{chunk-CXAN2FHF.js → chunk-PCEJHHGP.js} +6 -6
  316. package/dist/{chunk-5MIBQ4P5.js → chunk-PHGQGVVL.js} +2 -2
  317. package/dist/{chunk-FLWQJDJ5.js → chunk-PUZRHEQI.js} +6 -6
  318. package/dist/{chunk-OP2GD6QW.js → chunk-PV7U6OOJ.js} +2 -2
  319. package/dist/{chunk-SPD4ULVB.js → chunk-PYMROAWS.js} +2 -1
  320. package/dist/chunk-PYMROAWS.js.map +1 -0
  321. package/dist/{chunk-X2QJXDE4.js → chunk-PZQACDH5.js} +8 -8
  322. package/dist/{chunk-CH4UQ4NO.js → chunk-PZTS4O6E.js} +5 -5
  323. package/dist/{chunk-TKQL7EDB.js → chunk-Q42QHUAQ.js} +2 -2
  324. package/dist/{chunk-MRECRNVU.js → chunk-QCYGB6TZ.js} +5 -5
  325. package/dist/{chunk-GSCGKJNK.js → chunk-QECMETOF.js} +2 -2
  326. package/dist/{chunk-RMCLFSMX.js → chunk-QGX3LE6H.js} +2 -2
  327. package/dist/{chunk-HTMQGS63.js → chunk-QI3NDQFP.js} +8 -8
  328. package/dist/{chunk-UU5FBVRX.js → chunk-QZE4BTLA.js} +6 -5
  329. package/dist/chunk-QZE4BTLA.js.map +1 -0
  330. package/dist/{chunk-R5QAL43H.js → chunk-RA3Q52O2.js} +2 -2
  331. package/dist/chunk-RBOHWUSN.js +151 -0
  332. package/dist/chunk-RBOHWUSN.js.map +1 -0
  333. package/dist/{chunk-AJDGP2N4.js → chunk-RJNOQEJJ.js} +20 -20
  334. package/dist/{chunk-477DTTMH.js → chunk-RSFOFUR7.js} +3 -3
  335. package/dist/{chunk-JV5ULONH.js → chunk-RXR6PMSH.js} +39 -39
  336. package/dist/{chunk-J2BTILRR.js → chunk-SM7HFCGC.js} +2 -2
  337. package/dist/{chunk-UTRNLNCW.js → chunk-SN6ZWYOP.js} +69 -97
  338. package/dist/chunk-SN6ZWYOP.js.map +1 -0
  339. package/dist/{chunk-OBGOLHCP.js → chunk-T4HK4XCI.js} +3 -3
  340. package/dist/{chunk-XVLEBB4Y.js → chunk-TBWL6YWL.js} +2 -2
  341. package/dist/{chunk-AAS7OWV6.js → chunk-TIDXYWFX.js} +3 -3
  342. package/dist/{chunk-N3FM4BNA.js → chunk-TKHRGY2P.js} +2 -2
  343. package/dist/{chunk-GU7T2S5N.js → chunk-TU2GSZL7.js} +2 -2
  344. package/dist/{chunk-OI6VI6SU.js → chunk-U6HGJXXQ.js} +8 -8
  345. package/dist/{chunk-4BWMAGJJ.js → chunk-UGRW6RTR.js} +3 -3
  346. package/dist/{chunk-AVXDIRRW.js → chunk-UMRUDYUK.js} +2 -2
  347. package/dist/{chunk-FNXCFIPW.js → chunk-UOT2R5ZD.js} +2 -2
  348. package/dist/{chunk-DIP7YALH.js → chunk-USURKJVT.js} +2 -2
  349. package/dist/{chunk-S27VZ5DO.js → chunk-UU6Q67XM.js} +6 -6
  350. package/dist/{chunk-LTJFV2JI.js → chunk-UZ7NP5CW.js} +2 -2
  351. package/dist/{chunk-H6MJFMHZ.js → chunk-V4FO7UOE.js} +3 -3
  352. package/dist/{chunk-RGR57NYY.js → chunk-V4ZOZRCW.js} +2 -2
  353. package/dist/{chunk-LQKVNREV.js → chunk-V57YMKQZ.js} +3 -3
  354. package/dist/{chunk-XZCCEKPW.js → chunk-VOIWZBY6.js} +6 -6
  355. package/dist/{chunk-E5KOWRDU.js → chunk-VPHPLPDA.js} +2 -2
  356. package/dist/{chunk-OGU73VUN.js → chunk-VUL4KPUU.js} +2 -2
  357. package/dist/{chunk-SFIXTOOJ.js → chunk-VWF6ILAR.js} +3 -3
  358. package/dist/{chunk-FER6EVIY.js → chunk-W54BHJO7.js} +2 -2
  359. package/dist/{chunk-34NV52R3.js → chunk-WCYE4BLC.js} +4 -4
  360. package/dist/{chunk-RISUROBM.js → chunk-WTV25ELY.js} +4 -4
  361. package/dist/{chunk-UO35OEOX.js → chunk-WZYGH7CN.js} +3 -3
  362. package/dist/{chunk-CEMSIU4Z.js → chunk-XG2RWUF7.js} +5 -5
  363. package/dist/chunk-XK72HZ4C.js +147 -0
  364. package/dist/chunk-XK72HZ4C.js.map +1 -0
  365. package/dist/{chunk-K3D7IQQP.js → chunk-XV7QOT7W.js} +6 -6
  366. package/dist/{chunk-GOCODNQS.js → chunk-XWECT3GX.js} +2 -2
  367. package/dist/{chunk-5MHMCE2G.js → chunk-XZQK2ZLW.js} +3 -3
  368. package/dist/{chunk-JV3UI7BH.js → chunk-Y5BR66OH.js} +3 -3
  369. package/dist/{chunk-VXORMNU4.js → chunk-YBHAAULA.js} +67 -2
  370. package/dist/chunk-YBHAAULA.js.map +1 -0
  371. package/dist/{chunk-4F3AEJI6.js → chunk-YD6XU6FY.js} +4 -4
  372. package/dist/{chunk-VATYK3JQ.js → chunk-YFE47G3C.js} +3 -3
  373. package/dist/{chunk-ZR5EKJT6.js → chunk-YG6TWPP7.js} +2 -2
  374. package/dist/{chunk-44JWVYJB.js → chunk-YH3ARKBB.js} +2 -2
  375. package/dist/{chunk-752WXSDN.js → chunk-YI66STKJ.js} +2 -2
  376. package/dist/{chunk-QRECBCJM.js → chunk-YMVPYMKB.js} +2 -2
  377. package/dist/{chunk-77SYIH6O.js → chunk-YPIXBAF6.js} +2 -2
  378. package/dist/{chunk-WRMUXZ7C.js → chunk-YSWPNY6G.js} +3 -3
  379. package/dist/{chunk-GTHCHCWW.js → chunk-YWNNMBZG.js} +3 -3
  380. package/dist/{chunk-3DRLCX5V.js → chunk-Z3HYM2JT.js} +2 -2
  381. package/dist/{chunk-M3HGBO2Y.js → chunk-ZAC7YPRA.js} +1 -1
  382. package/dist/{chunk-2VJOSU4H.js → chunk-ZENESDAF.js} +2 -2
  383. package/dist/{chunk-4JXPLTWV.js → chunk-ZHAPMETO.js} +2 -2
  384. package/dist/{chunk-IJR6VOLU.js → chunk-ZVR6DUZH.js} +2 -2
  385. package/dist/components/message-timeline.d.ts +10 -2
  386. package/dist/composer.js +8 -8
  387. package/dist/{computer-viewer-5LKRCEVQ.js → computer-viewer-FOIOZUF5.js} +5 -5
  388. package/dist/connect.js +12 -12
  389. package/dist/desktop-dictation.js +8 -8
  390. package/dist/desktop.js +2 -2
  391. package/dist/editor.js +2 -2
  392. package/dist/{embedded-new-voice-GHJRY3YL.js → embedded-new-voice-WTXAJNGO.js} +5 -5
  393. package/dist/{embedded-voice-ASQXBSTX.js → embedded-voice-SIJOPN2G.js} +5 -5
  394. package/dist/{fleet-decision-row-U7LDVBEM.js → fleet-decision-row-XKQ3GMYT.js} +2 -2
  395. package/dist/hooks/use-recordings.d.ts +4 -2
  396. package/dist/in-chat-connect-model.js +5 -5
  397. package/dist/index.d.ts +2 -2
  398. package/dist/index.js +66 -60
  399. package/dist/interaction.js +5 -5
  400. package/dist/{latest-question-RNVF262Q.js → latest-question-KA7AQYVI.js} +2 -2
  401. package/dist/machines.js +3 -3
  402. package/dist/meetings/recorder-context.d.ts +6 -1
  403. package/dist/meetings/recorder-panel.d.ts +2 -5
  404. package/dist/meetings-recorder.js +1 -1
  405. package/dist/meetings.js +25 -23
  406. package/dist/meetings.js.map +1 -1
  407. package/dist/messages/en.d.ts +4 -0
  408. package/dist/messages.js +1 -1
  409. package/dist/{model-policy-picker-menu-E6XKMFTA.js → model-policy-picker-menu-6N2G7VGX.js} +4 -4
  410. package/dist/{payment-page-card-DJDKV2LW.js → payment-page-card-IJFZHQ52.js} +4 -4
  411. package/dist/{platform-activity-row-MSDCSMET.js → platform-activity-row-MFCMGI43.js} +2 -2
  412. package/dist/{queue-surface-implementation-GUAIG6TK.js → queue-surface-implementation-BBCDWWOP.js} +5 -5
  413. package/dist/realtime.js +4 -4
  414. package/dist/{recorder-host-2MYDJPQW.js → recorder-host-LDYYOKG7.js} +5 -5
  415. package/dist/recordings.js +4 -4
  416. package/dist/{sandbox-files-W5W2LW4K.js → sandbox-files-VYRBIXJY.js} +6 -6
  417. package/dist/session-app.js +160 -157
  418. package/dist/{session-connect-cards-HPH7JOZP.js → session-connect-cards-GBPSL6OT.js} +9 -9
  419. package/dist/session-connect-cards-GBPSL6OT.js.map +1 -0
  420. package/dist/session-list-model.js +2 -2
  421. package/dist/{session-realtime-SDTKFFIR.js → session-realtime-QGU57TND.js} +3 -3
  422. package/dist/session-realtime-QGU57TND.js.map +1 -0
  423. package/dist/session-realtime.js +2 -2
  424. package/dist/session-ui.js +33 -33
  425. package/dist/session.d.ts +3 -2
  426. package/dist/session.js +16 -10
  427. package/dist/sites.js +2 -2
  428. package/dist/terminal.js +2 -2
  429. package/dist/this-computer.js +3 -3
  430. package/dist/timeline/index.d.ts +3 -2
  431. package/dist/timeline/projection.d.ts +52 -0
  432. package/dist/timeline/turn-summary-model.d.ts +4 -3
  433. package/dist/timeline/types.d.ts +8 -2
  434. package/dist/timeline/use-timeline-pauses.d.ts +12 -0
  435. package/dist/timeline/work-presentation.d.ts +4 -3
  436. package/dist/{timeline-annotation-markers-FNILLWNU.js → timeline-annotation-markers-LL6ZVBZH.js} +2 -2
  437. package/dist/{timeline-annotation-selection-MBCIDO2Q.js → timeline-annotation-selection-WQA76WYC.js} +2 -2
  438. package/dist/{timeline-annotations-dialog-JPNKLOTE.js → timeline-annotations-dialog-HHETAEZA.js} +3 -3
  439. package/dist/timeline-model.js +2 -2
  440. package/dist/ui/access-list.js +5 -5
  441. package/dist/ui/cadence-picker.js +4 -4
  442. package/dist/ui/choice-cards.js +3 -3
  443. package/dist/ui/confirm-dialog.js +2 -2
  444. package/dist/ui/copy-field.js +3 -3
  445. package/dist/ui/detail-page.js +2 -2
  446. package/dist/ui/detail-sheet.js +2 -2
  447. package/dist/ui/disclosure.js +3 -3
  448. package/dist/ui/email-chips-input.js +3 -3
  449. package/dist/ui/field.js +2 -2
  450. package/dist/ui/flush-form-page.js +3 -3
  451. package/dist/ui/form-dialog.js +2 -2
  452. package/dist/ui/list-row.js +3 -3
  453. package/dist/ui/relative-time.js +2 -2
  454. package/dist/ui/revision-history.js +4 -4
  455. package/dist/ui/role-select.js +5 -5
  456. package/dist/ui/select-menu.js +3 -3
  457. package/dist/ui/usage-meter.d.ts +8 -2
  458. package/dist/ui/usage-meter.js +5 -3
  459. package/dist/usage.js +2 -2
  460. package/dist/workbench.js +4 -4
  461. package/package.json +6 -5
  462. package/src/app/components/agent/agent-capability-picker.test.tsx +1 -1
  463. package/src/app/components/models/subscription-usage.tsx +178 -0
  464. package/src/app/components/rail/session-row-content.tsx +27 -0
  465. package/src/app/components/session/subscription-account-indicator.test.ts +78 -18
  466. package/src/app/components/session/subscription-account-indicator.tsx +16 -31
  467. package/src/app/components/session/subscription-account-menu.tsx +79 -101
  468. package/src/app/components/session/subscription-account.test.ts +161 -54
  469. package/src/app/components/session/subscription-account.ts +106 -117
  470. package/src/app/lib/agent-capabilities.tsx +34 -7
  471. package/src/app/lib/session-branch-cache.tsx +1 -0
  472. package/src/app/lib/session-pins.tsx +1 -0
  473. package/src/app/lib/session-row-paused.test.tsx +183 -0
  474. package/src/app/lib/sessions-group-channels.test.ts +4 -4
  475. package/src/app/lib/sessions-group.tsx +62 -4
  476. package/src/app/lib/subscription-accounts.tsx +283 -0
  477. package/src/app/routes/session.tsx +2 -0
  478. package/src/components/message-timeline.tsx +14 -2
  479. package/src/components/session-conversation.tsx +2 -1
  480. package/src/components/timeline-annotations.tsx +4 -1
  481. package/src/components/timeline-settlement.ts +1 -1
  482. package/src/hooks/use-composer.ts +104 -25
  483. package/src/hooks/use-recordings.ts +5 -0
  484. package/src/index.ts +5 -0
  485. package/src/meetings/meeting-detail-page.tsx +4 -2
  486. package/src/meetings/meetings-pages.test.tsx +38 -0
  487. package/src/meetings/recorder-context.tsx +28 -5
  488. package/src/meetings/recorder-panel.tsx +13 -5
  489. package/src/meetings/recorder-workspace.test.tsx +57 -8
  490. package/src/messages/en.ts +5 -0
  491. package/src/recordings-model.ts +7 -0
  492. package/src/session.ts +8 -1
  493. package/src/timeline/index.ts +4 -1
  494. package/src/timeline/projection.ts +228 -16
  495. package/src/timeline/turn-summary-model.ts +4 -3
  496. package/src/timeline/turn-summary.tsx +15 -2
  497. package/src/timeline/types.ts +8 -2
  498. package/src/timeline/use-timeline-pauses.ts +105 -0
  499. package/src/timeline/work-presentation.ts +13 -4
  500. package/src/ui/usage-meter.tsx +10 -7
  501. package/styles/compiled.css +3 -0
  502. package/dist/chunk-2OXSB2OL.js.map +0 -1
  503. package/dist/chunk-3PM3M2Q6.js.map +0 -1
  504. package/dist/chunk-7YTR3UFO.js.map +0 -1
  505. package/dist/chunk-7Z76QP64.js.map +0 -1
  506. package/dist/chunk-JHZRAYI4.js.map +0 -1
  507. package/dist/chunk-M5IQVMLR.js.map +0 -1
  508. package/dist/chunk-NQ2CPQJF.js.map +0 -1
  509. package/dist/chunk-O2UPPN5M.js +0 -2
  510. package/dist/chunk-O4JOE3R7.js.map +0 -1
  511. package/dist/chunk-PF2WU2IL.js.map +0 -1
  512. package/dist/chunk-PSM3CU7N.js.map +0 -1
  513. package/dist/chunk-PZKHST7A.js.map +0 -1
  514. package/dist/chunk-Q5K2J5GG.js.map +0 -1
  515. package/dist/chunk-QPQ7R77C.js.map +0 -1
  516. package/dist/chunk-QQIZMVAJ.js.map +0 -1
  517. package/dist/chunk-SK5S2PCK.js.map +0 -1
  518. package/dist/chunk-SPD4ULVB.js.map +0 -1
  519. package/dist/chunk-UTRNLNCW.js.map +0 -1
  520. package/dist/chunk-UU5FBVRX.js.map +0 -1
  521. package/dist/chunk-VXORMNU4.js.map +0 -1
  522. package/dist/chunk-WYGTAQMX.js.map +0 -1
  523. /package/dist/{browser-viewer-ZHQDVHZ2.js.map → app/components/models/subscription-usage.js.map} +0 -0
  524. /package/dist/{chat-interactive-block-VSDD6X3M.js.map → app/lib/subscription-accounts.js.map} +0 -0
  525. /package/dist/{chunk-O2UPPN5M.js.map → browser-viewer-F4FL7JKB.js.map} +0 -0
  526. /package/dist/{computer-viewer-5LKRCEVQ.js.map → chat-interactive-block-4U5JWRSY.js.map} +0 -0
  527. /package/dist/{chunk-4K64EKM7.js.map → chunk-22YIIM3X.js.map} +0 -0
  528. /package/dist/{chunk-3NNAC43A.js.map → chunk-2N7ACQ7M.js.map} +0 -0
  529. /package/dist/{chunk-WDASYY4S.js.map → chunk-2TEYUDJD.js.map} +0 -0
  530. /package/dist/{chunk-OTW25A6I.js.map → chunk-37JJQNZB.js.map} +0 -0
  531. /package/dist/{chunk-VCJQQYRE.js.map → chunk-3DWQPURZ.js.map} +0 -0
  532. /package/dist/{chunk-GTRAH4FG.js.map → chunk-3GWC3FU3.js.map} +0 -0
  533. /package/dist/{chunk-AB5IW227.js.map → chunk-3ICY6LP3.js.map} +0 -0
  534. /package/dist/{chunk-WIFDNUKD.js.map → chunk-3OCU5RX5.js.map} +0 -0
  535. /package/dist/{chunk-UBRQ3PQD.js.map → chunk-3SPDJLOR.js.map} +0 -0
  536. /package/dist/{chunk-IZXYFWA4.js.map → chunk-3WVLR7UA.js.map} +0 -0
  537. /package/dist/{chunk-DEHLWZSI.js.map → chunk-3XMB3L57.js.map} +0 -0
  538. /package/dist/{chunk-AJBDAVX3.js.map → chunk-4IUOBO2H.js.map} +0 -0
  539. /package/dist/{chunk-NFCS5WYC.js.map → chunk-4KQ3A3EO.js.map} +0 -0
  540. /package/dist/{chunk-LIJNVIT3.js.map → chunk-4L5B5AZT.js.map} +0 -0
  541. /package/dist/{chunk-EDDKPIIV.js.map → chunk-4NB3TPNE.js.map} +0 -0
  542. /package/dist/{chunk-OJWDNNW3.js.map → chunk-4TPTGBIO.js.map} +0 -0
  543. /package/dist/{chunk-J2WY42FA.js.map → chunk-4UHGW6WF.js.map} +0 -0
  544. /package/dist/{chunk-7NLF35YL.js.map → chunk-4YN2JLYK.js.map} +0 -0
  545. /package/dist/{chunk-OOOSGPJL.js.map → chunk-53MYEEMA.js.map} +0 -0
  546. /package/dist/{chunk-467WDSOK.js.map → chunk-5HYWXPMA.js.map} +0 -0
  547. /package/dist/{chunk-XMBOLFFS.js.map → chunk-5IMNL6IV.js.map} +0 -0
  548. /package/dist/{chunk-4Z5X7PLC.js.map → chunk-5MLM5T5C.js.map} +0 -0
  549. /package/dist/{chunk-YMI27QPF.js.map → chunk-5NKQZVXP.js.map} +0 -0
  550. /package/dist/{chunk-CYDXCILL.js.map → chunk-5SODSGW7.js.map} +0 -0
  551. /package/dist/{chunk-Q5EZNBPI.js.map → chunk-5YAJASCO.js.map} +0 -0
  552. /package/dist/{chunk-M3FDGRB4.js.map → chunk-62XAL5BA.js.map} +0 -0
  553. /package/dist/{chunk-SGH7I7OY.js.map → chunk-67R6NAFI.js.map} +0 -0
  554. /package/dist/{chunk-PYB4BFEC.js.map → chunk-6BQLDL6R.js.map} +0 -0
  555. /package/dist/{chunk-YJSCLGAW.js.map → chunk-6EZYHJTL.js.map} +0 -0
  556. /package/dist/{chunk-G5UQBTXY.js.map → chunk-6LXIL3Q3.js.map} +0 -0
  557. /package/dist/{chunk-T67LTMSW.js.map → chunk-6LYVAJFZ.js.map} +0 -0
  558. /package/dist/{chunk-3L465FBR.js.map → chunk-6WB5UXMZ.js.map} +0 -0
  559. /package/dist/{chunk-EKJHOWTZ.js.map → chunk-74UGYVCA.js.map} +0 -0
  560. /package/dist/{chunk-PWUSSSSL.js.map → chunk-7BTNYZC7.js.map} +0 -0
  561. /package/dist/{chunk-ESXAECZ3.js.map → chunk-7KZFGA25.js.map} +0 -0
  562. /package/dist/{chunk-EGKARC53.js.map → chunk-7MGDX2TD.js.map} +0 -0
  563. /package/dist/{chunk-Y3XZEKDQ.js.map → chunk-7N3GFGB6.js.map} +0 -0
  564. /package/dist/{chunk-AH3DGOTK.js.map → chunk-7SFSN6AX.js.map} +0 -0
  565. /package/dist/{chunk-6QK65ZWM.js.map → chunk-7TGUHFGO.js.map} +0 -0
  566. /package/dist/{chunk-QURYQFDN.js.map → chunk-7ZIWO65F.js.map} +0 -0
  567. /package/dist/{chunk-OYCK4JRS.js.map → chunk-AJHLEJTK.js.map} +0 -0
  568. /package/dist/{chunk-3PZ3LRPV.js.map → chunk-AN4U7EPH.js.map} +0 -0
  569. /package/dist/{chunk-77BHKC43.js.map → chunk-APG6CEG7.js.map} +0 -0
  570. /package/dist/{chunk-FSDQQQIA.js.map → chunk-APHLXQNP.js.map} +0 -0
  571. /package/dist/{chunk-SN2WENRP.js.map → chunk-AXHQ7QXV.js.map} +0 -0
  572. /package/dist/{chunk-54U6ZBEX.js.map → chunk-AYTLSPF6.js.map} +0 -0
  573. /package/dist/{chunk-R33SBMB7.js.map → chunk-BBSKKBMV.js.map} +0 -0
  574. /package/dist/{chunk-2GCHGWNE.js.map → chunk-BGH6TU2P.js.map} +0 -0
  575. /package/dist/{chunk-D3PTVN2I.js.map → chunk-BGIYL26H.js.map} +0 -0
  576. /package/dist/{chunk-BQYRZIZ7.js.map → chunk-BL7UQUC3.js.map} +0 -0
  577. /package/dist/{chunk-EBTUPRRQ.js.map → chunk-BOUHCYL6.js.map} +0 -0
  578. /package/dist/{chunk-MKDFYE2E.js.map → chunk-BVNGDFBC.js.map} +0 -0
  579. /package/dist/{chunk-ICAMYP5M.js.map → chunk-BWJK64CP.js.map} +0 -0
  580. /package/dist/{chunk-RHXYO4H2.js.map → chunk-BZ2GTCQV.js.map} +0 -0
  581. /package/dist/{chunk-GIWFLWXG.js.map → chunk-C2KASMJK.js.map} +0 -0
  582. /package/dist/{chunk-KO3OHHY2.js.map → chunk-CAZDRDQT.js.map} +0 -0
  583. /package/dist/{chunk-OK7BQMCI.js.map → chunk-CBJRZKZB.js.map} +0 -0
  584. /package/dist/{chunk-OYOFPNLC.js.map → chunk-CF6NYG7J.js.map} +0 -0
  585. /package/dist/{chunk-MT2R57SF.js.map → chunk-COITN7WN.js.map} +0 -0
  586. /package/dist/{chunk-OCXTTKVA.js.map → chunk-CPVOXM2Q.js.map} +0 -0
  587. /package/dist/{chunk-HYEIA25Y.js.map → chunk-CTZRCBKH.js.map} +0 -0
  588. /package/dist/{chunk-OCXEY7HE.js.map → chunk-CWL27YTB.js.map} +0 -0
  589. /package/dist/{chunk-K4DQS2ML.js.map → chunk-D2I33V5P.js.map} +0 -0
  590. /package/dist/{chunk-736RUNIA.js.map → chunk-DF7WI4JH.js.map} +0 -0
  591. /package/dist/{chunk-KUE5BOQE.js.map → chunk-DKZYCJCO.js.map} +0 -0
  592. /package/dist/{chunk-74CBR5YE.js.map → chunk-DQ32FKFQ.js.map} +0 -0
  593. /package/dist/{chunk-4O2XWOLZ.js.map → chunk-DTKG2YUF.js.map} +0 -0
  594. /package/dist/{chunk-GMHIOYB7.js.map → chunk-DUDA4V5R.js.map} +0 -0
  595. /package/dist/{chunk-XUOYNJPB.js.map → chunk-ECROT4M5.js.map} +0 -0
  596. /package/dist/{chunk-PVB4YVDP.js.map → chunk-EOXV5XGY.js.map} +0 -0
  597. /package/dist/{chunk-U6552Q3T.js.map → chunk-EQQOZ6DD.js.map} +0 -0
  598. /package/dist/{chunk-G6ICCGJ3.js.map → chunk-EY6W5H4B.js.map} +0 -0
  599. /package/dist/{chunk-HWVPLFIW.js.map → chunk-EYRFEWXJ.js.map} +0 -0
  600. /package/dist/{chunk-U4LTPFD2.js.map → chunk-FKK2PD7K.js.map} +0 -0
  601. /package/dist/{chunk-PUUEI4W3.js.map → chunk-FPHHIC5K.js.map} +0 -0
  602. /package/dist/{chunk-SP44O3OU.js.map → chunk-FQM6L22H.js.map} +0 -0
  603. /package/dist/{chunk-2J77TWGH.js.map → chunk-FW22IREV.js.map} +0 -0
  604. /package/dist/{chunk-EBIVTDEG.js.map → chunk-G4M6AYDB.js.map} +0 -0
  605. /package/dist/{chunk-BASI553K.js.map → chunk-G6AZ2WIU.js.map} +0 -0
  606. /package/dist/{chunk-SJYTQLN3.js.map → chunk-GJ5IDSAX.js.map} +0 -0
  607. /package/dist/{chunk-TDTD66BK.js.map → chunk-GRDSEZWZ.js.map} +0 -0
  608. /package/dist/{chunk-MV2CLIO6.js.map → chunk-HBVJIGY2.js.map} +0 -0
  609. /package/dist/{chunk-R4JA5JFI.js.map → chunk-HCWQLIOE.js.map} +0 -0
  610. /package/dist/{chunk-MZY3VKKM.js.map → chunk-HEVD4A5G.js.map} +0 -0
  611. /package/dist/{chunk-DLVIRJGK.js.map → chunk-HNDHSEVJ.js.map} +0 -0
  612. /package/dist/{chunk-LPKJ77EK.js.map → chunk-HNTZ7B7M.js.map} +0 -0
  613. /package/dist/{chunk-IN3VQFKS.js.map → chunk-I2FC7CAI.js.map} +0 -0
  614. /package/dist/{chunk-ZBHGNE2J.js.map → chunk-IEHZFYMH.js.map} +0 -0
  615. /package/dist/{chunk-DWJ6J3YW.js.map → chunk-IXISEVD7.js.map} +0 -0
  616. /package/dist/{chunk-TK5FWVZR.js.map → chunk-IZEDVQUD.js.map} +0 -0
  617. /package/dist/{chunk-HEGV4QMS.js.map → chunk-J42QE4VO.js.map} +0 -0
  618. /package/dist/{chunk-PRT4J2DL.js.map → chunk-J555XSUM.js.map} +0 -0
  619. /package/dist/{chunk-SBXSKRFA.js.map → chunk-JNMHFSDF.js.map} +0 -0
  620. /package/dist/{chunk-KI46GKMD.js.map → chunk-JTBAOPYO.js.map} +0 -0
  621. /package/dist/{chunk-SXGJL7UT.js.map → chunk-K376MPJH.js.map} +0 -0
  622. /package/dist/{chunk-OSJ366KR.js.map → chunk-KEBVT55V.js.map} +0 -0
  623. /package/dist/{chunk-U5UGM5XD.js.map → chunk-KFIZAXHI.js.map} +0 -0
  624. /package/dist/{chunk-KFNZZ2N6.js.map → chunk-KKGRDBMK.js.map} +0 -0
  625. /package/dist/{chunk-PLYVGZIN.js.map → chunk-KKIG6DN5.js.map} +0 -0
  626. /package/dist/{chunk-3OK7Y6ES.js.map → chunk-KKQO2GAA.js.map} +0 -0
  627. /package/dist/{chunk-DQPIEQGP.js.map → chunk-KO753ZCZ.js.map} +0 -0
  628. /package/dist/{chunk-YNTLWCF4.js.map → chunk-KYIRWU65.js.map} +0 -0
  629. /package/dist/{chunk-JKL5S7UQ.js.map → chunk-L6V63DVI.js.map} +0 -0
  630. /package/dist/{chunk-CV4VVLPZ.js.map → chunk-LCNJ2KNS.js.map} +0 -0
  631. /package/dist/{chunk-D74Z2N4K.js.map → chunk-LE7YKMTU.js.map} +0 -0
  632. /package/dist/{chunk-D5TIVCXG.js.map → chunk-LEBEOMVT.js.map} +0 -0
  633. /package/dist/{embedded-new-voice-GHJRY3YL.js.map → chunk-LKLQVANM.js.map} +0 -0
  634. /package/dist/{chunk-WXF2RTS4.js.map → chunk-M6URPYUB.js.map} +0 -0
  635. /package/dist/{chunk-H6BX6WOW.js.map → chunk-MDHFMRBC.js.map} +0 -0
  636. /package/dist/{chunk-3CDJSKDW.js.map → chunk-MGZO7CHI.js.map} +0 -0
  637. /package/dist/{chunk-DCEQCGVN.js.map → chunk-MIWU52TW.js.map} +0 -0
  638. /package/dist/{chunk-LVELUUK6.js.map → chunk-NF6QVVMP.js.map} +0 -0
  639. /package/dist/{chunk-UMX6DZME.js.map → chunk-NTZ5ZNVK.js.map} +0 -0
  640. /package/dist/{chunk-FBA2NXYH.js.map → chunk-NWLRABUR.js.map} +0 -0
  641. /package/dist/{chunk-TNSJFZ6Q.js.map → chunk-O2H2U7YS.js.map} +0 -0
  642. /package/dist/{chunk-BFFNINCC.js.map → chunk-OAL2PPX4.js.map} +0 -0
  643. /package/dist/{chunk-WTSQUCHB.js.map → chunk-OCYTHZ4A.js.map} +0 -0
  644. /package/dist/{chunk-ZAX4XQLN.js.map → chunk-OEDTCIXF.js.map} +0 -0
  645. /package/dist/{chunk-CHU3RDV4.js.map → chunk-OLVSYB3P.js.map} +0 -0
  646. /package/dist/{chunk-IFSXVU2S.js.map → chunk-OQHTFOCA.js.map} +0 -0
  647. /package/dist/{chunk-OXQ2SXVC.js.map → chunk-P56AVROH.js.map} +0 -0
  648. /package/dist/{chunk-CXAN2FHF.js.map → chunk-PCEJHHGP.js.map} +0 -0
  649. /package/dist/{chunk-5MIBQ4P5.js.map → chunk-PHGQGVVL.js.map} +0 -0
  650. /package/dist/{chunk-FLWQJDJ5.js.map → chunk-PUZRHEQI.js.map} +0 -0
  651. /package/dist/{chunk-OP2GD6QW.js.map → chunk-PV7U6OOJ.js.map} +0 -0
  652. /package/dist/{chunk-X2QJXDE4.js.map → chunk-PZQACDH5.js.map} +0 -0
  653. /package/dist/{chunk-CH4UQ4NO.js.map → chunk-PZTS4O6E.js.map} +0 -0
  654. /package/dist/{chunk-TKQL7EDB.js.map → chunk-Q42QHUAQ.js.map} +0 -0
  655. /package/dist/{chunk-MRECRNVU.js.map → chunk-QCYGB6TZ.js.map} +0 -0
  656. /package/dist/{chunk-GSCGKJNK.js.map → chunk-QECMETOF.js.map} +0 -0
  657. /package/dist/{chunk-RMCLFSMX.js.map → chunk-QGX3LE6H.js.map} +0 -0
  658. /package/dist/{chunk-HTMQGS63.js.map → chunk-QI3NDQFP.js.map} +0 -0
  659. /package/dist/{chunk-R5QAL43H.js.map → chunk-RA3Q52O2.js.map} +0 -0
  660. /package/dist/{chunk-AJDGP2N4.js.map → chunk-RJNOQEJJ.js.map} +0 -0
  661. /package/dist/{chunk-477DTTMH.js.map → chunk-RSFOFUR7.js.map} +0 -0
  662. /package/dist/{chunk-JV5ULONH.js.map → chunk-RXR6PMSH.js.map} +0 -0
  663. /package/dist/{chunk-J2BTILRR.js.map → chunk-SM7HFCGC.js.map} +0 -0
  664. /package/dist/{chunk-OBGOLHCP.js.map → chunk-T4HK4XCI.js.map} +0 -0
  665. /package/dist/{chunk-XVLEBB4Y.js.map → chunk-TBWL6YWL.js.map} +0 -0
  666. /package/dist/{chunk-AAS7OWV6.js.map → chunk-TIDXYWFX.js.map} +0 -0
  667. /package/dist/{chunk-N3FM4BNA.js.map → chunk-TKHRGY2P.js.map} +0 -0
  668. /package/dist/{chunk-GU7T2S5N.js.map → chunk-TU2GSZL7.js.map} +0 -0
  669. /package/dist/{chunk-OI6VI6SU.js.map → chunk-U6HGJXXQ.js.map} +0 -0
  670. /package/dist/{chunk-4BWMAGJJ.js.map → chunk-UGRW6RTR.js.map} +0 -0
  671. /package/dist/{chunk-AVXDIRRW.js.map → chunk-UMRUDYUK.js.map} +0 -0
  672. /package/dist/{chunk-FNXCFIPW.js.map → chunk-UOT2R5ZD.js.map} +0 -0
  673. /package/dist/{chunk-DIP7YALH.js.map → chunk-USURKJVT.js.map} +0 -0
  674. /package/dist/{chunk-S27VZ5DO.js.map → chunk-UU6Q67XM.js.map} +0 -0
  675. /package/dist/{chunk-LTJFV2JI.js.map → chunk-UZ7NP5CW.js.map} +0 -0
  676. /package/dist/{chunk-H6MJFMHZ.js.map → chunk-V4FO7UOE.js.map} +0 -0
  677. /package/dist/{chunk-RGR57NYY.js.map → chunk-V4ZOZRCW.js.map} +0 -0
  678. /package/dist/{chunk-LQKVNREV.js.map → chunk-V57YMKQZ.js.map} +0 -0
  679. /package/dist/{chunk-XZCCEKPW.js.map → chunk-VOIWZBY6.js.map} +0 -0
  680. /package/dist/{chunk-E5KOWRDU.js.map → chunk-VPHPLPDA.js.map} +0 -0
  681. /package/dist/{chunk-OGU73VUN.js.map → chunk-VUL4KPUU.js.map} +0 -0
  682. /package/dist/{chunk-SFIXTOOJ.js.map → chunk-VWF6ILAR.js.map} +0 -0
  683. /package/dist/{chunk-FER6EVIY.js.map → chunk-W54BHJO7.js.map} +0 -0
  684. /package/dist/{chunk-34NV52R3.js.map → chunk-WCYE4BLC.js.map} +0 -0
  685. /package/dist/{chunk-RISUROBM.js.map → chunk-WTV25ELY.js.map} +0 -0
  686. /package/dist/{chunk-UO35OEOX.js.map → chunk-WZYGH7CN.js.map} +0 -0
  687. /package/dist/{chunk-CEMSIU4Z.js.map → chunk-XG2RWUF7.js.map} +0 -0
  688. /package/dist/{chunk-K3D7IQQP.js.map → chunk-XV7QOT7W.js.map} +0 -0
  689. /package/dist/{chunk-GOCODNQS.js.map → chunk-XWECT3GX.js.map} +0 -0
  690. /package/dist/{chunk-5MHMCE2G.js.map → chunk-XZQK2ZLW.js.map} +0 -0
  691. /package/dist/{chunk-JV3UI7BH.js.map → chunk-Y5BR66OH.js.map} +0 -0
  692. /package/dist/{chunk-4F3AEJI6.js.map → chunk-YD6XU6FY.js.map} +0 -0
  693. /package/dist/{chunk-VATYK3JQ.js.map → chunk-YFE47G3C.js.map} +0 -0
  694. /package/dist/{chunk-ZR5EKJT6.js.map → chunk-YG6TWPP7.js.map} +0 -0
  695. /package/dist/{chunk-44JWVYJB.js.map → chunk-YH3ARKBB.js.map} +0 -0
  696. /package/dist/{chunk-752WXSDN.js.map → chunk-YI66STKJ.js.map} +0 -0
  697. /package/dist/{chunk-QRECBCJM.js.map → chunk-YMVPYMKB.js.map} +0 -0
  698. /package/dist/{chunk-77SYIH6O.js.map → chunk-YPIXBAF6.js.map} +0 -0
  699. /package/dist/{chunk-WRMUXZ7C.js.map → chunk-YSWPNY6G.js.map} +0 -0
  700. /package/dist/{chunk-GTHCHCWW.js.map → chunk-YWNNMBZG.js.map} +0 -0
  701. /package/dist/{chunk-3DRLCX5V.js.map → chunk-Z3HYM2JT.js.map} +0 -0
  702. /package/dist/{chunk-M3HGBO2Y.js.map → chunk-ZAC7YPRA.js.map} +0 -0
  703. /package/dist/{chunk-2VJOSU4H.js.map → chunk-ZENESDAF.js.map} +0 -0
  704. /package/dist/{chunk-4JXPLTWV.js.map → chunk-ZHAPMETO.js.map} +0 -0
  705. /package/dist/{chunk-IJR6VOLU.js.map → chunk-ZVR6DUZH.js.map} +0 -0
  706. /package/dist/{embedded-voice-ASQXBSTX.js.map → computer-viewer-FOIOZUF5.js.map} +0 -0
  707. /package/dist/{model-policy-picker-menu-E6XKMFTA.js.map → embedded-new-voice-WTXAJNGO.js.map} +0 -0
  708. /package/dist/{sandbox-files-W5W2LW4K.js.map → embedded-voice-SIJOPN2G.js.map} +0 -0
  709. /package/dist/{fleet-decision-row-U7LDVBEM.js.map → fleet-decision-row-XKQ3GMYT.js.map} +0 -0
  710. /package/dist/{latest-question-RNVF262Q.js.map → latest-question-KA7AQYVI.js.map} +0 -0
  711. /package/dist/{session-connect-cards-HPH7JOZP.js.map → model-policy-picker-menu-6N2G7VGX.js.map} +0 -0
  712. /package/dist/{payment-page-card-DJDKV2LW.js.map → payment-page-card-IJFZHQ52.js.map} +0 -0
  713. /package/dist/{platform-activity-row-MSDCSMET.js.map → platform-activity-row-MFCMGI43.js.map} +0 -0
  714. /package/dist/{queue-surface-implementation-GUAIG6TK.js.map → queue-surface-implementation-BBCDWWOP.js.map} +0 -0
  715. /package/dist/{recorder-host-2MYDJPQW.js.map → recorder-host-LDYYOKG7.js.map} +0 -0
  716. /package/dist/{session-realtime-SDTKFFIR.js.map → sandbox-files-VYRBIXJY.js.map} +0 -0
  717. /package/dist/{timeline-annotation-markers-FNILLWNU.js.map → timeline-annotation-markers-LL6ZVBZH.js.map} +0 -0
  718. /package/dist/{timeline-annotation-selection-MBCIDO2Q.js.map → timeline-annotation-selection-WQA76WYC.js.map} +0 -0
  719. /package/dist/{timeline-annotations-dialog-JPNKLOTE.js.map → timeline-annotations-dialog-HHETAEZA.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  t
4
- } from "./chunk-HEGV4QMS.js";
4
+ } from "./chunk-J42QE4VO.js";
5
5
  import {
6
6
  regionRestrictedText
7
7
  } from "./chunk-MBSN5HHQ.js";
@@ -11,10 +11,15 @@ import {
11
11
  AGENT_CAPABILITY_DESCRIPTIONS,
12
12
  AGENT_CAPABILITY_IDS,
13
13
  allAgentCapabilities,
14
- noneAgentCapabilities
14
+ noneAgentCapabilities,
15
+ savedRequestBaseCapabilities
15
16
  } from "@opengeni/contracts";
16
17
  var AGENT_CAPABILITY_GROUPS = [
17
- { id: "conversation", label: "Conversation", capabilities: ["humanInput", "webSearch", "media"] },
18
+ {
19
+ id: "conversation",
20
+ label: "Conversation",
21
+ capabilities: ["humanInput", "notifications", "webSearch", "media"]
22
+ },
18
23
  {
19
24
  id: "work",
20
25
  label: "Work",
@@ -28,7 +33,8 @@ var AGENT_CAPABILITY_GROUPS = [
28
33
  "secrets",
29
34
  "workspaceFiles",
30
35
  "workspaceConnectors",
31
- "workspaceAdmin"
36
+ "workspaceAdmin",
37
+ "privacyFacts"
32
38
  ]
33
39
  }
34
40
  ];
@@ -77,7 +83,8 @@ function capabilityAvailability(config, alsoUnavailable = []) {
77
83
  unavailableReason: (id) => reasons.get(id) ?? UNAVAILABLE_CAPABILITY_REASON
78
84
  };
79
85
  }
80
- function baseCapabilities(from) {
86
+ function baseCapabilities(from, options = {}) {
87
+ if (options.saved) return savedRequestBaseCapabilities(from);
81
88
  return from === "all" ? allAgentCapabilities() : noneAgentCapabilities();
82
89
  }
83
90
  function applyToggles(base, toggles) {
@@ -88,20 +95,26 @@ function applyToggles(base, toggles) {
88
95
  if (id === "skills") next.skills = value;
89
96
  else next[id] = value;
90
97
  }
98
+ if (toggles.humanInput === false && toggles.notifications === void 0) {
99
+ next.notifications = false;
100
+ }
91
101
  return next;
92
102
  }
93
103
  function draftFromRequest(capabilities, options = {}) {
94
104
  const from = capabilities === void 0 ? "all" : typeof capabilities === "string" ? capabilities : capabilities.from;
95
105
  const toggles = capabilities === void 0 || typeof capabilities === "string" ? {} : (({ from: _from, ...rest }) => rest)(capabilities);
96
- const values = applyToggles(baseCapabilities(from), toggles);
97
- if (options.legacyHumanInputOff && toggles.humanInput === void 0) values.humanInput = false;
106
+ const values = applyToggles(baseCapabilities(from, { saved: options.saved }), toggles);
107
+ if (options.legacyHumanInputOff && toggles.humanInput === void 0) {
108
+ values.humanInput = false;
109
+ if (toggles.notifications === void 0) values.notifications = false;
110
+ }
98
111
  return { from, values };
99
112
  }
100
113
  function draftFromResolved(config) {
101
114
  return { from: config.from, values: { ...config.capabilities } };
102
115
  }
103
- function requestFromDraft(draft, availability) {
104
- const base = baseCapabilities(draft.from);
116
+ function requestFromDraft(draft, availability, options = {}) {
117
+ const base = baseCapabilities(draft.from, options);
105
118
  const toggles = {};
106
119
  for (const id of AGENT_CAPABILITY_IDS) {
107
120
  const value = draft.values[id];
@@ -136,7 +149,10 @@ function capabilitySummary(values, availability) {
136
149
  return `${on} of ${offered.length} capabilities`;
137
150
  }
138
151
  function workspaceAgentDefaultsDraft(input) {
139
- return draftFromRequest(input.capabilities, { legacyHumanInputOff: input.legacyHumanInputOff });
152
+ return draftFromRequest(input.capabilities, {
153
+ legacyHumanInputOff: input.legacyHumanInputOff,
154
+ saved: true
155
+ });
140
156
  }
141
157
  function toolOwnerLabel(owner) {
142
158
  switch (owner) {
@@ -195,4 +211,4 @@ export {
195
211
  toolOwnerLabel,
196
212
  agentConfigErrorText
197
213
  };
198
- //# sourceMappingURL=chunk-3PM3M2Q6.js.map
214
+ //# sourceMappingURL=chunk-NDXBF3RW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/lib/agent-capabilities.tsx"],"sourcesContent":["/**\n * Web view of the agent capability registry (`@opengeni/contracts`\n * agent-config). Every screen that shows or edits what an agent can do (the\n * workspace defaults page, the composer's Capabilities panel, the session\n * Agent panel and the schedule form) reads its groups, labels and request\n * shapes from here, so they cannot drift from the server's meaning.\n *\n * A \"draft\" is what a picker edits: a starting point plus the full value of\n * every capability. `requestFromDraft` turns it back into the smallest\n * `AgentCapabilities` request (a starting point plus only the toggles that\n * differ from it), which is what the server stores and what people read in\n * the API.\n */\nimport {\n AGENT_CAPABILITY_DESCRIPTIONS,\n AGENT_CAPABILITY_IDS,\n allAgentCapabilities,\n noneAgentCapabilities,\n savedRequestBaseCapabilities,\n type AgentCapabilities,\n type AgentCapabilityId,\n type AgentCapabilityStartingPoint,\n type AgentCapabilityToggles,\n type AgentSkillsCapability,\n type ClientAgentConfig,\n type ResolvedAgentCapabilities,\n type ResolvedAgentConfig,\n} from \"@opengeni/contracts\";\nimport { regionRestrictedText } from \"../../inference-region\";\nimport { t } from \"./console-text\";\n\nexport type { AgentCapabilityId, ResolvedAgentCapabilities };\n\nexport type AgentCapabilityGroup = {\n id: \"conversation\" | \"work\" | \"workspace\";\n label: string;\n capabilities: readonly AgentCapabilityId[];\n};\n\n/** Three groups, in the order people scan them. Every capability appears once. */\nexport const AGENT_CAPABILITY_GROUPS: readonly AgentCapabilityGroup[] = [\n {\n id: \"conversation\",\n label: \"Conversation\",\n capabilities: [\"humanInput\", \"notifications\", \"webSearch\", \"media\"],\n },\n {\n id: \"work\",\n label: \"Work\",\n capabilities: [\"goals\", \"subagents\", \"skills\", \"artifacts\", \"browser\", \"schedules\"],\n },\n {\n id: \"workspace\",\n label: \"Workspace\",\n capabilities: [\n \"knowledge\",\n \"secrets\",\n \"workspaceFiles\",\n \"workspaceConnectors\",\n \"workspaceAdmin\",\n \"privacyFacts\",\n ],\n },\n];\n\nexport function capabilityLabel(id: AgentCapabilityId): string {\n return AGENT_CAPABILITY_DESCRIPTIONS[id].label;\n}\n\nexport function capabilityDescription(id: AgentCapabilityId): string {\n return AGENT_CAPABILITY_DESCRIPTIONS[id].description;\n}\n\n/** The two starting points, in product words, each with its consequence. */\nexport const AGENT_STARTING_POINTS: readonly {\n value: AgentCapabilityStartingPoint;\n title: string;\n description: string;\n}[] = [\n {\n value: \"all\",\n title: \"Everything this workspace offers\",\n description: \"Every capability is on unless you turn it off.\",\n },\n {\n value: \"none\",\n title: \"Only what you choose\",\n description:\n \"Starts with its own tools, asking questions and reading Skills. Turn on the rest as needed.\",\n },\n];\n\nexport const SKILLS_OPTIONS: readonly { value: \"off\" | \"read\" | \"manage\"; label: string }[] = [\n { value: \"off\", label: \"Off\" },\n { value: \"read\", label: \"Read\" },\n { value: \"manage\", label: \"Read and write\" },\n];\n\nexport function skillsOptionValue(value: AgentSkillsCapability): \"off\" | \"read\" | \"manage\" {\n return value === false ? \"off\" : value;\n}\n\nexport function skillsFromOption(value: \"off\" | \"read\" | \"manage\"): AgentSkillsCapability {\n return value === \"off\" ? false : value;\n}\n\nexport const UNAVAILABLE_CAPABILITY_REASON = \"Not enabled on this server\";\n\n/** Capabilities this deployment offers. Unknown ids (an older server) count as available. */\nexport type CapabilityAvailability = {\n isAvailable: (id: AgentCapabilityId) => boolean;\n unavailable: ReadonlySet<AgentCapabilityId>;\n /**\n * Why a capability is unavailable: \"Not supported in EU\" when the server\n * switched it off for an EU-only workspace, otherwise \"Not enabled on this\n * server\".\n */\n unavailableReason: (id: AgentCapabilityId) => string;\n};\n\nexport function capabilityAvailability(\n config: Pick<ClientAgentConfig, \"capabilities\"> | null | undefined,\n alsoUnavailable: readonly AgentCapabilityId[] = [],\n): CapabilityAvailability {\n const unavailable = new Set<AgentCapabilityId>(alsoUnavailable);\n const reasons = new Map<AgentCapabilityId, string>();\n for (const entry of config?.capabilities ?? []) {\n if (entry.available) continue;\n unavailable.add(entry.id);\n const regionRestricted = regionRestrictedText(t, entry.code ?? entry.reason);\n if (regionRestricted) reasons.set(entry.id, regionRestricted);\n }\n return {\n unavailable,\n isAvailable: (id) => !unavailable.has(id),\n unavailableReason: (id) => reasons.get(id) ?? UNAVAILABLE_CAPABILITY_REASON,\n };\n}\n\n/**\n * A request's starting capabilities. `saved` is a workspace default or a\n * schedule's stored request, which keeps its earlier meaning (see\n * `savedRequestBaseCapabilities`), matching the server.\n */\nexport function baseCapabilities(\n from: AgentCapabilityStartingPoint,\n options: { saved?: boolean | undefined } = {},\n): ResolvedAgentCapabilities {\n if (options.saved) return savedRequestBaseCapabilities(from);\n return from === \"all\" ? allAgentCapabilities() : noneAgentCapabilities();\n}\n\nexport type AgentCapabilityDraft = {\n from: AgentCapabilityStartingPoint;\n values: ResolvedAgentCapabilities;\n};\n\nfunction applyToggles(\n base: ResolvedAgentCapabilities,\n toggles: AgentCapabilityToggles,\n): ResolvedAgentCapabilities {\n const next = { ...base };\n for (const id of AGENT_CAPABILITY_IDS) {\n const value = toggles[id];\n if (value === undefined) continue;\n if (id === \"skills\") next.skills = value as AgentSkillsCapability;\n else next[id] = value as boolean;\n }\n // Matches the server: turning human input off also turns notifications off\n // unless the toggles name them.\n if (toggles.humanInput === false && toggles.notifications === undefined) {\n next.notifications = false;\n }\n return next;\n}\n\n/**\n * The editable form of a request. Omitted means \"everything\". A workspace's\n * older \"Ask questions\" setting (off) still turns the default off unless the\n * request says otherwise, matching the server's resolution.\n */\nexport function draftFromRequest(\n capabilities: AgentCapabilities | undefined,\n options: { legacyHumanInputOff?: boolean | undefined; saved?: boolean | undefined } = {},\n): AgentCapabilityDraft {\n const from: AgentCapabilityStartingPoint =\n capabilities === undefined\n ? \"all\"\n : typeof capabilities === \"string\"\n ? capabilities\n : capabilities.from;\n const toggles: AgentCapabilityToggles =\n capabilities === undefined || typeof capabilities === \"string\"\n ? {}\n : (({ from: _from, ...rest }) => rest)(capabilities);\n const values = applyToggles(baseCapabilities(from, { saved: options.saved }), toggles);\n if (options.legacyHumanInputOff && toggles.humanInput === undefined) {\n values.humanInput = false;\n if (toggles.notifications === undefined) values.notifications = false;\n }\n return { from, values };\n}\n\n/** A frozen session configuration as a draft (for editing a running session). */\nexport function draftFromResolved(config: ResolvedAgentConfig): AgentCapabilityDraft {\n return { from: config.from, values: { ...config.capabilities } };\n}\n\n/**\n * The smallest request for a draft: its starting point, plus only the\n * capabilities that differ from it. A capability this server does not offer\n * is never sent as on (the server would refuse it).\n */\nexport function requestFromDraft(\n draft: AgentCapabilityDraft,\n availability?: CapabilityAvailability,\n options: { saved?: boolean | undefined } = {},\n): AgentCapabilities {\n const base = baseCapabilities(draft.from, options);\n const toggles: AgentCapabilityToggles = {};\n for (const id of AGENT_CAPABILITY_IDS) {\n const value = draft.values[id];\n if (value === base[id]) continue;\n if (availability && !availability.isAvailable(id) && value !== false) continue;\n (toggles as Record<string, boolean | string>)[id] = value;\n }\n return Object.keys(toggles).length === 0 ? draft.from : { from: draft.from, ...toggles };\n}\n\n/** Switch the starting point: every capability takes that starting point's value. */\nexport function withStartingPoint(\n draft: AgentCapabilityDraft,\n from: AgentCapabilityStartingPoint,\n): AgentCapabilityDraft {\n return draft.from === from ? draft : { from, values: baseCapabilities(from) };\n}\n\nexport function withCapability(\n draft: AgentCapabilityDraft,\n id: AgentCapabilityId,\n value: boolean | AgentSkillsCapability,\n): AgentCapabilityDraft {\n return { ...draft, values: { ...draft.values, [id]: value } };\n}\n\nexport function capabilityOn(values: ResolvedAgentCapabilities, id: AgentCapabilityId): boolean {\n return id === \"skills\" ? values.skills !== false : values[id] === true;\n}\n\n/** What actually runs: a capability the server doesn't offer is off. */\nexport function effectiveCapabilityOn(\n values: ResolvedAgentCapabilities,\n id: AgentCapabilityId,\n availability: CapabilityAvailability,\n): boolean {\n return availability.isAvailable(id) && capabilityOn(values, id);\n}\n\nexport function draftsEqual(left: AgentCapabilityDraft, right: AgentCapabilityDraft): boolean {\n return (\n left.from === right.from &&\n AGENT_CAPABILITY_IDS.every((id) => left.values[id] === right.values[id])\n );\n}\n\n/**\n * One short line for a chip or a muted row value: \"All capabilities\",\n * \"9 of 13 capabilities\". Counts only what this server offers.\n */\nexport function capabilitySummary(\n values: ResolvedAgentCapabilities,\n availability: CapabilityAvailability,\n): string {\n const offered = AGENT_CAPABILITY_IDS.filter((id) => availability.isAvailable(id));\n const on = offered.filter((id) => capabilityOn(values, id)).length;\n if (on === offered.length) {\n // Say \"available\" when the server holds some back, so \"all\" stays true.\n return offered.length === AGENT_CAPABILITY_IDS.length\n ? \"All capabilities\"\n : `All ${offered.length} available capabilities`;\n }\n if (on === 0) return \"No capabilities\";\n return `${on} of ${offered.length} capabilities`;\n}\n\n/** The workspace's saved defaults, or null when it follows Opengeni's defaults. */\nexport function workspaceAgentDefaultsDraft(input: {\n capabilities: AgentCapabilities | undefined;\n legacyHumanInputOff: boolean;\n}): AgentCapabilityDraft {\n return draftFromRequest(input.capabilities, {\n legacyHumanInputOff: input.legacyHumanInputOff,\n saved: true,\n });\n}\n\n/** Tool owner in product words, for the Technical details list. */\nexport function toolOwnerLabel(owner: AgentCapabilityId | \"runtime\" | \"sandbox\" | \"product\") {\n switch (owner) {\n case \"runtime\":\n return \"Always available\";\n case \"sandbox\":\n return \"Sandbox\";\n case \"product\":\n return \"Added to this session\";\n default:\n return capabilityLabel(owner);\n }\n}\n\n/**\n * Agent-setting failures in product words: what happened and what to do.\n * The raw API text (with its reference) is only a last resort.\n */\nexport function agentConfigErrorText(error: unknown, fallback: string): string {\n const failure = error as {\n status?: unknown | undefined;\n code?: unknown | undefined;\n details?: Record<string, unknown> | undefined;\n message?: unknown | undefined;\n } | null;\n if (!failure || typeof failure !== \"object\") return fallback;\n if (failure.status === 409) {\n return \"Someone changed these settings while you were editing. Nothing was saved. Check the current settings and try again.\";\n }\n const details = failure.details ?? {};\n const code = String(details.code ?? failure.code ?? \"\");\n const capability =\n typeof details.capability === \"string\" &&\n (AGENT_CAPABILITY_IDS as readonly string[]).includes(details.capability)\n ? capabilityLabel(details.capability as AgentCapabilityId)\n : null;\n switch (code) {\n case \"agent_capability_unavailable\":\n return capability\n ? `${capability} isn't enabled on this server. Turn it off and save again.`\n : \"One of these capabilities isn't enabled on this server. Turn it off and save again.\";\n case \"agent_config_widening\":\n return capability\n ? `This session can't turn on ${capability}: the session that started it doesn't have it.`\n : \"This session can't have more than the session that started it.\";\n case \"agent_config_conflict\":\n return \"These settings conflict with the tools chosen for this session. Change one of them and save again.\";\n default:\n return failure.status === 403\n ? \"You don't have permission to change this. Ask a workspace admin.\"\n : fallback;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  ProviderRecoveryNotice
4
- } from "./chunk-QRECBCJM.js";
4
+ } from "./chunk-YMVPYMKB.js";
5
5
 
6
6
  // src/app/components/session/model-recovery-notice.tsx
7
7
  import { jsx } from "react/jsx-runtime";
@@ -12,4 +12,4 @@ function ModelRecoveryNotice({ recovery }) {
12
12
  export {
13
13
  ModelRecoveryNotice
14
14
  };
15
- //# sourceMappingURL=chunk-LVELUUK6.js.map
15
+ //# sourceMappingURL=chunk-NF6QVVMP.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useOpenGeniText
4
- } from "./chunk-QPQ7R77C.js";
4
+ } from "./chunk-7SU4YVZ5.js";
5
5
 
6
6
  // src/hooks/use-transcription.ts
7
7
  import {
@@ -1580,4 +1580,4 @@ export {
1580
1580
  VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
1581
1581
  useVoiceInput
1582
1582
  };
1583
- //# sourceMappingURL=chunk-UMX6DZME.js.map
1583
+ //# sourceMappingURL=chunk-NTZ5ZNVK.js.map
@@ -7,7 +7,7 @@ import {
7
7
  useInteractionInterventions,
8
8
  useInteractionInvalidation,
9
9
  useViewerMenuDismiss
10
- } from "./chunk-FER6EVIY.js";
10
+ } from "./chunk-W54BHJO7.js";
11
11
  import {
12
12
  useClientConfigFlags
13
13
  } from "./chunk-XESA3B7W.js";
@@ -40,7 +40,7 @@ import {
40
40
  } from "./chunk-TXS65BB2.js";
41
41
  import {
42
42
  useOpenGeniText
43
- } from "./chunk-QPQ7R77C.js";
43
+ } from "./chunk-7SU4YVZ5.js";
44
44
 
45
45
  // src/components/browser-viewer.tsx
46
46
  import { interactionControlFailureFromError } from "@opengeni/sdk/interaction";
@@ -4821,4 +4821,4 @@ export {
4821
4821
  staleBrowserEndRetryDelayMs,
4822
4822
  BrowserViewer
4823
4823
  };
4824
- //# sourceMappingURL=chunk-FBA2NXYH.js.map
4824
+ //# sourceMappingURL=chunk-NWLRABUR.js.map
@@ -7,14 +7,14 @@ import {
7
7
  nextRuns,
8
8
  toScheduleSpec,
9
9
  validateCadence
10
- } from "./chunk-4Z5X7PLC.js";
10
+ } from "./chunk-5MLM5T5C.js";
11
11
  import {
12
12
  inSentence
13
- } from "./chunk-MKDFYE2E.js";
13
+ } from "./chunk-BVNGDFBC.js";
14
14
  import {
15
15
  sessionAutomationWait,
16
16
  sessionAutomationWaitLabel
17
- } from "./chunk-D3PTVN2I.js";
17
+ } from "./chunk-BGIYL26H.js";
18
18
 
19
19
  // src/components/automations/event-trigger-model.ts
20
20
  import {
@@ -705,4 +705,4 @@ export {
705
705
  sessionAutomationWaitWords,
706
706
  sessionAutomationWaitLines
707
707
  };
708
- //# sourceMappingURL=chunk-TNSJFZ6Q.js.map
708
+ //# sourceMappingURL=chunk-O2H2U7YS.js.map
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-PNVSFQFB.js";
7
7
  import {
8
8
  RailTrailingMetadata
9
- } from "./chunk-NQ2CPQJF.js";
9
+ } from "./chunk-7D3WIDKK.js";
10
10
  import {
11
11
  visualTreeDepth
12
- } from "./chunk-77SYIH6O.js";
12
+ } from "./chunk-YPIXBAF6.js";
13
13
  import {
14
14
  OpenPublishedSiteItem,
15
15
  useSiteActions
@@ -320,4 +320,4 @@ export {
320
320
  readSiteRowDragPayload,
321
321
  SiteSessionGroupHeading
322
322
  };
323
- //# sourceMappingURL=chunk-BFFNINCC.js.map
323
+ //# sourceMappingURL=chunk-OAL2PPX4.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BillingClassMark,
4
4
  PickerNavRow
5
- } from "./chunk-2J77TWGH.js";
5
+ } from "./chunk-FW22IREV.js";
6
6
  import {
7
7
  MENU_CHECK_CLASS,
8
8
  MENU_LABEL_CLASS,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-TXS65BB2.js";
31
31
  import {
32
32
  useOpenGeniText
33
- } from "./chunk-QPQ7R77C.js";
33
+ } from "./chunk-7SU4YVZ5.js";
34
34
 
35
35
  // src/components/model-policy-picker-menu.tsx
36
36
  import { ArrowRightIcon, CheckIcon, SearchIcon, ZapIcon } from "lucide-react";
@@ -370,4 +370,4 @@ export {
370
370
  ModelPolicyPickerMenu,
371
371
  ModelPolicyPickerPopover
372
372
  };
373
- //# sourceMappingURL=chunk-WTSQUCHB.js.map
373
+ //# sourceMappingURL=chunk-OCYTHZ4A.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-XVU32APP.js";
5
5
  import {
6
6
  t
7
- } from "./chunk-HEGV4QMS.js";
7
+ } from "./chunk-J42QE4VO.js";
8
8
  import {
9
9
  creditRefusalHeadline,
10
10
  creditRefusalKindFromText,
@@ -226,4 +226,4 @@ export {
226
226
  chatComposerPlaceholder,
227
227
  failureFallbackReason
228
228
  };
229
- //# sourceMappingURL=chunk-ZAX4XQLN.js.map
229
+ //# sourceMappingURL=chunk-OEDTCIXF.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  FIRST_PARTY_CAPABILITY_LOGOS
4
- } from "./chunk-44JWVYJB.js";
4
+ } from "./chunk-YH3ARKBB.js";
5
5
  import {
6
6
  hasWorkspacePermission
7
7
  } from "./chunk-H2ALCTWC.js";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-JDFDPMKX.js";
14
14
  import {
15
15
  SessionCapabilityFrame
16
- } from "./chunk-OP2GD6QW.js";
16
+ } from "./chunk-PV7U6OOJ.js";
17
17
  import {
18
18
  Button
19
19
  } from "./chunk-7QQN3KNP.js";
@@ -108,4 +108,4 @@ export {
108
108
  PERSONAL_GITHUB_CARD_DESCRIPTION,
109
109
  SessionPersonalGitHubCapabilityCard
110
110
  };
111
- //# sourceMappingURL=chunk-CHU3RDV4.js.map
111
+ //# sourceMappingURL=chunk-OLVSYB3P.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  createOpenGeniText
4
- } from "./chunk-QPQ7R77C.js";
4
+ } from "./chunk-7SU4YVZ5.js";
5
5
 
6
6
  // src/recordings-model.ts
7
7
  import {
@@ -82,7 +82,8 @@ var PROVIDER_FAILURES = /* @__PURE__ */ new Set([
82
82
  "missing_provider_key",
83
83
  "provider_unauthorized",
84
84
  "provider_quota_exceeded",
85
- "policy_blocked"
85
+ "policy_blocked",
86
+ "subscription_api_unavailable"
86
87
  ]);
87
88
  var MODEL_FAILURES = /* @__PURE__ */ new Set([
88
89
  "provider_too_large",
@@ -98,6 +99,8 @@ function transcriptFixModel(code, failed, models) {
98
99
  const rank = (entry) => entry.funding === "workspace_subscription" ? 0 : charged(entry) ? 3 : entry.usdPerHour === null ? 1 : 2;
99
100
  const candidates = models.filter((entry) => {
100
101
  if (!entry.available || !entry.capabilities.batch) return false;
102
+ if (code === "subscription_api_unavailable" && entry.funding === "workspace_subscription")
103
+ return false;
101
104
  if (failed && entry.providerId === failed.providerId) {
102
105
  if (!MODEL_FAILURES.has(code) || entry.model === failed.model) return false;
103
106
  }
@@ -121,6 +124,10 @@ function meetingStatusLabel(phase, msg = defaultText) {
121
124
  }
122
125
  function transcriptErrorText(code, msg = defaultText, model) {
123
126
  switch (code) {
127
+ case "subscription_plan_required":
128
+ return msg("lib.format.subscriptionUpgradeRequiredHeadline");
129
+ case "subscription_api_unavailable":
130
+ return msg("meetings.recordings.errorSubscriptionApiUnavailable");
124
131
  case "missing_provider_key": {
125
132
  if (!model) return msg("meetings.recordings.errorMissingProviderKey");
126
133
  const names = { modelName: model.modelName, providerName: model.providerName };
@@ -448,4 +455,4 @@ export {
448
455
  tidyLiveText,
449
456
  tidyPartialText
450
457
  };
451
- //# sourceMappingURL=chunk-PZKHST7A.js.map
458
+ //# sourceMappingURL=chunk-OQ6QOPK6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/recordings-model.ts"],"sourcesContent":["/**\n * Plain helpers for meeting UIs (web, phone, embedders): words for a recording's state, clock\n * times, speaker names and colors, and the transcript grouped into turns.\n * No React here, so each rule is tested on its own.\n */\nimport {\n recordingMicrophoneIsOwner,\n recordingSpeakerDefault,\n type Recording,\n type RecordingSpeaker,\n type RecordingTrack,\n type RecordingTranscriptSegment,\n type RecordingTranscriptionModel,\n type RecordingTranscriptVersion,\n} from \"@opengeni/contracts\";\nimport type { RecorderSnapshot, RecordingUploadStatus } from \"@opengeni/sdk/recordings\";\nimport { createOpenGeniText, type OpenGeniText } from \"./messages/runtime\";\n\nconst defaultText = createOpenGeniText();\n\n/** \"4:07\", \"1:02:09\". Never negative; rounds down to the second. */\nexport function formatClock(milliseconds: number): string {\n const total = Math.max(0, Math.floor(milliseconds / 1000));\n const hours = Math.floor(total / 3600);\n const minutes = Math.floor((total % 3600) / 60);\n const seconds = total % 60;\n const ss = String(seconds).padStart(2, \"0\");\n return hours > 0 ? `${hours}:${String(minutes).padStart(2, \"0\")}:${ss}` : `${minutes}:${ss}`;\n}\n\n/** \"45 sec\", \"12 min\", \"1 h 5 min\": a recording's length in a list, in `msg`'s language. */\nexport function formatDuration(milliseconds: number, msg: OpenGeniText = defaultText): string {\n const seconds = Math.round(Math.max(0, milliseconds) / 1000);\n if (seconds < 60) return msg(\"meetings.recordings.durationSeconds\", { seconds });\n const minutes = Math.round(seconds / 60);\n if (minutes < 60) return msg(\"meetings.recordings.durationMinutes\", { minutes });\n const hours = Math.floor(minutes / 60);\n const rest = minutes % 60;\n return rest === 0\n ? msg(\"meetings.recordings.durationHours\", { hours })\n : msg(\"meetings.recordings.durationHoursMinutes\", { hours, minutes: rest });\n}\n\nexport type MeetingPhase =\n | { kind: \"uploading\" }\n | { kind: \"transcribing\"; version: RecordingTranscriptVersion | null }\n | { kind: \"ready\"; version: RecordingTranscriptVersion }\n | { kind: \"failed\"; version: RecordingTranscriptVersion | null }\n | { kind: \"no_transcript\" };\n\n/**\n * Where a recording is in its life, from the reader's side. A recording still\n * capturing is \"uploading\" (kept for compatibility; it reads \"In progress\"):\n * it is still being recorded, or its last audio is still on its way from the\n * device that recorded it. That device knows which, so it asks\n * {@link meetingHereStatus}. A failed re-run leaves an older complete version\n * current, so the transcript stays readable.\n */\nexport function meetingPhase(recording: Recording): MeetingPhase {\n if (recording.state === \"capturing\") return { kind: \"uploading\" };\n const version = recording.transcript;\n if (version?.state === \"complete\") return { kind: \"ready\", version };\n if (version?.state === \"queued\" || version?.state === \"processing\") {\n return { kind: \"transcribing\", version };\n }\n if (version?.state === \"failed\" || recording.state === \"failed\") {\n return { kind: \"failed\", version: version ?? null };\n }\n if (recording.state === \"processing\") return { kind: \"transcribing\", version: null };\n return { kind: \"no_transcript\" };\n}\n\n/**\n * What this device's recorder knows about one meeting that the server can't\n * yet: it is recording (or paused) here, or it was stopped here and its last\n * few seconds of audio are on their way, which a person reads as Transcribing.\n * The audio uploads while it records, so nothing is left to \"upload\" after\n * Stop unless the connection is down or the server refused it. Null when this\n * device isn't recording that meeting, or when capture failed before Stop\n * finished it; the server's {@link meetingPhase} says the rest.\n *\n * A meeting recorded here earlier (before a reload, a restart, or a move to\n * another page) is finished in the background from the audio kept here: it is\n * `uploading` until the server has it all, then `transcribing`, and\n * `upload_failed` when the server refused it, keeping the audio here for a retry.\n */\nexport type MeetingHereStatus =\n | \"recording\"\n | \"paused\"\n | \"uploading\"\n | \"transcribing\"\n | \"waiting_for_connection\"\n | \"upload_failed\";\n\nexport function meetingHereStatus(\n recorder:\n | (Pick<RecorderSnapshot, \"state\" | \"recordingId\" | \"upload\"> & {\n uploads?: Readonly<Record<string, RecordingUploadStatus>> | undefined;\n })\n | null,\n recordingId: string,\n online = true,\n): MeetingHereStatus | null {\n if (!recorder) return null;\n if (recorder.recordingId !== recordingId) {\n const upload = recorder.uploads?.[recordingId];\n if (!upload || upload.discarded) return null;\n if (upload.failed) return \"upload_failed\";\n if (upload.finalized) return \"transcribing\";\n if (!online || upload.retryingAfterError) return \"waiting_for_connection\";\n return \"uploading\";\n }\n if (recorder.state === \"recording\") return \"recording\";\n if (recorder.state === \"paused\") return \"paused\";\n if (recorder.state === \"idle\" || recorder.state === \"starting\") return null;\n const upload = recorder.upload;\n if (upload?.discarded) return null;\n if (upload?.failed) return \"upload_failed\";\n // Capture failed mid-recording: nothing finishes it until this browser\n // recovers it, so it isn't transcribing yet.\n if (recorder.state === \"failed\" && !upload?.finalized) return null;\n if (!upload?.finalized && (!online || upload?.retryingAfterError)) {\n return \"waiting_for_connection\";\n }\n return \"transcribing\";\n}\n\n/** The upload failure this device's recorder holds for a meeting, current or earlier. */\nexport function meetingUploadFailure(\n recorder:\n | (Pick<RecorderSnapshot, \"recordingId\" | \"upload\"> & {\n uploads?: Readonly<Record<string, RecordingUploadStatus>> | undefined;\n })\n | null,\n recordingId: string,\n): { code: string; message: string } | null {\n if (!recorder) return null;\n const upload =\n recorder.recordingId === recordingId ? recorder.upload : recorder.uploads?.[recordingId];\n return upload?.failed ?? null;\n}\n\n/** Audio up to this long is usually transcribed in a minute or two. */\nconst SHORT_AUDIO_MILLISECONDS = 5 * 60_000;\n\n/**\n * What to say while a meeting is transcribed: a short one is done in a minute\n * or two; a long one takes a while (its words may be timed on our side), so\n * the line says how much audio it is and that the reader needn't wait.\n */\nexport function transcribingText(\n durationMilliseconds: number,\n msg: OpenGeniText = defaultText,\n): string {\n if (durationMilliseconds <= SHORT_AUDIO_MILLISECONDS) {\n return msg(\"meetings.detailPage.transcribingThisUsuallyTakesA\");\n }\n return msg(\"meetings.detailPage.transcribingLongAudio\", {\n duration: formatDuration(durationMilliseconds, msg),\n });\n}\n\n/** Refusals that credits, or a model that doesn't use them, fix. */\nexport function transcriptNeedsCredits(code: string | null | undefined): boolean {\n return (\n code === \"insufficient_credits\" ||\n code === \"allowance_exhausted\" ||\n code === \"monthly_model_cost_limit\"\n );\n}\n\n/** Failures of the provider itself: any other provider may work. */\nconst PROVIDER_FAILURES = new Set([\n \"missing_provider_key\",\n \"provider_unauthorized\",\n \"provider_quota_exceeded\",\n \"policy_blocked\",\n \"subscription_api_unavailable\",\n]);\n/** Failures of the model: another model, even the same provider's, may work. */\nconst MODEL_FAILURES = new Set([\n \"provider_too_large\",\n \"provider_not_supported\",\n \"model_unavailable\",\n]);\n\n/**\n * The model to transcribe a failed meeting with instead, as its one direct\n * fix: usable here, not the one that failed (nor its provider, when the\n * provider was the problem), and for a credit refusal one that uses no\n * credits. A subscription comes first, then a model the deployment covers,\n * then the workspace's own key. Null when no other model would help.\n */\nexport function transcriptFixModel(\n code: string | null | undefined,\n failed: { providerId: string; model: string } | null,\n models: readonly RecordingTranscriptionModel[],\n): RecordingTranscriptionModel | null {\n const credits = transcriptNeedsCredits(code);\n if (!code || (!credits && !PROVIDER_FAILURES.has(code) && !MODEL_FAILURES.has(code))) {\n return null;\n }\n const charged = (entry: RecordingTranscriptionModel) =>\n entry.chargedInCredits ?? (entry.funding === \"deployment\" && entry.usdPerHour !== null);\n const rank = (entry: RecordingTranscriptionModel) =>\n entry.funding === \"workspace_subscription\"\n ? 0\n : charged(entry)\n ? 3\n : entry.usdPerHour === null\n ? 1\n : 2;\n const candidates = models.filter((entry) => {\n if (!entry.available || !entry.capabilities.batch) return false;\n if (code === \"subscription_api_unavailable\" && entry.funding === \"workspace_subscription\")\n return false;\n if (failed && entry.providerId === failed.providerId) {\n if (!MODEL_FAILURES.has(code) || entry.model === failed.model) return false;\n }\n // The server says which models are charged in credits.\n return !credits || !charged(entry);\n });\n return [...candidates].sort((a, b) => rank(a) - rank(b))[0] ?? null;\n}\n\n/** The one-word state a list row shows, or null when there is nothing to say. */\nexport function meetingStatusLabel(\n phase: MeetingPhase,\n msg: OpenGeniText = defaultText,\n): { label: string; tone: \"progress\" | \"danger\" | \"neutral\" } | null {\n switch (phase.kind) {\n case \"uploading\":\n return { label: msg(\"meetings.recordings.inProgress\"), tone: \"progress\" };\n case \"transcribing\":\n return { label: msg(\"meetings.recordings.transcribing\"), tone: \"progress\" };\n case \"failed\":\n return { label: msg(\"meetings.recordings.transcriptFailed\"), tone: \"danger\" };\n case \"no_transcript\":\n return { label: msg(\"meetings.recordings.noTranscript\"), tone: \"neutral\" };\n case \"ready\":\n return null;\n }\n}\n\n/**\n * Plain words for a transcription error code, with what to do about it. The\n * codes are the worker's: its own (`missing_provider_key`, `invalid_audio`,\n * ...) and the provider's, prefixed `provider_`. `model` names the model the\n * version ran and its provider, when the caller knows them, so a missing key\n * says which provider isn't connected rather than that none is. Its funding\n * says who can connect it (the deployment's own key is its operator's), and\n * `pinned` that the deployment offers no other model to try instead.\n */\nexport function transcriptErrorText(\n code: string | null,\n msg: OpenGeniText = defaultText,\n model?: {\n modelName: string;\n providerName: string;\n funding?: string | undefined;\n pinned?: boolean | undefined;\n } | null,\n): string {\n switch (code) {\n case \"subscription_plan_required\":\n return msg(\"lib.format.subscriptionUpgradeRequiredHeadline\");\n case \"subscription_api_unavailable\":\n return msg(\"meetings.recordings.errorSubscriptionApiUnavailable\");\n case \"missing_provider_key\": {\n if (!model) return msg(\"meetings.recordings.errorMissingProviderKey\");\n const names = { modelName: model.modelName, providerName: model.providerName };\n if (model.funding === \"deployment\") {\n return model.pinned\n ? msg(\"meetings.recordings.errorMissingProviderKeyForDeploymentPinned\", names)\n : msg(\"meetings.recordings.errorMissingProviderKeyForDeployment\", names);\n }\n return model.pinned\n ? msg(\"meetings.recordings.errorMissingProviderKeyForPinned\", names)\n : msg(\"meetings.recordings.errorMissingProviderKeyFor\", names);\n }\n case \"provider_unauthorized\":\n return msg(\"meetings.recordings.errorProviderUnauthorized\");\n case \"provider_quota_exceeded\":\n return msg(\"meetings.recordings.errorProviderQuotaExceeded\");\n case \"provider_too_large\":\n return msg(\"meetings.recordings.errorProviderTooLarge\");\n case \"provider_not_supported\":\n case \"model_unavailable\":\n return msg(\"meetings.recordings.errorModelUnavailable\");\n case \"invalid_audio\":\n case \"provider_invalid_audio\":\n case \"ffmpeg_failed\":\n return msg(\"meetings.recordings.errorInvalidAudio\");\n case \"storage_unavailable\":\n return msg(\"meetings.recordings.errorStorageUnavailable\");\n case \"region_restricted\":\n return msg(\"inferenceRegion.notSupportedInEu\");\n case \"insufficient_credits\":\n return model\n ? msg(\"meetings.recordings.errorInsufficientCreditsFor\", { modelName: model.modelName })\n : msg(\"meetings.recordings.errorInsufficientCredits\");\n case \"allowance_exhausted\":\n return msg(\"meetings.recordings.errorAllowanceExhausted\");\n case \"monthly_model_cost_limit\":\n return msg(\"meetings.recordings.errorMonthlyCostLimit\");\n case \"policy_blocked\":\n return msg(\"meetings.recordings.errorPolicyBlocked\");\n case \"timed_out\":\n return msg(\"meetings.recordings.errorTimedOut\");\n default:\n return msg(\"meetings.recordings.errorUnknown\");\n }\n}\n\n/**\n * The name to show for a speaker: the person or plain name someone gave it,\n * else \"Speaker 2\" for a model's label, or the track's role for a track label.\n */\nexport function speakerDisplayName(\n label: string | null,\n speakers: readonly RecordingSpeaker[],\n tracks: readonly RecordingTrack[],\n msg: OpenGeniText = defaultText,\n): string {\n if (!label) return msg(\"meetings.recordings.unknownSpeaker\");\n const speaker = speakers.find((candidate) => candidate.label === label);\n if (speaker && speakerIsNamed(label, speakers) && speaker.name.trim()) return speaker.name;\n return defaultSpeakerName(label, tracks, msg);\n}\n\n/** \"Speaker 2\", \"Microphone\" or \"Shared audio\" for an unnamed label, in `msg`'s language. */\nexport function defaultSpeakerName(\n label: string,\n tracks: readonly RecordingTrack[],\n msg: OpenGeniText = defaultText,\n): string {\n const named = recordingSpeakerDefault(label, tracks);\n switch (named.kind) {\n case \"speaker\":\n return msg(\"meetings.recordings.speakerNumber\", { number: named.number });\n case \"microphone\":\n return msg(\"meetings.recordings.microphone\");\n case \"system\":\n return msg(\"meetings.recordings.sharedAudio\");\n case \"track\":\n return msg(\"meetings.recordings.trackNumber\", { number: named.number });\n case \"label\":\n return named.label;\n }\n}\n\n/**\n * A live preview lane's name when the microphone is the person recording\n * (computer or tab audio beside it): `ownerName` for the microphone and\n * \"Others\" for the computer or tab audio. Null otherwise, when lanes are\n * named by their source.\n */\nexport function ownerLiveLaneName(\n tracks: readonly { trackNumber: number; source: RecordingTrack[\"source\"] }[],\n trackNumber: number,\n ownerName: string,\n msg: OpenGeniText = defaultText,\n): string | null {\n if (!recordingMicrophoneIsOwner(tracks)) return null;\n const source = tracks.find((track) => track.trackNumber === trackNumber)?.source;\n if (source === \"microphone\") return ownerName;\n if (source === \"system\") return msg(\"meetings.liveTranscript.others\");\n return null;\n}\n\n/** True when the label has a name of its own: a person, a plain name, or a suggestion. */\nexport function speakerIsNamed(label: string, speakers: readonly RecordingSpeaker[]): boolean {\n const speaker = speakers.find((candidate) => candidate.label === label);\n return Boolean(speaker && (speaker.personId || speaker.source));\n}\n\n/**\n * A stable color slot (1-6, the chart palette) per speaker label, in order of\n * first appearance so the first voice is always the same hue.\n */\nexport function speakerColorSlots(\n segments: readonly RecordingTranscriptSegment[],\n): Map<string, number> {\n const slots = new Map<string, number>();\n for (const segment of segments) {\n const label = segment.speakerLabel;\n if (label && !slots.has(label)) slots.set(label, (slots.size % 6) + 1);\n }\n return slots;\n}\n\nexport type TranscriptTurn = {\n /** First segment index; stable across edits that keep the order. */\n key: number;\n speakerLabel: string | null;\n startMilliseconds: number;\n endMilliseconds: number;\n segments: RecordingTranscriptSegment[];\n};\n\n/**\n * Consecutive segments of one speaker read as one turn, the way a person reads\n * a transcript. A long pause starts a new turn even for the same voice, so a\n * timestamp is never far from the words it marks.\n */\nexport function groupTranscriptTurns(\n segments: readonly RecordingTranscriptSegment[],\n maxGapMilliseconds = 30_000,\n): TranscriptTurn[] {\n const turns: TranscriptTurn[] = [];\n for (const segment of segments) {\n const last = turns.at(-1);\n if (\n last &&\n last.speakerLabel === segment.speakerLabel &&\n segment.startMilliseconds - last.endMilliseconds <= maxGapMilliseconds\n ) {\n last.segments.push(segment);\n last.endMilliseconds = Math.max(last.endMilliseconds, segment.endMilliseconds);\n continue;\n }\n turns.push({\n key: segment.index,\n speakerLabel: segment.speakerLabel,\n startMilliseconds: segment.startMilliseconds,\n endMilliseconds: segment.endMilliseconds,\n segments: [segment],\n });\n }\n return turns;\n}\n\n/** The segment playing at `milliseconds`, or the last one that started before it. */\nexport function activeSegmentIndex(\n segments: readonly RecordingTranscriptSegment[],\n milliseconds: number,\n): number | null {\n let low = 0;\n let high = segments.length - 1;\n let found: number | null = null;\n while (low <= high) {\n const middle = (low + high) >> 1;\n const segment = segments[middle]!;\n if (segment.startMilliseconds <= milliseconds) {\n found = middle;\n low = middle + 1;\n } else {\n high = middle - 1;\n }\n }\n return found === null ? null : segments[found]!.index;\n}\n\n/** \"ElevenLabs Scribe v2 · English · 3 speakers\" style facts for a version. */\nexport function versionSummary(\n version: RecordingTranscriptVersion,\n modelName: string | null,\n locale?: string,\n): string[] {\n const parts = [modelName ?? version.model];\n const languages = version.languages.map((code) => languageName(code, locale)).filter(Boolean);\n if (languages.length > 0) parts.push(languages.join(\", \"));\n return parts;\n}\n\n/** English names for common languages, for runtimes without Intl.DisplayNames (Hermes). */\nconst LANGUAGE_NAMES: Record<string, string> = {\n ar: \"Arabic\",\n cs: \"Czech\",\n da: \"Danish\",\n de: \"German\",\n el: \"Greek\",\n en: \"English\",\n es: \"Spanish\",\n fi: \"Finnish\",\n fr: \"French\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n id: \"Indonesian\",\n is: \"Icelandic\",\n it: \"Italian\",\n ja: \"Japanese\",\n ko: \"Korean\",\n nb: \"Norwegian Bokmål\",\n nl: \"Dutch\",\n nn: \"Norwegian Nynorsk\",\n no: \"Norwegian\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n ro: \"Romanian\",\n ru: \"Russian\",\n sv: \"Swedish\",\n th: \"Thai\",\n tr: \"Turkish\",\n uk: \"Ukrainian\",\n vi: \"Vietnamese\",\n zh: \"Chinese\",\n};\n\n// Providers may report ISO 639-2 codes (\"eng\"). Hermes, the phone's\n// JavaScript engine, does not canonicalize them to \"en\", so map them here.\nconst THREE_LETTER_LANGUAGES: Record<string, string> = {\n ara: \"ar\",\n ces: \"cs\",\n cze: \"cs\",\n dan: \"da\",\n deu: \"de\",\n ger: \"de\",\n ell: \"el\",\n gre: \"el\",\n eng: \"en\",\n spa: \"es\",\n fin: \"fi\",\n fra: \"fr\",\n fre: \"fr\",\n heb: \"he\",\n hin: \"hi\",\n hun: \"hu\",\n ind: \"id\",\n isl: \"is\",\n ice: \"is\",\n ita: \"it\",\n jpn: \"ja\",\n kor: \"ko\",\n nob: \"nb\",\n nld: \"nl\",\n dut: \"nl\",\n nno: \"nn\",\n nor: \"no\",\n pol: \"pl\",\n por: \"pt\",\n ron: \"ro\",\n rum: \"ro\",\n rus: \"ru\",\n swe: \"sv\",\n tha: \"th\",\n tur: \"tr\",\n ukr: \"uk\",\n vie: \"vi\",\n zho: \"zh\",\n chi: \"zh\",\n};\n\n/**\n * \"English\" for \"en\" or a provider's \"eng\", named in `locale` (\"engelsk\" in Norwegian);\n * the code itself when no name is known.\n */\nexport function languageName(code: string, locale?: string): string {\n let tag = code;\n try {\n tag = Intl.getCanonicalLocales(code)[0] ?? code;\n } catch {\n // Not a well-formed tag: show it as given.\n }\n const [primary, ...rest] = tag.split(\"-\");\n const twoLetter = THREE_LETTER_LANGUAGES[primary!.toLowerCase()];\n if (twoLetter) tag = [twoLetter, ...rest].join(\"-\");\n try {\n const name = new Intl.DisplayNames(locale ? [locale, \"en\"] : [\"en\"], { type: \"language\" }).of(\n tag,\n );\n // Some languages write language names in lower case (\"norsk\"); a label starts upper case.\n if (name && name !== tag) return name.charAt(0).toLocaleUpperCase(locale) + name.slice(1);\n } catch {\n // No Intl.DisplayNames here.\n }\n return LANGUAGE_NAMES[tag] ?? LANGUAGE_NAMES[tag.split(\"-\")[0]!] ?? tag;\n}\n\nconst MONTH_KEYS = [\n \"time.month.jan\",\n \"time.month.feb\",\n \"time.month.mar\",\n \"time.month.apr\",\n \"time.month.may\",\n \"time.month.jun\",\n \"time.month.jul\",\n \"time.month.aug\",\n \"time.month.sep\",\n \"time.month.oct\",\n \"time.month.nov\",\n \"time.month.dec\",\n] as const;\n\n/**\n * A short, readable default title for a new recording, in local time and the\n * app's own date words and 24-hour clock: \"Meeting, 23 Oct, 14:05\".\n */\nexport function defaultMeetingTitle(now: Date, msg: OpenGeniText = defaultText): string {\n const month = msg(MONTH_KEYS[now.getMonth()] ?? \"time.month.jan\");\n const date = msg(\"time.date\", { day: now.getDate(), month });\n const time = `${String(now.getHours()).padStart(2, \"0\")}:${String(now.getMinutes()).padStart(2, \"0\")}`;\n return msg(\"meetings.recordings.defaultTitle\", { date, time });\n}\n\n/**\n * The title to show for a meeting. One started without a title carries the\n * server's stand-in, \"Recording 2026-10-26 11:15 UTC\"; it shows as a\n * recorder would have named it, in the viewer's language and time.\n */\nexport function meetingTitle(\n recording: Pick<Recording, \"title\" | \"startedAt\">,\n msg: OpenGeniText = defaultText,\n): string {\n const title = recording.title.trim();\n const startedAt = new Date(recording.startedAt);\n if (Number.isNaN(startedAt.getTime())) return title;\n if (title && title !== serverDefaultTitle(startedAt)) return title;\n return defaultMeetingTitle(startedAt, msg);\n}\n\n/** The title the server gives a recording started without one. */\nfunction serverDefaultTitle(startedAt: Date): string {\n return `Recording ${startedAt.toISOString().slice(0, 16).replace(\"T\", \" \")} UTC`;\n}\n\n/** A finished stretch of live text on one track, as the live preview shows it. */\nexport type LiveTranscriptLine = {\n trackNumber: number;\n startMilliseconds: number;\n /** When it ended; without it the line is taken as a moment at its start. */\n endMilliseconds?: number;\n text: string;\n};\n\n/** Consecutive live lines from one track, read as one turn. */\nexport type LiveTranscriptTurn = {\n key: string;\n trackNumber: number;\n startMilliseconds: number;\n texts: string[];\n};\n\n/** Consecutive lines from one track read as one turn. */\nexport function groupLiveTurns(lines: readonly LiveTranscriptLine[]): LiveTranscriptTurn[] {\n const sorted = [...lines].sort(\n (a, b) => a.startMilliseconds - b.startMilliseconds || a.trackNumber - b.trackNumber,\n );\n const turns: LiveTranscriptTurn[] = [];\n for (const line of sorted) {\n const text = line.text.trim();\n if (!text) continue;\n const last = turns.at(-1);\n if (last && last.trackNumber === line.trackNumber) {\n last.texts.push(text);\n continue;\n }\n turns.push({\n key: `${line.trackNumber}:${line.startMilliseconds}`,\n trackNumber: line.trackNumber,\n startMilliseconds: line.startMilliseconds,\n texts: [text],\n });\n }\n return turns;\n}\n\n/** How far apart a microphone line and computer audio may be and still be one sound. */\nconst LIVE_ECHO_SLACK_MILLISECONDS = 2_000;\n/** Matching words an echoed line needs, so one shared \"ja\" or \"okay\" stays. */\nconst LIVE_ECHO_MIN_MATCHED_WORDS = 2;\n/** The share of a microphone line's words heard in computer audio for it to be an echo. */\nconst LIVE_ECHO_MIN_SHARE = 0.7;\n\n/** A line's words as compared across tracks: letters and digits only, any case. */\nfunction liveWordKeys(text: string): string[] {\n return text\n .normalize(\"NFKC\")\n .toLocaleLowerCase()\n .split(/\\s+/u)\n .map((word) => word.replace(/[^\\p{L}\\p{N}]+/gu, \"\"))\n .filter(Boolean);\n}\n\n/**\n * Without headphones the microphone also hears the others in a call from the\n * speakers, so the live preview would show their words twice: from computer\n * audio, and again as if the person recording said them. Leave out a\n * microphone line when most of its words (at least two, and 70%) were heard\n * in computer audio at the same moment. The preview's text comes a sentence\n * at a time, so a line that also holds the person's own words stays whole.\n * The transcript does the same word by word once the recording is done.\n */\nexport function withoutLiveMicrophoneEchoes<Line extends LiveTranscriptLine>(\n lines: readonly Line[],\n tracks: readonly { trackNumber: number; source: RecordingTrack[\"source\"] }[],\n): Line[] {\n if (!recordingMicrophoneIsOwner(tracks)) return [...lines];\n const sourceOf = (trackNumber: number) =>\n tracks.find((track) => track.trackNumber === trackNumber)?.source;\n const computer = lines\n .filter((line) => sourceOf(line.trackNumber) === \"system\")\n .map((line) => ({\n start: line.startMilliseconds,\n end: Math.max(line.startMilliseconds, line.endMilliseconds ?? line.startMilliseconds),\n keys: new Set(liveWordKeys(line.text)),\n }));\n if (computer.length === 0) return [...lines];\n return lines.filter((line) => {\n if (sourceOf(line.trackNumber) !== \"microphone\") return true;\n const keys = liveWordKeys(line.text);\n if (keys.length < LIVE_ECHO_MIN_MATCHED_WORDS) return true;\n const start = line.startMilliseconds;\n const end = Math.max(start, line.endMilliseconds ?? start);\n const heard = computer.filter(\n (other) =>\n other.start <= end + LIVE_ECHO_SLACK_MILLISECONDS &&\n other.end >= start - LIVE_ECHO_SLACK_MILLISECONDS,\n );\n if (heard.length === 0) return true;\n const matched = keys.filter((key) => heard.some((other) => other.keys.has(key))).length;\n return !(\n matched >= LIVE_ECHO_MIN_MATCHED_WORDS && matched / keys.length >= LIVE_ECHO_MIN_SHARE\n );\n });\n}\n\n/**\n * Joins a turn's pieces into readable text. Streaming providers send pieces\n * that end in a trailing ellipsis while they wait, or a space before a full\n * stop; joined naively those read as \"between you….\" or \"dog .\".\n */\nexport function tidyLiveText(pieces: readonly string[]): string {\n return pieces\n .map((piece) => piece.trim())\n .filter(Boolean)\n .join(\" \")\n .replace(/\\s+([.,!?;:])/g, \"$1\")\n .replace(/(?:…|\\.{3})(?=[.,!?;:…])/g, \"\")\n .replace(/([,!?;:])\\1+/g, \"$1\")\n .replace(/(?<!\\.)\\.\\.(?!\\.)/g, \".\")\n .replace(/\\s{2,}/g, \" \");\n}\n\n/** Words still being heard, without the provider's \"still listening\" ellipsis. */\nexport function tidyPartialText(text: string): string {\n return tidyLiveText([text]).replace(/\\s*(?:…|\\.{3})$/, \"\");\n}\n"],"mappings":"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","names":["upload"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  rememberedProjectCompute
4
- } from "./chunk-AVXDIRRW.js";
4
+ } from "./chunk-UMRUDYUK.js";
5
5
 
6
6
  // src/app/routes/sessions-index-hydration.tsx
7
7
  function initialNewSessionProjectLaunchIntent(launchChannelId) {
@@ -53,4 +53,4 @@ export {
53
53
  resolveHydratedNewSessionProjectSelection,
54
54
  hydratedNewSessionProjectProvenancePresent
55
55
  };
56
- //# sourceMappingURL=chunk-IFSXVU2S.js.map
56
+ //# sourceMappingURL=chunk-OQHTFOCA.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-J4GZTERI.js";
5
5
  import {
6
6
  useSiteToolConsentHost
7
- } from "./chunk-77BHKC43.js";
7
+ } from "./chunk-APG6CEG7.js";
8
8
  import {
9
9
  useAppApi
10
10
  } from "./chunk-XIQPI2NM.js";
@@ -47,4 +47,4 @@ export {
47
47
  useConsoleSiteViewer,
48
48
  useConsoleSiteToolBridge
49
49
  };
50
- //# sourceMappingURL=chunk-OXQ2SXVC.js.map
50
+ //# sourceMappingURL=chunk-P56AVROH.js.map
@@ -10,23 +10,23 @@ import {
10
10
  } from "./chunk-M27WO6W3.js";
11
11
  import {
12
12
  Disclosure
13
- } from "./chunk-IJR6VOLU.js";
13
+ } from "./chunk-ZVR6DUZH.js";
14
14
  import {
15
15
  useDesktopThisComputer
16
- } from "./chunk-DWJ6J3YW.js";
16
+ } from "./chunk-IXISEVD7.js";
17
17
  import {
18
18
  ComputerUseRow
19
- } from "./chunk-PVB4YVDP.js";
19
+ } from "./chunk-EOXV5XGY.js";
20
20
  import {
21
21
  t
22
- } from "./chunk-HEGV4QMS.js";
22
+ } from "./chunk-J42QE4VO.js";
23
23
  import {
24
24
  useAppContext
25
25
  } from "./chunk-JDFDPMKX.js";
26
26
  import {
27
27
  ChoiceCard,
28
28
  ChoiceCards
29
- } from "./chunk-N3FM4BNA.js";
29
+ } from "./chunk-TKHRGY2P.js";
30
30
  import {
31
31
  SegmentedControl
32
32
  } from "./chunk-RGBI63KJ.js";
@@ -647,4 +647,4 @@ export {
647
647
  formatConnectExpiry,
648
648
  ConnectMachineDialog
649
649
  };
650
- //# sourceMappingURL=chunk-CXAN2FHF.js.map
650
+ //# sourceMappingURL=chunk-PCEJHHGP.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-CM7LVUKC.js";
5
5
  import {
6
6
  useOpenGeniText
7
- } from "./chunk-QPQ7R77C.js";
7
+ } from "./chunk-7SU4YVZ5.js";
8
8
 
9
9
  // src/components/queue-surface-state.tsx
10
10
  import { Loader2Icon, RotateCwIcon } from "lucide-react";
@@ -100,4 +100,4 @@ export {
100
100
  QueueStoppingStatus,
101
101
  QueueErrorAlert
102
102
  };
103
- //# sourceMappingURL=chunk-5MIBQ4P5.js.map
103
+ //# sourceMappingURL=chunk-PHGQGVVL.js.map
@@ -11,14 +11,14 @@ import {
11
11
  } from "./chunk-JWKGPA6Q.js";
12
12
  import {
13
13
  projectPendingApprovals
14
- } from "./chunk-VXORMNU4.js";
14
+ } from "./chunk-YBHAAULA.js";
15
15
  import {
16
16
  buildTimeline,
17
17
  groupTimeline,
18
18
  isToolOutputPreviewEvent,
19
19
  sessionStatusFromEvents,
20
20
  useToolOutputReads
21
- } from "./chunk-PF2WU2IL.js";
21
+ } from "./chunk-ND4IQJUM.js";
22
22
  import {
23
23
  useFileAttachments
24
24
  } from "./chunk-I6FIXEL4.js";
@@ -50,7 +50,7 @@ import {
50
50
  FILE_ONLY_MESSAGE_TEXT,
51
51
  notifyObserver,
52
52
  useComposer
53
- } from "./chunk-WYGTAQMX.js";
53
+ } from "./chunk-AZFVRPQM.js";
54
54
  import {
55
55
  DEFAULT_TRANSIENT_READ_RETRY,
56
56
  projectionReadThrough,
@@ -81,7 +81,7 @@ import {
81
81
  } from "./chunk-ZHC47M2B.js";
82
82
  import {
83
83
  useOpenGeniText
84
- } from "./chunk-QPQ7R77C.js";
84
+ } from "./chunk-7SU4YVZ5.js";
85
85
 
86
86
  // src/hooks/use-session.ts
87
87
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -1694,7 +1694,7 @@ function useSessionEvents(sessionId, options = {}) {
1694
1694
  let generation = navigationGenerationRef.current;
1695
1695
  const current = () => ownsNavigation() && generation === navigationGenerationRef.current;
1696
1696
  try {
1697
- const { resolveLatestQuestion } = await import("./latest-question-RNVF262Q.js");
1697
+ const { resolveLatestQuestion } = await import("./latest-question-KA7AQYVI.js");
1698
1698
  if (!current()) return null;
1699
1699
  const destination = await resolveLatestQuestion(t, {
1700
1700
  client,
@@ -4458,4 +4458,4 @@ export {
4458
4458
  useSessionReadAcknowledgement,
4459
4459
  useNewConversation
4460
4460
  };
4461
- //# sourceMappingURL=chunk-FLWQJDJ5.js.map
4461
+ //# sourceMappingURL=chunk-PUZRHEQI.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-XEA5BCMA.js";
8
8
  import {
9
9
  useOpenGeniText
10
- } from "./chunk-QPQ7R77C.js";
10
+ } from "./chunk-7SU4YVZ5.js";
11
11
 
12
12
  // src/components/session-capability-frame.tsx
13
13
  import { CheckIcon, InfoIcon, ShieldCheckIcon, XIcon } from "lucide-react";
@@ -163,4 +163,4 @@ function SessionCapabilityFrame({
163
163
  export {
164
164
  SessionCapabilityFrame
165
165
  };
166
- //# sourceMappingURL=chunk-OP2GD6QW.js.map
166
+ //# sourceMappingURL=chunk-PV7U6OOJ.js.map
@@ -216,6 +216,7 @@ function useRecorder(options = {}) {
216
216
  ...merged.visibility ? { visibility: merged.visibility } : {},
217
217
  ...merged.externalRef ? { externalRef: merged.externalRef } : {},
218
218
  ...merged.metadata ? { metadata: merged.metadata } : {},
219
+ ...merged.calendarEvent ? { calendarEvent: merged.calendarEvent } : {},
219
220
  ...merged.transcription ? { transcription: merged.transcription } : {},
220
221
  ...merged.ownerName?.trim() ? { ownerName: merged.ownerName } : {},
221
222
  ...merged.microphone !== void 0 ? { microphone: merged.microphone } : {},
@@ -751,4 +752,4 @@ export {
751
752
  useRecordingModels,
752
753
  useRecordingNotes
753
754
  };
754
- //# sourceMappingURL=chunk-SPD4ULVB.js.map
755
+ //# sourceMappingURL=chunk-PYMROAWS.js.map