@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,16 +1,22 @@
1
1
  "use client";
2
2
  import {
3
3
  SubscriptionAccountMenu
4
- } from "./chunk-O4JOE3R7.js";
4
+ } from "./chunk-G55NAU5M.js";
5
+ import {
6
+ codexWindowInputs,
7
+ subscriptionLimit,
8
+ subscriptionPlanLabel,
9
+ subscriptionWindows
10
+ } from "./chunk-RBOHWUSN.js";
5
11
  import {
6
12
  BillingClassMark
7
- } from "./chunk-KFNZZ2N6.js";
13
+ } from "./chunk-KKGRDBMK.js";
8
14
  import {
9
15
  Skeleton
10
16
  } from "./chunk-HJO32O7Z.js";
11
17
  import {
12
18
  isCodexProductModel
13
- } from "./chunk-D3PTVN2I.js";
19
+ } from "./chunk-BGIYL26H.js";
14
20
  import {
15
21
  useSessionModelAccount
16
22
  } from "./chunk-LWNBJHJM.js";
@@ -34,17 +40,6 @@ var PROVIDER = {
34
40
  function subscriptionProviderPresentation(provider) {
35
41
  return PROVIDER[provider] ?? { name: "Subscription", billingClass: "external" };
36
42
  }
37
- var WINDOW_LABEL = {
38
- // Neutral ids: they do not say how long the window is.
39
- primary: "Primary",
40
- secondary: "Secondary",
41
- five_hour: "5h",
42
- seven_day: "Week",
43
- seven_day_opus: "Week \xB7 Opus",
44
- seven_day_sonnet: "Week \xB7 Sonnet",
45
- overage: "Overage",
46
- billing: "Billing"
47
- };
48
43
  var REFUSAL_COPY = {
49
44
  inactive: "Unavailable",
50
45
  personal_not_allowed: "Turned off here",
@@ -63,16 +58,18 @@ var STATUS_COPY = {
63
58
  limit_reached: "Limit reached"
64
59
  };
65
60
  function time(value) {
66
- if (!value || !Number.isFinite(Date.parse(value))) return null;
67
- return new Date(value).toLocaleString(void 0, {
61
+ if (value === null) return null;
62
+ const at = typeof value === "number" ? value : Date.parse(value);
63
+ if (!Number.isFinite(at)) return null;
64
+ return new Date(at).toLocaleString(void 0, {
68
65
  month: "short",
69
66
  day: "numeric",
70
67
  hour: "numeric",
71
68
  minute: "2-digit"
72
69
  });
73
70
  }
74
- function accountLabel(account) {
75
- return account.label ?? account.email ?? account.plan ?? "Account";
71
+ function accountLabel(account, provider = "") {
72
+ return account.label ?? account.email ?? subscriptionPlanLabel(provider, account.plan) ?? account.plan ?? "Account";
76
73
  }
77
74
  function accountStatus(account) {
78
75
  if (account.refusal && account.refusal !== "inactive") return REFUSAL_COPY[account.refusal];
@@ -82,53 +79,24 @@ function accountStatus(account) {
82
79
  function accountSource(account) {
83
80
  return account.source === "personal" ? "Your account" : account.source === "workspace" ? "This workspace" : account.source === "organization" ? "Organization" : null;
84
81
  }
85
- function windowLabel(id) {
86
- return WINDOW_LABEL[id] ?? id;
87
- }
88
- function subscriptionAccountUsage(usage, now = Date.now()) {
89
- if (!usage) return { message: "No usage reading yet" };
90
- const observed = time(usage.observedAt);
91
- const windows = usage.windows.map((window) => {
92
- const reset = time(window.resetsAt);
93
- const past = reset !== null && Date.parse(window.resetsAt) <= now;
94
- return {
95
- label: windowLabel(window.id),
96
- usedPercent: window.usedPercent,
97
- detail: [
98
- window.status === "unknown" ? "Status unknown" : window.status === "warning" ? "Near its limit" : window.status === "exhausted" ? "Limit reached" : null,
99
- past ? "Reset passed; usage may be outdated" : reset ? `Resets ${reset}` : null
100
- ].filter(Boolean).join(" \xB7 ")
101
- };
102
- });
103
- const exhaustedTime = time(usage.exhaustedUntil);
104
- const exhausted = usage.exhaustedKind !== null && !(usage.exhaustedUntil && Date.parse(usage.exhaustedUntil) <= now);
82
+ function subscriptionAccountUsage(provider, usage, now = Date.now()) {
83
+ const windows = subscriptionWindows(provider, usage?.windows ?? [], now);
84
+ const limit = subscriptionLimit(windows, usage?.exhaustedUntil ?? null, now);
85
+ const until = time(limit.until);
86
+ const observed = time(usage?.observedAt ?? null);
105
87
  return {
106
88
  windows,
107
- ...windows.length === 0 ? {
108
- message: exhausted ? `Limit reached${exhaustedTime ? ` until ${exhaustedTime}` : ""}` : "No usage reading yet"
109
- } : {},
110
- ...observed ? { note: `Updated ${observed}` } : {},
111
- ...windows.length > 0 ? {
112
- summary: `${windows.map(
113
- (window) => `${window.label} ${window.usedPercent === null ? "unknown" : `${Math.round(window.usedPercent)}%`}`
114
- ).join(" \xB7 ")} used`
115
- } : {}
89
+ limit,
90
+ // A limit that no account-wide window shows (a refusal) still says until
91
+ // when; a full model-scoped week (Fable) doesn't show the account's limit.
92
+ message: limit.reached && !windows.some((window) => window.limitReached && !window.scoped) ? `Limit reached${until ? ` until ${until}` : ""}` : windows.length === 0 ? "No usage reading yet" : null,
93
+ note: observed ? `Updated ${observed}` : null
116
94
  };
117
95
  }
118
- function nearLimit(usage) {
119
- return (usage?.windows ?? []).some(
120
- (window) => window.status === "warning" || window.status === "exhausted" || window.usedPercent !== null && window.usedPercent >= 90
121
- );
122
- }
123
- function tightestWindow(windows) {
124
- let tightest;
125
- for (const window of windows ?? []) {
126
- if (window.usedPercent === null || !Number.isFinite(window.usedPercent)) continue;
127
- if (!tightest || window.usedPercent > tightest.usedPercent) {
128
- tightest = { label: window.label, usedPercent: window.usedPercent };
129
- }
130
- }
131
- return tightest;
96
+ function sharedPlan(provider, accounts) {
97
+ const plans = new Set(accounts.map((account) => subscriptionPlanLabel(provider, account.plan)));
98
+ const [only] = plans;
99
+ return plans.size === 1 && only ? only : null;
132
100
  }
133
101
  function showsSubscriptionAccountMenu(state) {
134
102
  return state.unavailable || state.accounts.length > 0 || state.current !== null || state.currentHidden || state.waiting || !state.automatic;
@@ -138,52 +106,66 @@ function subscriptionAccountProvider(modelId, model) {
138
106
  if (isClaudeSubscriptionModelId(modelId)) return "claude";
139
107
  return model ? connectedSubscriptionProvider(model) : null;
140
108
  }
141
- function subscriptionAccountMenuContent(state) {
109
+ function subscriptionAccountMenuContent(state, now = Date.now()) {
142
110
  const { name } = subscriptionProviderPresentation(state.provider);
111
+ const provider = state.provider;
143
112
  const current = state.current;
144
113
  const unknown = state.unavailable && !current && !state.currentHidden;
145
- const displayName = current ? accountLabel(current) : state.currentHidden ? "Account unavailable" : unknown ? "Accounts unavailable" : "Automatic";
114
+ const displayName = current ? accountLabel(current, provider) : state.currentHidden ? "Account unavailable" : unknown ? "Accounts unavailable" : "Automatic";
146
115
  const status = current ? accountStatus(current) : null;
147
116
  const selectionLabel = state.waiting ? "Limit reached" : state.serving && (current || state.currentHidden) ? "Current account" : !state.automatic && !unknown && (!current || current.id === state.chosenId) ? "Chosen account" : current ? "Current account" : "Account selection";
148
- const usageNearLimit = nearLimit(current?.usage);
149
- const tone = current?.status === "needs_relogin" || current?.status === "error" ? "bad" : status || state.waiting || usageNearLimit ? "warn" : "ok";
117
+ const currentUsage = current ? subscriptionAccountUsage(provider, current.usage, now) : null;
118
+ const limitTone = currentUsage?.limit.reached || currentUsage?.limit.near;
119
+ const tone = current?.status === "needs_relogin" || current?.status === "error" ? "bad" : status || state.waiting || limitTone ? "warn" : "ok";
150
120
  const usage = !current ? {
151
121
  message: state.currentHidden ? "Account usage hidden" : unknown ? "Usage unavailable" : "Choose an account to see usage"
152
- } : state.usageCheck === "checking" ? { checking: true } : state.usageCheck === "failed" ? { unavailable: true } : subscriptionAccountUsage(current.usage);
122
+ } : state.usageCheck === "checking" ? { checking: true } : state.usageCheck === "failed" ? { unavailable: true } : {
123
+ windows: currentUsage.windows,
124
+ ...currentUsage.message ? { message: currentUsage.message } : {},
125
+ ...currentUsage.note ? { note: currentUsage.note } : {}
126
+ };
127
+ const plan = sharedPlan(provider, state.accounts);
128
+ const selectedId = state.automatic || unknown ? null : state.chosenId;
153
129
  const accounts = state.accounts.map((account) => {
154
- const rowUsage = account.id === current?.id || state.usageCheck === "checking" ? void 0 : subscriptionAccountUsage(account.usage);
130
+ const label = accountLabel(account, provider);
131
+ const rowStatus = accountStatus(account);
132
+ const rowUsage = account.id === current?.id || state.usageCheck === "checking" ? null : subscriptionAccountUsage(provider, account.usage, now);
155
133
  return {
156
134
  id: account.id,
157
- label: accountLabel(account),
158
- plan: account.plan,
159
- status: accountStatus(account),
135
+ label,
136
+ email: account.email && account.email !== label ? account.email : null,
137
+ plan: plan ? null : subscriptionPlanLabel(provider, account.plan, { brand: false }),
138
+ status: rowStatus,
139
+ mark: account.id === selectedId ? "next_turn" : account.id === current?.id && !state.currentHidden ? "in_use" : null,
140
+ windows: rowUsage?.windows ?? null,
141
+ // A row without a reading stays quiet; only a limit no window shows gets words.
142
+ usageMessage: rowUsage?.limit.reached ? rowUsage.message : null,
160
143
  detail: [
161
- accountLabel(account),
144
+ label,
162
145
  account.email,
163
- account.plan,
146
+ subscriptionPlanLabel(provider, account.plan),
164
147
  accountSource(account),
165
- accountStatus(account)
166
- ].filter(Boolean).join(" \xB7 "),
148
+ rowStatus
149
+ ].filter((part, index, parts) => part && parts.indexOf(part) === index).join(" \xB7 "),
167
150
  personal: account.source === "personal",
168
- disabled: !account.choosable,
169
- usageSummary: rowUsage?.summary,
170
- usageBar: rowUsage?.summary ? tightestWindow(rowUsage.windows) : void 0
151
+ disabled: !account.choosable
171
152
  };
172
153
  });
173
154
  return {
174
155
  ariaLabel: [
175
156
  `${name} account`,
176
157
  displayName,
177
- state.waiting ? "Limit reached" : status ?? (usageNearLimit ? "Near its limit" : null)
158
+ state.waiting ? "Limit reached" : status ?? (currentUsage?.limit.reached ? "Limit reached" : currentUsage?.limit.near ? "Near its limit" : null)
178
159
  ].filter(Boolean).join(" \xB7 "),
179
160
  selectionLabel,
180
161
  displayName,
181
162
  identity: current?.email && current.email !== displayName ? current.email : null,
182
- metadata: current ? [current.plan, accountSource(current), status].filter(Boolean).join(" \xB7 ") || `${name} subscription` : `${name} subscription`,
163
+ metadata: current ? [subscriptionPlanLabel(provider, current.plan), accountSource(current), status].filter(Boolean).join(" \xB7 ") || `${name} subscription` : `${name} subscription`,
183
164
  tone,
184
165
  usage,
185
166
  accounts,
186
- selectedId: state.automatic || unknown ? null : state.chosenId,
167
+ plan,
168
+ selectedId,
187
169
  automaticSelected: state.automatic && !unknown,
188
170
  actionLabel: state.waiting ? "Retry with" : "Use for next turn",
189
171
  automaticLabel: "Automatic",
@@ -311,22 +293,12 @@ function SharedAccountSource(props) {
311
293
  var AUTO = "auto";
312
294
  var LIVE_USAGE_REUSE_MS = 3e4;
313
295
  function codexUsage(account, live, now = Date.now()) {
314
- const window = (id, reading) => {
315
- if (!reading) return [];
316
- const usedPercent = typeof reading.percent === "number" ? reading.percent : typeof reading.remaining === "number" ? 100 - reading.remaining : null;
317
- return [
318
- {
319
- id,
320
- usedPercent,
321
- resetsAt: reading.resetAt ?? null,
322
- status: usedPercent === null ? "unknown" : usedPercent >= 100 ? "exhausted" : usedPercent >= 90 ? "warning" : "ok"
323
- }
324
- ];
325
- };
326
- const windows = [
327
- ...window("five_hour", account.fiveHour),
328
- ...window("seven_day", account.weekly)
329
- ];
296
+ const windows = codexWindowInputs(account).map((input) => ({
297
+ id: input.id,
298
+ usedPercent: input.usedPercent,
299
+ resetsAt: typeof input.resetsAt === "number" ? new Date(input.resetsAt).toISOString() : input.resetsAt,
300
+ status: input.usedPercent === null ? "unknown" : input.usedPercent >= 100 ? "exhausted" : input.usedPercent >= 90 ? "warning" : "ok"
301
+ }));
330
302
  const exhaustedUntil = account.exhaustedUntil && Date.parse(account.exhaustedUntil) > now ? account.exhaustedUntil : null;
331
303
  if (windows.length === 0 && !exhaustedUntil) return null;
332
304
  return {
@@ -429,4 +401,4 @@ export {
429
401
  codexUsage,
430
402
  codexAccountState
431
403
  };
432
- //# sourceMappingURL=chunk-UTRNLNCW.js.map
404
+ //# sourceMappingURL=chunk-SN6ZWYOP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/components/session/subscription-account-indicator.tsx","../src/app/components/session/subscription-account.ts"],"sourcesContent":["// The session-header account control for every subscription provider: the\n// provider's mark opens one menu with the account the chat uses, its usage,\n// and the accounts that can serve the next turn. The control and its content\n// are provider-neutral (`subscription-account.ts`); only where the data comes\n// from differs. Codex still reads its session endpoint, which alone reports a\n// turn waiting for capacity and offers a live usage check.\nimport { useState } from \"react\";\nimport type {\n CodexAccount,\n CodexUsageMap,\n ModelAccountChoiceOption,\n SessionEvent,\n SessionModelAccountChoiceResponse,\n} from \"@opengeni/sdk\";\n\nimport { useCodexAccounts, type UseCodexAccountsResult } from \"../../../hooks/use-codex-accounts\";\nimport {\n useSessionModelAccount,\n type UseSessionModelAccountResult,\n} from \"../../../hooks/use-session-model-account\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport { codexWindowInputs } from \"../../lib/subscription-accounts\";\nimport { BillingClassMark } from \"../billing-class-mark\";\nimport {\n showsSubscriptionAccountMenu,\n subscriptionAccountMenuContent,\n subscriptionProviderPresentation,\n type SubscriptionAccount,\n type SubscriptionAccountState,\n type SubscriptionAccountUsage,\n} from \"./subscription-account\";\nimport { SubscriptionAccountMenu } from \"./subscription-account-menu\";\n\ntype IndicatorProps = {\n workspaceId: string;\n sessionId: string;\n /** The session's organization; scopes personal-account choices. */\n organizationId: string | null;\n /** The session model's subscription provider (`codex`, `claude`, `xai`). */\n provider: string;\n /** The newest started turn, to show the account that served it. */\n servingTurnId?: string | undefined;\n events?: SessionEvent[];\n};\n\nexport function SubscriptionAccountIndicator(props: IndicatorProps) {\n return props.provider === \"codex\" ? (\n <CodexAccountSource {...props} />\n ) : (\n <SharedAccountSource {...props} />\n );\n}\n\n/** Renders the neutral state; identical for every provider. */\nexport function SubscriptionAccountControl({\n state,\n onChoose,\n onOpenChange,\n}: {\n state: SubscriptionAccountState;\n onChoose: (accountId: string | null) => void;\n onOpenChange?: ((open: boolean) => void) | undefined;\n}) {\n const { name, billingClass } = subscriptionProviderPresentation(state.provider);\n if (state.loading) {\n return (\n <Skeleton\n role=\"status\"\n className=\"h-6 w-11 shrink-0 rounded-full\"\n aria-label={`Loading ${name} account`}\n />\n );\n }\n // Nothing to choose or show (the provider's accounts are not offered for\n // this chat): the provider's mark alone, as on any other subscription chat.\n if (!showsSubscriptionAccountMenu(state)) {\n return (\n <BillingClassMark\n billingClass={billingClass}\n className=\"size-3.5 shrink-0 text-fg-muted\"\n aria-label=\"\"\n />\n );\n }\n return (\n <SubscriptionAccountMenu\n {...subscriptionAccountMenuContent(state)}\n triggerMark={\n <BillingClassMark\n billingClass={billingClass}\n className=\"size-3.5 text-current\"\n aria-label=\"\"\n />\n }\n headerMark={<BillingClassMark billingClass={billingClass} className=\"size-4 text-current\" />}\n choosing={state.choosing}\n choosingTarget={state.choosingTarget}\n onChoose={onChoose}\n onOpenChange={onOpenChange}\n />\n );\n}\n\n// ── Shared subscription core (Claude, SuperGrok, …) ─────────────────────────\n\nexport function sharedAccount(option: ModelAccountChoiceOption): SubscriptionAccount {\n return {\n id: option.connectionId,\n label: option.label,\n email: option.accountEmail,\n plan: option.planType,\n source: option.personal ? \"personal\" : option.source,\n status: option.status,\n refusal: option.refusal,\n choosable: option.choosable,\n usage: option.usage,\n };\n}\n\n/** The shared subscription core's session choice as the neutral state. */\nexport function sharedAccountState(\n provider: string,\n account: Pick<\n UseSessionModelAccountResult,\n \"loading\" | \"choosing\" | \"choosingTarget\" | \"appliedTo\" | \"mutationError\"\n > & { choice: SessionModelAccountChoiceResponse | null },\n servingTurnId: string | undefined,\n): SubscriptionAccountState {\n const choice = account.choice;\n const options = (choice?.accounts ?? []).filter((each) => each.provider === provider);\n const binding =\n choice?.bindings?.find((each) => each.provider === provider) ??\n (choice?.binding?.provider === provider ? choice.binding : null);\n const explicit = binding?.choice === \"explicit\";\n const serving =\n choice?.serving &&\n choice.serving.turnId === servingTurnId &&\n choice.serving.provider === provider\n ? choice.serving\n : null;\n const currentId = serving ? serving.connectionId : binding?.connectionId;\n const current = currentId\n ? (options.find((each) => each.connectionId === currentId) ?? null)\n : null;\n return {\n provider,\n loading: account.loading && !choice,\n unavailable: !choice,\n accounts: options.map(sharedAccount),\n current: current ? sharedAccount(current) : null,\n currentHidden: !current && (explicit || serving !== null),\n serving: serving !== null,\n automatic: !explicit,\n chosenId: explicit ? (binding?.connectionId ?? null) : null,\n waiting: false,\n // Only the authorized stored reading; opening the menu never probes a provider.\n usageCheck: \"idle\",\n choosing: account.choosing,\n choosingTarget: account.choosingTarget,\n appliedTo: account.appliedTo,\n mutationError: account.mutationError?.message ?? null,\n };\n}\n\nfunction SharedAccountSource(props: IndicatorProps) {\n const { provider } = props;\n const account = useSessionModelAccount({\n workspaceId: props.workspaceId,\n sessionId: props.sessionId,\n provider,\n organizationId: props.organizationId,\n pollIntervalMs: 60_000,\n ...(props.events !== undefined ? { events: props.events } : {}),\n });\n const state = sharedAccountState(provider, account, props.servingTurnId);\n return (\n <SubscriptionAccountControl\n state={state}\n onChoose={(id) => {\n // After a failed read the selection is unknown, so Automatic is sent.\n if (\n !state.unavailable &&\n (id === null ? state.automatic : !state.automatic && state.chosenId === id)\n ) {\n return;\n }\n void account.choose(id);\n }}\n />\n );\n}\n\n// ── Codex ───────────────────────────────────────────────────────────────────\n\nconst AUTO = \"auto\";\n// Reopening the menu reuses live readings this recent instead of asking the\n// provider again; older ones stay on screen while the menu re-checks.\nconst LIVE_USAGE_REUSE_MS = 30_000;\n\nexport function codexUsage(\n account: CodexAccount,\n live: CodexUsageMap[string] | undefined,\n now = Date.now(),\n): SubscriptionAccountUsage | null {\n // Only the windows the endpoint reported: a Pro plan without a 5-hour limit has none.\n const windows: SubscriptionAccountUsage[\"windows\"] = codexWindowInputs(account).map((input) => ({\n id: input.id,\n usedPercent: input.usedPercent,\n resetsAt:\n typeof input.resetsAt === \"number\" ? new Date(input.resetsAt).toISOString() : input.resetsAt,\n status:\n input.usedPercent === null\n ? \"unknown\"\n : input.usedPercent >= 100\n ? \"exhausted\"\n : input.usedPercent >= 90\n ? \"warning\"\n : \"ok\",\n }));\n // The endpoint reports a cooldown even after it ended; only a future one applies.\n const exhaustedUntil =\n account.exhaustedUntil && Date.parse(account.exhaustedUntil) > now\n ? account.exhaustedUntil\n : null;\n if (windows.length === 0 && !exhaustedUntil) return null;\n return {\n observedAt: live?.usage?.fetchedAt ?? account.usageCheckedAt ?? null,\n windows,\n exhaustedUntil,\n exhaustedKind: exhaustedUntil ? \"quota\" : null,\n };\n}\n\n/** The Codex session endpoint as the neutral state. */\nexport function codexAccountState(\n codex: Pick<\n UseCodexAccountsResult,\n | \"accounts\"\n | \"pinnedAccountId\"\n | \"currentSelection\"\n | \"currentAccount\"\n | \"switchAppliedTo\"\n | \"loading\"\n | \"error\"\n | \"liveUsage\"\n | \"liveUsageUpdatedAt\"\n | \"pinning\"\n | \"pinningTarget\"\n | \"mutationError\"\n >,\n check: { checking: boolean; checked: boolean; failed: boolean },\n): SubscriptionAccountState {\n // Live readings from an earlier check (this menu, another session's, or\n // Settings) stay visible while a new check runs instead of flashing away.\n const awaitingFirstUsage = check.checking && codex.liveUsageUpdatedAt === null;\n const selection = codex.currentSelection;\n const effective =\n (selection ? codex.currentAccount : null) ??\n codex.accounts.find(\n (account) => account.id === (selection ? selection.credentialId : codex.pinnedAccountId),\n ) ??\n null;\n // A live check that returned nothing for an account hides its older reading.\n const liveMissing = (id: string) => {\n const status = codex.liveUsage[id]?.status;\n return check.failed || (check.checked && !status) || status === \"error\" || status === \"no-data\";\n };\n const account = (each: CodexAccount): SubscriptionAccount => ({\n id: each.id,\n // The ChatGPT account id names an account only when nothing else does.\n label: each.label ?? (each.email || each.plan ? null : (each.chatgptAccountId ?? null)),\n email: each.email ?? null,\n plan: each.plan ?? null,\n source: each.source ?? null,\n status: each.status,\n refusal: null,\n choosable: true,\n usage: liveMissing(each.id) ? null : codexUsage(each, codex.liveUsage[each.id]),\n });\n return {\n provider: \"codex\",\n loading: codex.loading && !effective,\n unavailable: Boolean(codex.error),\n accounts: codex.accounts.map(account),\n current: effective ? account(effective) : null,\n currentHidden: !effective && Boolean(selection?.credentialId ?? codex.pinnedAccountId),\n serving: selection !== null,\n automatic: codex.pinnedAccountId === null,\n chosenId: codex.pinnedAccountId,\n waiting: selection?.waiting === true,\n usageCheck: awaitingFirstUsage\n ? \"checking\"\n : effective && liveMissing(effective.id)\n ? \"failed\"\n : \"idle\",\n choosing: codex.pinning,\n choosingTarget: codex.pinningTarget === AUTO ? null : (codex.pinningTarget ?? undefined),\n appliedTo: codex.switchAppliedTo,\n mutationError: codex.mutationError?.message ?? null,\n };\n}\n\nfunction CodexAccountSource(props: IndicatorProps) {\n const codex = useCodexAccounts({\n sessionId: props.sessionId,\n pollIntervalMs: 30_000,\n ...(props.events !== undefined ? { events: props.events } : {}),\n });\n const [checkingUsage, setCheckingUsage] = useState(false);\n const [usageChecked, setUsageChecked] = useState(false);\n const [usageCheckFailed, setUsageCheckFailed] = useState(false);\n const state = codexAccountState(codex, {\n checking: checkingUsage,\n checked: usageChecked,\n failed: usageCheckFailed,\n });\n const waiting = state.waiting;\n return (\n <SubscriptionAccountControl\n state={state}\n onChoose={(id) => {\n // Choosing again while a turn waits retries it on that account.\n // After a failed read the selection is unknown, so the choice is sent.\n if (codex.pinnedAccountId === id && !waiting && !state.unavailable) return;\n void codex.pin(id ?? AUTO);\n }}\n onOpenChange={(open) => {\n if (!open) return;\n setCheckingUsage(true);\n setUsageChecked(false);\n setUsageCheckFailed(false);\n void codex.refreshUsage({ maxAgeMs: LIVE_USAGE_REUSE_MS }).then(\n (ok) => {\n setUsageChecked(ok);\n setUsageCheckFailed(!ok);\n setCheckingUsage(false);\n },\n () => {\n setUsageCheckFailed(true);\n setCheckingUsage(false);\n },\n );\n }}\n />\n );\n}\n","// One provider-neutral shape for a chat's subscription account (Codex, Claude,\n// SuperGrok) and its projection onto the account menu. Data sources normalize\n// into `SubscriptionAccountState`; everything a person sees is decided here,\n// so every provider shows the same structure and copy. Only names, marks and\n// plan labels differ.\nimport type { ClientModel, ModelAccountChoiceRefusal } from \"@opengeni/sdk\";\nimport { isClaudeSubscriptionModelId } from \"@opengeni/contracts/claude-subscription-model-ids\";\nimport { connectedSubscriptionProvider } from \"../../../model-policy\";\nimport { isCodexProductModel } from \"../../lib/session-model\";\nimport {\n subscriptionLimit,\n subscriptionPlanLabel,\n subscriptionWindows,\n type SubscriptionLimit,\n type SubscriptionWindow,\n} from \"../../lib/subscription-accounts\";\nimport type { BillingClass } from \"../billing-class-mark\";\nimport type {\n SubscriptionAccountMenuRow,\n SubscriptionAccountMenuUsage,\n} from \"./subscription-account-menu\";\n\nexport type SubscriptionAccountUsage = {\n /** When the reading was taken; null when unknown. */\n observedAt: string | null;\n windows: Array<{\n id: string;\n /** Null means unknown; values over 100 can represent overage. */\n usedPercent: number | null;\n resetsAt: string | null;\n status: \"ok\" | \"warning\" | \"exhausted\" | \"unknown\";\n }>;\n exhaustedUntil: string | null;\n exhaustedKind: \"quota\" | \"rate_limit\" | null;\n};\n\nexport type SubscriptionAccount = {\n id: string;\n label: string | null;\n email: string | null;\n plan: string | null;\n /** Who the account belongs to; null when the source does not say. */\n source: \"personal\" | \"workspace\" | \"organization\" | null;\n /** The provider's account status (`active`, `needs_relogin`, …). */\n status: string;\n refusal: ModelAccountChoiceRefusal | null;\n choosable: boolean;\n /** Undefined: not reported. Null: no reading yet. */\n usage: SubscriptionAccountUsage | null | undefined;\n};\n\nexport type SubscriptionAccountState = {\n /** `codex`, `claude`, `xai`, … */\n provider: string;\n /** True until the first read settles. */\n loading: boolean;\n /** The accounts could not be read. */\n unavailable: boolean;\n /** Accounts this person can pick for the next turn. */\n accounts: SubscriptionAccount[];\n /** The account the chat runs on (or will next), when this person can see it. */\n current: SubscriptionAccount | null;\n /** The chat runs on a chosen or serving account this person cannot see. */\n currentHidden: boolean;\n /** `current`/`currentHidden` is the account serving the chat's latest turn. */\n serving: boolean;\n /** Automatic selection, not a person's explicit choice. */\n automatic: boolean;\n /** The explicitly chosen account, when this person can see it. */\n chosenId: string | null;\n /** A turn waits for capacity on the current account. */\n waiting: boolean;\n /**\n * A live usage check, for sources that offer one: `checking` until its\n * first reading arrives, `failed` when it produced none for this account.\n */\n usageCheck: \"idle\" | \"checking\" | \"failed\";\n choosing: boolean;\n /** The in-flight target (`null` is automatic; `undefined` when idle). */\n choosingTarget: string | null | undefined;\n appliedTo: \"waiting_turn\" | \"next_turn\" | null;\n mutationError: string | null;\n};\n\nconst PROVIDER: Record<string, { name: string; billingClass: BillingClass }> = {\n codex: { name: \"Codex\", billingClass: \"codex_subscription\" },\n claude: { name: \"Claude\", billingClass: \"claude_subscription\" },\n xai: { name: \"SuperGrok\", billingClass: \"supergrok_subscription\" },\n};\n\nexport function subscriptionProviderPresentation(provider: string): {\n name: string;\n billingClass: BillingClass;\n} {\n return PROVIDER[provider] ?? { name: \"Subscription\", billingClass: \"external\" };\n}\n\nconst REFUSAL_COPY: Record<ModelAccountChoiceRefusal, string> = {\n inactive: \"Unavailable\",\n personal_not_allowed: \"Turned off here\",\n personal_not_owner_work: \"Not available for this chat\",\n session_has_no_owner: \"Needs an owner\",\n};\n\nconst STATUS_COPY: Record<string, string> = {\n needs_relogin: \"Needs reconnect\",\n error: \"Error\",\n disabled: \"Disabled\",\n revoked: \"Revoked\",\n expired: \"Expired\",\n suspended: \"Suspended\",\n paused: \"Paused\",\n inactive: \"Inactive\",\n limit_reached: \"Limit reached\",\n};\n\nfunction time(value: string | number | null): string | null {\n if (value === null) return null;\n const at = typeof value === \"number\" ? value : Date.parse(value);\n if (!Number.isFinite(at)) return null;\n return new Date(at).toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n}\n\n/** The name an account goes by: its label, else its email, else its plan. */\nexport function accountLabel(account: SubscriptionAccount, provider = \"\"): string {\n return (\n account.label ??\n account.email ??\n subscriptionPlanLabel(provider, account.plan) ??\n account.plan ??\n \"Account\"\n );\n}\n\nexport function accountStatus(account: SubscriptionAccount): string | null {\n // Inactive is a broad refusal; retain the actual status when it explains why.\n if (account.refusal && account.refusal !== \"inactive\") return REFUSAL_COPY[account.refusal];\n if (account.status !== \"active\") return STATUS_COPY[account.status] ?? account.status;\n return account.refusal ? REFUSAL_COPY[account.refusal] : null;\n}\n\nfunction accountSource(account: SubscriptionAccount): string | null {\n return account.source === \"personal\"\n ? \"Your account\"\n : account.source === \"workspace\"\n ? \"This workspace\"\n : account.source === \"organization\"\n ? \"Organization\"\n : null;\n}\n\n/** An account's usage as every surface shows it: its reported windows and its limit. */\nexport type SubscriptionAccountUsageView = {\n windows: SubscriptionWindow[];\n limit: SubscriptionLimit;\n /** Words instead of windows: no reading, or a limit with no window to show it. */\n message: string | null;\n /** \"Updated 3 Nov, 15:29\", when the reading says when it was taken. */\n note: string | null;\n};\n\n/** The reading as the provider reported it: every window, labelled, never completed. */\nexport function subscriptionAccountUsage(\n provider: string,\n usage: SubscriptionAccountUsage | null | undefined,\n now = Date.now(),\n): SubscriptionAccountUsageView {\n const windows = subscriptionWindows(provider, usage?.windows ?? [], now);\n const limit = subscriptionLimit(windows, usage?.exhaustedUntil ?? null, now);\n const until = time(limit.until);\n const observed = time(usage?.observedAt ?? null);\n return {\n windows,\n limit,\n // A limit that no account-wide window shows (a refusal) still says until\n // when; a full model-scoped week (Fable) doesn't show the account's limit.\n message:\n limit.reached && !windows.some((window) => window.limitReached && !window.scoped)\n ? `Limit reached${until ? ` until ${until}` : \"\"}`\n : windows.length === 0\n ? \"No usage reading yet\"\n : null,\n note: observed ? `Updated ${observed}` : null,\n };\n}\n\n/** One plan label when every listed account has the same plan, else null. */\nfunction sharedPlan(provider: string, accounts: readonly SubscriptionAccount[]): string | null {\n const plans = new Set(accounts.map((account) => subscriptionPlanLabel(provider, account.plan)));\n const [only] = plans;\n return plans.size === 1 && only ? only : null;\n}\n\n/**\n * Whether there is anything to show or choose. A chat whose provider offers\n * no accounts to this person, with nothing chosen, serving or waiting, shows\n * the provider's mark alone instead of an empty menu.\n */\nexport function showsSubscriptionAccountMenu(state: SubscriptionAccountState): boolean {\n return (\n state.unavailable ||\n state.accounts.length > 0 ||\n state.current !== null ||\n state.currentHidden ||\n state.waiting ||\n !state.automatic\n );\n}\n\n/**\n * The subscription whose accounts a chat's header offers, or null for a chat\n * that does not run on a subscription. Codex product models are Codex\n * subscriptions even before the catalog lists them, and so are Claude\n * subscription model ids. The workspace catalog leaves `credentialSource`\n * out, so its public provider id and rail decide for the rest.\n */\nexport function subscriptionAccountProvider(\n modelId: string,\n model: Pick<ClientModel, \"id\" | \"provider\" | \"source\" | \"credentialSource\"> | null | undefined,\n): string | null {\n if (isCodexProductModel(modelId)) return \"codex\";\n if (isClaudeSubscriptionModelId(modelId)) return \"claude\";\n return model ? connectedSubscriptionProvider(model) : null;\n}\n\n/** Everything the account menu shows, from the neutral state. */\nexport function subscriptionAccountMenuContent(\n state: SubscriptionAccountState,\n now: number = Date.now(),\n) {\n const { name } = subscriptionProviderPresentation(state.provider);\n const provider = state.provider;\n const current = state.current;\n // A failed read does not know the selection; never claim Automatic for it.\n const unknown = state.unavailable && !current && !state.currentHidden;\n const displayName = current\n ? accountLabel(current, provider)\n : state.currentHidden\n ? \"Account unavailable\"\n : unknown\n ? \"Accounts unavailable\"\n : \"Automatic\";\n const status = current ? accountStatus(current) : null;\n const selectionLabel = state.waiting\n ? \"Limit reached\"\n : state.serving && (current || state.currentHidden)\n ? \"Current account\"\n : !state.automatic && !unknown && (!current || current.id === state.chosenId)\n ? \"Chosen account\"\n : current\n ? \"Current account\"\n : \"Account selection\";\n const currentUsage = current ? subscriptionAccountUsage(provider, current.usage, now) : null;\n const limitTone = currentUsage?.limit.reached || currentUsage?.limit.near;\n const tone: \"ok\" | \"warn\" | \"bad\" =\n current?.status === \"needs_relogin\" || current?.status === \"error\"\n ? \"bad\"\n : status || state.waiting || limitTone\n ? \"warn\"\n : \"ok\";\n const usage: SubscriptionAccountMenuUsage = !current\n ? {\n message: state.currentHidden\n ? \"Account usage hidden\"\n : unknown\n ? \"Usage unavailable\"\n : \"Choose an account to see usage\",\n }\n : state.usageCheck === \"checking\"\n ? { checking: true }\n : state.usageCheck === \"failed\"\n ? { unavailable: true }\n : {\n windows: currentUsage!.windows,\n ...(currentUsage!.message ? { message: currentUsage!.message } : {}),\n ...(currentUsage!.note ? { note: currentUsage!.note } : {}),\n };\n // The plan is shown once: beside the list when every account has the same\n // plan, else on each row (by its own name, the provider being clear here).\n const plan = sharedPlan(provider, state.accounts);\n const selectedId = state.automatic || unknown ? null : state.chosenId;\n const accounts: SubscriptionAccountMenuRow[] = state.accounts.map((account) => {\n const label = accountLabel(account, provider);\n const rowStatus = accountStatus(account);\n // The current account's usage is shown above the list; a live check\n // hides every reading until it answers.\n const rowUsage =\n account.id === current?.id || state.usageCheck === \"checking\"\n ? null\n : subscriptionAccountUsage(provider, account.usage, now);\n return {\n id: account.id,\n label,\n email: account.email && account.email !== label ? account.email : null,\n plan: plan ? null : subscriptionPlanLabel(provider, account.plan, { brand: false }),\n status: rowStatus,\n mark:\n account.id === selectedId\n ? \"next_turn\"\n : account.id === current?.id && !state.currentHidden\n ? \"in_use\"\n : null,\n windows: rowUsage?.windows ?? null,\n // A row without a reading stays quiet; only a limit no window shows gets words.\n usageMessage: rowUsage?.limit.reached ? rowUsage.message : null,\n detail: [\n label,\n account.email,\n subscriptionPlanLabel(provider, account.plan),\n accountSource(account),\n rowStatus,\n ]\n .filter((part, index, parts) => part && parts.indexOf(part) === index)\n .join(\" · \"),\n personal: account.source === \"personal\",\n disabled: !account.choosable,\n };\n });\n return {\n ariaLabel: [\n `${name} account`,\n displayName,\n state.waiting\n ? \"Limit reached\"\n : (status ??\n (currentUsage?.limit.reached\n ? \"Limit reached\"\n : currentUsage?.limit.near\n ? \"Near its limit\"\n : null)),\n ]\n .filter(Boolean)\n .join(\" · \"),\n selectionLabel,\n displayName,\n identity: current?.email && current.email !== displayName ? current.email : null,\n metadata: current\n ? [subscriptionPlanLabel(provider, current.plan), accountSource(current), status]\n .filter(Boolean)\n .join(\" · \") || `${name} subscription`\n : `${name} subscription`,\n tone,\n usage,\n accounts,\n plan,\n selectedId,\n automaticSelected: state.automatic && !unknown,\n actionLabel: state.waiting ? \"Retry with\" : \"Use for next turn\",\n automaticLabel: \"Automatic\",\n emptyMessage: state.unavailable ? \"Accounts unavailable.\" : \"No accounts available.\",\n error: state.mutationError ? `Couldn't switch: ${state.mutationError}` : null,\n note:\n state.appliedTo === \"waiting_turn\"\n ? \"Selection saved. Capacity is being rechecked.\"\n : state.appliedTo === \"next_turn\"\n ? \"Selection saved for the next turn.\"\n : state.waiting\n ? \"Changing accounts retries the waiting turn.\"\n : \"Applies next turn. The current turn keeps its account.\",\n };\n}\n"],"mappings":"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","names":["account"]}
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  ShimmerText,
19
19
  useLightboxOptional
20
- } from "./chunk-XVLEBB4Y.js";
20
+ } from "./chunk-TBWL6YWL.js";
21
21
  import {
22
22
  stringifyPayload
23
23
  } from "./chunk-2EA4IRIP.js";
@@ -26,7 +26,7 @@ import {
26
26
  } from "./chunk-TXS65BB2.js";
27
27
  import {
28
28
  useOpenGeniText
29
- } from "./chunk-QPQ7R77C.js";
29
+ } from "./chunk-7SU4YVZ5.js";
30
30
 
31
31
  // src/secrets-ui.tsx
32
32
  import { createContext, useContext } from "react";
@@ -820,4 +820,4 @@ export {
820
820
  Thumbnail,
821
821
  ScreenshotFigure
822
822
  };
823
- //# sourceMappingURL=chunk-OBGOLHCP.js.map
823
+ //# sourceMappingURL=chunk-T4HK4XCI.js.map
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-TXS65BB2.js";
14
14
  import {
15
15
  useOpenGeniText
16
- } from "./chunk-QPQ7R77C.js";
16
+ } from "./chunk-7SU4YVZ5.js";
17
17
 
18
18
  // src/lib/keyboard-targets.ts
19
19
  var TEXT_ENTRY = 'input, textarea, select, [contenteditable]:not([contenteditable="false"])';
@@ -915,4 +915,4 @@ export {
915
915
  LightboxProvider,
916
916
  ShimmerText
917
917
  };
918
- //# sourceMappingURL=chunk-XVLEBB4Y.js.map
918
+ //# sourceMappingURL=chunk-TBWL6YWL.js.map
@@ -13,10 +13,10 @@ import {
13
13
  import {
14
14
  rememberedMachineFolder,
15
15
  workspaceDefaultRigOptionLabel
16
- } from "./chunk-AVXDIRRW.js";
16
+ } from "./chunk-UMRUDYUK.js";
17
17
  import {
18
18
  t
19
- } from "./chunk-HEGV4QMS.js";
19
+ } from "./chunk-J42QE4VO.js";
20
20
  import {
21
21
  HelpTip
22
22
  } from "./chunk-MWSRT3IQ.js";
@@ -496,4 +496,4 @@ export {
496
496
  VisibilityMenuBody,
497
497
  UsageLimitMenuBody
498
498
  };
499
- //# sourceMappingURL=chunk-AAS7OWV6.js.map
499
+ //# sourceMappingURL=chunk-TIDXYWFX.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useField
4
- } from "./chunk-PRT4J2DL.js";
4
+ } from "./chunk-J555XSUM.js";
5
5
  import {
6
6
  useSectionListFrame
7
7
  } from "./chunk-ZMBJPN4T.js";
@@ -267,4 +267,4 @@ export {
267
267
  ChoiceCard,
268
268
  ChoiceCardsSkeleton
269
269
  };
270
- //# sourceMappingURL=chunk-N3FM4BNA.js.map
270
+ //# sourceMappingURL=chunk-TKHRGY2P.js.map
@@ -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/ui/form-dialog.tsx
36
36
  import {
@@ -556,4 +556,4 @@ export {
556
556
  FormPage,
557
557
  FormInline
558
558
  };
559
- //# sourceMappingURL=chunk-GU7T2S5N.js.map
559
+ //# sourceMappingURL=chunk-TU2GSZL7.js.map
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import {
3
- InlineChatImage
4
- } from "./chunk-PUUEI4W3.js";
5
2
  import {
6
3
  isRetainedTextPreview
7
4
  } from "./chunk-WRB2GNXO.js";
5
+ import {
6
+ InlineChatImage
7
+ } from "./chunk-FPHHIC5K.js";
8
8
  import {
9
9
  PRIVATE_FILE_PRESENTATION,
10
10
  isPrivateFileLoadError
@@ -29,20 +29,20 @@ import {
29
29
  } from "./chunk-A3MTTRCX.js";
30
30
  import {
31
31
  DeferredChatMedia
32
- } from "./chunk-K4DQS2ML.js";
32
+ } from "./chunk-D2I33V5P.js";
33
33
  import {
34
34
  createWorkspaceRetainedArtifactLoader
35
- } from "./chunk-OWET7EY2.js";
35
+ } from "./chunk-6GW7NJMK.js";
36
36
  import {
37
37
  LoadFailureNotice,
38
38
  isChunkLoadError
39
- } from "./chunk-LPKJ77EK.js";
39
+ } from "./chunk-HNTZ7B7M.js";
40
40
  import {
41
41
  isRetainedImageContentType
42
42
  } from "./chunk-EWZ2RLNG.js";
43
43
  import {
44
44
  useLightboxGalleryItem
45
- } from "./chunk-XVLEBB4Y.js";
45
+ } from "./chunk-TBWL6YWL.js";
46
46
  import {
47
47
  Button
48
48
  } from "./chunk-7QQN3KNP.js";
@@ -348,4 +348,4 @@ export {
348
348
  RetainedFilePreview,
349
349
  InlineChatArtifact
350
350
  };
351
- //# sourceMappingURL=chunk-OI6VI6SU.js.map
351
+ //# sourceMappingURL=chunk-U6HGJXXQ.js.map
@@ -12,13 +12,13 @@ import {
12
12
  } from "./chunk-JWKGPA6Q.js";
13
13
  import {
14
14
  useMachines
15
- } from "./chunk-467WDSOK.js";
15
+ } from "./chunk-5HYWXPMA.js";
16
16
  import {
17
17
  useEmbeddedSession
18
18
  } from "./chunk-TVQCDDSZ.js";
19
19
  import {
20
20
  useOpenGeniText
21
- } from "./chunk-QPQ7R77C.js";
21
+ } from "./chunk-7SU4YVZ5.js";
22
22
 
23
23
  // src/hooks/use-session-start.ts
24
24
  import { useCallback, useMemo } from "react";
@@ -138,4 +138,4 @@ function useSessionStart({
138
138
  export {
139
139
  useSessionStart
140
140
  };
141
- //# sourceMappingURL=chunk-4BWMAGJJ.js.map
141
+ //# sourceMappingURL=chunk-UGRW6RTR.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  capabilityOn,
4
4
  draftFromRequest
5
- } from "./chunk-3PM3M2Q6.js";
5
+ } from "./chunk-NDXBF3RW.js";
6
6
  import {
7
7
  buildTools
8
8
  } from "./chunk-ZPW5NFYD.js";
@@ -400,4 +400,4 @@ export {
400
400
  managedBackendOptions,
401
401
  selfhostedCapabilityChips
402
402
  };
403
- //# sourceMappingURL=chunk-AVXDIRRW.js.map
403
+ //# sourceMappingURL=chunk-UMRUDYUK.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  LoadFailureNotice,
4
4
  isChunkLoadError
5
- } from "./chunk-LPKJ77EK.js";
5
+ } from "./chunk-HNTZ7B7M.js";
6
6
 
7
7
  // src/app/components/session/failure-recovery-boundary.tsx
8
8
  import { Component } from "react";
@@ -24,4 +24,4 @@ var FailureRecoveryBoundary = class extends Component {
24
24
  export {
25
25
  FailureRecoveryBoundary
26
26
  };
27
- //# sourceMappingURL=chunk-FNXCFIPW.js.map
27
+ //# sourceMappingURL=chunk-UOT2R5ZD.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useFieldControlProps
4
- } from "./chunk-PRT4J2DL.js";
4
+ } from "./chunk-J555XSUM.js";
5
5
  import {
6
6
  Button
7
7
  } from "./chunk-7QQN3KNP.js";
