@opengeni/react 4.6.1 → 4.6.2-canary.39854174564001
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 +5 -5
- package/dist/app/components/Composer.js +14 -14
- package/dist/app/components/artifacts/artifact-library.js +2 -2
- package/dist/app/components/artifacts/chat-interactive-block.js +10 -10
- package/dist/app/components/artifacts/inline-chat-image.js +14 -14
- package/dist/app/components/artifacts/retained-file-preview.js +15 -15
- package/dist/app/components/artifacts/retained-text-preview.js +2 -2
- package/dist/app/components/artifacts/site-conversations.js +4 -3
- package/dist/app/components/artifacts/site-data.js +2 -2
- package/dist/app/components/artifacts/site-publishing.js +11 -11
- package/dist/app/components/artifacts/site-settings.js +12 -12
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/capabilities/capability-detail-sheet.js +2 -2
- package/dist/app/components/capabilities/capability-logo-source.js +7 -7
- package/dist/app/components/capabilities/native-connect-readiness.js +1 -0
- package/dist/app/components/capabilities/native-connect-readiness.js.map +1 -1
- package/dist/app/components/capabilities/native-connect-setup.js +6 -6
- package/dist/app/components/capabilities/perform-capability-action.js +2 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +8 -8
- package/dist/app/components/capabilities/session-capability-card.js +28 -27
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +14 -14
- package/dist/app/components/capabilities/session-custom-mcp-card.js +9 -9
- package/dist/app/components/capabilities/session-github-card.js +9 -9
- package/dist/app/components/capabilities/session-machine-card.js +13 -13
- package/dist/app/components/command-menu/chat-status.js +6 -5
- package/dist/app/components/command-menu/chat-switcher.d.ts +2 -0
- package/dist/app/components/command-menu/chat-switcher.js +26 -9
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +9 -8
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +4 -4
- package/dist/app/components/composer-mobile-plus-panel.js +5 -5
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +3 -3
- package/dist/app/components/desktop/app-shots.js +5 -5
- package/dist/app/components/desktop/this-computer.js +4 -4
- 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 +3 -3
- package/dist/app/components/markdown.js +4 -4
- package/dist/app/components/models/models-ui.js +2 -2
- package/dist/app/components/pickers.js +5 -5
- package/dist/app/components/rail/rail-context.js +1 -1
- package/dist/app/components/rail/rail-sections.js +15 -14
- package/dist/app/components/rail/session-header.d.ts +6 -5
- package/dist/app/components/rail/session-header.js +11 -10
- package/dist/app/components/rail/session-list.js +14 -13
- package/dist/app/components/rail/session-row-hover-details.js +7 -6
- package/dist/app/components/rail/session-shell.js +30 -32
- package/dist/app/components/rail/site-session-group-heading.js +2 -1
- package/dist/app/components/session/agent-configuration-panel.js +3 -3
- package/dist/app/components/session/banners.js +6 -6
- package/dist/app/components/session/editable-artifacts-workspace.js +12 -12
- package/dist/app/components/session/failed-session-banner.js +4 -4
- package/dist/app/components/session/human-input.js +24 -24
- package/dist/app/components/session/inspector.js +30 -30
- package/dist/app/components/session/message-actions.js +3 -3
- package/dist/app/components/session/message-resource-attachments.js +5 -5
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +4 -4
- package/dist/app/components/session/sandbox-switcher.js +7 -7
- package/dist/app/components/session/sandbox-workspace.js +33 -33
- package/dist/app/components/session/search-markdown-highlight.js +5 -5
- package/dist/app/components/session/search-results-view.js +6 -6
- package/dist/app/components/session/session-admission-notice.js +4 -4
- package/dist/app/components/session/session-machine-access-notice.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +6 -6
- package/dist/app/components/session/session-usage-limit-section.js +3 -3
- package/dist/app/components/session/session-wait-status.js +2 -1
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/subagents.js +5 -4
- package/dist/app/components/session/subscription-account-indicator.d.ts +35 -0
- package/dist/app/components/session/{codex-account-indicator.js → subscription-account-indicator.js} +23 -10
- package/dist/app/components/session/subscription-account-menu.d.ts +11 -12
- package/dist/app/components/session/subscription-account-menu.js +1 -1
- package/dist/app/components/session/subscription-account.d.ts +105 -0
- package/dist/app/components/usage/usage-entry.js +3 -3
- package/dist/app/components/workspace-composer-plus.js +10 -10
- package/dist/app/embed/session-app.js +92 -94
- package/dist/app/lib/actions/actions-provider.js +4 -4
- package/dist/app/lib/actions/chat-switcher.d.ts +19 -7
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +8 -8
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/drive-connect-return.d.ts +26 -0
- package/dist/app/lib/drive-connect-return.js +16 -0
- package/dist/app/lib/events.js +7 -7
- 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 +6 -5
- package/dist/app/lib/session-group-pagination.js +6 -5
- package/dist/app/lib/session-hover-facts.js +6 -5
- package/dist/app/lib/session-rail.js +2 -1
- package/dist/app/lib/sessions-group.js +5 -4
- package/dist/app/lib/turn-failure-analytics.js +4 -4
- 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 +26 -25
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +15 -15
- package/dist/app/routes/session.js +64 -63
- package/dist/app/routes/sessions-index.js +41 -41
- package/dist/app/routes/site-view.js +30 -29
- package/dist/app/routes/site-view.js.map +1 -1
- 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/{browser-viewer-YQC6BFMS.js → browser-viewer-VKIAULG7.js} +4 -4
- package/dist/{chat-interactive-block-Z22YHDRU.js → chat-interactive-block-JGYSW4KB.js} +5 -5
- package/dist/{chunk-WN2MIB4Q.js → chunk-22V2QCEM.js} +2 -2
- package/dist/{chunk-SJPAKWWP.js → chunk-2BISI664.js} +2 -2
- package/dist/{chunk-O5UOCMH4.js → chunk-2LPJVEWY.js} +3 -3
- package/dist/{chunk-JI6WPLZB.js → chunk-2SBCOGQN.js} +4 -4
- package/dist/{chunk-6JF7C3U3.js → chunk-2WERWWSS.js} +2 -2
- package/dist/{chunk-4XKT4ENZ.js → chunk-2Y3QL3DA.js} +4 -4
- package/dist/{chunk-KVMFT6FN.js → chunk-3FL3F4WF.js} +2 -2
- package/dist/{chunk-4VJOZJDV.js → chunk-3JPQAIYJ.js} +2 -2
- package/dist/{chunk-27EORKJ4.js → chunk-3N4LNBJF.js} +2 -2
- package/dist/{chunk-7JZSFJHB.js → chunk-3OJU3RUR.js} +2 -2
- package/dist/{chunk-NV5OYV3G.js → chunk-3U6K36QA.js} +5 -5
- package/dist/{chunk-MDRLP5DO.js → chunk-3W7ROHN4.js} +3 -3
- package/dist/{chunk-3MQM4ZOC.js → chunk-3Y6ZR2VN.js} +3 -3
- package/dist/{chunk-HXZIX7MR.js → chunk-47AB65IO.js} +4 -4
- package/dist/{chunk-DNYD7AUG.js → chunk-4BOLIZ7Y.js} +3 -3
- package/dist/{chunk-4XO346BW.js → chunk-4FBJFQFU.js} +2 -2
- package/dist/{chunk-DAQG3C4W.js → chunk-4HM6YDBX.js} +3 -3
- package/dist/{chunk-BWKZEW6K.js → chunk-4T3E56NT.js} +3 -3
- package/dist/{chunk-4PC7LIQK.js → chunk-4ZMUWRFF.js} +3 -3
- package/dist/{chunk-O4AWXTZQ.js → chunk-52XIYULR.js} +3 -3
- package/dist/{chunk-GXK4CUAB.js → chunk-5WQKTT5Z.js} +2 -2
- package/dist/{chunk-MHIYYHCL.js → chunk-5ZAHAUWD.js} +10 -10
- package/dist/{chunk-6N7W3TOV.js → chunk-63BPMTBM.js} +2 -2
- package/dist/{chunk-R5YZ3ROM.js → chunk-63PQKTTT.js} +2 -2
- package/dist/{chunk-WLZVXCPZ.js → chunk-6GO6WN22.js} +3 -3
- package/dist/{chunk-6PQBKMUL.js → chunk-6IIA63VD.js} +11 -7
- package/dist/chunk-6IIA63VD.js.map +1 -0
- package/dist/{chunk-PQCFW2KT.js → chunk-6IRDW7K3.js} +18 -13
- package/dist/chunk-6IRDW7K3.js.map +1 -0
- package/dist/{chunk-XDCZBOEY.js → chunk-6LGBGPBU.js} +1 -1
- package/dist/{chunk-D4QOZXPM.js → chunk-7ITDATTP.js} +2 -2
- package/dist/{chunk-M5E3CKSE.js → chunk-7QWWE5XL.js} +2 -2
- package/dist/{chunk-RABKQFTA.js → chunk-A2HCAMRH.js} +2 -2
- package/dist/{chunk-6K3WNTRI.js → chunk-AODISQO6.js} +2 -2
- package/dist/{chunk-C6JL6PBL.js → chunk-AQDRH6VF.js} +3 -3
- package/dist/{chunk-72XEFLMD.js → chunk-ASWINLSW.js} +2 -2
- package/dist/{chunk-DNLXQUBX.js → chunk-B746OUJC.js} +24 -36
- package/dist/chunk-B746OUJC.js.map +1 -0
- package/dist/{chunk-FVCLVASD.js → chunk-B7ZKSROO.js} +24 -24
- package/dist/{chunk-EURDMOXZ.js → chunk-BYJZUCOQ.js} +2 -2
- package/dist/{chunk-ZWACUOU5.js → chunk-CDBGAAJY.js} +3 -3
- package/dist/chunk-CDBGAAJY.js.map +1 -0
- package/dist/{chunk-BPD4IJBG.js → chunk-CG6CJMIS.js} +2 -2
- package/dist/{chunk-B254JG72.js → chunk-CQX24PT7.js} +2 -2
- package/dist/{chunk-HJTTDLF6.js → chunk-CY3NO4JN.js} +4 -4
- package/dist/{chunk-OLUG4IFF.js → chunk-D2RLPRSG.js} +2 -2
- package/dist/{chunk-74NIHMAT.js → chunk-D653JH6D.js} +3 -3
- package/dist/{chunk-FMATVQFW.js → chunk-DA6EQDFR.js} +6 -6
- package/dist/{chunk-2LUO22FR.js → chunk-DAI5CTQF.js} +4 -4
- package/dist/{chunk-HTKVYEVB.js → chunk-DBM4ZXDN.js} +2 -2
- package/dist/{chunk-MB2DTUEG.js → chunk-DNYKLU3K.js} +4 -4
- package/dist/{chunk-NPDL4W4Y.js → chunk-DT53LBQN.js} +44 -45
- package/dist/chunk-DT53LBQN.js.map +1 -0
- package/dist/{chunk-26P7B46A.js → chunk-DXYARXK3.js} +3 -3
- package/dist/{chunk-JQKURO3S.js → chunk-E4MQRQ6Z.js} +2 -2
- package/dist/{chunk-KW53DBY7.js → chunk-EBW2E32G.js} +2 -2
- package/dist/{chunk-O73DRA77.js → chunk-ENKBO7FC.js} +4 -4
- package/dist/{chunk-32HA7DXJ.js → chunk-EQNGX77H.js} +11 -11
- package/dist/{chunk-CA64OZLZ.js → chunk-FAPYRTG6.js} +4 -4
- package/dist/{chunk-WWM7WVD2.js → chunk-GABFKHQE.js} +2 -2
- package/dist/chunk-GLCOKWLH.js +42 -0
- package/dist/chunk-GLCOKWLH.js.map +1 -0
- package/dist/{chunk-OHG2UQ2O.js → chunk-GNM3OY36.js} +51 -13
- package/dist/chunk-GNM3OY36.js.map +1 -0
- package/dist/{chunk-JJ7VMIEQ.js → chunk-H2GTWX4D.js} +14 -14
- package/dist/{chunk-LR7U3HCD.js → chunk-HPSATFLQ.js} +4 -4
- package/dist/{chunk-TM2ZLY3Q.js → chunk-I56TUH3Z.js} +13 -13
- package/dist/{chunk-ZZUKJ5HQ.js → chunk-IG2ERMSB.js} +2 -2
- package/dist/{chunk-2SZ3KC5S.js → chunk-IMKIIS4Y.js} +2 -2
- package/dist/{chunk-I57HZMMA.js → chunk-IXIE3H43.js} +2 -2
- package/dist/{chunk-OWJD3V4V.js → chunk-J3YQ3554.js} +2 -2
- package/dist/{chunk-BCFHMBMK.js → chunk-J5HZBHU4.js} +7 -7
- package/dist/{chunk-UHMMRQGU.js → chunk-KD7GNHOP.js} +3 -3
- package/dist/{chunk-RXMIXKB3.js → chunk-KIKAVZOW.js} +2 -2
- package/dist/{chunk-X7Z4B5GK.js → chunk-KPL7EXS6.js} +2 -2
- package/dist/{chunk-GTR2WUBA.js → chunk-KX6M5CJI.js} +1 -1
- package/dist/{chunk-CYO5HL4C.js → chunk-KYL2BPS2.js} +2 -2
- package/dist/{chunk-ZPZYYSHW.js → chunk-L7EAQGWN.js} +5 -5
- package/dist/{chunk-QLDMF7MH.js → chunk-LC5HE7PZ.js} +2 -2
- package/dist/{chunk-3SMJ2BIQ.js → chunk-LGD5RESZ.js} +7 -33
- package/dist/chunk-LGD5RESZ.js.map +1 -0
- package/dist/{chunk-4ICPJZAB.js → chunk-LMYSYG6U.js} +2 -2
- package/dist/{chunk-3ZZOE4SN.js → chunk-LOCDYMD6.js} +4 -4
- package/dist/{chunk-DNWBLT4U.js → chunk-MASBMJ2M.js} +2 -2
- package/dist/{chunk-6VITVQ23.js → chunk-MTYE2PPR.js} +1 -1
- package/dist/{chunk-NZMQDUOD.js → chunk-MU6HYDNF.js} +5 -5
- package/dist/{chunk-GMVKCEBG.js → chunk-MY6QEDZ2.js} +2 -2
- package/dist/{chunk-SK57RWSA.js → chunk-MZGKQ5WV.js} +2 -2
- package/dist/{chunk-HSQRYJ4P.js → chunk-N52SFH2K.js} +2 -2
- package/dist/{chunk-CEQUNJJY.js → chunk-NDCP5TVN.js} +2 -2
- package/dist/{chunk-MY6VZVCP.js → chunk-OAJX5CEL.js} +4 -4
- package/dist/{chunk-BQWUXC55.js → chunk-OBBLVC2W.js} +9 -9
- package/dist/{chunk-IWIMIRV3.js → chunk-OSJTLQXA.js} +9 -4
- package/dist/chunk-OSJTLQXA.js.map +1 -0
- package/dist/{chunk-FH75NNLB.js → chunk-OZ5NAXCP.js} +2 -2
- package/dist/{chunk-PEGNFZ3F.js → chunk-P5S777YI.js} +2 -2
- package/dist/{chunk-LY6727IF.js → chunk-PPSVFNEA.js} +1 -1
- package/dist/{chunk-K4FDZVMQ.js → chunk-PR42VIVY.js} +2 -2
- package/dist/{chunk-I74J2UZ2.js → chunk-PWMZCW4H.js} +8 -8
- package/dist/{chunk-6YDXUE5H.js → chunk-PYA2O3WS.js} +2 -2
- package/dist/{chunk-GUIZDI5T.js → chunk-Q2PA4KZS.js} +2 -2
- package/dist/{chunk-DZH2HTTB.js → chunk-R27GW5WV.js} +1 -1
- package/dist/chunk-R4U4EWZG.js +414 -0
- package/dist/chunk-R4U4EWZG.js.map +1 -0
- package/dist/{chunk-7OIBLMDP.js → chunk-RAQISW42.js} +2 -2
- package/dist/{chunk-CPKD2YGK.js → chunk-RNU5CUPI.js} +2 -2
- package/dist/{chunk-467VRP4E.js → chunk-RO5YZQHZ.js} +3 -3
- package/dist/{chunk-SSZROOOI.js → chunk-ROLXYGT5.js} +2 -2
- package/dist/{chunk-F4B2YYCN.js → chunk-TAWFXRXB.js} +3 -3
- package/dist/{chunk-G3FU2IF7.js → chunk-TB7UW5BB.js} +3 -3
- package/dist/{chunk-NF6Q4XTN.js → chunk-TQF2I5SY.js} +3 -3
- package/dist/{chunk-MM7OKOTE.js → chunk-UBXHP224.js} +43 -18
- package/dist/chunk-UBXHP224.js.map +1 -0
- package/dist/{chunk-M7A226EQ.js → chunk-UL44R3W2.js} +2 -2
- package/dist/{chunk-65K5LV4L.js → chunk-UQKBV22P.js} +21 -20
- package/dist/{chunk-65K5LV4L.js.map → chunk-UQKBV22P.js.map} +1 -1
- package/dist/{chunk-GTR5NLVP.js → chunk-VCRQPLKS.js} +2 -2
- package/dist/{chunk-NWSAF6P5.js → chunk-WJDH7CH5.js} +22 -1
- package/dist/chunk-WJDH7CH5.js.map +1 -0
- package/dist/{chunk-LG67ZNRU.js → chunk-WK2ZCTUF.js} +2 -2
- package/dist/{chunk-XGE75VPK.js → chunk-WNARM3LY.js} +3 -3
- package/dist/{chunk-RNBH5TSM.js → chunk-WQ2RTQYO.js} +2 -2
- package/dist/chunk-X5XEYQ4B.js +84 -0
- package/dist/chunk-X5XEYQ4B.js.map +1 -0
- package/dist/{chunk-W57QFLQD.js → chunk-X6JIGNLI.js} +4 -4
- package/dist/{chunk-CKA4SJRK.js → chunk-XIQDCQX7.js} +2 -2
- package/dist/{chunk-AJ7PY4FJ.js → chunk-Y3GCG6CA.js} +2 -2
- package/dist/{chunk-2K27S6LK.js → chunk-Y565N5ZJ.js} +24 -7
- package/dist/chunk-Y565N5ZJ.js.map +1 -0
- package/dist/{chunk-ZRB4M3GG.js → chunk-YC5KH7ZB.js} +3 -3
- package/dist/{chunk-4RY64KQY.js → chunk-YJUKLLNP.js} +2 -2
- package/dist/{chunk-24POWVUY.js → chunk-ZDJNRRVS.js} +4 -4
- package/dist/{chunk-S6WJ6TUT.js → chunk-ZEVJGMNB.js} +2 -2
- package/dist/chunk-ZEVJGMNB.js.map +1 -0
- package/dist/{chunk-M7YEZR6X.js → chunk-ZITMDA4C.js} +2 -2
- package/dist/components/model-policy-picker.d.ts +2 -0
- package/dist/composer.js +6 -6
- package/dist/{computer-viewer-BWVNDFTO.js → computer-viewer-6CRLWQHP.js} +5 -5
- package/dist/connect.js +6 -6
- package/dist/connection-service-presentation.d.ts +1 -4
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-GBXSZ3TO.js → embedded-new-voice-KILV3RYM.js} +5 -5
- package/dist/{embedded-voice-MGI7EK7C.js → embedded-voice-GHDRLCFX.js} +5 -5
- package/dist/{fleet-decision-row-35S3GAUN.js → fleet-decision-row-DQXRRBT7.js} +2 -2
- package/dist/index.js +36 -36
- package/dist/interaction.js +5 -5
- package/dist/machines.js +3 -3
- package/dist/messages/en.d.ts +1 -1
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-KP53N6UJ.js → model-policy-picker-menu-5ALKUJMR.js} +4 -4
- package/dist/{platform-activity-row-ISMXR7NJ.js → platform-activity-row-227C764Z.js} +2 -2
- package/dist/{queue-surface-implementation-ULW7DDJA.js → queue-surface-implementation-H3NOBXU5.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{sandbox-files-QYSD4XCZ.js → sandbox-files-5FEOHUMD.js} +6 -6
- package/dist/session-app.js +92 -94
- package/dist/{session-realtime-JXRLPNUH.js → session-realtime-OHBMODNX.js} +3 -3
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +24 -24
- package/dist/session.js +5 -5
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/connector-logo-index.d.ts +19 -0
- package/dist/{timeline-annotation-markers-OJYKHBEO.js → timeline-annotation-markers-NDHS7MCK.js} +2 -2
- package/dist/{timeline-annotation-selection-6OAZLXFU.js → timeline-annotation-selection-DRQSTJOV.js} +2 -2
- package/dist/{timeline-annotations-dialog-5M6DP5FX.js → timeline-annotations-dialog-G6J5ZJKN.js} +3 -3
- package/dist/timeline-model.d.ts +2 -0
- package/dist/timeline-model.js +9 -1
- package/dist/ui/list-row.js +1 -1
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +4 -4
- package/src/app/components/capabilities/native-connect-readiness.tsx +1 -0
- package/src/app/components/capabilities/perform-capability-action.test.ts +67 -0
- package/src/app/components/capabilities/perform-capability-action.tsx +28 -0
- package/src/app/components/command-menu/chat-switcher.tsx +25 -4
- package/src/app/components/rail/session-header.test.tsx +73 -2
- package/src/app/components/rail/session-header.tsx +20 -12
- package/src/app/components/rail/session-shell.tsx +10 -18
- package/src/app/components/session/subscription-account-indicator.test.ts +239 -0
- package/src/app/components/session/subscription-account-indicator.tsx +361 -0
- package/src/app/components/session/subscription-account-menu.tsx +21 -43
- package/src/app/components/session/subscription-account.test.ts +314 -0
- package/src/app/components/session/subscription-account.ts +354 -0
- package/src/app/lib/actions/actions-provider.tsx +11 -0
- package/src/app/lib/actions/actions.test.ts +59 -4
- package/src/app/lib/actions/chat-switcher.ts +73 -20
- package/src/app/lib/drive-connect-return.test.ts +183 -0
- package/src/app/lib/drive-connect-return.tsx +116 -0
- package/src/app/routes/session.tsx +12 -14
- package/src/app/routes/sessions-index.tsx +1 -0
- package/src/components/model-policy-picker-menu.tsx +25 -4
- package/src/components/model-policy-picker.tsx +2 -0
- package/src/components/session-mcp-capability-card.tsx +13 -4
- package/src/connection-service-presentation.ts +6 -1
- package/src/messages/en.ts +1 -1
- package/src/timeline/connector-logo-index.test.ts +46 -0
- package/src/timeline/connector-logo-index.ts +68 -0
- package/src/timeline-model.ts +6 -0
- package/src/ui/list-row.tsx +38 -10
- package/styles/compiled.css +13 -0
- package/dist/app/components/session/codex-account-indicator.d.ts +0 -9
- package/dist/app/components/session/model-account-indicator.d.ts +0 -10
- package/dist/app/components/session/model-account-indicator.js +0 -34
- package/dist/app/components/session/model-account-usage.d.ts +0 -8
- package/dist/app/components/session/model-account-usage.js +0 -8
- package/dist/chunk-2K27S6LK.js.map +0 -1
- package/dist/chunk-3SMJ2BIQ.js.map +0 -1
- package/dist/chunk-6PQBKMUL.js.map +0 -1
- package/dist/chunk-7H2D4VNU.js +0 -150
- package/dist/chunk-7H2D4VNU.js.map +0 -1
- package/dist/chunk-DNLXQUBX.js.map +0 -1
- package/dist/chunk-HCCSAECI.js +0 -132
- package/dist/chunk-HCCSAECI.js.map +0 -1
- package/dist/chunk-IWIMIRV3.js.map +0 -1
- package/dist/chunk-M77ZQE5T.js +0 -58
- package/dist/chunk-M77ZQE5T.js.map +0 -1
- package/dist/chunk-MM7OKOTE.js.map +0 -1
- package/dist/chunk-NPDL4W4Y.js.map +0 -1
- package/dist/chunk-NWSAF6P5.js.map +0 -1
- package/dist/chunk-OHG2UQ2O.js.map +0 -1
- package/dist/chunk-PQCFW2KT.js.map +0 -1
- package/dist/chunk-S6WJ6TUT.js.map +0 -1
- package/dist/chunk-ZWACUOU5.js.map +0 -1
- package/dist/session-realtime-JXRLPNUH.js.map +0 -1
- package/src/app/components/session/codex-account-indicator.tsx +0 -207
- package/src/app/components/session/model-account-indicator.tsx +0 -189
- package/src/app/components/session/model-account-usage.test.ts +0 -59
- package/src/app/components/session/model-account-usage.tsx +0 -89
- /package/dist/app/components/session/{codex-account-indicator.js.map → subscription-account-indicator.js.map} +0 -0
- /package/dist/app/{components/session/model-account-indicator.js.map → lib/drive-connect-return.js.map} +0 -0
- /package/dist/{app/components/session/model-account-usage.js.map → browser-viewer-VKIAULG7.js.map} +0 -0
- /package/dist/{browser-viewer-YQC6BFMS.js.map → chat-interactive-block-JGYSW4KB.js.map} +0 -0
- /package/dist/{chunk-WN2MIB4Q.js.map → chunk-22V2QCEM.js.map} +0 -0
- /package/dist/{chunk-SJPAKWWP.js.map → chunk-2BISI664.js.map} +0 -0
- /package/dist/{chunk-O5UOCMH4.js.map → chunk-2LPJVEWY.js.map} +0 -0
- /package/dist/{chunk-JI6WPLZB.js.map → chunk-2SBCOGQN.js.map} +0 -0
- /package/dist/{chunk-6JF7C3U3.js.map → chunk-2WERWWSS.js.map} +0 -0
- /package/dist/{chunk-4XKT4ENZ.js.map → chunk-2Y3QL3DA.js.map} +0 -0
- /package/dist/{chunk-KVMFT6FN.js.map → chunk-3FL3F4WF.js.map} +0 -0
- /package/dist/{chunk-4VJOZJDV.js.map → chunk-3JPQAIYJ.js.map} +0 -0
- /package/dist/{chunk-27EORKJ4.js.map → chunk-3N4LNBJF.js.map} +0 -0
- /package/dist/{chunk-7JZSFJHB.js.map → chunk-3OJU3RUR.js.map} +0 -0
- /package/dist/{chunk-NV5OYV3G.js.map → chunk-3U6K36QA.js.map} +0 -0
- /package/dist/{chunk-MDRLP5DO.js.map → chunk-3W7ROHN4.js.map} +0 -0
- /package/dist/{chunk-3MQM4ZOC.js.map → chunk-3Y6ZR2VN.js.map} +0 -0
- /package/dist/{chunk-HXZIX7MR.js.map → chunk-47AB65IO.js.map} +0 -0
- /package/dist/{chunk-DNYD7AUG.js.map → chunk-4BOLIZ7Y.js.map} +0 -0
- /package/dist/{chunk-4XO346BW.js.map → chunk-4FBJFQFU.js.map} +0 -0
- /package/dist/{chunk-DAQG3C4W.js.map → chunk-4HM6YDBX.js.map} +0 -0
- /package/dist/{chunk-BWKZEW6K.js.map → chunk-4T3E56NT.js.map} +0 -0
- /package/dist/{chunk-4PC7LIQK.js.map → chunk-4ZMUWRFF.js.map} +0 -0
- /package/dist/{chunk-O4AWXTZQ.js.map → chunk-52XIYULR.js.map} +0 -0
- /package/dist/{chunk-GXK4CUAB.js.map → chunk-5WQKTT5Z.js.map} +0 -0
- /package/dist/{chunk-MHIYYHCL.js.map → chunk-5ZAHAUWD.js.map} +0 -0
- /package/dist/{chunk-6N7W3TOV.js.map → chunk-63BPMTBM.js.map} +0 -0
- /package/dist/{chunk-R5YZ3ROM.js.map → chunk-63PQKTTT.js.map} +0 -0
- /package/dist/{chunk-WLZVXCPZ.js.map → chunk-6GO6WN22.js.map} +0 -0
- /package/dist/{chunk-XDCZBOEY.js.map → chunk-6LGBGPBU.js.map} +0 -0
- /package/dist/{chunk-D4QOZXPM.js.map → chunk-7ITDATTP.js.map} +0 -0
- /package/dist/{chunk-M5E3CKSE.js.map → chunk-7QWWE5XL.js.map} +0 -0
- /package/dist/{chunk-RABKQFTA.js.map → chunk-A2HCAMRH.js.map} +0 -0
- /package/dist/{chunk-6K3WNTRI.js.map → chunk-AODISQO6.js.map} +0 -0
- /package/dist/{chunk-C6JL6PBL.js.map → chunk-AQDRH6VF.js.map} +0 -0
- /package/dist/{chunk-72XEFLMD.js.map → chunk-ASWINLSW.js.map} +0 -0
- /package/dist/{chunk-FVCLVASD.js.map → chunk-B7ZKSROO.js.map} +0 -0
- /package/dist/{chunk-EURDMOXZ.js.map → chunk-BYJZUCOQ.js.map} +0 -0
- /package/dist/{chunk-BPD4IJBG.js.map → chunk-CG6CJMIS.js.map} +0 -0
- /package/dist/{chunk-B254JG72.js.map → chunk-CQX24PT7.js.map} +0 -0
- /package/dist/{chunk-HJTTDLF6.js.map → chunk-CY3NO4JN.js.map} +0 -0
- /package/dist/{chunk-OLUG4IFF.js.map → chunk-D2RLPRSG.js.map} +0 -0
- /package/dist/{chunk-74NIHMAT.js.map → chunk-D653JH6D.js.map} +0 -0
- /package/dist/{chunk-FMATVQFW.js.map → chunk-DA6EQDFR.js.map} +0 -0
- /package/dist/{chunk-2LUO22FR.js.map → chunk-DAI5CTQF.js.map} +0 -0
- /package/dist/{chunk-HTKVYEVB.js.map → chunk-DBM4ZXDN.js.map} +0 -0
- /package/dist/{chunk-MB2DTUEG.js.map → chunk-DNYKLU3K.js.map} +0 -0
- /package/dist/{chunk-26P7B46A.js.map → chunk-DXYARXK3.js.map} +0 -0
- /package/dist/{chunk-JQKURO3S.js.map → chunk-E4MQRQ6Z.js.map} +0 -0
- /package/dist/{chunk-KW53DBY7.js.map → chunk-EBW2E32G.js.map} +0 -0
- /package/dist/{chunk-O73DRA77.js.map → chunk-ENKBO7FC.js.map} +0 -0
- /package/dist/{chunk-32HA7DXJ.js.map → chunk-EQNGX77H.js.map} +0 -0
- /package/dist/{chunk-CA64OZLZ.js.map → chunk-FAPYRTG6.js.map} +0 -0
- /package/dist/{chunk-WWM7WVD2.js.map → chunk-GABFKHQE.js.map} +0 -0
- /package/dist/{chunk-JJ7VMIEQ.js.map → chunk-H2GTWX4D.js.map} +0 -0
- /package/dist/{chunk-LR7U3HCD.js.map → chunk-HPSATFLQ.js.map} +0 -0
- /package/dist/{chunk-TM2ZLY3Q.js.map → chunk-I56TUH3Z.js.map} +0 -0
- /package/dist/{chunk-ZZUKJ5HQ.js.map → chunk-IG2ERMSB.js.map} +0 -0
- /package/dist/{chunk-2SZ3KC5S.js.map → chunk-IMKIIS4Y.js.map} +0 -0
- /package/dist/{chunk-I57HZMMA.js.map → chunk-IXIE3H43.js.map} +0 -0
- /package/dist/{chunk-OWJD3V4V.js.map → chunk-J3YQ3554.js.map} +0 -0
- /package/dist/{chunk-BCFHMBMK.js.map → chunk-J5HZBHU4.js.map} +0 -0
- /package/dist/{chunk-UHMMRQGU.js.map → chunk-KD7GNHOP.js.map} +0 -0
- /package/dist/{chunk-RXMIXKB3.js.map → chunk-KIKAVZOW.js.map} +0 -0
- /package/dist/{chunk-X7Z4B5GK.js.map → chunk-KPL7EXS6.js.map} +0 -0
- /package/dist/{chunk-GTR2WUBA.js.map → chunk-KX6M5CJI.js.map} +0 -0
- /package/dist/{chunk-CYO5HL4C.js.map → chunk-KYL2BPS2.js.map} +0 -0
- /package/dist/{chunk-ZPZYYSHW.js.map → chunk-L7EAQGWN.js.map} +0 -0
- /package/dist/{chunk-QLDMF7MH.js.map → chunk-LC5HE7PZ.js.map} +0 -0
- /package/dist/{chunk-4ICPJZAB.js.map → chunk-LMYSYG6U.js.map} +0 -0
- /package/dist/{chunk-3ZZOE4SN.js.map → chunk-LOCDYMD6.js.map} +0 -0
- /package/dist/{chunk-DNWBLT4U.js.map → chunk-MASBMJ2M.js.map} +0 -0
- /package/dist/{chunk-6VITVQ23.js.map → chunk-MTYE2PPR.js.map} +0 -0
- /package/dist/{chunk-NZMQDUOD.js.map → chunk-MU6HYDNF.js.map} +0 -0
- /package/dist/{chunk-GMVKCEBG.js.map → chunk-MY6QEDZ2.js.map} +0 -0
- /package/dist/{chunk-SK57RWSA.js.map → chunk-MZGKQ5WV.js.map} +0 -0
- /package/dist/{chunk-HSQRYJ4P.js.map → chunk-N52SFH2K.js.map} +0 -0
- /package/dist/{chunk-CEQUNJJY.js.map → chunk-NDCP5TVN.js.map} +0 -0
- /package/dist/{chunk-MY6VZVCP.js.map → chunk-OAJX5CEL.js.map} +0 -0
- /package/dist/{chunk-BQWUXC55.js.map → chunk-OBBLVC2W.js.map} +0 -0
- /package/dist/{chunk-FH75NNLB.js.map → chunk-OZ5NAXCP.js.map} +0 -0
- /package/dist/{chunk-PEGNFZ3F.js.map → chunk-P5S777YI.js.map} +0 -0
- /package/dist/{chunk-LY6727IF.js.map → chunk-PPSVFNEA.js.map} +0 -0
- /package/dist/{chunk-K4FDZVMQ.js.map → chunk-PR42VIVY.js.map} +0 -0
- /package/dist/{chunk-I74J2UZ2.js.map → chunk-PWMZCW4H.js.map} +0 -0
- /package/dist/{chunk-6YDXUE5H.js.map → chunk-PYA2O3WS.js.map} +0 -0
- /package/dist/{chunk-GUIZDI5T.js.map → chunk-Q2PA4KZS.js.map} +0 -0
- /package/dist/{chunk-DZH2HTTB.js.map → chunk-R27GW5WV.js.map} +0 -0
- /package/dist/{chunk-7OIBLMDP.js.map → chunk-RAQISW42.js.map} +0 -0
- /package/dist/{chunk-CPKD2YGK.js.map → chunk-RNU5CUPI.js.map} +0 -0
- /package/dist/{chunk-467VRP4E.js.map → chunk-RO5YZQHZ.js.map} +0 -0
- /package/dist/{chunk-SSZROOOI.js.map → chunk-ROLXYGT5.js.map} +0 -0
- /package/dist/{chunk-F4B2YYCN.js.map → chunk-TAWFXRXB.js.map} +0 -0
- /package/dist/{chunk-G3FU2IF7.js.map → chunk-TB7UW5BB.js.map} +0 -0
- /package/dist/{chunk-NF6Q4XTN.js.map → chunk-TQF2I5SY.js.map} +0 -0
- /package/dist/{chunk-M7A226EQ.js.map → chunk-UL44R3W2.js.map} +0 -0
- /package/dist/{chunk-GTR5NLVP.js.map → chunk-VCRQPLKS.js.map} +0 -0
- /package/dist/{chunk-LG67ZNRU.js.map → chunk-WK2ZCTUF.js.map} +0 -0
- /package/dist/{chunk-XGE75VPK.js.map → chunk-WNARM3LY.js.map} +0 -0
- /package/dist/{chunk-RNBH5TSM.js.map → chunk-WQ2RTQYO.js.map} +0 -0
- /package/dist/{chunk-W57QFLQD.js.map → chunk-X6JIGNLI.js.map} +0 -0
- /package/dist/{chunk-CKA4SJRK.js.map → chunk-XIQDCQX7.js.map} +0 -0
- /package/dist/{chunk-AJ7PY4FJ.js.map → chunk-Y3GCG6CA.js.map} +0 -0
- /package/dist/{chunk-ZRB4M3GG.js.map → chunk-YC5KH7ZB.js.map} +0 -0
- /package/dist/{chunk-4RY64KQY.js.map → chunk-YJUKLLNP.js.map} +0 -0
- /package/dist/{chunk-24POWVUY.js.map → chunk-ZDJNRRVS.js.map} +0 -0
- /package/dist/{chunk-M7YEZR6X.js.map → chunk-ZITMDA4C.js.map} +0 -0
- /package/dist/{chat-interactive-block-Z22YHDRU.js.map → computer-viewer-6CRLWQHP.js.map} +0 -0
- /package/dist/{computer-viewer-BWVNDFTO.js.map → embedded-new-voice-KILV3RYM.js.map} +0 -0
- /package/dist/{embedded-new-voice-GBXSZ3TO.js.map → embedded-voice-GHDRLCFX.js.map} +0 -0
- /package/dist/{fleet-decision-row-35S3GAUN.js.map → fleet-decision-row-DQXRRBT7.js.map} +0 -0
- /package/dist/{embedded-voice-MGI7EK7C.js.map → model-policy-picker-menu-5ALKUJMR.js.map} +0 -0
- /package/dist/{platform-activity-row-ISMXR7NJ.js.map → platform-activity-row-227C764Z.js.map} +0 -0
- /package/dist/{queue-surface-implementation-ULW7DDJA.js.map → queue-surface-implementation-H3NOBXU5.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-KP53N6UJ.js.map → sandbox-files-5FEOHUMD.js.map} +0 -0
- /package/dist/{sandbox-files-QYSD4XCZ.js.map → session-realtime-OHBMODNX.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-OJYKHBEO.js.map → timeline-annotation-markers-NDHS7MCK.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-6OAZLXFU.js.map → timeline-annotation-selection-DRQSTJOV.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-5M6DP5FX.js.map → timeline-annotations-dialog-G6J5ZJKN.js.map} +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ArtifactSandbox
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HPSATFLQ.js";
|
|
5
5
|
import {
|
|
6
6
|
EditableSpreadsheetArtifactSurface
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KD7GNHOP.js";
|
|
8
8
|
import {
|
|
9
9
|
EditableDocumentArtifactSurface
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-RO5YZQHZ.js";
|
|
11
11
|
import {
|
|
12
12
|
EditablePresentationArtifactSurface
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-D653JH6D.js";
|
|
14
14
|
import {
|
|
15
15
|
EditableArtifactMessage
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TB7UW5BB.js";
|
|
17
17
|
import {
|
|
18
18
|
ArtifactLabelsProvider,
|
|
19
19
|
ArtifactLoading,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
ArtifactViewerHeader,
|
|
22
22
|
artifactLoadErrorView,
|
|
23
23
|
useArtifactLabels
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-63BPMTBM.js";
|
|
25
25
|
import {
|
|
26
26
|
loadSiteSnapshot
|
|
27
27
|
} from "./chunk-IOYHDEP3.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
} from "./chunk-TXS65BB2.js";
|
|
37
37
|
import {
|
|
38
38
|
useOpenGeniText
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
40
40
|
|
|
41
41
|
// src/components/artifacts/site-view.tsx
|
|
42
42
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -627,4 +627,4 @@ export {
|
|
|
627
627
|
EditableArtifactView,
|
|
628
628
|
SessionArtifactViewer
|
|
629
629
|
};
|
|
630
|
-
//# sourceMappingURL=chunk-
|
|
630
|
+
//# sourceMappingURL=chunk-PWMZCW4H.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
useDesktopThisComputer
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3Y6ZR2VN.js";
|
|
5
5
|
import {
|
|
6
6
|
lastSessionMemoryId,
|
|
7
7
|
readLastSessionId
|
|
@@ -233,4 +233,4 @@ export {
|
|
|
233
233
|
appShotFileName,
|
|
234
234
|
AppShotCoordinator
|
|
235
235
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-PYA2O3WS.js.map
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
} from "./chunk-KNFDWNCH.js";
|
|
26
26
|
import {
|
|
27
27
|
t
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-CG6CJMIS.js";
|
|
29
29
|
import {
|
|
30
30
|
DropdownMenuItem
|
|
31
31
|
} from "./chunk-TREHTIBD.js";
|
|
@@ -493,4 +493,4 @@ export {
|
|
|
493
493
|
VisibilityMenuBody,
|
|
494
494
|
UsageLimitMenuBody
|
|
495
495
|
};
|
|
496
|
-
//# sourceMappingURL=chunk-
|
|
496
|
+
//# sourceMappingURL=chunk-Q2PA4KZS.js.map
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
SubscriptionAccountMenu
|
|
4
|
+
} from "./chunk-LGD5RESZ.js";
|
|
5
|
+
import {
|
|
6
|
+
BillingClassMark
|
|
7
|
+
} from "./chunk-ZITMDA4C.js";
|
|
8
|
+
import {
|
|
9
|
+
Skeleton
|
|
10
|
+
} from "./chunk-HY7EYWIG.js";
|
|
11
|
+
import {
|
|
12
|
+
useSessionModelAccount
|
|
13
|
+
} from "./chunk-BMJTNPWK.js";
|
|
14
|
+
import {
|
|
15
|
+
useCodexAccounts
|
|
16
|
+
} from "./chunk-EWL6NDOO.js";
|
|
17
|
+
import {
|
|
18
|
+
isCodexProductModel
|
|
19
|
+
} from "./chunk-F2RMKGDQ.js";
|
|
20
|
+
|
|
21
|
+
// src/app/components/session/subscription-account-indicator.tsx
|
|
22
|
+
import { useState } from "react";
|
|
23
|
+
|
|
24
|
+
// src/app/components/session/subscription-account.ts
|
|
25
|
+
var PROVIDER = {
|
|
26
|
+
codex: { name: "Codex", billingClass: "codex_subscription" },
|
|
27
|
+
claude: { name: "Claude", billingClass: "claude_subscription" },
|
|
28
|
+
xai: { name: "SuperGrok", billingClass: "supergrok_subscription" }
|
|
29
|
+
};
|
|
30
|
+
function subscriptionProviderPresentation(provider) {
|
|
31
|
+
return PROVIDER[provider] ?? { name: "Subscription", billingClass: "external" };
|
|
32
|
+
}
|
|
33
|
+
var WINDOW_LABEL = {
|
|
34
|
+
// Neutral ids: they do not say how long the window is.
|
|
35
|
+
primary: "Primary",
|
|
36
|
+
secondary: "Secondary",
|
|
37
|
+
five_hour: "5h",
|
|
38
|
+
seven_day: "Week",
|
|
39
|
+
seven_day_opus: "Week \xB7 Opus",
|
|
40
|
+
seven_day_sonnet: "Week \xB7 Sonnet",
|
|
41
|
+
overage: "Overage",
|
|
42
|
+
billing: "Billing"
|
|
43
|
+
};
|
|
44
|
+
var REFUSAL_COPY = {
|
|
45
|
+
inactive: "Unavailable",
|
|
46
|
+
personal_not_allowed: "Turned off here",
|
|
47
|
+
personal_not_owner_work: "Not available for this chat",
|
|
48
|
+
session_has_no_owner: "Needs an owner"
|
|
49
|
+
};
|
|
50
|
+
var STATUS_COPY = {
|
|
51
|
+
needs_relogin: "Needs reconnect",
|
|
52
|
+
error: "Error",
|
|
53
|
+
disabled: "Disabled",
|
|
54
|
+
revoked: "Revoked",
|
|
55
|
+
expired: "Expired",
|
|
56
|
+
suspended: "Suspended",
|
|
57
|
+
paused: "Paused",
|
|
58
|
+
inactive: "Inactive",
|
|
59
|
+
limit_reached: "Limit reached"
|
|
60
|
+
};
|
|
61
|
+
function time(value) {
|
|
62
|
+
if (!value || !Number.isFinite(Date.parse(value))) return null;
|
|
63
|
+
return new Date(value).toLocaleString(void 0, {
|
|
64
|
+
month: "short",
|
|
65
|
+
day: "numeric",
|
|
66
|
+
hour: "numeric",
|
|
67
|
+
minute: "2-digit"
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function accountLabel(account) {
|
|
71
|
+
return account.label ?? account.email ?? account.plan ?? "Account";
|
|
72
|
+
}
|
|
73
|
+
function accountStatus(account) {
|
|
74
|
+
if (account.refusal && account.refusal !== "inactive") return REFUSAL_COPY[account.refusal];
|
|
75
|
+
if (account.status !== "active") return STATUS_COPY[account.status] ?? account.status;
|
|
76
|
+
return account.refusal ? REFUSAL_COPY[account.refusal] : null;
|
|
77
|
+
}
|
|
78
|
+
function accountSource(account) {
|
|
79
|
+
return account.source === "personal" ? "Your account" : account.source === "workspace" ? "This workspace" : account.source === "organization" ? "Organization" : null;
|
|
80
|
+
}
|
|
81
|
+
function windowLabel(id) {
|
|
82
|
+
return WINDOW_LABEL[id] ?? id;
|
|
83
|
+
}
|
|
84
|
+
function subscriptionAccountUsage(usage, now = Date.now()) {
|
|
85
|
+
if (!usage) return { message: "No usage reading yet" };
|
|
86
|
+
const observed = time(usage.observedAt);
|
|
87
|
+
const windows = usage.windows.map((window) => {
|
|
88
|
+
const reset = time(window.resetsAt);
|
|
89
|
+
const past = reset !== null && Date.parse(window.resetsAt) <= now;
|
|
90
|
+
return {
|
|
91
|
+
label: windowLabel(window.id),
|
|
92
|
+
usedPercent: window.usedPercent,
|
|
93
|
+
detail: [
|
|
94
|
+
window.status === "unknown" ? "Status unknown" : window.status === "warning" ? "Near its limit" : window.status === "exhausted" ? "Limit reached" : null,
|
|
95
|
+
past ? "Reset passed; usage may be outdated" : reset ? `Resets ${reset}` : null
|
|
96
|
+
].filter(Boolean).join(" \xB7 ")
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
const exhaustedTime = time(usage.exhaustedUntil);
|
|
100
|
+
const exhausted = usage.exhaustedKind !== null && !(usage.exhaustedUntil && Date.parse(usage.exhaustedUntil) <= now);
|
|
101
|
+
return {
|
|
102
|
+
windows,
|
|
103
|
+
...windows.length === 0 ? {
|
|
104
|
+
message: exhausted ? `Limit reached${exhaustedTime ? ` until ${exhaustedTime}` : ""}` : "No usage reading yet"
|
|
105
|
+
} : {},
|
|
106
|
+
...observed ? { note: `Updated ${observed}` } : {},
|
|
107
|
+
...windows.length > 0 ? {
|
|
108
|
+
summary: `${windows.map(
|
|
109
|
+
(window) => `${window.label} ${window.usedPercent === null ? "unknown" : `${Math.round(window.usedPercent)}%`}`
|
|
110
|
+
).join(" \xB7 ")} used`
|
|
111
|
+
} : {}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function nearLimit(usage) {
|
|
115
|
+
return (usage?.windows ?? []).some(
|
|
116
|
+
(window) => window.status === "warning" || window.status === "exhausted" || window.usedPercent !== null && window.usedPercent >= 90
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
function showsSubscriptionAccountMenu(state) {
|
|
120
|
+
return state.unavailable || state.accounts.length > 0 || state.current !== null || state.currentHidden || state.waiting || !state.automatic;
|
|
121
|
+
}
|
|
122
|
+
function subscriptionAccountProvider(modelId, credentialSource) {
|
|
123
|
+
if (isCodexProductModel(modelId)) return "codex";
|
|
124
|
+
return credentialSource?.kind === "connected_subscription" ? credentialSource.provider : null;
|
|
125
|
+
}
|
|
126
|
+
function subscriptionAccountMenuContent(state) {
|
|
127
|
+
const { name } = subscriptionProviderPresentation(state.provider);
|
|
128
|
+
const current = state.current;
|
|
129
|
+
const unknown = state.unavailable && !current && !state.currentHidden;
|
|
130
|
+
const displayName = current ? accountLabel(current) : state.currentHidden ? "Account unavailable" : unknown ? "Accounts unavailable" : "Automatic";
|
|
131
|
+
const status = current ? accountStatus(current) : null;
|
|
132
|
+
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";
|
|
133
|
+
const usageNearLimit = nearLimit(current?.usage);
|
|
134
|
+
const tone = current?.status === "needs_relogin" || current?.status === "error" ? "bad" : status || state.waiting || usageNearLimit ? "warn" : "ok";
|
|
135
|
+
const usage = !current ? {
|
|
136
|
+
message: state.currentHidden ? "Account usage hidden" : unknown ? "Usage unavailable" : "Choose an account to see usage"
|
|
137
|
+
} : state.usageCheck === "checking" ? { checking: true } : state.usageCheck === "failed" ? { unavailable: true } : subscriptionAccountUsage(current.usage);
|
|
138
|
+
const accounts = state.accounts.map((account) => ({
|
|
139
|
+
id: account.id,
|
|
140
|
+
label: accountLabel(account),
|
|
141
|
+
plan: account.plan,
|
|
142
|
+
status: accountStatus(account),
|
|
143
|
+
detail: [
|
|
144
|
+
accountLabel(account),
|
|
145
|
+
account.email,
|
|
146
|
+
account.plan,
|
|
147
|
+
accountSource(account),
|
|
148
|
+
accountStatus(account)
|
|
149
|
+
].filter(Boolean).join(" \xB7 "),
|
|
150
|
+
personal: account.source === "personal",
|
|
151
|
+
disabled: !account.choosable,
|
|
152
|
+
// The current account's usage is already shown above the list.
|
|
153
|
+
usageSummary: account.id === current?.id || state.usageCheck === "checking" ? void 0 : subscriptionAccountUsage(account.usage).summary
|
|
154
|
+
}));
|
|
155
|
+
return {
|
|
156
|
+
ariaLabel: [
|
|
157
|
+
`${name} account`,
|
|
158
|
+
displayName,
|
|
159
|
+
state.waiting ? "Limit reached" : status ?? (usageNearLimit ? "Near its limit" : null)
|
|
160
|
+
].filter(Boolean).join(" \xB7 "),
|
|
161
|
+
selectionLabel,
|
|
162
|
+
displayName,
|
|
163
|
+
identity: current?.email && current.email !== displayName ? current.email : null,
|
|
164
|
+
metadata: current ? [current.plan, accountSource(current), status].filter(Boolean).join(" \xB7 ") || `${name} subscription` : `${name} subscription`,
|
|
165
|
+
tone,
|
|
166
|
+
usage,
|
|
167
|
+
accounts,
|
|
168
|
+
selectedId: state.automatic || unknown ? null : state.chosenId,
|
|
169
|
+
automaticSelected: state.automatic && !unknown,
|
|
170
|
+
actionLabel: state.waiting ? "Retry with" : "Use for next turn",
|
|
171
|
+
automaticLabel: "Automatic",
|
|
172
|
+
emptyMessage: state.unavailable ? "Accounts unavailable." : "No accounts available.",
|
|
173
|
+
error: state.mutationError ? `Couldn't switch: ${state.mutationError}` : null,
|
|
174
|
+
note: state.appliedTo === "waiting_turn" ? "Selection saved. Capacity is being rechecked." : state.appliedTo === "next_turn" ? "Selection saved for the next turn." : state.waiting ? "Changing accounts retries the waiting turn." : "Applies next turn. The current turn keeps its account."
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// src/app/components/session/subscription-account-indicator.tsx
|
|
179
|
+
import { jsx } from "react/jsx-runtime";
|
|
180
|
+
function SubscriptionAccountIndicator(props) {
|
|
181
|
+
return props.provider === "codex" ? /* @__PURE__ */ jsx(CodexAccountSource, { ...props }) : /* @__PURE__ */ jsx(SharedAccountSource, { ...props });
|
|
182
|
+
}
|
|
183
|
+
function SubscriptionAccountControl({
|
|
184
|
+
state,
|
|
185
|
+
onChoose,
|
|
186
|
+
onOpenChange
|
|
187
|
+
}) {
|
|
188
|
+
const { name, billingClass } = subscriptionProviderPresentation(state.provider);
|
|
189
|
+
if (state.loading) {
|
|
190
|
+
return /* @__PURE__ */ jsx(
|
|
191
|
+
Skeleton,
|
|
192
|
+
{
|
|
193
|
+
role: "status",
|
|
194
|
+
className: "h-6 w-11 shrink-0 rounded-full",
|
|
195
|
+
"aria-label": `Loading ${name} account`
|
|
196
|
+
}
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
if (!showsSubscriptionAccountMenu(state)) {
|
|
200
|
+
return /* @__PURE__ */ jsx(
|
|
201
|
+
BillingClassMark,
|
|
202
|
+
{
|
|
203
|
+
billingClass,
|
|
204
|
+
className: "size-3.5 shrink-0 text-fg-muted",
|
|
205
|
+
"aria-label": ""
|
|
206
|
+
}
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
return /* @__PURE__ */ jsx(
|
|
210
|
+
SubscriptionAccountMenu,
|
|
211
|
+
{
|
|
212
|
+
...subscriptionAccountMenuContent(state),
|
|
213
|
+
triggerMark: /* @__PURE__ */ jsx(
|
|
214
|
+
BillingClassMark,
|
|
215
|
+
{
|
|
216
|
+
billingClass,
|
|
217
|
+
className: "size-3.5 text-current",
|
|
218
|
+
"aria-label": ""
|
|
219
|
+
}
|
|
220
|
+
),
|
|
221
|
+
headerMark: /* @__PURE__ */ jsx(BillingClassMark, { billingClass, className: "size-4 text-current" }),
|
|
222
|
+
choosing: state.choosing,
|
|
223
|
+
choosingTarget: state.choosingTarget,
|
|
224
|
+
onChoose,
|
|
225
|
+
onOpenChange
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
function sharedAccount(option) {
|
|
230
|
+
return {
|
|
231
|
+
id: option.connectionId,
|
|
232
|
+
label: option.label,
|
|
233
|
+
email: option.accountEmail,
|
|
234
|
+
plan: option.planType,
|
|
235
|
+
source: option.personal ? "personal" : option.source,
|
|
236
|
+
status: option.status,
|
|
237
|
+
refusal: option.refusal,
|
|
238
|
+
choosable: option.choosable,
|
|
239
|
+
usage: option.usage
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function sharedAccountState(provider, account, servingTurnId) {
|
|
243
|
+
const choice = account.choice;
|
|
244
|
+
const options = (choice?.accounts ?? []).filter((each) => each.provider === provider);
|
|
245
|
+
const binding = choice?.bindings?.find((each) => each.provider === provider) ?? (choice?.binding?.provider === provider ? choice.binding : null);
|
|
246
|
+
const explicit = binding?.choice === "explicit";
|
|
247
|
+
const serving = choice?.serving && choice.serving.turnId === servingTurnId && choice.serving.provider === provider ? choice.serving : null;
|
|
248
|
+
const currentId = serving ? serving.connectionId : binding?.connectionId;
|
|
249
|
+
const current = currentId ? options.find((each) => each.connectionId === currentId) ?? null : null;
|
|
250
|
+
return {
|
|
251
|
+
provider,
|
|
252
|
+
loading: account.loading && !choice,
|
|
253
|
+
unavailable: !choice,
|
|
254
|
+
accounts: options.map(sharedAccount),
|
|
255
|
+
current: current ? sharedAccount(current) : null,
|
|
256
|
+
currentHidden: !current && (explicit || serving !== null),
|
|
257
|
+
serving: serving !== null,
|
|
258
|
+
automatic: !explicit,
|
|
259
|
+
chosenId: explicit ? binding?.connectionId ?? null : null,
|
|
260
|
+
waiting: false,
|
|
261
|
+
// Only the authorized stored reading; opening the menu never probes a provider.
|
|
262
|
+
usageCheck: "idle",
|
|
263
|
+
choosing: account.choosing,
|
|
264
|
+
choosingTarget: account.choosingTarget,
|
|
265
|
+
appliedTo: account.appliedTo,
|
|
266
|
+
mutationError: account.mutationError?.message ?? null
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function SharedAccountSource(props) {
|
|
270
|
+
const { provider } = props;
|
|
271
|
+
const account = useSessionModelAccount({
|
|
272
|
+
workspaceId: props.workspaceId,
|
|
273
|
+
sessionId: props.sessionId,
|
|
274
|
+
provider,
|
|
275
|
+
organizationId: props.organizationId,
|
|
276
|
+
pollIntervalMs: 6e4,
|
|
277
|
+
...props.events !== void 0 ? { events: props.events } : {}
|
|
278
|
+
});
|
|
279
|
+
const state = sharedAccountState(provider, account, props.servingTurnId);
|
|
280
|
+
return /* @__PURE__ */ jsx(
|
|
281
|
+
SubscriptionAccountControl,
|
|
282
|
+
{
|
|
283
|
+
state,
|
|
284
|
+
onChoose: (id) => {
|
|
285
|
+
if (!state.unavailable && (id === null ? state.automatic : !state.automatic && state.chosenId === id)) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
void account.choose(id);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
var AUTO = "auto";
|
|
294
|
+
var LIVE_USAGE_REUSE_MS = 3e4;
|
|
295
|
+
function codexUsage(account, live, now = Date.now()) {
|
|
296
|
+
const window = (id, reading) => {
|
|
297
|
+
if (!reading) return [];
|
|
298
|
+
const usedPercent = typeof reading.percent === "number" ? reading.percent : typeof reading.remaining === "number" ? 100 - reading.remaining : null;
|
|
299
|
+
return [
|
|
300
|
+
{
|
|
301
|
+
id,
|
|
302
|
+
usedPercent,
|
|
303
|
+
resetsAt: reading.resetAt ?? null,
|
|
304
|
+
status: usedPercent === null ? "unknown" : usedPercent >= 100 ? "exhausted" : usedPercent >= 90 ? "warning" : "ok"
|
|
305
|
+
}
|
|
306
|
+
];
|
|
307
|
+
};
|
|
308
|
+
const windows = [
|
|
309
|
+
...window("five_hour", account.fiveHour),
|
|
310
|
+
...window("seven_day", account.weekly)
|
|
311
|
+
];
|
|
312
|
+
const exhaustedUntil = account.exhaustedUntil && Date.parse(account.exhaustedUntil) > now ? account.exhaustedUntil : null;
|
|
313
|
+
if (windows.length === 0 && !exhaustedUntil) return null;
|
|
314
|
+
return {
|
|
315
|
+
observedAt: live?.usage?.fetchedAt ?? account.usageCheckedAt ?? null,
|
|
316
|
+
windows,
|
|
317
|
+
exhaustedUntil,
|
|
318
|
+
exhaustedKind: exhaustedUntil ? "quota" : null
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function codexAccountState(codex, check) {
|
|
322
|
+
const awaitingFirstUsage = check.checking && codex.liveUsageUpdatedAt === null;
|
|
323
|
+
const selection = codex.currentSelection;
|
|
324
|
+
const effective = (selection ? codex.currentAccount : null) ?? codex.accounts.find(
|
|
325
|
+
(account2) => account2.id === (selection ? selection.credentialId : codex.pinnedAccountId)
|
|
326
|
+
) ?? null;
|
|
327
|
+
const liveMissing = (id) => {
|
|
328
|
+
const status = codex.liveUsage[id]?.status;
|
|
329
|
+
return check.failed || check.checked && !status || status === "error" || status === "no-data";
|
|
330
|
+
};
|
|
331
|
+
const account = (each) => ({
|
|
332
|
+
id: each.id,
|
|
333
|
+
// The ChatGPT account id names an account only when nothing else does.
|
|
334
|
+
label: each.label ?? (each.email || each.plan ? null : each.chatgptAccountId ?? null),
|
|
335
|
+
email: each.email ?? null,
|
|
336
|
+
plan: each.plan ?? null,
|
|
337
|
+
source: each.source ?? null,
|
|
338
|
+
status: each.status,
|
|
339
|
+
refusal: null,
|
|
340
|
+
choosable: true,
|
|
341
|
+
usage: liveMissing(each.id) ? null : codexUsage(each, codex.liveUsage[each.id])
|
|
342
|
+
});
|
|
343
|
+
return {
|
|
344
|
+
provider: "codex",
|
|
345
|
+
loading: codex.loading && !effective,
|
|
346
|
+
unavailable: Boolean(codex.error),
|
|
347
|
+
accounts: codex.accounts.map(account),
|
|
348
|
+
current: effective ? account(effective) : null,
|
|
349
|
+
currentHidden: !effective && Boolean(selection?.credentialId ?? codex.pinnedAccountId),
|
|
350
|
+
serving: selection !== null,
|
|
351
|
+
automatic: codex.pinnedAccountId === null,
|
|
352
|
+
chosenId: codex.pinnedAccountId,
|
|
353
|
+
waiting: selection?.waiting === true,
|
|
354
|
+
usageCheck: awaitingFirstUsage ? "checking" : effective && liveMissing(effective.id) ? "failed" : "idle",
|
|
355
|
+
choosing: codex.pinning,
|
|
356
|
+
choosingTarget: codex.pinningTarget === AUTO ? null : codex.pinningTarget ?? void 0,
|
|
357
|
+
appliedTo: codex.switchAppliedTo,
|
|
358
|
+
mutationError: codex.mutationError?.message ?? null
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
function CodexAccountSource(props) {
|
|
362
|
+
const codex = useCodexAccounts({
|
|
363
|
+
sessionId: props.sessionId,
|
|
364
|
+
pollIntervalMs: 3e4,
|
|
365
|
+
...props.events !== void 0 ? { events: props.events } : {}
|
|
366
|
+
});
|
|
367
|
+
const [checkingUsage, setCheckingUsage] = useState(false);
|
|
368
|
+
const [usageChecked, setUsageChecked] = useState(false);
|
|
369
|
+
const [usageCheckFailed, setUsageCheckFailed] = useState(false);
|
|
370
|
+
const state = codexAccountState(codex, {
|
|
371
|
+
checking: checkingUsage,
|
|
372
|
+
checked: usageChecked,
|
|
373
|
+
failed: usageCheckFailed
|
|
374
|
+
});
|
|
375
|
+
const waiting = state.waiting;
|
|
376
|
+
return /* @__PURE__ */ jsx(
|
|
377
|
+
SubscriptionAccountControl,
|
|
378
|
+
{
|
|
379
|
+
state,
|
|
380
|
+
onChoose: (id) => {
|
|
381
|
+
if (codex.pinnedAccountId === id && !waiting && !state.unavailable) return;
|
|
382
|
+
void codex.pin(id ?? AUTO);
|
|
383
|
+
},
|
|
384
|
+
onOpenChange: (open) => {
|
|
385
|
+
if (!open) return;
|
|
386
|
+
setCheckingUsage(true);
|
|
387
|
+
setUsageChecked(false);
|
|
388
|
+
setUsageCheckFailed(false);
|
|
389
|
+
void codex.refreshUsage({ maxAgeMs: LIVE_USAGE_REUSE_MS }).then(
|
|
390
|
+
(ok) => {
|
|
391
|
+
setUsageChecked(ok);
|
|
392
|
+
setUsageCheckFailed(!ok);
|
|
393
|
+
setCheckingUsage(false);
|
|
394
|
+
},
|
|
395
|
+
() => {
|
|
396
|
+
setUsageCheckFailed(true);
|
|
397
|
+
setCheckingUsage(false);
|
|
398
|
+
}
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
export {
|
|
406
|
+
subscriptionAccountProvider,
|
|
407
|
+
SubscriptionAccountIndicator,
|
|
408
|
+
SubscriptionAccountControl,
|
|
409
|
+
sharedAccount,
|
|
410
|
+
sharedAccountState,
|
|
411
|
+
codexUsage,
|
|
412
|
+
codexAccountState
|
|
413
|
+
};
|
|
414
|
+
//# sourceMappingURL=chunk-R4U4EWZG.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 { 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 const window = (\n id: string,\n reading: CodexAccount[\"fiveHour\"],\n ): SubscriptionAccountUsage[\"windows\"] => {\n if (!reading) return [];\n const usedPercent =\n typeof reading.percent === \"number\"\n ? reading.percent\n : typeof reading.remaining === \"number\"\n ? 100 - reading.remaining\n : null;\n return [\n {\n id,\n usedPercent,\n resetsAt: reading.resetAt ?? null,\n status:\n usedPercent === null\n ? \"unknown\"\n : usedPercent >= 100\n ? \"exhausted\"\n : usedPercent >= 90\n ? \"warning\"\n : \"ok\",\n },\n ];\n };\n const windows = [\n ...window(\"five_hour\", account.fiveHour),\n ...window(\"seven_day\", account.weekly),\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 { isCodexProductModel } from \"../../lib/session-model\";\nimport type { BillingClass } from \"../billing-class-mark\";\nimport type {\n SubscriptionAccountMenuRow,\n SubscriptionAccountMenuUsage,\n SubscriptionAccountUsageWindow,\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\n// Presentation labels only. Preserve every supplied window; never combine\n// family-specific, overage or partial windows into an account capacity score.\nconst WINDOW_LABEL: Record<string, string> = {\n // Neutral ids: they do not say how long the window is.\n primary: \"Primary\",\n secondary: \"Secondary\",\n five_hour: \"5h\",\n seven_day: \"Week\",\n seven_day_opus: \"Week · Opus\",\n seven_day_sonnet: \"Week · Sonnet\",\n overage: \"Overage\",\n billing: \"Billing\",\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 | null): string | null {\n if (!value || !Number.isFinite(Date.parse(value))) return null;\n return new Date(value).toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n}\n\nexport function accountLabel(account: SubscriptionAccount): string {\n return account.label ?? account.email ?? account.plan ?? \"Account\";\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\nfunction windowLabel(id: string): string {\n return WINDOW_LABEL[id] ?? id;\n}\n\n/** The reading as usage rows: percentage used, with when each window resets. */\nexport function subscriptionAccountUsage(\n usage: SubscriptionAccountUsage | null | undefined,\n now = Date.now(),\n): {\n windows?: SubscriptionAccountUsageWindow[];\n message?: string;\n note?: string;\n summary?: string;\n} {\n if (!usage) return { message: \"No usage reading yet\" };\n const observed = time(usage.observedAt);\n const windows = usage.windows.map((window) => {\n const reset = time(window.resetsAt);\n const past = reset !== null && Date.parse(window.resetsAt!) <= now;\n return {\n label: windowLabel(window.id),\n usedPercent: window.usedPercent,\n detail: [\n window.status === \"unknown\"\n ? \"Status unknown\"\n : window.status === \"warning\"\n ? \"Near its limit\"\n : window.status === \"exhausted\"\n ? \"Limit reached\"\n : null,\n past ? \"Reset passed; usage may be outdated\" : reset ? `Resets ${reset}` : null,\n ]\n .filter(Boolean)\n .join(\" · \"),\n };\n });\n const exhaustedTime = time(usage.exhaustedUntil);\n // A limit whose end has passed no longer applies.\n const exhausted =\n usage.exhaustedKind !== null &&\n !(usage.exhaustedUntil && Date.parse(usage.exhaustedUntil) <= now);\n return {\n windows,\n ...(windows.length === 0\n ? {\n message: exhausted\n ? `Limit reached${exhaustedTime ? ` until ${exhaustedTime}` : \"\"}`\n : \"No usage reading yet\",\n }\n : {}),\n ...(observed ? { note: `Updated ${observed}` } : {}),\n ...(windows.length > 0\n ? {\n summary: `${windows\n .map(\n (window) =>\n `${window.label} ${window.usedPercent === null ? \"unknown\" : `${Math.round(window.usedPercent)}%`}`,\n )\n .join(\" · \")} used`,\n }\n : {}),\n };\n}\n\nfunction nearLimit(usage: SubscriptionAccountUsage | null | undefined): boolean {\n return (usage?.windows ?? []).some(\n (window) =>\n window.status === \"warning\" ||\n window.status === \"exhausted\" ||\n (window.usedPercent !== null && window.usedPercent >= 90),\n );\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.\n */\nexport function subscriptionAccountProvider(\n modelId: string,\n credentialSource: ClientModel[\"credentialSource\"],\n): string | null {\n if (isCodexProductModel(modelId)) return \"codex\";\n return credentialSource?.kind === \"connected_subscription\" ? credentialSource.provider : null;\n}\n\n/** Everything the account menu shows, from the neutral state. */\nexport function subscriptionAccountMenuContent(state: SubscriptionAccountState) {\n const { name } = subscriptionProviderPresentation(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)\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 usageNearLimit = nearLimit(current?.usage);\n const tone: \"ok\" | \"warn\" | \"bad\" =\n current?.status === \"needs_relogin\" || current?.status === \"error\"\n ? \"bad\"\n : status || state.waiting || usageNearLimit\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 : subscriptionAccountUsage(current.usage);\n const accounts: SubscriptionAccountMenuRow[] = state.accounts.map((account) => ({\n id: account.id,\n label: accountLabel(account),\n plan: account.plan,\n status: accountStatus(account),\n detail: [\n accountLabel(account),\n account.email,\n account.plan,\n accountSource(account),\n accountStatus(account),\n ]\n .filter(Boolean)\n .join(\" · \"),\n personal: account.source === \"personal\",\n disabled: !account.choosable,\n // The current account's usage is already shown above the list.\n usageSummary:\n account.id === current?.id || state.usageCheck === \"checking\"\n ? undefined\n : subscriptionAccountUsage(account.usage).summary,\n }));\n return {\n ariaLabel: [\n `${name} account`,\n displayName,\n state.waiting ? \"Limit reached\" : (status ?? (usageNearLimit ? \"Near its limit\" : 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 ? [current.plan, accountSource(current), status].filter(Boolean).join(\" · \") ||\n `${name} subscription`\n : `${name} subscription`,\n tone,\n usage,\n accounts,\n selectedId: state.automatic || unknown ? null : state.chosenId,\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":";;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,gBAAgB;;;ACsEzB,IAAM,WAAyE;AAAA,EAC7E,OAAO,EAAE,MAAM,SAAS,cAAc,qBAAqB;AAAA,EAC3D,QAAQ,EAAE,MAAM,UAAU,cAAc,sBAAsB;AAAA,EAC9D,KAAK,EAAE,MAAM,aAAa,cAAc,yBAAyB;AACnE;AAEO,SAAS,iCAAiC,UAG/C;AACA,SAAO,SAAS,QAAQ,KAAK,EAAE,MAAM,gBAAgB,cAAc,WAAW;AAChF;AAIA,IAAM,eAAuC;AAAA;AAAA,EAE3C,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,SAAS;AACX;AAEA,IAAM,eAA0D;AAAA,EAC9D,UAAU;AAAA,EACV,sBAAsB;AAAA,EACtB,yBAAyB;AAAA,EACzB,sBAAsB;AACxB;AAEA,IAAM,cAAsC;AAAA,EAC1C,eAAe;AAAA,EACf,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,eAAe;AACjB;AAEA,SAAS,KAAK,OAAqC;AACjD,MAAI,CAAC,SAAS,CAAC,OAAO,SAAS,KAAK,MAAM,KAAK,CAAC,EAAG,QAAO;AAC1D,SAAO,IAAI,KAAK,KAAK,EAAE,eAAe,QAAW;AAAA,IAC/C,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACH;AAEO,SAAS,aAAa,SAAsC;AACjE,SAAO,QAAQ,SAAS,QAAQ,SAAS,QAAQ,QAAQ;AAC3D;AAEO,SAAS,cAAc,SAA6C;AAEzE,MAAI,QAAQ,WAAW,QAAQ,YAAY,WAAY,QAAO,aAAa,QAAQ,OAAO;AAC1F,MAAI,QAAQ,WAAW,SAAU,QAAO,YAAY,QAAQ,MAAM,KAAK,QAAQ;AAC/E,SAAO,QAAQ,UAAU,aAAa,QAAQ,OAAO,IAAI;AAC3D;AAEA,SAAS,cAAc,SAA6C;AAClE,SAAO,QAAQ,WAAW,aACtB,iBACA,QAAQ,WAAW,cACjB,mBACA,QAAQ,WAAW,iBACjB,iBACA;AACV;AAEA,SAAS,YAAY,IAAoB;AACvC,SAAO,aAAa,EAAE,KAAK;AAC7B;AAGO,SAAS,yBACd,OACA,MAAM,KAAK,IAAI,GAMf;AACA,MAAI,CAAC,MAAO,QAAO,EAAE,SAAS,uBAAuB;AACrD,QAAM,WAAW,KAAK,MAAM,UAAU;AACtC,QAAM,UAAU,MAAM,QAAQ,IAAI,CAAC,WAAW;AAC5C,UAAM,QAAQ,KAAK,OAAO,QAAQ;AAClC,UAAM,OAAO,UAAU,QAAQ,KAAK,MAAM,OAAO,QAAS,KAAK;AAC/D,WAAO;AAAA,MACL,OAAO,YAAY,OAAO,EAAE;AAAA,MAC5B,aAAa,OAAO;AAAA,MACpB,QAAQ;AAAA,QACN,OAAO,WAAW,YACd,mBACA,OAAO,WAAW,YAChB,mBACA,OAAO,WAAW,cAChB,kBACA;AAAA,QACR,OAAO,wCAAwC,QAAQ,UAAU,KAAK,KAAK;AAAA,MAC7E,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,IACf;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,KAAK,MAAM,cAAc;AAE/C,QAAM,YACJ,MAAM,kBAAkB,QACxB,EAAE,MAAM,kBAAkB,KAAK,MAAM,MAAM,cAAc,KAAK;AAChE,SAAO;AAAA,IACL;AAAA,IACA,GAAI,QAAQ,WAAW,IACnB;AAAA,MACE,SAAS,YACL,gBAAgB,gBAAgB,UAAU,aAAa,KAAK,EAAE,KAC9D;AAAA,IACN,IACA,CAAC;AAAA,IACL,GAAI,WAAW,EAAE,MAAM,WAAW,QAAQ,GAAG,IAAI,CAAC;AAAA,IAClD,GAAI,QAAQ,SAAS,IACjB;AAAA,MACE,SAAS,GAAG,QACT;AAAA,QACC,CAAC,WACC,GAAG,OAAO,KAAK,IAAI,OAAO,gBAAgB,OAAO,YAAY,GAAG,KAAK,MAAM,OAAO,WAAW,CAAC,GAAG;AAAA,MACrG,EACC,KAAK,QAAK,CAAC;AAAA,IAChB,IACA,CAAC;AAAA,EACP;AACF;AAEA,SAAS,UAAU,OAA6D;AAC9E,UAAQ,OAAO,WAAW,CAAC,GAAG;AAAA,IAC5B,CAAC,WACC,OAAO,WAAW,aAClB,OAAO,WAAW,eACjB,OAAO,gBAAgB,QAAQ,OAAO,eAAe;AAAA,EAC1D;AACF;AAOO,SAAS,6BAA6B,OAA0C;AACrF,SACE,MAAM,eACN,MAAM,SAAS,SAAS,KACxB,MAAM,YAAY,QAClB,MAAM,iBACN,MAAM,WACN,CAAC,MAAM;AAEX;AAOO,SAAS,4BACd,SACA,kBACe;AACf,MAAI,oBAAoB,OAAO,EAAG,QAAO;AACzC,SAAO,kBAAkB,SAAS,2BAA2B,iBAAiB,WAAW;AAC3F;AAGO,SAAS,+BAA+B,OAAiC;AAC9E,QAAM,EAAE,KAAK,IAAI,iCAAiC,MAAM,QAAQ;AAChE,QAAM,UAAU,MAAM;AAEtB,QAAM,UAAU,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM;AACxD,QAAM,cAAc,UAChB,aAAa,OAAO,IACpB,MAAM,gBACJ,wBACA,UACE,yBACA;AACR,QAAM,SAAS,UAAU,cAAc,OAAO,IAAI;AAClD,QAAM,iBAAiB,MAAM,UACzB,kBACA,MAAM,YAAY,WAAW,MAAM,iBACjC,oBACA,CAAC,MAAM,aAAa,CAAC,YAAY,CAAC,WAAW,QAAQ,OAAO,MAAM,YAChE,mBACA,UACE,oBACA;AACV,QAAM,iBAAiB,UAAU,SAAS,KAAK;AAC/C,QAAM,OACJ,SAAS,WAAW,mBAAmB,SAAS,WAAW,UACvD,QACA,UAAU,MAAM,WAAW,iBACzB,SACA;AACR,QAAM,QAAsC,CAAC,UACzC;AAAA,IACE,SAAS,MAAM,gBACX,yBACA,UACE,sBACA;AAAA,EACR,IACA,MAAM,eAAe,aACnB,EAAE,UAAU,KAAK,IACjB,MAAM,eAAe,WACnB,EAAE,aAAa,KAAK,IACpB,yBAAyB,QAAQ,KAAK;AAC9C,QAAM,WAAyC,MAAM,SAAS,IAAI,CAAC,aAAa;AAAA,IAC9E,IAAI,QAAQ;AAAA,IACZ,OAAO,aAAa,OAAO;AAAA,IAC3B,MAAM,QAAQ;AAAA,IACd,QAAQ,cAAc,OAAO;AAAA,IAC7B,QAAQ;AAAA,MACN,aAAa,OAAO;AAAA,MACpB,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc,OAAO;AAAA,MACrB,cAAc,OAAO;AAAA,IACvB,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,IACb,UAAU,QAAQ,WAAW;AAAA,IAC7B,UAAU,CAAC,QAAQ;AAAA;AAAA,IAEnB,cACE,QAAQ,OAAO,SAAS,MAAM,MAAM,eAAe,aAC/C,SACA,yBAAyB,QAAQ,KAAK,EAAE;AAAA,EAChD,EAAE;AACF,SAAO;AAAA,IACL,WAAW;AAAA,MACT,GAAG,IAAI;AAAA,MACP;AAAA,MACA,MAAM,UAAU,kBAAmB,WAAW,iBAAiB,mBAAmB;AAAA,IACpF,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,IACb;AAAA,IACA;AAAA,IACA,UAAU,SAAS,SAAS,QAAQ,UAAU,cAAc,QAAQ,QAAQ;AAAA,IAC5E,UAAU,UACN,CAAC,QAAQ,MAAM,cAAc,OAAO,GAAG,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK,KACzE,GAAG,IAAI,kBACP,GAAG,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,MAAM,aAAa,UAAU,OAAO,MAAM;AAAA,IACtD,mBAAmB,MAAM,aAAa,CAAC;AAAA,IACvC,aAAa,MAAM,UAAU,eAAe;AAAA,IAC5C,gBAAgB;AAAA,IAChB,cAAc,MAAM,cAAc,0BAA0B;AAAA,IAC5D,OAAO,MAAM,gBAAgB,oBAAoB,MAAM,aAAa,KAAK;AAAA,IACzE,MACE,MAAM,cAAc,iBAChB,kDACA,MAAM,cAAc,cAClB,uCACA,MAAM,UACJ,gDACA;AAAA,EACZ;AACF;;;ADnTI;AAFG,SAAS,6BAA6B,OAAuB;AAClE,SAAO,MAAM,aAAa,UACxB,oBAAC,sBAAoB,GAAG,OAAO,IAE/B,oBAAC,uBAAqB,GAAG,OAAO;AAEpC;AAGO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,MAAM,aAAa,IAAI,iCAAiC,MAAM,QAAQ;AAC9E,MAAI,MAAM,SAAS;AACjB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,cAAY,WAAW,IAAI;AAAA;AAAA,IAC7B;AAAA,EAEJ;AAGA,MAAI,CAAC,6BAA6B,KAAK,GAAG;AACxC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QACV,cAAW;AAAA;AAAA,IACb;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG,+BAA+B,KAAK;AAAA,MACxC,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAU;AAAA,UACV,cAAW;AAAA;AAAA,MACb;AAAA,MAEF,YAAY,oBAAC,oBAAiB,cAA4B,WAAU,uBAAsB;AAAA,MAC1F,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,MACtB;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAIO,SAAS,cAAc,QAAuD;AACnF,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,IACb,QAAQ,OAAO,WAAW,aAAa,OAAO;AAAA,IAC9C,QAAQ,OAAO;AAAA,IACf,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO;AAAA,IAClB,OAAO,OAAO;AAAA,EAChB;AACF;AAGO,SAAS,mBACd,UACA,SAIA,eAC0B;AAC1B,QAAM,SAAS,QAAQ;AACvB,QAAM,WAAW,QAAQ,YAAY,CAAC,GAAG,OAAO,CAAC,SAAS,KAAK,aAAa,QAAQ;AACpF,QAAM,UACJ,QAAQ,UAAU,KAAK,CAAC,SAAS,KAAK,aAAa,QAAQ,MAC1D,QAAQ,SAAS,aAAa,WAAW,OAAO,UAAU;AAC7D,QAAM,WAAW,SAAS,WAAW;AACrC,QAAM,UACJ,QAAQ,WACR,OAAO,QAAQ,WAAW,iBAC1B,OAAO,QAAQ,aAAa,WACxB,OAAO,UACP;AACN,QAAM,YAAY,UAAU,QAAQ,eAAe,SAAS;AAC5D,QAAM,UAAU,YACX,QAAQ,KAAK,CAAC,SAAS,KAAK,iBAAiB,SAAS,KAAK,OAC5D;AACJ,SAAO;AAAA,IACL;AAAA,IACA,SAAS,QAAQ,WAAW,CAAC;AAAA,IAC7B,aAAa,CAAC;AAAA,IACd,UAAU,QAAQ,IAAI,aAAa;AAAA,IACnC,SAAS,UAAU,cAAc,OAAO,IAAI;AAAA,IAC5C,eAAe,CAAC,YAAY,YAAY,YAAY;AAAA,IACpD,SAAS,YAAY;AAAA,IACrB,WAAW,CAAC;AAAA,IACZ,UAAU,WAAY,SAAS,gBAAgB,OAAQ;AAAA,IACvD,SAAS;AAAA;AAAA,IAET,YAAY;AAAA,IACZ,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,WAAW,QAAQ;AAAA,IACnB,eAAe,QAAQ,eAAe,WAAW;AAAA,EACnD;AACF;AAEA,SAAS,oBAAoB,OAAuB;AAClD,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,UAAU,uBAAuB;AAAA,IACrC,aAAa,MAAM;AAAA,IACnB,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,gBAAgB,MAAM;AAAA,IACtB,gBAAgB;AAAA,IAChB,GAAI,MAAM,WAAW,SAAY,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,EAC/D,CAAC;AACD,QAAM,QAAQ,mBAAmB,UAAU,SAAS,MAAM,aAAa;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,CAAC,OAAO;AAEhB,YACE,CAAC,MAAM,gBACN,OAAO,OAAO,MAAM,YAAY,CAAC,MAAM,aAAa,MAAM,aAAa,KACxE;AACA;AAAA,QACF;AACA,aAAK,QAAQ,OAAO,EAAE;AAAA,MACxB;AAAA;AAAA,EACF;AAEJ;AAIA,IAAM,OAAO;AAGb,IAAM,sBAAsB;AAErB,SAAS,WACd,SACA,MACA,MAAM,KAAK,IAAI,GACkB;AACjC,QAAM,SAAS,CACb,IACA,YACwC;AACxC,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,UAAM,cACJ,OAAO,QAAQ,YAAY,WACvB,QAAQ,UACR,OAAO,QAAQ,cAAc,WAC3B,MAAM,QAAQ,YACd;AACR,WAAO;AAAA,MACL;AAAA,QACE;AAAA,QACA;AAAA,QACA,UAAU,QAAQ,WAAW;AAAA,QAC7B,QACE,gBAAgB,OACZ,YACA,eAAe,MACb,cACA,eAAe,KACb,YACA;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU;AAAA,IACd,GAAG,OAAO,aAAa,QAAQ,QAAQ;AAAA,IACvC,GAAG,OAAO,aAAa,QAAQ,MAAM;AAAA,EACvC;AAEA,QAAM,iBACJ,QAAQ,kBAAkB,KAAK,MAAM,QAAQ,cAAc,IAAI,MAC3D,QAAQ,iBACR;AACN,MAAI,QAAQ,WAAW,KAAK,CAAC,eAAgB,QAAO;AACpD,SAAO;AAAA,IACL,YAAY,MAAM,OAAO,aAAa,QAAQ,kBAAkB;AAAA,IAChE;AAAA,IACA;AAAA,IACA,eAAe,iBAAiB,UAAU;AAAA,EAC5C;AACF;AAGO,SAAS,kBACd,OAeA,OAC0B;AAG1B,QAAM,qBAAqB,MAAM,YAAY,MAAM,uBAAuB;AAC1E,QAAM,YAAY,MAAM;AACxB,QAAM,aACH,YAAY,MAAM,iBAAiB,SACpC,MAAM,SAAS;AAAA,IACb,CAACA,aAAYA,SAAQ,QAAQ,YAAY,UAAU,eAAe,MAAM;AAAA,EAC1E,KACA;AAEF,QAAM,cAAc,CAAC,OAAe;AAClC,UAAM,SAAS,MAAM,UAAU,EAAE,GAAG;AACpC,WAAO,MAAM,UAAW,MAAM,WAAW,CAAC,UAAW,WAAW,WAAW,WAAW;AAAA,EACxF;AACA,QAAM,UAAU,CAAC,UAA6C;AAAA,IAC5D,IAAI,KAAK;AAAA;AAAA,IAET,OAAO,KAAK,UAAU,KAAK,SAAS,KAAK,OAAO,OAAQ,KAAK,oBAAoB;AAAA,IACjF,OAAO,KAAK,SAAS;AAAA,IACrB,MAAM,KAAK,QAAQ;AAAA,IACnB,QAAQ,KAAK,UAAU;AAAA,IACvB,QAAQ,KAAK;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO,YAAY,KAAK,EAAE,IAAI,OAAO,WAAW,MAAM,MAAM,UAAU,KAAK,EAAE,CAAC;AAAA,EAChF;AACA,SAAO;AAAA,IACL,UAAU;AAAA,IACV,SAAS,MAAM,WAAW,CAAC;AAAA,IAC3B,aAAa,QAAQ,MAAM,KAAK;AAAA,IAChC,UAAU,MAAM,SAAS,IAAI,OAAO;AAAA,IACpC,SAAS,YAAY,QAAQ,SAAS,IAAI;AAAA,IAC1C,eAAe,CAAC,aAAa,QAAQ,WAAW,gBAAgB,MAAM,eAAe;AAAA,IACrF,SAAS,cAAc;AAAA,IACvB,WAAW,MAAM,oBAAoB;AAAA,IACrC,UAAU,MAAM;AAAA,IAChB,SAAS,WAAW,YAAY;AAAA,IAChC,YAAY,qBACR,aACA,aAAa,YAAY,UAAU,EAAE,IACnC,WACA;AAAA,IACN,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM,kBAAkB,OAAO,OAAQ,MAAM,iBAAiB;AAAA,IAC9E,WAAW,MAAM;AAAA,IACjB,eAAe,MAAM,eAAe,WAAW;AAAA,EACjD;AACF;AAEA,SAAS,mBAAmB,OAAuB;AACjD,QAAM,QAAQ,iBAAiB;AAAA,IAC7B,WAAW,MAAM;AAAA,IACjB,gBAAgB;AAAA,IAChB,GAAI,MAAM,WAAW,SAAY,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,EAC/D,CAAC;AACD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AACxD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAC9D,QAAM,QAAQ,kBAAkB,OAAO;AAAA,IACrC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,UAAU,MAAM;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,CAAC,OAAO;AAGhB,YAAI,MAAM,oBAAoB,MAAM,CAAC,WAAW,CAAC,MAAM,YAAa;AACpE,aAAK,MAAM,IAAI,MAAM,IAAI;AAAA,MAC3B;AAAA,MACA,cAAc,CAAC,SAAS;AACtB,YAAI,CAAC,KAAM;AACX,yBAAiB,IAAI;AACrB,wBAAgB,KAAK;AACrB,4BAAoB,KAAK;AACzB,aAAK,MAAM,aAAa,EAAE,UAAU,oBAAoB,CAAC,EAAE;AAAA,UACzD,CAAC,OAAO;AACN,4BAAgB,EAAE;AAClB,gCAAoB,CAAC,EAAE;AACvB,6BAAiB,KAAK;AAAA,UACxB;AAAA,UACA,MAAM;AACJ,gCAAoB,IAAI;AACxB,6BAAiB,KAAK;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":["account"]}
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "./chunk-TXS65BB2.js";
|
|
20
20
|
import {
|
|
21
21
|
useOpenGeniText
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
23
23
|
|
|
24
24
|
// src/hooks/use-usage.ts
|
|
25
25
|
import {
|
|
@@ -1184,4 +1184,4 @@ export {
|
|
|
1184
1184
|
UsageMemberList,
|
|
1185
1185
|
SessionUsageLimitNotice
|
|
1186
1186
|
};
|
|
1187
|
-
//# sourceMappingURL=chunk-
|
|
1187
|
+
//# sourceMappingURL=chunk-RAQISW42.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-K3TJNJSU.js";
|
|
8
8
|
import {
|
|
9
9
|
t
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CG6CJMIS.js";
|
|
11
11
|
import {
|
|
12
12
|
formatWaitingSince
|
|
13
13
|
} from "./chunk-6NXQCOLD.js";
|
|
@@ -912,4 +912,4 @@ export {
|
|
|
912
912
|
visibleForestRows,
|
|
913
913
|
channelRailSections
|
|
914
914
|
};
|
|
915
|
-
//# sourceMappingURL=chunk-
|
|
915
|
+
//# sourceMappingURL=chunk-RNU5CUPI.js.map
|
|
@@ -14,13 +14,13 @@ import {
|
|
|
14
14
|
editableArtifactStatusLabel,
|
|
15
15
|
useArtifactSubmissions,
|
|
16
16
|
useEditableArtifactView
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-TB7UW5BB.js";
|
|
18
18
|
import {
|
|
19
19
|
cn
|
|
20
20
|
} from "./chunk-TXS65BB2.js";
|
|
21
21
|
import {
|
|
22
22
|
useOpenGeniText
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
24
24
|
|
|
25
25
|
// src/components/artifacts/document-editor.tsx
|
|
26
26
|
import {
|
|
@@ -2314,4 +2314,4 @@ export {
|
|
|
2314
2314
|
DocumentProjectionArtifactSurface,
|
|
2315
2315
|
EditableDocumentArtifactSurface
|
|
2316
2316
|
};
|
|
2317
|
-
//# sourceMappingURL=chunk-
|
|
2317
|
+
//# sourceMappingURL=chunk-RO5YZQHZ.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-TXS65BB2.js";
|
|
12
12
|
import {
|
|
13
13
|
useOpenGeniText
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
15
15
|
|
|
16
16
|
// src/types/machines.ts
|
|
17
17
|
function connectionStatusForState(state) {
|
|
@@ -2551,4 +2551,4 @@ export {
|
|
|
2551
2551
|
EnrollmentDeviceFlow,
|
|
2552
2552
|
EnrollmentConsent
|
|
2553
2553
|
};
|
|
2554
|
-
//# sourceMappingURL=chunk-
|
|
2554
|
+
//# sourceMappingURL=chunk-ROLXYGT5.js.map
|