@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,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
t
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-J42QE4VO.js";
|
|
5
5
|
import {
|
|
6
6
|
regionRestrictedText
|
|
7
7
|
} from "./chunk-MBSN5HHQ.js";
|
|
@@ -11,10 +11,15 @@ import {
|
|
|
11
11
|
AGENT_CAPABILITY_DESCRIPTIONS,
|
|
12
12
|
AGENT_CAPABILITY_IDS,
|
|
13
13
|
allAgentCapabilities,
|
|
14
|
-
noneAgentCapabilities
|
|
14
|
+
noneAgentCapabilities,
|
|
15
|
+
savedRequestBaseCapabilities
|
|
15
16
|
} from "@opengeni/contracts";
|
|
16
17
|
var AGENT_CAPABILITY_GROUPS = [
|
|
17
|
-
{
|
|
18
|
+
{
|
|
19
|
+
id: "conversation",
|
|
20
|
+
label: "Conversation",
|
|
21
|
+
capabilities: ["humanInput", "notifications", "webSearch", "media"]
|
|
22
|
+
},
|
|
18
23
|
{
|
|
19
24
|
id: "work",
|
|
20
25
|
label: "Work",
|
|
@@ -28,7 +33,8 @@ var AGENT_CAPABILITY_GROUPS = [
|
|
|
28
33
|
"secrets",
|
|
29
34
|
"workspaceFiles",
|
|
30
35
|
"workspaceConnectors",
|
|
31
|
-
"workspaceAdmin"
|
|
36
|
+
"workspaceAdmin",
|
|
37
|
+
"privacyFacts"
|
|
32
38
|
]
|
|
33
39
|
}
|
|
34
40
|
];
|
|
@@ -77,7 +83,8 @@ function capabilityAvailability(config, alsoUnavailable = []) {
|
|
|
77
83
|
unavailableReason: (id) => reasons.get(id) ?? UNAVAILABLE_CAPABILITY_REASON
|
|
78
84
|
};
|
|
79
85
|
}
|
|
80
|
-
function baseCapabilities(from) {
|
|
86
|
+
function baseCapabilities(from, options = {}) {
|
|
87
|
+
if (options.saved) return savedRequestBaseCapabilities(from);
|
|
81
88
|
return from === "all" ? allAgentCapabilities() : noneAgentCapabilities();
|
|
82
89
|
}
|
|
83
90
|
function applyToggles(base, toggles) {
|
|
@@ -88,20 +95,26 @@ function applyToggles(base, toggles) {
|
|
|
88
95
|
if (id === "skills") next.skills = value;
|
|
89
96
|
else next[id] = value;
|
|
90
97
|
}
|
|
98
|
+
if (toggles.humanInput === false && toggles.notifications === void 0) {
|
|
99
|
+
next.notifications = false;
|
|
100
|
+
}
|
|
91
101
|
return next;
|
|
92
102
|
}
|
|
93
103
|
function draftFromRequest(capabilities, options = {}) {
|
|
94
104
|
const from = capabilities === void 0 ? "all" : typeof capabilities === "string" ? capabilities : capabilities.from;
|
|
95
105
|
const toggles = capabilities === void 0 || typeof capabilities === "string" ? {} : (({ from: _from, ...rest }) => rest)(capabilities);
|
|
96
|
-
const values = applyToggles(baseCapabilities(from), toggles);
|
|
97
|
-
if (options.legacyHumanInputOff && toggles.humanInput === void 0)
|
|
106
|
+
const values = applyToggles(baseCapabilities(from, { saved: options.saved }), toggles);
|
|
107
|
+
if (options.legacyHumanInputOff && toggles.humanInput === void 0) {
|
|
108
|
+
values.humanInput = false;
|
|
109
|
+
if (toggles.notifications === void 0) values.notifications = false;
|
|
110
|
+
}
|
|
98
111
|
return { from, values };
|
|
99
112
|
}
|
|
100
113
|
function draftFromResolved(config) {
|
|
101
114
|
return { from: config.from, values: { ...config.capabilities } };
|
|
102
115
|
}
|
|
103
|
-
function requestFromDraft(draft, availability) {
|
|
104
|
-
const base = baseCapabilities(draft.from);
|
|
116
|
+
function requestFromDraft(draft, availability, options = {}) {
|
|
117
|
+
const base = baseCapabilities(draft.from, options);
|
|
105
118
|
const toggles = {};
|
|
106
119
|
for (const id of AGENT_CAPABILITY_IDS) {
|
|
107
120
|
const value = draft.values[id];
|
|
@@ -136,7 +149,10 @@ function capabilitySummary(values, availability) {
|
|
|
136
149
|
return `${on} of ${offered.length} capabilities`;
|
|
137
150
|
}
|
|
138
151
|
function workspaceAgentDefaultsDraft(input) {
|
|
139
|
-
return draftFromRequest(input.capabilities, {
|
|
152
|
+
return draftFromRequest(input.capabilities, {
|
|
153
|
+
legacyHumanInputOff: input.legacyHumanInputOff,
|
|
154
|
+
saved: true
|
|
155
|
+
});
|
|
140
156
|
}
|
|
141
157
|
function toolOwnerLabel(owner) {
|
|
142
158
|
switch (owner) {
|
|
@@ -195,4 +211,4 @@ export {
|
|
|
195
211
|
toolOwnerLabel,
|
|
196
212
|
agentConfigErrorText
|
|
197
213
|
};
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
214
|
+
//# sourceMappingURL=chunk-NDXBF3RW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/lib/agent-capabilities.tsx"],"sourcesContent":["/**\n * Web view of the agent capability registry (`@opengeni/contracts`\n * agent-config). Every screen that shows or edits what an agent can do (the\n * workspace defaults page, the composer's Capabilities panel, the session\n * Agent panel and the schedule form) reads its groups, labels and request\n * shapes from here, so they cannot drift from the server's meaning.\n *\n * A \"draft\" is what a picker edits: a starting point plus the full value of\n * every capability. `requestFromDraft` turns it back into the smallest\n * `AgentCapabilities` request (a starting point plus only the toggles that\n * differ from it), which is what the server stores and what people read in\n * the API.\n */\nimport {\n AGENT_CAPABILITY_DESCRIPTIONS,\n AGENT_CAPABILITY_IDS,\n allAgentCapabilities,\n noneAgentCapabilities,\n savedRequestBaseCapabilities,\n type AgentCapabilities,\n type AgentCapabilityId,\n type AgentCapabilityStartingPoint,\n type AgentCapabilityToggles,\n type AgentSkillsCapability,\n type ClientAgentConfig,\n type ResolvedAgentCapabilities,\n type ResolvedAgentConfig,\n} from \"@opengeni/contracts\";\nimport { regionRestrictedText } from \"../../inference-region\";\nimport { t } from \"./console-text\";\n\nexport type { AgentCapabilityId, ResolvedAgentCapabilities };\n\nexport type AgentCapabilityGroup = {\n id: \"conversation\" | \"work\" | \"workspace\";\n label: string;\n capabilities: readonly AgentCapabilityId[];\n};\n\n/** Three groups, in the order people scan them. Every capability appears once. */\nexport const AGENT_CAPABILITY_GROUPS: readonly AgentCapabilityGroup[] = [\n {\n id: \"conversation\",\n label: \"Conversation\",\n capabilities: [\"humanInput\", \"notifications\", \"webSearch\", \"media\"],\n },\n {\n id: \"work\",\n label: \"Work\",\n capabilities: [\"goals\", \"subagents\", \"skills\", \"artifacts\", \"browser\", \"schedules\"],\n },\n {\n id: \"workspace\",\n label: \"Workspace\",\n capabilities: [\n \"knowledge\",\n \"secrets\",\n \"workspaceFiles\",\n \"workspaceConnectors\",\n \"workspaceAdmin\",\n \"privacyFacts\",\n ],\n },\n];\n\nexport function capabilityLabel(id: AgentCapabilityId): string {\n return AGENT_CAPABILITY_DESCRIPTIONS[id].label;\n}\n\nexport function capabilityDescription(id: AgentCapabilityId): string {\n return AGENT_CAPABILITY_DESCRIPTIONS[id].description;\n}\n\n/** The two starting points, in product words, each with its consequence. */\nexport const AGENT_STARTING_POINTS: readonly {\n value: AgentCapabilityStartingPoint;\n title: string;\n description: string;\n}[] = [\n {\n value: \"all\",\n title: \"Everything this workspace offers\",\n description: \"Every capability is on unless you turn it off.\",\n },\n {\n value: \"none\",\n title: \"Only what you choose\",\n description:\n \"Starts with its own tools, asking questions and reading Skills. Turn on the rest as needed.\",\n },\n];\n\nexport const SKILLS_OPTIONS: readonly { value: \"off\" | \"read\" | \"manage\"; label: string }[] = [\n { value: \"off\", label: \"Off\" },\n { value: \"read\", label: \"Read\" },\n { value: \"manage\", label: \"Read and write\" },\n];\n\nexport function skillsOptionValue(value: AgentSkillsCapability): \"off\" | \"read\" | \"manage\" {\n return value === false ? \"off\" : value;\n}\n\nexport function skillsFromOption(value: \"off\" | \"read\" | \"manage\"): AgentSkillsCapability {\n return value === \"off\" ? false : value;\n}\n\nexport const UNAVAILABLE_CAPABILITY_REASON = \"Not enabled on this server\";\n\n/** Capabilities this deployment offers. Unknown ids (an older server) count as available. */\nexport type CapabilityAvailability = {\n isAvailable: (id: AgentCapabilityId) => boolean;\n unavailable: ReadonlySet<AgentCapabilityId>;\n /**\n * Why a capability is unavailable: \"Not supported in EU\" when the server\n * switched it off for an EU-only workspace, otherwise \"Not enabled on this\n * server\".\n */\n unavailableReason: (id: AgentCapabilityId) => string;\n};\n\nexport function capabilityAvailability(\n config: Pick<ClientAgentConfig, \"capabilities\"> | null | undefined,\n alsoUnavailable: readonly AgentCapabilityId[] = [],\n): CapabilityAvailability {\n const unavailable = new Set<AgentCapabilityId>(alsoUnavailable);\n const reasons = new Map<AgentCapabilityId, string>();\n for (const entry of config?.capabilities ?? []) {\n if (entry.available) continue;\n unavailable.add(entry.id);\n const regionRestricted = regionRestrictedText(t, entry.code ?? entry.reason);\n if (regionRestricted) reasons.set(entry.id, regionRestricted);\n }\n return {\n unavailable,\n isAvailable: (id) => !unavailable.has(id),\n unavailableReason: (id) => reasons.get(id) ?? UNAVAILABLE_CAPABILITY_REASON,\n };\n}\n\n/**\n * A request's starting capabilities. `saved` is a workspace default or a\n * schedule's stored request, which keeps its earlier meaning (see\n * `savedRequestBaseCapabilities`), matching the server.\n */\nexport function baseCapabilities(\n from: AgentCapabilityStartingPoint,\n options: { saved?: boolean | undefined } = {},\n): ResolvedAgentCapabilities {\n if (options.saved) return savedRequestBaseCapabilities(from);\n return from === \"all\" ? allAgentCapabilities() : noneAgentCapabilities();\n}\n\nexport type AgentCapabilityDraft = {\n from: AgentCapabilityStartingPoint;\n values: ResolvedAgentCapabilities;\n};\n\nfunction applyToggles(\n base: ResolvedAgentCapabilities,\n toggles: AgentCapabilityToggles,\n): ResolvedAgentCapabilities {\n const next = { ...base };\n for (const id of AGENT_CAPABILITY_IDS) {\n const value = toggles[id];\n if (value === undefined) continue;\n if (id === \"skills\") next.skills = value as AgentSkillsCapability;\n else next[id] = value as boolean;\n }\n // Matches the server: turning human input off also turns notifications off\n // unless the toggles name them.\n if (toggles.humanInput === false && toggles.notifications === undefined) {\n next.notifications = false;\n }\n return next;\n}\n\n/**\n * The editable form of a request. Omitted means \"everything\". A workspace's\n * older \"Ask questions\" setting (off) still turns the default off unless the\n * request says otherwise, matching the server's resolution.\n */\nexport function draftFromRequest(\n capabilities: AgentCapabilities | undefined,\n options: { legacyHumanInputOff?: boolean | undefined; saved?: boolean | undefined } = {},\n): AgentCapabilityDraft {\n const from: AgentCapabilityStartingPoint =\n capabilities === undefined\n ? \"all\"\n : typeof capabilities === \"string\"\n ? capabilities\n : capabilities.from;\n const toggles: AgentCapabilityToggles =\n capabilities === undefined || typeof capabilities === \"string\"\n ? {}\n : (({ from: _from, ...rest }) => rest)(capabilities);\n const values = applyToggles(baseCapabilities(from, { saved: options.saved }), toggles);\n if (options.legacyHumanInputOff && toggles.humanInput === undefined) {\n values.humanInput = false;\n if (toggles.notifications === undefined) values.notifications = false;\n }\n return { from, values };\n}\n\n/** A frozen session configuration as a draft (for editing a running session). */\nexport function draftFromResolved(config: ResolvedAgentConfig): AgentCapabilityDraft {\n return { from: config.from, values: { ...config.capabilities } };\n}\n\n/**\n * The smallest request for a draft: its starting point, plus only the\n * capabilities that differ from it. A capability this server does not offer\n * is never sent as on (the server would refuse it).\n */\nexport function requestFromDraft(\n draft: AgentCapabilityDraft,\n availability?: CapabilityAvailability,\n options: { saved?: boolean | undefined } = {},\n): AgentCapabilities {\n const base = baseCapabilities(draft.from, options);\n const toggles: AgentCapabilityToggles = {};\n for (const id of AGENT_CAPABILITY_IDS) {\n const value = draft.values[id];\n if (value === base[id]) continue;\n if (availability && !availability.isAvailable(id) && value !== false) continue;\n (toggles as Record<string, boolean | string>)[id] = value;\n }\n return Object.keys(toggles).length === 0 ? draft.from : { from: draft.from, ...toggles };\n}\n\n/** Switch the starting point: every capability takes that starting point's value. */\nexport function withStartingPoint(\n draft: AgentCapabilityDraft,\n from: AgentCapabilityStartingPoint,\n): AgentCapabilityDraft {\n return draft.from === from ? draft : { from, values: baseCapabilities(from) };\n}\n\nexport function withCapability(\n draft: AgentCapabilityDraft,\n id: AgentCapabilityId,\n value: boolean | AgentSkillsCapability,\n): AgentCapabilityDraft {\n return { ...draft, values: { ...draft.values, [id]: value } };\n}\n\nexport function capabilityOn(values: ResolvedAgentCapabilities, id: AgentCapabilityId): boolean {\n return id === \"skills\" ? values.skills !== false : values[id] === true;\n}\n\n/** What actually runs: a capability the server doesn't offer is off. */\nexport function effectiveCapabilityOn(\n values: ResolvedAgentCapabilities,\n id: AgentCapabilityId,\n availability: CapabilityAvailability,\n): boolean {\n return availability.isAvailable(id) && capabilityOn(values, id);\n}\n\nexport function draftsEqual(left: AgentCapabilityDraft, right: AgentCapabilityDraft): boolean {\n return (\n left.from === right.from &&\n AGENT_CAPABILITY_IDS.every((id) => left.values[id] === right.values[id])\n );\n}\n\n/**\n * One short line for a chip or a muted row value: \"All capabilities\",\n * \"9 of 13 capabilities\". Counts only what this server offers.\n */\nexport function capabilitySummary(\n values: ResolvedAgentCapabilities,\n availability: CapabilityAvailability,\n): string {\n const offered = AGENT_CAPABILITY_IDS.filter((id) => availability.isAvailable(id));\n const on = offered.filter((id) => capabilityOn(values, id)).length;\n if (on === offered.length) {\n // Say \"available\" when the server holds some back, so \"all\" stays true.\n return offered.length === AGENT_CAPABILITY_IDS.length\n ? \"All capabilities\"\n : `All ${offered.length} available capabilities`;\n }\n if (on === 0) return \"No capabilities\";\n return `${on} of ${offered.length} capabilities`;\n}\n\n/** The workspace's saved defaults, or null when it follows Opengeni's defaults. */\nexport function workspaceAgentDefaultsDraft(input: {\n capabilities: AgentCapabilities | undefined;\n legacyHumanInputOff: boolean;\n}): AgentCapabilityDraft {\n return draftFromRequest(input.capabilities, {\n legacyHumanInputOff: input.legacyHumanInputOff,\n saved: true,\n });\n}\n\n/** Tool owner in product words, for the Technical details list. */\nexport function toolOwnerLabel(owner: AgentCapabilityId | \"runtime\" | \"sandbox\" | \"product\") {\n switch (owner) {\n case \"runtime\":\n return \"Always available\";\n case \"sandbox\":\n return \"Sandbox\";\n case \"product\":\n return \"Added to this session\";\n default:\n return capabilityLabel(owner);\n }\n}\n\n/**\n * Agent-setting failures in product words: what happened and what to do.\n * The raw API text (with its reference) is only a last resort.\n */\nexport function agentConfigErrorText(error: unknown, fallback: string): string {\n const failure = error as {\n status?: unknown | undefined;\n code?: unknown | undefined;\n details?: Record<string, unknown> | undefined;\n message?: unknown | undefined;\n } | null;\n if (!failure || typeof failure !== \"object\") return fallback;\n if (failure.status === 409) {\n return \"Someone changed these settings while you were editing. Nothing was saved. Check the current settings and try again.\";\n }\n const details = failure.details ?? {};\n const code = String(details.code ?? failure.code ?? \"\");\n const capability =\n typeof details.capability === \"string\" &&\n (AGENT_CAPABILITY_IDS as readonly string[]).includes(details.capability)\n ? capabilityLabel(details.capability as AgentCapabilityId)\n : null;\n switch (code) {\n case \"agent_capability_unavailable\":\n return capability\n ? `${capability} isn't enabled on this server. Turn it off and save again.`\n : \"One of these capabilities isn't enabled on this server. Turn it off and save again.\";\n case \"agent_config_widening\":\n return capability\n ? `This session can't turn on ${capability}: the session that started it doesn't have it.`\n : \"This session can't have more than the session that started it.\";\n case \"agent_config_conflict\":\n return \"These settings conflict with the tools chosen for this session. Change one of them and save again.\";\n default:\n return failure.status === 403\n ? \"You don't have permission to change this. Ask a workspace admin.\"\n : fallback;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ProviderRecoveryNotice
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YMVPYMKB.js";
|
|
5
5
|
|
|
6
6
|
// src/app/components/session/model-recovery-notice.tsx
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -12,4 +12,4 @@ function ModelRecoveryNotice({ recovery }) {
|
|
|
12
12
|
export {
|
|
13
13
|
ModelRecoveryNotice
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-NF6QVVMP.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
useOpenGeniText
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
5
5
|
|
|
6
6
|
// src/hooks/use-transcription.ts
|
|
7
7
|
import {
|
|
@@ -1580,4 +1580,4 @@ export {
|
|
|
1580
1580
|
VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
|
|
1581
1581
|
useVoiceInput
|
|
1582
1582
|
};
|
|
1583
|
-
//# sourceMappingURL=chunk-
|
|
1583
|
+
//# sourceMappingURL=chunk-NTZ5ZNVK.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
useInteractionInterventions,
|
|
8
8
|
useInteractionInvalidation,
|
|
9
9
|
useViewerMenuDismiss
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-W54BHJO7.js";
|
|
11
11
|
import {
|
|
12
12
|
useClientConfigFlags
|
|
13
13
|
} from "./chunk-XESA3B7W.js";
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
} from "./chunk-TXS65BB2.js";
|
|
41
41
|
import {
|
|
42
42
|
useOpenGeniText
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
44
44
|
|
|
45
45
|
// src/components/browser-viewer.tsx
|
|
46
46
|
import { interactionControlFailureFromError } from "@opengeni/sdk/interaction";
|
|
@@ -4821,4 +4821,4 @@ export {
|
|
|
4821
4821
|
staleBrowserEndRetryDelayMs,
|
|
4822
4822
|
BrowserViewer
|
|
4823
4823
|
};
|
|
4824
|
-
//# sourceMappingURL=chunk-
|
|
4824
|
+
//# sourceMappingURL=chunk-NWLRABUR.js.map
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
nextRuns,
|
|
8
8
|
toScheduleSpec,
|
|
9
9
|
validateCadence
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5MLM5T5C.js";
|
|
11
11
|
import {
|
|
12
12
|
inSentence
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-BVNGDFBC.js";
|
|
14
14
|
import {
|
|
15
15
|
sessionAutomationWait,
|
|
16
16
|
sessionAutomationWaitLabel
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-BGIYL26H.js";
|
|
18
18
|
|
|
19
19
|
// src/components/automations/event-trigger-model.ts
|
|
20
20
|
import {
|
|
@@ -705,4 +705,4 @@ export {
|
|
|
705
705
|
sessionAutomationWaitWords,
|
|
706
706
|
sessionAutomationWaitLines
|
|
707
707
|
};
|
|
708
|
-
//# sourceMappingURL=chunk-
|
|
708
|
+
//# sourceMappingURL=chunk-O2H2U7YS.js.map
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
} from "./chunk-PNVSFQFB.js";
|
|
7
7
|
import {
|
|
8
8
|
RailTrailingMetadata
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7D3WIDKK.js";
|
|
10
10
|
import {
|
|
11
11
|
visualTreeDepth
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YPIXBAF6.js";
|
|
13
13
|
import {
|
|
14
14
|
OpenPublishedSiteItem,
|
|
15
15
|
useSiteActions
|
|
@@ -320,4 +320,4 @@ export {
|
|
|
320
320
|
readSiteRowDragPayload,
|
|
321
321
|
SiteSessionGroupHeading
|
|
322
322
|
};
|
|
323
|
-
//# sourceMappingURL=chunk-
|
|
323
|
+
//# sourceMappingURL=chunk-OAL2PPX4.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BillingClassMark,
|
|
4
4
|
PickerNavRow
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FW22IREV.js";
|
|
6
6
|
import {
|
|
7
7
|
MENU_CHECK_CLASS,
|
|
8
8
|
MENU_LABEL_CLASS,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
} from "./chunk-TXS65BB2.js";
|
|
31
31
|
import {
|
|
32
32
|
useOpenGeniText
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
34
34
|
|
|
35
35
|
// src/components/model-policy-picker-menu.tsx
|
|
36
36
|
import { ArrowRightIcon, CheckIcon, SearchIcon, ZapIcon } from "lucide-react";
|
|
@@ -370,4 +370,4 @@ export {
|
|
|
370
370
|
ModelPolicyPickerMenu,
|
|
371
371
|
ModelPolicyPickerPopover
|
|
372
372
|
};
|
|
373
|
-
//# sourceMappingURL=chunk-
|
|
373
|
+
//# sourceMappingURL=chunk-OCYTHZ4A.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-XVU32APP.js";
|
|
5
5
|
import {
|
|
6
6
|
t
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-J42QE4VO.js";
|
|
8
8
|
import {
|
|
9
9
|
creditRefusalHeadline,
|
|
10
10
|
creditRefusalKindFromText,
|
|
@@ -226,4 +226,4 @@ export {
|
|
|
226
226
|
chatComposerPlaceholder,
|
|
227
227
|
failureFallbackReason
|
|
228
228
|
};
|
|
229
|
-
//# sourceMappingURL=chunk-
|
|
229
|
+
//# sourceMappingURL=chunk-OEDTCIXF.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
FIRST_PARTY_CAPABILITY_LOGOS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YH3ARKBB.js";
|
|
5
5
|
import {
|
|
6
6
|
hasWorkspacePermission
|
|
7
7
|
} from "./chunk-H2ALCTWC.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-JDFDPMKX.js";
|
|
14
14
|
import {
|
|
15
15
|
SessionCapabilityFrame
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PV7U6OOJ.js";
|
|
17
17
|
import {
|
|
18
18
|
Button
|
|
19
19
|
} from "./chunk-7QQN3KNP.js";
|
|
@@ -108,4 +108,4 @@ export {
|
|
|
108
108
|
PERSONAL_GITHUB_CARD_DESCRIPTION,
|
|
109
109
|
SessionPersonalGitHubCapabilityCard
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-OLVSYB3P.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
createOpenGeniText
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
5
5
|
|
|
6
6
|
// src/recordings-model.ts
|
|
7
7
|
import {
|
|
@@ -82,7 +82,8 @@ var PROVIDER_FAILURES = /* @__PURE__ */ new Set([
|
|
|
82
82
|
"missing_provider_key",
|
|
83
83
|
"provider_unauthorized",
|
|
84
84
|
"provider_quota_exceeded",
|
|
85
|
-
"policy_blocked"
|
|
85
|
+
"policy_blocked",
|
|
86
|
+
"subscription_api_unavailable"
|
|
86
87
|
]);
|
|
87
88
|
var MODEL_FAILURES = /* @__PURE__ */ new Set([
|
|
88
89
|
"provider_too_large",
|
|
@@ -98,6 +99,8 @@ function transcriptFixModel(code, failed, models) {
|
|
|
98
99
|
const rank = (entry) => entry.funding === "workspace_subscription" ? 0 : charged(entry) ? 3 : entry.usdPerHour === null ? 1 : 2;
|
|
99
100
|
const candidates = models.filter((entry) => {
|
|
100
101
|
if (!entry.available || !entry.capabilities.batch) return false;
|
|
102
|
+
if (code === "subscription_api_unavailable" && entry.funding === "workspace_subscription")
|
|
103
|
+
return false;
|
|
101
104
|
if (failed && entry.providerId === failed.providerId) {
|
|
102
105
|
if (!MODEL_FAILURES.has(code) || entry.model === failed.model) return false;
|
|
103
106
|
}
|
|
@@ -121,6 +124,10 @@ function meetingStatusLabel(phase, msg = defaultText) {
|
|
|
121
124
|
}
|
|
122
125
|
function transcriptErrorText(code, msg = defaultText, model) {
|
|
123
126
|
switch (code) {
|
|
127
|
+
case "subscription_plan_required":
|
|
128
|
+
return msg("lib.format.subscriptionUpgradeRequiredHeadline");
|
|
129
|
+
case "subscription_api_unavailable":
|
|
130
|
+
return msg("meetings.recordings.errorSubscriptionApiUnavailable");
|
|
124
131
|
case "missing_provider_key": {
|
|
125
132
|
if (!model) return msg("meetings.recordings.errorMissingProviderKey");
|
|
126
133
|
const names = { modelName: model.modelName, providerName: model.providerName };
|
|
@@ -448,4 +455,4 @@ export {
|
|
|
448
455
|
tidyLiveText,
|
|
449
456
|
tidyPartialText
|
|
450
457
|
};
|
|
451
|
-
//# sourceMappingURL=chunk-
|
|
458
|
+
//# sourceMappingURL=chunk-OQ6QOPK6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/recordings-model.ts"],"sourcesContent":["/**\n * Plain helpers for meeting UIs (web, phone, embedders): words for a recording's state, clock\n * times, speaker names and colors, and the transcript grouped into turns.\n * No React here, so each rule is tested on its own.\n */\nimport {\n recordingMicrophoneIsOwner,\n recordingSpeakerDefault,\n type Recording,\n type RecordingSpeaker,\n type RecordingTrack,\n type RecordingTranscriptSegment,\n type RecordingTranscriptionModel,\n type RecordingTranscriptVersion,\n} from \"@opengeni/contracts\";\nimport type { RecorderSnapshot, RecordingUploadStatus } from \"@opengeni/sdk/recordings\";\nimport { createOpenGeniText, type OpenGeniText } from \"./messages/runtime\";\n\nconst defaultText = createOpenGeniText();\n\n/** \"4:07\", \"1:02:09\". Never negative; rounds down to the second. */\nexport function formatClock(milliseconds: number): string {\n const total = Math.max(0, Math.floor(milliseconds / 1000));\n const hours = Math.floor(total / 3600);\n const minutes = Math.floor((total % 3600) / 60);\n const seconds = total % 60;\n const ss = String(seconds).padStart(2, \"0\");\n return hours > 0 ? `${hours}:${String(minutes).padStart(2, \"0\")}:${ss}` : `${minutes}:${ss}`;\n}\n\n/** \"45 sec\", \"12 min\", \"1 h 5 min\": a recording's length in a list, in `msg`'s language. */\nexport function formatDuration(milliseconds: number, msg: OpenGeniText = defaultText): string {\n const seconds = Math.round(Math.max(0, milliseconds) / 1000);\n if (seconds < 60) return msg(\"meetings.recordings.durationSeconds\", { seconds });\n const minutes = Math.round(seconds / 60);\n if (minutes < 60) return msg(\"meetings.recordings.durationMinutes\", { minutes });\n const hours = Math.floor(minutes / 60);\n const rest = minutes % 60;\n return rest === 0\n ? msg(\"meetings.recordings.durationHours\", { hours })\n : msg(\"meetings.recordings.durationHoursMinutes\", { hours, minutes: rest });\n}\n\nexport type MeetingPhase =\n | { kind: \"uploading\" }\n | { kind: \"transcribing\"; version: RecordingTranscriptVersion | null }\n | { kind: \"ready\"; version: RecordingTranscriptVersion }\n | { kind: \"failed\"; version: RecordingTranscriptVersion | null }\n | { kind: \"no_transcript\" };\n\n/**\n * Where a recording is in its life, from the reader's side. A recording still\n * capturing is \"uploading\" (kept for compatibility; it reads \"In progress\"):\n * it is still being recorded, or its last audio is still on its way from the\n * device that recorded it. That device knows which, so it asks\n * {@link meetingHereStatus}. A failed re-run leaves an older complete version\n * current, so the transcript stays readable.\n */\nexport function meetingPhase(recording: Recording): MeetingPhase {\n if (recording.state === \"capturing\") return { kind: \"uploading\" };\n const version = recording.transcript;\n if (version?.state === \"complete\") return { kind: \"ready\", version };\n if (version?.state === \"queued\" || version?.state === \"processing\") {\n return { kind: \"transcribing\", version };\n }\n if (version?.state === \"failed\" || recording.state === \"failed\") {\n return { kind: \"failed\", version: version ?? null };\n }\n if (recording.state === \"processing\") return { kind: \"transcribing\", version: null };\n return { kind: \"no_transcript\" };\n}\n\n/**\n * What this device's recorder knows about one meeting that the server can't\n * yet: it is recording (or paused) here, or it was stopped here and its last\n * few seconds of audio are on their way, which a person reads as Transcribing.\n * The audio uploads while it records, so nothing is left to \"upload\" after\n * Stop unless the connection is down or the server refused it. Null when this\n * device isn't recording that meeting, or when capture failed before Stop\n * finished it; the server's {@link meetingPhase} says the rest.\n *\n * A meeting recorded here earlier (before a reload, a restart, or a move to\n * another page) is finished in the background from the audio kept here: it is\n * `uploading` until the server has it all, then `transcribing`, and\n * `upload_failed` when the server refused it, keeping the audio here for a retry.\n */\nexport type MeetingHereStatus =\n | \"recording\"\n | \"paused\"\n | \"uploading\"\n | \"transcribing\"\n | \"waiting_for_connection\"\n | \"upload_failed\";\n\nexport function meetingHereStatus(\n recorder:\n | (Pick<RecorderSnapshot, \"state\" | \"recordingId\" | \"upload\"> & {\n uploads?: Readonly<Record<string, RecordingUploadStatus>> | undefined;\n })\n | null,\n recordingId: string,\n online = true,\n): MeetingHereStatus | null {\n if (!recorder) return null;\n if (recorder.recordingId !== recordingId) {\n const upload = recorder.uploads?.[recordingId];\n if (!upload || upload.discarded) return null;\n if (upload.failed) return \"upload_failed\";\n if (upload.finalized) return \"transcribing\";\n if (!online || upload.retryingAfterError) return \"waiting_for_connection\";\n return \"uploading\";\n }\n if (recorder.state === \"recording\") return \"recording\";\n if (recorder.state === \"paused\") return \"paused\";\n if (recorder.state === \"idle\" || recorder.state === \"starting\") return null;\n const upload = recorder.upload;\n if (upload?.discarded) return null;\n if (upload?.failed) return \"upload_failed\";\n // Capture failed mid-recording: nothing finishes it until this browser\n // recovers it, so it isn't transcribing yet.\n if (recorder.state === \"failed\" && !upload?.finalized) return null;\n if (!upload?.finalized && (!online || upload?.retryingAfterError)) {\n return \"waiting_for_connection\";\n }\n return \"transcribing\";\n}\n\n/** The upload failure this device's recorder holds for a meeting, current or earlier. */\nexport function meetingUploadFailure(\n recorder:\n | (Pick<RecorderSnapshot, \"recordingId\" | \"upload\"> & {\n uploads?: Readonly<Record<string, RecordingUploadStatus>> | undefined;\n })\n | null,\n recordingId: string,\n): { code: string; message: string } | null {\n if (!recorder) return null;\n const upload =\n recorder.recordingId === recordingId ? recorder.upload : recorder.uploads?.[recordingId];\n return upload?.failed ?? null;\n}\n\n/** Audio up to this long is usually transcribed in a minute or two. */\nconst SHORT_AUDIO_MILLISECONDS = 5 * 60_000;\n\n/**\n * What to say while a meeting is transcribed: a short one is done in a minute\n * or two; a long one takes a while (its words may be timed on our side), so\n * the line says how much audio it is and that the reader needn't wait.\n */\nexport function transcribingText(\n durationMilliseconds: number,\n msg: OpenGeniText = defaultText,\n): string {\n if (durationMilliseconds <= SHORT_AUDIO_MILLISECONDS) {\n return msg(\"meetings.detailPage.transcribingThisUsuallyTakesA\");\n }\n return msg(\"meetings.detailPage.transcribingLongAudio\", {\n duration: formatDuration(durationMilliseconds, msg),\n });\n}\n\n/** Refusals that credits, or a model that doesn't use them, fix. */\nexport function transcriptNeedsCredits(code: string | null | undefined): boolean {\n return (\n code === \"insufficient_credits\" ||\n code === \"allowance_exhausted\" ||\n code === \"monthly_model_cost_limit\"\n );\n}\n\n/** Failures of the provider itself: any other provider may work. */\nconst PROVIDER_FAILURES = new Set([\n \"missing_provider_key\",\n \"provider_unauthorized\",\n \"provider_quota_exceeded\",\n \"policy_blocked\",\n \"subscription_api_unavailable\",\n]);\n/** Failures of the model: another model, even the same provider's, may work. */\nconst MODEL_FAILURES = new Set([\n \"provider_too_large\",\n \"provider_not_supported\",\n \"model_unavailable\",\n]);\n\n/**\n * The model to transcribe a failed meeting with instead, as its one direct\n * fix: usable here, not the one that failed (nor its provider, when the\n * provider was the problem), and for a credit refusal one that uses no\n * credits. A subscription comes first, then a model the deployment covers,\n * then the workspace's own key. Null when no other model would help.\n */\nexport function transcriptFixModel(\n code: string | null | undefined,\n failed: { providerId: string; model: string } | null,\n models: readonly RecordingTranscriptionModel[],\n): RecordingTranscriptionModel | null {\n const credits = transcriptNeedsCredits(code);\n if (!code || (!credits && !PROVIDER_FAILURES.has(code) && !MODEL_FAILURES.has(code))) {\n return null;\n }\n const charged = (entry: RecordingTranscriptionModel) =>\n entry.chargedInCredits ?? (entry.funding === \"deployment\" && entry.usdPerHour !== null);\n const rank = (entry: RecordingTranscriptionModel) =>\n entry.funding === \"workspace_subscription\"\n ? 0\n : charged(entry)\n ? 3\n : entry.usdPerHour === null\n ? 1\n : 2;\n const candidates = models.filter((entry) => {\n if (!entry.available || !entry.capabilities.batch) return false;\n if (code === \"subscription_api_unavailable\" && entry.funding === \"workspace_subscription\")\n return false;\n if (failed && entry.providerId === failed.providerId) {\n if (!MODEL_FAILURES.has(code) || entry.model === failed.model) return false;\n }\n // The server says which models are charged in credits.\n return !credits || !charged(entry);\n });\n return [...candidates].sort((a, b) => rank(a) - rank(b))[0] ?? null;\n}\n\n/** The one-word state a list row shows, or null when there is nothing to say. */\nexport function meetingStatusLabel(\n phase: MeetingPhase,\n msg: OpenGeniText = defaultText,\n): { label: string; tone: \"progress\" | \"danger\" | \"neutral\" } | null {\n switch (phase.kind) {\n case \"uploading\":\n return { label: msg(\"meetings.recordings.inProgress\"), tone: \"progress\" };\n case \"transcribing\":\n return { label: msg(\"meetings.recordings.transcribing\"), tone: \"progress\" };\n case \"failed\":\n return { label: msg(\"meetings.recordings.transcriptFailed\"), tone: \"danger\" };\n case \"no_transcript\":\n return { label: msg(\"meetings.recordings.noTranscript\"), tone: \"neutral\" };\n case \"ready\":\n return null;\n }\n}\n\n/**\n * Plain words for a transcription error code, with what to do about it. The\n * codes are the worker's: its own (`missing_provider_key`, `invalid_audio`,\n * ...) and the provider's, prefixed `provider_`. `model` names the model the\n * version ran and its provider, when the caller knows them, so a missing key\n * says which provider isn't connected rather than that none is. Its funding\n * says who can connect it (the deployment's own key is its operator's), and\n * `pinned` that the deployment offers no other model to try instead.\n */\nexport function transcriptErrorText(\n code: string | null,\n msg: OpenGeniText = defaultText,\n model?: {\n modelName: string;\n providerName: string;\n funding?: string | undefined;\n pinned?: boolean | undefined;\n } | null,\n): string {\n switch (code) {\n case \"subscription_plan_required\":\n return msg(\"lib.format.subscriptionUpgradeRequiredHeadline\");\n case \"subscription_api_unavailable\":\n return msg(\"meetings.recordings.errorSubscriptionApiUnavailable\");\n case \"missing_provider_key\": {\n if (!model) return msg(\"meetings.recordings.errorMissingProviderKey\");\n const names = { modelName: model.modelName, providerName: model.providerName };\n if (model.funding === \"deployment\") {\n return model.pinned\n ? msg(\"meetings.recordings.errorMissingProviderKeyForDeploymentPinned\", names)\n : msg(\"meetings.recordings.errorMissingProviderKeyForDeployment\", names);\n }\n return model.pinned\n ? msg(\"meetings.recordings.errorMissingProviderKeyForPinned\", names)\n : msg(\"meetings.recordings.errorMissingProviderKeyFor\", names);\n }\n case \"provider_unauthorized\":\n return msg(\"meetings.recordings.errorProviderUnauthorized\");\n case \"provider_quota_exceeded\":\n return msg(\"meetings.recordings.errorProviderQuotaExceeded\");\n case \"provider_too_large\":\n return msg(\"meetings.recordings.errorProviderTooLarge\");\n case \"provider_not_supported\":\n case \"model_unavailable\":\n return msg(\"meetings.recordings.errorModelUnavailable\");\n case \"invalid_audio\":\n case \"provider_invalid_audio\":\n case \"ffmpeg_failed\":\n return msg(\"meetings.recordings.errorInvalidAudio\");\n case \"storage_unavailable\":\n return msg(\"meetings.recordings.errorStorageUnavailable\");\n case \"region_restricted\":\n return msg(\"inferenceRegion.notSupportedInEu\");\n case \"insufficient_credits\":\n return model\n ? msg(\"meetings.recordings.errorInsufficientCreditsFor\", { modelName: model.modelName })\n : msg(\"meetings.recordings.errorInsufficientCredits\");\n case \"allowance_exhausted\":\n return msg(\"meetings.recordings.errorAllowanceExhausted\");\n case \"monthly_model_cost_limit\":\n return msg(\"meetings.recordings.errorMonthlyCostLimit\");\n case \"policy_blocked\":\n return msg(\"meetings.recordings.errorPolicyBlocked\");\n case \"timed_out\":\n return msg(\"meetings.recordings.errorTimedOut\");\n default:\n return msg(\"meetings.recordings.errorUnknown\");\n }\n}\n\n/**\n * The name to show for a speaker: the person or plain name someone gave it,\n * else \"Speaker 2\" for a model's label, or the track's role for a track label.\n */\nexport function speakerDisplayName(\n label: string | null,\n speakers: readonly RecordingSpeaker[],\n tracks: readonly RecordingTrack[],\n msg: OpenGeniText = defaultText,\n): string {\n if (!label) return msg(\"meetings.recordings.unknownSpeaker\");\n const speaker = speakers.find((candidate) => candidate.label === label);\n if (speaker && speakerIsNamed(label, speakers) && speaker.name.trim()) return speaker.name;\n return defaultSpeakerName(label, tracks, msg);\n}\n\n/** \"Speaker 2\", \"Microphone\" or \"Shared audio\" for an unnamed label, in `msg`'s language. */\nexport function defaultSpeakerName(\n label: string,\n tracks: readonly RecordingTrack[],\n msg: OpenGeniText = defaultText,\n): string {\n const named = recordingSpeakerDefault(label, tracks);\n switch (named.kind) {\n case \"speaker\":\n return msg(\"meetings.recordings.speakerNumber\", { number: named.number });\n case \"microphone\":\n return msg(\"meetings.recordings.microphone\");\n case \"system\":\n return msg(\"meetings.recordings.sharedAudio\");\n case \"track\":\n return msg(\"meetings.recordings.trackNumber\", { number: named.number });\n case \"label\":\n return named.label;\n }\n}\n\n/**\n * A live preview lane's name when the microphone is the person recording\n * (computer or tab audio beside it): `ownerName` for the microphone and\n * \"Others\" for the computer or tab audio. Null otherwise, when lanes are\n * named by their source.\n */\nexport function ownerLiveLaneName(\n tracks: readonly { trackNumber: number; source: RecordingTrack[\"source\"] }[],\n trackNumber: number,\n ownerName: string,\n msg: OpenGeniText = defaultText,\n): string | null {\n if (!recordingMicrophoneIsOwner(tracks)) return null;\n const source = tracks.find((track) => track.trackNumber === trackNumber)?.source;\n if (source === \"microphone\") return ownerName;\n if (source === \"system\") return msg(\"meetings.liveTranscript.others\");\n return null;\n}\n\n/** True when the label has a name of its own: a person, a plain name, or a suggestion. */\nexport function speakerIsNamed(label: string, speakers: readonly RecordingSpeaker[]): boolean {\n const speaker = speakers.find((candidate) => candidate.label === label);\n return Boolean(speaker && (speaker.personId || speaker.source));\n}\n\n/**\n * A stable color slot (1-6, the chart palette) per speaker label, in order of\n * first appearance so the first voice is always the same hue.\n */\nexport function speakerColorSlots(\n segments: readonly RecordingTranscriptSegment[],\n): Map<string, number> {\n const slots = new Map<string, number>();\n for (const segment of segments) {\n const label = segment.speakerLabel;\n if (label && !slots.has(label)) slots.set(label, (slots.size % 6) + 1);\n }\n return slots;\n}\n\nexport type TranscriptTurn = {\n /** First segment index; stable across edits that keep the order. */\n key: number;\n speakerLabel: string | null;\n startMilliseconds: number;\n endMilliseconds: number;\n segments: RecordingTranscriptSegment[];\n};\n\n/**\n * Consecutive segments of one speaker read as one turn, the way a person reads\n * a transcript. A long pause starts a new turn even for the same voice, so a\n * timestamp is never far from the words it marks.\n */\nexport function groupTranscriptTurns(\n segments: readonly RecordingTranscriptSegment[],\n maxGapMilliseconds = 30_000,\n): TranscriptTurn[] {\n const turns: TranscriptTurn[] = [];\n for (const segment of segments) {\n const last = turns.at(-1);\n if (\n last &&\n last.speakerLabel === segment.speakerLabel &&\n segment.startMilliseconds - last.endMilliseconds <= maxGapMilliseconds\n ) {\n last.segments.push(segment);\n last.endMilliseconds = Math.max(last.endMilliseconds, segment.endMilliseconds);\n continue;\n }\n turns.push({\n key: segment.index,\n speakerLabel: segment.speakerLabel,\n startMilliseconds: segment.startMilliseconds,\n endMilliseconds: segment.endMilliseconds,\n segments: [segment],\n });\n }\n return turns;\n}\n\n/** The segment playing at `milliseconds`, or the last one that started before it. */\nexport function activeSegmentIndex(\n segments: readonly RecordingTranscriptSegment[],\n milliseconds: number,\n): number | null {\n let low = 0;\n let high = segments.length - 1;\n let found: number | null = null;\n while (low <= high) {\n const middle = (low + high) >> 1;\n const segment = segments[middle]!;\n if (segment.startMilliseconds <= milliseconds) {\n found = middle;\n low = middle + 1;\n } else {\n high = middle - 1;\n }\n }\n return found === null ? null : segments[found]!.index;\n}\n\n/** \"ElevenLabs Scribe v2 · English · 3 speakers\" style facts for a version. */\nexport function versionSummary(\n version: RecordingTranscriptVersion,\n modelName: string | null,\n locale?: string,\n): string[] {\n const parts = [modelName ?? version.model];\n const languages = version.languages.map((code) => languageName(code, locale)).filter(Boolean);\n if (languages.length > 0) parts.push(languages.join(\", \"));\n return parts;\n}\n\n/** English names for common languages, for runtimes without Intl.DisplayNames (Hermes). */\nconst LANGUAGE_NAMES: Record<string, string> = {\n ar: \"Arabic\",\n cs: \"Czech\",\n da: \"Danish\",\n de: \"German\",\n el: \"Greek\",\n en: \"English\",\n es: \"Spanish\",\n fi: \"Finnish\",\n fr: \"French\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n id: \"Indonesian\",\n is: \"Icelandic\",\n it: \"Italian\",\n ja: \"Japanese\",\n ko: \"Korean\",\n nb: \"Norwegian Bokmål\",\n nl: \"Dutch\",\n nn: \"Norwegian Nynorsk\",\n no: \"Norwegian\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n ro: \"Romanian\",\n ru: \"Russian\",\n sv: \"Swedish\",\n th: \"Thai\",\n tr: \"Turkish\",\n uk: \"Ukrainian\",\n vi: \"Vietnamese\",\n zh: \"Chinese\",\n};\n\n// Providers may report ISO 639-2 codes (\"eng\"). Hermes, the phone's\n// JavaScript engine, does not canonicalize them to \"en\", so map them here.\nconst THREE_LETTER_LANGUAGES: Record<string, string> = {\n ara: \"ar\",\n ces: \"cs\",\n cze: \"cs\",\n dan: \"da\",\n deu: \"de\",\n ger: \"de\",\n ell: \"el\",\n gre: \"el\",\n eng: \"en\",\n spa: \"es\",\n fin: \"fi\",\n fra: \"fr\",\n fre: \"fr\",\n heb: \"he\",\n hin: \"hi\",\n hun: \"hu\",\n ind: \"id\",\n isl: \"is\",\n ice: \"is\",\n ita: \"it\",\n jpn: \"ja\",\n kor: \"ko\",\n nob: \"nb\",\n nld: \"nl\",\n dut: \"nl\",\n nno: \"nn\",\n nor: \"no\",\n pol: \"pl\",\n por: \"pt\",\n ron: \"ro\",\n rum: \"ro\",\n rus: \"ru\",\n swe: \"sv\",\n tha: \"th\",\n tur: \"tr\",\n ukr: \"uk\",\n vie: \"vi\",\n zho: \"zh\",\n chi: \"zh\",\n};\n\n/**\n * \"English\" for \"en\" or a provider's \"eng\", named in `locale` (\"engelsk\" in Norwegian);\n * the code itself when no name is known.\n */\nexport function languageName(code: string, locale?: string): string {\n let tag = code;\n try {\n tag = Intl.getCanonicalLocales(code)[0] ?? code;\n } catch {\n // Not a well-formed tag: show it as given.\n }\n const [primary, ...rest] = tag.split(\"-\");\n const twoLetter = THREE_LETTER_LANGUAGES[primary!.toLowerCase()];\n if (twoLetter) tag = [twoLetter, ...rest].join(\"-\");\n try {\n const name = new Intl.DisplayNames(locale ? [locale, \"en\"] : [\"en\"], { type: \"language\" }).of(\n tag,\n );\n // Some languages write language names in lower case (\"norsk\"); a label starts upper case.\n if (name && name !== tag) return name.charAt(0).toLocaleUpperCase(locale) + name.slice(1);\n } catch {\n // No Intl.DisplayNames here.\n }\n return LANGUAGE_NAMES[tag] ?? LANGUAGE_NAMES[tag.split(\"-\")[0]!] ?? tag;\n}\n\nconst MONTH_KEYS = [\n \"time.month.jan\",\n \"time.month.feb\",\n \"time.month.mar\",\n \"time.month.apr\",\n \"time.month.may\",\n \"time.month.jun\",\n \"time.month.jul\",\n \"time.month.aug\",\n \"time.month.sep\",\n \"time.month.oct\",\n \"time.month.nov\",\n \"time.month.dec\",\n] as const;\n\n/**\n * A short, readable default title for a new recording, in local time and the\n * app's own date words and 24-hour clock: \"Meeting, 23 Oct, 14:05\".\n */\nexport function defaultMeetingTitle(now: Date, msg: OpenGeniText = defaultText): string {\n const month = msg(MONTH_KEYS[now.getMonth()] ?? \"time.month.jan\");\n const date = msg(\"time.date\", { day: now.getDate(), month });\n const time = `${String(now.getHours()).padStart(2, \"0\")}:${String(now.getMinutes()).padStart(2, \"0\")}`;\n return msg(\"meetings.recordings.defaultTitle\", { date, time });\n}\n\n/**\n * The title to show for a meeting. One started without a title carries the\n * server's stand-in, \"Recording 2026-10-26 11:15 UTC\"; it shows as a\n * recorder would have named it, in the viewer's language and time.\n */\nexport function meetingTitle(\n recording: Pick<Recording, \"title\" | \"startedAt\">,\n msg: OpenGeniText = defaultText,\n): string {\n const title = recording.title.trim();\n const startedAt = new Date(recording.startedAt);\n if (Number.isNaN(startedAt.getTime())) return title;\n if (title && title !== serverDefaultTitle(startedAt)) return title;\n return defaultMeetingTitle(startedAt, msg);\n}\n\n/** The title the server gives a recording started without one. */\nfunction serverDefaultTitle(startedAt: Date): string {\n return `Recording ${startedAt.toISOString().slice(0, 16).replace(\"T\", \" \")} UTC`;\n}\n\n/** A finished stretch of live text on one track, as the live preview shows it. */\nexport type LiveTranscriptLine = {\n trackNumber: number;\n startMilliseconds: number;\n /** When it ended; without it the line is taken as a moment at its start. */\n endMilliseconds?: number;\n text: string;\n};\n\n/** Consecutive live lines from one track, read as one turn. */\nexport type LiveTranscriptTurn = {\n key: string;\n trackNumber: number;\n startMilliseconds: number;\n texts: string[];\n};\n\n/** Consecutive lines from one track read as one turn. */\nexport function groupLiveTurns(lines: readonly LiveTranscriptLine[]): LiveTranscriptTurn[] {\n const sorted = [...lines].sort(\n (a, b) => a.startMilliseconds - b.startMilliseconds || a.trackNumber - b.trackNumber,\n );\n const turns: LiveTranscriptTurn[] = [];\n for (const line of sorted) {\n const text = line.text.trim();\n if (!text) continue;\n const last = turns.at(-1);\n if (last && last.trackNumber === line.trackNumber) {\n last.texts.push(text);\n continue;\n }\n turns.push({\n key: `${line.trackNumber}:${line.startMilliseconds}`,\n trackNumber: line.trackNumber,\n startMilliseconds: line.startMilliseconds,\n texts: [text],\n });\n }\n return turns;\n}\n\n/** How far apart a microphone line and computer audio may be and still be one sound. */\nconst LIVE_ECHO_SLACK_MILLISECONDS = 2_000;\n/** Matching words an echoed line needs, so one shared \"ja\" or \"okay\" stays. */\nconst LIVE_ECHO_MIN_MATCHED_WORDS = 2;\n/** The share of a microphone line's words heard in computer audio for it to be an echo. */\nconst LIVE_ECHO_MIN_SHARE = 0.7;\n\n/** A line's words as compared across tracks: letters and digits only, any case. */\nfunction liveWordKeys(text: string): string[] {\n return text\n .normalize(\"NFKC\")\n .toLocaleLowerCase()\n .split(/\\s+/u)\n .map((word) => word.replace(/[^\\p{L}\\p{N}]+/gu, \"\"))\n .filter(Boolean);\n}\n\n/**\n * Without headphones the microphone also hears the others in a call from the\n * speakers, so the live preview would show their words twice: from computer\n * audio, and again as if the person recording said them. Leave out a\n * microphone line when most of its words (at least two, and 70%) were heard\n * in computer audio at the same moment. The preview's text comes a sentence\n * at a time, so a line that also holds the person's own words stays whole.\n * The transcript does the same word by word once the recording is done.\n */\nexport function withoutLiveMicrophoneEchoes<Line extends LiveTranscriptLine>(\n lines: readonly Line[],\n tracks: readonly { trackNumber: number; source: RecordingTrack[\"source\"] }[],\n): Line[] {\n if (!recordingMicrophoneIsOwner(tracks)) return [...lines];\n const sourceOf = (trackNumber: number) =>\n tracks.find((track) => track.trackNumber === trackNumber)?.source;\n const computer = lines\n .filter((line) => sourceOf(line.trackNumber) === \"system\")\n .map((line) => ({\n start: line.startMilliseconds,\n end: Math.max(line.startMilliseconds, line.endMilliseconds ?? line.startMilliseconds),\n keys: new Set(liveWordKeys(line.text)),\n }));\n if (computer.length === 0) return [...lines];\n return lines.filter((line) => {\n if (sourceOf(line.trackNumber) !== \"microphone\") return true;\n const keys = liveWordKeys(line.text);\n if (keys.length < LIVE_ECHO_MIN_MATCHED_WORDS) return true;\n const start = line.startMilliseconds;\n const end = Math.max(start, line.endMilliseconds ?? start);\n const heard = computer.filter(\n (other) =>\n other.start <= end + LIVE_ECHO_SLACK_MILLISECONDS &&\n other.end >= start - LIVE_ECHO_SLACK_MILLISECONDS,\n );\n if (heard.length === 0) return true;\n const matched = keys.filter((key) => heard.some((other) => other.keys.has(key))).length;\n return !(\n matched >= LIVE_ECHO_MIN_MATCHED_WORDS && matched / keys.length >= LIVE_ECHO_MIN_SHARE\n );\n });\n}\n\n/**\n * Joins a turn's pieces into readable text. Streaming providers send pieces\n * that end in a trailing ellipsis while they wait, or a space before a full\n * stop; joined naively those read as \"between you….\" or \"dog .\".\n */\nexport function tidyLiveText(pieces: readonly string[]): string {\n return pieces\n .map((piece) => piece.trim())\n .filter(Boolean)\n .join(\" \")\n .replace(/\\s+([.,!?;:])/g, \"$1\")\n .replace(/(?:…|\\.{3})(?=[.,!?;:…])/g, \"\")\n .replace(/([,!?;:])\\1+/g, \"$1\")\n .replace(/(?<!\\.)\\.\\.(?!\\.)/g, \".\")\n .replace(/\\s{2,}/g, \" \");\n}\n\n/** Words still being heard, without the provider's \"still listening\" ellipsis. */\nexport function tidyPartialText(text: string): string {\n return tidyLiveText([text]).replace(/\\s*(?:…|\\.{3})$/, \"\");\n}\n"],"mappings":"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","names":["upload"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
rememberedProjectCompute
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UMRUDYUK.js";
|
|
5
5
|
|
|
6
6
|
// src/app/routes/sessions-index-hydration.tsx
|
|
7
7
|
function initialNewSessionProjectLaunchIntent(launchChannelId) {
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
resolveHydratedNewSessionProjectSelection,
|
|
54
54
|
hydratedNewSessionProjectProvenancePresent
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-OQHTFOCA.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-J4GZTERI.js";
|
|
5
5
|
import {
|
|
6
6
|
useSiteToolConsentHost
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-APG6CEG7.js";
|
|
8
8
|
import {
|
|
9
9
|
useAppApi
|
|
10
10
|
} from "./chunk-XIQPI2NM.js";
|
|
@@ -47,4 +47,4 @@ export {
|
|
|
47
47
|
useConsoleSiteViewer,
|
|
48
48
|
useConsoleSiteToolBridge
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
50
|
+
//# sourceMappingURL=chunk-P56AVROH.js.map
|
|
@@ -10,23 +10,23 @@ import {
|
|
|
10
10
|
} from "./chunk-M27WO6W3.js";
|
|
11
11
|
import {
|
|
12
12
|
Disclosure
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZVR6DUZH.js";
|
|
14
14
|
import {
|
|
15
15
|
useDesktopThisComputer
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-IXISEVD7.js";
|
|
17
17
|
import {
|
|
18
18
|
ComputerUseRow
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-EOXV5XGY.js";
|
|
20
20
|
import {
|
|
21
21
|
t
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-J42QE4VO.js";
|
|
23
23
|
import {
|
|
24
24
|
useAppContext
|
|
25
25
|
} from "./chunk-JDFDPMKX.js";
|
|
26
26
|
import {
|
|
27
27
|
ChoiceCard,
|
|
28
28
|
ChoiceCards
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-TKHRGY2P.js";
|
|
30
30
|
import {
|
|
31
31
|
SegmentedControl
|
|
32
32
|
} from "./chunk-RGBI63KJ.js";
|
|
@@ -647,4 +647,4 @@ export {
|
|
|
647
647
|
formatConnectExpiry,
|
|
648
648
|
ConnectMachineDialog
|
|
649
649
|
};
|
|
650
|
-
//# sourceMappingURL=chunk-
|
|
650
|
+
//# sourceMappingURL=chunk-PCEJHHGP.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-CM7LVUKC.js";
|
|
5
5
|
import {
|
|
6
6
|
useOpenGeniText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
8
8
|
|
|
9
9
|
// src/components/queue-surface-state.tsx
|
|
10
10
|
import { Loader2Icon, RotateCwIcon } from "lucide-react";
|
|
@@ -100,4 +100,4 @@ export {
|
|
|
100
100
|
QueueStoppingStatus,
|
|
101
101
|
QueueErrorAlert
|
|
102
102
|
};
|
|
103
|
-
//# sourceMappingURL=chunk-
|
|
103
|
+
//# sourceMappingURL=chunk-PHGQGVVL.js.map
|
|
@@ -11,14 +11,14 @@ import {
|
|
|
11
11
|
} from "./chunk-JWKGPA6Q.js";
|
|
12
12
|
import {
|
|
13
13
|
projectPendingApprovals
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-YBHAAULA.js";
|
|
15
15
|
import {
|
|
16
16
|
buildTimeline,
|
|
17
17
|
groupTimeline,
|
|
18
18
|
isToolOutputPreviewEvent,
|
|
19
19
|
sessionStatusFromEvents,
|
|
20
20
|
useToolOutputReads
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-ND4IQJUM.js";
|
|
22
22
|
import {
|
|
23
23
|
useFileAttachments
|
|
24
24
|
} from "./chunk-I6FIXEL4.js";
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
FILE_ONLY_MESSAGE_TEXT,
|
|
51
51
|
notifyObserver,
|
|
52
52
|
useComposer
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-AZFVRPQM.js";
|
|
54
54
|
import {
|
|
55
55
|
DEFAULT_TRANSIENT_READ_RETRY,
|
|
56
56
|
projectionReadThrough,
|
|
@@ -81,7 +81,7 @@ import {
|
|
|
81
81
|
} from "./chunk-ZHC47M2B.js";
|
|
82
82
|
import {
|
|
83
83
|
useOpenGeniText
|
|
84
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
85
85
|
|
|
86
86
|
// src/hooks/use-session.ts
|
|
87
87
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -1694,7 +1694,7 @@ function useSessionEvents(sessionId, options = {}) {
|
|
|
1694
1694
|
let generation = navigationGenerationRef.current;
|
|
1695
1695
|
const current = () => ownsNavigation() && generation === navigationGenerationRef.current;
|
|
1696
1696
|
try {
|
|
1697
|
-
const { resolveLatestQuestion } = await import("./latest-question-
|
|
1697
|
+
const { resolveLatestQuestion } = await import("./latest-question-KA7AQYVI.js");
|
|
1698
1698
|
if (!current()) return null;
|
|
1699
1699
|
const destination = await resolveLatestQuestion(t, {
|
|
1700
1700
|
client,
|
|
@@ -4458,4 +4458,4 @@ export {
|
|
|
4458
4458
|
useSessionReadAcknowledgement,
|
|
4459
4459
|
useNewConversation
|
|
4460
4460
|
};
|
|
4461
|
-
//# sourceMappingURL=chunk-
|
|
4461
|
+
//# sourceMappingURL=chunk-PUZRHEQI.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-XEA5BCMA.js";
|
|
8
8
|
import {
|
|
9
9
|
useOpenGeniText
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7SU4YVZ5.js";
|
|
11
11
|
|
|
12
12
|
// src/components/session-capability-frame.tsx
|
|
13
13
|
import { CheckIcon, InfoIcon, ShieldCheckIcon, XIcon } from "lucide-react";
|
|
@@ -163,4 +163,4 @@ function SessionCapabilityFrame({
|
|
|
163
163
|
export {
|
|
164
164
|
SessionCapabilityFrame
|
|
165
165
|
};
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
166
|
+
//# sourceMappingURL=chunk-PV7U6OOJ.js.map
|
|
@@ -216,6 +216,7 @@ function useRecorder(options = {}) {
|
|
|
216
216
|
...merged.visibility ? { visibility: merged.visibility } : {},
|
|
217
217
|
...merged.externalRef ? { externalRef: merged.externalRef } : {},
|
|
218
218
|
...merged.metadata ? { metadata: merged.metadata } : {},
|
|
219
|
+
...merged.calendarEvent ? { calendarEvent: merged.calendarEvent } : {},
|
|
219
220
|
...merged.transcription ? { transcription: merged.transcription } : {},
|
|
220
221
|
...merged.ownerName?.trim() ? { ownerName: merged.ownerName } : {},
|
|
221
222
|
...merged.microphone !== void 0 ? { microphone: merged.microphone } : {},
|
|
@@ -751,4 +752,4 @@ export {
|
|
|
751
752
|
useRecordingModels,
|
|
752
753
|
useRecordingNotes
|
|
753
754
|
};
|
|
754
|
-
//# sourceMappingURL=chunk-
|
|
755
|
+
//# sourceMappingURL=chunk-PYMROAWS.js.map
|