@opengeni/react 6.5.2-canary.41607687019001 → 6.7.0
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.d.ts +4 -0
- package/dist/app/app-state.js +19 -14
- package/dist/app/components/Composer.js +25 -23
- package/dist/app/components/agent/agent-capability-picker.js +10 -8
- package/dist/app/components/artifacts/artifact-browse-controls.js +4 -4
- package/dist/app/components/artifacts/artifact-library.js +21 -19
- package/dist/app/components/artifacts/artifact-page-chrome.js +3 -3
- package/dist/app/components/artifacts/artifact-viewer.js +23 -22
- package/dist/app/components/artifacts/artifact-viewer.js.map +1 -1
- package/dist/app/components/artifacts/chat-interactive-block.js +12 -12
- package/dist/app/components/artifacts/copy-artifact-link.js +7 -5
- package/dist/app/components/artifacts/file-reach-dialog.js +11 -9
- package/dist/app/components/artifacts/inline-chat-image.js +18 -18
- package/dist/app/components/artifacts/retained-file-preview.js +24 -23
- package/dist/app/components/artifacts/retained-text-preview.js +3 -3
- package/dist/app/components/artifacts/site-audience.js +6 -5
- package/dist/app/components/artifacts/site-conversations.js +16 -14
- package/dist/app/components/artifacts/site-data.js +18 -16
- package/dist/app/components/artifacts/site-public-link.js +3 -2
- package/dist/app/components/artifacts/site-publishing-page.js +39 -37
- package/dist/app/components/artifacts/site-publishing.js +34 -32
- package/dist/app/components/artifacts/site-settings.js +38 -36
- package/dist/app/components/artifacts/site-version-menu.js +8 -7
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/bots/bot-launch-strip.js +17 -17
- package/dist/app/components/bots/bot-template-dialog.js +30 -28
- package/dist/app/components/bots/bot-template-shortcuts.js +19 -19
- package/dist/app/components/bots/bot-templates-page.js +38 -36
- package/dist/app/components/bots/bot-templates-page.js.map +1 -1
- package/dist/app/components/capabilities/capability-detail-sheet.js +13 -11
- package/dist/app/components/capabilities/capability-logo-source.js +13 -13
- package/dist/app/components/capabilities/capability-logo.js +4 -3
- package/dist/app/components/capabilities/connector-tool-permissions.js +8 -6
- package/dist/app/components/capabilities/native-connect-setup.js +14 -14
- package/dist/app/components/capabilities/own-logins-shared-heads-up.js +7 -6
- package/dist/app/components/capabilities/perform-capability-action.js +7 -6
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +17 -17
- package/dist/app/components/capabilities/session-capability-card.js +72 -70
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +28 -26
- package/dist/app/components/capabilities/session-connection-accounts.js +4 -3
- package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
- package/dist/app/components/capabilities/session-github-card.js +22 -20
- package/dist/app/components/capabilities/session-machine-card.js +27 -25
- package/dist/app/components/capabilities/session-personal-github-card.js +16 -16
- package/dist/app/components/capabilities/session-plugin-card.js +10 -9
- package/dist/app/components/capabilities/use-capabilities-catalog.js +4 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +5 -4
- package/dist/app/components/command-menu/chat-status.js +15 -13
- package/dist/app/components/command-menu/chat-switcher.js +35 -33
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +53 -50
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +18 -16
- package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -1
- package/dist/app/components/common.js +4 -3
- 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 +3 -3
- package/dist/app/components/credit-required-prompt.js +10 -8
- package/dist/app/components/credit-required-prompt.js.map +1 -1
- package/dist/app/components/credits/checkout-credits-celebration.js +3 -2
- package/dist/app/components/credits/checkout-return.js +3 -2
- package/dist/app/components/credits/checkout-return.js.map +1 -1
- package/dist/app/components/credits/coupon-redeem.js +5 -4
- package/dist/app/components/credits/credit-refusal-notice.js +7 -5
- package/dist/app/components/cross-slot-deep-link-recovery.js +5 -4
- package/dist/app/components/desktop/app-shots.js +13 -11
- package/dist/app/components/desktop/computer-use.js +6 -4
- package/dist/app/components/desktop/this-computer.js +9 -7
- package/dist/app/components/feedback.js +5 -4
- package/dist/app/components/follow-up-repository-menu-body.js +8 -6
- package/dist/app/components/follow-up-repository-menu-body.js.map +1 -1
- package/dist/app/components/follow-up-repository-picker.js +1 -1
- package/dist/app/components/github-app-connect-launcher.js +5 -4
- package/dist/app/components/in-app-help-link.js +3 -3
- package/dist/app/components/knowledge/agent-learning-settings.js +3 -2
- package/dist/app/components/knowledge/agent-learning-settings.js.map +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +18 -16
- package/dist/app/components/manual-repository-editor.js +3 -2
- package/dist/app/components/markdown.js +6 -6
- package/dist/app/components/models/models-ui.js +12 -10
- package/dist/app/components/my-things.js +12 -10
- package/dist/app/components/my-things.js.map +1 -1
- package/dist/app/components/new-session-starters.js +3 -3
- package/dist/app/components/own-where-it-works.js +9 -7
- 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 +7 -5
- package/dist/app/components/rail/project-glyph.js +17 -17
- package/dist/app/components/rail/project-profile.js +31 -29
- package/dist/app/components/rail/rail-context.js +3 -3
- package/dist/app/components/rail/rail-sections.js +68 -66
- package/dist/app/components/rail/session-header.js +59 -57
- package/dist/app/components/rail/session-list.js +66 -64
- package/dist/app/components/rail/session-row-content.js +4 -4
- package/dist/app/components/rail/session-row-hover-details.js +14 -12
- package/dist/app/components/rail/session-shell.js +90 -88
- package/dist/app/components/rail/site-session-group-heading.js +8 -8
- package/dist/app/components/repository-picker.js +8 -6
- package/dist/app/components/secrets/session-secrets-panel.js +4 -3
- package/dist/app/components/secrets/vault-model.js +3 -2
- package/dist/app/components/session/agent-configuration-panel.js +25 -23
- package/dist/app/components/session/agent-configuration-panel.js.map +1 -1
- package/dist/app/components/session/artifact-link-boundary.js +3 -3
- package/dist/app/components/session/artifact-session-page.js +11 -9
- package/dist/app/components/session/banners.js +8 -8
- package/dist/app/components/session/codex-usage-notice.js +5 -3
- package/dist/app/components/session/console-new-conversation.js +42 -40
- package/dist/app/components/session/context-text-reader.js +3 -2
- package/dist/app/components/session/descendant-requests.js +39 -37
- package/dist/app/components/session/descendant-requests.js.map +1 -1
- package/dist/app/components/session/editable-artifacts-workspace.js +36 -34
- package/dist/app/components/session/editable-artifacts-workspace.js.map +1 -1
- package/dist/app/components/session/failed-session-banner.js +13 -11
- package/dist/app/components/session/failed-session-banner.js.map +1 -1
- 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 -31
- package/dist/app/components/session/inspector.js +57 -55
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +5 -4
- package/dist/app/components/session/message-actions.js.map +1 -1
- package/dist/app/components/session/message-resource-attachments.js +12 -11
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-context-inspector.js +6 -4
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +11 -9
- package/dist/app/components/session/new-session-setup-strip.js +18 -18
- package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
- package/dist/app/components/session/sandbox-switcher.js +10 -9
- package/dist/app/components/session/sandbox-workspace.js +47 -46
- 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 +13 -11
- package/dist/app/components/session/session-admission-notice.js +7 -5
- package/dist/app/components/session/session-avatar-picker.js +22 -20
- package/dist/app/components/session/session-avatar.js +16 -16
- package/dist/app/components/session/session-machine-access-notice.js +7 -5
- package/dist/app/components/session/session-profile-dialog.js +29 -27
- package/dist/app/components/session/session-profile-editor.js +30 -28
- package/dist/app/components/session/session-retention.js +10 -8
- package/dist/app/components/session/session-search-dialog.js +10 -10
- package/dist/app/components/session/session-skill-reviews.js +2 -1
- package/dist/app/components/session/session-skill-reviews.js.map +1 -1
- package/dist/app/components/session/session-tenancy-control.js +13 -11
- package/dist/app/components/session/session-tenancy-control.js.map +1 -1
- package/dist/app/components/session/session-unattended-setting.js +7 -5
- package/dist/app/components/session/session-usage-limit-section.js +11 -9
- package/dist/app/components/session/share-chat-dialog.js +9 -7
- package/dist/app/components/session/site-origin-link.js +3 -3
- package/dist/app/components/session/subagents.js +8 -8
- package/dist/app/components/session/subscription-account-indicator.js +6 -6
- package/dist/app/components/session-connectors-menu-body.js +4 -3
- package/dist/app/components/session-connectors-menu-body.js.map +1 -1
- package/dist/app/components/settings/row-select.js +7 -5
- package/dist/app/components/toaster.js +3 -2
- package/dist/app/components/transcription-settings.js +11 -9
- package/dist/app/components/ui/destructive-confirm.js +11 -9
- package/dist/app/components/usage/usage-entry.js +5 -5
- package/dist/app/components/window-bar.js +16 -14
- package/dist/app/components/workspace-composer-plus.js +22 -21
- package/dist/app/components/workspace-reach.js +6 -4
- package/dist/app/components/workspace-tenant-boundary.js +5 -4
- package/dist/app/embed/memory-navigation.js +3 -3
- package/dist/app/embed/session-app.js +211 -209
- package/dist/app/lib/actions/actions-provider.js +15 -13
- package/dist/app/lib/agent-capabilities.js +3 -3
- package/dist/app/lib/app-surfaces.js +7 -6
- package/dist/app/lib/archive-session.d.ts +9 -4
- package/dist/app/lib/archive-session.js +4 -2
- package/dist/app/lib/bot-templates.js +3 -2
- package/dist/app/lib/capabilities.js +3 -2
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +17 -16
- package/dist/app/lib/console-site.js +2 -2
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/events.js +9 -9
- package/dist/app/lib/failed-session-copy.js +3 -3
- package/dist/app/lib/inbox.js +4 -2
- 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/navigation.js +2 -2
- package/dist/app/lib/session-branch-cache.js +6 -6
- package/dist/app/lib/session-create.js +4 -4
- package/dist/app/lib/session-group-pagination.js +6 -6
- package/dist/app/lib/session-hover-facts.js +13 -11
- package/dist/app/lib/session-model.js +2 -2
- package/dist/app/lib/session-rail.js +3 -3
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/session-restart-operation-controller.js +4 -3
- package/dist/app/lib/session-tenancy.js +3 -2
- package/dist/app/lib/session-usage-limit.js +3 -2
- package/dist/app/lib/sessions-group.js +5 -5
- package/dist/app/lib/site-publishing.js +3 -2
- package/dist/app/lib/site-tool-consent-dialog.js +9 -7
- package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
- package/dist/app/lib/site-tool-consent.js +1 -1
- package/dist/app/lib/subscription-plans.js +3 -2
- package/dist/app/lib/toast.js +2 -1
- package/dist/app/lib/turn-failure-analytics.js +4 -4
- package/dist/app/lib/use-duplicate-site.js +6 -5
- package/dist/app/lib/use-follow-up-repositories.js +6 -5
- package/dist/app/lib/use-workspace-integrations.js +4 -3
- package/dist/app/lib/use-workspace-machines.js +4 -4
- package/dist/app/lib/use-workspace-model-catalog.js +5 -4
- 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 +67 -66
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +42 -40
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +8 -7
- package/dist/app/routes/session.js +119 -117
- package/dist/app/routes/sessions-index-hydration.js +5 -5
- package/dist/app/routes/sessions-index.js +104 -102
- package/dist/app/routes/site-view.js +67 -65
- package/dist/app/routes/site-view.js.map +1 -1
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +10 -10
- package/dist/automations.js +17 -15
- package/dist/automations.js.map +1 -1
- package/dist/browser-viewer-TC27OCIP.js +23 -0
- package/dist/chat-interactive-block-RWPQBHVS.js +18 -0
- package/dist/chunk-2BDT3UZQ.js +229 -0
- package/dist/chunk-2CLNIEK4.js +373 -0
- package/dist/chunk-2FSBSCZJ.js +451 -0
- package/dist/chunk-2I7HDP53.js +199 -0
- package/dist/chunk-2INLDVK3.js +15 -0
- package/dist/chunk-2KALVELR.js +126 -0
- package/dist/chunk-2M3J7ZWQ.js +418 -0
- package/dist/chunk-2OP6WLGV.js +708 -0
- package/dist/chunk-2RG7NIAS.js +2936 -0
- package/dist/chunk-2STUPWEL.js +135 -0
- package/dist/chunk-2YUOVM3G.js +271 -0
- package/dist/chunk-2Z3NQNTM.js +3670 -0
- package/dist/chunk-3CPWWGNK.js +920 -0
- package/dist/chunk-3ED2U6XE.js +37 -0
- package/dist/chunk-3GZA4BUW.js +216 -0
- package/dist/chunk-3IK6UYO6.js +1022 -0
- package/dist/chunk-3PZ7JZI2.js +431 -0
- package/dist/chunk-4DVJ6ONS.js +50 -0
- package/dist/chunk-4DVNUCRR.js +2386 -0
- package/dist/chunk-4DVNUCRR.js.map +1 -0
- package/dist/chunk-4E3ZJRTZ.js +41 -0
- package/dist/chunk-4SAWSRAA.js +141 -0
- package/dist/chunk-53AGXXZM.js +307 -0
- package/dist/chunk-54YW6SZZ.js +818 -0
- package/dist/chunk-57AZS3IE.js +2317 -0
- package/dist/chunk-5CPEEAFD.js +143 -0
- package/dist/chunk-5EWSRZ2Y.js +340 -0
- package/dist/chunk-5IE76VCY.js +387 -0
- package/dist/chunk-5NWEKLDZ.js +170 -0
- package/dist/chunk-5O2FCCHZ.js +198 -0
- package/dist/chunk-5QAY6K77.js +399 -0
- package/dist/chunk-5YKW2K6I.js +625 -0
- package/dist/chunk-5YKW2K6I.js.map +1 -0
- package/dist/chunk-6BCXNDEI.js +4116 -0
- package/dist/chunk-6BCXNDEI.js.map +1 -0
- package/dist/chunk-6DK6Z4UN.js +2599 -0
- package/dist/chunk-6DVCC7QS.js +702 -0
- package/dist/chunk-6JHU2UBS.js +2058 -0
- package/dist/chunk-6PZ7OBYU.js +490 -0
- package/dist/chunk-6WD2INST.js +539 -0
- package/dist/chunk-6WD2INST.js.map +1 -0
- package/dist/chunk-6WGRDRMA.js +163 -0
- package/dist/chunk-77WAKEAH.js +186 -0
- package/dist/chunk-7T2ZE3VT.js +5558 -0
- package/dist/chunk-7T2ZE3VT.js.map +1 -0
- package/dist/chunk-7TDO3CUM.js +393 -0
- package/dist/chunk-7TIX2UAR.js +247 -0
- package/dist/chunk-7V5REBCP.js +148 -0
- package/dist/chunk-7VMZGLYI.js +339 -0
- package/dist/chunk-7W37NS3I.js +236 -0
- package/dist/chunk-7X6SDK2C.js +111 -0
- package/dist/chunk-7ZNUHRP5.js +95 -0
- package/dist/chunk-A36PZALD.js +84 -0
- package/dist/chunk-AUI6VA63.js +107 -0
- package/dist/chunk-AW2MQB37.js +24 -0
- package/dist/chunk-AWKES45Y.js +198 -0
- package/dist/chunk-AXHZYXUV.js +132 -0
- package/dist/chunk-BHNSJVBC.js +129 -0
- package/dist/chunk-BJEJFISW.js +50 -0
- package/dist/chunk-BJFH6JI5.js +422 -0
- package/dist/chunk-BMICEQZQ.js +960 -0
- package/dist/chunk-BTLBYBLU.js +29 -0
- package/dist/chunk-BXBDYNRP.js +89 -0
- package/dist/chunk-C372BFOV.js +357 -0
- package/dist/chunk-C43KRXGA.js +234 -0
- package/dist/chunk-C43KRXGA.js.map +1 -0
- package/dist/chunk-CMKGILJK.js +4824 -0
- package/dist/chunk-CRAOSVHC.js +50 -0
- package/dist/chunk-CRU35QQH.js +281 -0
- package/dist/chunk-CUIWCGMA.js +172 -0
- package/dist/chunk-D5TWNFFE.js +38 -0
- package/dist/chunk-DF5EAHDN.js +4461 -0
- package/dist/chunk-DJAXC5OK.js +56 -0
- package/dist/chunk-DXBYWSL5.js +3550 -0
- package/dist/chunk-DXR5PDFP.js +84 -0
- package/dist/chunk-DZWARC4M.js +267 -0
- package/dist/chunk-DZXEDSQI.js +106 -0
- package/dist/chunk-E7XERZWC.js +48 -0
- package/dist/chunk-ECJBYNLJ.js +79 -0
- package/dist/chunk-EDI6SJ2N.js +43 -0
- package/dist/chunk-EWSOC6WF.js +114 -0
- package/dist/chunk-F2OPHAUN.js +103 -0
- package/dist/chunk-F4ISQGGM.js +81 -0
- package/dist/chunk-FO4LYKJL.js +197 -0
- package/dist/chunk-FPXASDG5.js +73 -0
- package/dist/chunk-FSOQDUCG.js +117 -0
- package/dist/chunk-FSOQDUCG.js.map +1 -0
- package/dist/chunk-FVXBNBHO.js +157 -0
- package/dist/chunk-FYWT2O76.js +34 -0
- package/dist/chunk-FYWT2O76.js.map +1 -0
- package/dist/chunk-FZC5N55X.js +981 -0
- package/dist/chunk-GAVYGBFI.js +99 -0
- package/dist/chunk-GFIMOUDT.js +846 -0
- package/dist/chunk-GFIMOUDT.js.map +1 -0
- package/dist/chunk-GKVJIDHF.js +33 -0
- package/dist/chunk-GVN5SZLX.js +212 -0
- package/dist/chunk-H3T7IWNA.js +134 -0
- package/dist/chunk-HAX4LCR5.js +261 -0
- package/dist/chunk-HC4JFZVU.js +121 -0
- package/dist/chunk-HEFPPMBQ.js +581 -0
- package/dist/chunk-HGKTHF2U.js +1356 -0
- package/dist/chunk-HGKTHF2U.js.map +1 -0
- package/dist/chunk-HNLR7Q4Z.js +83 -0
- package/dist/chunk-HSOXMJOT.js +12 -0
- package/dist/chunk-I4MRDSUF.js +281 -0
- package/dist/chunk-I4QEJ62Y.js +202 -0
- package/dist/chunk-I5B5L6Q4.js +56 -0
- package/dist/chunk-I5QZJODL.js +264 -0
- package/dist/chunk-I7ITSXSJ.js +603 -0
- package/dist/chunk-I7XIZRFD.js +390 -0
- package/dist/chunk-IDANQPRH.js +82 -0
- package/dist/chunk-IFB3WJ36.js +212 -0
- package/dist/chunk-IHTAKKTK.js +264 -0
- package/dist/chunk-IKXNLWAL.js +205 -0
- package/dist/chunk-IKXNLWAL.js.map +1 -0
- package/dist/chunk-ILDXWY37.js +173 -0
- package/dist/chunk-IMDQUHBJ.js +570 -0
- package/dist/chunk-IMZCQBOT.js +119 -0
- package/dist/chunk-IXPTECSC.js +403 -0
- package/dist/chunk-J255A3N5.js +71 -0
- package/dist/chunk-J5F5HPPW.js +141 -0
- package/dist/chunk-JDTGRRNU.js +5045 -0
- package/dist/chunk-JDTGRRNU.js.map +1 -0
- package/dist/chunk-JEA3QDX7.js +2469 -0
- package/dist/chunk-JEUPAVYY.js +156 -0
- package/dist/chunk-JKHKLL5W.js +194 -0
- package/dist/chunk-JQL7ZH6C.js +650 -0
- package/dist/chunk-JWB44UGJ.js +57 -0
- package/dist/chunk-JZ4NLCAP.js +333 -0
- package/dist/chunk-K2A5PXQ5.js +412 -0
- package/dist/chunk-K56XV3C3.js +623 -0
- package/dist/chunk-K6GAXXVA.js +23 -0
- package/dist/chunk-KCBMFSMS.js +199 -0
- package/dist/chunk-KF2FV3ZJ.js +268 -0
- package/dist/chunk-KJD65EJP.js +278 -0
- package/dist/chunk-KLEUWIMZ.js +386 -0
- package/dist/chunk-KODELWYT.js +309 -0
- package/dist/chunk-KRDR5RJD.js +83 -0
- package/dist/chunk-KUDGXAF7.js +914 -0
- package/dist/chunk-KY2R73CG.js +171 -0
- package/dist/chunk-KY2R73CG.js.map +1 -0
- package/dist/chunk-KYS77RPN.js +85 -0
- package/dist/chunk-L7YTNTIK.js +368 -0
- package/dist/chunk-LHPNABDH.js +686 -0
- package/dist/chunk-MFROMEKA.js +401 -0
- package/dist/chunk-MIHN76LX.js +2656 -0
- package/dist/chunk-MIYFS2XN.js +42 -0
- package/dist/chunk-MJUCFQMS.js +65 -0
- package/dist/chunk-MM4FNWI4.js +3064 -0
- package/dist/chunk-MNZG4OHU.js +790 -0
- package/dist/chunk-MVW6HNPI.js +250 -0
- package/dist/chunk-MVW6HNPI.js.map +1 -0
- package/dist/chunk-N6AACDUW.js +200 -0
- package/dist/chunk-NC55IFN3.js +781 -0
- package/dist/chunk-NC7PVOEK.js +98 -0
- package/dist/chunk-NCYMNCJO.js +70 -0
- package/dist/chunk-ND2BXV3P.js +259 -0
- package/dist/chunk-NDBTFUO6.js +272 -0
- package/dist/chunk-NDQJZ7HF.js +206 -0
- package/dist/chunk-NGJJJPZZ.js +162 -0
- package/dist/chunk-NJTSNNE7.js +251 -0
- package/dist/chunk-NPGISCU6.js +4159 -0
- package/dist/chunk-NPGISCU6.js.map +1 -0
- package/dist/chunk-NRTE7DNV.js +1270 -0
- package/dist/chunk-NULUNM7H.js +290 -0
- package/dist/chunk-NUNZS36W.js +227 -0
- package/dist/chunk-NW53H5RW.js +2424 -0
- package/dist/chunk-NXCMHIKI.js +263 -0
- package/dist/chunk-O3LKCBP5.js +159 -0
- package/dist/chunk-O4EA4F3W.js +103 -0
- package/dist/chunk-O4EA4F3W.js.map +1 -0
- package/dist/chunk-O4OOG3D6.js +116 -0
- package/dist/chunk-O4OOG3D6.js.map +1 -0
- package/dist/chunk-O6N4ABCA.js +376 -0
- package/dist/chunk-O732GAFC.js +112 -0
- package/dist/chunk-OF4TIKYC.js +690 -0
- package/dist/chunk-OMPVOMPP.js +70 -0
- package/dist/chunk-OPJJSKUK.js +118 -0
- package/dist/chunk-OPWCMA4D.js +196 -0
- package/dist/chunk-ORJPS5VN.js +1193 -0
- package/dist/chunk-OSY5K7L7.js +187 -0
- package/dist/chunk-OV6QJRT4.js +45 -0
- package/dist/chunk-OVKYVZMW.js +108 -0
- package/dist/chunk-OZCBM3UC.js +171 -0
- package/dist/chunk-P3A2EINJ.js +61 -0
- package/dist/chunk-PTAG4PDC.js +27 -0
- package/dist/chunk-PTF5B7TJ.js +298 -0
- package/dist/chunk-Q3DPEYX4.js +848 -0
- package/dist/chunk-Q6CGOPJD.js +215 -0
- package/dist/chunk-Q6CGOPJD.js.map +1 -0
- package/dist/chunk-QB2KMIDP.js +100 -0
- package/dist/chunk-QCSJ4CWE.js +1067 -0
- package/dist/chunk-QIOQ2NPQ.js +414 -0
- package/dist/chunk-QK5EFEUT.js +353 -0
- package/dist/chunk-QPQBLYQJ.js +41 -0
- package/dist/chunk-QPSGCC5D.js +184 -0
- package/dist/chunk-QZAAUQRN.js +474 -0
- package/dist/chunk-QZM6YDJW.js +489 -0
- package/dist/chunk-QZM6YDJW.js.map +1 -0
- package/dist/chunk-RGBI63KJ.js +188 -0
- package/dist/chunk-RLBKLAEY.js +138 -0
- package/dist/chunk-RMFKVOM7.js +304 -0
- package/dist/chunk-ROKQU7WG.js +258 -0
- package/dist/chunk-RPVREAU7.js +251 -0
- package/dist/chunk-RQKLF42C.js +723 -0
- package/dist/chunk-SC6RRD2D.js +38 -0
- package/dist/chunk-SC6RRD2D.js.map +1 -0
- package/dist/chunk-SEO7TICN.js +94 -0
- package/dist/chunk-SHHJCL7X.js +432 -0
- package/dist/chunk-SIRLACNZ.js +114 -0
- package/dist/chunk-SKPHMYAA.js +237 -0
- package/dist/chunk-SODC7T6L.js +1583 -0
- package/dist/chunk-SQJIKMN3.js +366 -0
- package/dist/chunk-SVINDKVW.js +26 -0
- package/dist/chunk-SYCDHPZF.js +335 -0
- package/dist/chunk-T2QX3FDP.js +133 -0
- package/dist/chunk-T3OWFVMS.js +1187 -0
- package/dist/chunk-T6XI5FLY.js +61 -0
- package/dist/chunk-T7OXJZCX.js +62 -0
- package/dist/chunk-TAT5USZN.js +353 -0
- package/dist/chunk-TPQTRNER.js +172 -0
- package/dist/chunk-TUIN4MB7.js +266 -0
- package/dist/chunk-TX3VECZU.js +71 -0
- package/dist/chunk-TXLIEOJX.js +9624 -0
- package/dist/chunk-U3DN4HEY.js +27 -0
- package/dist/chunk-U7XM7CB4.js +191 -0
- package/dist/chunk-UJK53QFL.js +140 -0
- package/dist/chunk-UMTXA2TH.js +319 -0
- package/dist/chunk-UPDSXFK5.js +199 -0
- package/dist/chunk-UTIAXH52.js +269 -0
- package/dist/chunk-UVN5TMHU.js +1184 -0
- package/dist/chunk-V4Z4B2E3.js +52 -0
- package/dist/chunk-V4Z4B2E3.js.map +1 -0
- package/dist/chunk-VGYXW3VG.js +246 -0
- package/dist/chunk-VS7AHPCZ.js +255 -0
- package/dist/chunk-VTTAJOQ7.js +121 -0
- package/dist/chunk-VWPOLUAO.js +99 -0
- package/dist/chunk-X3MWB2QU.js +3851 -0
- package/dist/chunk-X6KAJI3V.js +211 -0
- package/dist/chunk-XBLRHV5R.js +50 -0
- package/dist/chunk-XDFP2LMW.js +605 -0
- package/dist/chunk-XEQMZB3C.js +525 -0
- package/dist/chunk-XEYLT5VA.js +223 -0
- package/dist/chunk-XHIQ5I6N.js +918 -0
- package/dist/chunk-XLH7QY2R.js +378 -0
- package/dist/chunk-XWFAMUZQ.js +113 -0
- package/dist/chunk-Y4BB2KS2.js +294 -0
- package/dist/chunk-Y4BB2KS2.js.map +1 -0
- package/dist/chunk-Y4OBB2VN.js +84 -0
- package/dist/chunk-YCVD6CI3.js +234 -0
- package/dist/chunk-YENLNISG.js +270 -0
- package/dist/chunk-YIRVLKAX.js +351 -0
- package/dist/chunk-YL73CVNK.js +390 -0
- package/dist/chunk-YLS6QE5G.js +288 -0
- package/dist/chunk-YNF2OC54.js +366 -0
- package/dist/chunk-YNF2OC54.js.map +1 -0
- package/dist/chunk-YPWU5KPE.js +147 -0
- package/dist/chunk-YQXTDZSU.js +2984 -0
- package/dist/chunk-YSJEAAOL.js +178 -0
- package/dist/chunk-YWIFM7D7.js +499 -0
- package/dist/chunk-YWVI6ZMK.js +103 -0
- package/dist/chunk-Z4FMAFNH.js +847 -0
- package/dist/chunk-Z654FWNU.js +136 -0
- package/dist/chunk-Z7Y523PS.js +130 -0
- package/dist/chunk-ZD67RM6G.js +60 -0
- package/dist/chunk-ZEG4VPBL.js +187 -0
- package/dist/chunk-ZHDFQITM.js +283 -0
- package/dist/chunk-ZHDFQITM.js.map +1 -0
- package/dist/chunk-ZLYCOBHW.js +75 -0
- package/dist/chunk-ZNJ5MTXV.js +89 -0
- package/dist/chunk-ZSGY3H53.js +155 -0
- package/dist/chunk-ZTPXACWB.js +1788 -0
- package/dist/chunk-ZUA3JMI6.js +107 -0
- package/dist/chunk-ZYAZUPPV.js +559 -0
- package/dist/composer.js +8 -8
- package/dist/computer-viewer-TDDO25AV.js +21 -0
- package/dist/connect.js +12 -12
- package/dist/desktop-dictation.js +12 -10
- package/dist/desktop-dictation.js.map +1 -1
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/embedded-new-voice-2G3VLPVQ.js +24 -0
- package/dist/embedded-voice-T5IWOWGD.js +24 -0
- package/dist/fleet-decision-row-WM64KXP3.js +361 -0
- package/dist/in-chat-connect-model.js +5 -5
- package/dist/index.js +51 -51
- package/dist/interaction.js +5 -5
- package/dist/machines.js +3 -3
- package/dist/meetings-recorder.js +1 -1
- package/dist/meetings.js +40 -32
- package/dist/meetings.js.map +1 -1
- package/dist/messages/en.d.ts +3 -0
- package/dist/messages.js +1 -1
- package/dist/model-policy-picker-menu-SMC6J6QN.js +22 -0
- package/dist/payment-page-card-G4U63KUV.js +223 -0
- package/dist/platform-activity-row-BUZGZAKZ.js +128 -0
- package/dist/queue-surface-implementation-4KUZ4PJV.js +908 -0
- package/dist/realtime.js +4 -4
- package/dist/recorder-host-WF2RRR56.js +69 -0
- package/dist/recorder-host-WF2RRR56.js.map +1 -0
- package/dist/recordings.js +3 -3
- package/dist/sandbox-files-ESDMOFSD.js +27 -0
- package/dist/session-app.js +211 -209
- package/dist/session-connect-cards-Q53KMMYY.js +25 -0
- package/dist/session-list-model.js +2 -2
- package/dist/session-realtime-CF3I35WJ.js +30 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +33 -31
- package/dist/session.js +5 -5
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline-annotation-markers-CJK4RYZ4.js +157 -0
- package/dist/timeline-annotation-selection-67GF5H26.js +208 -0
- package/dist/timeline-annotations-dialog-ONJPQDJQ.js +283 -0
- package/dist/ui/access-list.js +11 -9
- package/dist/ui/access-list.js.map +1 -1
- package/dist/ui/api-error.d.ts +6 -3
- package/dist/ui/api-error.js +2 -1
- package/dist/ui/cadence-picker.js +6 -4
- package/dist/ui/choice-cards.js +5 -3
- package/dist/ui/confirm-dialog.js +2 -2
- package/dist/ui/copy-field.js +5 -3
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/diff-view.js +4 -3
- package/dist/ui/disclosure.js +3 -3
- package/dist/ui/email-chips-input.js +5 -3
- package/dist/ui/error-message.js +2 -1
- package/dist/ui/error-reference.d.ts +15 -0
- package/dist/ui/error-text.d.ts +10 -0
- package/dist/ui/error-text.js +9 -0
- package/dist/ui/error-text.js.map +1 -0
- package/dist/ui/field.js +4 -2
- package/dist/ui/flush-form-page.js +8 -6
- package/dist/ui/form-dialog.js +7 -5
- package/dist/ui/list-row.js +3 -3
- package/dist/ui/load-failure.js +3 -2
- package/dist/ui/load-failure.js.map +1 -1
- package/dist/ui/notice.js +3 -1
- package/dist/ui/relative-time.js +2 -2
- package/dist/ui/revision-history.js +9 -7
- package/dist/ui/revision-history.js.map +1 -1
- package/dist/ui/role-select.js +10 -8
- package/dist/ui/segmented-control.js +4 -2
- package/dist/ui/select-menu.js +5 -3
- package/dist/ui/setting-row.js +3 -1
- package/dist/ui/switch.js +4 -2
- package/dist/ui/usage-meter.js +3 -3
- package/dist/ui/word-list-row.js +4 -2
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +5 -6
- package/src/app/app-state.tsx +126 -14
- package/src/app/components/artifacts/site-data.tsx +2 -2
- package/src/app/components/artifacts/site-settings.tsx +2 -2
- package/src/app/components/rail/session-list.tsx +7 -8
- package/src/app/components/rail/session-shell.tsx +3 -3
- package/src/app/components/repository-picker.tsx +8 -1
- package/src/app/components/session/model-context-inspector.tsx +2 -1
- package/src/app/components/session/session-admin-access.tsx +2 -2
- package/src/app/lib/actions/chat-operations.ts +4 -4
- package/src/app/lib/archive-session.test.tsx +265 -2
- package/src/app/lib/archive-session.tsx +175 -9
- package/src/app/lib/copy-link.ts +2 -2
- package/src/app/lib/inbox.tsx +2 -2
- package/src/app/lib/session-failure-toasts.ts +3 -2
- package/src/app/lib/toast.test.tsx +215 -0
- package/src/app/lib/toast.tsx +67 -2
- package/src/app/personal-github-reconnect.test.tsx +356 -0
- package/src/app/routes/artifacts.tsx +1 -2
- package/src/components/tool-action-review.tsx +14 -1
- package/src/meetings/delete-meeting-dialog.tsx +2 -1
- package/src/meetings/meeting-ask.tsx +2 -1
- package/src/meetings/meeting-detail-page.tsx +2 -1
- package/src/meetings/meeting-notes.tsx +2 -1
- package/src/meetings/meeting-settings.tsx +4 -1
- package/src/meetings/meeting-transcript.tsx +4 -1
- package/src/meetings/recorder-context.tsx +10 -0
- package/src/meetings/recorder-host.test.tsx +60 -2
- package/src/meetings/recorder-host.tsx +16 -3
- package/src/meetings/recorder-panel.tsx +2 -1
- package/src/meetings/recorder-workspace.test.tsx +26 -1
- package/src/messages/en.ts +6 -0
- package/src/ui/api-error.test.ts +29 -5
- package/src/ui/api-error.tsx +10 -4
- package/src/ui/error-message.tsx +8 -0
- package/src/ui/error-reference.test.ts +54 -0
- package/src/ui/error-reference.ts +51 -0
- package/src/ui/error-text.test.tsx +66 -0
- package/src/ui/error-text.tsx +49 -0
- package/src/ui/field.tsx +4 -1
- package/src/ui/notice.tsx +7 -2
- package/src/ui/setting-row.tsx +4 -1
- package/styles/app.css +12 -0
- package/styles/compiled.css +9 -0
- package/dist/browser-viewer-NOP5EAUO.js +0 -23
- package/dist/chat-interactive-block-G7O44JHR.js +0 -18
- package/dist/chunk-26RWVLRD.js +0 -135
- package/dist/chunk-2AHTY7OT.js +0 -247
- package/dist/chunk-2GDNWKSC.js +0 -3670
- package/dist/chunk-2JENKGCE.js +0 -339
- package/dist/chunk-2KYQC4T5.js +0 -155
- package/dist/chunk-2RREGDQH.js +0 -708
- package/dist/chunk-2T7DX6KR.js +0 -353
- package/dist/chunk-2VB2O4FQ.js +0 -920
- package/dist/chunk-2VTTKH23.js +0 -94
- package/dist/chunk-2XNG2KNT.js +0 -172
- package/dist/chunk-2YC6JQRO.js +0 -399
- package/dist/chunk-2ZVRJRXC.js +0 -27
- package/dist/chunk-35737UT4.js +0 -162
- package/dist/chunk-366XZ4PM.js +0 -41
- package/dist/chunk-36MIDGAH.js +0 -199
- package/dist/chunk-3FD76LXM.js +0 -212
- package/dist/chunk-3OVIXY4O.js +0 -213
- package/dist/chunk-3OVIXY4O.js.map +0 -1
- package/dist/chunk-3QNRBEYH.js +0 -432
- package/dist/chunk-3QX55WLC.js +0 -15
- package/dist/chunk-3USJPT2S.js +0 -1022
- package/dist/chunk-42CMQ5VR.js +0 -251
- package/dist/chunk-4LPOWQJY.js +0 -42
- package/dist/chunk-4NBTZRKT.js +0 -79
- package/dist/chunk-4OXI6HCV.js +0 -118
- package/dist/chunk-4SZZAFYQ.js +0 -2317
- package/dist/chunk-4TQL3WP2.js +0 -140
- package/dist/chunk-4Y6BK7IU.js +0 -196
- package/dist/chunk-4YD7YZC5.js +0 -373
- package/dist/chunk-5DTST3TP.js +0 -81
- package/dist/chunk-5FH5LQVS.js +0 -130
- package/dist/chunk-5KWMYPJV.js +0 -847
- package/dist/chunk-5MUJDC6C.js +0 -84
- package/dist/chunk-5QM2WPKV.js +0 -41
- package/dist/chunk-5WUN7XPD.js +0 -1184
- package/dist/chunk-64PO2WXU.js +0 -1067
- package/dist/chunk-6AHATAAY.js +0 -431
- package/dist/chunk-6ED2YWBT.js +0 -56
- package/dist/chunk-6GXVYAGR.js +0 -170
- package/dist/chunk-6H4SJBPE.js +0 -85
- package/dist/chunk-6MT3HHUB.js +0 -84
- package/dist/chunk-6UHCBH4G.js +0 -198
- package/dist/chunk-6WLX3NR3.js +0 -198
- package/dist/chunk-73NXYYWE.js +0 -112
- package/dist/chunk-76ERNKIZ.js +0 -603
- package/dist/chunk-776QZ573.js +0 -57
- package/dist/chunk-7BYWOFVH.js +0 -171
- package/dist/chunk-7O5CGGIQ.js +0 -108
- package/dist/chunk-7QOHRZ67.js +0 -251
- package/dist/chunk-7WIDB4PL.js +0 -2058
- package/dist/chunk-7WKP3DYJ.js +0 -37
- package/dist/chunk-7XOVTPDI.js +0 -227
- package/dist/chunk-AB5MBIXY.js +0 -281
- package/dist/chunk-ADNMXBCX.js +0 -1193
- package/dist/chunk-AFBJTUFK.js +0 -202
- package/dist/chunk-ALVRWCXE.js +0 -61
- package/dist/chunk-AOHU6O3M.js +0 -247
- package/dist/chunk-AOHU6O3M.js.map +0 -1
- package/dist/chunk-APW4T4SW.js +0 -270
- package/dist/chunk-AXBSYWKX.js +0 -2656
- package/dist/chunk-B2I5ZW35.js +0 -422
- package/dist/chunk-B3LMRTRF.js +0 -223
- package/dist/chunk-BE2XENG2.js +0 -292
- package/dist/chunk-BE2XENG2.js.map +0 -1
- package/dist/chunk-BF4SADKX.js +0 -29
- package/dist/chunk-BKP43KK4.js +0 -1788
- package/dist/chunk-BM3NEZ6X.js +0 -781
- package/dist/chunk-BT3BAGB5.js +0 -216
- package/dist/chunk-BTSYDIVJ.js +0 -357
- package/dist/chunk-BUBNGKWG.js +0 -70
- package/dist/chunk-BVUJV5WR.js +0 -126
- package/dist/chunk-BZO5ZMUP.js +0 -27
- package/dist/chunk-C3HUF3M2.js +0 -157
- package/dist/chunk-C5QCAOES.js +0 -264
- package/dist/chunk-CGK6ALQU.js +0 -159
- package/dist/chunk-CPYGO76Q.js +0 -335
- package/dist/chunk-CQH4FWYA.js +0 -490
- package/dist/chunk-CZP5QXNB.js +0 -234
- package/dist/chunk-D2TOWEYH.js +0 -266
- package/dist/chunk-D6L4GHRH.js +0 -340
- package/dist/chunk-DKT3N37I.js +0 -50
- package/dist/chunk-DMMJIFKA.js +0 -84
- package/dist/chunk-DO74DQC7.js +0 -26
- package/dist/chunk-DOFJZ2JU.js +0 -83
- package/dist/chunk-DSXVY5WZ.js +0 -119
- package/dist/chunk-E337C2VK.js +0 -82
- package/dist/chunk-E6NRSRBE.js +0 -114
- package/dist/chunk-E6SQKHAU.js +0 -114
- package/dist/chunk-E7UIVD7F.js +0 -236
- package/dist/chunk-EGBII4CP.js +0 -229
- package/dist/chunk-EILSAQVJ.js +0 -200
- package/dist/chunk-ELL6HSYR.js +0 -307
- package/dist/chunk-EUBGLFFR.js +0 -73
- package/dist/chunk-EW6RNWSH.js +0 -212
- package/dist/chunk-EYUT5Y6V.js +0 -2599
- package/dist/chunk-F7U3QPZ3.js +0 -304
- package/dist/chunk-FBTJKSTM.js +0 -1270
- package/dist/chunk-FC2FTSK3.js +0 -2424
- package/dist/chunk-FOGNA3BU.js +0 -148
- package/dist/chunk-FQFKHNC7.js +0 -650
- package/dist/chunk-FTCHM755.js +0 -50
- package/dist/chunk-FXSHP4JZ.js +0 -3550
- package/dist/chunk-G6ZZC543.js +0 -818
- package/dist/chunk-G7FU6PUA.js +0 -100
- package/dist/chunk-GA4YEAMX.js +0 -3851
- package/dist/chunk-GE33BGB7.js +0 -12
- package/dist/chunk-GQ67HSJY.js +0 -570
- package/dist/chunk-GXXZ3WAK.js +0 -106
- package/dist/chunk-H2TCRX3H.js +0 -237
- package/dist/chunk-HLL4PBO7.js +0 -60
- package/dist/chunk-HLOEPV5C.js +0 -259
- package/dist/chunk-HUAGBS4O.js +0 -56
- package/dist/chunk-I36GSRUJ.js +0 -211
- package/dist/chunk-I6VBHT7S.js +0 -261
- package/dist/chunk-ICNNNOXE.js +0 -333
- package/dist/chunk-ICX64J4U.js +0 -172
- package/dist/chunk-ID36Y46W.js +0 -5046
- package/dist/chunk-ID36Y46W.js.map +0 -1
- package/dist/chunk-IGVVXLKJ.js +0 -559
- package/dist/chunk-IKJLSBUI.js +0 -2984
- package/dist/chunk-IKMUFDVS.js +0 -50
- package/dist/chunk-IKUNOX7F.js +0 -255
- package/dist/chunk-ILKDYBON.js +0 -288
- package/dist/chunk-IVYJX3OY.js +0 -187
- package/dist/chunk-JCY4CMDH.js +0 -107
- package/dist/chunk-JJZPLGIP.js +0 -474
- package/dist/chunk-JW33RV4V.js +0 -143
- package/dist/chunk-JWPA6ZPZ.js +0 -351
- package/dist/chunk-JZ4QXS6D.js +0 -50
- package/dist/chunk-K42OUZQ3.js +0 -386
- package/dist/chunk-K5TOVX5A.js +0 -206
- package/dist/chunk-K63HGHZX.js +0 -99
- package/dist/chunk-K6R5T44I.js +0 -75
- package/dist/chunk-KHJ5PXFM.js +0 -914
- package/dist/chunk-KJZRQ55O.js +0 -2319
- package/dist/chunk-KJZRQ55O.js.map +0 -1
- package/dist/chunk-KKI55ZMW.js +0 -65
- package/dist/chunk-KRPLAAFP.js +0 -199
- package/dist/chunk-KVFEZDBO.js +0 -134
- package/dist/chunk-L4I665WK.js +0 -45
- package/dist/chunk-L4OF77LE.js +0 -110
- package/dist/chunk-L4OF77LE.js.map +0 -1
- package/dist/chunk-LA5T52RM.js +0 -70
- package/dist/chunk-LM2W5YAT.js +0 -401
- package/dist/chunk-LQ62ECE6.js +0 -390
- package/dist/chunk-LQDUHU3Y.js +0 -71
- package/dist/chunk-LRJIYTZW.js +0 -4157
- package/dist/chunk-LRJIYTZW.js.map +0 -1
- package/dist/chunk-LRN6GYAZ.js +0 -138
- package/dist/chunk-M4SDVTKJ.js +0 -790
- package/dist/chunk-MA6O7CM6.js +0 -99
- package/dist/chunk-MBIBB6GI.js +0 -197
- package/dist/chunk-MF3ZFB4H.js +0 -199
- package/dist/chunk-MJJGJMYJ.js +0 -98
- package/dist/chunk-MLJADQFI.js +0 -4824
- package/dist/chunk-MQG7RV3B.js +0 -62
- package/dist/chunk-MTTGSQA5.js +0 -186
- package/dist/chunk-MW7Y3T55.js +0 -525
- package/dist/chunk-MYUFMVCH.js +0 -121
- package/dist/chunk-N3OARGH2.js +0 -61
- package/dist/chunk-NB2HMRT2.js +0 -353
- package/dist/chunk-NFDFYWMV.js +0 -141
- package/dist/chunk-NWGNFN3N.js +0 -1187
- package/dist/chunk-NWJRPDIO.js +0 -840
- package/dist/chunk-NWJRPDIO.js.map +0 -1
- package/dist/chunk-NXWBBZJV.js +0 -267
- package/dist/chunk-NY2QWROL.js +0 -71
- package/dist/chunk-O2IOPP3R.js +0 -848
- package/dist/chunk-O2UWH5RG.js +0 -141
- package/dist/chunk-O5YWDLYF.js +0 -393
- package/dist/chunk-OBMCZO7E.js +0 -121
- package/dist/chunk-OD3DCCCB.js +0 -132
- package/dist/chunk-OMH7R6I3.js +0 -390
- package/dist/chunk-OSA5EQG5.js +0 -113
- package/dist/chunk-OSJ3MUTZ.js +0 -2936
- package/dist/chunk-OWAYJ2OV.js +0 -368
- package/dist/chunk-OYXBFSGK.js +0 -269
- package/dist/chunk-PC2EBA5G.js +0 -4116
- package/dist/chunk-PC2EBA5G.js.map +0 -1
- package/dist/chunk-PC2MVXIP.js +0 -363
- package/dist/chunk-PC2MVXIP.js.map +0 -1
- package/dist/chunk-PENGLDR5.js +0 -309
- package/dist/chunk-PSMAWRPL.js +0 -191
- package/dist/chunk-PW4IMTYR.js +0 -702
- package/dist/chunk-PW54V7T5.js +0 -387
- package/dist/chunk-Q2EXYSMO.js +0 -24
- package/dist/chunk-Q2XJK5I4.js +0 -51
- package/dist/chunk-Q2XJK5I4.js.map +0 -1
- package/dist/chunk-Q4EFRI6X.js +0 -258
- package/dist/chunk-Q52CXW6C.js +0 -48
- package/dist/chunk-Q6XQ2R37.js +0 -184
- package/dist/chunk-QAJ53XBW.js +0 -23
- package/dist/chunk-QDTKECT4.js +0 -129
- package/dist/chunk-QE3ZFGI3.js +0 -43
- package/dist/chunk-QHHSUR2Y.js +0 -298
- package/dist/chunk-QHNVNR7B.js +0 -173
- package/dist/chunk-QIK2Q6N5.js +0 -376
- package/dist/chunk-QWL4L366.js +0 -38
- package/dist/chunk-R3J2PTVQ.js +0 -690
- package/dist/chunk-RBRX5ZS3.js +0 -319
- package/dist/chunk-REX6JIC7.js +0 -33
- package/dist/chunk-RGZ7EEC3.js +0 -537
- package/dist/chunk-RGZ7EEC3.js.map +0 -1
- package/dist/chunk-RIPS7GFR.js +0 -960
- package/dist/chunk-RTBZNFNV.js +0 -1354
- package/dist/chunk-RTBZNFNV.js.map +0 -1
- package/dist/chunk-SKMNW4SW.js +0 -187
- package/dist/chunk-SRFARKXC.js +0 -623
- package/dist/chunk-SWIHWCTW.js +0 -4461
- package/dist/chunk-TA5CFTO4.js +0 -103
- package/dist/chunk-TF4ZVJLI.js +0 -156
- package/dist/chunk-TG7DADJR.js +0 -9624
- package/dist/chunk-TI4R2ZD5.js +0 -623
- package/dist/chunk-TI4R2ZD5.js.map +0 -1
- package/dist/chunk-TNKWOUWP.js +0 -412
- package/dist/chunk-TNUSPXPW.js +0 -5555
- package/dist/chunk-TNUSPXPW.js.map +0 -1
- package/dist/chunk-TNYFHKVV.js +0 -366
- package/dist/chunk-TPMZBOFH.js +0 -178
- package/dist/chunk-TW3LKRJF.js +0 -263
- package/dist/chunk-TZAO65I4.js +0 -83
- package/dist/chunk-U5EFEMYU.js +0 -89
- package/dist/chunk-U6M4LS3M.js +0 -378
- package/dist/chunk-UI4HI5QK.js +0 -918
- package/dist/chunk-UJDOWCQ3.js +0 -272
- package/dist/chunk-UJUQ2QOX.js +0 -581
- package/dist/chunk-UQ3IM6FY.js +0 -133
- package/dist/chunk-UYE47LO6.js +0 -246
- package/dist/chunk-VADHIT26.js +0 -89
- package/dist/chunk-VFQ3H6CO.js +0 -163
- package/dist/chunk-VGUN6VB2.js +0 -188
- package/dist/chunk-VGWWEVSD.js +0 -723
- package/dist/chunk-VIEFJ2DM.js +0 -2469
- package/dist/chunk-VLXM36VS.js +0 -268
- package/dist/chunk-W3BFRR2G.js +0 -499
- package/dist/chunk-W5MPXR3A.js +0 -981
- package/dist/chunk-W5OWKVZG.js +0 -136
- package/dist/chunk-W6FRORMX.js +0 -486
- package/dist/chunk-W6FRORMX.js.map +0 -1
- package/dist/chunk-W7XROSZO.js +0 -232
- package/dist/chunk-W7XROSZO.js.map +0 -1
- package/dist/chunk-WEZ5PXZP.js +0 -403
- package/dist/chunk-WHWUWN2X.js +0 -197
- package/dist/chunk-WHWUWN2X.js.map +0 -1
- package/dist/chunk-WLEDGIVS.js +0 -114
- package/dist/chunk-WLEDGIVS.js.map +0 -1
- package/dist/chunk-WNDAKLHG.js +0 -281
- package/dist/chunk-WTJ4PLMU.js +0 -103
- package/dist/chunk-WV2KPJUW.js +0 -107
- package/dist/chunk-X3VY5EGY.js +0 -277
- package/dist/chunk-X3VY5EGY.js.map +0 -1
- package/dist/chunk-XDBYWVCW.js +0 -418
- package/dist/chunk-XF7MA4U5.js +0 -36
- package/dist/chunk-XF7MA4U5.js.map +0 -1
- package/dist/chunk-XOSQP3YA.js +0 -605
- package/dist/chunk-XYBV4ZJQ.js +0 -271
- package/dist/chunk-YBKVGLQR.js +0 -147
- package/dist/chunk-YDCUBUWH.js +0 -1583
- package/dist/chunk-YG6NARQY.js +0 -51
- package/dist/chunk-YG6NARQY.js.map +0 -1
- package/dist/chunk-YSVD5HI4.js +0 -278
- package/dist/chunk-YT3WGNG6.js +0 -290
- package/dist/chunk-YYICQDK4.js +0 -414
- package/dist/chunk-YYLMZLI6.js +0 -686
- package/dist/chunk-ZAMTKG5U.js +0 -95
- package/dist/chunk-ZDLYSXKN.js +0 -111
- package/dist/chunk-ZG447FSS.js +0 -194
- package/dist/chunk-ZIT5KD4Q.js +0 -264
- package/dist/chunk-ZUDOVDKR.js +0 -3064
- package/dist/chunk-ZW2ECJ3A.js +0 -451
- package/dist/computer-viewer-LPZ763KF.js +0 -21
- package/dist/embedded-new-voice-YVMKSLKJ.js +0 -24
- package/dist/embedded-voice-BJPQFXSU.js +0 -24
- package/dist/fleet-decision-row-AA4H5CDT.js +0 -361
- package/dist/model-policy-picker-menu-HSMWVO4P.js +0 -22
- package/dist/payment-page-card-3LTSFJGN.js +0 -223
- package/dist/platform-activity-row-5VYV6TX4.js +0 -128
- package/dist/queue-surface-implementation-NXHZUKD2.js +0 -908
- package/dist/recorder-host-ZKRWTDBM.js +0 -57
- package/dist/recorder-host-ZKRWTDBM.js.map +0 -1
- package/dist/sandbox-files-YCMLQUFU.js +0 -27
- package/dist/session-connect-cards-KSQLMRM5.js +0 -25
- package/dist/session-realtime-ZR6JLG3Y.js +0 -30
- package/dist/timeline-annotation-markers-YAHDPWVG.js +0 -157
- package/dist/timeline-annotation-selection-KHXNCEJP.js +0 -208
- package/dist/timeline-annotations-dialog-Y4XD3N7B.js +0 -283
- /package/dist/{browser-viewer-NOP5EAUO.js.map → browser-viewer-TC27OCIP.js.map} +0 -0
- /package/dist/{chat-interactive-block-G7O44JHR.js.map → chat-interactive-block-RWPQBHVS.js.map} +0 -0
- /package/dist/{chunk-EGBII4CP.js.map → chunk-2BDT3UZQ.js.map} +0 -0
- /package/dist/{chunk-4YD7YZC5.js.map → chunk-2CLNIEK4.js.map} +0 -0
- /package/dist/{chunk-ZW2ECJ3A.js.map → chunk-2FSBSCZJ.js.map} +0 -0
- /package/dist/{chunk-KRPLAAFP.js.map → chunk-2I7HDP53.js.map} +0 -0
- /package/dist/{chunk-3QX55WLC.js.map → chunk-2INLDVK3.js.map} +0 -0
- /package/dist/{chunk-BVUJV5WR.js.map → chunk-2KALVELR.js.map} +0 -0
- /package/dist/{chunk-XDBYWVCW.js.map → chunk-2M3J7ZWQ.js.map} +0 -0
- /package/dist/{chunk-2RREGDQH.js.map → chunk-2OP6WLGV.js.map} +0 -0
- /package/dist/{chunk-OSJ3MUTZ.js.map → chunk-2RG7NIAS.js.map} +0 -0
- /package/dist/{chunk-26RWVLRD.js.map → chunk-2STUPWEL.js.map} +0 -0
- /package/dist/{chunk-XYBV4ZJQ.js.map → chunk-2YUOVM3G.js.map} +0 -0
- /package/dist/{chunk-2GDNWKSC.js.map → chunk-2Z3NQNTM.js.map} +0 -0
- /package/dist/{chunk-2VB2O4FQ.js.map → chunk-3CPWWGNK.js.map} +0 -0
- /package/dist/{chunk-7WKP3DYJ.js.map → chunk-3ED2U6XE.js.map} +0 -0
- /package/dist/{chunk-BT3BAGB5.js.map → chunk-3GZA4BUW.js.map} +0 -0
- /package/dist/{chunk-3USJPT2S.js.map → chunk-3IK6UYO6.js.map} +0 -0
- /package/dist/{chunk-6AHATAAY.js.map → chunk-3PZ7JZI2.js.map} +0 -0
- /package/dist/{chunk-JZ4QXS6D.js.map → chunk-4DVJ6ONS.js.map} +0 -0
- /package/dist/{chunk-5QM2WPKV.js.map → chunk-4E3ZJRTZ.js.map} +0 -0
- /package/dist/{chunk-NFDFYWMV.js.map → chunk-4SAWSRAA.js.map} +0 -0
- /package/dist/{chunk-ELL6HSYR.js.map → chunk-53AGXXZM.js.map} +0 -0
- /package/dist/{chunk-G6ZZC543.js.map → chunk-54YW6SZZ.js.map} +0 -0
- /package/dist/{chunk-4SZZAFYQ.js.map → chunk-57AZS3IE.js.map} +0 -0
- /package/dist/{chunk-JW33RV4V.js.map → chunk-5CPEEAFD.js.map} +0 -0
- /package/dist/{chunk-D6L4GHRH.js.map → chunk-5EWSRZ2Y.js.map} +0 -0
- /package/dist/{chunk-PW54V7T5.js.map → chunk-5IE76VCY.js.map} +0 -0
- /package/dist/{chunk-6GXVYAGR.js.map → chunk-5NWEKLDZ.js.map} +0 -0
- /package/dist/{chunk-6UHCBH4G.js.map → chunk-5O2FCCHZ.js.map} +0 -0
- /package/dist/{chunk-2YC6JQRO.js.map → chunk-5QAY6K77.js.map} +0 -0
- /package/dist/{chunk-EYUT5Y6V.js.map → chunk-6DK6Z4UN.js.map} +0 -0
- /package/dist/{chunk-PW4IMTYR.js.map → chunk-6DVCC7QS.js.map} +0 -0
- /package/dist/{chunk-7WIDB4PL.js.map → chunk-6JHU2UBS.js.map} +0 -0
- /package/dist/{chunk-CQH4FWYA.js.map → chunk-6PZ7OBYU.js.map} +0 -0
- /package/dist/{chunk-VFQ3H6CO.js.map → chunk-6WGRDRMA.js.map} +0 -0
- /package/dist/{chunk-MTTGSQA5.js.map → chunk-77WAKEAH.js.map} +0 -0
- /package/dist/{chunk-O5YWDLYF.js.map → chunk-7TDO3CUM.js.map} +0 -0
- /package/dist/{chunk-2AHTY7OT.js.map → chunk-7TIX2UAR.js.map} +0 -0
- /package/dist/{chunk-FOGNA3BU.js.map → chunk-7V5REBCP.js.map} +0 -0
- /package/dist/{chunk-2JENKGCE.js.map → chunk-7VMZGLYI.js.map} +0 -0
- /package/dist/{chunk-E7UIVD7F.js.map → chunk-7W37NS3I.js.map} +0 -0
- /package/dist/{chunk-ZDLYSXKN.js.map → chunk-7X6SDK2C.js.map} +0 -0
- /package/dist/{chunk-ZAMTKG5U.js.map → chunk-7ZNUHRP5.js.map} +0 -0
- /package/dist/{chunk-DMMJIFKA.js.map → chunk-A36PZALD.js.map} +0 -0
- /package/dist/{chunk-WV2KPJUW.js.map → chunk-AUI6VA63.js.map} +0 -0
- /package/dist/{chunk-Q2EXYSMO.js.map → chunk-AW2MQB37.js.map} +0 -0
- /package/dist/{chunk-6WLX3NR3.js.map → chunk-AWKES45Y.js.map} +0 -0
- /package/dist/{chunk-OD3DCCCB.js.map → chunk-AXHZYXUV.js.map} +0 -0
- /package/dist/{chunk-QDTKECT4.js.map → chunk-BHNSJVBC.js.map} +0 -0
- /package/dist/{chunk-FTCHM755.js.map → chunk-BJEJFISW.js.map} +0 -0
- /package/dist/{chunk-B2I5ZW35.js.map → chunk-BJFH6JI5.js.map} +0 -0
- /package/dist/{chunk-RIPS7GFR.js.map → chunk-BMICEQZQ.js.map} +0 -0
- /package/dist/{chunk-BF4SADKX.js.map → chunk-BTLBYBLU.js.map} +0 -0
- /package/dist/{chunk-U5EFEMYU.js.map → chunk-BXBDYNRP.js.map} +0 -0
- /package/dist/{chunk-BTSYDIVJ.js.map → chunk-C372BFOV.js.map} +0 -0
- /package/dist/{chunk-MLJADQFI.js.map → chunk-CMKGILJK.js.map} +0 -0
- /package/dist/{chunk-DKT3N37I.js.map → chunk-CRAOSVHC.js.map} +0 -0
- /package/dist/{chunk-WNDAKLHG.js.map → chunk-CRU35QQH.js.map} +0 -0
- /package/dist/{chunk-2XNG2KNT.js.map → chunk-CUIWCGMA.js.map} +0 -0
- /package/dist/{chunk-QWL4L366.js.map → chunk-D5TWNFFE.js.map} +0 -0
- /package/dist/{chunk-SWIHWCTW.js.map → chunk-DF5EAHDN.js.map} +0 -0
- /package/dist/{chunk-HUAGBS4O.js.map → chunk-DJAXC5OK.js.map} +0 -0
- /package/dist/{chunk-FXSHP4JZ.js.map → chunk-DXBYWSL5.js.map} +0 -0
- /package/dist/{chunk-5MUJDC6C.js.map → chunk-DXR5PDFP.js.map} +0 -0
- /package/dist/{chunk-NXWBBZJV.js.map → chunk-DZWARC4M.js.map} +0 -0
- /package/dist/{chunk-GXXZ3WAK.js.map → chunk-DZXEDSQI.js.map} +0 -0
- /package/dist/{chunk-Q52CXW6C.js.map → chunk-E7XERZWC.js.map} +0 -0
- /package/dist/{chunk-4NBTZRKT.js.map → chunk-ECJBYNLJ.js.map} +0 -0
- /package/dist/{chunk-QE3ZFGI3.js.map → chunk-EDI6SJ2N.js.map} +0 -0
- /package/dist/{chunk-E6NRSRBE.js.map → chunk-EWSOC6WF.js.map} +0 -0
- /package/dist/{chunk-TA5CFTO4.js.map → chunk-F2OPHAUN.js.map} +0 -0
- /package/dist/{chunk-5DTST3TP.js.map → chunk-F4ISQGGM.js.map} +0 -0
- /package/dist/{chunk-MBIBB6GI.js.map → chunk-FO4LYKJL.js.map} +0 -0
- /package/dist/{chunk-EUBGLFFR.js.map → chunk-FPXASDG5.js.map} +0 -0
- /package/dist/{chunk-C3HUF3M2.js.map → chunk-FVXBNBHO.js.map} +0 -0
- /package/dist/{chunk-W5MPXR3A.js.map → chunk-FZC5N55X.js.map} +0 -0
- /package/dist/{chunk-MA6O7CM6.js.map → chunk-GAVYGBFI.js.map} +0 -0
- /package/dist/{chunk-REX6JIC7.js.map → chunk-GKVJIDHF.js.map} +0 -0
- /package/dist/{chunk-EW6RNWSH.js.map → chunk-GVN5SZLX.js.map} +0 -0
- /package/dist/{chunk-KVFEZDBO.js.map → chunk-H3T7IWNA.js.map} +0 -0
- /package/dist/{chunk-I6VBHT7S.js.map → chunk-HAX4LCR5.js.map} +0 -0
- /package/dist/{chunk-OBMCZO7E.js.map → chunk-HC4JFZVU.js.map} +0 -0
- /package/dist/{chunk-UJUQ2QOX.js.map → chunk-HEFPPMBQ.js.map} +0 -0
- /package/dist/{chunk-DOFJZ2JU.js.map → chunk-HNLR7Q4Z.js.map} +0 -0
- /package/dist/{chunk-GE33BGB7.js.map → chunk-HSOXMJOT.js.map} +0 -0
- /package/dist/{chunk-AB5MBIXY.js.map → chunk-I4MRDSUF.js.map} +0 -0
- /package/dist/{chunk-AFBJTUFK.js.map → chunk-I4QEJ62Y.js.map} +0 -0
- /package/dist/{chunk-6ED2YWBT.js.map → chunk-I5B5L6Q4.js.map} +0 -0
- /package/dist/{chunk-C5QCAOES.js.map → chunk-I5QZJODL.js.map} +0 -0
- /package/dist/{chunk-76ERNKIZ.js.map → chunk-I7ITSXSJ.js.map} +0 -0
- /package/dist/{chunk-OMH7R6I3.js.map → chunk-I7XIZRFD.js.map} +0 -0
- /package/dist/{chunk-E337C2VK.js.map → chunk-IDANQPRH.js.map} +0 -0
- /package/dist/{chunk-3FD76LXM.js.map → chunk-IFB3WJ36.js.map} +0 -0
- /package/dist/{chunk-ZIT5KD4Q.js.map → chunk-IHTAKKTK.js.map} +0 -0
- /package/dist/{chunk-QHNVNR7B.js.map → chunk-ILDXWY37.js.map} +0 -0
- /package/dist/{chunk-GQ67HSJY.js.map → chunk-IMDQUHBJ.js.map} +0 -0
- /package/dist/{chunk-DSXVY5WZ.js.map → chunk-IMZCQBOT.js.map} +0 -0
- /package/dist/{chunk-WEZ5PXZP.js.map → chunk-IXPTECSC.js.map} +0 -0
- /package/dist/{chunk-NY2QWROL.js.map → chunk-J255A3N5.js.map} +0 -0
- /package/dist/{chunk-O2UWH5RG.js.map → chunk-J5F5HPPW.js.map} +0 -0
- /package/dist/{chunk-VIEFJ2DM.js.map → chunk-JEA3QDX7.js.map} +0 -0
- /package/dist/{chunk-TF4ZVJLI.js.map → chunk-JEUPAVYY.js.map} +0 -0
- /package/dist/{chunk-ZG447FSS.js.map → chunk-JKHKLL5W.js.map} +0 -0
- /package/dist/{chunk-FQFKHNC7.js.map → chunk-JQL7ZH6C.js.map} +0 -0
- /package/dist/{chunk-776QZ573.js.map → chunk-JWB44UGJ.js.map} +0 -0
- /package/dist/{chunk-ICNNNOXE.js.map → chunk-JZ4NLCAP.js.map} +0 -0
- /package/dist/{chunk-TNKWOUWP.js.map → chunk-K2A5PXQ5.js.map} +0 -0
- /package/dist/{chunk-SRFARKXC.js.map → chunk-K56XV3C3.js.map} +0 -0
- /package/dist/{chunk-QAJ53XBW.js.map → chunk-K6GAXXVA.js.map} +0 -0
- /package/dist/{chunk-MF3ZFB4H.js.map → chunk-KCBMFSMS.js.map} +0 -0
- /package/dist/{chunk-VLXM36VS.js.map → chunk-KF2FV3ZJ.js.map} +0 -0
- /package/dist/{chunk-YSVD5HI4.js.map → chunk-KJD65EJP.js.map} +0 -0
- /package/dist/{chunk-K42OUZQ3.js.map → chunk-KLEUWIMZ.js.map} +0 -0
- /package/dist/{chunk-PENGLDR5.js.map → chunk-KODELWYT.js.map} +0 -0
- /package/dist/{chunk-TZAO65I4.js.map → chunk-KRDR5RJD.js.map} +0 -0
- /package/dist/{chunk-KHJ5PXFM.js.map → chunk-KUDGXAF7.js.map} +0 -0
- /package/dist/{chunk-6H4SJBPE.js.map → chunk-KYS77RPN.js.map} +0 -0
- /package/dist/{chunk-OWAYJ2OV.js.map → chunk-L7YTNTIK.js.map} +0 -0
- /package/dist/{chunk-YYLMZLI6.js.map → chunk-LHPNABDH.js.map} +0 -0
- /package/dist/{chunk-LM2W5YAT.js.map → chunk-MFROMEKA.js.map} +0 -0
- /package/dist/{chunk-AXBSYWKX.js.map → chunk-MIHN76LX.js.map} +0 -0
- /package/dist/{chunk-4LPOWQJY.js.map → chunk-MIYFS2XN.js.map} +0 -0
- /package/dist/{chunk-KKI55ZMW.js.map → chunk-MJUCFQMS.js.map} +0 -0
- /package/dist/{chunk-ZUDOVDKR.js.map → chunk-MM4FNWI4.js.map} +0 -0
- /package/dist/{chunk-M4SDVTKJ.js.map → chunk-MNZG4OHU.js.map} +0 -0
- /package/dist/{chunk-EILSAQVJ.js.map → chunk-N6AACDUW.js.map} +0 -0
- /package/dist/{chunk-BM3NEZ6X.js.map → chunk-NC55IFN3.js.map} +0 -0
- /package/dist/{chunk-MJJGJMYJ.js.map → chunk-NC7PVOEK.js.map} +0 -0
- /package/dist/{chunk-LA5T52RM.js.map → chunk-NCYMNCJO.js.map} +0 -0
- /package/dist/{chunk-HLOEPV5C.js.map → chunk-ND2BXV3P.js.map} +0 -0
- /package/dist/{chunk-UJDOWCQ3.js.map → chunk-NDBTFUO6.js.map} +0 -0
- /package/dist/{chunk-K5TOVX5A.js.map → chunk-NDQJZ7HF.js.map} +0 -0
- /package/dist/{chunk-35737UT4.js.map → chunk-NGJJJPZZ.js.map} +0 -0
- /package/dist/{chunk-42CMQ5VR.js.map → chunk-NJTSNNE7.js.map} +0 -0
- /package/dist/{chunk-FBTJKSTM.js.map → chunk-NRTE7DNV.js.map} +0 -0
- /package/dist/{chunk-YT3WGNG6.js.map → chunk-NULUNM7H.js.map} +0 -0
- /package/dist/{chunk-7XOVTPDI.js.map → chunk-NUNZS36W.js.map} +0 -0
- /package/dist/{chunk-FC2FTSK3.js.map → chunk-NW53H5RW.js.map} +0 -0
- /package/dist/{chunk-TW3LKRJF.js.map → chunk-NXCMHIKI.js.map} +0 -0
- /package/dist/{chunk-CGK6ALQU.js.map → chunk-O3LKCBP5.js.map} +0 -0
- /package/dist/{chunk-QIK2Q6N5.js.map → chunk-O6N4ABCA.js.map} +0 -0
- /package/dist/{chunk-73NXYYWE.js.map → chunk-O732GAFC.js.map} +0 -0
- /package/dist/{chunk-R3J2PTVQ.js.map → chunk-OF4TIKYC.js.map} +0 -0
- /package/dist/{chunk-BUBNGKWG.js.map → chunk-OMPVOMPP.js.map} +0 -0
- /package/dist/{chunk-4OXI6HCV.js.map → chunk-OPJJSKUK.js.map} +0 -0
- /package/dist/{chunk-4Y6BK7IU.js.map → chunk-OPWCMA4D.js.map} +0 -0
- /package/dist/{chunk-ADNMXBCX.js.map → chunk-ORJPS5VN.js.map} +0 -0
- /package/dist/{chunk-SKMNW4SW.js.map → chunk-OSY5K7L7.js.map} +0 -0
- /package/dist/{chunk-L4I665WK.js.map → chunk-OV6QJRT4.js.map} +0 -0
- /package/dist/{chunk-7O5CGGIQ.js.map → chunk-OVKYVZMW.js.map} +0 -0
- /package/dist/{chunk-7BYWOFVH.js.map → chunk-OZCBM3UC.js.map} +0 -0
- /package/dist/{chunk-ALVRWCXE.js.map → chunk-P3A2EINJ.js.map} +0 -0
- /package/dist/{chunk-BZO5ZMUP.js.map → chunk-PTAG4PDC.js.map} +0 -0
- /package/dist/{chunk-QHHSUR2Y.js.map → chunk-PTF5B7TJ.js.map} +0 -0
- /package/dist/{chunk-O2IOPP3R.js.map → chunk-Q3DPEYX4.js.map} +0 -0
- /package/dist/{chunk-G7FU6PUA.js.map → chunk-QB2KMIDP.js.map} +0 -0
- /package/dist/{chunk-64PO2WXU.js.map → chunk-QCSJ4CWE.js.map} +0 -0
- /package/dist/{chunk-YYICQDK4.js.map → chunk-QIOQ2NPQ.js.map} +0 -0
- /package/dist/{chunk-NB2HMRT2.js.map → chunk-QK5EFEUT.js.map} +0 -0
- /package/dist/{chunk-366XZ4PM.js.map → chunk-QPQBLYQJ.js.map} +0 -0
- /package/dist/{chunk-Q6XQ2R37.js.map → chunk-QPSGCC5D.js.map} +0 -0
- /package/dist/{chunk-JJZPLGIP.js.map → chunk-QZAAUQRN.js.map} +0 -0
- /package/dist/{chunk-VGUN6VB2.js.map → chunk-RGBI63KJ.js.map} +0 -0
- /package/dist/{chunk-LRN6GYAZ.js.map → chunk-RLBKLAEY.js.map} +0 -0
- /package/dist/{chunk-F7U3QPZ3.js.map → chunk-RMFKVOM7.js.map} +0 -0
- /package/dist/{chunk-Q4EFRI6X.js.map → chunk-ROKQU7WG.js.map} +0 -0
- /package/dist/{chunk-7QOHRZ67.js.map → chunk-RPVREAU7.js.map} +0 -0
- /package/dist/{chunk-VGWWEVSD.js.map → chunk-RQKLF42C.js.map} +0 -0
- /package/dist/{chunk-2VTTKH23.js.map → chunk-SEO7TICN.js.map} +0 -0
- /package/dist/{chunk-3QNRBEYH.js.map → chunk-SHHJCL7X.js.map} +0 -0
- /package/dist/{chunk-E6SQKHAU.js.map → chunk-SIRLACNZ.js.map} +0 -0
- /package/dist/{chunk-H2TCRX3H.js.map → chunk-SKPHMYAA.js.map} +0 -0
- /package/dist/{chunk-YDCUBUWH.js.map → chunk-SODC7T6L.js.map} +0 -0
- /package/dist/{chunk-TNYFHKVV.js.map → chunk-SQJIKMN3.js.map} +0 -0
- /package/dist/{chunk-DO74DQC7.js.map → chunk-SVINDKVW.js.map} +0 -0
- /package/dist/{chunk-CPYGO76Q.js.map → chunk-SYCDHPZF.js.map} +0 -0
- /package/dist/{chunk-UQ3IM6FY.js.map → chunk-T2QX3FDP.js.map} +0 -0
- /package/dist/{chunk-NWGNFN3N.js.map → chunk-T3OWFVMS.js.map} +0 -0
- /package/dist/{chunk-N3OARGH2.js.map → chunk-T6XI5FLY.js.map} +0 -0
- /package/dist/{chunk-MQG7RV3B.js.map → chunk-T7OXJZCX.js.map} +0 -0
- /package/dist/{chunk-2T7DX6KR.js.map → chunk-TAT5USZN.js.map} +0 -0
- /package/dist/{chunk-ICX64J4U.js.map → chunk-TPQTRNER.js.map} +0 -0
- /package/dist/{chunk-D2TOWEYH.js.map → chunk-TUIN4MB7.js.map} +0 -0
- /package/dist/{chunk-LQDUHU3Y.js.map → chunk-TX3VECZU.js.map} +0 -0
- /package/dist/{chunk-TG7DADJR.js.map → chunk-TXLIEOJX.js.map} +0 -0
- /package/dist/{chunk-2ZVRJRXC.js.map → chunk-U3DN4HEY.js.map} +0 -0
- /package/dist/{chunk-PSMAWRPL.js.map → chunk-U7XM7CB4.js.map} +0 -0
- /package/dist/{chunk-4TQL3WP2.js.map → chunk-UJK53QFL.js.map} +0 -0
- /package/dist/{chunk-RBRX5ZS3.js.map → chunk-UMTXA2TH.js.map} +0 -0
- /package/dist/{chunk-36MIDGAH.js.map → chunk-UPDSXFK5.js.map} +0 -0
- /package/dist/{chunk-OYXBFSGK.js.map → chunk-UTIAXH52.js.map} +0 -0
- /package/dist/{chunk-5WUN7XPD.js.map → chunk-UVN5TMHU.js.map} +0 -0
- /package/dist/{chunk-UYE47LO6.js.map → chunk-VGYXW3VG.js.map} +0 -0
- /package/dist/{chunk-IKUNOX7F.js.map → chunk-VS7AHPCZ.js.map} +0 -0
- /package/dist/{chunk-MYUFMVCH.js.map → chunk-VTTAJOQ7.js.map} +0 -0
- /package/dist/{chunk-K63HGHZX.js.map → chunk-VWPOLUAO.js.map} +0 -0
- /package/dist/{chunk-GA4YEAMX.js.map → chunk-X3MWB2QU.js.map} +0 -0
- /package/dist/{chunk-I36GSRUJ.js.map → chunk-X6KAJI3V.js.map} +0 -0
- /package/dist/{chunk-IKMUFDVS.js.map → chunk-XBLRHV5R.js.map} +0 -0
- /package/dist/{chunk-XOSQP3YA.js.map → chunk-XDFP2LMW.js.map} +0 -0
- /package/dist/{chunk-MW7Y3T55.js.map → chunk-XEQMZB3C.js.map} +0 -0
- /package/dist/{chunk-B3LMRTRF.js.map → chunk-XEYLT5VA.js.map} +0 -0
- /package/dist/{chunk-UI4HI5QK.js.map → chunk-XHIQ5I6N.js.map} +0 -0
- /package/dist/{chunk-U6M4LS3M.js.map → chunk-XLH7QY2R.js.map} +0 -0
- /package/dist/{chunk-OSA5EQG5.js.map → chunk-XWFAMUZQ.js.map} +0 -0
- /package/dist/{chunk-6MT3HHUB.js.map → chunk-Y4OBB2VN.js.map} +0 -0
- /package/dist/{chunk-CZP5QXNB.js.map → chunk-YCVD6CI3.js.map} +0 -0
- /package/dist/{chunk-APW4T4SW.js.map → chunk-YENLNISG.js.map} +0 -0
- /package/dist/{chunk-JWPA6ZPZ.js.map → chunk-YIRVLKAX.js.map} +0 -0
- /package/dist/{chunk-LQ62ECE6.js.map → chunk-YL73CVNK.js.map} +0 -0
- /package/dist/{chunk-ILKDYBON.js.map → chunk-YLS6QE5G.js.map} +0 -0
- /package/dist/{chunk-YBKVGLQR.js.map → chunk-YPWU5KPE.js.map} +0 -0
- /package/dist/{chunk-IKJLSBUI.js.map → chunk-YQXTDZSU.js.map} +0 -0
- /package/dist/{chunk-TPMZBOFH.js.map → chunk-YSJEAAOL.js.map} +0 -0
- /package/dist/{chunk-W3BFRR2G.js.map → chunk-YWIFM7D7.js.map} +0 -0
- /package/dist/{chunk-WTJ4PLMU.js.map → chunk-YWVI6ZMK.js.map} +0 -0
- /package/dist/{chunk-5KWMYPJV.js.map → chunk-Z4FMAFNH.js.map} +0 -0
- /package/dist/{chunk-W5OWKVZG.js.map → chunk-Z654FWNU.js.map} +0 -0
- /package/dist/{chunk-5FH5LQVS.js.map → chunk-Z7Y523PS.js.map} +0 -0
- /package/dist/{chunk-HLL4PBO7.js.map → chunk-ZD67RM6G.js.map} +0 -0
- /package/dist/{chunk-IVYJX3OY.js.map → chunk-ZEG4VPBL.js.map} +0 -0
- /package/dist/{chunk-K6R5T44I.js.map → chunk-ZLYCOBHW.js.map} +0 -0
- /package/dist/{chunk-VADHIT26.js.map → chunk-ZNJ5MTXV.js.map} +0 -0
- /package/dist/{chunk-2KYQC4T5.js.map → chunk-ZSGY3H53.js.map} +0 -0
- /package/dist/{chunk-BKP43KK4.js.map → chunk-ZTPXACWB.js.map} +0 -0
- /package/dist/{chunk-JCY4CMDH.js.map → chunk-ZUA3JMI6.js.map} +0 -0
- /package/dist/{chunk-IGVVXLKJ.js.map → chunk-ZYAZUPPV.js.map} +0 -0
- /package/dist/{computer-viewer-LPZ763KF.js.map → computer-viewer-TDDO25AV.js.map} +0 -0
- /package/dist/{embedded-new-voice-YVMKSLKJ.js.map → embedded-new-voice-2G3VLPVQ.js.map} +0 -0
- /package/dist/{embedded-voice-BJPQFXSU.js.map → embedded-voice-T5IWOWGD.js.map} +0 -0
- /package/dist/{fleet-decision-row-AA4H5CDT.js.map → fleet-decision-row-WM64KXP3.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-HSMWVO4P.js.map → model-policy-picker-menu-SMC6J6QN.js.map} +0 -0
- /package/dist/{payment-page-card-3LTSFJGN.js.map → payment-page-card-G4U63KUV.js.map} +0 -0
- /package/dist/{platform-activity-row-5VYV6TX4.js.map → platform-activity-row-BUZGZAKZ.js.map} +0 -0
- /package/dist/{queue-surface-implementation-NXHZUKD2.js.map → queue-surface-implementation-4KUZ4PJV.js.map} +0 -0
- /package/dist/{sandbox-files-YCMLQUFU.js.map → sandbox-files-ESDMOFSD.js.map} +0 -0
- /package/dist/{session-connect-cards-KSQLMRM5.js.map → session-connect-cards-Q53KMMYY.js.map} +0 -0
- /package/dist/{session-realtime-ZR6JLG3Y.js.map → session-realtime-CF3I35WJ.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-YAHDPWVG.js.map → timeline-annotation-markers-CJK4RYZ4.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-KHXNCEJP.js.map → timeline-annotation-selection-67GF5H26.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-Y4XD3N7B.js.map → timeline-annotations-dialog-ONJPQDJQ.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/app/lib/actions/actions-provider.tsx","../src/app/lib/actions/site-directory.ts","../src/app/lib/actions/meeting-directory.ts","../src/app/lib/actions/chat-switcher.ts","../src/app/lib/actions/chat-operations.ts","../src/app/lib/actions/registry.ts"],"sourcesContent":["/**\n * Runs the action registry for one workspace: builds what actions need, owns\n * the ⌘K menu and the shortcut sheet, listens for chords, keeps the recent\n * chats list, and hands the desktop shell its menu bar.\n */\nimport {\n createContext,\n lazy,\n Suspense,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { SessionListRow } from \"../../../session-list-model\";\nimport { OpenGeniRecordingsClient } from \"@opengeni/sdk/recordings\";\nimport { useMeetingRecorderControls } from \"../../../meetings/recorder-context\";\nimport { useMeetingOnScreen } from \"../../../meetings/meeting-on-screen\";\nimport { useAppContext } from \"../../app-context\";\nimport { useRail } from \"../../components/rail/rail-context\";\nimport { requestConversationFind } from \"../conversation-find-event\";\nimport { desktopBridge, desktopCapability } from \"../desktop\";\nimport { useNavigate, usePage, useRouterState } from \"../navigation\";\nimport { requestSessionSearch } from \"../session-search-route\";\nimport { requestSessionComposerFocus } from \"../session-focus\";\nimport { useSessionUiFeature } from \"../session-ui-features\";\nimport { useUiEventTarget } from \"../ui-events\";\nimport { t } from \"../console-text\";\nimport { isPersonalWorkspace, navigableWorkspaces } from \"../managed-self-context\";\nimport { workspacesByOrganization } from \"../org\";\nimport { hasWorkspacePermission } from \"../permissions\";\nimport { readChatDirectory, recordChatVisit, rememberChats } from \"./chat-directory\";\nimport { sitePath } from \"./site-directory\";\nimport { meetingPath } from \"./meeting-directory\";\nimport {\n extendChatSwitcher,\n isSwitcherKey,\n openChatSwitcher,\n stepChatSwitcher,\n SWITCHER_SHOW_DELAY_MS,\n type ChatSwitcherState,\n} from \"./chat-switcher\";\nimport {\n applicableChords,\n chordAccelerator,\n chordAriaKeys,\n chordLabel,\n currentPlatform,\n isTextEntry,\n matchesChord,\n type ActionSurface,\n type Chord,\n type ChordPlatform,\n} from \"./chords\";\nimport { copyLink } from \"../copy-link\";\nimport { useChatOperations } from \"./chat-operations\";\nimport {\n FORK_CURRENT_CHAT_EVENT,\n OPEN_COMMAND_MENU_EVENT,\n RENAME_CURRENT_CHAT_EVENT,\n} from \"./events\";\nimport {\n appActions,\n actionTitle,\n findAction,\n type ActionEnv,\n type AppAction,\n type WorkspaceChoice,\n} from \"./registry\";\n\nconst CommandMenu = lazy(() => import(\"../../components/command-menu/command-menu\"));\nconst ShortcutSheet = lazy(() => import(\"../../components/command-menu/shortcut-sheet\"));\nconst loadChatSwitcher = () => import(\"../../components/command-menu/chat-switcher\");\nconst ChatSwitcher = lazy(loadChatSwitcher);\n\ntype ActionsContextValue = {\n env: ActionEnv;\n /** Run an action for a chat (row menus) or the current chat. */\n run(action: AppAction, chat?: SessionListRow | null, chord?: Chord): void;\n /** The chords to show for an action on this surface and platform. */\n chordsFor(action: AppAction): Chord[];\n};\n\nconst ActionsContext = createContext<ActionsContextValue | null>(null);\n\nexport function useAppActions(): ActionsContextValue | null {\n return useContext(ActionsContext);\n}\n\n/**\n * An action's key for tooltips, labels and `aria-keyshortcuts`, in the\n * person's notation; nothing when this surface has no page-wide keys.\n */\nexport function useActionShortcut(\n actionId: string,\n): { label: string; ariaKeys: string; chord: Chord } | null {\n // Keys depend only on the surface and platform, so rows need not re-render\n // when the actions' environment changes.\n const enabled = useSessionUiFeature(\"keyboardShortcuts\");\n const action = findAction(actionId);\n if (!enabled || !action) return null;\n const platform = currentPlatform();\n const chords = applicableChords(action.chords, surface, platform);\n const chord = chords[0];\n if (!chord) return null;\n return {\n label: chordLabel(chord, platform),\n ariaKeys: chords.map((candidate) => chordAriaKeys(candidate, platform)).join(\" \"),\n chord,\n };\n}\n\nconst surface: ActionSurface = desktopBridge ? \"desktop\" : \"web\";\n\nfunction isRichTextEditor(target: EventTarget | null): boolean {\n return target instanceof HTMLElement && target.isContentEditable;\n}\n\nfunction insideOtherOverlay(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n const overlay = target.closest(\n '[role=\"dialog\"],[role=\"alertdialog\"],[role=\"menu\"],[role=\"listbox\"]',\n );\n return Boolean(overlay && !overlay.closest(\"[data-og-command-menu],[data-og-shortcut-sheet]\"));\n}\n\n/** The chord the desktop menu bar shows and owns for an action. */\nfunction menuOwnedChord(action: AppAction, platform: ChordPlatform): Chord | undefined {\n // ⌥ chords stay with the page: a menu would take ⌥↑ from the composer's caret.\n // Formatting keys stay with the page too, so ⌘B can still bold rich text.\n return applicableChords(action.chords, \"desktop\", platform).find(\n (chord) => (!chord.alt || chord.mod) && !chord.formatting,\n );\n}\n\nfunction menuChord(action: AppAction, platform: ChordPlatform): string | null {\n const chord = menuOwnedChord(action, platform);\n return chord ? chordAccelerator(chord) : null;\n}\n\nfunction insideCommandMenu(target: EventTarget | null): boolean {\n return target instanceof Element && Boolean(target.closest(\"[data-og-command-menu]\"));\n}\n\nfunction textEntryIsEmpty(target: EventTarget | null): boolean {\n if (target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement) {\n return target.value.length === 0;\n }\n if (target instanceof HTMLElement && target.isContentEditable) {\n return (target.textContent ?? \"\").length === 0;\n }\n return true;\n}\n\nexport function ActionsProvider(props: { children: ReactNode }) {\n const app = useAppContext();\n const rail = useRail();\n const navigate = useNavigate();\n const page = usePage();\n const ops = useChatOperations();\n const uiEvents = useUiEventTarget(\"document\");\n const windowEvents = useUiEventTarget(\"window\");\n const chatList = useSessionUiFeature(\"chatList\");\n const workspacePanel = useSessionUiFeature(\"dock\");\n const { inspectorOpen, setInspectorOpen } = app;\n const keyboardShortcuts = useSessionUiFeature(\"keyboardShortcuts\");\n const recorder = useMeetingRecorderControls();\n const platform = useMemo(() => currentPlatform(), []);\n const workspaceId = rail.workspaceId;\n const subjectId = app.accessContext.subjectId;\n const pathname = useRouterState({ select: (state) => state.location.pathname });\n const routeChatId = /\\/sessions\\/([^/]+)/.exec(pathname)?.[1] ?? null;\n const routeSiteId = /\\/sites\\/([^/]+)/.exec(pathname)?.[1] ?? null;\n const routeMeetingId = /\\/meetings\\/([^/]+)/.exec(pathname)?.[1] ?? null;\n const meetingOnScreen = useMeetingOnScreen(uiEvents);\n const currentChat =\n app.session && app.session.id === routeChatId && app.session.workspaceId === workspaceId\n ? app.session\n : null;\n\n // Every workspace open to the person, in the workspace picker's order (so\n // not a Personal one the organization turned off, unless the person is in it).\n const workspaces = useMemo<WorkspaceChoice[]>(\n () =>\n workspacesByOrganization(\n t,\n app.accessContext,\n navigableWorkspaces(app.workspaces, app.managedSelfContext, workspaceId),\n ).flatMap((group) =>\n group.workspaces.map((workspace) => ({\n id: workspace.id,\n name: workspace.name,\n organization: group.org.label,\n personal: isPersonalWorkspace(workspace, app.managedSelfContext),\n })),\n ),\n [app.accessContext, app.workspaces, app.managedSelfContext, workspaceId],\n );\n // The same rule as the fork button under a message.\n const canForkCurrentChat =\n currentChat !== null &&\n app.clientConfig.auth.mode === \"managedSession\" &&\n app.authSession !== null &&\n Boolean(app.session?.tenancy) &&\n hasWorkspacePermission(app.accessContext, workspaceId, \"sessions:create\");\n\n // Meetings record where a host mounts the recorder, in a browser that can;\n // the same rule as the Meetings page's Start recording button.\n const meetings = useMemo<ActionEnv[\"meetings\"]>(() => {\n if (!recorder || recorder.supported === false) return null;\n const showMeetings = () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/meetings\", params: { workspaceId } });\n };\n return {\n state: recorder.state,\n start: () => {\n recorder.requestStart();\n showMeetings();\n },\n show: showMeetings,\n stop: async () => {\n const stopped = await recorder.stop();\n // Hosts that give the recorder no way to open a meeting get the console's route.\n if (stopped && !stopped.opened) {\n void navigate({\n to: \"/workspaces/$workspaceId/meetings/$recordingId\",\n params: { workspaceId: stopped.workspaceId, recordingId: stopped.recordingId },\n });\n }\n },\n };\n }, [recorder, rail, navigate, workspaceId]);\n\n // The Meetings pages exist wherever the host mounts the recorder, including\n // in a browser that can't record (the page says so and lists meetings).\n const recordingsClient = useMemo(\n () =>\n typeof app.client?.requestJson === \"function\"\n ? new OpenGeniRecordingsClient(app.client)\n : null,\n [app.client],\n );\n const meetingPages = useMemo<ActionEnv[\"meetingPages\"]>(() => {\n if (!recorder || !recordingsClient) return null;\n const link = (recordingId: string) =>\n `${page.origin()}${meetingPath(workspaceId, recordingId)}`;\n const onScreen =\n routeMeetingId && meetingOnScreen?.recordingId === routeMeetingId ? meetingOnScreen : null;\n return {\n openList: () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/meetings\", params: { workspaceId } });\n },\n open: (recordingId) => {\n rail.setDrawerOpen(false);\n void navigate({\n to: \"/workspaces/$workspaceId/meetings/$recordingId\",\n params: { workspaceId, recordingId },\n });\n },\n link,\n copyLink: (recordingId) => copyLink(link(recordingId)),\n list: async (options) => {\n const { signal, ...rest } = options;\n const answer = await recordingsClient.listRecordings(workspaceId, {\n ...rest,\n ...(signal ? { signal } : {}),\n });\n return answer.recordings;\n },\n current: routeMeetingId ? { recordingId: routeMeetingId, ask: onScreen?.ask ?? null } : null,\n };\n }, [\n recorder,\n recordingsClient,\n page,\n workspaceId,\n routeMeetingId,\n meetingOnScreen,\n rail,\n navigate,\n ]);\n\n const [menu, setMenu] = useState<{\n open: boolean;\n mounted: boolean;\n /** Opened to pick a workspace rather than search everything. */\n workspaces: boolean;\n }>({ open: false, mounted: false, workspaces: false });\n const [sheet, setSheet] = useState({ open: false, mounted: false });\n\n const railRef = useRef(rail);\n railRef.current = rail;\n // What had focus when the menu or sheet opened. They open from a key or a\n // button anywhere (and load lazily the first time), so they return focus\n // there themselves instead of relying on what the dialog saw when it mounted.\n const returnFocus = useRef<HTMLElement | null>(null);\n const menuOpen = useRef(false);\n const sheetOpen = useRef(false);\n menuOpen.current = menu.open;\n sheetOpen.current = sheet.open;\n const rememberFocus = useCallback(() => {\n if (menuOpen.current || sheetOpen.current || typeof document === \"undefined\") return;\n // Opened from inside the phone drawer, which closes: come back to the\n // drawer's persistent opener, as search does.\n const drawerTrigger = railRef.current.drawerOpen\n ? railRef.current.drawerTriggerRef.current\n : null;\n if (drawerTrigger) {\n returnFocus.current = drawerTrigger;\n return;\n }\n const active = document.activeElement;\n returnFocus.current = active instanceof HTMLElement && active !== document.body ? active : null;\n }, []);\n const openCommandMenu = useCallback(\n (pickWorkspace = false) => {\n rememberFocus();\n setSheet((current) => (current.open ? { ...current, open: false } : current));\n // The phone drawer is a modal of its own; the menu replaces it and returns\n // focus itself, so the retiring drawer must not take focus back.\n railRef.current.handOffDrawer();\n setMenu((current) => ({\n open: pickWorkspace ? true : !current.open,\n mounted: true,\n workspaces: pickWorkspace,\n }));\n },\n [rememberFocus],\n );\n const openShortcutSheet = useCallback(() => {\n rememberFocus();\n setMenu((current) => (current.open ? { ...current, open: false } : current));\n setSheet((current) => ({ open: !current.open, mounted: true }));\n }, [rememberFocus]);\n\n // Recent chats follow what is actually opened, in any way.\n useEffect(() => {\n if (currentChat) recordChatVisit(subjectId, currentChat);\n // Title and pin changes refresh the record without reordering.\n }, [currentChat?.id, subjectId]); // eslint-disable-line react-hooks/exhaustive-deps\n // The open chat's newest read keeps its record current, so archiving it\n // (or renaming or pinning it) takes effect in Recent chats at once. The\n // sidebar no longer lists an archived chat, so it cannot report it.\n useEffect(() => {\n if (currentChat) rememberChats(subjectId, [currentChat]);\n }, [currentChat, subjectId]);\n\n // Control+Tab and ⌘K leave out chats in workspaces no longer open to the person.\n const reachable = useMemo(() => {\n const ids = new Set(workspaces.map((workspace) => workspace.id));\n return (id: string) => ids.has(id) || id === workspaceId;\n }, [workspaces, workspaceId]);\n\n // A chat opened from the keyboard (⌘K, Control+Tab, next/previous chat) is\n // opened to type in: hand its composer the focus once it is ready.\n const openChatForTyping = useCallback(\n (chatId: string, inWorkspaceId?: string) => {\n if (!rail.isMobile) {\n requestSessionComposerFocus(windowEvents, inWorkspaceId ?? workspaceId, chatId, \"keyboard\");\n }\n rail.openSession(chatId, inWorkspaceId);\n },\n [rail, windowEvents, workspaceId],\n );\n\n const env = useMemo<ActionEnv>(\n () => ({\n workspaceId,\n subjectId,\n surface,\n platform,\n currentChat,\n currentSiteId: routeSiteId,\n ops,\n chatList,\n workspacePanel,\n workspaces,\n canForkCurrentChat,\n meetings,\n meetingPages,\n newChat: () => rail.startNewSession(),\n openChat: (chatId, inWorkspaceId) => openChatForTyping(chatId, inWorkspaceId),\n openSite: (siteId) => {\n rail.setDrawerOpen(false);\n void navigate({\n to: \"/workspaces/$workspaceId/sites/$siteId\",\n params: { workspaceId, siteId },\n });\n },\n siteLink: (siteId) => `${page.origin()}${sitePath(workspaceId, siteId)}`,\n openWorkspace: (id) => rail.openWorkspace(id),\n openWorkspacePicker: () => openCommandMenu(true),\n openInbox: () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/inbox\", params: { workspaceId } });\n },\n toggleSidebar: () =>\n rail.isMobile ? rail.setDrawerOpen(!rail.drawerOpen) : rail.toggleCollapsed(),\n toggleWorkspacePanel: () => {\n if (!inspectorOpen && rail.isMobile) rail.setDrawerOpen(false);\n setInspectorOpen((open) => !open);\n },\n findInChat: () => requestConversationFind(uiEvents),\n searchMessages: (query) => requestSessionSearch(windowEvents, workspaceId, undefined, query),\n renameCurrentChat: () => uiEvents.dispatchEvent(new Event(RENAME_CURRENT_CHAT_EVENT)),\n forkCurrentChat: () => uiEvents.dispatchEvent(new Event(FORK_CURRENT_CHAT_EVENT)),\n openCommandMenu: () => openCommandMenu(),\n openShortcutSheet,\n switchToRecentChat: () => {\n const directory = readChatDirectory(subjectId, workspaceId);\n const target = openChatSwitcher(directory, routeChatId, false, reachable);\n const id = target?.ids[target.index];\n if (id) openChatForTyping(id, directory.rows.get(id)?.workspaceId);\n },\n sidebarOrder: () => readChatDirectory(subjectId, workspaceId).sidebarOrder,\n pinnedOrder: () => readChatDirectory(subjectId, workspaceId).pinnedOrder,\n }),\n [\n workspaceId,\n subjectId,\n platform,\n currentChat,\n routeSiteId,\n routeChatId,\n ops,\n chatList,\n workspacePanel,\n workspaces,\n canForkCurrentChat,\n reachable,\n meetings,\n meetingPages,\n inspectorOpen,\n setInspectorOpen,\n rail,\n openChatForTyping,\n navigate,\n page,\n uiEvents,\n windowEvents,\n openCommandMenu,\n openShortcutSheet,\n ],\n );\n const envRef = useRef(env);\n envRef.current = env;\n\n const chordsFor = useCallback(\n (action: AppAction) => applicableChords(action.chords, surface, platform),\n [platform],\n );\n\n const run = useCallback((action: AppAction, chat?: SessionListRow | null, chord?: Chord) => {\n const current = envRef.current;\n // Any other action replaces the open menu or sheet.\n if (action.id !== \"commandMenu.open\") {\n setMenu((state) => (state.open ? { ...state, open: false } : state));\n }\n if (action.id !== \"help.shortcuts\") {\n setSheet((state) => (state.open ? { ...state, open: false } : state));\n }\n const target = chat === undefined ? current.currentChat : chat;\n if (!action.available(current, action.forChat ? target : null)) return;\n void Promise.resolve(action.run(current, action.forChat ? target : null, chord)).catch(() => {\n // Each operation reports its own failure.\n });\n }, []);\n\n // The desktop menu bar shows the registry's actions and owns their keys.\n const menuBridge = desktopCapability(\"menuActions\")?.menuActions ?? null;\n const menuSignature = useMemo(() => {\n if (!menuBridge) return \"\";\n return JSON.stringify(\n appActions()\n .filter((action) => action.desktopMenu)\n .map((action) => {\n const chat = action.forChat ? env.currentChat : null;\n return {\n id: action.id,\n label: actionTitle(action, env, chat),\n section: action.desktopMenu!,\n accelerator: menuChord(action, platform),\n enabled: action.available(env, chat),\n };\n }),\n );\n }, [menuBridge, env, platform]);\n useEffect(() => {\n if (!menuBridge || !menuSignature) return;\n menuBridge.set(JSON.parse(menuSignature));\n }, [menuBridge, menuSignature]);\n useEffect(() => {\n if (!menuBridge) return;\n return menuBridge.onAction((id) => {\n const action = findAction(id);\n if (action) run(action);\n });\n }, [menuBridge, run]);\n\n // Older desktop builds and other parts of the page open the menu by event.\n useEffect(() => {\n const open = () => openCommandMenu();\n windowEvents.addEventListener(OPEN_COMMAND_MENU_EVENT, open);\n return () => windowEvents.removeEventListener(OPEN_COMMAND_MENU_EVENT, open);\n }, [windowEvents, openCommandMenu]);\n\n useEffect(() => {\n if (!keyboardShortcuts) return;\n const menuOwnsKeys = Boolean(menuBridge);\n function onKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n const current = envRef.current;\n for (const action of appActions()) {\n // ⌘F belongs to the conversation's own find bar.\n if (action.id === \"chat.find\") continue;\n // The chat switcher handles Control+Tab itself: it needs Control's release.\n if (action.id === \"go.recentChat\") continue;\n const chord = applicableChords(action.chords, surface, platform).find((candidate) =>\n matchesChord(event, candidate, platform),\n );\n if (!chord) continue;\n // The menu bar delivers the key it shows; the page keeps the others.\n if (menuOwnsKeys && action.desktopMenu && chord === menuOwnedChord(action, platform))\n return;\n const toggleMenu = action.id === \"commandMenu.open\";\n // Inside the ⌘K menu, chat chords act on the highlighted chat; the menu handles them.\n if (action.forChat && insideCommandMenu(event.target)) return;\n if (!toggleMenu && insideOtherOverlay(event.target)) return;\n // Rich-text editors keep their formatting keys.\n if (chord.formatting && isRichTextEditor(event.target)) return;\n // Chords without ⌘/Ctrl leave text editing alone unless the field is empty.\n if (!chord.mod && isTextEntry(event.target) && !textEntryIsEmpty(event.target)) return;\n if (!action.available(current, action.forChat ? current.currentChat : null)) return;\n event.preventDefault();\n event.stopPropagation();\n run(action, undefined, chord);\n return;\n }\n }\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => document.removeEventListener(\"keydown\", onKeyDown, true);\n }, [keyboardShortcuts, menuBridge, platform, run]);\n\n // Control+Tab: the recent-chats switcher (desktop app only; browsers keep the key).\n const [switcher, setSwitcherState] = useState<ChatSwitcherState | null>(null);\n const switcherRef = useRef<ChatSwitcherState | null>(null);\n const setSwitcher = useCallback((next: ChatSwitcherState | null) => {\n switcherRef.current = next;\n setSwitcherState(next);\n }, []);\n const routeChatIdRef = useRef(routeChatId);\n routeChatIdRef.current = routeChatId;\n const reachableRef = useRef(reachable);\n reachableRef.current = reachable;\n const switcherEnabled = keyboardShortcuts && chatList && surface === \"desktop\";\n const pickSwitcherChat = useCallback(\n (index?: number) => {\n const state = switcherRef.current;\n if (!state) return;\n const id = state.ids[index ?? state.index];\n setSwitcher(null);\n if (!id || id === routeChatIdRef.current) return;\n const current = envRef.current;\n current.openChat(\n id,\n readChatDirectory(current.subjectId, current.workspaceId).rows.get(id)?.workspaceId,\n );\n },\n [setSwitcher],\n );\n useEffect(() => {\n if (!switcherEnabled) {\n setSwitcher(null);\n return;\n }\n let showTimer: ReturnType<typeof setTimeout> | undefined;\n const cancel = () => {\n clearTimeout(showTimer);\n if (switcherRef.current) setSwitcher(null);\n };\n function onKeyDown(event: KeyboardEvent) {\n const state = switcherRef.current;\n if (isSwitcherKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n if (state) {\n clearTimeout(showTimer);\n setSwitcher(stepChatSwitcher(state, event.shiftKey ? -1 : 1));\n return;\n }\n // Not over the ⌘K menu, the shortcut sheet or another dialog.\n if (event.repeat || menuOpen.current || sheetOpen.current) return;\n if (insideOtherOverlay(event.target)) return;\n const opened = openChatSwitcher(\n readChatDirectory(subjectId, workspaceId),\n routeChatIdRef.current,\n event.shiftKey,\n reachableRef.current,\n );\n if (!opened) return;\n void loadChatSwitcher();\n setSwitcher(opened);\n // A quick press switches without drawing the list at all.\n showTimer = setTimeout(() => {\n const current = switcherRef.current;\n if (current && !current.visible) setSwitcher({ ...current, visible: true });\n }, SWITCHER_SHOW_DELAY_MS);\n return;\n }\n if (!state) return;\n // Control was let go somewhere the page did not hear it.\n if (!event.ctrlKey && event.key !== \"Control\") {\n cancel();\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n cancel();\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(showTimer);\n pickSwitcherChat();\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(showTimer);\n setSwitcher(stepChatSwitcher(state, event.key === \"ArrowDown\" ? 1 : -1));\n }\n }\n function onKeyUp(event: KeyboardEvent) {\n if (event.key !== \"Control\" || !switcherRef.current) return;\n clearTimeout(showTimer);\n pickSwitcherChat();\n }\n document.addEventListener(\"keydown\", onKeyDown, true);\n document.addEventListener(\"keyup\", onKeyUp, true);\n window.addEventListener(\"blur\", cancel);\n return () => {\n clearTimeout(showTimer);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n document.removeEventListener(\"keyup\", onKeyUp, true);\n window.removeEventListener(\"blur\", cancel);\n };\n }, [switcherEnabled, subjectId, workspaceId, pickSwitcherChat, setSwitcher]);\n\n const value = useMemo<ActionsContextValue>(\n () => ({ env, run, chordsFor }),\n [env, run, chordsFor],\n );\n\n return (\n <ActionsContext.Provider value={value}>\n {props.children}\n {menu.mounted ? (\n <Suspense fallback={null}>\n <CommandMenu\n open={menu.open}\n pickWorkspace={menu.workspaces}\n onOpenChange={(open) => setMenu((current) => ({ ...current, open }))}\n returnFocus={returnFocus}\n />\n </Suspense>\n ) : null}\n {sheet.mounted ? (\n <Suspense fallback={null}>\n <ShortcutSheet\n open={sheet.open}\n onOpenChange={(open) => setSheet((current) => ({ ...current, open }))}\n returnFocus={returnFocus}\n />\n </Suspense>\n ) : null}\n {/* Mounted from the first press, so it reads chat statuses before it shows. */}\n {switcher ? (\n <Suspense fallback={null}>\n <ChatSwitcher\n state={switcher}\n subjectId={subjectId}\n workspaceId={workspaceId}\n workspaces={workspaces}\n currentChatId={routeChatId}\n platform={platform}\n onHover={(index) => {\n const current = switcherRef.current;\n if (current) setSwitcher({ ...current, index });\n }}\n onDirectoryChange={() => {\n const current = switcherRef.current;\n if (!current) return;\n const next = extendChatSwitcher(\n current,\n readChatDirectory(subjectId, workspaceId),\n reachableRef.current,\n );\n if (next !== current) setSwitcher(next);\n }}\n onPick={pickSwitcherChat}\n onDismiss={() => setSwitcher(null)}\n />\n </Suspense>\n ) : null}\n </ActionsContext.Provider>\n );\n}\n","/**\n * What the app already knows about Sites, so the ⌘K menu can list them\n * instantly: the Site rows the sidebar has loaded for each workspace, most\n * recent activity first (the person's own opens count). It is a cache for\n * speed, never a source of authority: opening a Site still goes through the\n * normal authorized reads, and the menu's server search answers with only the\n * Sites the person may see.\n */\nimport { useSyncExternalStore } from \"react\";\n\nexport type SiteRecord = {\n id: string;\n workspaceId: string;\n title: string;\n /** Latest activity (ms): conversations, a new version, or the person opening it. */\n updatedAt: number;\n};\n\n/** The fields of a sidebar Site row or a catalog item the menu reads. */\nexport type SiteSource = { siteId?: string; id?: string; title: string; updatedAt: string };\n\ntype DirectoryState = { sites: Map<string, readonly SiteRecord[]>; version: number };\n\nconst directories = new Map<string, DirectoryState>();\nconst listeners = new Map<string, Set<() => void>>();\n\nfunction directory(subjectId: string): DirectoryState {\n let state = directories.get(subjectId);\n if (!state) {\n state = { sites: new Map(), version: 0 };\n directories.set(subjectId, state);\n }\n return state;\n}\n\n/** Turns sidebar rows or catalog items into records, dropping anything malformed. */\nexport function siteRecords(workspaceId: string, sources: readonly SiteSource[]): SiteRecord[] {\n const seen = new Set<string>();\n const records: SiteRecord[] = [];\n for (const source of sources) {\n const id = source.siteId ?? source.id;\n if (typeof id !== \"string\" || !id || seen.has(id)) continue;\n seen.add(id);\n records.push({\n id,\n workspaceId,\n title: (typeof source.title === \"string\" && source.title.trim()) || \"Untitled Site\",\n updatedAt: Date.parse(source.updatedAt) || 0,\n });\n }\n return records;\n}\n\n/** The sidebar reports the Site rows it shows for a workspace; the newest list replaces the last. */\nexport function rememberSidebarSites(\n subjectId: string,\n workspaceId: string,\n sources: readonly SiteSource[],\n): void {\n const state = directory(subjectId);\n const next = siteRecords(workspaceId, sources).sort((a, b) => b.updatedAt - a.updatedAt);\n const current = state.sites.get(workspaceId);\n if (\n current &&\n current.length === next.length &&\n current.every(\n (site, index) =>\n site.id === next[index]!.id &&\n site.title === next[index]!.title &&\n site.updatedAt === next[index]!.updatedAt,\n )\n )\n return;\n state.sites.set(workspaceId, next);\n state.version += 1;\n for (const listener of listeners.get(subjectId) ?? []) listener();\n}\n\n/** The workspace's Sites the sidebar knows, most recent activity first. */\nexport function readSidebarSites(subjectId: string, workspaceId: string): readonly SiteRecord[] {\n return directory(subjectId).sites.get(workspaceId) ?? [];\n}\n\n/** Re-renders when the directory changes; read it through `readSidebarSites`. */\nexport function useSiteDirectoryVersion(subjectId: string): number {\n return useSyncExternalStore(\n (listener) => {\n let set = listeners.get(subjectId);\n if (!set) {\n set = new Set();\n listeners.set(subjectId, set);\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n () => directory(subjectId).version,\n () => 0,\n );\n}\n\n/** A Site's page in the app, as a plain path (new tab). */\nexport function sitePath(workspaceId: string, siteId: string): string {\n return `/workspaces/${encodeURIComponent(workspaceId)}/sites/${encodeURIComponent(siteId)}`;\n}\n","/**\n * The meetings the ⌘K menu already knows: the newest few of each workspace,\n * kept from the last time the menu asked, so the next open lists them at once\n * while it asks again. A cache for speed, never a source of authority: opening\n * a meeting goes through the normal authorized reads.\n */\nimport { useSyncExternalStore } from \"react\";\nimport type { Recording } from \"@opengeni/contracts\";\nimport { meetingTitle } from \"../../../recordings-model\";\n\nexport type MeetingRecord = {\n id: string;\n workspaceId: string;\n title: string;\n /** When it started (ms). */\n startedAt: number;\n};\n\ntype DirectoryState = { meetings: Map<string, readonly MeetingRecord[]>; version: number };\n\nconst directories = new Map<string, DirectoryState>();\nconst listeners = new Map<string, Set<() => void>>();\n\nfunction directory(subjectId: string): DirectoryState {\n let state = directories.get(subjectId);\n if (!state) {\n state = { meetings: new Map(), version: 0 };\n directories.set(subjectId, state);\n }\n return state;\n}\n\n/** Turns listed recordings into records, with the titles the Meetings page shows. */\nexport function meetingRecords(recordings: readonly Recording[]): MeetingRecord[] {\n const seen = new Set<string>();\n const records: MeetingRecord[] = [];\n for (const recording of recordings) {\n if (!recording?.id || seen.has(recording.id)) continue;\n seen.add(recording.id);\n records.push({\n id: recording.id,\n workspaceId: recording.workspaceId,\n title: meetingTitle(recording),\n startedAt: Date.parse(recording.startedAt) || 0,\n });\n }\n return records;\n}\n\n/** The workspace's newest meetings, as the server just listed them; replaces the last list. */\nexport function rememberRecentMeetings(\n subjectId: string,\n workspaceId: string,\n records: readonly MeetingRecord[],\n): void {\n const state = directory(subjectId);\n const next = [...records].sort((a, b) => b.startedAt - a.startedAt);\n const current = state.meetings.get(workspaceId);\n if (\n current &&\n current.length === next.length &&\n current.every(\n (meeting, index) =>\n meeting.id === next[index]!.id &&\n meeting.title === next[index]!.title &&\n meeting.startedAt === next[index]!.startedAt,\n )\n )\n return;\n state.meetings.set(workspaceId, next);\n state.version += 1;\n for (const listener of listeners.get(subjectId) ?? []) listener();\n}\n\n/** The workspace's newest meetings the menu knows, newest first. */\nexport function readRecentMeetings(\n subjectId: string,\n workspaceId: string,\n): readonly MeetingRecord[] {\n return directory(subjectId).meetings.get(workspaceId) ?? [];\n}\n\n/** Re-renders when the directory changes; read it through `readRecentMeetings`. */\nexport function useMeetingDirectoryVersion(subjectId: string): number {\n return useSyncExternalStore(\n (listener) => {\n let set = listeners.get(subjectId);\n if (!set) {\n set = new Set();\n listeners.set(subjectId, set);\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n () => directory(subjectId).version,\n () => 0,\n );\n}\n\n/** A meeting's page in the app, as a plain path (new tab). */\nexport function meetingPath(workspaceId: string, recordingId: string): string {\n return `/workspaces/${encodeURIComponent(workspaceId)}/meetings/${encodeURIComponent(recordingId)}`;\n}\n","/**\n * Control+Tab in the desktop app: switch between recently viewed chats, most\n * recent first, as ⌘Tab switches apps. The list spans the person's workspaces,\n * so it also jumps between chats in different workspaces. A quick press goes back to the previous\n * chat (press again to return); holding Control shows the list, each Tab moves\n * down it (Shift+Tab up), and releasing Control opens the highlighted chat.\n *\n * Past the chats someone opened, the list carries on through the other chats\n * the app knows, most recently active first, so holding Tab keeps going back\n * in time. The list is read when the switcher opens and only ever grows at\n * the end (as more chats load), so it holds still while the person cycles.\n *\n * Every chat the person opened is there, sub-agent chats included: someone\n * who works in a sub-agent's chat expects Control+Tab to take them back to\n * it. The carry-on part lists only their own chats (and sub-agent chats they\n * pinned), since a workspace can hold far more sub-agent chats than chats.\n */\nimport { listsAsTopLevel, type ChatDirectorySnapshot, type ChatRecord } from \"./chat-directory\";\n\n/** At most this many chats; older ones are a search away in ⌘K. */\nexport const SWITCHER_LIMIT = 100;\n/** A press shorter than this switches without ever drawing the list. */\nexport const SWITCHER_SHOW_DELAY_MS = 140;\n\nexport type ChatSwitcherState = Readonly<{\n /** Chats in the order shown: recently viewed first, then recently active. */\n ids: readonly string[];\n /** How many of `ids`, from the front, are chats the person opened recently. */\n viewed: number;\n /** The highlighted chat. */\n index: number;\n /** Whether the list is drawn (after the delay, or once Tab is pressed again). */\n visible: boolean;\n}>;\n\ntype SwitcherDirectory = Pick<ChatDirectorySnapshot, \"recent\" | \"rows\">;\n\nfunction switchable(\n record: ChatRecord | undefined,\n reachable: (workspaceId: string) => boolean,\n): record is ChatRecord {\n return Boolean(record && !record.archived && reachable(record.workspaceId));\n}\n\n/** Known chats not in `taken`, most recently active first; sub-agent chats only when pinned. */\nfunction moreChats(\n directory: SwitcherDirectory,\n taken: ReadonlySet<string>,\n reachable: (workspaceId: string) => boolean,\n room: number,\n): string[] {\n if (room <= 0) return [];\n const more: ChatRecord[] = [];\n for (const record of directory.rows.values()) {\n if (!taken.has(record.id) && switchable(record, reachable) && listsAsTopLevel(record)) {\n more.push(record);\n }\n }\n more.sort((a, b) => b.updatedAt - a.updatedAt || (a.id < b.id ? -1 : 1));\n return more.slice(0, room).map((record) => record.id);\n}\n\n/**\n * The chats to switch between: the open chat (when there is one), the other\n * recently viewed chats, then the rest the app knows by latest activity.\n * Null when there is nowhere to switch to.\n */\nexport function openChatSwitcher(\n directory: SwitcherDirectory,\n currentChatId: string | null,\n backwards: boolean,\n /** Whether a workspace is still open to the person; chats elsewhere are left out. */\n reachable: (workspaceId: string) => boolean = () => true,\n): ChatSwitcherState | null {\n const recent = directory.recent.filter(\n (id) => id !== currentChatId && switchable(directory.rows.get(id), reachable),\n );\n const viewed = (currentChatId ? [currentChatId, ...recent] : recent).slice(0, SWITCHER_LIMIT);\n const ids = [\n ...viewed,\n ...moreChats(directory, new Set(viewed), reachable, SWITCHER_LIMIT - viewed.length),\n ];\n // Away from a chat (the inbox, a new chat) the most recent chat is the target.\n const first = currentChatId ? 1 : 0;\n if (ids.length <= first) return null;\n return {\n ids,\n viewed: viewed.length,\n index: backwards ? ids.length - 1 : first,\n visible: false,\n };\n}\n\n/**\n * Chats that loaded while the list is open join at its end, so nothing the\n * person is looking at moves. The same state when there is nothing new.\n */\nexport function extendChatSwitcher(\n state: ChatSwitcherState,\n directory: SwitcherDirectory,\n reachable: (workspaceId: string) => boolean = () => true,\n): ChatSwitcherState {\n const more = moreChats(\n directory,\n new Set(state.ids),\n reachable,\n SWITCHER_LIMIT - state.ids.length,\n );\n return more.length === 0 ? state : { ...state, ids: [...state.ids, ...more] };\n}\n\n/** Tab moves down the list and Shift+Tab up, wrapping at the ends. */\nexport function stepChatSwitcher(state: ChatSwitcherState, step: 1 | -1): ChatSwitcherState {\n const count = state.ids.length;\n return { ...state, index: (state.index + step + count) % count, visible: true };\n}\n\n/** Control+Tab exactly: no ⌘, no ⌥ (Shift reverses). */\nexport function isSwitcherKey(\n event: Pick<KeyboardEvent, \"code\" | \"ctrlKey\" | \"metaKey\" | \"altKey\">,\n) {\n return event.code === \"Tab\" && event.ctrlKey && !event.metaKey && !event.altKey;\n}\n","import { archiveActionLabel, requestSessionArchive } from \"../archive-session\";\n/**\n * The chat operations every surface shares: the command menu, chords, the\n * chat header and the sidebar's row menus all copy links, pin, archive and\n * mark chats through these, so they behave identically everywhere.\n */\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { sessionDisplayTitle, type SessionListRow } from \"../../../session-list-model\";\nimport { useAppContext } from \"../../app-context\";\nimport { usePage } from \"../navigation\";\nimport { applySessionArchiveProjection } from \"../session-pagination\";\nimport { notifySessionListChanged } from \"../session-list-invalidation\";\nimport { toast } from \"../toast\";\nimport { copyLink as copyLinkWithToast } from \"../copy-link\";\nimport { errorMessage } from \"@opengeni/contracts/values\";\n\nexport type ChatOperations = {\n /** \"Archive\" where this person can archive the chat, otherwise null. */\n archiveLabel?: (chat: SessionListRow) => string | null;\n /** The chat's shareable address. */\n linkTo(chat: Pick<SessionListRow, \"id\" | \"workspaceId\">): string;\n copyLink(chat: Pick<SessionListRow, \"id\" | \"workspaceId\">): Promise<void>;\n setPinned(chat: SessionListRow, pinned: boolean): Promise<void>;\n setArchived(chat: SessionListRow, archived: boolean): Promise<void>;\n setUnread(chat: SessionListRow, unread: boolean): Promise<void>;\n};\n\nexport function chatPath(chat: Pick<SessionListRow, \"id\" | \"workspaceId\">): string {\n return `/workspaces/${encodeURIComponent(chat.workspaceId)}/sessions/${encodeURIComponent(chat.id)}`;\n}\n\nexport function useChatOperations(): ChatOperations {\n const context = useAppContext();\n const page = usePage();\n const archiving = useRef(new Set<string>());\n const linkTo = useCallback(\n (chat: Pick<SessionListRow, \"id\" | \"workspaceId\">) => `${page.origin()}${chatPath(chat)}`,\n [page],\n );\n const copyLink = useCallback(\n (chat: Pick<SessionListRow, \"id\" | \"workspaceId\">) => copyLinkWithToast(linkTo(chat)),\n [linkTo],\n );\n const setPinned = useCallback(\n async (chat: SessionListRow, pinned: boolean) => {\n const updated = await context.updateSessionPin(\n chat.workspaceId,\n chat.id,\n pinned,\n chat.pinVersion ?? 0,\n );\n if (updated) toast.success(pinned ? \"Chat pinned\" : \"Chat unpinned\");\n else toast.error(pinned ? \"Couldn't pin the chat.\" : \"Couldn't unpin the chat.\");\n },\n [context],\n );\n const setArchivedRef = useRef<ChatOperations[\"setArchived\"] | null>(null);\n const setArchived = useCallback(\n async (chat: SessionListRow, archived: boolean) => {\n if (archiving.current.has(chat.id)) return;\n const accepted = context.captureWorkspaceInvocation(chat.workspaceId);\n if (!accepted) return;\n archiving.current.add(chat.id);\n try {\n const updated = await requestSessionArchive(\n context,\n chat,\n archived,\n sessionDisplayTitle(chat),\n () => void setArchivedRef.current?.({ ...chat, archived: true }, false),\n );\n if (!updated) return;\n if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;\n context.setSession((current) =>\n current?.id === updated.id && current.workspaceId === updated.workspaceId\n ? applySessionArchiveProjection(current, updated)\n : current,\n );\n notifySessionListChanged({\n workspaceId: chat.workspaceId,\n sessionId: chat.id,\n archived: updated.archived,\n });\n } catch (error) {\n if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;\n toast.error(archived ? \"Couldn't archive the chat.\" : \"Couldn't undo the archive.\", {\n description: errorMessage(error),\n });\n } finally {\n archiving.current.delete(chat.id);\n }\n },\n [context],\n );\n setArchivedRef.current = setArchived;\n const setUnread = useCallback(\n async (chat: SessionListRow, unread: boolean) => {\n try {\n const updated = await context.client.updateSessionAttention(chat.workspaceId, chat.id, {\n unread,\n expectedVersion: chat.attentionVersion ?? 0,\n });\n context.setSession((current) =>\n current?.id === updated.id\n ? {\n ...current,\n ...(updated.unread !== undefined ? { unread: updated.unread } : {}),\n ...(updated.attentionVersion !== undefined\n ? { attentionVersion: updated.attentionVersion }\n : {}),\n }\n : current,\n );\n notifySessionListChanged({ workspaceId: chat.workspaceId, sessionId: chat.id });\n toast.success(unread ? \"Marked as unread\" : \"Marked as read\");\n } catch (error) {\n toast.error(\"Couldn't update the chat.\", {\n description: errorMessage(error),\n });\n }\n },\n [context],\n );\n return useMemo(\n () => ({\n linkTo,\n copyLink,\n setPinned,\n setArchived,\n setUnread,\n archiveLabel: (chat: SessionListRow) => archiveActionLabel(context, chat),\n }),\n [linkTo, copyLink, setPinned, setArchived, setUnread, context],\n );\n}\n","/**\n * The action registry: everything a person can do from the keyboard, the ⌘K\n * menu, menus and the desktop menu bar. Each action is defined once here, with\n * its name, keys and availability, so every surface shows and runs it the same\n * way. See docs/command-menu-and-shortcuts.md.\n */\nimport {\n ArchiveIcon,\n ArrowDownIcon,\n ArrowUpIcon,\n AudioLinesIcon,\n ChevronsUpDownIcon,\n CommandIcon,\n GitForkIcon,\n HistoryIcon,\n InboxIcon,\n KeyboardIcon,\n LinkIcon,\n MailIcon,\n MailOpenIcon,\n MessageCircleQuestionIcon,\n MicIcon,\n PanelLeftIcon,\n PanelRightIcon,\n PencilIcon,\n PinIcon,\n PinOffIcon,\n PlusIcon,\n SearchIcon,\n SquareIcon,\n TextSearchIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport type { SessionListRow } from \"../../../session-list-model\";\nimport type { Recording } from \"@opengeni/contracts\";\nimport type { RecorderState } from \"@opengeni/sdk/recordings\";\nimport { canStartRecording } from \"../../../meetings/recorder-state\";\nimport type { ActionSurface, Chord, ChordPlatform } from \"./chords\";\nimport type { ChatOperations } from \"./chat-operations\";\n\nexport type ActionGroup = \"chat\" | \"meetings\" | \"navigate\" | \"view\" | \"help\";\n\n/** Where the desktop menu bar shows an action. */\nexport type DesktopMenuPlacement = \"file\" | \"view\" | \"go\" | \"chat\" | \"help\";\n\n/** A workspace someone can switch to, in the workspace picker's order. */\nexport type WorkspaceChoice = {\n id: string;\n name: string;\n /** The workspace's organization, by name. */\n organization: string;\n /** A Personal workspace, private to its owner. */\n personal: boolean;\n};\n\n/** The meeting recorder, as the actions use it. */\nexport type MeetingActions = {\n /** The recorder's state; null until its capture code loads. */\n state: RecorderState | null;\n /** Start recording as the Meetings page's button does, and show Meetings. */\n start(): void;\n /** Show Meetings, where the recording going is. */\n show(): void;\n /** Stop the recording going and open it. */\n stop(): void | Promise<void>;\n};\n\n/** What the ⌘K menu asks of the server for meetings; see `MeetingPages.list`. */\nexport type MeetingListOptions = {\n /** Words in titles and current transcripts. */\n query?: string;\n /** Someone who spoke, by part of their name. */\n person?: string;\n startedFrom?: string;\n startedTo?: string;\n limit: number;\n signal?: AbortSignal;\n};\n\n/** The Meetings pages, where this surface has them (whether or not this browser records). */\nexport type MeetingPages = {\n /** Show Meetings. */\n openList(): void;\n /** Open one of this workspace's meetings, as its row on Meetings does. */\n open(recordingId: string): void;\n /** A meeting's address, for a new browser tab or to share. */\n link(recordingId: string): string;\n copyLink(recordingId: string): void | Promise<void>;\n /** This workspace's meetings the person can see, newest first. */\n list(options: MeetingListOptions): Promise<readonly Recording[]>;\n /** The meeting on screen, if any. */\n current: {\n recordingId: string;\n /** Ask about it, as its Ask field does; with no question, put the cursor there. Null when it takes none. */\n ask: ((question: string | null) => void) | null;\n } | null;\n};\n\nexport type ActionEnv = {\n workspaceId: string;\n subjectId: string;\n surface: ActionSurface;\n platform: ChordPlatform;\n /** The chat on screen, if any. */\n currentChat: SessionListRow | null;\n /** The Site on screen, if any. */\n currentSiteId: string | null;\n ops: ChatOperations;\n /** Whether the sidebar's chat list is part of this surface. */\n chatList: boolean;\n /** Whether chats have the right-hand workspace panel on this surface. */\n workspacePanel: boolean;\n /** Every workspace open to the person, in the workspace picker's order. */\n workspaces: readonly WorkspaceChoice[];\n /** Whether the person may fork the chat on screen. */\n canForkCurrentChat: boolean;\n /** Meetings, when this surface records them and this browser can. */\n meetings: MeetingActions | null;\n /** The Meetings pages, when this surface has them. */\n meetingPages: MeetingPages | null;\n newChat(): void;\n /** Opens a chat; one in another workspace switches to that workspace. */\n openChat(chatId: string, workspaceId?: string): void;\n /** Opens one of this workspace's Sites in the app, as its sidebar row does. */\n openSite(siteId: string): void;\n /** A Site's address, for opening it in a new browser tab. */\n siteLink(siteId: string): string;\n openWorkspace(workspaceId: string): void;\n /** The ⌘K menu, listing workspaces to switch to. */\n openWorkspacePicker(): void;\n openInbox(): void;\n toggleSidebar(): void;\n toggleWorkspacePanel(): void;\n findInChat(): void;\n searchMessages(query?: string): void;\n renameCurrentChat(): void;\n /** Asks the chat on screen to fork from its latest message. */\n forkCurrentChat(): void;\n openCommandMenu(): void;\n openShortcutSheet(): void;\n /** Back to the most recently viewed other chat (a quick Control+Tab). */\n switchToRecentChat(): void;\n /** Chats in sidebar order, and the pinned ones in their order. */\n sidebarOrder(): readonly string[];\n pinnedOrder(): readonly string[];\n};\n\nexport type AppAction = {\n id: string;\n /** Plain words; chat actions may read the chat (Pin or Unpin). */\n title: string | ((env: ActionEnv, chat: SessionListRow | null) => string);\n group: ActionGroup;\n icon: LucideIcon;\n /** A different icon for some chats (Unpin for a pinned chat). */\n iconFor?: (chat: SessionListRow | null) => LucideIcon;\n /** Extra words the ⌘K menu matches, e.g. \"share\" for Copy link. */\n keywords?: readonly string[];\n chords?: readonly Chord[];\n /** The cheat sheet's own key text when one action has many chords (⌘1 to ⌘9). */\n chordSummary?: (platform: ChordPlatform) => string;\n /** Acts on a chat: the current one, or the one a menu or ⌘K row points at. */\n forChat?: boolean;\n /** Acts on the meeting on screen; ⌘K lists it under \"This meeting\". */\n forMeeting?: boolean;\n /** Listed in the ⌘K menu (some exist only as keys). Default true. */\n inCommandMenu?: boolean;\n /**\n * Opens a dialog of its own. From ⌘K it runs once the menu has handed focus\n * back, so the new dialog returns focus to the same place when it closes.\n */\n opensDialog?: boolean;\n /** Offered in ⌘K before anything is typed. */\n suggested?: boolean;\n /** The desktop menu bar section, when it appears there. */\n desktopMenu?: DesktopMenuPlacement;\n available(env: ActionEnv, chat: SessionListRow | null): boolean;\n run(env: ActionEnv, chat: SessionListRow | null, chord?: Chord): void | Promise<void>;\n};\n\nexport function actionTitle(\n action: AppAction,\n env: ActionEnv,\n chat: SessionListRow | null,\n): string {\n return typeof action.title === \"string\" ? action.title : action.title(env, chat);\n}\n\nexport function actionIcon(action: AppAction, chat: SessionListRow | null): LucideIcon {\n return action.iconFor?.(chat) ?? action.icon;\n}\n\nconst ALWAYS = () => true;\n\nfunction stepChat(env: ActionEnv, direction: 1 | -1): void {\n const order = env.sidebarOrder();\n if (order.length === 0) return;\n const index = env.currentChat ? order.indexOf(env.currentChat.id) : -1;\n const next = index < 0 ? (direction === 1 ? 0 : order.length - 1) : index + direction;\n if (next < 0 || next >= order.length) return;\n env.openChat(order[next]!);\n}\n\n/** The previous or next workspace in the picker's order, wrapping around. */\nexport function stepWorkspace(\n workspaces: readonly Pick<WorkspaceChoice, \"id\">[],\n currentId: string,\n direction: 1 | -1,\n): string | null {\n if (workspaces.length < 2) return null;\n const index = workspaces.findIndex((workspace) => workspace.id === currentId);\n const next =\n index < 0\n ? direction === 1\n ? 0\n : workspaces.length - 1\n : (index + direction + workspaces.length) % workspaces.length;\n return workspaces[next]!.id;\n}\n\nfunction switchWorkspace(env: ActionEnv, direction: 1 | -1): void {\n const id = stepWorkspace(env.workspaces, env.workspaceId, direction);\n if (id && id !== env.workspaceId) env.openWorkspace(id);\n}\n\nconst hasOtherWorkspaces = (env: ActionEnv) => env.workspaces.length > 1;\n\n/** A recording is being captured, so Start recording shows it instead. */\nfunction meetingBusy(env: ActionEnv): boolean {\n return !canStartRecording(env.meetings?.state);\n}\n\nconst PINNED_CHORDS: Chord[] = Array.from({ length: 9 }, (_, index) => ({\n code: `Digit${index + 1}`,\n mod: true,\n only: \"desktop\" as const,\n}));\n\nlet appActionList: readonly AppAction[] | undefined;\n\n/**\n * Every action, built on first use. The icons come from chunks the router\n * shares with other routes; reading them while this module loads can see them\n * before they exist, depending on which route a visitor opens first.\n */\nexport function appActions(): readonly AppAction[] {\n return (appActionList ??= [\n {\n id: \"commandMenu.open\",\n title: \"Command menu\",\n group: \"help\",\n icon: CommandIcon,\n chords: [{ code: \"KeyK\", mod: true }],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.openCommandMenu(),\n },\n {\n id: \"chat.new\",\n title: \"New chat\",\n group: \"chat\",\n icon: PlusIcon,\n keywords: [\"start\", \"create\", \"session\"],\n // The desktop menu shows its first key, the familiar ⌘N; browsers keep ⌘N for windows.\n chords: [\n { code: \"KeyN\", mod: true, only: \"desktop\" },\n { code: \"KeyO\", mod: true, shift: true },\n ],\n suggested: true,\n desktopMenu: \"file\",\n available: ALWAYS,\n run: (env) => env.newChat(),\n },\n {\n // The Meetings page's Start recording button, from anywhere. While one\n // records, it shows that recording instead of starting a second one, as a\n // desktop call notification's Record does. ⌃⌘N sits beside New chat's ⌘N\n // and, like Archive, is Ctrl+Alt elsewhere; see the shortcuts doc.\n id: \"meetings.start\",\n title: (env) => (meetingBusy(env) ? \"Go to recording\" : \"Start recording\"),\n group: \"meetings\",\n icon: MicIcon,\n keywords: [\"meeting\", \"new meeting\", \"record\", \"notetaker\", \"transcript\", \"audio\", \"call\"],\n chords: [\n { code: \"KeyN\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyN\", mod: true, alt: true, platform: \"other\" },\n ],\n desktopMenu: \"file\",\n available: (env) => env.meetings !== null,\n run: (env) => (meetingBusy(env) ? env.meetings?.show() : env.meetings?.start()),\n },\n {\n // No key, so a stray press never ends a meeting.\n id: \"meetings.stop\",\n title: \"Stop recording\",\n group: \"meetings\",\n icon: SquareIcon,\n keywords: [\"meeting\", \"end\", \"finish\", \"record\"],\n desktopMenu: \"file\",\n available: (env) => env.meetings?.state === \"recording\" || env.meetings?.state === \"paused\",\n run: (env) => env.meetings?.stop(),\n },\n {\n // The meeting on screen's Ask field, from ⌘K. Typing a question first\n // asks it straight away; see the menu's \"Ask about this meeting: …\" row.\n id: \"meeting.ask\",\n title: \"Ask about this meeting\",\n group: \"meetings\",\n icon: MessageCircleQuestionIcon,\n keywords: [\"question\", \"chat\", \"agent\", \"summary\", \"notes\"],\n forMeeting: true,\n opensDialog: true,\n available: (env) => Boolean(env.meetingPages?.current?.ask),\n run: (env) => env.meetingPages?.current?.ask?.(null),\n },\n {\n id: \"meeting.copyLink\",\n title: \"Copy meeting link\",\n group: \"meetings\",\n icon: LinkIcon,\n keywords: [\"share\", \"url\", \"address\"],\n forMeeting: true,\n available: (env) => Boolean(env.meetingPages?.current),\n run: (env) => {\n const current = env.meetingPages?.current;\n if (current) return env.meetingPages?.copyLink(current.recordingId);\n },\n },\n {\n id: \"chat.copyLink\",\n title: \"Copy link\",\n group: \"chat\",\n icon: LinkIcon,\n keywords: [\"share\", \"url\", \"address\"],\n chords: [{ code: \"Comma\", mod: true, shift: true }],\n forChat: true,\n suggested: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null,\n run: (env, chat) => (chat ? env.ops.copyLink(chat) : undefined),\n },\n {\n id: \"chat.pin\",\n title: (_env, chat) => (chat?.pinned ? \"Unpin\" : \"Pin\"),\n group: \"chat\",\n icon: PinIcon,\n iconFor: (chat) => (chat?.pinned ? PinOffIcon : PinIcon),\n keywords: [\"unpin\", \"favorite\", \"star\"],\n chords: [{ code: \"KeyP\", mod: true, alt: true }],\n forChat: true,\n suggested: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && !chat.archived,\n run: (env, chat) => (chat ? env.ops.setPinned(chat, !chat.pinned) : undefined),\n },\n {\n id: \"chat.rename\",\n title: \"Rename\",\n group: \"chat\",\n icon: PencilIcon,\n keywords: [\"title\", \"name\"],\n forChat: true,\n desktopMenu: \"chat\",\n // Renaming happens in the chat's own title, so only for the chat on screen.\n available: (env, chat) => chat !== null && env.currentChat?.id === chat.id,\n run: (env) => env.renameCurrentChat(),\n },\n {\n id: \"chat.fork\",\n title: \"Fork chat\",\n group: \"chat\",\n icon: GitForkIcon,\n keywords: [\"copy\", \"duplicate\", \"branch\", \"clone\"],\n forChat: true,\n opensDialog: true,\n desktopMenu: \"chat\",\n // From the latest message, as the fork button under a message does; only\n // for the chat on screen, whose messages are loaded.\n available: (env, chat) =>\n chat !== null && env.currentChat?.id === chat.id && env.canForkCurrentChat,\n run: (env) => env.forkCurrentChat(),\n },\n {\n id: \"chat.unread\",\n title: (_env, chat) => (chat?.unread ? \"Mark as read\" : \"Mark as unread\"),\n group: \"chat\",\n icon: MailIcon,\n iconFor: (chat) => (chat?.unread ? MailOpenIcon : MailIcon),\n keywords: [\"read\", \"unread\"],\n forChat: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && !chat.archived,\n run: (env, chat) => (chat ? env.ops.setUnread(chat, !chat.unread) : undefined),\n },\n {\n id: \"chat.archive\",\n title: \"Archive\",\n group: \"chat\",\n icon: ArchiveIcon,\n keywords: [\"archive\", \"done\", \"storage\"],\n // Apple Mail's Archive key; Ctrl+Alt elsewhere, as Pin, since browsers there\n // keep Ctrl+Shift+A for tab search.\n chords: [\n { code: \"KeyA\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyA\", mod: true, alt: true, platform: \"other\" },\n ],\n forChat: true,\n desktopMenu: \"chat\",\n // Archived chats stay archived; only people who can control a chat archive it.\n available: (env, chat) =>\n chat !== null &&\n chat.parentSessionId === null &&\n !chat.archived &&\n (env.ops.archiveLabel ? env.ops.archiveLabel(chat) !== null : true),\n run: (env, chat) => (chat ? env.ops.setArchived(chat, true) : undefined),\n },\n {\n id: \"chat.find\",\n title: \"Find in chat\",\n group: \"chat\",\n icon: TextSearchIcon,\n keywords: [\"search\", \"find\"],\n chords: [{ code: \"KeyF\", mod: true }],\n desktopMenu: \"chat\",\n // The conversation owns ⌘F itself; the registry lists it so it is discoverable.\n available: (env) => env.currentChat !== null,\n run: (env) => env.findInChat(),\n },\n {\n id: \"go.inbox\",\n title: \"Inbox\",\n group: \"navigate\",\n icon: InboxIcon,\n keywords: [\"notifications\", \"replies\", \"needs you\"],\n chords: [\n { code: \"KeyI\", mod: true, shift: true, platform: \"mac\" },\n // Browsers on Windows and Linux open developer tools with Ctrl+Shift+I.\n { code: \"KeyI\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n suggested: true,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.openInbox(),\n },\n {\n id: \"go.meetings\",\n title: \"Meetings\",\n group: \"navigate\",\n icon: AudioLinesIcon,\n keywords: [\"recordings\", \"transcripts\", \"calls\", \"notes\"],\n suggested: true,\n desktopMenu: \"go\",\n available: (env) => env.meetingPages !== null,\n run: (env) => env.meetingPages?.openList(),\n },\n {\n id: \"go.previousChat\",\n title: \"Previous chat\",\n group: \"navigate\",\n icon: ArrowUpIcon,\n chords: [{ code: \"ArrowUp\", alt: true }],\n inCommandMenu: false,\n available: (env) => env.chatList,\n run: (env) => stepChat(env, -1),\n },\n {\n id: \"go.nextChat\",\n title: \"Next chat\",\n group: \"navigate\",\n icon: ArrowDownIcon,\n chords: [{ code: \"ArrowDown\", alt: true }],\n inCommandMenu: false,\n available: (env) => env.chatList,\n run: (env) => stepChat(env, 1),\n },\n {\n // Hold Control to see recent chats and keep pressing Tab; release to open.\n // The actions provider runs the switcher itself because it needs Control's\n // release, so the desktop menu bar never owns this key.\n id: \"go.recentChat\",\n title: \"Switch to recent chat\",\n group: \"navigate\",\n icon: HistoryIcon,\n chords: [\n { code: \"Tab\", control: true, platform: \"mac\", only: \"desktop\" },\n // Browsers keep Control+Tab for their own tabs.\n { code: \"Tab\", mod: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n available: ALWAYS,\n run: (env) => env.switchToRecentChat(),\n },\n {\n id: \"go.pinnedChat\",\n title: \"Pinned chat 1 to 9\",\n group: \"navigate\",\n icon: PinIcon,\n chords: PINNED_CHORDS,\n chordSummary: (platform) => (platform === \"mac\" ? \"⌘1 – ⌘9\" : \"Ctrl+1 – Ctrl+9\"),\n inCommandMenu: false,\n available: (env) => env.chatList,\n run: (env, _chat, chord) => {\n const index = chord ? Number(chord.code.slice(5)) - 1 : 0;\n const id = env.pinnedOrder()[index];\n if (id) env.openChat(id);\n },\n },\n {\n id: \"go.searchMessages\",\n title: \"Search messages\",\n group: \"navigate\",\n icon: SearchIcon,\n keywords: [\"find\", \"history\", \"full text\"],\n opensDialog: true,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.searchMessages(),\n },\n {\n id: \"go.switchWorkspace\",\n title: \"Switch workspace…\",\n group: \"navigate\",\n icon: ChevronsUpDownIcon,\n keywords: [\"workspace\", \"organization\", \"team\", \"change\", \"go to\"],\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => env.openWorkspacePicker(),\n },\n {\n // The workspace picker's order, wrapping around. ⌥⌘ and arrows sit in the\n // same place on every keyboard layout, and browsers leave them alone.\n id: \"go.previousWorkspace\",\n title: \"Previous workspace\",\n group: \"navigate\",\n icon: ArrowUpIcon,\n chords: [\n { code: \"ArrowUp\", mod: true, alt: true },\n // Some Linux desktops take Ctrl+Alt+arrows to switch their own workspaces.\n { code: \"PageUp\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => switchWorkspace(env, -1),\n },\n {\n id: \"go.nextWorkspace\",\n title: \"Next workspace\",\n group: \"navigate\",\n icon: ArrowDownIcon,\n chords: [\n { code: \"ArrowDown\", mod: true, alt: true },\n { code: \"PageDown\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => switchWorkspace(env, 1),\n },\n {\n id: \"view.sidebar\",\n title: \"Toggle sidebar\",\n group: \"view\",\n icon: PanelLeftIcon,\n keywords: [\"hide\", \"show\", \"collapse\", \"rail\"],\n // ⌘B as in most editors and chat apps. It is bold in rich text, so the menu\n // bar shows the platform's standard sidebar key instead, which also works.\n chords: [\n { code: \"KeyB\", mod: true, formatting: true },\n { code: \"KeyS\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyS\", mod: true, shift: true, platform: \"other\" },\n ],\n desktopMenu: \"view\",\n available: (env) => env.chatList,\n run: (env) => env.toggleSidebar(),\n },\n {\n id: \"view.workspacePanel\",\n title: \"Toggle workspace panel\",\n group: \"view\",\n icon: PanelRightIcon,\n keywords: [\"right\", \"inspector\", \"files\", \"browser\", \"terminal\", \"hide\", \"show\"],\n // The second sidebar's key in VS Code and Cursor.\n chords: [{ code: \"KeyB\", mod: true, alt: true }],\n desktopMenu: \"view\",\n available: (env) => env.workspacePanel && env.currentChat !== null,\n run: (env) => env.toggleWorkspacePanel(),\n },\n {\n id: \"help.shortcuts\",\n title: \"Keyboard shortcuts\",\n group: \"help\",\n icon: KeyboardIcon,\n keywords: [\"keys\", \"hotkeys\", \"cheat sheet\", \"help\"],\n chords: [{ code: \"Slash\", mod: true }],\n desktopMenu: \"help\",\n available: ALWAYS,\n run: (env) => env.openShortcutSheet(),\n },\n ]);\n}\n\nexport function findAction(id: string): AppAction | undefined {\n return appActions().find((action) => action.id === id);\n}\n"],"mappings":"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","names":["useCallback","useMemo","useRef","useSyncExternalStore","directories","listeners","directory","useSyncExternalStore","directory","copyLink","useMemo","useRef","useCallback","directory"]}
|
package/dist/chunk-SKMNW4SW.js
DELETED
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import {
|
|
3
|
-
ComposerMenuHeader,
|
|
4
|
-
ComposerMenuSwitchIndicator
|
|
5
|
-
} from "./chunk-CNFFCVGH.js";
|
|
6
|
-
import {
|
|
7
|
-
ConnectorAction
|
|
8
|
-
} from "./chunk-73L7XV4G.js";
|
|
9
|
-
import {
|
|
10
|
-
AGENT_CAPABILITY_GROUPS,
|
|
11
|
-
capabilityDescription,
|
|
12
|
-
capabilityLabel,
|
|
13
|
-
capabilitySummary,
|
|
14
|
-
effectiveCapabilityOn,
|
|
15
|
-
withCapability
|
|
16
|
-
} from "./chunk-6WLX3NR3.js";
|
|
17
|
-
import {
|
|
18
|
-
cn
|
|
19
|
-
} from "./chunk-A3MTTRCX.js";
|
|
20
|
-
|
|
21
|
-
// src/app/components/composer-capabilities-menu-body.tsx
|
|
22
|
-
import { CheckIcon, ChevronRightIcon, LockIcon } from "lucide-react";
|
|
23
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
24
|
-
function ComposerCapabilitiesMenuBody(props) {
|
|
25
|
-
const { capabilities } = props;
|
|
26
|
-
const { customized, draft, availability } = capabilities;
|
|
27
|
-
const set = (id, value) => capabilities.onChange(withCapability(draft, id, value));
|
|
28
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
29
|
-
/* @__PURE__ */ jsx(ComposerMenuHeader, { title: "Capabilities", leading: props.leading }),
|
|
30
|
-
/* @__PURE__ */ jsxs(
|
|
31
|
-
"div",
|
|
32
|
-
{
|
|
33
|
-
role: "group",
|
|
34
|
-
tabIndex: 0,
|
|
35
|
-
className: "min-h-0 shrink overflow-y-auto overscroll-contain p-2 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-brand/55",
|
|
36
|
-
children: [
|
|
37
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [
|
|
38
|
-
/* @__PURE__ */ jsxs(
|
|
39
|
-
ConnectorAction,
|
|
40
|
-
{
|
|
41
|
-
presentation: props.presentation,
|
|
42
|
-
keepOpen: true,
|
|
43
|
-
checked: customized,
|
|
44
|
-
label: "Customize for this chat",
|
|
45
|
-
disabled: capabilities.disabled,
|
|
46
|
-
className: "flex min-h-14 flex-1 items-center gap-3 rounded-md px-2 py-2",
|
|
47
|
-
onAction: () => capabilities.onCustomizedChange(!customized),
|
|
48
|
-
children: [
|
|
49
|
-
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
50
|
-
/* @__PURE__ */ jsx("span", { className: "block text-sm font-medium text-fg", children: "Customize for this chat" }),
|
|
51
|
-
/* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-xs leading-4.5 font-normal text-fg-muted", children: customized ? "This chat uses the choices below." : `Off uses the workspace's defaults: ${capabilitySummary(draft.values, availability).toLowerCase()}.` })
|
|
52
|
-
] }),
|
|
53
|
-
/* @__PURE__ */ jsx(ComposerMenuSwitchIndicator, { checked: customized })
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
),
|
|
57
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-11 shrink-0" })
|
|
58
|
-
] }),
|
|
59
|
-
AGENT_CAPABILITY_GROUPS.map((group) => /* @__PURE__ */ jsxs("div", { role: "group", "aria-label": group.label, className: "mt-2", children: [
|
|
60
|
-
/* @__PURE__ */ jsx(
|
|
61
|
-
"p",
|
|
62
|
-
{
|
|
63
|
-
"aria-hidden": true,
|
|
64
|
-
className: "px-2 pt-1 pb-1 text-xs leading-4.5 font-medium text-fg-subtle",
|
|
65
|
-
children: group.label
|
|
66
|
-
}
|
|
67
|
-
),
|
|
68
|
-
group.capabilities.map((id) => {
|
|
69
|
-
const available = availability.isAvailable(id);
|
|
70
|
-
const on = effectiveCapabilityOn(draft.values, id, availability);
|
|
71
|
-
const editable = customized && available && !capabilities.disabled;
|
|
72
|
-
const note = !available ? /* @__PURE__ */ jsxs("span", { className: "mt-0.5 flex items-start gap-1.5 text-xs leading-4.5 font-normal text-fg-muted", children: [
|
|
73
|
-
/* @__PURE__ */ jsx(LockIcon, { "aria-hidden": true, className: "mt-0.5 size-3.5 shrink-0 text-fg-subtle" }),
|
|
74
|
-
availability.unavailableReason(id)
|
|
75
|
-
] }) : id === "workspaceConnectors" && on ? /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-xs leading-4.5 font-normal text-fg-muted", children: props.connectorsTotal === 0 ? "No apps connected yet." : `${props.connectorsSelected} of ${props.connectorsTotal} connected apps on` }) : null;
|
|
76
|
-
const text = /* @__PURE__ */ jsxs(
|
|
77
|
-
"span",
|
|
78
|
-
{
|
|
79
|
-
className: "min-w-0 flex-1",
|
|
80
|
-
title: available ? capabilityDescription(id) : void 0,
|
|
81
|
-
children: [
|
|
82
|
-
/* @__PURE__ */ jsx(
|
|
83
|
-
"span",
|
|
84
|
-
{
|
|
85
|
-
className: cn(
|
|
86
|
-
"block text-sm font-medium",
|
|
87
|
-
on || editable ? "text-fg" : "text-fg-muted"
|
|
88
|
-
),
|
|
89
|
-
children: capabilityLabel(id)
|
|
90
|
-
}
|
|
91
|
-
),
|
|
92
|
-
note
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
const row = /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1", "data-capability": id, children: [
|
|
97
|
-
editable ? /* @__PURE__ */ jsxs(
|
|
98
|
-
ConnectorAction,
|
|
99
|
-
{
|
|
100
|
-
presentation: props.presentation,
|
|
101
|
-
keepOpen: true,
|
|
102
|
-
checked: on,
|
|
103
|
-
label: capabilityLabel(id),
|
|
104
|
-
className: "flex min-h-11 flex-1 items-center gap-3 rounded-md px-2 py-1.5",
|
|
105
|
-
onAction: () => set(id, id === "skills" ? on ? false : "read" : !on),
|
|
106
|
-
children: [
|
|
107
|
-
text,
|
|
108
|
-
/* @__PURE__ */ jsx(ComposerMenuSwitchIndicator, { checked: on })
|
|
109
|
-
]
|
|
110
|
-
}
|
|
111
|
-
) : (
|
|
112
|
-
// Read-only until "Customize for this chat" is on: still
|
|
113
|
-
// reachable with the arrow keys and read as the current value.
|
|
114
|
-
/* @__PURE__ */ jsxs(
|
|
115
|
-
ConnectorAction,
|
|
116
|
-
{
|
|
117
|
-
presentation: props.presentation,
|
|
118
|
-
readOnly: true,
|
|
119
|
-
label: `${capabilityLabel(id)}, ${!available ? availability.unavailableReason(id) : on ? "on" : "off"}`,
|
|
120
|
-
className: "flex min-h-11 flex-1 items-center gap-3 rounded-md px-2 py-1.5",
|
|
121
|
-
onAction: () => {
|
|
122
|
-
},
|
|
123
|
-
children: [
|
|
124
|
-
text,
|
|
125
|
-
/* @__PURE__ */ jsx("span", { className: "flex h-7 min-w-7 shrink-0 items-center justify-end text-xs text-fg-subtle", children: on ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true, className: "size-4 text-fg-muted" }) : "Off" })
|
|
126
|
-
]
|
|
127
|
-
}
|
|
128
|
-
)
|
|
129
|
-
),
|
|
130
|
-
id === "workspaceConnectors" && on ? /* @__PURE__ */ jsx(
|
|
131
|
-
ConnectorAction,
|
|
132
|
-
{
|
|
133
|
-
presentation: props.presentation,
|
|
134
|
-
keepOpen: true,
|
|
135
|
-
label: "Choose connected apps",
|
|
136
|
-
className: "flex size-11 shrink-0 items-center justify-center rounded-md",
|
|
137
|
-
onAction: props.onOpenConnectors,
|
|
138
|
-
children: /* @__PURE__ */ jsx(ChevronRightIcon, { "aria-hidden": true, className: "size-4 text-fg-subtle" })
|
|
139
|
-
}
|
|
140
|
-
) : (
|
|
141
|
-
// Keeps every toggle in one column with the connectors row.
|
|
142
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-11 shrink-0" })
|
|
143
|
-
)
|
|
144
|
-
] }, id);
|
|
145
|
-
if (id !== "skills" || !on) return row;
|
|
146
|
-
const manage = draft.values.skills === "manage";
|
|
147
|
-
return /* @__PURE__ */ jsxs("div", { children: [
|
|
148
|
-
row,
|
|
149
|
-
editable ? /* @__PURE__ */ jsxs(
|
|
150
|
-
ConnectorAction,
|
|
151
|
-
{
|
|
152
|
-
presentation: props.presentation,
|
|
153
|
-
keepOpen: true,
|
|
154
|
-
checked: manage,
|
|
155
|
-
label: "Also save and install Skills",
|
|
156
|
-
className: "mr-11 flex min-h-11 items-center gap-3 rounded-md py-1.5 pr-2 pl-6",
|
|
157
|
-
onAction: () => set("skills", manage ? "read" : "manage"),
|
|
158
|
-
children: [
|
|
159
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 text-sm text-fg", children: "Also save and install Skills" }),
|
|
160
|
-
/* @__PURE__ */ jsx(ComposerMenuSwitchIndicator, { checked: manage })
|
|
161
|
-
]
|
|
162
|
-
}
|
|
163
|
-
) : /* @__PURE__ */ jsx(
|
|
164
|
-
ConnectorAction,
|
|
165
|
-
{
|
|
166
|
-
presentation: props.presentation,
|
|
167
|
-
readOnly: true,
|
|
168
|
-
label: manage ? "Can also save and install Skills" : "Reads Skills only",
|
|
169
|
-
className: "mr-11 flex min-h-11 items-center py-1.5 pr-2 pl-6 text-xs leading-4.5 text-fg-muted",
|
|
170
|
-
onAction: () => {
|
|
171
|
-
},
|
|
172
|
-
children: manage ? "Can also save and install Skills" : "Reads Skills only"
|
|
173
|
-
}
|
|
174
|
-
)
|
|
175
|
-
] }, id);
|
|
176
|
-
})
|
|
177
|
-
] }, group.id))
|
|
178
|
-
]
|
|
179
|
-
}
|
|
180
|
-
)
|
|
181
|
-
] });
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export {
|
|
185
|
-
ComposerCapabilitiesMenuBody
|
|
186
|
-
};
|
|
187
|
-
//# sourceMappingURL=chunk-SKMNW4SW.js.map
|