@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.
- package/dist/app/app-state.js +8 -8
- package/dist/app/components/Composer.js +18 -18
- package/dist/app/components/agent/agent-capability-picker.js +6 -6
- package/dist/app/components/artifacts/artifact-library.js +6 -6
- package/dist/app/components/artifacts/artifact-viewer.js +18 -18
- package/dist/app/components/artifacts/chat-interactive-block.js +11 -11
- package/dist/app/components/artifacts/file-reach-dialog.js +6 -6
- package/dist/app/components/artifacts/inline-chat-image.js +19 -19
- package/dist/app/components/artifacts/retained-file-preview.js +20 -20
- package/dist/app/components/artifacts/retained-text-preview.js +3 -3
- package/dist/app/components/artifacts/site-audience.js +3 -3
- package/dist/app/components/artifacts/site-conversations.js +9 -9
- package/dist/app/components/artifacts/site-data.js +10 -10
- package/dist/app/components/artifacts/site-publishing-page.js +25 -25
- package/dist/app/components/artifacts/site-publishing.js +22 -22
- package/dist/app/components/artifacts/site-settings.js +24 -24
- package/dist/app/components/artifacts/site-version-menu.js +3 -3
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/bots/bot-launch-strip.js +20 -20
- package/dist/app/components/bots/bot-template-dialog.js +26 -26
- package/dist/app/components/bots/bot-template-shortcuts.js +20 -20
- package/dist/app/components/bots/bot-templates-page.js +30 -30
- package/dist/app/components/capabilities/capability-detail-sheet.js +6 -6
- package/dist/app/components/capabilities/capability-logo-source.js +13 -13
- package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
- package/dist/app/components/capabilities/native-connect-setup.js +13 -13
- package/dist/app/components/capabilities/own-logins-shared-heads-up.js +3 -3
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -15
- package/dist/app/components/capabilities/session-capability-card.js +52 -52
- package/dist/app/components/capabilities/session-chrome-card.js +20 -20
- package/dist/app/components/capabilities/session-custom-mcp-card.js +16 -16
- package/dist/app/components/capabilities/session-github-card.js +16 -16
- package/dist/app/components/capabilities/session-machine-card.js +19 -19
- package/dist/app/components/capabilities/session-personal-github-card.js +14 -14
- package/dist/app/components/capabilities/session-plugin-card.js +8 -8
- package/dist/app/components/command-menu/chat-status.js +15 -15
- package/dist/app/components/command-menu/chat-switcher.js +35 -35
- package/dist/app/components/command-menu/command-menu.js +39 -39
- package/dist/app/components/command-menu/shortcut-sheet.js +8 -8
- package/dist/app/components/composer-capabilities-menu-body.js +4 -4
- package/dist/app/components/composer-mobile-plus-panel.js +8 -8
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/desktop/app-shots.js +6 -6
- package/dist/app/components/desktop/computer-use.js +2 -2
- package/dist/app/components/desktop/this-computer.js +5 -5
- package/dist/app/components/feedback.js +3 -3
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +11 -11
- package/dist/app/components/markdown.js +6 -6
- package/dist/app/components/models/models-ui.js +5 -5
- package/dist/app/components/models/subscription-usage.d.ts +34 -0
- package/dist/app/components/models/subscription-usage.js +24 -0
- package/dist/app/components/my-things.js +4 -4
- package/dist/app/components/own-where-it-works.js +3 -3
- package/dist/app/components/personal-resource-attachment-surface.js +4 -4
- package/dist/app/components/pickers.js +5 -5
- package/dist/app/components/rail/channel-create-dialog.js +3 -3
- package/dist/app/components/rail/project-glyph.js +20 -20
- package/dist/app/components/rail/project-profile.js +27 -27
- package/dist/app/components/rail/rail-context.js +1 -1
- package/dist/app/components/rail/rail-sections.js +55 -55
- package/dist/app/components/rail/session-header.js +47 -47
- package/dist/app/components/rail/session-list.js +53 -53
- package/dist/app/components/rail/session-row-content.js +4 -4
- package/dist/app/components/rail/session-row-hover-details.js +14 -14
- package/dist/app/components/rail/session-shell.js +76 -73
- package/dist/app/components/rail/site-session-group-heading.js +8 -8
- package/dist/app/components/session/agent-configuration-panel.js +12 -12
- package/dist/app/components/session/banners.js +8 -8
- package/dist/app/components/session/console-new-conversation.js +39 -39
- package/dist/app/components/session/descendant-requests.js +36 -36
- package/dist/app/components/session/editable-artifacts-workspace.js +16 -16
- package/dist/app/components/session/failed-session-banner.js +6 -6
- package/dist/app/components/session/failure-recovery-boundary.js +3 -3
- package/dist/app/components/session/human-input-delegation-record.js +2 -2
- package/dist/app/components/session/human-input.js +33 -33
- package/dist/app/components/session/inspector.js +43 -43
- package/dist/app/components/session/message-actions.js +3 -3
- package/dist/app/components/session/message-resource-attachments.js +10 -10
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +6 -6
- package/dist/app/components/session/new-session-setup-strip.js +21 -21
- package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
- package/dist/app/components/session/sandbox-switcher.js +7 -7
- package/dist/app/components/session/sandbox-workspace.js +48 -48
- package/dist/app/components/session/search-markdown-highlight.js +7 -7
- package/dist/app/components/session/search-results-view.js +8 -8
- package/dist/app/components/session/session-admin-access.js +4 -4
- package/dist/app/components/session/session-admission-notice.js +4 -4
- package/dist/app/components/session/session-avatar-picker.js +21 -21
- package/dist/app/components/session/session-avatar.js +19 -19
- package/dist/app/components/session/session-machine-access-notice.js +4 -4
- package/dist/app/components/session/session-profile-dialog.js +25 -25
- package/dist/app/components/session/session-profile-editor.js +26 -26
- package/dist/app/components/session/session-retention.js +3 -3
- package/dist/app/components/session/session-search-dialog.js +8 -8
- package/dist/app/components/session/session-tenancy-control.js +2 -2
- package/dist/app/components/session/session-usage-limit-section.js +4 -4
- package/dist/app/components/session/share-chat-dialog.js +5 -5
- package/dist/app/components/session/subagents.js +8 -8
- package/dist/app/components/session/subscription-account-indicator.js +12 -7
- package/dist/app/components/session/subscription-account-menu.d.ts +15 -15
- package/dist/app/components/session/subscription-account-menu.js +6 -1
- package/dist/app/components/session/subscription-account.d.ts +16 -9
- package/dist/app/components/settings/row-select.js +4 -4
- package/dist/app/components/transcription-settings.js +6 -6
- package/dist/app/components/ui/destructive-confirm.js +5 -5
- package/dist/app/components/usage/usage-entry.js +3 -3
- package/dist/app/components/window-bar.js +9 -9
- package/dist/app/components/workspace-composer-plus.js +16 -16
- package/dist/app/components/workspace-reach.js +4 -4
- package/dist/app/embed/session-app.js +160 -157
- package/dist/app/lib/actions/actions-provider.js +8 -8
- package/dist/app/lib/agent-capabilities.d.ts +12 -2
- package/dist/app/lib/agent-capabilities.js +3 -3
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +14 -14
- package/dist/app/lib/console-site.js +2 -2
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/events.js +12 -12
- package/dist/app/lib/failed-session-copy.js +3 -3
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/session-branch-cache.js +8 -8
- package/dist/app/lib/session-create.js +4 -4
- package/dist/app/lib/session-group-pagination.js +8 -8
- package/dist/app/lib/session-hover-facts.js +13 -13
- package/dist/app/lib/session-model.js +2 -2
- package/dist/app/lib/session-pins.js +1 -1
- package/dist/app/lib/session-rail.js +5 -5
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/sessions-group.d.ts +5 -3
- package/dist/app/lib/sessions-group.js +7 -7
- package/dist/app/lib/site-tool-consent-dialog.js +7 -7
- package/dist/app/lib/site-tool-consent.js +1 -1
- package/dist/app/lib/subscription-accounts.d.ts +79 -0
- package/dist/app/lib/subscription-accounts.js +18 -0
- package/dist/app/lib/turn-failure-analytics.js +4 -4
- package/dist/app/lib/use-follow-up-repositories.js +3 -3
- package/dist/app/lib/use-workspace-machines.js +4 -4
- package/dist/app/lib/use-workspace-model-catalog.js +3 -3
- package/dist/app/lib/use-workspace-rigs.js +2 -2
- package/dist/app/lib/workspace-navigation-preference.js +4 -4
- package/dist/app/lib/workspace-scope-context.js +3 -3
- package/dist/app/routes/artifacts.js +48 -48
- package/dist/app/routes/retained-artifact.js +32 -32
- package/dist/app/routes/session.js +96 -96
- package/dist/app/routes/sessions-index-hydration.js +5 -5
- package/dist/app/routes/sessions-index.js +76 -76
- package/dist/app/routes/site-view.js +55 -55
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +10 -10
- package/dist/automations.js +10 -10
- package/dist/{browser-viewer-ZHQDVHZ2.js → browser-viewer-F4FL7JKB.js} +4 -4
- package/dist/{chat-interactive-block-VSDD6X3M.js → chat-interactive-block-4U5JWRSY.js} +5 -5
- package/dist/{chunk-4K64EKM7.js → chunk-22YIIM3X.js} +4 -4
- package/dist/{chunk-3NNAC43A.js → chunk-2N7ACQ7M.js} +2 -2
- package/dist/{chunk-7Z76QP64.js → chunk-2PY5XD3F.js} +35 -5
- package/dist/chunk-2PY5XD3F.js.map +1 -0
- package/dist/{chunk-WDASYY4S.js → chunk-2TEYUDJD.js} +8 -8
- package/dist/{chunk-OTW25A6I.js → chunk-37JJQNZB.js} +3 -3
- package/dist/{chunk-VCJQQYRE.js → chunk-3DWQPURZ.js} +4 -4
- package/dist/{chunk-GTRAH4FG.js → chunk-3GWC3FU3.js} +2 -2
- package/dist/{chunk-AB5IW227.js → chunk-3ICY6LP3.js} +3 -3
- package/dist/{chunk-WIFDNUKD.js → chunk-3OCU5RX5.js} +3 -3
- package/dist/{chunk-UBRQ3PQD.js → chunk-3SPDJLOR.js} +2 -2
- package/dist/{chunk-IZXYFWA4.js → chunk-3WVLR7UA.js} +12 -12
- package/dist/{chunk-DEHLWZSI.js → chunk-3XMB3L57.js} +4 -4
- package/dist/{chunk-AJBDAVX3.js → chunk-4IUOBO2H.js} +7 -7
- package/dist/{chunk-NFCS5WYC.js → chunk-4KQ3A3EO.js} +3 -3
- package/dist/{chunk-LIJNVIT3.js → chunk-4L5B5AZT.js} +3 -3
- package/dist/{chunk-EDDKPIIV.js → chunk-4NB3TPNE.js} +2 -2
- package/dist/{chunk-PSM3CU7N.js → chunk-4TDKXHCD.js} +46 -39
- package/dist/chunk-4TDKXHCD.js.map +1 -0
- package/dist/{chunk-OJWDNNW3.js → chunk-4TPTGBIO.js} +5 -5
- package/dist/{chunk-J2WY42FA.js → chunk-4UHGW6WF.js} +2 -2
- package/dist/{chunk-7NLF35YL.js → chunk-4YN2JLYK.js} +4 -4
- package/dist/{chunk-OOOSGPJL.js → chunk-53MYEEMA.js} +1 -1
- package/dist/{chunk-467WDSOK.js → chunk-5HYWXPMA.js} +2 -2
- package/dist/{chunk-XMBOLFFS.js → chunk-5IMNL6IV.js} +2 -2
- package/dist/{chunk-4Z5X7PLC.js → chunk-5MLM5T5C.js} +3 -3
- package/dist/{chunk-YMI27QPF.js → chunk-5NKQZVXP.js} +2 -2
- package/dist/{chunk-ZW5YTIH3.js → chunk-5PB46DAA.js} +1 -1
- package/dist/{chunk-ZW5YTIH3.js.map → chunk-5PB46DAA.js.map} +1 -1
- package/dist/{chunk-CYDXCILL.js → chunk-5SODSGW7.js} +7 -7
- package/dist/{chunk-Q5EZNBPI.js → chunk-5YAJASCO.js} +3 -3
- package/dist/{chunk-M3FDGRB4.js → chunk-62XAL5BA.js} +3 -3
- package/dist/{chunk-SGH7I7OY.js → chunk-67R6NAFI.js} +2 -2
- package/dist/{chunk-Q5K2J5GG.js → chunk-6BN3RU7T.js} +13 -3
- package/dist/chunk-6BN3RU7T.js.map +1 -0
- package/dist/{chunk-PYB4BFEC.js → chunk-6BQLDL6R.js} +3 -3
- package/dist/{chunk-YJSCLGAW.js → chunk-6EZYHJTL.js} +3 -3
- package/dist/{chunk-OWET7EY2.js → chunk-6GW7NJMK.js} +19 -13
- package/dist/{chunk-OWET7EY2.js.map → chunk-6GW7NJMK.js.map} +1 -1
- package/dist/{chunk-G5UQBTXY.js → chunk-6LXIL3Q3.js} +2 -2
- package/dist/{chunk-T67LTMSW.js → chunk-6LYVAJFZ.js} +10 -10
- package/dist/{chunk-3L465FBR.js → chunk-6WB5UXMZ.js} +6 -6
- package/dist/{chunk-EKJHOWTZ.js → chunk-74UGYVCA.js} +4 -4
- package/dist/{chunk-PWUSSSSL.js → chunk-7BTNYZC7.js} +2 -2
- package/dist/{chunk-NQ2CPQJF.js → chunk-7D3WIDKK.js} +26 -3
- package/dist/chunk-7D3WIDKK.js.map +1 -0
- package/dist/{chunk-ESXAECZ3.js → chunk-7KZFGA25.js} +2 -2
- package/dist/{chunk-EGKARC53.js → chunk-7MGDX2TD.js} +2 -2
- package/dist/{chunk-Y3XZEKDQ.js → chunk-7N3GFGB6.js} +2 -2
- package/dist/{chunk-AH3DGOTK.js → chunk-7SFSN6AX.js} +2 -2
- package/dist/{chunk-QPQ7R77C.js → chunk-7SU4YVZ5.js} +5 -1
- package/dist/chunk-7SU4YVZ5.js.map +1 -0
- package/dist/{chunk-6QK65ZWM.js → chunk-7TGUHFGO.js} +3 -3
- package/dist/{chunk-QURYQFDN.js → chunk-7ZIWO65F.js} +2 -2
- package/dist/{chunk-OYCK4JRS.js → chunk-AJHLEJTK.js} +2 -2
- package/dist/{chunk-3PZ3LRPV.js → chunk-AN4U7EPH.js} +3 -3
- package/dist/{chunk-77BHKC43.js → chunk-APG6CEG7.js} +1 -1
- package/dist/{chunk-FSDQQQIA.js → chunk-APHLXQNP.js} +3 -3
- package/dist/{chunk-SN2WENRP.js → chunk-AXHQ7QXV.js} +3 -3
- package/dist/{chunk-54U6ZBEX.js → chunk-AYTLSPF6.js} +3 -3
- package/dist/{chunk-WYGTAQMX.js → chunk-AZFVRPQM.js} +76 -22
- package/dist/chunk-AZFVRPQM.js.map +1 -0
- package/dist/{chunk-R33SBMB7.js → chunk-BBSKKBMV.js} +3 -3
- package/dist/{chunk-2GCHGWNE.js → chunk-BGH6TU2P.js} +3 -3
- package/dist/{chunk-D3PTVN2I.js → chunk-BGIYL26H.js} +2 -2
- package/dist/{chunk-BQYRZIZ7.js → chunk-BL7UQUC3.js} +2 -2
- package/dist/{chunk-EBTUPRRQ.js → chunk-BOUHCYL6.js} +4 -4
- package/dist/{chunk-MKDFYE2E.js → chunk-BVNGDFBC.js} +2 -2
- package/dist/{chunk-ICAMYP5M.js → chunk-BWJK64CP.js} +2 -2
- package/dist/{chunk-RHXYO4H2.js → chunk-BZ2GTCQV.js} +2 -2
- package/dist/{chunk-GIWFLWXG.js → chunk-C2KASMJK.js} +4 -4
- package/dist/{chunk-KO3OHHY2.js → chunk-CAZDRDQT.js} +2 -2
- package/dist/{chunk-OK7BQMCI.js → chunk-CBJRZKZB.js} +9 -9
- package/dist/{chunk-OYOFPNLC.js → chunk-CF6NYG7J.js} +4 -4
- package/dist/{chunk-MT2R57SF.js → chunk-COITN7WN.js} +2 -2
- package/dist/{chunk-OCXTTKVA.js → chunk-CPVOXM2Q.js} +2 -2
- package/dist/{chunk-HYEIA25Y.js → chunk-CTZRCBKH.js} +2 -2
- package/dist/{chunk-OCXEY7HE.js → chunk-CWL27YTB.js} +2 -2
- package/dist/{chunk-K4DQS2ML.js → chunk-D2I33V5P.js} +4 -4
- package/dist/{chunk-736RUNIA.js → chunk-DF7WI4JH.js} +4 -4
- package/dist/{chunk-KUE5BOQE.js → chunk-DKZYCJCO.js} +4 -4
- package/dist/{chunk-74CBR5YE.js → chunk-DQ32FKFQ.js} +2 -2
- package/dist/{chunk-4O2XWOLZ.js → chunk-DTKG2YUF.js} +3 -3
- package/dist/{chunk-GMHIOYB7.js → chunk-DUDA4V5R.js} +4 -4
- package/dist/{chunk-XUOYNJPB.js → chunk-ECROT4M5.js} +24 -24
- package/dist/{chunk-PVB4YVDP.js → chunk-EOXV5XGY.js} +2 -2
- package/dist/{chunk-U6552Q3T.js → chunk-EQQOZ6DD.js} +2 -2
- package/dist/{chunk-G6ICCGJ3.js → chunk-EY6W5H4B.js} +2 -2
- package/dist/{chunk-HWVPLFIW.js → chunk-EYRFEWXJ.js} +2 -2
- package/dist/{chunk-7YTR3UFO.js → chunk-FB4JWUVJ.js} +8 -5
- package/dist/chunk-FB4JWUVJ.js.map +1 -0
- package/dist/{chunk-U4LTPFD2.js → chunk-FKK2PD7K.js} +2 -2
- package/dist/{chunk-PUUEI4W3.js → chunk-FPHHIC5K.js} +5 -5
- package/dist/{chunk-SP44O3OU.js → chunk-FQM6L22H.js} +2 -2
- package/dist/{chunk-2J77TWGH.js → chunk-FW22IREV.js} +3 -3
- package/dist/{chunk-EBIVTDEG.js → chunk-G4M6AYDB.js} +2 -2
- package/dist/{chunk-O4JOE3R7.js → chunk-G55NAU5M.js} +60 -74
- package/dist/chunk-G55NAU5M.js.map +1 -0
- package/dist/{chunk-BASI553K.js → chunk-G6AZ2WIU.js} +4 -4
- package/dist/{chunk-SJYTQLN3.js → chunk-GJ5IDSAX.js} +3 -3
- package/dist/{chunk-TDTD66BK.js → chunk-GRDSEZWZ.js} +2 -2
- package/dist/{chunk-MV2CLIO6.js → chunk-HBVJIGY2.js} +6 -6
- package/dist/{chunk-R4JA5JFI.js → chunk-HCWQLIOE.js} +3 -3
- package/dist/{chunk-MZY3VKKM.js → chunk-HEVD4A5G.js} +2 -2
- package/dist/{chunk-DLVIRJGK.js → chunk-HNDHSEVJ.js} +2 -2
- package/dist/{chunk-LPKJ77EK.js → chunk-HNTZ7B7M.js} +2 -2
- package/dist/{chunk-QQIZMVAJ.js → chunk-HQ7GTMII.js} +59 -57
- package/dist/chunk-HQ7GTMII.js.map +1 -0
- package/dist/{chunk-IN3VQFKS.js → chunk-I2FC7CAI.js} +2 -2
- package/dist/{chunk-SK5S2PCK.js → chunk-I7BGHBOM.js} +14 -14
- package/dist/chunk-I7BGHBOM.js.map +1 -0
- package/dist/{chunk-ZBHGNE2J.js → chunk-IEHZFYMH.js} +3 -3
- package/dist/{chunk-DWJ6J3YW.js → chunk-IXISEVD7.js} +4 -4
- package/dist/{chunk-TK5FWVZR.js → chunk-IZEDVQUD.js} +3 -3
- package/dist/{chunk-HEGV4QMS.js → chunk-J42QE4VO.js} +2 -2
- package/dist/{chunk-PRT4J2DL.js → chunk-J555XSUM.js} +2 -2
- package/dist/{chunk-SBXSKRFA.js → chunk-JNMHFSDF.js} +3 -3
- package/dist/{chunk-KI46GKMD.js → chunk-JTBAOPYO.js} +7 -7
- package/dist/{chunk-JHZRAYI4.js → chunk-JWSRFXRN.js} +2 -2
- package/dist/chunk-JWSRFXRN.js.map +1 -0
- package/dist/{chunk-SXGJL7UT.js → chunk-K376MPJH.js} +14 -14
- package/dist/{chunk-OSJ366KR.js → chunk-KEBVT55V.js} +30 -30
- package/dist/{chunk-U5UGM5XD.js → chunk-KFIZAXHI.js} +5 -5
- package/dist/{chunk-KFNZZ2N6.js → chunk-KKGRDBMK.js} +2 -2
- package/dist/{chunk-PLYVGZIN.js → chunk-KKIG6DN5.js} +1 -1
- package/dist/{chunk-3OK7Y6ES.js → chunk-KKQO2GAA.js} +2 -2
- package/dist/{chunk-DQPIEQGP.js → chunk-KO753ZCZ.js} +2 -2
- package/dist/{chunk-YNTLWCF4.js → chunk-KYIRWU65.js} +3 -3
- package/dist/{chunk-JKL5S7UQ.js → chunk-L6V63DVI.js} +6 -6
- package/dist/{chunk-M5IQVMLR.js → chunk-LAZ2QZTJ.js} +11 -4
- package/dist/chunk-LAZ2QZTJ.js.map +1 -0
- package/dist/{chunk-CV4VVLPZ.js → chunk-LCNJ2KNS.js} +2 -2
- package/dist/{chunk-D74Z2N4K.js → chunk-LE7YKMTU.js} +2 -2
- package/dist/{chunk-D5TIVCXG.js → chunk-LEBEOMVT.js} +2 -2
- package/dist/chunk-LKLQVANM.js +2 -0
- package/dist/{chunk-2OXSB2OL.js → chunk-LKWVBUH6.js} +3 -2
- package/dist/chunk-LKWVBUH6.js.map +1 -0
- package/dist/{chunk-WXF2RTS4.js → chunk-M6URPYUB.js} +2 -2
- package/dist/{chunk-H6BX6WOW.js → chunk-MDHFMRBC.js} +3 -3
- package/dist/{chunk-3CDJSKDW.js → chunk-MGZO7CHI.js} +3 -3
- package/dist/{chunk-DCEQCGVN.js → chunk-MIWU52TW.js} +2 -2
- package/dist/{chunk-PF2WU2IL.js → chunk-ND4IQJUM.js} +120 -17
- package/dist/chunk-ND4IQJUM.js.map +1 -0
- package/dist/{chunk-3PM3M2Q6.js → chunk-NDXBF3RW.js} +27 -11
- package/dist/chunk-NDXBF3RW.js.map +1 -0
- package/dist/{chunk-LVELUUK6.js → chunk-NF6QVVMP.js} +2 -2
- package/dist/{chunk-UMX6DZME.js → chunk-NTZ5ZNVK.js} +2 -2
- package/dist/{chunk-FBA2NXYH.js → chunk-NWLRABUR.js} +3 -3
- package/dist/{chunk-TNSJFZ6Q.js → chunk-O2H2U7YS.js} +4 -4
- package/dist/{chunk-BFFNINCC.js → chunk-OAL2PPX4.js} +3 -3
- package/dist/{chunk-WTSQUCHB.js → chunk-OCYTHZ4A.js} +3 -3
- package/dist/{chunk-ZAX4XQLN.js → chunk-OEDTCIXF.js} +2 -2
- package/dist/{chunk-CHU3RDV4.js → chunk-OLVSYB3P.js} +3 -3
- package/dist/{chunk-PZKHST7A.js → chunk-OQ6QOPK6.js} +10 -3
- package/dist/chunk-OQ6QOPK6.js.map +1 -0
- package/dist/{chunk-IFSXVU2S.js → chunk-OQHTFOCA.js} +2 -2
- package/dist/{chunk-OXQ2SXVC.js → chunk-P56AVROH.js} +2 -2
- package/dist/{chunk-CXAN2FHF.js → chunk-PCEJHHGP.js} +6 -6
- package/dist/{chunk-5MIBQ4P5.js → chunk-PHGQGVVL.js} +2 -2
- package/dist/{chunk-FLWQJDJ5.js → chunk-PUZRHEQI.js} +6 -6
- package/dist/{chunk-OP2GD6QW.js → chunk-PV7U6OOJ.js} +2 -2
- package/dist/{chunk-SPD4ULVB.js → chunk-PYMROAWS.js} +2 -1
- package/dist/chunk-PYMROAWS.js.map +1 -0
- package/dist/{chunk-X2QJXDE4.js → chunk-PZQACDH5.js} +8 -8
- package/dist/{chunk-CH4UQ4NO.js → chunk-PZTS4O6E.js} +5 -5
- package/dist/{chunk-TKQL7EDB.js → chunk-Q42QHUAQ.js} +2 -2
- package/dist/{chunk-MRECRNVU.js → chunk-QCYGB6TZ.js} +5 -5
- package/dist/{chunk-GSCGKJNK.js → chunk-QECMETOF.js} +2 -2
- package/dist/{chunk-RMCLFSMX.js → chunk-QGX3LE6H.js} +2 -2
- package/dist/{chunk-HTMQGS63.js → chunk-QI3NDQFP.js} +8 -8
- package/dist/{chunk-UU5FBVRX.js → chunk-QZE4BTLA.js} +6 -5
- package/dist/chunk-QZE4BTLA.js.map +1 -0
- package/dist/{chunk-R5QAL43H.js → chunk-RA3Q52O2.js} +2 -2
- package/dist/chunk-RBOHWUSN.js +151 -0
- package/dist/chunk-RBOHWUSN.js.map +1 -0
- package/dist/{chunk-AJDGP2N4.js → chunk-RJNOQEJJ.js} +20 -20
- package/dist/{chunk-477DTTMH.js → chunk-RSFOFUR7.js} +3 -3
- package/dist/{chunk-JV5ULONH.js → chunk-RXR6PMSH.js} +39 -39
- package/dist/{chunk-J2BTILRR.js → chunk-SM7HFCGC.js} +2 -2
- package/dist/{chunk-UTRNLNCW.js → chunk-SN6ZWYOP.js} +69 -97
- package/dist/chunk-SN6ZWYOP.js.map +1 -0
- package/dist/{chunk-OBGOLHCP.js → chunk-T4HK4XCI.js} +3 -3
- package/dist/{chunk-XVLEBB4Y.js → chunk-TBWL6YWL.js} +2 -2
- package/dist/{chunk-AAS7OWV6.js → chunk-TIDXYWFX.js} +3 -3
- package/dist/{chunk-N3FM4BNA.js → chunk-TKHRGY2P.js} +2 -2
- package/dist/{chunk-GU7T2S5N.js → chunk-TU2GSZL7.js} +2 -2
- package/dist/{chunk-OI6VI6SU.js → chunk-U6HGJXXQ.js} +8 -8
- package/dist/{chunk-4BWMAGJJ.js → chunk-UGRW6RTR.js} +3 -3
- package/dist/{chunk-AVXDIRRW.js → chunk-UMRUDYUK.js} +2 -2
- package/dist/{chunk-FNXCFIPW.js → chunk-UOT2R5ZD.js} +2 -2
- package/dist/{chunk-DIP7YALH.js → chunk-USURKJVT.js} +2 -2
- package/dist/{chunk-S27VZ5DO.js → chunk-UU6Q67XM.js} +6 -6
- package/dist/{chunk-LTJFV2JI.js → chunk-UZ7NP5CW.js} +2 -2
- package/dist/{chunk-H6MJFMHZ.js → chunk-V4FO7UOE.js} +3 -3
- package/dist/{chunk-RGR57NYY.js → chunk-V4ZOZRCW.js} +2 -2
- package/dist/{chunk-LQKVNREV.js → chunk-V57YMKQZ.js} +3 -3
- package/dist/{chunk-XZCCEKPW.js → chunk-VOIWZBY6.js} +6 -6
- package/dist/{chunk-E5KOWRDU.js → chunk-VPHPLPDA.js} +2 -2
- package/dist/{chunk-OGU73VUN.js → chunk-VUL4KPUU.js} +2 -2
- package/dist/{chunk-SFIXTOOJ.js → chunk-VWF6ILAR.js} +3 -3
- package/dist/{chunk-FER6EVIY.js → chunk-W54BHJO7.js} +2 -2
- package/dist/{chunk-34NV52R3.js → chunk-WCYE4BLC.js} +4 -4
- package/dist/{chunk-RISUROBM.js → chunk-WTV25ELY.js} +4 -4
- package/dist/{chunk-UO35OEOX.js → chunk-WZYGH7CN.js} +3 -3
- package/dist/{chunk-CEMSIU4Z.js → chunk-XG2RWUF7.js} +5 -5
- package/dist/chunk-XK72HZ4C.js +147 -0
- package/dist/chunk-XK72HZ4C.js.map +1 -0
- package/dist/{chunk-K3D7IQQP.js → chunk-XV7QOT7W.js} +6 -6
- package/dist/{chunk-GOCODNQS.js → chunk-XWECT3GX.js} +2 -2
- package/dist/{chunk-5MHMCE2G.js → chunk-XZQK2ZLW.js} +3 -3
- package/dist/{chunk-JV3UI7BH.js → chunk-Y5BR66OH.js} +3 -3
- package/dist/{chunk-VXORMNU4.js → chunk-YBHAAULA.js} +67 -2
- package/dist/chunk-YBHAAULA.js.map +1 -0
- package/dist/{chunk-4F3AEJI6.js → chunk-YD6XU6FY.js} +4 -4
- package/dist/{chunk-VATYK3JQ.js → chunk-YFE47G3C.js} +3 -3
- package/dist/{chunk-ZR5EKJT6.js → chunk-YG6TWPP7.js} +2 -2
- package/dist/{chunk-44JWVYJB.js → chunk-YH3ARKBB.js} +2 -2
- package/dist/{chunk-752WXSDN.js → chunk-YI66STKJ.js} +2 -2
- package/dist/{chunk-QRECBCJM.js → chunk-YMVPYMKB.js} +2 -2
- package/dist/{chunk-77SYIH6O.js → chunk-YPIXBAF6.js} +2 -2
- package/dist/{chunk-WRMUXZ7C.js → chunk-YSWPNY6G.js} +3 -3
- package/dist/{chunk-GTHCHCWW.js → chunk-YWNNMBZG.js} +3 -3
- package/dist/{chunk-3DRLCX5V.js → chunk-Z3HYM2JT.js} +2 -2
- package/dist/{chunk-M3HGBO2Y.js → chunk-ZAC7YPRA.js} +1 -1
- package/dist/{chunk-2VJOSU4H.js → chunk-ZENESDAF.js} +2 -2
- package/dist/{chunk-4JXPLTWV.js → chunk-ZHAPMETO.js} +2 -2
- package/dist/{chunk-IJR6VOLU.js → chunk-ZVR6DUZH.js} +2 -2
- package/dist/components/message-timeline.d.ts +10 -2
- package/dist/composer.js +8 -8
- package/dist/{computer-viewer-5LKRCEVQ.js → computer-viewer-FOIOZUF5.js} +5 -5
- package/dist/connect.js +12 -12
- package/dist/desktop-dictation.js +8 -8
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-GHJRY3YL.js → embedded-new-voice-WTXAJNGO.js} +5 -5
- package/dist/{embedded-voice-ASQXBSTX.js → embedded-voice-SIJOPN2G.js} +5 -5
- package/dist/{fleet-decision-row-U7LDVBEM.js → fleet-decision-row-XKQ3GMYT.js} +2 -2
- package/dist/hooks/use-recordings.d.ts +4 -2
- package/dist/in-chat-connect-model.js +5 -5
- package/dist/index.d.ts +2 -2
- package/dist/index.js +66 -60
- package/dist/interaction.js +5 -5
- package/dist/{latest-question-RNVF262Q.js → latest-question-KA7AQYVI.js} +2 -2
- package/dist/machines.js +3 -3
- package/dist/meetings/recorder-context.d.ts +6 -1
- package/dist/meetings/recorder-panel.d.ts +2 -5
- package/dist/meetings-recorder.js +1 -1
- package/dist/meetings.js +25 -23
- package/dist/meetings.js.map +1 -1
- package/dist/messages/en.d.ts +4 -0
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-E6XKMFTA.js → model-policy-picker-menu-6N2G7VGX.js} +4 -4
- package/dist/{payment-page-card-DJDKV2LW.js → payment-page-card-IJFZHQ52.js} +4 -4
- package/dist/{platform-activity-row-MSDCSMET.js → platform-activity-row-MFCMGI43.js} +2 -2
- package/dist/{queue-surface-implementation-GUAIG6TK.js → queue-surface-implementation-BBCDWWOP.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{recorder-host-2MYDJPQW.js → recorder-host-LDYYOKG7.js} +5 -5
- package/dist/recordings.js +4 -4
- package/dist/{sandbox-files-W5W2LW4K.js → sandbox-files-VYRBIXJY.js} +6 -6
- package/dist/session-app.js +160 -157
- package/dist/{session-connect-cards-HPH7JOZP.js → session-connect-cards-GBPSL6OT.js} +9 -9
- package/dist/session-connect-cards-GBPSL6OT.js.map +1 -0
- package/dist/session-list-model.js +2 -2
- package/dist/{session-realtime-SDTKFFIR.js → session-realtime-QGU57TND.js} +3 -3
- package/dist/session-realtime-QGU57TND.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +33 -33
- package/dist/session.d.ts +3 -2
- package/dist/session.js +16 -10
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/index.d.ts +3 -2
- package/dist/timeline/projection.d.ts +52 -0
- package/dist/timeline/turn-summary-model.d.ts +4 -3
- package/dist/timeline/types.d.ts +8 -2
- package/dist/timeline/use-timeline-pauses.d.ts +12 -0
- package/dist/timeline/work-presentation.d.ts +4 -3
- package/dist/{timeline-annotation-markers-FNILLWNU.js → timeline-annotation-markers-LL6ZVBZH.js} +2 -2
- package/dist/{timeline-annotation-selection-MBCIDO2Q.js → timeline-annotation-selection-WQA76WYC.js} +2 -2
- package/dist/{timeline-annotations-dialog-JPNKLOTE.js → timeline-annotations-dialog-HHETAEZA.js} +3 -3
- package/dist/timeline-model.js +2 -2
- package/dist/ui/access-list.js +5 -5
- package/dist/ui/cadence-picker.js +4 -4
- package/dist/ui/choice-cards.js +3 -3
- package/dist/ui/confirm-dialog.js +2 -2
- package/dist/ui/copy-field.js +3 -3
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/disclosure.js +3 -3
- package/dist/ui/email-chips-input.js +3 -3
- package/dist/ui/field.js +2 -2
- package/dist/ui/flush-form-page.js +3 -3
- package/dist/ui/form-dialog.js +2 -2
- package/dist/ui/list-row.js +3 -3
- package/dist/ui/relative-time.js +2 -2
- package/dist/ui/revision-history.js +4 -4
- package/dist/ui/role-select.js +5 -5
- package/dist/ui/select-menu.js +3 -3
- package/dist/ui/usage-meter.d.ts +8 -2
- package/dist/ui/usage-meter.js +5 -3
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +6 -5
- package/src/app/components/agent/agent-capability-picker.test.tsx +1 -1
- package/src/app/components/models/subscription-usage.tsx +178 -0
- package/src/app/components/rail/session-row-content.tsx +27 -0
- package/src/app/components/session/subscription-account-indicator.test.ts +78 -18
- package/src/app/components/session/subscription-account-indicator.tsx +16 -31
- package/src/app/components/session/subscription-account-menu.tsx +79 -101
- package/src/app/components/session/subscription-account.test.ts +161 -54
- package/src/app/components/session/subscription-account.ts +106 -117
- package/src/app/lib/agent-capabilities.tsx +34 -7
- package/src/app/lib/session-branch-cache.tsx +1 -0
- package/src/app/lib/session-pins.tsx +1 -0
- package/src/app/lib/session-row-paused.test.tsx +183 -0
- package/src/app/lib/sessions-group-channels.test.ts +4 -4
- package/src/app/lib/sessions-group.tsx +62 -4
- package/src/app/lib/subscription-accounts.tsx +283 -0
- package/src/app/routes/session.tsx +2 -0
- package/src/components/message-timeline.tsx +14 -2
- package/src/components/session-conversation.tsx +2 -1
- package/src/components/timeline-annotations.tsx +4 -1
- package/src/components/timeline-settlement.ts +1 -1
- package/src/hooks/use-composer.ts +104 -25
- package/src/hooks/use-recordings.ts +5 -0
- package/src/index.ts +5 -0
- package/src/meetings/meeting-detail-page.tsx +4 -2
- package/src/meetings/meetings-pages.test.tsx +38 -0
- package/src/meetings/recorder-context.tsx +28 -5
- package/src/meetings/recorder-panel.tsx +13 -5
- package/src/meetings/recorder-workspace.test.tsx +57 -8
- package/src/messages/en.ts +5 -0
- package/src/recordings-model.ts +7 -0
- package/src/session.ts +8 -1
- package/src/timeline/index.ts +4 -1
- package/src/timeline/projection.ts +228 -16
- package/src/timeline/turn-summary-model.ts +4 -3
- package/src/timeline/turn-summary.tsx +15 -2
- package/src/timeline/types.ts +8 -2
- package/src/timeline/use-timeline-pauses.ts +105 -0
- package/src/timeline/work-presentation.ts +13 -4
- package/src/ui/usage-meter.tsx +10 -7
- package/styles/compiled.css +3 -0
- package/dist/chunk-2OXSB2OL.js.map +0 -1
- package/dist/chunk-3PM3M2Q6.js.map +0 -1
- package/dist/chunk-7YTR3UFO.js.map +0 -1
- package/dist/chunk-7Z76QP64.js.map +0 -1
- package/dist/chunk-JHZRAYI4.js.map +0 -1
- package/dist/chunk-M5IQVMLR.js.map +0 -1
- package/dist/chunk-NQ2CPQJF.js.map +0 -1
- package/dist/chunk-O2UPPN5M.js +0 -2
- package/dist/chunk-O4JOE3R7.js.map +0 -1
- package/dist/chunk-PF2WU2IL.js.map +0 -1
- package/dist/chunk-PSM3CU7N.js.map +0 -1
- package/dist/chunk-PZKHST7A.js.map +0 -1
- package/dist/chunk-Q5K2J5GG.js.map +0 -1
- package/dist/chunk-QPQ7R77C.js.map +0 -1
- package/dist/chunk-QQIZMVAJ.js.map +0 -1
- package/dist/chunk-SK5S2PCK.js.map +0 -1
- package/dist/chunk-SPD4ULVB.js.map +0 -1
- package/dist/chunk-UTRNLNCW.js.map +0 -1
- package/dist/chunk-UU5FBVRX.js.map +0 -1
- package/dist/chunk-VXORMNU4.js.map +0 -1
- package/dist/chunk-WYGTAQMX.js.map +0 -1
- /package/dist/{browser-viewer-ZHQDVHZ2.js.map → app/components/models/subscription-usage.js.map} +0 -0
- /package/dist/{chat-interactive-block-VSDD6X3M.js.map → app/lib/subscription-accounts.js.map} +0 -0
- /package/dist/{chunk-O2UPPN5M.js.map → browser-viewer-F4FL7JKB.js.map} +0 -0
- /package/dist/{computer-viewer-5LKRCEVQ.js.map → chat-interactive-block-4U5JWRSY.js.map} +0 -0
- /package/dist/{chunk-4K64EKM7.js.map → chunk-22YIIM3X.js.map} +0 -0
- /package/dist/{chunk-3NNAC43A.js.map → chunk-2N7ACQ7M.js.map} +0 -0
- /package/dist/{chunk-WDASYY4S.js.map → chunk-2TEYUDJD.js.map} +0 -0
- /package/dist/{chunk-OTW25A6I.js.map → chunk-37JJQNZB.js.map} +0 -0
- /package/dist/{chunk-VCJQQYRE.js.map → chunk-3DWQPURZ.js.map} +0 -0
- /package/dist/{chunk-GTRAH4FG.js.map → chunk-3GWC3FU3.js.map} +0 -0
- /package/dist/{chunk-AB5IW227.js.map → chunk-3ICY6LP3.js.map} +0 -0
- /package/dist/{chunk-WIFDNUKD.js.map → chunk-3OCU5RX5.js.map} +0 -0
- /package/dist/{chunk-UBRQ3PQD.js.map → chunk-3SPDJLOR.js.map} +0 -0
- /package/dist/{chunk-IZXYFWA4.js.map → chunk-3WVLR7UA.js.map} +0 -0
- /package/dist/{chunk-DEHLWZSI.js.map → chunk-3XMB3L57.js.map} +0 -0
- /package/dist/{chunk-AJBDAVX3.js.map → chunk-4IUOBO2H.js.map} +0 -0
- /package/dist/{chunk-NFCS5WYC.js.map → chunk-4KQ3A3EO.js.map} +0 -0
- /package/dist/{chunk-LIJNVIT3.js.map → chunk-4L5B5AZT.js.map} +0 -0
- /package/dist/{chunk-EDDKPIIV.js.map → chunk-4NB3TPNE.js.map} +0 -0
- /package/dist/{chunk-OJWDNNW3.js.map → chunk-4TPTGBIO.js.map} +0 -0
- /package/dist/{chunk-J2WY42FA.js.map → chunk-4UHGW6WF.js.map} +0 -0
- /package/dist/{chunk-7NLF35YL.js.map → chunk-4YN2JLYK.js.map} +0 -0
- /package/dist/{chunk-OOOSGPJL.js.map → chunk-53MYEEMA.js.map} +0 -0
- /package/dist/{chunk-467WDSOK.js.map → chunk-5HYWXPMA.js.map} +0 -0
- /package/dist/{chunk-XMBOLFFS.js.map → chunk-5IMNL6IV.js.map} +0 -0
- /package/dist/{chunk-4Z5X7PLC.js.map → chunk-5MLM5T5C.js.map} +0 -0
- /package/dist/{chunk-YMI27QPF.js.map → chunk-5NKQZVXP.js.map} +0 -0
- /package/dist/{chunk-CYDXCILL.js.map → chunk-5SODSGW7.js.map} +0 -0
- /package/dist/{chunk-Q5EZNBPI.js.map → chunk-5YAJASCO.js.map} +0 -0
- /package/dist/{chunk-M3FDGRB4.js.map → chunk-62XAL5BA.js.map} +0 -0
- /package/dist/{chunk-SGH7I7OY.js.map → chunk-67R6NAFI.js.map} +0 -0
- /package/dist/{chunk-PYB4BFEC.js.map → chunk-6BQLDL6R.js.map} +0 -0
- /package/dist/{chunk-YJSCLGAW.js.map → chunk-6EZYHJTL.js.map} +0 -0
- /package/dist/{chunk-G5UQBTXY.js.map → chunk-6LXIL3Q3.js.map} +0 -0
- /package/dist/{chunk-T67LTMSW.js.map → chunk-6LYVAJFZ.js.map} +0 -0
- /package/dist/{chunk-3L465FBR.js.map → chunk-6WB5UXMZ.js.map} +0 -0
- /package/dist/{chunk-EKJHOWTZ.js.map → chunk-74UGYVCA.js.map} +0 -0
- /package/dist/{chunk-PWUSSSSL.js.map → chunk-7BTNYZC7.js.map} +0 -0
- /package/dist/{chunk-ESXAECZ3.js.map → chunk-7KZFGA25.js.map} +0 -0
- /package/dist/{chunk-EGKARC53.js.map → chunk-7MGDX2TD.js.map} +0 -0
- /package/dist/{chunk-Y3XZEKDQ.js.map → chunk-7N3GFGB6.js.map} +0 -0
- /package/dist/{chunk-AH3DGOTK.js.map → chunk-7SFSN6AX.js.map} +0 -0
- /package/dist/{chunk-6QK65ZWM.js.map → chunk-7TGUHFGO.js.map} +0 -0
- /package/dist/{chunk-QURYQFDN.js.map → chunk-7ZIWO65F.js.map} +0 -0
- /package/dist/{chunk-OYCK4JRS.js.map → chunk-AJHLEJTK.js.map} +0 -0
- /package/dist/{chunk-3PZ3LRPV.js.map → chunk-AN4U7EPH.js.map} +0 -0
- /package/dist/{chunk-77BHKC43.js.map → chunk-APG6CEG7.js.map} +0 -0
- /package/dist/{chunk-FSDQQQIA.js.map → chunk-APHLXQNP.js.map} +0 -0
- /package/dist/{chunk-SN2WENRP.js.map → chunk-AXHQ7QXV.js.map} +0 -0
- /package/dist/{chunk-54U6ZBEX.js.map → chunk-AYTLSPF6.js.map} +0 -0
- /package/dist/{chunk-R33SBMB7.js.map → chunk-BBSKKBMV.js.map} +0 -0
- /package/dist/{chunk-2GCHGWNE.js.map → chunk-BGH6TU2P.js.map} +0 -0
- /package/dist/{chunk-D3PTVN2I.js.map → chunk-BGIYL26H.js.map} +0 -0
- /package/dist/{chunk-BQYRZIZ7.js.map → chunk-BL7UQUC3.js.map} +0 -0
- /package/dist/{chunk-EBTUPRRQ.js.map → chunk-BOUHCYL6.js.map} +0 -0
- /package/dist/{chunk-MKDFYE2E.js.map → chunk-BVNGDFBC.js.map} +0 -0
- /package/dist/{chunk-ICAMYP5M.js.map → chunk-BWJK64CP.js.map} +0 -0
- /package/dist/{chunk-RHXYO4H2.js.map → chunk-BZ2GTCQV.js.map} +0 -0
- /package/dist/{chunk-GIWFLWXG.js.map → chunk-C2KASMJK.js.map} +0 -0
- /package/dist/{chunk-KO3OHHY2.js.map → chunk-CAZDRDQT.js.map} +0 -0
- /package/dist/{chunk-OK7BQMCI.js.map → chunk-CBJRZKZB.js.map} +0 -0
- /package/dist/{chunk-OYOFPNLC.js.map → chunk-CF6NYG7J.js.map} +0 -0
- /package/dist/{chunk-MT2R57SF.js.map → chunk-COITN7WN.js.map} +0 -0
- /package/dist/{chunk-OCXTTKVA.js.map → chunk-CPVOXM2Q.js.map} +0 -0
- /package/dist/{chunk-HYEIA25Y.js.map → chunk-CTZRCBKH.js.map} +0 -0
- /package/dist/{chunk-OCXEY7HE.js.map → chunk-CWL27YTB.js.map} +0 -0
- /package/dist/{chunk-K4DQS2ML.js.map → chunk-D2I33V5P.js.map} +0 -0
- /package/dist/{chunk-736RUNIA.js.map → chunk-DF7WI4JH.js.map} +0 -0
- /package/dist/{chunk-KUE5BOQE.js.map → chunk-DKZYCJCO.js.map} +0 -0
- /package/dist/{chunk-74CBR5YE.js.map → chunk-DQ32FKFQ.js.map} +0 -0
- /package/dist/{chunk-4O2XWOLZ.js.map → chunk-DTKG2YUF.js.map} +0 -0
- /package/dist/{chunk-GMHIOYB7.js.map → chunk-DUDA4V5R.js.map} +0 -0
- /package/dist/{chunk-XUOYNJPB.js.map → chunk-ECROT4M5.js.map} +0 -0
- /package/dist/{chunk-PVB4YVDP.js.map → chunk-EOXV5XGY.js.map} +0 -0
- /package/dist/{chunk-U6552Q3T.js.map → chunk-EQQOZ6DD.js.map} +0 -0
- /package/dist/{chunk-G6ICCGJ3.js.map → chunk-EY6W5H4B.js.map} +0 -0
- /package/dist/{chunk-HWVPLFIW.js.map → chunk-EYRFEWXJ.js.map} +0 -0
- /package/dist/{chunk-U4LTPFD2.js.map → chunk-FKK2PD7K.js.map} +0 -0
- /package/dist/{chunk-PUUEI4W3.js.map → chunk-FPHHIC5K.js.map} +0 -0
- /package/dist/{chunk-SP44O3OU.js.map → chunk-FQM6L22H.js.map} +0 -0
- /package/dist/{chunk-2J77TWGH.js.map → chunk-FW22IREV.js.map} +0 -0
- /package/dist/{chunk-EBIVTDEG.js.map → chunk-G4M6AYDB.js.map} +0 -0
- /package/dist/{chunk-BASI553K.js.map → chunk-G6AZ2WIU.js.map} +0 -0
- /package/dist/{chunk-SJYTQLN3.js.map → chunk-GJ5IDSAX.js.map} +0 -0
- /package/dist/{chunk-TDTD66BK.js.map → chunk-GRDSEZWZ.js.map} +0 -0
- /package/dist/{chunk-MV2CLIO6.js.map → chunk-HBVJIGY2.js.map} +0 -0
- /package/dist/{chunk-R4JA5JFI.js.map → chunk-HCWQLIOE.js.map} +0 -0
- /package/dist/{chunk-MZY3VKKM.js.map → chunk-HEVD4A5G.js.map} +0 -0
- /package/dist/{chunk-DLVIRJGK.js.map → chunk-HNDHSEVJ.js.map} +0 -0
- /package/dist/{chunk-LPKJ77EK.js.map → chunk-HNTZ7B7M.js.map} +0 -0
- /package/dist/{chunk-IN3VQFKS.js.map → chunk-I2FC7CAI.js.map} +0 -0
- /package/dist/{chunk-ZBHGNE2J.js.map → chunk-IEHZFYMH.js.map} +0 -0
- /package/dist/{chunk-DWJ6J3YW.js.map → chunk-IXISEVD7.js.map} +0 -0
- /package/dist/{chunk-TK5FWVZR.js.map → chunk-IZEDVQUD.js.map} +0 -0
- /package/dist/{chunk-HEGV4QMS.js.map → chunk-J42QE4VO.js.map} +0 -0
- /package/dist/{chunk-PRT4J2DL.js.map → chunk-J555XSUM.js.map} +0 -0
- /package/dist/{chunk-SBXSKRFA.js.map → chunk-JNMHFSDF.js.map} +0 -0
- /package/dist/{chunk-KI46GKMD.js.map → chunk-JTBAOPYO.js.map} +0 -0
- /package/dist/{chunk-SXGJL7UT.js.map → chunk-K376MPJH.js.map} +0 -0
- /package/dist/{chunk-OSJ366KR.js.map → chunk-KEBVT55V.js.map} +0 -0
- /package/dist/{chunk-U5UGM5XD.js.map → chunk-KFIZAXHI.js.map} +0 -0
- /package/dist/{chunk-KFNZZ2N6.js.map → chunk-KKGRDBMK.js.map} +0 -0
- /package/dist/{chunk-PLYVGZIN.js.map → chunk-KKIG6DN5.js.map} +0 -0
- /package/dist/{chunk-3OK7Y6ES.js.map → chunk-KKQO2GAA.js.map} +0 -0
- /package/dist/{chunk-DQPIEQGP.js.map → chunk-KO753ZCZ.js.map} +0 -0
- /package/dist/{chunk-YNTLWCF4.js.map → chunk-KYIRWU65.js.map} +0 -0
- /package/dist/{chunk-JKL5S7UQ.js.map → chunk-L6V63DVI.js.map} +0 -0
- /package/dist/{chunk-CV4VVLPZ.js.map → chunk-LCNJ2KNS.js.map} +0 -0
- /package/dist/{chunk-D74Z2N4K.js.map → chunk-LE7YKMTU.js.map} +0 -0
- /package/dist/{chunk-D5TIVCXG.js.map → chunk-LEBEOMVT.js.map} +0 -0
- /package/dist/{embedded-new-voice-GHJRY3YL.js.map → chunk-LKLQVANM.js.map} +0 -0
- /package/dist/{chunk-WXF2RTS4.js.map → chunk-M6URPYUB.js.map} +0 -0
- /package/dist/{chunk-H6BX6WOW.js.map → chunk-MDHFMRBC.js.map} +0 -0
- /package/dist/{chunk-3CDJSKDW.js.map → chunk-MGZO7CHI.js.map} +0 -0
- /package/dist/{chunk-DCEQCGVN.js.map → chunk-MIWU52TW.js.map} +0 -0
- /package/dist/{chunk-LVELUUK6.js.map → chunk-NF6QVVMP.js.map} +0 -0
- /package/dist/{chunk-UMX6DZME.js.map → chunk-NTZ5ZNVK.js.map} +0 -0
- /package/dist/{chunk-FBA2NXYH.js.map → chunk-NWLRABUR.js.map} +0 -0
- /package/dist/{chunk-TNSJFZ6Q.js.map → chunk-O2H2U7YS.js.map} +0 -0
- /package/dist/{chunk-BFFNINCC.js.map → chunk-OAL2PPX4.js.map} +0 -0
- /package/dist/{chunk-WTSQUCHB.js.map → chunk-OCYTHZ4A.js.map} +0 -0
- /package/dist/{chunk-ZAX4XQLN.js.map → chunk-OEDTCIXF.js.map} +0 -0
- /package/dist/{chunk-CHU3RDV4.js.map → chunk-OLVSYB3P.js.map} +0 -0
- /package/dist/{chunk-IFSXVU2S.js.map → chunk-OQHTFOCA.js.map} +0 -0
- /package/dist/{chunk-OXQ2SXVC.js.map → chunk-P56AVROH.js.map} +0 -0
- /package/dist/{chunk-CXAN2FHF.js.map → chunk-PCEJHHGP.js.map} +0 -0
- /package/dist/{chunk-5MIBQ4P5.js.map → chunk-PHGQGVVL.js.map} +0 -0
- /package/dist/{chunk-FLWQJDJ5.js.map → chunk-PUZRHEQI.js.map} +0 -0
- /package/dist/{chunk-OP2GD6QW.js.map → chunk-PV7U6OOJ.js.map} +0 -0
- /package/dist/{chunk-X2QJXDE4.js.map → chunk-PZQACDH5.js.map} +0 -0
- /package/dist/{chunk-CH4UQ4NO.js.map → chunk-PZTS4O6E.js.map} +0 -0
- /package/dist/{chunk-TKQL7EDB.js.map → chunk-Q42QHUAQ.js.map} +0 -0
- /package/dist/{chunk-MRECRNVU.js.map → chunk-QCYGB6TZ.js.map} +0 -0
- /package/dist/{chunk-GSCGKJNK.js.map → chunk-QECMETOF.js.map} +0 -0
- /package/dist/{chunk-RMCLFSMX.js.map → chunk-QGX3LE6H.js.map} +0 -0
- /package/dist/{chunk-HTMQGS63.js.map → chunk-QI3NDQFP.js.map} +0 -0
- /package/dist/{chunk-R5QAL43H.js.map → chunk-RA3Q52O2.js.map} +0 -0
- /package/dist/{chunk-AJDGP2N4.js.map → chunk-RJNOQEJJ.js.map} +0 -0
- /package/dist/{chunk-477DTTMH.js.map → chunk-RSFOFUR7.js.map} +0 -0
- /package/dist/{chunk-JV5ULONH.js.map → chunk-RXR6PMSH.js.map} +0 -0
- /package/dist/{chunk-J2BTILRR.js.map → chunk-SM7HFCGC.js.map} +0 -0
- /package/dist/{chunk-OBGOLHCP.js.map → chunk-T4HK4XCI.js.map} +0 -0
- /package/dist/{chunk-XVLEBB4Y.js.map → chunk-TBWL6YWL.js.map} +0 -0
- /package/dist/{chunk-AAS7OWV6.js.map → chunk-TIDXYWFX.js.map} +0 -0
- /package/dist/{chunk-N3FM4BNA.js.map → chunk-TKHRGY2P.js.map} +0 -0
- /package/dist/{chunk-GU7T2S5N.js.map → chunk-TU2GSZL7.js.map} +0 -0
- /package/dist/{chunk-OI6VI6SU.js.map → chunk-U6HGJXXQ.js.map} +0 -0
- /package/dist/{chunk-4BWMAGJJ.js.map → chunk-UGRW6RTR.js.map} +0 -0
- /package/dist/{chunk-AVXDIRRW.js.map → chunk-UMRUDYUK.js.map} +0 -0
- /package/dist/{chunk-FNXCFIPW.js.map → chunk-UOT2R5ZD.js.map} +0 -0
- /package/dist/{chunk-DIP7YALH.js.map → chunk-USURKJVT.js.map} +0 -0
- /package/dist/{chunk-S27VZ5DO.js.map → chunk-UU6Q67XM.js.map} +0 -0
- /package/dist/{chunk-LTJFV2JI.js.map → chunk-UZ7NP5CW.js.map} +0 -0
- /package/dist/{chunk-H6MJFMHZ.js.map → chunk-V4FO7UOE.js.map} +0 -0
- /package/dist/{chunk-RGR57NYY.js.map → chunk-V4ZOZRCW.js.map} +0 -0
- /package/dist/{chunk-LQKVNREV.js.map → chunk-V57YMKQZ.js.map} +0 -0
- /package/dist/{chunk-XZCCEKPW.js.map → chunk-VOIWZBY6.js.map} +0 -0
- /package/dist/{chunk-E5KOWRDU.js.map → chunk-VPHPLPDA.js.map} +0 -0
- /package/dist/{chunk-OGU73VUN.js.map → chunk-VUL4KPUU.js.map} +0 -0
- /package/dist/{chunk-SFIXTOOJ.js.map → chunk-VWF6ILAR.js.map} +0 -0
- /package/dist/{chunk-FER6EVIY.js.map → chunk-W54BHJO7.js.map} +0 -0
- /package/dist/{chunk-34NV52R3.js.map → chunk-WCYE4BLC.js.map} +0 -0
- /package/dist/{chunk-RISUROBM.js.map → chunk-WTV25ELY.js.map} +0 -0
- /package/dist/{chunk-UO35OEOX.js.map → chunk-WZYGH7CN.js.map} +0 -0
- /package/dist/{chunk-CEMSIU4Z.js.map → chunk-XG2RWUF7.js.map} +0 -0
- /package/dist/{chunk-K3D7IQQP.js.map → chunk-XV7QOT7W.js.map} +0 -0
- /package/dist/{chunk-GOCODNQS.js.map → chunk-XWECT3GX.js.map} +0 -0
- /package/dist/{chunk-5MHMCE2G.js.map → chunk-XZQK2ZLW.js.map} +0 -0
- /package/dist/{chunk-JV3UI7BH.js.map → chunk-Y5BR66OH.js.map} +0 -0
- /package/dist/{chunk-4F3AEJI6.js.map → chunk-YD6XU6FY.js.map} +0 -0
- /package/dist/{chunk-VATYK3JQ.js.map → chunk-YFE47G3C.js.map} +0 -0
- /package/dist/{chunk-ZR5EKJT6.js.map → chunk-YG6TWPP7.js.map} +0 -0
- /package/dist/{chunk-44JWVYJB.js.map → chunk-YH3ARKBB.js.map} +0 -0
- /package/dist/{chunk-752WXSDN.js.map → chunk-YI66STKJ.js.map} +0 -0
- /package/dist/{chunk-QRECBCJM.js.map → chunk-YMVPYMKB.js.map} +0 -0
- /package/dist/{chunk-77SYIH6O.js.map → chunk-YPIXBAF6.js.map} +0 -0
- /package/dist/{chunk-WRMUXZ7C.js.map → chunk-YSWPNY6G.js.map} +0 -0
- /package/dist/{chunk-GTHCHCWW.js.map → chunk-YWNNMBZG.js.map} +0 -0
- /package/dist/{chunk-3DRLCX5V.js.map → chunk-Z3HYM2JT.js.map} +0 -0
- /package/dist/{chunk-M3HGBO2Y.js.map → chunk-ZAC7YPRA.js.map} +0 -0
- /package/dist/{chunk-2VJOSU4H.js.map → chunk-ZENESDAF.js.map} +0 -0
- /package/dist/{chunk-4JXPLTWV.js.map → chunk-ZHAPMETO.js.map} +0 -0
- /package/dist/{chunk-IJR6VOLU.js.map → chunk-ZVR6DUZH.js.map} +0 -0
- /package/dist/{embedded-voice-ASQXBSTX.js.map → computer-viewer-FOIOZUF5.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-E6XKMFTA.js.map → embedded-new-voice-WTXAJNGO.js.map} +0 -0
- /package/dist/{sandbox-files-W5W2LW4K.js.map → embedded-voice-SIJOPN2G.js.map} +0 -0
- /package/dist/{fleet-decision-row-U7LDVBEM.js.map → fleet-decision-row-XKQ3GMYT.js.map} +0 -0
- /package/dist/{latest-question-RNVF262Q.js.map → latest-question-KA7AQYVI.js.map} +0 -0
- /package/dist/{session-connect-cards-HPH7JOZP.js.map → model-policy-picker-menu-6N2G7VGX.js.map} +0 -0
- /package/dist/{payment-page-card-DJDKV2LW.js.map → payment-page-card-IJFZHQ52.js.map} +0 -0
- /package/dist/{platform-activity-row-MSDCSMET.js.map → platform-activity-row-MFCMGI43.js.map} +0 -0
- /package/dist/{queue-surface-implementation-GUAIG6TK.js.map → queue-surface-implementation-BBCDWWOP.js.map} +0 -0
- /package/dist/{recorder-host-2MYDJPQW.js.map → recorder-host-LDYYOKG7.js.map} +0 -0
- /package/dist/{session-realtime-SDTKFFIR.js.map → sandbox-files-VYRBIXJY.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-FNILLWNU.js.map → timeline-annotation-markers-LL6ZVBZH.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-MBCIDO2Q.js.map → timeline-annotation-selection-WQA76WYC.js.map} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
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 (
|
|
67
|
-
|
|
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
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
|
119
|
-
|
|
120
|
-
|
|
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
|
|
149
|
-
const
|
|
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 } :
|
|
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
|
|
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
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
144
|
+
label,
|
|
162
145
|
account.email,
|
|
163
|
-
account.plan,
|
|
146
|
+
subscriptionPlanLabel(provider, account.plan),
|
|
164
147
|
accountSource(account),
|
|
165
|
-
|
|
166
|
-
].filter(
|
|
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 ?? (
|
|
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
|
-
|
|
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
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
918
|
+
//# sourceMappingURL=chunk-TBWL6YWL.js.map
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
rememberedMachineFolder,
|
|
15
15
|
workspaceDefaultRigOptionLabel
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-UMRUDYUK.js";
|
|
17
17
|
import {
|
|
18
18
|
t
|
|
19
|
-
} from "./chunk-
|
|
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-
|
|
499
|
+
//# sourceMappingURL=chunk-TIDXYWFX.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
useField
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
32
|
+
} from "./chunk-D2I33V5P.js";
|
|
33
33
|
import {
|
|
34
34
|
createWorkspaceRetainedArtifactLoader
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-6GW7NJMK.js";
|
|
36
36
|
import {
|
|
37
37
|
LoadFailureNotice,
|
|
38
38
|
isChunkLoadError
|
|
39
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
141
|
+
//# sourceMappingURL=chunk-UGRW6RTR.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
capabilityOn,
|
|
4
4
|
draftFromRequest
|
|
5
|
-
} from "./chunk-
|
|
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-
|
|
403
|
+
//# sourceMappingURL=chunk-UMRUDYUK.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
LoadFailureNotice,
|
|
4
4
|
isChunkLoadError
|
|
5
|
-
} from "./chunk-
|
|
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-
|
|
27
|
+
//# sourceMappingURL=chunk-UOT2R5ZD.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
useFieldControlProps
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
271
|
+
//# sourceMappingURL=chunk-USURKJVT.js.map
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
RailTrailingMetadata
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7D3WIDKK.js";
|
|
5
5
|
import {
|
|
6
6
|
summarizeRailRow
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2PY5XD3F.js";
|
|
8
8
|
import {
|
|
9
9
|
readChatDirectory,
|
|
10
10
|
rememberChats
|
|
11
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
48
|
+
//# sourceMappingURL=chunk-UZ7NP5CW.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
SessionProfileDialog
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
184
|
+
//# sourceMappingURL=chunk-V4ZOZRCW.js.map
|