@opengeni/react 6.8.0 → 6.8.1-canary.41842879332001
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 +47 -47
- 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 +32 -32
- package/dist/app/components/command-menu/command-menu.js +36 -36
- 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/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +3 -3
- 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/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 +73 -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 +6 -6
- 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 +156 -156
- package/dist/app/lib/actions/actions-provider.js +8 -8
- 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/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 +94 -94
- 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-H7PKY67P.js} +4 -4
- package/dist/{chat-interactive-block-VSDD6X3M.js → chat-interactive-block-47TCT4DN.js} +5 -5
- package/dist/{chunk-7Z76QP64.js → chunk-2QH3Q6Z2.js} +35 -5
- package/dist/chunk-2QH3Q6Z2.js.map +1 -0
- package/dist/{chunk-5MHMCE2G.js → chunk-2X2B6D5G.js} +3 -3
- package/dist/{chunk-OCXEY7HE.js → chunk-3BUI5DT7.js} +2 -2
- package/dist/{chunk-OSJ366KR.js → chunk-3FWP3TD3.js} +29 -29
- package/dist/{chunk-PWUSSSSL.js → chunk-3G5IA36N.js} +2 -2
- package/dist/{chunk-RGR57NYY.js → chunk-3NK4JAHL.js} +2 -2
- package/dist/{chunk-XUOYNJPB.js → chunk-3O7UZRWM.js} +24 -24
- package/dist/{chunk-JV3UI7BH.js → chunk-3OR6HMA4.js} +3 -3
- package/dist/{chunk-MV2CLIO6.js → chunk-3PC45I5N.js} +6 -6
- package/dist/{chunk-SJYTQLN3.js → chunk-3PI2BYK5.js} +3 -3
- package/dist/{chunk-DCEQCGVN.js → chunk-3PNA2P2Z.js} +2 -2
- package/dist/{chunk-ESXAECZ3.js → chunk-3XBZKF3K.js} +2 -2
- package/dist/{chunk-SBXSKRFA.js → chunk-45OGYO3S.js} +3 -3
- package/dist/{chunk-M3FDGRB4.js → chunk-4A7TKVNX.js} +3 -3
- package/dist/{chunk-RHXYO4H2.js → chunk-4BXRGXTD.js} +2 -2
- package/dist/{chunk-CV4VVLPZ.js → chunk-4HQAJA3T.js} +2 -2
- package/dist/{chunk-VCJQQYRE.js → chunk-4X2A3KPB.js} +4 -4
- package/dist/{chunk-OCXTTKVA.js → chunk-555K37A7.js} +2 -2
- package/dist/{chunk-EBIVTDEG.js → chunk-57L5ZXDS.js} +2 -2
- package/dist/{chunk-3L465FBR.js → chunk-5IADORIV.js} +6 -6
- package/dist/{chunk-SK5S2PCK.js → chunk-5IZQT4TE.js} +14 -14
- package/dist/chunk-5IZQT4TE.js.map +1 -0
- 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-PVB4YVDP.js → chunk-5Y2O2432.js} +2 -2
- package/dist/{chunk-OOOSGPJL.js → chunk-6572EFE4.js} +1 -1
- package/dist/{chunk-YMI27QPF.js → chunk-6BG5HCUP.js} +2 -2
- package/dist/{chunk-QRECBCJM.js → chunk-6EXFJWII.js} +2 -2
- package/dist/{chunk-74CBR5YE.js → chunk-6PNRUGOK.js} +2 -2
- package/dist/{chunk-PUUEI4W3.js → chunk-6RJEY6TC.js} +5 -5
- package/dist/{chunk-DLVIRJGK.js → chunk-727GL2YY.js} +2 -2
- package/dist/{chunk-J2BTILRR.js → chunk-7FGYLFW6.js} +2 -2
- package/dist/{chunk-MKDFYE2E.js → chunk-7IMWTFEG.js} +2 -2
- package/dist/{chunk-FER6EVIY.js → chunk-7POKH54R.js} +2 -2
- package/dist/{chunk-H6BX6WOW.js → chunk-7T26IH6W.js} +3 -3
- package/dist/{chunk-R33SBMB7.js → chunk-7XQRVZZQ.js} +3 -3
- package/dist/{chunk-NFCS5WYC.js → chunk-A3SPPXMC.js} +3 -3
- package/dist/{chunk-DQPIEQGP.js → chunk-A7CWPDEH.js} +2 -2
- package/dist/{chunk-3PM3M2Q6.js → chunk-AGOYVKTI.js} +2 -2
- package/dist/{chunk-OBGOLHCP.js → chunk-AIQKZUPB.js} +3 -3
- package/dist/{chunk-GSCGKJNK.js → chunk-AMYDHG3S.js} +2 -2
- package/dist/{chunk-U4LTPFD2.js → chunk-APJPB6TX.js} +2 -2
- package/dist/{chunk-SP44O3OU.js → chunk-APLGT5EI.js} +2 -2
- package/dist/{chunk-M3HGBO2Y.js → chunk-ATNKMGLO.js} +1 -1
- package/dist/{chunk-4O2XWOLZ.js → chunk-AVX4CZQ3.js} +3 -3
- package/dist/{chunk-CXAN2FHF.js → chunk-B46MK44K.js} +6 -6
- package/dist/{chunk-RMCLFSMX.js → chunk-BBKUPEGG.js} +2 -2
- package/dist/{chunk-J2WY42FA.js → chunk-BES6OQE3.js} +2 -2
- package/dist/{chunk-GU7T2S5N.js → chunk-BM2N26SH.js} +2 -2
- package/dist/{chunk-HEGV4QMS.js → chunk-C3NS74PZ.js} +2 -2
- package/dist/{chunk-752WXSDN.js → chunk-C56ABB5V.js} +2 -2
- package/dist/{chunk-77SYIH6O.js → chunk-C6MATJQ5.js} +2 -2
- package/dist/{chunk-KUE5BOQE.js → chunk-CRX47CO6.js} +4 -4
- package/dist/{chunk-QPQ7R77C.js → chunk-CUIV2XPO.js} +3 -1
- package/dist/chunk-CUIV2XPO.js.map +1 -0
- package/dist/{chunk-GTHCHCWW.js → chunk-D33KWZQJ.js} +3 -3
- package/dist/{chunk-AH3DGOTK.js → chunk-D7E3BSCX.js} +2 -2
- package/dist/{chunk-OJWDNNW3.js → chunk-DFR3TMTZ.js} +5 -5
- package/dist/{chunk-WYGTAQMX.js → chunk-DICC75CU.js} +2 -2
- package/dist/{chunk-736RUNIA.js → chunk-DJ2LMKKX.js} +4 -4
- package/dist/{chunk-4F3AEJI6.js → chunk-DJI4D7PM.js} +4 -4
- package/dist/{chunk-LVELUUK6.js → chunk-DSZUQL4W.js} +2 -2
- package/dist/{chunk-MT2R57SF.js → chunk-DVF246BE.js} +2 -2
- package/dist/{chunk-OI6VI6SU.js → chunk-DVOWBHWN.js} +8 -8
- package/dist/{chunk-PZKHST7A.js → chunk-E2KPRSA4.js} +2 -2
- package/dist/{chunk-EKJHOWTZ.js → chunk-E3LMLWEB.js} +4 -4
- package/dist/{chunk-QURYQFDN.js → chunk-EDC7X7PW.js} +2 -2
- package/dist/{chunk-HYEIA25Y.js → chunk-EDSMULHU.js} +2 -2
- package/dist/{chunk-U6552Q3T.js → chunk-EQQOZ6DD.js} +2 -2
- package/dist/{chunk-IFSXVU2S.js → chunk-ERBDQ2GY.js} +2 -2
- package/dist/{chunk-IZXYFWA4.js → chunk-EWI73URG.js} +13 -13
- package/dist/{chunk-N3FM4BNA.js → chunk-EZ6LFN33.js} +2 -2
- package/dist/{chunk-4K64EKM7.js → chunk-F7YL6DPR.js} +4 -4
- package/dist/{chunk-ICAMYP5M.js → chunk-FIGFXMUP.js} +2 -2
- package/dist/{chunk-54U6ZBEX.js → chunk-FJRJK67G.js} +3 -3
- package/dist/{chunk-E5KOWRDU.js → chunk-FLHB2NZT.js} +2 -2
- package/dist/{chunk-OWET7EY2.js → chunk-FRSZSL2S.js} +19 -13
- package/dist/{chunk-OWET7EY2.js.map → chunk-FRSZSL2S.js.map} +1 -1
- package/dist/{chunk-D3PTVN2I.js → chunk-FUGGM76A.js} +2 -2
- package/dist/{chunk-QQIZMVAJ.js → chunk-FWLLGNGP.js} +51 -49
- package/dist/chunk-FWLLGNGP.js.map +1 -0
- package/dist/{chunk-TDTD66BK.js → chunk-FXPZAZYT.js} +2 -2
- package/dist/{chunk-KO3OHHY2.js → chunk-GAGAM4MT.js} +2 -2
- package/dist/{chunk-TK5FWVZR.js → chunk-GESGH3HY.js} +3 -3
- package/dist/{chunk-2VJOSU4H.js → chunk-GI4PWKXI.js} +2 -2
- package/dist/{chunk-KFNZZ2N6.js → chunk-GJTEBAZ7.js} +2 -2
- package/dist/{chunk-LTJFV2JI.js → chunk-GNCGEW7F.js} +2 -2
- package/dist/{chunk-34NV52R3.js → chunk-GOMUNPB6.js} +4 -4
- package/dist/{chunk-7YTR3UFO.js → chunk-GPWE5UD7.js} +8 -5
- package/dist/chunk-GPWE5UD7.js.map +1 -0
- package/dist/{chunk-LIJNVIT3.js → chunk-GUMUILEI.js} +3 -3
- package/dist/{chunk-7NLF35YL.js → chunk-GVGNHBFT.js} +4 -4
- package/dist/{chunk-K3D7IQQP.js → chunk-GW4YI3FB.js} +6 -6
- package/dist/{chunk-D5TIVCXG.js → chunk-GXKCV7X7.js} +2 -2
- package/dist/{chunk-2J77TWGH.js → chunk-H467EQA6.js} +3 -3
- package/dist/{chunk-3OK7Y6ES.js → chunk-HE77VDDR.js} +2 -2
- package/dist/{chunk-UO35OEOX.js → chunk-HT65RGCX.js} +3 -3
- package/dist/{chunk-G6ICCGJ3.js → chunk-HVQSFTE7.js} +2 -2
- package/dist/{chunk-G5UQBTXY.js → chunk-HXJPDC76.js} +2 -2
- package/dist/{chunk-GIWFLWXG.js → chunk-I6LQW24C.js} +4 -4
- package/dist/{chunk-467WDSOK.js → chunk-I7A6S5YL.js} +2 -2
- package/dist/{chunk-AAS7OWV6.js → chunk-IADS4ZYD.js} +3 -3
- package/dist/{chunk-Y3XZEKDQ.js → chunk-IJWMWCGR.js} +2 -2
- package/dist/{chunk-SGH7I7OY.js → chunk-IWFO6KOU.js} +2 -2
- package/dist/{chunk-GMHIOYB7.js → chunk-IYC6QGV2.js} +4 -4
- package/dist/{chunk-2OXSB2OL.js → chunk-J2TZIFRC.js} +3 -2
- package/dist/chunk-J2TZIFRC.js.map +1 -0
- package/dist/{chunk-3NNAC43A.js → chunk-J5AODKJO.js} +2 -2
- package/dist/{chunk-DIP7YALH.js → chunk-JKI3LMLH.js} +2 -2
- package/dist/{chunk-IJR6VOLU.js → chunk-JSYRWOCE.js} +2 -2
- package/dist/{chunk-CEMSIU4Z.js → chunk-JTQTWO4D.js} +5 -5
- package/dist/{chunk-JHZRAYI4.js → chunk-JWSRFXRN.js} +2 -2
- package/dist/chunk-JWSRFXRN.js.map +1 -0
- package/dist/{chunk-BASI553K.js → chunk-KBTKAAHM.js} +4 -4
- package/dist/{chunk-OYOFPNLC.js → chunk-KD7VEMWY.js} +4 -4
- package/dist/{chunk-3DRLCX5V.js → chunk-KPGFGRSA.js} +2 -2
- package/dist/{chunk-PLYVGZIN.js → chunk-KWFDEJFI.js} +1 -1
- package/dist/{chunk-FNXCFIPW.js → chunk-KYLEH4OF.js} +2 -2
- package/dist/{chunk-WXF2RTS4.js → chunk-L7FJTFJN.js} +2 -2
- package/dist/{chunk-KI46GKMD.js → chunk-L7VVQOSY.js} +7 -7
- package/dist/{chunk-M5IQVMLR.js → chunk-LAZ2QZTJ.js} +11 -4
- package/dist/chunk-LAZ2QZTJ.js.map +1 -0
- package/dist/chunk-LKLQVANM.js +2 -0
- package/dist/{chunk-YNTLWCF4.js → chunk-LLYEAZ4E.js} +3 -3
- package/dist/{chunk-4Z5X7PLC.js → chunk-LWM7JUW6.js} +3 -3
- package/dist/{chunk-CHU3RDV4.js → chunk-LXKV4ND3.js} +3 -3
- package/dist/{chunk-AB5IW227.js → chunk-LYLICEQO.js} +3 -3
- package/dist/{chunk-PSM3CU7N.js → chunk-M3OZOCIK.js} +46 -39
- package/dist/chunk-M3OZOCIK.js.map +1 -0
- package/dist/{chunk-OTW25A6I.js → chunk-M5GRI5K4.js} +3 -3
- package/dist/{chunk-X2QJXDE4.js → chunk-MF65PKKF.js} +8 -8
- package/dist/{chunk-EDDKPIIV.js → chunk-MJ4XIOPM.js} +2 -2
- package/dist/{chunk-FLWQJDJ5.js → chunk-MMPJJQG3.js} +6 -6
- package/dist/{chunk-T67LTMSW.js → chunk-MOU54FGD.js} +10 -10
- package/dist/{chunk-LQKVNREV.js → chunk-NAWHQ4IL.js} +3 -3
- package/dist/{chunk-ZBHGNE2J.js → chunk-NBHBB2VV.js} +3 -3
- package/dist/{chunk-PF2WU2IL.js → chunk-ND4IQJUM.js} +120 -17
- package/dist/chunk-ND4IQJUM.js.map +1 -0
- package/dist/{chunk-U5UGM5XD.js → chunk-NMOZDAEZ.js} +5 -5
- package/dist/{chunk-D74Z2N4K.js → chunk-NZA4R3BE.js} +2 -2
- package/dist/{chunk-WRMUXZ7C.js → chunk-OB2CX7PJ.js} +3 -3
- package/dist/{chunk-YJSCLGAW.js → chunk-OB4I4OIT.js} +3 -3
- package/dist/{chunk-DWJ6J3YW.js → chunk-OKQW2FPL.js} +4 -4
- package/dist/{chunk-2GCHGWNE.js → chunk-ORLX6A3C.js} +3 -3
- package/dist/{chunk-EBTUPRRQ.js → chunk-P5N4EYFW.js} +4 -4
- package/dist/{chunk-JKL5S7UQ.js → chunk-PL4JE3NI.js} +6 -6
- package/dist/{chunk-OP2GD6QW.js → chunk-PNUHKDY2.js} +2 -2
- package/dist/{chunk-MZY3VKKM.js → chunk-PWJE7D6V.js} +2 -2
- package/dist/{chunk-RISUROBM.js → chunk-PYE27I6J.js} +4 -4
- package/dist/{chunk-SPD4ULVB.js → chunk-PYMROAWS.js} +2 -1
- package/dist/chunk-PYMROAWS.js.map +1 -0
- package/dist/{chunk-Q5K2J5GG.js → chunk-Q74FQK3A.js} +13 -3
- package/dist/chunk-Q74FQK3A.js.map +1 -0
- package/dist/{chunk-R5QAL43H.js → chunk-QIJHK6P4.js} +2 -2
- package/dist/{chunk-AJBDAVX3.js → chunk-QK3A23NP.js} +7 -7
- package/dist/{chunk-CYDXCILL.js → chunk-QLWDNAOV.js} +7 -7
- package/dist/{chunk-BQYRZIZ7.js → chunk-QS6DQBVJ.js} +2 -2
- package/dist/{chunk-3PZ3LRPV.js → chunk-QSUVFPG3.js} +3 -3
- package/dist/{chunk-PYB4BFEC.js → chunk-QUC5MLTN.js} +3 -3
- package/dist/{chunk-WDASYY4S.js → chunk-QVT5AWPI.js} +6 -6
- package/dist/{chunk-K4DQS2ML.js → chunk-QZC6WCBR.js} +4 -4
- package/dist/{chunk-HWVPLFIW.js → chunk-RAHNICPP.js} +2 -2
- package/dist/{chunk-H6MJFMHZ.js → chunk-RME6RGIW.js} +3 -3
- package/dist/{chunk-XMBOLFFS.js → chunk-RQIB2F53.js} +2 -2
- package/dist/{chunk-OXQ2SXVC.js → chunk-RUA72NQY.js} +2 -2
- package/dist/{chunk-UMX6DZME.js → chunk-SCJHWN4X.js} +2 -2
- package/dist/{chunk-HTMQGS63.js → chunk-SIXBDT5F.js} +8 -8
- package/dist/{chunk-ZAX4XQLN.js → chunk-SPK3T4JK.js} +2 -2
- package/dist/{chunk-WTSQUCHB.js → chunk-SSN2YSST.js} +3 -3
- package/dist/{chunk-5MIBQ4P5.js → chunk-SYJCDX5V.js} +2 -2
- package/dist/{chunk-NQ2CPQJF.js → chunk-SYL7LCRA.js} +26 -3
- package/dist/chunk-SYL7LCRA.js.map +1 -0
- package/dist/{chunk-ZR5EKJT6.js → chunk-T6276OXI.js} +2 -2
- package/dist/{chunk-DEHLWZSI.js → chunk-T7OARG4N.js} +4 -4
- package/dist/{chunk-77BHKC43.js → chunk-TF5L3BEV.js} +1 -1
- package/dist/{chunk-GOCODNQS.js → chunk-TF6Z7BOP.js} +2 -2
- package/dist/{chunk-WIFDNUKD.js → chunk-TJDXWZMO.js} +3 -3
- package/dist/{chunk-SFIXTOOJ.js → chunk-TL5ATBHZ.js} +3 -3
- package/dist/{chunk-XZCCEKPW.js → chunk-TMOHIOMT.js} +6 -6
- package/dist/{chunk-AVXDIRRW.js → chunk-UI5X63YC.js} +2 -2
- package/dist/{chunk-6QK65ZWM.js → chunk-UIY7BDZC.js} +3 -3
- package/dist/{chunk-VATYK3JQ.js → chunk-UMBFMEO7.js} +3 -3
- package/dist/{chunk-UU5FBVRX.js → chunk-UU5G7OA4.js} +2 -2
- package/dist/{chunk-EGKARC53.js → chunk-UZUCYCF4.js} +2 -2
- package/dist/{chunk-LPKJ77EK.js → chunk-V2A7G7S7.js} +2 -2
- package/dist/{chunk-CH4UQ4NO.js → chunk-V5G4TKRC.js} +5 -5
- package/dist/{chunk-UBRQ3PQD.js → chunk-VKAVW34W.js} +2 -2
- package/dist/{chunk-JV5ULONH.js → chunk-VVLEVNTQ.js} +36 -36
- package/dist/{chunk-44JWVYJB.js → chunk-VW7X7TWZ.js} +2 -2
- package/dist/{chunk-3CDJSKDW.js → chunk-VWA2CHSL.js} +3 -3
- package/dist/{chunk-IN3VQFKS.js → chunk-W43HZPM7.js} +2 -2
- package/dist/{chunk-SXGJL7UT.js → chunk-WHGD7Q2L.js} +14 -14
- package/dist/{chunk-XOIDUM2H.js → chunk-WNXKYEVN.js} +1 -1
- package/dist/{chunk-TKQL7EDB.js → chunk-WSA7UBX4.js} +2 -2
- package/dist/{chunk-AJDGP2N4.js → chunk-WZ5TQJ3T.js} +19 -19
- package/dist/{chunk-FBA2NXYH.js → chunk-X3TGNSOG.js} +3 -3
- package/dist/{chunk-R4JA5JFI.js → chunk-X4WXYI3N.js} +3 -3
- package/dist/{chunk-Q5EZNBPI.js → chunk-XIQ3AIAJ.js} +3 -3
- package/dist/{chunk-S27VZ5DO.js → chunk-XWYT4LEL.js} +6 -6
- package/dist/{chunk-477DTTMH.js → chunk-Y3PU75OC.js} +3 -3
- package/dist/{chunk-4JXPLTWV.js → chunk-Y5ZWX5YS.js} +2 -2
- package/dist/{chunk-4BWMAGJJ.js → chunk-YA5PABND.js} +3 -3
- package/dist/{chunk-VXORMNU4.js → chunk-YBHAAULA.js} +67 -2
- package/dist/chunk-YBHAAULA.js.map +1 -0
- package/dist/{chunk-OGU73VUN.js → chunk-YBPRR2QS.js} +2 -2
- package/dist/{chunk-TNSJFZ6Q.js → chunk-YDYR7XQE.js} +4 -4
- package/dist/{chunk-GTRAH4FG.js → chunk-YG6V2LQH.js} +2 -2
- package/dist/{chunk-XVLEBB4Y.js → chunk-YUXA7ALE.js} +2 -2
- package/dist/{chunk-SN2WENRP.js → chunk-YWHQDXPB.js} +3 -3
- package/dist/{chunk-BFFNINCC.js → chunk-YWRR5R7B.js} +3 -3
- package/dist/{chunk-FSDQQQIA.js → chunk-YYRK7A4N.js} +3 -3
- package/dist/{chunk-MRECRNVU.js → chunk-Z26CDLUV.js} +5 -5
- package/dist/{chunk-OYCK4JRS.js → chunk-Z27EXLMQ.js} +2 -2
- package/dist/{chunk-UTRNLNCW.js → chunk-Z7GDH7W2.js} +3 -3
- package/dist/{chunk-PRT4J2DL.js → chunk-ZGVLSAWL.js} +2 -2
- package/dist/{chunk-OK7BQMCI.js → chunk-ZM6Q5NQN.js} +9 -9
- package/dist/components/message-timeline.d.ts +10 -2
- package/dist/composer.js +8 -8
- package/dist/{computer-viewer-5LKRCEVQ.js → computer-viewer-SROXREYD.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-EIQY2VBF.js} +5 -5
- package/dist/{embedded-voice-ASQXBSTX.js → embedded-voice-LMWNH7F7.js} +5 -5
- package/dist/{fleet-decision-row-U7LDVBEM.js → fleet-decision-row-X2G56ZRA.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 +22 -21
- package/dist/meetings.js.map +1 -1
- package/dist/messages/en.d.ts +2 -0
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-E6XKMFTA.js → model-policy-picker-menu-SHWPT5VA.js} +4 -4
- package/dist/{payment-page-card-DJDKV2LW.js → payment-page-card-NNVUISN4.js} +4 -4
- package/dist/{platform-activity-row-MSDCSMET.js → platform-activity-row-7UDWSAHK.js} +2 -2
- package/dist/{queue-surface-implementation-GUAIG6TK.js → queue-surface-implementation-BUXSO24N.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{recorder-host-2MYDJPQW.js → recorder-host-POX54CFT.js} +5 -5
- package/dist/recordings.js +4 -4
- package/dist/{sandbox-files-W5W2LW4K.js → sandbox-files-33QD7DW2.js} +6 -6
- package/dist/session-app.js +156 -156
- package/dist/{session-connect-cards-HPH7JOZP.js → session-connect-cards-CXGNVA2A.js} +9 -9
- package/dist/session-list-model.js +2 -2
- package/dist/{session-realtime-SDTKFFIR.js → session-realtime-CVDSEULB.js} +3 -3
- 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-5J5TM5IP.js} +2 -2
- package/dist/{timeline-annotation-selection-MBCIDO2Q.js → timeline-annotation-selection-WLY7FB7F.js} +2 -2
- package/dist/{timeline-annotations-dialog-JPNKLOTE.js → timeline-annotations-dialog-67VRFKJU.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.js +3 -3
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +6 -5
- package/src/app/components/rail/session-row-content.tsx +27 -0
- 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/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-recordings.ts +5 -0
- package/src/index.ts +5 -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 +2 -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/dist/chunk-2OXSB2OL.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-PF2WU2IL.js.map +0 -1
- package/dist/chunk-PSM3CU7N.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-VXORMNU4.js.map +0 -1
- /package/dist/{browser-viewer-ZHQDVHZ2.js.map → browser-viewer-H7PKY67P.js.map} +0 -0
- /package/dist/{chat-interactive-block-VSDD6X3M.js.map → chat-interactive-block-47TCT4DN.js.map} +0 -0
- /package/dist/{chunk-5MHMCE2G.js.map → chunk-2X2B6D5G.js.map} +0 -0
- /package/dist/{chunk-OCXEY7HE.js.map → chunk-3BUI5DT7.js.map} +0 -0
- /package/dist/{chunk-OSJ366KR.js.map → chunk-3FWP3TD3.js.map} +0 -0
- /package/dist/{chunk-PWUSSSSL.js.map → chunk-3G5IA36N.js.map} +0 -0
- /package/dist/{chunk-RGR57NYY.js.map → chunk-3NK4JAHL.js.map} +0 -0
- /package/dist/{chunk-XUOYNJPB.js.map → chunk-3O7UZRWM.js.map} +0 -0
- /package/dist/{chunk-JV3UI7BH.js.map → chunk-3OR6HMA4.js.map} +0 -0
- /package/dist/{chunk-MV2CLIO6.js.map → chunk-3PC45I5N.js.map} +0 -0
- /package/dist/{chunk-SJYTQLN3.js.map → chunk-3PI2BYK5.js.map} +0 -0
- /package/dist/{chunk-DCEQCGVN.js.map → chunk-3PNA2P2Z.js.map} +0 -0
- /package/dist/{chunk-ESXAECZ3.js.map → chunk-3XBZKF3K.js.map} +0 -0
- /package/dist/{chunk-SBXSKRFA.js.map → chunk-45OGYO3S.js.map} +0 -0
- /package/dist/{chunk-M3FDGRB4.js.map → chunk-4A7TKVNX.js.map} +0 -0
- /package/dist/{chunk-RHXYO4H2.js.map → chunk-4BXRGXTD.js.map} +0 -0
- /package/dist/{chunk-CV4VVLPZ.js.map → chunk-4HQAJA3T.js.map} +0 -0
- /package/dist/{chunk-VCJQQYRE.js.map → chunk-4X2A3KPB.js.map} +0 -0
- /package/dist/{chunk-OCXTTKVA.js.map → chunk-555K37A7.js.map} +0 -0
- /package/dist/{chunk-EBIVTDEG.js.map → chunk-57L5ZXDS.js.map} +0 -0
- /package/dist/{chunk-3L465FBR.js.map → chunk-5IADORIV.js.map} +0 -0
- /package/dist/{chunk-PVB4YVDP.js.map → chunk-5Y2O2432.js.map} +0 -0
- /package/dist/{chunk-OOOSGPJL.js.map → chunk-6572EFE4.js.map} +0 -0
- /package/dist/{chunk-YMI27QPF.js.map → chunk-6BG5HCUP.js.map} +0 -0
- /package/dist/{chunk-QRECBCJM.js.map → chunk-6EXFJWII.js.map} +0 -0
- /package/dist/{chunk-74CBR5YE.js.map → chunk-6PNRUGOK.js.map} +0 -0
- /package/dist/{chunk-PUUEI4W3.js.map → chunk-6RJEY6TC.js.map} +0 -0
- /package/dist/{chunk-DLVIRJGK.js.map → chunk-727GL2YY.js.map} +0 -0
- /package/dist/{chunk-J2BTILRR.js.map → chunk-7FGYLFW6.js.map} +0 -0
- /package/dist/{chunk-MKDFYE2E.js.map → chunk-7IMWTFEG.js.map} +0 -0
- /package/dist/{chunk-FER6EVIY.js.map → chunk-7POKH54R.js.map} +0 -0
- /package/dist/{chunk-H6BX6WOW.js.map → chunk-7T26IH6W.js.map} +0 -0
- /package/dist/{chunk-R33SBMB7.js.map → chunk-7XQRVZZQ.js.map} +0 -0
- /package/dist/{chunk-NFCS5WYC.js.map → chunk-A3SPPXMC.js.map} +0 -0
- /package/dist/{chunk-DQPIEQGP.js.map → chunk-A7CWPDEH.js.map} +0 -0
- /package/dist/{chunk-3PM3M2Q6.js.map → chunk-AGOYVKTI.js.map} +0 -0
- /package/dist/{chunk-OBGOLHCP.js.map → chunk-AIQKZUPB.js.map} +0 -0
- /package/dist/{chunk-GSCGKJNK.js.map → chunk-AMYDHG3S.js.map} +0 -0
- /package/dist/{chunk-U4LTPFD2.js.map → chunk-APJPB6TX.js.map} +0 -0
- /package/dist/{chunk-SP44O3OU.js.map → chunk-APLGT5EI.js.map} +0 -0
- /package/dist/{chunk-M3HGBO2Y.js.map → chunk-ATNKMGLO.js.map} +0 -0
- /package/dist/{chunk-4O2XWOLZ.js.map → chunk-AVX4CZQ3.js.map} +0 -0
- /package/dist/{chunk-CXAN2FHF.js.map → chunk-B46MK44K.js.map} +0 -0
- /package/dist/{chunk-RMCLFSMX.js.map → chunk-BBKUPEGG.js.map} +0 -0
- /package/dist/{chunk-J2WY42FA.js.map → chunk-BES6OQE3.js.map} +0 -0
- /package/dist/{chunk-GU7T2S5N.js.map → chunk-BM2N26SH.js.map} +0 -0
- /package/dist/{chunk-HEGV4QMS.js.map → chunk-C3NS74PZ.js.map} +0 -0
- /package/dist/{chunk-752WXSDN.js.map → chunk-C56ABB5V.js.map} +0 -0
- /package/dist/{chunk-77SYIH6O.js.map → chunk-C6MATJQ5.js.map} +0 -0
- /package/dist/{chunk-KUE5BOQE.js.map → chunk-CRX47CO6.js.map} +0 -0
- /package/dist/{chunk-GTHCHCWW.js.map → chunk-D33KWZQJ.js.map} +0 -0
- /package/dist/{chunk-AH3DGOTK.js.map → chunk-D7E3BSCX.js.map} +0 -0
- /package/dist/{chunk-OJWDNNW3.js.map → chunk-DFR3TMTZ.js.map} +0 -0
- /package/dist/{chunk-WYGTAQMX.js.map → chunk-DICC75CU.js.map} +0 -0
- /package/dist/{chunk-736RUNIA.js.map → chunk-DJ2LMKKX.js.map} +0 -0
- /package/dist/{chunk-4F3AEJI6.js.map → chunk-DJI4D7PM.js.map} +0 -0
- /package/dist/{chunk-LVELUUK6.js.map → chunk-DSZUQL4W.js.map} +0 -0
- /package/dist/{chunk-MT2R57SF.js.map → chunk-DVF246BE.js.map} +0 -0
- /package/dist/{chunk-OI6VI6SU.js.map → chunk-DVOWBHWN.js.map} +0 -0
- /package/dist/{chunk-PZKHST7A.js.map → chunk-E2KPRSA4.js.map} +0 -0
- /package/dist/{chunk-EKJHOWTZ.js.map → chunk-E3LMLWEB.js.map} +0 -0
- /package/dist/{chunk-QURYQFDN.js.map → chunk-EDC7X7PW.js.map} +0 -0
- /package/dist/{chunk-HYEIA25Y.js.map → chunk-EDSMULHU.js.map} +0 -0
- /package/dist/{chunk-U6552Q3T.js.map → chunk-EQQOZ6DD.js.map} +0 -0
- /package/dist/{chunk-IFSXVU2S.js.map → chunk-ERBDQ2GY.js.map} +0 -0
- /package/dist/{chunk-IZXYFWA4.js.map → chunk-EWI73URG.js.map} +0 -0
- /package/dist/{chunk-N3FM4BNA.js.map → chunk-EZ6LFN33.js.map} +0 -0
- /package/dist/{chunk-4K64EKM7.js.map → chunk-F7YL6DPR.js.map} +0 -0
- /package/dist/{chunk-ICAMYP5M.js.map → chunk-FIGFXMUP.js.map} +0 -0
- /package/dist/{chunk-54U6ZBEX.js.map → chunk-FJRJK67G.js.map} +0 -0
- /package/dist/{chunk-E5KOWRDU.js.map → chunk-FLHB2NZT.js.map} +0 -0
- /package/dist/{chunk-D3PTVN2I.js.map → chunk-FUGGM76A.js.map} +0 -0
- /package/dist/{chunk-TDTD66BK.js.map → chunk-FXPZAZYT.js.map} +0 -0
- /package/dist/{chunk-KO3OHHY2.js.map → chunk-GAGAM4MT.js.map} +0 -0
- /package/dist/{chunk-TK5FWVZR.js.map → chunk-GESGH3HY.js.map} +0 -0
- /package/dist/{chunk-2VJOSU4H.js.map → chunk-GI4PWKXI.js.map} +0 -0
- /package/dist/{chunk-KFNZZ2N6.js.map → chunk-GJTEBAZ7.js.map} +0 -0
- /package/dist/{chunk-LTJFV2JI.js.map → chunk-GNCGEW7F.js.map} +0 -0
- /package/dist/{chunk-34NV52R3.js.map → chunk-GOMUNPB6.js.map} +0 -0
- /package/dist/{chunk-LIJNVIT3.js.map → chunk-GUMUILEI.js.map} +0 -0
- /package/dist/{chunk-7NLF35YL.js.map → chunk-GVGNHBFT.js.map} +0 -0
- /package/dist/{chunk-K3D7IQQP.js.map → chunk-GW4YI3FB.js.map} +0 -0
- /package/dist/{chunk-D5TIVCXG.js.map → chunk-GXKCV7X7.js.map} +0 -0
- /package/dist/{chunk-2J77TWGH.js.map → chunk-H467EQA6.js.map} +0 -0
- /package/dist/{chunk-3OK7Y6ES.js.map → chunk-HE77VDDR.js.map} +0 -0
- /package/dist/{chunk-UO35OEOX.js.map → chunk-HT65RGCX.js.map} +0 -0
- /package/dist/{chunk-G6ICCGJ3.js.map → chunk-HVQSFTE7.js.map} +0 -0
- /package/dist/{chunk-G5UQBTXY.js.map → chunk-HXJPDC76.js.map} +0 -0
- /package/dist/{chunk-GIWFLWXG.js.map → chunk-I6LQW24C.js.map} +0 -0
- /package/dist/{chunk-467WDSOK.js.map → chunk-I7A6S5YL.js.map} +0 -0
- /package/dist/{chunk-AAS7OWV6.js.map → chunk-IADS4ZYD.js.map} +0 -0
- /package/dist/{chunk-Y3XZEKDQ.js.map → chunk-IJWMWCGR.js.map} +0 -0
- /package/dist/{chunk-SGH7I7OY.js.map → chunk-IWFO6KOU.js.map} +0 -0
- /package/dist/{chunk-GMHIOYB7.js.map → chunk-IYC6QGV2.js.map} +0 -0
- /package/dist/{chunk-3NNAC43A.js.map → chunk-J5AODKJO.js.map} +0 -0
- /package/dist/{chunk-DIP7YALH.js.map → chunk-JKI3LMLH.js.map} +0 -0
- /package/dist/{chunk-IJR6VOLU.js.map → chunk-JSYRWOCE.js.map} +0 -0
- /package/dist/{chunk-CEMSIU4Z.js.map → chunk-JTQTWO4D.js.map} +0 -0
- /package/dist/{chunk-BASI553K.js.map → chunk-KBTKAAHM.js.map} +0 -0
- /package/dist/{chunk-OYOFPNLC.js.map → chunk-KD7VEMWY.js.map} +0 -0
- /package/dist/{chunk-3DRLCX5V.js.map → chunk-KPGFGRSA.js.map} +0 -0
- /package/dist/{chunk-PLYVGZIN.js.map → chunk-KWFDEJFI.js.map} +0 -0
- /package/dist/{chunk-FNXCFIPW.js.map → chunk-KYLEH4OF.js.map} +0 -0
- /package/dist/{chunk-WXF2RTS4.js.map → chunk-L7FJTFJN.js.map} +0 -0
- /package/dist/{chunk-KI46GKMD.js.map → chunk-L7VVQOSY.js.map} +0 -0
- /package/dist/{chunk-O2UPPN5M.js.map → chunk-LKLQVANM.js.map} +0 -0
- /package/dist/{chunk-YNTLWCF4.js.map → chunk-LLYEAZ4E.js.map} +0 -0
- /package/dist/{chunk-4Z5X7PLC.js.map → chunk-LWM7JUW6.js.map} +0 -0
- /package/dist/{chunk-CHU3RDV4.js.map → chunk-LXKV4ND3.js.map} +0 -0
- /package/dist/{chunk-AB5IW227.js.map → chunk-LYLICEQO.js.map} +0 -0
- /package/dist/{chunk-OTW25A6I.js.map → chunk-M5GRI5K4.js.map} +0 -0
- /package/dist/{chunk-X2QJXDE4.js.map → chunk-MF65PKKF.js.map} +0 -0
- /package/dist/{chunk-EDDKPIIV.js.map → chunk-MJ4XIOPM.js.map} +0 -0
- /package/dist/{chunk-FLWQJDJ5.js.map → chunk-MMPJJQG3.js.map} +0 -0
- /package/dist/{chunk-T67LTMSW.js.map → chunk-MOU54FGD.js.map} +0 -0
- /package/dist/{chunk-LQKVNREV.js.map → chunk-NAWHQ4IL.js.map} +0 -0
- /package/dist/{chunk-ZBHGNE2J.js.map → chunk-NBHBB2VV.js.map} +0 -0
- /package/dist/{chunk-U5UGM5XD.js.map → chunk-NMOZDAEZ.js.map} +0 -0
- /package/dist/{chunk-D74Z2N4K.js.map → chunk-NZA4R3BE.js.map} +0 -0
- /package/dist/{chunk-WRMUXZ7C.js.map → chunk-OB2CX7PJ.js.map} +0 -0
- /package/dist/{chunk-YJSCLGAW.js.map → chunk-OB4I4OIT.js.map} +0 -0
- /package/dist/{chunk-DWJ6J3YW.js.map → chunk-OKQW2FPL.js.map} +0 -0
- /package/dist/{chunk-2GCHGWNE.js.map → chunk-ORLX6A3C.js.map} +0 -0
- /package/dist/{chunk-EBTUPRRQ.js.map → chunk-P5N4EYFW.js.map} +0 -0
- /package/dist/{chunk-JKL5S7UQ.js.map → chunk-PL4JE3NI.js.map} +0 -0
- /package/dist/{chunk-OP2GD6QW.js.map → chunk-PNUHKDY2.js.map} +0 -0
- /package/dist/{chunk-MZY3VKKM.js.map → chunk-PWJE7D6V.js.map} +0 -0
- /package/dist/{chunk-RISUROBM.js.map → chunk-PYE27I6J.js.map} +0 -0
- /package/dist/{chunk-R5QAL43H.js.map → chunk-QIJHK6P4.js.map} +0 -0
- /package/dist/{chunk-AJBDAVX3.js.map → chunk-QK3A23NP.js.map} +0 -0
- /package/dist/{chunk-CYDXCILL.js.map → chunk-QLWDNAOV.js.map} +0 -0
- /package/dist/{chunk-BQYRZIZ7.js.map → chunk-QS6DQBVJ.js.map} +0 -0
- /package/dist/{chunk-3PZ3LRPV.js.map → chunk-QSUVFPG3.js.map} +0 -0
- /package/dist/{chunk-PYB4BFEC.js.map → chunk-QUC5MLTN.js.map} +0 -0
- /package/dist/{chunk-WDASYY4S.js.map → chunk-QVT5AWPI.js.map} +0 -0
- /package/dist/{chunk-K4DQS2ML.js.map → chunk-QZC6WCBR.js.map} +0 -0
- /package/dist/{chunk-HWVPLFIW.js.map → chunk-RAHNICPP.js.map} +0 -0
- /package/dist/{chunk-H6MJFMHZ.js.map → chunk-RME6RGIW.js.map} +0 -0
- /package/dist/{chunk-XMBOLFFS.js.map → chunk-RQIB2F53.js.map} +0 -0
- /package/dist/{chunk-OXQ2SXVC.js.map → chunk-RUA72NQY.js.map} +0 -0
- /package/dist/{chunk-UMX6DZME.js.map → chunk-SCJHWN4X.js.map} +0 -0
- /package/dist/{chunk-HTMQGS63.js.map → chunk-SIXBDT5F.js.map} +0 -0
- /package/dist/{chunk-ZAX4XQLN.js.map → chunk-SPK3T4JK.js.map} +0 -0
- /package/dist/{chunk-WTSQUCHB.js.map → chunk-SSN2YSST.js.map} +0 -0
- /package/dist/{chunk-5MIBQ4P5.js.map → chunk-SYJCDX5V.js.map} +0 -0
- /package/dist/{chunk-ZR5EKJT6.js.map → chunk-T6276OXI.js.map} +0 -0
- /package/dist/{chunk-DEHLWZSI.js.map → chunk-T7OARG4N.js.map} +0 -0
- /package/dist/{chunk-77BHKC43.js.map → chunk-TF5L3BEV.js.map} +0 -0
- /package/dist/{chunk-GOCODNQS.js.map → chunk-TF6Z7BOP.js.map} +0 -0
- /package/dist/{chunk-WIFDNUKD.js.map → chunk-TJDXWZMO.js.map} +0 -0
- /package/dist/{chunk-SFIXTOOJ.js.map → chunk-TL5ATBHZ.js.map} +0 -0
- /package/dist/{chunk-XZCCEKPW.js.map → chunk-TMOHIOMT.js.map} +0 -0
- /package/dist/{chunk-AVXDIRRW.js.map → chunk-UI5X63YC.js.map} +0 -0
- /package/dist/{chunk-6QK65ZWM.js.map → chunk-UIY7BDZC.js.map} +0 -0
- /package/dist/{chunk-VATYK3JQ.js.map → chunk-UMBFMEO7.js.map} +0 -0
- /package/dist/{chunk-UU5FBVRX.js.map → chunk-UU5G7OA4.js.map} +0 -0
- /package/dist/{chunk-EGKARC53.js.map → chunk-UZUCYCF4.js.map} +0 -0
- /package/dist/{chunk-LPKJ77EK.js.map → chunk-V2A7G7S7.js.map} +0 -0
- /package/dist/{chunk-CH4UQ4NO.js.map → chunk-V5G4TKRC.js.map} +0 -0
- /package/dist/{chunk-UBRQ3PQD.js.map → chunk-VKAVW34W.js.map} +0 -0
- /package/dist/{chunk-JV5ULONH.js.map → chunk-VVLEVNTQ.js.map} +0 -0
- /package/dist/{chunk-44JWVYJB.js.map → chunk-VW7X7TWZ.js.map} +0 -0
- /package/dist/{chunk-3CDJSKDW.js.map → chunk-VWA2CHSL.js.map} +0 -0
- /package/dist/{chunk-IN3VQFKS.js.map → chunk-W43HZPM7.js.map} +0 -0
- /package/dist/{chunk-SXGJL7UT.js.map → chunk-WHGD7Q2L.js.map} +0 -0
- /package/dist/{chunk-XOIDUM2H.js.map → chunk-WNXKYEVN.js.map} +0 -0
- /package/dist/{chunk-TKQL7EDB.js.map → chunk-WSA7UBX4.js.map} +0 -0
- /package/dist/{chunk-AJDGP2N4.js.map → chunk-WZ5TQJ3T.js.map} +0 -0
- /package/dist/{chunk-FBA2NXYH.js.map → chunk-X3TGNSOG.js.map} +0 -0
- /package/dist/{chunk-R4JA5JFI.js.map → chunk-X4WXYI3N.js.map} +0 -0
- /package/dist/{chunk-Q5EZNBPI.js.map → chunk-XIQ3AIAJ.js.map} +0 -0
- /package/dist/{chunk-S27VZ5DO.js.map → chunk-XWYT4LEL.js.map} +0 -0
- /package/dist/{chunk-477DTTMH.js.map → chunk-Y3PU75OC.js.map} +0 -0
- /package/dist/{chunk-4JXPLTWV.js.map → chunk-Y5ZWX5YS.js.map} +0 -0
- /package/dist/{chunk-4BWMAGJJ.js.map → chunk-YA5PABND.js.map} +0 -0
- /package/dist/{chunk-OGU73VUN.js.map → chunk-YBPRR2QS.js.map} +0 -0
- /package/dist/{chunk-TNSJFZ6Q.js.map → chunk-YDYR7XQE.js.map} +0 -0
- /package/dist/{chunk-GTRAH4FG.js.map → chunk-YG6V2LQH.js.map} +0 -0
- /package/dist/{chunk-XVLEBB4Y.js.map → chunk-YUXA7ALE.js.map} +0 -0
- /package/dist/{chunk-SN2WENRP.js.map → chunk-YWHQDXPB.js.map} +0 -0
- /package/dist/{chunk-BFFNINCC.js.map → chunk-YWRR5R7B.js.map} +0 -0
- /package/dist/{chunk-FSDQQQIA.js.map → chunk-YYRK7A4N.js.map} +0 -0
- /package/dist/{chunk-MRECRNVU.js.map → chunk-Z26CDLUV.js.map} +0 -0
- /package/dist/{chunk-OYCK4JRS.js.map → chunk-Z27EXLMQ.js.map} +0 -0
- /package/dist/{chunk-UTRNLNCW.js.map → chunk-Z7GDH7W2.js.map} +0 -0
- /package/dist/{chunk-PRT4J2DL.js.map → chunk-ZGVLSAWL.js.map} +0 -0
- /package/dist/{chunk-OK7BQMCI.js.map → chunk-ZM6Q5NQN.js.map} +0 -0
- /package/dist/{computer-viewer-5LKRCEVQ.js.map → computer-viewer-SROXREYD.js.map} +0 -0
- /package/dist/{embedded-new-voice-GHJRY3YL.js.map → embedded-new-voice-EIQY2VBF.js.map} +0 -0
- /package/dist/{embedded-voice-ASQXBSTX.js.map → embedded-voice-LMWNH7F7.js.map} +0 -0
- /package/dist/{fleet-decision-row-U7LDVBEM.js.map → fleet-decision-row-X2G56ZRA.js.map} +0 -0
- /package/dist/{latest-question-RNVF262Q.js.map → latest-question-KA7AQYVI.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-E6XKMFTA.js.map → model-policy-picker-menu-SHWPT5VA.js.map} +0 -0
- /package/dist/{payment-page-card-DJDKV2LW.js.map → payment-page-card-NNVUISN4.js.map} +0 -0
- /package/dist/{platform-activity-row-MSDCSMET.js.map → platform-activity-row-7UDWSAHK.js.map} +0 -0
- /package/dist/{queue-surface-implementation-GUAIG6TK.js.map → queue-surface-implementation-BUXSO24N.js.map} +0 -0
- /package/dist/{recorder-host-2MYDJPQW.js.map → recorder-host-POX54CFT.js.map} +0 -0
- /package/dist/{sandbox-files-W5W2LW4K.js.map → sandbox-files-33QD7DW2.js.map} +0 -0
- /package/dist/{session-connect-cards-HPH7JOZP.js.map → session-connect-cards-CXGNVA2A.js.map} +0 -0
- /package/dist/{session-realtime-SDTKFFIR.js.map → session-realtime-CVDSEULB.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-FNILLWNU.js.map → timeline-annotation-markers-5J5TM5IP.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-MBCIDO2Q.js.map → timeline-annotation-selection-WLY7FB7F.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-JPNKLOTE.js.map → timeline-annotations-dialog-67VRFKJU.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-recordings.ts"],"sourcesContent":["import type {\n CreateRecordingPersonRequest,\n ListRecordingModelsResponse,\n Recording,\n RecordingCreateTitleSource,\n RecordingLiveSegment,\n RecordingNote,\n RecordingNoteKind,\n RecordingPerson,\n RecordingVoiceprintConsent,\n RecordingSpeaker,\n RecordingTranscriptionRequest,\n RecordingTranscriptPage,\n RecordingTranscriptSegment,\n RecordingTranscriptVersion,\n RecordingVisibility,\n UpdateRecordingRequest,\n} from \"@opengeni/contracts\";\nimport {\n browserRecorderPlatform,\n OpenGeniRecordingsClient,\n RecordingUploader,\n type Recorder,\n type RecorderPlatform,\n type RecorderSnapshot,\n type RecordingChunkStore,\n type RecordingUploadStatus,\n type SystemAudioKind,\n type RecordingTransport,\n type OpenGeniRecordingsTransport,\n uploadRecordingAudio,\n} from \"@opengeni/sdk/recordings\";\nimport { useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { OpenGeniContext } from \"../session-context\";\nimport { usePolledValue } from \"./internal\";\n\nconst PROCESSING_POLL_MS = 3_000;\n// A meeting recorded on another device changes little until it ends, so pages\n// showing it read it less often, only to notice when the capture finishes.\nconst CAPTURING_POLL_MS = 10_000;\n\n/**\n * Client surface of the recording hooks, as `OpenGeniRecordingsClient` provides\n * it. Each hook checks only the methods it calls, so a host proxy can expose a subset.\n */\nexport type RecordingsClientLike = Pick<\n OpenGeniRecordingsClient,\n | \"listRecordings\"\n | \"createRecording\"\n | \"getRecording\"\n | \"updateRecording\"\n | \"deleteRecording\"\n | \"createRecordingUploads\"\n | \"completeRecordingChunks\"\n | \"finalizeRecording\"\n | \"listRecordingTranscriptVersions\"\n | \"createRecordingTranscript\"\n | \"getRecordingTranscript\"\n | \"setCurrentRecordingTranscript\"\n | \"updateRecordingSpeakers\"\n | \"updateRecordingSegments\"\n | \"getRecordingTrackAudio\"\n | \"listRecordingPeople\"\n | \"createRecordingPerson\"\n | \"rememberRecordingPersonVoice\"\n | \"forgetRecordingPersonVoice\"\n | \"listRecordingModels\"\n | \"createRecordingLiveSession\"\n | \"appendRecordingLiveSegments\"\n | \"listRecordingLiveSegments\"\n | \"listRecordingNotes\"\n | \"saveRecordingNote\"\n>;\n\n/** Refresh every `intervalMs` while `active`, without an extra read when it turns on. */\nfunction useRefreshWhile(\n active: boolean,\n refresh: () => Promise<void>,\n intervalMs: number = PROCESSING_POLL_MS,\n): void {\n const refreshRef = useRef(refresh);\n refreshRef.current = refresh;\n useEffect(() => {\n if (!active) return;\n let cancelled = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const tick = () => {\n timer = setTimeout(() => {\n void refreshRef.current().finally(() => {\n if (!cancelled) tick();\n });\n }, intervalMs);\n };\n tick();\n return () => {\n cancelled = true;\n if (timer) clearTimeout(timer);\n };\n }, [active, intervalMs]);\n}\n\nexport type RecordingsClientOverride = {\n /** A recordings client, such as a host proxy. Built from the provider's client otherwise. */\n recordings?: Partial<RecordingsClientLike> | undefined;\n /** A client exposing `requestJson` (the SDK client) to build the recordings client from. */\n client?: object | undefined;\n workspaceId?: string | undefined;\n};\n\nconst recordingClients = new WeakMap<object, OpenGeniRecordingsClient>();\n\n/**\n * Resolve the recording methods one hook calls: the explicit `recordings`\n * client, else an `OpenGeniRecordingsClient` over the provider's SDK client.\n */\nfunction useEmbeddedRecordings(\n override: RecordingsClientOverride,\n requiredMethods: readonly (keyof RecordingsClientLike)[],\n hookName: string,\n): { client: RecordingsClientLike; workspaceId: string } {\n const context = useContext(OpenGeniContext);\n const workspaceId = override.workspaceId ?? context?.workspaceId;\n let candidate: object | undefined = override.recordings;\n if (!candidate) {\n const base = (override.client ?? context?.client) as\n | Partial<OpenGeniRecordingsTransport>\n | undefined;\n if (base && typeof base.requestJson === \"function\") {\n candidate = recordingClients.get(base);\n if (!candidate) {\n const created = new OpenGeniRecordingsClient(base as OpenGeniRecordingsTransport);\n recordingClients.set(base, created);\n candidate = created;\n }\n }\n }\n if (!candidate || !workspaceId) {\n throw new Error(\n `@opengeni/react: ${hookName} needs a recordings client and workspace. Wrap the tree in <OpenGeniProvider> with the SDK client, or pass { recordings, workspaceId }.`,\n );\n }\n const methods = candidate as Record<string, unknown>;\n const missing = requiredMethods.filter((method) => typeof methods[method] !== \"function\");\n if (missing.length > 0) {\n throw new Error(\n `@opengeni/react: ${hookName} requires recordings client method${missing.length === 1 ? \"\" : \"s\"} ${missing.join(\", \")}.`,\n );\n }\n return { client: candidate as RecordingsClientLike, workspaceId };\n}\n\n/**\n * The recordings client the hooks use, for calls no hook wraps (deleting from\n * a list, reading track audio): the explicit `recordings` client, else one\n * built over the provider's SDK client.\n */\nexport function useRecordingsClient(options: RecordingsClientOverride = {}): {\n client: RecordingsClientLike;\n workspaceId: string;\n} {\n return useEmbeddedRecordings(options, [], \"useRecordingsClient\");\n}\n\n// --- Capture -------------------------------------------------------------------\n\nexport type UseRecorderOptions = RecordingsClientOverride & {\n /** Leave it out unless the person gave one; Opengeni then names the meeting. */\n title?: string;\n /** `app` when `title` is your app's guess, such as \"Zoom meeting\", for Opengeni to replace. */\n titleSource?: RecordingCreateTitleSource;\n visibility?: RecordingVisibility;\n /** Your own id for what this recording belongs to, to find it again with `useRecordings`. */\n externalRef?: string;\n metadata?: Record<string, unknown>;\n transcription?: RecordingTranscriptionRequest;\n /**\n * The person recording's name, as your app knows it: their microphone's\n * name in the transcript when computer or tab audio is recorded beside it\n * and Opengeni has no name for them.\n */\n ownerName?: string;\n /** Microphone constraints; false records no microphone. Default: on. */\n microphone?: boolean | MediaTrackConstraints;\n /** Also record shared tab or system audio as its own track (Chromium). Default: off. */\n systemAudio?: boolean;\n timesliceMilliseconds?: number;\n keepAwake?: boolean;\n /**\n * Also show a live transcript while recording, in `live`: each track is\n * streamed to the workspace's live speech model as it is captured, which\n * the provider bills for. A preview only. Default: off.\n */\n liveTranscript?: boolean;\n /**\n * Where capture runs. Default: the browser (MediaRecorder and IndexedDB).\n * React Native passes `useNativeRecorderPlatform()` from `@opengeni/react-native/recordings`.\n */\n platform?: RecorderPlatform;\n /** Local storage for chunks not uploaded yet. Default: the platform's (IndexedDB in browsers). */\n store?: RecordingChunkStore;\n /** Finish recordings an earlier page left behind when the hook mounts. Default: on. */\n resumePending?: boolean;\n /** Called once the server has every chunk of a recording and transcription has started. */\n onFinished?: (recordingId: string) => void;\n};\n\nexport type UseRecorderResult = RecorderSnapshot & {\n /** This browser can record audio at all. */\n supported: boolean;\n /** This browser can share a tab's or the system's audio. */\n systemAudioSupported: boolean;\n /**\n * How: `desktop` records other apps' audio directly (inside a desktop app);\n * `display` asks the browser to share a tab or screen. Null when it can't.\n */\n systemAudioKind: SystemAudioKind | null;\n /**\n * Recordings from an earlier page or app run this hook is still finishing in\n * the background. Each leaves the list once it is uploaded, removed for having\n * no audio, or failed for good.\n */\n recovered: string[];\n /**\n * The upload of every recording this device holds audio for, by recording\n * id: the current one and those finished in the background, including one\n * that failed and keeps its audio here until it is tried again.\n */\n uploads: Readonly<Record<string, RecordingUploadStatus>>;\n /** Upload a failed recording again from the audio kept here. False when none failed. */\n retryUpload: (recordingId: string) => boolean;\n /** Start a new recording; per-recording options override the hook's. */\n start: (\n overrides?: Pick<\n UseRecorderOptions,\n | \"title\"\n | \"titleSource\"\n | \"systemAudio\"\n | \"microphone\"\n | \"visibility\"\n | \"liveTranscript\"\n | \"transcription\"\n | \"externalRef\"\n | \"metadata\"\n | \"ownerName\"\n >,\n ) => Promise<void>;\n pause: () => void;\n resume: () => void;\n stop: () => Promise<void>;\n discard: () => Promise<void>;\n /** Rename the recording being made; the title reaches the server with the upload. */\n rename: (title: string) => Promise<void>;\n /** Input level per track number, 0 to 1. Read it from an animation frame for a meter. */\n levels: () => Record<number, number>;\n /**\n * Make a meeting from audio recorded somewhere else, such as a phone's call\n * recording or a voice memo. It goes the way a capture does: saved on this\n * device first, then uploaded in the background and transcribed, and it\n * shows in `uploads` while it uploads. Resolves with the new recording's id\n * once the audio is saved here; a capture under way is not affected.\n */\n importAudio: (input: ImportRecordingAudioInput) => Promise<string>;\n};\n\nexport type ImportRecordingAudioInput = {\n /** One audio file: M4A (MP4), WebM, Ogg or ADTS AAC. */\n audio: Blob;\n /** Its type; the blob's own type by default. */\n mimeType?: string;\n /** The meeting's name. Opengeni names it when omitted. */\n title?: string;\n /** `app` when `title` is a guess, such as the file's name, for Opengeni to replace. */\n titleSource?: RecordingCreateTitleSource;\n /**\n * When it was recorded, if known. By default the date an M4A file states,\n * otherwise it ended just now.\n */\n startedAt?: Date;\n /** How long it plays. Read from an M4A file when omitted. */\n durationMilliseconds?: number;\n /** Recorded with this id (a project, a customer). The hook's `externalRef` otherwise. */\n externalRef?: string;\n};\n\nconst IDLE_SNAPSHOT: RecorderSnapshot = {\n state: \"idle\",\n recordingId: null,\n elapsedMilliseconds: 0,\n tracks: [],\n upload: null,\n error: null,\n};\n\n/**\n * Record a meeting in the browser. Audio is saved locally every few seconds\n * and uploaded in the background, so a reload or a lost connection loses\n * nothing. Unmounting while recording stops capture (the microphone is\n * released) and finishes the upload in the background; keep the hook in a\n * component that outlives page navigation to record across it.\n */\nexport function useRecorder(options: UseRecorderOptions = {}): UseRecorderResult {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\n \"createRecording\",\n \"createRecordingUploads\",\n \"completeRecordingChunks\",\n \"finalizeRecording\",\n \"deleteRecording\",\n ],\n \"useRecorder\",\n );\n const optionsRef = useRef(options);\n optionsRef.current = options;\n // The uploader outlives client changes (a sign-in token that loads late or is\n // refreshed, a switched account), so it calls through to the latest client\n // instead of keeping the one it was created with.\n const clientRef = useRef(client);\n clientRef.current = client;\n const transport = useMemo<RecordingTransport>(() => {\n const methods = clientRef.current as Partial<RecordingsClientLike>;\n return {\n createRecording: (...args) => clientRef.current.createRecording(...args),\n createRecordingUploads: (...args) => clientRef.current.createRecordingUploads(...args),\n completeRecordingChunks: (...args) => clientRef.current.completeRecordingChunks(...args),\n finalizeRecording: (...args) => clientRef.current.finalizeRecording(...args),\n deleteRecording: (...args) => clientRef.current.deleteRecording(...args),\n ...(typeof methods.updateRecording === \"function\"\n ? {\n updateRecording: (...args) => clientRef.current.updateRecording(...args),\n }\n : {}),\n // Only a client that has the live calls can show a live transcript.\n ...(typeof methods.createRecordingLiveSession === \"function\" &&\n typeof methods.appendRecordingLiveSegments === \"function\"\n ? {\n createRecordingLiveSession: (...args) =>\n clientRef.current.createRecordingLiveSession(...args),\n appendRecordingLiveSegments: (...args) =>\n clientRef.current.appendRecordingLiveSegments(...args),\n }\n : {}),\n };\n }, []);\n const [snapshot, setSnapshot] = useState<RecorderSnapshot>(IDLE_SNAPSHOT);\n const [recovered, setRecovered] = useState<string[]>([]);\n const [uploads, setUploads] = useState<Readonly<Record<string, RecordingUploadStatus>>>({});\n const recorderRef = useRef<Recorder | null>(null);\n const uploaderRef = useRef<RecordingUploader | null>(null);\n const defaultPlatform = useMemo(() => browserRecorderPlatform(), []);\n const platform = options.platform ?? defaultPlatform;\n const platformRef = useRef(platform);\n platformRef.current = platform;\n const support = {\n supported: platform.supported,\n systemAudio: platform.systemAudioSupported,\n systemAudioKind:\n platform.systemAudioKind ?? (platform.systemAudioSupported ? (\"display\" as const) : null),\n };\n const storeRef = useRef<RecordingChunkStore | null>(null);\n const store = useCallback(\n (): RecordingChunkStore =>\n optionsRef.current.store ?? (storeRef.current ??= platformRef.current.createStore()),\n [],\n );\n\n const uploader = useCallback((): RecordingUploader => {\n if (!uploaderRef.current) {\n const isCaptureActive = platformRef.current.isCaptureActive;\n const platformFetch = platformRef.current.fetch;\n uploaderRef.current = new RecordingUploader({\n client: transport,\n store: store(),\n ...(platformFetch ? { fetch: platformFetch } : {}),\n ...(isCaptureActive ? { isCaptureActive: (id: string) => isCaptureActive(id) } : {}),\n onStatus: (status) => {\n if (status.finalized) optionsRef.current.onFinished?.(status.recordingId);\n setUploads((previous) => ({\n ...previous,\n [status.recordingId]: status,\n }));\n if (status.finalized || status.discarded || status.failed) {\n setRecovered((previous) =>\n previous.includes(status.recordingId)\n ? previous.filter((id) => id !== status.recordingId)\n : previous,\n );\n }\n },\n });\n }\n return uploaderRef.current;\n }, [transport, store]);\n\n useEffect(() => {\n if (!support.supported || optionsRef.current.resumePending === false) return;\n let cancelled = false;\n void (async () => {\n // Save what a capture cut short left half-written, then finish everything.\n await platformRef.current.recover?.(store()).catch(() => undefined);\n // Dictations are the composer's to finish; this hook finishes the rest.\n return await uploader().resume({\n only: (recording) => recording.create.purpose !== \"dictation\",\n });\n })()\n .then((ids) => {\n if (cancelled) return;\n // Some may already be done by now: keep only those still in flight.\n const open = ids.filter((id) => {\n const status = uploader().status(id);\n return !(status?.finalized || status?.discarded || status?.failed);\n });\n if (open.length > 0) setRecovered(open);\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [support.supported, uploader, store]);\n\n useEffect(\n () => () => {\n const recorder = recorderRef.current;\n if (\n recorder &&\n (recorder.snapshot.state === \"recording\" || recorder.snapshot.state === \"paused\")\n ) {\n void recorder.stop().catch(() => undefined);\n }\n },\n [],\n );\n\n const start = useCallback<UseRecorderResult[\"start\"]>(\n async (overrides = {}) => {\n const current = recorderRef.current?.snapshot.state;\n if (\n current === \"starting\" ||\n current === \"recording\" ||\n current === \"paused\" ||\n current === \"stopping\"\n ) {\n return;\n }\n const merged = {\n ...optionsRef.current,\n ...overrides,\n // A title given at start is the person's unless the start says otherwise.\n ...(overrides.title !== undefined && overrides.titleSource === undefined\n ? { titleSource: undefined }\n : {}),\n // A start can set one transcription option, such as the language, and\n // keep the rest the hook was given.\n ...(overrides.transcription\n ? {\n transcription: {\n ...optionsRef.current.transcription,\n ...overrides.transcription,\n },\n }\n : {}),\n };\n // Earlier recorders stay subscribed to the shared uploader for their own\n // recording; only the current one may change what the hook shows.\n let recorder: Recorder | null = null;\n recorder = platformRef.current.createRecorder({\n client: transport,\n workspaceId,\n store: store(),\n uploader: uploader(),\n ...(merged.title ? { title: merged.title } : {}),\n ...(merged.title && merged.titleSource ? { titleSource: merged.titleSource } : {}),\n ...(merged.visibility ? { visibility: merged.visibility } : {}),\n ...(merged.externalRef ? { externalRef: merged.externalRef } : {}),\n ...(merged.metadata ? { metadata: merged.metadata as never } : {}),\n ...(merged.transcription ? { transcription: merged.transcription } : {}),\n ...(merged.ownerName?.trim() ? { ownerName: merged.ownerName } : {}),\n ...(merged.microphone !== undefined ? { microphone: merged.microphone } : {}),\n ...(merged.systemAudio !== undefined ? { systemAudio: merged.systemAudio } : {}),\n ...(merged.timesliceMilliseconds\n ? { timesliceMilliseconds: merged.timesliceMilliseconds }\n : {}),\n ...(merged.keepAwake !== undefined ? { keepAwake: merged.keepAwake } : {}),\n ...(merged.liveTranscript ? { liveTranscript: true } : {}),\n onChange: (next) => {\n if (recorderRef.current === recorder) setSnapshot(next);\n },\n });\n recorderRef.current = recorder;\n await recorder.start();\n },\n [transport, workspaceId, store, uploader],\n );\n\n return {\n ...snapshot,\n supported: support.supported,\n systemAudioSupported: support.systemAudio,\n systemAudioKind: support.systemAudioKind,\n recovered,\n uploads,\n retryUpload: useCallback((recordingId: string) => {\n const retried = uploaderRef.current?.retry(recordingId) ?? false;\n if (retried) {\n setRecovered((previous) =>\n previous.includes(recordingId) ? previous : [...previous, recordingId],\n );\n }\n return retried;\n }, []),\n start,\n pause: useCallback(() => recorderRef.current?.pause(), []),\n resume: useCallback(() => recorderRef.current?.resume(), []),\n stop: useCallback(async () => {\n await recorderRef.current?.stop();\n }, []),\n discard: useCallback(async () => {\n await recorderRef.current?.discard();\n }, []),\n rename: useCallback(async (title: string) => {\n const recorder = recorderRef.current;\n if (!recorder) throw new Error(\"Nothing is being recorded to rename.\");\n await recorder.rename(title);\n }, []),\n levels: useCallback(() => recorderRef.current?.levels() ?? {}, []),\n importAudio: useCallback(\n async (input: ImportRecordingAudioInput) => {\n const current = optionsRef.current;\n const title = input.title?.trim();\n const externalRef = input.externalRef ?? current.externalRef;\n return await new Promise<string>((resolve, reject) => {\n uploadRecordingAudio({\n uploader: uploader(),\n workspaceId,\n audio: input.audio,\n source: \"upload\",\n ...(input.mimeType ? { mimeType: input.mimeType } : {}),\n ...(input.durationMilliseconds !== undefined\n ? { durationMilliseconds: input.durationMilliseconds }\n : {}),\n create: {\n purpose: \"meeting\",\n ...(title ? { title } : {}),\n ...(title && input.titleSource ? { titleSource: input.titleSource } : {}),\n ...(input.startedAt ? { startedAt: input.startedAt.toISOString() } : {}),\n ...(current.visibility ? { visibility: current.visibility } : {}),\n ...(externalRef ? { externalRef } : {}),\n ...(current.metadata ? { metadata: current.metadata as never } : {}),\n ...(current.transcription ? { transcription: current.transcription } : {}),\n },\n onStored: resolve,\n }).catch(reject);\n });\n },\n [uploader, workspaceId],\n ),\n };\n}\n\n// --- Reads -------------------------------------------------------------------------\n\nexport type UseRecordingsOptions = RecordingsClientOverride & {\n query?: string;\n externalRef?: string;\n limit?: number;\n pollIntervalMs?: number;\n enabled?: boolean;\n};\n\nexport type UseRecordingsResult = {\n recordings: Recording[];\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n hasMore: boolean;\n loadingMore: boolean;\n loadMore: () => Promise<void>;\n};\n\nfunction isProcessing(recording: Recording | null | undefined): boolean {\n if (!recording) return false;\n const state = recording.transcript?.state;\n return recording.state === \"processing\" || state === \"queued\" || state === \"processing\";\n}\n\n/**\n * The recordings the signed-in person can see, newest first. Polls while any is\n * being transcribed, and less often while any is still being recorded.\n */\nexport function useRecordings(options: UseRecordingsOptions = {}): UseRecordingsResult {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\"listRecordings\"],\n \"useRecordings\",\n );\n const { query, externalRef, limit } = options;\n const load = useCallback(\n async (signal?: AbortSignal) =>\n await client.listRecordings(workspaceId, {\n ...(query ? { query } : {}),\n ...(externalRef ? { externalRef } : {}),\n ...(limit ? { limit } : {}),\n ...(signal ? { signal } : {}),\n }),\n [client, workspaceId, query, externalRef, limit],\n );\n const state = usePolledValue(load, {\n pollIntervalMs: options.pollIntervalMs,\n enabled: options.enabled,\n });\n const [older, setOlder] = useState<{\n key: unknown;\n recordings: Recording[];\n nextBefore: { startedAt: string; id: string } | null;\n } | null>(null);\n const [loadingMore, setLoadingMore] = useState(false);\n // Older pages belong to the first page they continued; a new query starts over.\n const olderForThisList = older && older.key === load ? older : null;\n const recordings = useMemo(() => {\n const first = state.data?.recordings ?? [];\n if (!olderForThisList) return first;\n const seen = new Set(first.map((recording) => recording.id));\n return [\n ...first,\n ...olderForThisList.recordings.filter((recording) => !seen.has(recording.id)),\n ];\n }, [state.data, olderForThisList]);\n const anyProcessing = recordings.some(isProcessing);\n useRefreshWhile(\n options.pollIntervalMs === undefined &&\n (options.enabled ?? true) &&\n (anyProcessing || recordings.some((recording) => recording.state === \"capturing\")),\n state.refresh,\n anyProcessing ? PROCESSING_POLL_MS : CAPTURING_POLL_MS,\n );\n const nextBefore = olderForThisList\n ? olderForThisList.nextBefore\n : (state.data?.nextBefore ?? null);\n const loadMore = useCallback(async () => {\n if (!nextBefore || loadingMore) return;\n setLoadingMore(true);\n try {\n const page = await client.listRecordings(workspaceId, {\n ...(query ? { query } : {}),\n ...(externalRef ? { externalRef } : {}),\n ...(limit ? { limit } : {}),\n before: nextBefore,\n });\n setOlder((previous) => ({\n key: load,\n recordings: [\n ...(previous && previous.key === load ? previous.recordings : []),\n ...page.recordings,\n ],\n nextBefore: page.nextBefore,\n }));\n } finally {\n setLoadingMore(false);\n }\n }, [client, workspaceId, query, externalRef, limit, nextBefore, loadingMore, load]);\n return {\n recordings,\n loading: state.loading,\n error: state.error,\n refresh: state.refresh,\n hasMore: nextBefore !== null,\n loadingMore,\n loadMore,\n };\n}\n\nexport type UseRecordingOptions = RecordingsClientOverride & {\n enabled?: boolean;\n};\n\nexport type UseRecordingResult = {\n recording: Recording | null;\n versions: RecordingTranscriptVersion[];\n loading: boolean;\n error: Error | null;\n /** Transcription is still running; the hook polls until it is done. */\n processing: boolean;\n refresh: () => Promise<void>;\n update: (request: UpdateRecordingRequest) => Promise<Recording>;\n /** Transcribe again, optionally with another model, as a new version. */\n rerun: (transcription?: RecordingTranscriptionRequest) => Promise<RecordingTranscriptVersion>;\n setCurrentVersion: (versionId: string) => Promise<void>;\n remove: () => Promise<void>;\n};\n\n/**\n * One recording with its transcript versions. Polls while it is being\n * transcribed, and less often while it is still being recorded, here or on\n * another device, so a page showing it notices when the recording ends.\n */\nexport function useRecording(\n recordingId: string | null,\n options: UseRecordingOptions = {},\n): UseRecordingResult {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\"getRecording\", \"listRecordingTranscriptVersions\"],\n \"useRecording\",\n );\n const load = useCallback(\n async (signal?: AbortSignal) => {\n if (!recordingId) return null;\n const [recording, versions] = await Promise.all([\n client.getRecording(workspaceId, recordingId, signal ? { signal } : {}),\n client.listRecordingTranscriptVersions(workspaceId, recordingId),\n ]);\n return { recording, versions };\n },\n [client, workspaceId, recordingId],\n );\n const enabled = (options.enabled ?? true) && recordingId !== null;\n const state = usePolledValue(load, { enabled });\n const recording = state.data?.recording ?? null;\n const versions = state.data?.versions ?? [];\n const nowProcessing =\n isProcessing(recording) ||\n versions.some((version) => version.state === \"queued\" || version.state === \"processing\");\n useRefreshWhile(\n enabled && (nowProcessing || recording?.state === \"capturing\"),\n state.refresh,\n nowProcessing ? PROCESSING_POLL_MS : CAPTURING_POLL_MS,\n );\n const refresh = state.refresh;\n const require = () => {\n if (!recordingId) throw new Error(\"No recording selected.\");\n return recordingId;\n };\n return {\n recording,\n versions,\n loading: state.loading,\n error: state.error,\n processing: nowProcessing,\n refresh,\n update: useCallback(\n async (request: UpdateRecordingRequest) => {\n const updated = await client.updateRecording(workspaceId, require(), request);\n await refresh();\n return updated;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [client, workspaceId, recordingId, refresh],\n ),\n rerun: useCallback(\n async (transcription?: RecordingTranscriptionRequest) => {\n const version = await client.createRecordingTranscript(\n workspaceId,\n require(),\n transcription ? { transcription } : {},\n );\n await refresh();\n return version;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [client, workspaceId, recordingId, refresh],\n ),\n setCurrentVersion: useCallback(\n async (versionId: string) => {\n await client.setCurrentRecordingTranscript(workspaceId, require(), versionId);\n await refresh();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [client, workspaceId, recordingId, refresh],\n ),\n remove: useCallback(\n async () => {\n await client.deleteRecording(workspaceId, require());\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [client, workspaceId, recordingId],\n ),\n };\n}\n\nconst LIVE_POLL_MS = 2_000;\n\nexport type UseLiveTranscriptOptions = RecordingsClientOverride & {\n /** Default: on while a recording id is given. */\n enabled?: boolean;\n};\n\nexport type UseLiveTranscriptResult = {\n /** Finished live text from every track, in time order. */\n segments: RecordingLiveSegment[];\n /** A transcript is ready, so the preview is over. */\n ended: boolean;\n error: Error | null;\n};\n\n/**\n * The live transcript of a recording someone is capturing, as the recorder\n * saves it, for viewers on other devices. Polls every two seconds until the\n * transcript is ready. The device recording has it sooner in `useRecorder().live`.\n */\nexport function useLiveTranscript(\n recordingId: string | null,\n options: UseLiveTranscriptOptions = {},\n): UseLiveTranscriptResult {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\"listRecordingLiveSegments\"],\n \"useLiveTranscript\",\n );\n const enabled = (options.enabled ?? true) && recordingId !== null;\n const [state, setState] = useState<UseLiveTranscriptResult & { recordingId: string | null }>({\n recordingId,\n segments: [],\n ended: false,\n error: null,\n });\n const current = state.recordingId === recordingId ? state : null;\n const ended = current?.ended ?? false;\n useEffect(() => {\n if (!enabled || !recordingId || ended) return;\n let cancelled = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let after = 0;\n let segments: RecordingLiveSegment[] = [];\n const read = async () => {\n try {\n const page = await client.listRecordingLiveSegments(workspaceId, recordingId, { after });\n if (cancelled) return;\n after = page.after;\n if (page.segments.length > 0) {\n segments = [...segments, ...page.segments].sort(\n (left, right) =>\n left.startMilliseconds - right.startMilliseconds || left.sequence - right.sequence,\n );\n }\n setState({\n recordingId,\n segments: page.ended ? [] : segments,\n ended: page.ended,\n error: null,\n });\n if (page.ended) return;\n } catch (error) {\n if (cancelled) return;\n setState((previous) => ({\n ...(previous.recordingId === recordingId ? previous : { segments: [], ended: false }),\n recordingId,\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n }\n timer = setTimeout(() => void read(), LIVE_POLL_MS);\n };\n void read();\n return () => {\n cancelled = true;\n if (timer) clearTimeout(timer);\n };\n }, [client, workspaceId, recordingId, enabled, ended]);\n return {\n segments: current?.segments ?? [],\n ended,\n error: current?.error ?? null,\n };\n}\n\nexport type UseTranscriptOptions = RecordingsClientOverride & {\n /** A specific version; the current one by default. */\n versionId?: string;\n /** Change it to read again, for example when a new version completes. */\n refreshKey?: unknown;\n enabled?: boolean;\n};\n\nexport type UseTranscriptResult = {\n version: RecordingTranscriptVersion | null;\n speakers: RecordingSpeaker[];\n segments: RecordingTranscriptSegment[];\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n /** Name a speaker label after a person in the directory or with a plain name; null clears it. */\n nameSpeaker: (\n label: string,\n name: { personId: string } | { name: string } | null,\n ) => Promise<void>;\n /** Turn down a voice suggestion; that person is not suggested for this voice again. */\n rejectSuggestion: (label: string) => Promise<void>;\n /** Move one segment to another speaker label. */\n moveSegment: (segmentIndex: number, label: string) => Promise<void>;\n /** Correct one segment's text; null restores the original. */\n editSegment: (segmentIndex: number, text: string | null) => Promise<void>;\n};\n\nconst TRANSCRIPT_PAGE = 2_000;\n\n/** A whole transcript version with its speakers, and the edits people make to it. */\nexport function useTranscript(\n recordingId: string | null,\n options: UseTranscriptOptions = {},\n): UseTranscriptResult {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\"getRecordingTranscript\", \"updateRecordingSpeakers\", \"updateRecordingSegments\"],\n \"useTranscript\",\n );\n const { versionId, refreshKey } = options;\n const load = useCallback(\n async (signal?: AbortSignal): Promise<RecordingTranscriptPage | null> => {\n void refreshKey;\n if (!recordingId) return null;\n let page = await client.getRecordingTranscript(workspaceId, recordingId, {\n ...(versionId ? { versionId } : {}),\n limit: TRANSCRIPT_PAGE,\n ...(signal ? { signal } : {}),\n });\n const segments = [...page.segments];\n while (page.nextAfter !== null) {\n page = await client.getRecordingTranscript(workspaceId, recordingId, {\n versionId: page.version.id,\n after: page.nextAfter,\n limit: TRANSCRIPT_PAGE,\n ...(signal ? { signal } : {}),\n });\n segments.push(...page.segments);\n }\n return { ...page, segments, nextAfter: null };\n },\n [client, workspaceId, recordingId, versionId, refreshKey],\n );\n const state = usePolledValue(load, {\n enabled: (options.enabled ?? true) && recordingId !== null,\n });\n // Edits answer with the new speakers or segments; keep them until the next read.\n const [local, setLocal] = useState<{\n base: unknown;\n speakers?: RecordingSpeaker[];\n segments?: Map<number, RecordingTranscriptSegment>;\n } | null>(null);\n const base = state.data;\n const overlay = local && local.base === base ? local : null;\n const speakers = overlay?.speakers ?? base?.speakers ?? [];\n const segments = useMemo(() => {\n const original = base?.segments ?? [];\n const changed = overlay?.segments;\n return changed ? original.map((segment) => changed.get(segment.index) ?? segment) : original;\n }, [base, overlay]);\n const versionFor = () => {\n if (!recordingId || !base) throw new Error(\"The transcript is not loaded yet.\");\n return { recordingId, versionId: base.version.id };\n };\n const applySpeakers = (next: RecordingSpeaker[]) =>\n setLocal((previous) => ({\n ...(previous && previous.base === base ? previous : {}),\n base,\n speakers: next,\n }));\n const applySegments = (next: RecordingTranscriptSegment[]) =>\n setLocal((previous) => {\n const kept = previous && previous.base === base ? previous : { base };\n const merged = new Map(kept.segments ?? []);\n for (const segment of next) merged.set(segment.index, segment);\n return { ...kept, base, segments: merged };\n });\n return {\n version: base?.version ?? null,\n speakers,\n segments,\n loading: state.loading,\n error: state.error,\n refresh: state.refresh,\n nameSpeaker: async (label, name) => {\n const target = versionFor();\n const result = await client.updateRecordingSpeakers(\n workspaceId,\n target.recordingId,\n {\n assignments: [\n name === null\n ? { label, personId: null, name: null }\n : \"personId\" in name\n ? { label, personId: name.personId }\n : { label, name: name.name },\n ],\n },\n { versionId: target.versionId },\n );\n applySpeakers(result.speakers);\n },\n rejectSuggestion: async (label) => {\n const target = versionFor();\n const result = await client.updateRecordingSpeakers(\n workspaceId,\n target.recordingId,\n { rejectSuggestions: [{ label }] },\n { versionId: target.versionId },\n );\n applySpeakers(result.speakers);\n },\n moveSegment: async (segmentIndex, label) => {\n const target = versionFor();\n const result = await client.updateRecordingSpeakers(\n workspaceId,\n target.recordingId,\n { segmentOverrides: [{ segmentIndex, label }] },\n { versionId: target.versionId },\n );\n applySpeakers(result.speakers);\n const moved = segments.find((segment) => segment.index === segmentIndex);\n if (moved) applySegments([{ ...moved, speakerLabel: label }]);\n },\n editSegment: async (segmentIndex, text) => {\n const target = versionFor();\n const result = await client.updateRecordingSegments(\n workspaceId,\n target.recordingId,\n { edits: [{ segmentIndex, text }] },\n { versionId: target.versionId },\n );\n applySegments(result.segments);\n },\n };\n}\n\n/** The organization's people directory, to name speakers with. */\nexport function useRecordingPeople(\n options: RecordingsClientOverride & {\n query?: string;\n enabled?: boolean;\n } = {},\n): {\n people: RecordingPerson[];\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (request: CreateRecordingPersonRequest) => Promise<RecordingPerson>;\n /** Agree to have a person's voice remembered (see rememberRecordingPersonVoice). */\n rememberVoice: (\n personId: string,\n consent: RecordingVoiceprintConsent,\n ) => Promise<RecordingPerson>;\n /** Forget a person's voice and withdraw their agreement. */\n forgetVoice: (personId: string) => Promise<RecordingPerson>;\n} {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\n \"listRecordingPeople\",\n \"createRecordingPerson\",\n \"rememberRecordingPersonVoice\",\n \"forgetRecordingPersonVoice\",\n ],\n \"useRecordingPeople\",\n );\n const query = options.query;\n const load = useCallback(\n async () => await client.listRecordingPeople(workspaceId, query ? { query } : {}),\n [client, workspaceId, query],\n );\n const state = usePolledValue(load, { enabled: options.enabled });\n const refresh = state.refresh;\n return {\n people: state.data ?? [],\n loading: state.loading,\n error: state.error,\n refresh,\n create: useCallback(\n async (request: CreateRecordingPersonRequest) => {\n const person = await client.createRecordingPerson(workspaceId, request);\n await refresh();\n return person;\n },\n [client, workspaceId, refresh],\n ),\n rememberVoice: useCallback(\n async (personId: string, consent: RecordingVoiceprintConsent) => {\n const person = await client.rememberRecordingPersonVoice(workspaceId, personId, {\n consent,\n });\n await refresh();\n return person;\n },\n [client, workspaceId, refresh],\n ),\n forgetVoice: useCallback(\n async (personId: string) => {\n const person = await client.forgetRecordingPersonVoice(workspaceId, personId);\n await refresh();\n return person;\n },\n [client, workspaceId, refresh],\n ),\n };\n}\n\n/**\n * Models this workspace offers, with capabilities, price and the default:\n * `models` make transcripts; `liveModels` stream the live transcript.\n */\nexport function useRecordingModels(\n options: RecordingsClientOverride & { enabled?: boolean } = {},\n): {\n models: ListRecordingModelsResponse[\"models\"];\n liveModels: ListRecordingModelsResponse[\"models\"];\n defaultModel: ListRecordingModelsResponse[\"default\"] | null;\n /** The deployment uses one model for every transcription; workspaces cannot pick. */\n pinned: boolean;\n /**\n * The workspace's meeting language (null detects it), or undefined until\n * the server says, or when it is too old to.\n */\n language: string | null | undefined;\n /**\n * Whether the workspace's recorders start with the live transcript on, or\n * undefined until the server says, or when it is too old to.\n */\n liveTranscript: boolean | undefined;\n loading: boolean;\n error: Error | null;\n} {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\"listRecordingModels\"],\n \"useRecordingModels\",\n );\n const load = useCallback(\n async () => await client.listRecordingModels(workspaceId),\n [client, workspaceId],\n );\n const state = usePolledValue(load, { enabled: options.enabled });\n const all = state.data?.models;\n const models = useMemo(() => (all ?? []).filter((entry) => entry.capabilities.batch), [all]);\n const liveModels = useMemo(() => (all ?? []).filter((entry) => entry.capabilities.live), [all]);\n return {\n models,\n liveModels,\n defaultModel: state.data?.default ?? null,\n pinned: state.data?.pinned === true,\n language: state.data ? state.data.language : undefined,\n liveTranscript: state.data?.liveTranscript,\n loading: state.loading,\n error: state.error,\n };\n}\n\n// --- Notes -------------------------------------------------------------------\n\n/** How often an open meeting checks for notes someone else, or an agent, saved. */\nconst NOTES_POLL_MS = 15_000;\n\nexport type UseRecordingNotesOptions = RecordingsClientOverride & {\n enabled?: boolean;\n /** Check for notes saved elsewhere this often; default 15 seconds, 0 to never. */\n pollIntervalMs?: number;\n};\n\nexport type UseRecordingNotesResult = {\n /** What people jotted down while the meeting was recorded. */\n notepad: RecordingNote | null;\n /** The written-up summary, decisions and action items. */\n notes: RecordingNote | null;\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n /**\n * Replace the notepad or the notes. The notes are saved against the revision\n * this hook last read, so a newer save made elsewhere fails with 409\n * `notes_changed` instead of being overwritten; the notepad, saved as people\n * type, always wins.\n */\n save: (kind: RecordingNoteKind, body: string) => Promise<RecordingNote>;\n};\n\n/** A meeting's notepad and notes, kept fresh while it is open. */\nexport function useRecordingNotes(\n recordingId: string | null,\n options: UseRecordingNotesOptions = {},\n): UseRecordingNotesResult {\n const { client, workspaceId } = useEmbeddedRecordings(\n options,\n [\"listRecordingNotes\", \"saveRecordingNote\"],\n \"useRecordingNotes\",\n );\n const load = useCallback(\n async () =>\n recordingId ? (await client.listRecordingNotes(workspaceId, recordingId)).notes : [],\n [client, workspaceId, recordingId],\n );\n const pollIntervalMs = options.pollIntervalMs ?? NOTES_POLL_MS;\n const state = usePolledValue(load, {\n enabled: (options.enabled ?? true) && recordingId !== null,\n ...(pollIntervalMs > 0 ? { pollIntervalMs } : {}),\n });\n const notes = state.data ?? [];\n const notepad = notes.find((note) => note.kind === \"notepad\") ?? null;\n const written = notes.find((note) => note.kind === \"notes\") ?? null;\n const writtenRevision = written?.revision ?? 0;\n const refresh = state.refresh;\n return {\n notepad,\n notes: written,\n loading: state.loading,\n error: state.error,\n refresh,\n save: useCallback(\n async (kind: RecordingNoteKind, body: string) => {\n if (!recordingId) throw new Error(\"No recording selected.\");\n const saved = await client.saveRecordingNote(workspaceId, recordingId, kind, {\n body,\n ...(kind === \"notes\" ? { expectedRevision: writtenRevision } : {}),\n });\n await refresh();\n return saved;\n },\n [client, workspaceId, recordingId, writtenRevision, refresh],\n ),\n };\n}\n"],"mappings":"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","names":["recording","versions","require","segments"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/approvals.ts"],"sourcesContent":["import {\n parseToolDisplayMetadata,\n type ToolDisplayMetadata,\n type SessionEvent,\n} from \"@opengeni/sdk\";\nimport {\n parseMcpElicitationApprovalRequest,\n type McpElicitationApprovalRequest as McpElicitation,\n} from \"@opengeni/contracts/mcp-elicitation-model\";\n\n/* ----------------------------------------------------------------------------\n Pending-approvals projection\n\n `session.requiresAction` events live forever in the durable log, so a\n console that replays the log from sequence 0 must not render every\n historical approval as actionable. `projectPendingApprovals` folds the\n ordered event log into the approvals that are still undecided *now*:\n\n - `session.requiresAction` replaces the pending set with the payload's\n approvals (the producer always emits the full currently-pending set, so\n re-emission after a worker re-dispatch cannot duplicate cards);\n - `user.approvalDecision` subtracts the decided approval;\n - the owning turn finishing (`turn.completed`/`turn.failed`/\n `turn.cancelled`) clears the set — whatever was pending died with the\n turn. A `turn.cancelled` for a *different* turn (deleting a queued turn\n while the session waits on an approval) leaves the set alone.\n\n Pure function — same events in, same approvals out — so approve-then-reload\n projects to an empty set instead of a zombie Approve button.\n -------------------------------------------------------------------------- */\n\nexport type PendingApproval = {\n /** The id to send back via `user.approvalDecision` (`approvalId`). */\n id: string;\n /** Tool/function name awaiting the decision. */\n name: string;\n display?: ToolDisplayMetadata;\n arguments?: unknown;\n /**\n * The tool's MCP server stopped mid-call to ask the person these questions.\n * Approving answers them; declining ends the call.\n */\n elicitation?: McpElicitation;\n /** The raw approval entry from the `session.requiresAction` payload. */\n raw?: unknown;\n};\n\n/** The approvals carried by one `session.requiresAction` payload. */\nexport function approvalsFromRequiresAction(payload: unknown): PendingApproval[] {\n const approvals =\n payload && typeof payload === \"object\"\n ? (payload as { approvals?: unknown }).approvals\n : undefined;\n if (!Array.isArray(approvals)) {\n return [];\n }\n return approvals.map((approval, index) => {\n const raw = (approval && typeof approval === \"object\" ? approval : {}) as Record<\n string,\n unknown\n >;\n const rawItem =\n raw.rawItem && typeof raw.rawItem === \"object\"\n ? (raw.rawItem as Record<string, unknown>)\n : {};\n const display = parseToolDisplayMetadata(raw.display);\n const elicitation =\n raw.elicitation === undefined ? null : parseMcpElicitationApprovalRequest(raw.elicitation);\n return {\n // Mirror the runtime's canonical interruption identity before retaining\n // the legacy top-level callId fallback for already-normalized payloads.\n id: String(rawItem.callId ?? rawItem.id ?? raw.id ?? raw.callId ?? raw.name ?? index),\n name: String(raw.name ?? raw.toolName ?? rawItem.name ?? \"approval\"),\n ...(display ? { display } : {}),\n ...(elicitation ? { elicitation } : {}),\n arguments: raw.arguments ?? rawItem.arguments,\n raw: approval,\n };\n });\n}\n\n/** The approvals still awaiting a decision after replaying `events` in order. */\nexport function projectPendingApprovals(events: SessionEvent[]): PendingApproval[] {\n let pending: PendingApproval[] = [];\n let owningTurnId: string | null = null;\n for (const event of events) {\n switch (event.type) {\n case \"session.requiresAction\": {\n pending = approvalsFromRequiresAction(event.payload);\n owningTurnId = event.turnId ?? null;\n break;\n }\n case \"user.approvalDecision\": {\n const payload =\n event.payload && typeof event.payload === \"object\"\n ? (event.payload as { approvalId?: unknown })\n : {};\n if (typeof payload.approvalId === \"string\") {\n pending = pending.filter((approval) => approval.id !== payload.approvalId);\n }\n break;\n }\n case \"turn.completed\":\n case \"turn.failed\":\n case \"turn.cancelled\":\n // A Steer that replaces an approval wait closes its approvals unexecuted.\n case \"turn.superseded\": {\n // Scope clearing to the turn that raised the approvals when both\n // sides carry a turn id; clear conservatively when either is unknown.\n if (owningTurnId === null || event.turnId == null || event.turnId === owningTurnId) {\n pending = [];\n owningTurnId = null;\n }\n break;\n }\n default:\n break;\n }\n }\n return pending;\n}\n\n/**\n * Whether a session in `status` takes decisions for its pending approvals.\n * Deciding one approval resumes the turn, and the pause's other approvals stay\n * decidable while it resumes: their cards stay up instead of vanishing until\n * the turn pauses again. Only a session whose turn ended has none.\n */\nexport function approvalsDecidable(status: string | null | undefined): boolean {\n return (\n status === \"requires_action\" ||\n status === \"running\" ||\n status === \"queued\" ||\n status === \"recovering\" ||\n status === \"waiting_capacity\"\n );\n}\n"],"mappings":";;;AAAA;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,OAEK;AAwCA,SAAS,4BAA4B,SAAqC;AAC/E,QAAM,YACJ,WAAW,OAAO,YAAY,WACzB,QAAoC,YACrC;AACN,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO,CAAC;AAAA,EACV;AACA,SAAO,UAAU,IAAI,CAAC,UAAU,UAAU;AACxC,UAAM,MAAO,YAAY,OAAO,aAAa,WAAW,WAAW,CAAC;AAIpE,UAAM,UACJ,IAAI,WAAW,OAAO,IAAI,YAAY,WACjC,IAAI,UACL,CAAC;AACP,UAAM,UAAU,yBAAyB,IAAI,OAAO;AACpD,UAAM,cACJ,IAAI,gBAAgB,SAAY,OAAO,mCAAmC,IAAI,WAAW;AAC3F,WAAO;AAAA;AAAA;AAAA,MAGL,IAAI,OAAO,QAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,QAAQ,KAAK;AAAA,MACpF,MAAM,OAAO,IAAI,QAAQ,IAAI,YAAY,QAAQ,QAAQ,UAAU;AAAA,MACnE,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC7B,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,MACrC,WAAW,IAAI,aAAa,QAAQ;AAAA,MACpC,KAAK;AAAA,IACP;AAAA,EACF,CAAC;AACH;AAGO,SAAS,wBAAwB,QAA2C;AACjF,MAAI,UAA6B,CAAC;AAClC,MAAI,eAA8B;AAClC,aAAW,SAAS,QAAQ;AAC1B,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK,0BAA0B;AAC7B,kBAAU,4BAA4B,MAAM,OAAO;AACnD,uBAAe,MAAM,UAAU;AAC/B;AAAA,MACF;AAAA,MACA,KAAK,yBAAyB;AAC5B,cAAM,UACJ,MAAM,WAAW,OAAO,MAAM,YAAY,WACrC,MAAM,UACP,CAAC;AACP,YAAI,OAAO,QAAQ,eAAe,UAAU;AAC1C,oBAAU,QAAQ,OAAO,CAAC,aAAa,SAAS,OAAO,QAAQ,UAAU;AAAA,QAC3E;AACA;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA;AAAA,MAEL,KAAK,mBAAmB;AAGtB,YAAI,iBAAiB,QAAQ,MAAM,UAAU,QAAQ,MAAM,WAAW,cAAc;AAClF,oBAAU,CAAC;AACX,yBAAe;AAAA,QACjB;AACA;AAAA,MACF;AAAA,MACA;AACE;AAAA,IACJ;AAAA,EACF;AACA,SAAO;AACT;AAQO,SAAS,mBAAmB,QAA4C;AAC7E,SACE,WAAW,qBACX,WAAW,aACX,WAAW,YACX,WAAW,gBACX,WAAW;AAEf;","names":[]}
|
|
File without changes
|
/package/dist/{chat-interactive-block-VSDD6X3M.js.map → chat-interactive-block-47TCT4DN.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|