@@ -268,4 +268,4 @@ export {
268
268
  useCopyToClipboard,
269
269
  CopyField
270
270
  };
271
- //# sourceMappingURL=chunk-DIP7YALH.js.map
271
+ //# sourceMappingURL=chunk-USURKJVT.js.map
@@ -1,26 +1,26 @@
1
1
  "use client";
2
2
  import {
3
3
  RailTrailingMetadata
4
- } from "./chunk-NQ2CPQJF.js";
4
+ } from "./chunk-7D3WIDKK.js";
5
5
  import {
6
6
  summarizeRailRow
7
- } from "./chunk-7Z76QP64.js";
7
+ } from "./chunk-2PY5XD3F.js";
8
8
  import {
9
9
  readChatDirectory,
10
10
  rememberChats
11
- } from "./chunk-YMI27QPF.js";
11
+ } from "./chunk-5NKQZVXP.js";
12
12
  import {
13
13
  railRowCreator
14
14
  } from "./chunk-KJJBQ3KV.js";
15
15
  import {
16
16
  t
17
- } from "./chunk-HEGV4QMS.js";
17
+ } from "./chunk-J42QE4VO.js";
18
18
  import {
19
19
  useAppContext
20
20
  } from "./chunk-JDFDPMKX.js";
21
21
  import {
22
22
  sessionAutomationWaitWords
23
- } from "./chunk-TNSJFZ6Q.js";
23
+ } from "./chunk-O2H2U7YS.js";
24
24
 
25
25
  // src/app/components/command-menu/chat-status.tsx
26
26
  import { useEffect } from "react";
@@ -184,4 +184,4 @@ export {
184
184
  ChatStatusMarks,
185
185
  useChatStatusRefresh
186
186
  };
187
- //# sourceMappingURL=chunk-S27VZ5DO.js.map
187
+ //# sourceMappingURL=chunk-UU6Q67XM.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-A3MTTRCX.js";
8
8
  import {
9
9
  Markdown
10
- } from "./chunk-EKJHOWTZ.js";
10
+ } from "./chunk-74UGYVCA.js";
11
11
 
12
12
  // src/app/components/markdown.tsx
13
13
  import { jsx } from "react/jsx-runtime";
@@ -45,4 +45,4 @@ function MarkdownText({
45
45
  export {
46
46
  MarkdownText
47
47
  };
48
- //# sourceMappingURL=chunk-LTJFV2JI.js.map
48
+ //# sourceMappingURL=chunk-UZ7NP5CW.js.map
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import {
3
3
  SessionProfileDialog
4
- } from "./chunk-3L465FBR.js";
4
+ } from "./chunk-6WB5UXMZ.js";
5
5
  import {
6
6
  SegmentedControl
7
7
  } from "./chunk-RGBI63KJ.js";
8
8
  import {
9
9
  Field,
10
10
  TextArea
11
- } from "./chunk-PRT4J2DL.js";
11
+ } from "./chunk-J555XSUM.js";
12
12
 
13
13
  // src/app/components/bots/bot-template-dialog.tsx
14
14
  import { useState } from "react";
@@ -116,4 +116,4 @@ function BotTemplateDialog({
116
116
  export {
117
117
  BotTemplateDialog
118
118
  };
119
- //# sourceMappingURL=chunk-H6MJFMHZ.js.map
119
+ //# sourceMappingURL=chunk-V4FO7UOE.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-4A7F6ZIA.js";
9
9
  import {
10
10
  ConfirmDialog
11
- } from "./chunk-KO3OHHY2.js";
11
+ } from "./chunk-CAZDRDQT.js";
12
12
  import {
13
13
  Button
14
14
  } from "./chunk-7QQN3KNP.js";
@@ -181,4 +181,4 @@ function SandboxRecoveryActions(props) {
181
181
  export {
182
182
  SandboxRecoveryActions
183
183
  };
184
- //# sourceMappingURL=chunk-RGR57NYY.js.map
184
+ //# sourceMappingURL=chunk-V4ZOZRCW.js.map