@opengeni/react 4.2.1-canary.39642758903001 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/app-state.js +27 -27
- package/dist/app/components/Composer.js +27 -26
- package/dist/app/components/agent/agent-capability-picker.js +5 -5
- package/dist/app/components/artifacts/artifact-library.js +19 -19
- package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
- package/dist/app/components/artifacts/inline-chat-image.js +31 -30
- package/dist/app/components/artifacts/retained-file-preview.js +35 -34
- package/dist/app/components/artifacts/retained-text-preview.js +5 -5
- package/dist/app/components/artifacts/site-audience.js +5 -5
- package/dist/app/components/artifacts/site-conversations.js +24 -22
- package/dist/app/components/artifacts/site-data.js +20 -20
- package/dist/app/components/artifacts/site-publishing.js +39 -39
- package/dist/app/components/artifacts/site-settings.js +48 -48
- package/dist/app/components/billing-class-mark.js +5 -5
- package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
- package/dist/app/components/capabilities/capability-logo-source.js +13 -12
- package/dist/app/components/capabilities/connection-account-picker.js +2 -2
- package/dist/app/components/capabilities/connector-tool-permissions.js +5 -5
- package/dist/app/components/capabilities/native-connect-setup.js +14 -13
- package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
- package/dist/app/components/capabilities/perform-capability-action.js +3 -3
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -14
- package/dist/app/components/capabilities/session-capability-card.js +78 -77
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
- package/dist/app/components/capabilities/session-github-card.js +25 -24
- package/dist/app/components/capabilities/session-machine-card.js +38 -38
- package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
- package/dist/app/components/command-menu/chat-switcher.d.ts +12 -0
- package/dist/app/components/command-menu/chat-switcher.js +142 -0
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -0
- package/dist/app/components/command-menu/command-menu.d.ts +15 -0
- package/dist/app/components/command-menu/command-menu.js +812 -0
- package/dist/app/components/command-menu/command-menu.js.map +1 -0
- package/dist/app/components/command-menu/keycaps.d.ts +21 -0
- package/dist/app/components/command-menu/keycaps.js +12 -0
- package/dist/app/components/command-menu/shortcut-sheet.d.ts +12 -0
- package/dist/app/components/command-menu/shortcut-sheet.js +150 -0
- package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -0
- package/dist/app/components/composer-capabilities-menu-body.js +3 -3
- package/dist/app/components/composer-mobile-plus-panel.js +21 -21
- package/dist/app/components/composer-mobile-plus.js +3 -3
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +16 -16
- package/dist/app/components/credits/coupon-redeem.js +2 -2
- package/dist/app/components/credits/credit-refusal-notice.d.ts +18 -0
- package/dist/app/components/credits/credit-refusal-notice.js +17 -0
- package/dist/app/components/cross-slot-deep-link-recovery.js +1 -1
- package/dist/app/components/desktop/app-shots.js +6 -6
- package/dist/app/components/desktop/this-computer.js +4 -4
- package/dist/app/components/feedback.js +5 -5
- package/dist/app/components/follow-up-repository-menu-body.js +7 -7
- package/dist/app/components/follow-up-repository-picker.js +3 -3
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/knowledge/agent-learning-settings.js +6 -6
- package/dist/app/components/machines/connect-machine-dialog.js +18 -18
- package/dist/app/components/manual-repository-editor.js +2 -2
- package/dist/app/components/markdown.js +10 -9
- package/dist/app/components/message-context-pills.js +2 -2
- package/dist/app/components/models/models-ui.js +10 -10
- package/dist/app/components/pickers.js +10 -10
- package/dist/app/components/rail/rail-context.d.ts +6 -0
- package/dist/app/components/rail/rail-context.js +3 -3
- package/dist/app/components/rail/rail-sections.js +61 -55
- package/dist/app/components/rail/session-browse-order-controls.js +2 -2
- package/dist/app/components/rail/session-header.js +50 -36
- package/dist/app/components/rail/session-list.js +59 -52
- package/dist/app/components/rail/session-row-hover-details.js +25 -23
- package/dist/app/components/rail/session-shell.js +96 -91
- package/dist/app/components/repository-picker.js +7 -7
- package/dist/app/components/secrets/session-secrets-panel.js +4 -4
- package/dist/app/components/session/agent-configuration-panel.js +34 -34
- package/dist/app/components/session/banners.js +12 -11
- package/dist/app/components/session/codex-account-indicator.js +12 -12
- package/dist/app/components/session/composer-menu-radio.js +2 -2
- package/dist/app/components/session/conversation-find.js +1 -1
- package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
- package/dist/app/components/session/failed-session-banner.js +12 -12
- package/dist/app/components/session/human-input.js +48 -47
- package/dist/app/components/session/inspector.js +80 -79
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +5 -5
- package/dist/app/components/session/message-resource-attachments.js +21 -20
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-account-indicator.js +11 -11
- package/dist/app/components/session/model-context-inspector.js +2 -2
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +13 -13
- package/dist/app/components/session/sandbox-switcher.js +16 -16
- package/dist/app/components/session/sandbox-workspace.js +68 -67
- package/dist/app/components/session/search-markdown-highlight.js +11 -10
- package/dist/app/components/session/search-results-view.js +12 -11
- package/dist/app/components/session/session-admin-access.js +11 -11
- package/dist/app/components/session/session-retention.js +4 -4
- package/dist/app/components/session/session-search-dialog.d.ts +5 -0
- package/dist/app/components/session/session-search-dialog.js +22 -12
- package/dist/app/components/session/session-search-dialog.js.map +1 -1
- package/dist/app/components/session/session-skill-reviews.js +3 -3
- package/dist/app/components/session/session-tenancy-control.js +25 -25
- package/dist/app/components/session/session-usage-limit-section.js +9 -9
- package/dist/app/components/session/session-wait-status.js +11 -9
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/subagents.js +17 -15
- package/dist/app/components/session/subscription-account-menu.js +2 -2
- package/dist/app/components/session-connectors-menu-body.js +6 -6
- package/dist/app/components/settings/row-select.js +1 -1
- package/dist/app/components/transcription-settings.js +2 -2
- package/dist/app/components/ui/destructive-confirm.js +8 -8
- package/dist/app/components/usage/usage-entry.js +6 -6
- package/dist/app/components/workspace-composer-plus.js +22 -21
- package/dist/app/embed/session-app.js +264 -258
- package/dist/app/lib/actions/actions-provider.d.ts +30 -0
- package/dist/app/lib/actions/actions-provider.js +32 -0
- package/dist/app/lib/actions/chat-directory.d.ts +30 -0
- package/dist/app/lib/actions/chat-operations.d.ts +11 -0
- package/dist/app/lib/actions/chat-switcher.d.ts +31 -0
- package/dist/app/lib/actions/chords.d.ts +40 -0
- package/dist/app/lib/actions/events.d.ts +6 -0
- package/dist/app/lib/actions/rank.d.ts +17 -0
- package/dist/app/lib/actions/registry.d.ts +71 -0
- package/dist/app/lib/codex-usage-query.js +3 -3
- package/dist/app/lib/composer-connectors.js +14 -13
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/credit-coverage.d.ts +21 -0
- package/dist/app/lib/credit-coverage.js +15 -0
- package/dist/app/lib/deployment-free-model.js +2 -2
- package/dist/app/lib/events.js +19 -18
- package/dist/app/lib/failed-session-copy.js +5 -5
- package/dist/app/lib/free-credit-gap.d.ts +9 -0
- package/dist/app/lib/free-credit-gap.js +4 -2
- package/dist/app/lib/integration-connect-analytics.d.ts +1 -1
- package/dist/app/lib/integration-connect-analytics.js +1 -1
- package/dist/app/lib/integration-connect-redirect.js +1 -1
- package/dist/app/lib/model-access-onboarding.js +4 -4
- package/dist/app/lib/model-policy.js +1 -1
- package/dist/app/lib/models-route.d.ts +6 -2
- package/dist/app/lib/models-route.js +6 -3
- package/dist/app/lib/models-route.js.map +1 -1
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/session-branch-cache.js +15 -13
- package/dist/app/lib/session-create.js +2 -2
- package/dist/app/lib/session-group-pagination.js +15 -13
- package/dist/app/lib/session-hover-facts.js +16 -14
- package/dist/app/lib/session-model.js +3 -3
- package/dist/app/lib/session-rail.js +11 -9
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/session-search-route.d.ts +1 -1
- package/dist/app/lib/session-search-route.js +1 -1
- package/dist/app/lib/session-ui-features.d.ts +11 -3
- package/dist/app/lib/session-ui-features.js +1 -1
- package/dist/app/lib/sessions-group.js +15 -13
- package/dist/app/lib/turn-failure-analytics.js +7 -7
- package/dist/app/lib/unavailable-session-model.js +2 -2
- package/dist/app/lib/use-duplicate-site.js +2 -2
- package/dist/app/lib/use-follow-up-repositories.js +3 -3
- package/dist/app/lib/use-workspace-machines.js +8 -8
- package/dist/app/lib/use-workspace-model-catalog.js +6 -6
- package/dist/app/lib/use-workspace-rigs.js +4 -4
- package/dist/app/lib/workspace-navigation-preference.js +5 -5
- package/dist/app/lib/workspace-scope-context.js +4 -4
- package/dist/app/routes/artifacts.js +124 -122
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +69 -68
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +3 -3
- package/dist/app/routes/session.js +168 -166
- package/dist/app/routes/sessions-index-hydration.js +3 -3
- package/dist/app/routes/sessions-index.js +122 -116
- 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 +39 -39
- package/dist/{browser-viewer-ZRFZX3VN.js → browser-viewer-HPUMK7UP.js} +7 -7
- package/dist/{chat-interactive-block-HUMYWVCK.js → chat-interactive-block-22PPECCT.js} +6 -6
- package/dist/{chunk-GVIQ7H62.js → chunk-2LUBBDZV.js} +5 -5
- package/dist/{chunk-SWWYYGQO.js → chunk-325C2TCI.js} +5 -2
- package/dist/chunk-325C2TCI.js.map +1 -0
- package/dist/{chunk-XMMVIY7B.js → chunk-3CCJWHQY.js} +2 -2
- package/dist/{chunk-XS2FZ6DX.js → chunk-3F5ZPIWI.js} +2 -2
- package/dist/{chunk-72US6QNB.js → chunk-3J2YZRY5.js} +2 -2
- package/dist/{chunk-D4YQF4E3.js → chunk-3SMJ2BIQ.js} +2 -2
- package/dist/{chunk-TBJINQXA.js → chunk-3WCYK36X.js} +17 -17
- package/dist/{chunk-WPCF34V6.js → chunk-3WG3CRL7.js} +14 -14
- package/dist/{chunk-JI5BYQKO.js → chunk-3X46PNBX.js} +14 -14
- package/dist/{chunk-UO36FC3S.js → chunk-46I7MMAL.js} +6 -2
- package/dist/chunk-46I7MMAL.js.map +1 -0
- package/dist/{chunk-PBK44WJC.js → chunk-4GJ37O6G.js} +2 -2
- package/dist/chunk-4IWBQUQU.js +152 -0
- package/dist/chunk-4IWBQUQU.js.map +1 -0
- package/dist/{chunk-LEXPBQ56.js → chunk-4SKJX3C4.js} +6 -6
- package/dist/{chunk-ZA6YD2LW.js → chunk-57SYK776.js} +2 -2
- package/dist/{chunk-22LBKJDE.js → chunk-5DIAN5GQ.js} +12 -12
- package/dist/{chunk-LJ3TDK2L.js → chunk-5FA455GR.js} +4 -4
- package/dist/{chunk-N2BEUKXT.js → chunk-5FBZDEHE.js} +228 -228
- package/dist/chunk-5FBZDEHE.js.map +1 -0
- package/dist/{chunk-YPR5INHV.js → chunk-5X3E2Z3D.js} +4 -4
- package/dist/{chunk-OXNWZTEU.js → chunk-5ZJCL6X4.js} +5 -5
- package/dist/{chunk-62OAZ4LO.js → chunk-6C5GQQMC.js} +12 -12
- package/dist/{chunk-VGITH57T.js → chunk-6ERTXDZM.js} +4 -4
- package/dist/{chunk-ZQ7XQZCF.js → chunk-6FX73Y4I.js} +8 -8
- package/dist/{chunk-QZO2KK2F.js → chunk-6P44NG6Y.js} +2 -2
- package/dist/{chunk-N2DDJLTM.js → chunk-6T7Y33JA.js} +3 -3
- package/dist/{chunk-RBAGC2MJ.js → chunk-75VE5QUS.js} +22 -22
- package/dist/{chunk-MRXOGI3O.js → chunk-77CUDSHG.js} +9 -9
- package/dist/{chunk-F2GXK2Z6.js → chunk-7G446JFO.js} +431 -348
- package/dist/chunk-7G446JFO.js.map +1 -0
- package/dist/{chunk-GZ65XQR5.js → chunk-7T7FHSGS.js} +3 -3
- package/dist/{chunk-YGAH34CD.js → chunk-A3S26JSP.js} +8 -8
- package/dist/{chunk-GYPAO6RS.js → chunk-A664GSDM.js} +8 -8
- package/dist/{chunk-JSZSNMDR.js → chunk-ASUYLXKO.js} +2 -2
- package/dist/{chunk-RTK7SUPL.js → chunk-AUUJLVA3.js} +7 -7
- package/dist/{chunk-OOTBYSCA.js → chunk-BBWKPNJB.js} +5 -5
- package/dist/{chunk-BGZIMIUU.js → chunk-BCUYWOQU.js} +2 -2
- package/dist/{chunk-EKN4N4LS.js → chunk-BDFMNJZJ.js} +2 -2
- package/dist/{chunk-YZKGOWCC.js → chunk-BIDXQAGO.js} +2 -2
- package/dist/{chunk-Q2UUANHF.js → chunk-BIKAJ4DY.js} +5 -5
- package/dist/{chunk-5IQBF2X3.js → chunk-BJPJ2OUX.js} +3 -3
- package/dist/{chunk-EY2EMHZW.js → chunk-BPM2OTYK.js} +8 -8
- package/dist/{chunk-MT4TBRQB.js → chunk-BSWS2RUZ.js} +2 -2
- package/dist/{chunk-T7YD3VGK.js → chunk-C52MNKXU.js} +12 -12
- package/dist/{chunk-THNW33K7.js → chunk-CEUDV4OA.js} +18 -18
- package/dist/{chunk-GRLPRM56.js → chunk-CFEFYPNR.js} +8 -2
- package/dist/chunk-CFEFYPNR.js.map +1 -0
- package/dist/{chunk-LHGIS6SZ.js → chunk-CVK74BH7.js} +2 -2
- package/dist/{chunk-DFO2UCYG.js → chunk-CW5I65ZX.js} +11 -11
- package/dist/chunk-DKNTQDVL.js +86 -0
- package/dist/chunk-DKNTQDVL.js.map +1 -0
- package/dist/{chunk-SKRLKQEG.js → chunk-DOSC2HRQ.js} +79 -79
- package/dist/{chunk-KVB6XDLP.js → chunk-DPJ2CWVN.js} +2 -2
- package/dist/{chunk-4J6V4DH7.js → chunk-DXMRO2MU.js} +3 -3
- package/dist/{chunk-42I4O4WQ.js → chunk-EE55IDDR.js} +26 -26
- package/dist/{chunk-2RA6XABP.js → chunk-EEERTLFF.js} +12 -12
- package/dist/{chunk-PTOTKUKO.js → chunk-EEO744XR.js} +8 -8
- package/dist/{chunk-LD3HVI2J.js → chunk-EMFGBAQL.js} +6 -6
- package/dist/{chunk-FQGUK4ST.js → chunk-ENPJKVMN.js} +38 -38
- package/dist/{chunk-HDHK3SXK.js → chunk-EU6RLHMP.js} +4 -4
- package/dist/{chunk-G7VLL3PG.js → chunk-F2YABPRJ.js} +13 -4
- package/dist/chunk-F2YABPRJ.js.map +1 -0
- package/dist/{chunk-MRUWRQBX.js → chunk-FET6XHGS.js} +2 -2
- package/dist/{chunk-M6KUY3YH.js → chunk-FIICQA55.js} +2 -2
- package/dist/{chunk-NLWLCYCT.js → chunk-FTZXCPE3.js} +19 -19
- package/dist/{chunk-FN2KA3MJ.js → chunk-FUS76DO4.js} +3 -3
- package/dist/{chunk-AM4IIPWI.js → chunk-G7N5NPRJ.js} +2 -2
- package/dist/{chunk-CCQ7YKOD.js → chunk-GBYZ6653.js} +2 -2
- package/dist/{chunk-SOOWLNC5.js → chunk-GJUPLSC5.js} +330 -109
- package/dist/chunk-GJUPLSC5.js.map +1 -0
- package/dist/{chunk-YKKVIJVX.js → chunk-GQDSC6QZ.js} +5 -5
- package/dist/chunk-GQGNRL2L.js +53 -0
- package/dist/chunk-GQGNRL2L.js.map +1 -0
- package/dist/{chunk-5X6JP75Q.js → chunk-GRSODLVO.js} +4 -4
- package/dist/{chunk-73YP3R5X.js → chunk-GSESCQFY.js} +4 -4
- package/dist/{chunk-KWB5U3ZT.js → chunk-GWRW4N3T.js} +199 -137
- package/dist/chunk-GWRW4N3T.js.map +1 -0
- package/dist/{chunk-RTR7RNG4.js → chunk-GYRU4PNM.js} +9 -7
- package/dist/{chunk-RTR7RNG4.js.map → chunk-GYRU4PNM.js.map} +1 -1
- package/dist/{chunk-MZLEBFUZ.js → chunk-GZD6VBIK.js} +3 -3
- package/dist/{chunk-IZR2QRFF.js → chunk-H3HH5AHS.js} +4 -4
- package/dist/{chunk-DN3TKURW.js → chunk-H3LIIAGE.js} +4 -54
- package/dist/chunk-H3LIIAGE.js.map +1 -0
- package/dist/{chunk-NPLEQMNM.js → chunk-H5GWAG4I.js} +7 -5
- package/dist/{chunk-NPLEQMNM.js.map → chunk-H5GWAG4I.js.map} +1 -1
- package/dist/{chunk-OJPUVUB6.js → chunk-HAOZCLLA.js} +3 -3
- package/dist/{chunk-ZBHDGAYL.js → chunk-HEFE4OZJ.js} +2 -2
- package/dist/{chunk-WTG34JVA.js → chunk-HI75UTI6.js} +2 -2
- package/dist/{chunk-OMBIG3NC.js → chunk-HM633ROV.js} +14 -14
- package/dist/{chunk-WDFZWSKD.js → chunk-HRIP4M6H.js} +3 -3
- package/dist/{chunk-A2BCW6CQ.js → chunk-HU2DRFFI.js} +3 -3
- package/dist/{chunk-PO35PBAB.js → chunk-HVH7FFJH.js} +2 -2
- package/dist/{chunk-EG7KNUF7.js → chunk-HYTXTKST.js} +18 -18
- package/dist/{chunk-TFHG75A4.js → chunk-I4XMDFUJ.js} +7 -7
- package/dist/{chunk-IZHVZZQA.js → chunk-ICAUYWSL.js} +9 -9
- package/dist/{chunk-ZSERYHHT.js → chunk-IDMXEPHL.js} +150 -150
- package/dist/chunk-IDMXEPHL.js.map +1 -0
- package/dist/{chunk-DCLPWYP3.js → chunk-IEVPJ3G6.js} +2 -2
- package/dist/{chunk-EVWZHDSF.js → chunk-IKH3VTA4.js} +2 -2
- package/dist/{chunk-L5UCO2UV.js → chunk-ILBSBZGC.js} +13 -4
- package/dist/chunk-ILBSBZGC.js.map +1 -0
- package/dist/{chunk-IO6K6UYJ.js → chunk-IQ64BNAG.js} +4 -2
- package/dist/chunk-IQ64BNAG.js.map +1 -0
- package/dist/{chunk-TYHLEFD2.js → chunk-IZJNMRIR.js} +9 -9
- package/dist/{chunk-D2SR3TEB.js → chunk-J243WGUA.js} +2 -2
- package/dist/{chunk-QGSGIYE3.js → chunk-J2C6LB6W.js} +4 -4
- package/dist/{chunk-MT6TRTXF.js → chunk-J5MEDX7C.js} +9 -9
- package/dist/{chunk-6QHUKBJP.js → chunk-J7SKOO44.js} +2 -2
- package/dist/{chunk-W2QK7PYS.js → chunk-JAAST75A.js} +11 -11
- package/dist/{chunk-NQCMS4AJ.js → chunk-JQCGPTZ6.js} +9 -9
- package/dist/chunk-JRJUSKDY.js +832 -0
- package/dist/chunk-JRJUSKDY.js.map +1 -0
- package/dist/{chunk-CMUXJHGH.js → chunk-JRSCWQMC.js} +9 -9
- package/dist/{chunk-Q4OHNGGB.js → chunk-JRXHSVD5.js} +4 -4
- package/dist/{chunk-SD2K5ZN5.js → chunk-JXYLDT6X.js} +4 -4
- package/dist/{chunk-S3M5WCZW.js → chunk-KA4LV7G6.js} +35 -50
- package/dist/chunk-KA4LV7G6.js.map +1 -0
- package/dist/{chunk-IXX6ZOL2.js → chunk-KGTMHEAP.js} +7 -7
- package/dist/{chunk-22OBGVEJ.js → chunk-KOXVGPW4.js} +3 -3
- package/dist/{chunk-NOZ5CGZE.js → chunk-L5GPPMUB.js} +2 -2
- package/dist/{chunk-KIHYJM5F.js → chunk-LXJT4WAW.js} +58 -58
- package/dist/{chunk-KIHYJM5F.js.map → chunk-LXJT4WAW.js.map} +1 -1
- package/dist/{chunk-4FOOHMTU.js → chunk-LY6727IF.js} +1 -1
- package/dist/{chunk-PT7MTXRE.js → chunk-MAOCN7J6.js} +2 -2
- package/dist/{chunk-4K2JSJNX.js → chunk-MB5LZVDO.js} +2 -2
- package/dist/chunk-MF464AKA.js +139 -0
- package/dist/chunk-MF464AKA.js.map +1 -0
- package/dist/{chunk-UYSZKDQY.js → chunk-MK54JLE4.js} +1 -1
- package/dist/chunk-MK54JLE4.js.map +1 -0
- package/dist/{chunk-5LES64PP.js → chunk-MKOQAVOE.js} +21 -21
- package/dist/{chunk-BMV2SNYX.js → chunk-MUPWNSEJ.js} +18 -18
- package/dist/{chunk-Y5TRG22C.js → chunk-NRXIECWC.js} +2 -2
- package/dist/{chunk-GOE7G5JX.js → chunk-NWSAF6P5.js} +2 -2
- package/dist/chunk-OB3YGXHQ.js +158 -0
- package/dist/chunk-OB3YGXHQ.js.map +1 -0
- package/dist/{chunk-DUM363VS.js → chunk-OFZQJNF6.js} +5 -5
- package/dist/{chunk-CKN5QPEL.js → chunk-OMF7POEY.js} +2 -2
- package/dist/{chunk-MVXKO2BD.js → chunk-OXD6ET34.js} +1 -1
- package/dist/{chunk-47JUEVME.js → chunk-PALX6HWV.js} +21 -21
- package/dist/{chunk-B6OGSG7I.js → chunk-PE3BLBDT.js} +3 -3
- package/dist/{chunk-RVISSNVE.js → chunk-PMZKJOG6.js} +15 -15
- package/dist/{chunk-CESAMXWX.js → chunk-PQUTMG3S.js} +2 -2
- package/dist/{chunk-7VFCOKPG.js → chunk-PWBGODZU.js} +3 -3
- package/dist/{chunk-MOPAXD2H.js → chunk-QCADUTYX.js} +2 -2
- package/dist/{chunk-CT5FBO7E.js → chunk-RPOUJI25.js} +1 -1
- package/dist/{chunk-VE3FKXJ7.js → chunk-RUSXEE7X.js} +35 -32
- package/dist/chunk-RUSXEE7X.js.map +1 -0
- package/dist/{chunk-WKHYOS72.js → chunk-RW4GFE56.js} +3 -3
- package/dist/{chunk-FH4GO7HO.js → chunk-RYLVVDR7.js} +1 -1
- package/dist/{chunk-QZRDCFHI.js → chunk-S66SBBFQ.js} +5 -5
- package/dist/{chunk-CQJFIPAH.js → chunk-S7TNV2I7.js} +14 -14
- package/dist/{chunk-ZBQSIGGR.js → chunk-SC773IMJ.js} +13 -13
- package/dist/{chunk-RZV7SXED.js → chunk-SF3M27AN.js} +37 -12
- package/dist/chunk-SF3M27AN.js.map +1 -0
- package/dist/{chunk-FBJ2HK7A.js → chunk-SGPJ3YS2.js} +20 -20
- package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
- package/dist/chunk-SWCLN6JE.js +40 -0
- package/dist/chunk-SWCLN6JE.js.map +1 -0
- package/dist/{chunk-OS3EQOIS.js → chunk-T4F5TW2X.js} +29 -24
- package/dist/chunk-T4F5TW2X.js.map +1 -0
- package/dist/{chunk-RKZWCTXV.js → chunk-TAEKDMEF.js} +2 -2
- package/dist/{chunk-6AVCAUGL.js → chunk-TASEV25T.js} +3 -3
- package/dist/{chunk-3XOISKZC.js → chunk-TLGDPMUX.js} +6 -6
- package/dist/{chunk-MOF3XSUM.js → chunk-TREHTIBD.js} +3 -2
- package/dist/chunk-TREHTIBD.js.map +1 -0
- package/dist/{chunk-HUQHJSPV.js → chunk-TTPXGD5S.js} +68 -33
- package/dist/chunk-TTPXGD5S.js.map +1 -0
- package/dist/{chunk-NFCYIZHX.js → chunk-TXIIBNCA.js} +7 -3
- package/dist/{chunk-NFCYIZHX.js.map → chunk-TXIIBNCA.js.map} +1 -1
- package/dist/{chunk-5IUW34PG.js → chunk-TY3QYPJ6.js} +7 -7
- package/dist/{chunk-VQFR4EU4.js → chunk-U3JK5VJV.js} +2 -2
- package/dist/{chunk-2AWMJO54.js → chunk-U42P3RMZ.js} +5 -5
- package/dist/{chunk-2RIUMV7S.js → chunk-UBIJBLUK.js} +234 -234
- package/dist/chunk-UBIJBLUK.js.map +1 -0
- package/dist/{chunk-GUU75DES.js → chunk-UEJTOPLW.js} +8 -8
- package/dist/{chunk-QWCTYLMD.js → chunk-URDONAEJ.js} +240 -204
- package/dist/chunk-URDONAEJ.js.map +1 -0
- package/dist/{chunk-OZOEWLGR.js → chunk-UT6JAORE.js} +4 -4
- package/dist/{chunk-5TELOQA6.js → chunk-UTHPUINA.js} +3 -3
- package/dist/{chunk-SOV7DTTU.js → chunk-V6HZ2HJZ.js} +67 -67
- package/dist/{chunk-SOV7DTTU.js.map → chunk-V6HZ2HJZ.js.map} +1 -1
- package/dist/{chunk-26RQ6JBR.js → chunk-VBVCNH6D.js} +5 -5
- package/dist/{chunk-P646DND6.js → chunk-VCMQPCME.js} +2 -2
- package/dist/{chunk-LV7FMIMM.js → chunk-VGUHAHHV.js} +2 -2
- package/dist/{chunk-GYVXARCY.js → chunk-VIBPFVU4.js} +41 -41
- package/dist/{chunk-KHPOKZ6Z.js → chunk-VMAC66JX.js} +6 -6
- package/dist/{chunk-SHKRS6I5.js → chunk-VRPNETPK.js} +3 -3
- package/dist/{chunk-6U4J6RVS.js → chunk-WCHW4XN7.js} +14 -14
- package/dist/{chunk-CJH6QUQJ.js → chunk-WD3UXNJV.js} +3 -3
- package/dist/{chunk-H5EVWF6L.js → chunk-WR67FJMX.js} +4 -4
- package/dist/{chunk-XLIJ36RG.js → chunk-WRMQ7EX4.js} +5 -5
- package/dist/{chunk-VVFWOBAM.js → chunk-WTJUKYB2.js} +15 -16
- package/dist/chunk-WTJUKYB2.js.map +1 -0
- package/dist/{chunk-7KLCFJ5G.js → chunk-X4PPGXQG.js} +2 -2
- package/dist/{chunk-ZE2JTVCQ.js → chunk-X5BMQXFD.js} +11 -11
- package/dist/{chunk-OYJY4Y4A.js → chunk-XFNLU7EW.js} +14 -7
- package/dist/chunk-XFNLU7EW.js.map +1 -0
- package/dist/{chunk-UECU6LZI.js → chunk-XXRBOSWV.js} +3 -3
- package/dist/{chunk-SPKAIDWX.js → chunk-XZEFCPBL.js} +2 -2
- package/dist/{chunk-EZ5NYRHK.js → chunk-YL6N7QLA.js} +5 -5
- package/dist/{chunk-Q2ZJOECN.js → chunk-YMVTIV5L.js} +19 -19
- package/dist/chunk-YMVTIV5L.js.map +1 -0
- package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
- package/dist/{chunk-AR62NQXE.js → chunk-Z2S5VQG7.js} +2 -2
- package/dist/{chunk-2MXUB3ZO.js → chunk-Z5OGTWMZ.js} +15 -2
- package/dist/chunk-Z5OGTWMZ.js.map +1 -0
- package/dist/{chunk-7UQJEADK.js → chunk-ZL2O4BYP.js} +2 -2
- package/dist/{chunk-FOOITLHR.js → chunk-ZZHBT5WQ.js} +2 -2
- package/dist/{chunk-X6VJQJYY.js → chunk-ZZWHKC6A.js} +3 -3
- package/dist/components/timeline-annotation-shared.d.ts +1 -9
- package/dist/composer-messages.js +2 -2
- package/dist/composer.js +15 -15
- package/dist/{computer-viewer-D4NHQB5D.js → computer-viewer-S6TE6TN7.js} +8 -8
- package/dist/connect.js +12 -11
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-X4ZW6SY4.js → embedded-new-voice-ZDZPGX25.js} +8 -8
- package/dist/{embedded-voice-4OD6Z3HU.js → embedded-voice-FKCUXSJO.js} +8 -8
- package/dist/{fleet-decision-row-5UCJXTDP.js → fleet-decision-row-VCGWYJAV.js} +2 -2
- package/dist/hooks/page-wake.d.ts +21 -0
- package/dist/hooks/use-session-events.d.ts +1 -0
- package/dist/index.js +206 -205
- package/dist/interaction.js +9 -9
- package/dist/{latest-question-VGVNUGAU.js → latest-question-SINEV4U6.js} +3 -3
- package/dist/lib/format.d.ts +3 -2
- package/dist/machines.js +6 -6
- package/dist/messages/en.d.ts +12 -3
- package/dist/messages.js +1 -1
- package/dist/model-picker-model.js +2 -2
- package/dist/{model-policy-picker-menu-XOPYY6YA.js → model-policy-picker-menu-66JPM3G5.js} +6 -6
- package/dist/model-policy-picker-menu-66JPM3G5.js.map +1 -0
- package/dist/model-policy.js +1 -1
- package/dist/native-previews.js +3 -3
- package/dist/{platform-activity-row-56XOVTRA.js → platform-activity-row-LU5WABI2.js} +2 -2
- package/dist/{queue-surface-implementation-OZDOBJ6W.js → queue-surface-implementation-Y4OUVS7N.js} +8 -7
- package/dist/{queue-surface-implementation-OZDOBJ6W.js.map → queue-surface-implementation-Y4OUVS7N.js.map} +1 -1
- package/dist/realtime.js +7 -7
- package/dist/{sandbox-files-LJCR437H.js → sandbox-files-NBIVKVCZ.js} +11 -11
- package/dist/sandbox-files-NBIVKVCZ.js.map +1 -0
- package/dist/session-app.js +266 -260
- package/dist/session-list-model.js +3 -3
- package/dist/{session-realtime-UISLBZ4A.js → session-realtime-3PALSNMJ.js} +3 -3
- package/dist/session-realtime-3PALSNMJ.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +62 -61
- package/dist/session.d.ts +1 -1
- package/dist/session.js +17 -17
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/annotation-model.d.ts +48 -0
- package/dist/{timeline-annotation-markers-ACT7XRMW.js → timeline-annotation-markers-6526H2NM.js} +11 -9
- package/dist/{timeline-annotation-markers-ACT7XRMW.js.map → timeline-annotation-markers-6526H2NM.js.map} +1 -1
- package/dist/{timeline-annotation-selection-2IA7T5VR.js → timeline-annotation-selection-KV5SM6TA.js} +16 -62
- package/dist/timeline-annotation-selection-KV5SM6TA.js.map +1 -0
- package/dist/{timeline-annotations-dialog-W5B2HMYY.js → timeline-annotations-dialog-7CDHWC7Y.js} +12 -10
- package/dist/{timeline-annotations-dialog-W5B2HMYY.js.map → timeline-annotations-dialog-7CDHWC7Y.js.map} +1 -1
- package/dist/timeline-model.d.ts +3 -0
- package/dist/timeline-model.js +40 -14
- package/dist/ui/access-list.js +24 -24
- package/dist/ui/choice-cards.js +2 -2
- package/dist/ui/composer-menu-action.js +2 -2
- package/dist/ui/context-menu.d.ts +3 -1
- package/dist/ui/context-menu.js +3 -1
- package/dist/ui/detail-page.js +3 -3
- package/dist/ui/detail-sheet.js +3 -3
- package/dist/ui/diff-view.js +3 -3
- package/dist/ui/disclosure.js +5 -5
- package/dist/ui/dropdown-menu.js +1 -1
- package/dist/ui/flush-form-page.js +5 -5
- package/dist/ui/form-dialog.js +4 -4
- package/dist/ui/list-row.js +5 -5
- package/dist/ui/load-failure.js +3 -3
- package/dist/ui/page-actions.js +3 -3
- package/dist/ui/revision-history.js +11 -11
- package/dist/ui/role-select.js +8 -8
- package/dist/ui/segmented-control.js +1 -1
- package/dist/ui/settings-nav.js +3 -3
- package/dist/ui/toolbar.js +3 -3
- package/dist/usage.js +2 -2
- package/dist/workbench.js +11 -11
- package/package.json +4 -4
- package/src/app/app-state.tsx +2 -1
- package/src/app/components/command-menu/chat-switcher.tsx +135 -0
- package/src/app/components/command-menu/command-menu.tsx +840 -0
- package/src/app/components/command-menu/keycaps.tsx +56 -0
- package/src/app/components/command-menu/shortcut-sheet.tsx +155 -0
- package/src/app/components/credits/credit-refusal-notice.test.tsx +132 -0
- package/src/app/components/credits/credit-refusal-notice.tsx +92 -0
- package/src/app/components/rail/rail-context.tsx +28 -5
- package/src/app/components/rail/rail-sections.tsx +3 -5
- package/src/app/components/rail/session-header-mute.test.tsx +23 -1
- package/src/app/components/rail/session-header.test.tsx +21 -2
- package/src/app/components/rail/session-header.tsx +31 -1
- package/src/app/components/rail/session-list.tsx +89 -16
- package/src/app/components/rail/session-shell.tsx +0 -14
- package/src/app/components/session/session-search-dialog.tsx +12 -1
- package/src/app/embed/session-app.tsx +6 -3
- package/src/app/lib/actions/actions-provider.tsx +486 -0
- package/src/app/lib/actions/actions.test.ts +249 -0
- package/src/app/lib/actions/chat-directory.ts +231 -0
- package/src/app/lib/actions/chat-operations.ts +145 -0
- package/src/app/lib/actions/chat-switcher.ts +62 -0
- package/src/app/lib/actions/chords.ts +185 -0
- package/src/app/lib/actions/events.ts +10 -0
- package/src/app/lib/actions/rank.ts +119 -0
- package/src/app/lib/actions/registry.ts +333 -0
- package/src/app/lib/credit-coverage.test.ts +83 -0
- package/src/app/lib/credit-coverage.tsx +48 -0
- package/src/app/lib/free-credit-gap.test.ts +32 -1
- package/src/app/lib/free-credit-gap.tsx +32 -2
- package/src/app/lib/integration-connect-analytics.test.ts +1 -0
- package/src/app/lib/integration-connect-analytics.tsx +4 -0
- package/src/app/lib/models-route.test.ts +18 -0
- package/src/app/lib/models-route.tsx +26 -4
- package/src/app/lib/session-search-route.tsx +6 -1
- package/src/app/lib/session-ui-features.tsx +28 -9
- package/src/app/routes/session.tsx +74 -16
- package/src/app/routes/sessions-index.tsx +83 -4
- package/src/components/timeline-annotation-selection.tsx +9 -64
- package/src/components/timeline-annotation-shared.ts +9 -57
- package/src/hooks/page-wake.ts +80 -0
- package/src/hooks/use-session-events.ts +309 -81
- package/src/lib/format.ts +3 -2
- package/src/messages/en.ts +13 -3
- package/src/model-picker-model.ts +3 -0
- package/src/model-policy.ts +9 -1
- package/src/session.ts +1 -0
- package/src/timeline/annotation-model.ts +217 -0
- package/src/timeline/projection.ts +27 -21
- package/src/timeline-model.ts +14 -0
- package/src/ui/context-menu.tsx +16 -0
- package/src/ui/dropdown-menu.tsx +4 -1
- package/src/ui/segmented-control.tsx +3 -0
- package/styles/compiled.css +92 -0
- package/dist/app/lib/keyboard-shortcuts.d.ts +0 -51
- package/dist/app/lib/keyboard-shortcuts.js +0 -16
- package/dist/chunk-2MXUB3ZO.js.map +0 -1
- package/dist/chunk-2RIUMV7S.js.map +0 -1
- package/dist/chunk-53IXIUYP.js +0 -39
- package/dist/chunk-53IXIUYP.js.map +0 -1
- package/dist/chunk-DN3TKURW.js.map +0 -1
- package/dist/chunk-F2GXK2Z6.js.map +0 -1
- package/dist/chunk-G7VLL3PG.js.map +0 -1
- package/dist/chunk-GRLPRM56.js.map +0 -1
- package/dist/chunk-HUQHJSPV.js.map +0 -1
- package/dist/chunk-IO6K6UYJ.js.map +0 -1
- package/dist/chunk-KWB5U3ZT.js.map +0 -1
- package/dist/chunk-L5UCO2UV.js.map +0 -1
- package/dist/chunk-MOF3XSUM.js.map +0 -1
- package/dist/chunk-N2BEUKXT.js.map +0 -1
- package/dist/chunk-OS3EQOIS.js.map +0 -1
- package/dist/chunk-OYJY4Y4A.js.map +0 -1
- package/dist/chunk-Q2ZJOECN.js.map +0 -1
- package/dist/chunk-QWCTYLMD.js.map +0 -1
- package/dist/chunk-RZV7SXED.js.map +0 -1
- package/dist/chunk-S3M5WCZW.js.map +0 -1
- package/dist/chunk-SOOWLNC5.js.map +0 -1
- package/dist/chunk-SWWYYGQO.js.map +0 -1
- package/dist/chunk-UO36FC3S.js.map +0 -1
- package/dist/chunk-UYSZKDQY.js.map +0 -1
- package/dist/chunk-VE3FKXJ7.js.map +0 -1
- package/dist/chunk-VVFWOBAM.js.map +0 -1
- package/dist/chunk-ZSERYHHT.js.map +0 -1
- package/dist/timeline-annotation-selection-2IA7T5VR.js.map +0 -1
- package/src/app/lib/keyboard-shortcuts.test.ts +0 -47
- package/src/app/lib/keyboard-shortcuts.tsx +0 -58
- /package/dist/app/{lib/keyboard-shortcuts.js.map → components/command-menu/keycaps.js.map} +0 -0
- /package/dist/{browser-viewer-ZRFZX3VN.js.map → app/components/credits/credit-refusal-notice.js.map} +0 -0
- /package/dist/{chat-interactive-block-HUMYWVCK.js.map → app/lib/actions/actions-provider.js.map} +0 -0
- /package/dist/{computer-viewer-D4NHQB5D.js.map → app/lib/credit-coverage.js.map} +0 -0
- /package/dist/{embedded-new-voice-X4ZW6SY4.js.map → browser-viewer-HPUMK7UP.js.map} +0 -0
- /package/dist/{embedded-voice-4OD6Z3HU.js.map → chat-interactive-block-22PPECCT.js.map} +0 -0
- /package/dist/{chunk-GVIQ7H62.js.map → chunk-2LUBBDZV.js.map} +0 -0
- /package/dist/{chunk-XMMVIY7B.js.map → chunk-3CCJWHQY.js.map} +0 -0
- /package/dist/{chunk-XS2FZ6DX.js.map → chunk-3F5ZPIWI.js.map} +0 -0
- /package/dist/{chunk-72US6QNB.js.map → chunk-3J2YZRY5.js.map} +0 -0
- /package/dist/{chunk-D4YQF4E3.js.map → chunk-3SMJ2BIQ.js.map} +0 -0
- /package/dist/{chunk-TBJINQXA.js.map → chunk-3WCYK36X.js.map} +0 -0
- /package/dist/{chunk-WPCF34V6.js.map → chunk-3WG3CRL7.js.map} +0 -0
- /package/dist/{chunk-JI5BYQKO.js.map → chunk-3X46PNBX.js.map} +0 -0
- /package/dist/{chunk-PBK44WJC.js.map → chunk-4GJ37O6G.js.map} +0 -0
- /package/dist/{chunk-LEXPBQ56.js.map → chunk-4SKJX3C4.js.map} +0 -0
- /package/dist/{chunk-ZA6YD2LW.js.map → chunk-57SYK776.js.map} +0 -0
- /package/dist/{chunk-22LBKJDE.js.map → chunk-5DIAN5GQ.js.map} +0 -0
- /package/dist/{chunk-LJ3TDK2L.js.map → chunk-5FA455GR.js.map} +0 -0
- /package/dist/{chunk-YPR5INHV.js.map → chunk-5X3E2Z3D.js.map} +0 -0
- /package/dist/{chunk-OXNWZTEU.js.map → chunk-5ZJCL6X4.js.map} +0 -0
- /package/dist/{chunk-62OAZ4LO.js.map → chunk-6C5GQQMC.js.map} +0 -0
- /package/dist/{chunk-VGITH57T.js.map → chunk-6ERTXDZM.js.map} +0 -0
- /package/dist/{chunk-ZQ7XQZCF.js.map → chunk-6FX73Y4I.js.map} +0 -0
- /package/dist/{chunk-QZO2KK2F.js.map → chunk-6P44NG6Y.js.map} +0 -0
- /package/dist/{chunk-N2DDJLTM.js.map → chunk-6T7Y33JA.js.map} +0 -0
- /package/dist/{chunk-RBAGC2MJ.js.map → chunk-75VE5QUS.js.map} +0 -0
- /package/dist/{chunk-MRXOGI3O.js.map → chunk-77CUDSHG.js.map} +0 -0
- /package/dist/{chunk-GZ65XQR5.js.map → chunk-7T7FHSGS.js.map} +0 -0
- /package/dist/{chunk-YGAH34CD.js.map → chunk-A3S26JSP.js.map} +0 -0
- /package/dist/{chunk-GYPAO6RS.js.map → chunk-A664GSDM.js.map} +0 -0
- /package/dist/{chunk-JSZSNMDR.js.map → chunk-ASUYLXKO.js.map} +0 -0
- /package/dist/{chunk-RTK7SUPL.js.map → chunk-AUUJLVA3.js.map} +0 -0
- /package/dist/{chunk-OOTBYSCA.js.map → chunk-BBWKPNJB.js.map} +0 -0
- /package/dist/{chunk-BGZIMIUU.js.map → chunk-BCUYWOQU.js.map} +0 -0
- /package/dist/{chunk-EKN4N4LS.js.map → chunk-BDFMNJZJ.js.map} +0 -0
- /package/dist/{chunk-YZKGOWCC.js.map → chunk-BIDXQAGO.js.map} +0 -0
- /package/dist/{chunk-Q2UUANHF.js.map → chunk-BIKAJ4DY.js.map} +0 -0
- /package/dist/{chunk-5IQBF2X3.js.map → chunk-BJPJ2OUX.js.map} +0 -0
- /package/dist/{chunk-EY2EMHZW.js.map → chunk-BPM2OTYK.js.map} +0 -0
- /package/dist/{chunk-MT4TBRQB.js.map → chunk-BSWS2RUZ.js.map} +0 -0
- /package/dist/{chunk-T7YD3VGK.js.map → chunk-C52MNKXU.js.map} +0 -0
- /package/dist/{chunk-THNW33K7.js.map → chunk-CEUDV4OA.js.map} +0 -0
- /package/dist/{chunk-LHGIS6SZ.js.map → chunk-CVK74BH7.js.map} +0 -0
- /package/dist/{chunk-DFO2UCYG.js.map → chunk-CW5I65ZX.js.map} +0 -0
- /package/dist/{chunk-SKRLKQEG.js.map → chunk-DOSC2HRQ.js.map} +0 -0
- /package/dist/{chunk-KVB6XDLP.js.map → chunk-DPJ2CWVN.js.map} +0 -0
- /package/dist/{chunk-4J6V4DH7.js.map → chunk-DXMRO2MU.js.map} +0 -0
- /package/dist/{chunk-42I4O4WQ.js.map → chunk-EE55IDDR.js.map} +0 -0
- /package/dist/{chunk-2RA6XABP.js.map → chunk-EEERTLFF.js.map} +0 -0
- /package/dist/{chunk-PTOTKUKO.js.map → chunk-EEO744XR.js.map} +0 -0
- /package/dist/{chunk-LD3HVI2J.js.map → chunk-EMFGBAQL.js.map} +0 -0
- /package/dist/{chunk-FQGUK4ST.js.map → chunk-ENPJKVMN.js.map} +0 -0
- /package/dist/{chunk-HDHK3SXK.js.map → chunk-EU6RLHMP.js.map} +0 -0
- /package/dist/{chunk-MRUWRQBX.js.map → chunk-FET6XHGS.js.map} +0 -0
- /package/dist/{chunk-M6KUY3YH.js.map → chunk-FIICQA55.js.map} +0 -0
- /package/dist/{chunk-NLWLCYCT.js.map → chunk-FTZXCPE3.js.map} +0 -0
- /package/dist/{chunk-FN2KA3MJ.js.map → chunk-FUS76DO4.js.map} +0 -0
- /package/dist/{chunk-AM4IIPWI.js.map → chunk-G7N5NPRJ.js.map} +0 -0
- /package/dist/{chunk-CCQ7YKOD.js.map → chunk-GBYZ6653.js.map} +0 -0
- /package/dist/{chunk-YKKVIJVX.js.map → chunk-GQDSC6QZ.js.map} +0 -0
- /package/dist/{chunk-5X6JP75Q.js.map → chunk-GRSODLVO.js.map} +0 -0
- /package/dist/{chunk-73YP3R5X.js.map → chunk-GSESCQFY.js.map} +0 -0
- /package/dist/{chunk-MZLEBFUZ.js.map → chunk-GZD6VBIK.js.map} +0 -0
- /package/dist/{chunk-IZR2QRFF.js.map → chunk-H3HH5AHS.js.map} +0 -0
- /package/dist/{chunk-OJPUVUB6.js.map → chunk-HAOZCLLA.js.map} +0 -0
- /package/dist/{chunk-ZBHDGAYL.js.map → chunk-HEFE4OZJ.js.map} +0 -0
- /package/dist/{chunk-WTG34JVA.js.map → chunk-HI75UTI6.js.map} +0 -0
- /package/dist/{chunk-OMBIG3NC.js.map → chunk-HM633ROV.js.map} +0 -0
- /package/dist/{chunk-WDFZWSKD.js.map → chunk-HRIP4M6H.js.map} +0 -0
- /package/dist/{chunk-A2BCW6CQ.js.map → chunk-HU2DRFFI.js.map} +0 -0
- /package/dist/{chunk-PO35PBAB.js.map → chunk-HVH7FFJH.js.map} +0 -0
- /package/dist/{chunk-EG7KNUF7.js.map → chunk-HYTXTKST.js.map} +0 -0
- /package/dist/{chunk-TFHG75A4.js.map → chunk-I4XMDFUJ.js.map} +0 -0
- /package/dist/{chunk-IZHVZZQA.js.map → chunk-ICAUYWSL.js.map} +0 -0
- /package/dist/{chunk-DCLPWYP3.js.map → chunk-IEVPJ3G6.js.map} +0 -0
- /package/dist/{chunk-EVWZHDSF.js.map → chunk-IKH3VTA4.js.map} +0 -0
- /package/dist/{chunk-TYHLEFD2.js.map → chunk-IZJNMRIR.js.map} +0 -0
- /package/dist/{chunk-D2SR3TEB.js.map → chunk-J243WGUA.js.map} +0 -0
- /package/dist/{chunk-QGSGIYE3.js.map → chunk-J2C6LB6W.js.map} +0 -0
- /package/dist/{chunk-MT6TRTXF.js.map → chunk-J5MEDX7C.js.map} +0 -0
- /package/dist/{chunk-6QHUKBJP.js.map → chunk-J7SKOO44.js.map} +0 -0
- /package/dist/{chunk-W2QK7PYS.js.map → chunk-JAAST75A.js.map} +0 -0
- /package/dist/{chunk-NQCMS4AJ.js.map → chunk-JQCGPTZ6.js.map} +0 -0
- /package/dist/{chunk-CMUXJHGH.js.map → chunk-JRSCWQMC.js.map} +0 -0
- /package/dist/{chunk-Q4OHNGGB.js.map → chunk-JRXHSVD5.js.map} +0 -0
- /package/dist/{chunk-SD2K5ZN5.js.map → chunk-JXYLDT6X.js.map} +0 -0
- /package/dist/{chunk-IXX6ZOL2.js.map → chunk-KGTMHEAP.js.map} +0 -0
- /package/dist/{chunk-22OBGVEJ.js.map → chunk-KOXVGPW4.js.map} +0 -0
- /package/dist/{chunk-NOZ5CGZE.js.map → chunk-L5GPPMUB.js.map} +0 -0
- /package/dist/{chunk-4FOOHMTU.js.map → chunk-LY6727IF.js.map} +0 -0
- /package/dist/{chunk-PT7MTXRE.js.map → chunk-MAOCN7J6.js.map} +0 -0
- /package/dist/{chunk-4K2JSJNX.js.map → chunk-MB5LZVDO.js.map} +0 -0
- /package/dist/{chunk-5LES64PP.js.map → chunk-MKOQAVOE.js.map} +0 -0
- /package/dist/{chunk-BMV2SNYX.js.map → chunk-MUPWNSEJ.js.map} +0 -0
- /package/dist/{chunk-Y5TRG22C.js.map → chunk-NRXIECWC.js.map} +0 -0
- /package/dist/{chunk-GOE7G5JX.js.map → chunk-NWSAF6P5.js.map} +0 -0
- /package/dist/{chunk-DUM363VS.js.map → chunk-OFZQJNF6.js.map} +0 -0
- /package/dist/{chunk-CKN5QPEL.js.map → chunk-OMF7POEY.js.map} +0 -0
- /package/dist/{chunk-MVXKO2BD.js.map → chunk-OXD6ET34.js.map} +0 -0
- /package/dist/{chunk-47JUEVME.js.map → chunk-PALX6HWV.js.map} +0 -0
- /package/dist/{chunk-B6OGSG7I.js.map → chunk-PE3BLBDT.js.map} +0 -0
- /package/dist/{chunk-RVISSNVE.js.map → chunk-PMZKJOG6.js.map} +0 -0
- /package/dist/{chunk-CESAMXWX.js.map → chunk-PQUTMG3S.js.map} +0 -0
- /package/dist/{chunk-7VFCOKPG.js.map → chunk-PWBGODZU.js.map} +0 -0
- /package/dist/{chunk-MOPAXD2H.js.map → chunk-QCADUTYX.js.map} +0 -0
- /package/dist/{chunk-CT5FBO7E.js.map → chunk-RPOUJI25.js.map} +0 -0
- /package/dist/{chunk-WKHYOS72.js.map → chunk-RW4GFE56.js.map} +0 -0
- /package/dist/{chunk-FH4GO7HO.js.map → chunk-RYLVVDR7.js.map} +0 -0
- /package/dist/{chunk-QZRDCFHI.js.map → chunk-S66SBBFQ.js.map} +0 -0
- /package/dist/{chunk-CQJFIPAH.js.map → chunk-S7TNV2I7.js.map} +0 -0
- /package/dist/{chunk-ZBQSIGGR.js.map → chunk-SC773IMJ.js.map} +0 -0
- /package/dist/{chunk-FBJ2HK7A.js.map → chunk-SGPJ3YS2.js.map} +0 -0
- /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
- /package/dist/{chunk-RKZWCTXV.js.map → chunk-TAEKDMEF.js.map} +0 -0
- /package/dist/{chunk-6AVCAUGL.js.map → chunk-TASEV25T.js.map} +0 -0
- /package/dist/{chunk-3XOISKZC.js.map → chunk-TLGDPMUX.js.map} +0 -0
- /package/dist/{chunk-5IUW34PG.js.map → chunk-TY3QYPJ6.js.map} +0 -0
- /package/dist/{chunk-VQFR4EU4.js.map → chunk-U3JK5VJV.js.map} +0 -0
- /package/dist/{chunk-2AWMJO54.js.map → chunk-U42P3RMZ.js.map} +0 -0
- /package/dist/{chunk-GUU75DES.js.map → chunk-UEJTOPLW.js.map} +0 -0
- /package/dist/{chunk-OZOEWLGR.js.map → chunk-UT6JAORE.js.map} +0 -0
- /package/dist/{chunk-5TELOQA6.js.map → chunk-UTHPUINA.js.map} +0 -0
- /package/dist/{chunk-26RQ6JBR.js.map → chunk-VBVCNH6D.js.map} +0 -0
- /package/dist/{chunk-P646DND6.js.map → chunk-VCMQPCME.js.map} +0 -0
- /package/dist/{chunk-LV7FMIMM.js.map → chunk-VGUHAHHV.js.map} +0 -0
- /package/dist/{chunk-GYVXARCY.js.map → chunk-VIBPFVU4.js.map} +0 -0
- /package/dist/{chunk-KHPOKZ6Z.js.map → chunk-VMAC66JX.js.map} +0 -0
- /package/dist/{chunk-SHKRS6I5.js.map → chunk-VRPNETPK.js.map} +0 -0
- /package/dist/{chunk-6U4J6RVS.js.map → chunk-WCHW4XN7.js.map} +0 -0
- /package/dist/{chunk-CJH6QUQJ.js.map → chunk-WD3UXNJV.js.map} +0 -0
- /package/dist/{chunk-H5EVWF6L.js.map → chunk-WR67FJMX.js.map} +0 -0
- /package/dist/{chunk-XLIJ36RG.js.map → chunk-WRMQ7EX4.js.map} +0 -0
- /package/dist/{chunk-7KLCFJ5G.js.map → chunk-X4PPGXQG.js.map} +0 -0
- /package/dist/{chunk-ZE2JTVCQ.js.map → chunk-X5BMQXFD.js.map} +0 -0
- /package/dist/{chunk-UECU6LZI.js.map → chunk-XXRBOSWV.js.map} +0 -0
- /package/dist/{chunk-SPKAIDWX.js.map → chunk-XZEFCPBL.js.map} +0 -0
- /package/dist/{chunk-EZ5NYRHK.js.map → chunk-YL6N7QLA.js.map} +0 -0
- /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
- /package/dist/{chunk-AR62NQXE.js.map → chunk-Z2S5VQG7.js.map} +0 -0
- /package/dist/{chunk-7UQJEADK.js.map → chunk-ZL2O4BYP.js.map} +0 -0
- /package/dist/{chunk-FOOITLHR.js.map → chunk-ZZHBT5WQ.js.map} +0 -0
- /package/dist/{chunk-X6VJQJYY.js.map → chunk-ZZWHKC6A.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-XOPYY6YA.js.map → computer-viewer-S6TE6TN7.js.map} +0 -0
- /package/dist/{sandbox-files-LJCR437H.js.map → embedded-new-voice-ZDZPGX25.js.map} +0 -0
- /package/dist/{session-realtime-UISLBZ4A.js.map → embedded-voice-FKCUXSJO.js.map} +0 -0
- /package/dist/{fleet-decision-row-5UCJXTDP.js.map → fleet-decision-row-VCGWYJAV.js.map} +0 -0
- /package/dist/{latest-question-VGVNUGAU.js.map → latest-question-SINEV4U6.js.map} +0 -0
- /package/dist/{platform-activity-row-56XOVTRA.js.map → platform-activity-row-LU5WABI2.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/lib/actions/actions-provider.tsx","../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 { useAppContext } from \"../../app-context\";\nimport { useRail } from \"../../components/rail/rail-context\";\nimport { requestConversationFind } from \"../conversation-find-event\";\nimport { desktopBridge, desktopCapability } from \"../desktop\";\nimport { useNavigate, useRouterState } from \"../navigation\";\nimport { requestSessionSearch } from \"../session-search-route\";\nimport { useSessionUiFeature } from \"../session-ui-features\";\nimport { useUiEventTarget } from \"../ui-events\";\nimport { readChatDirectory, recordChatVisit } from \"./chat-directory\";\nimport {\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 { useChatOperations } from \"./chat-operations\";\nimport { OPEN_COMMAND_MENU_EVENT, RENAME_CURRENT_CHAT_EVENT } from \"./events\";\nimport { APP_ACTIONS, actionTitle, findAction, type ActionEnv, type AppAction } 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 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 return applicableChords(action.chords, \"desktop\", platform).find(\n (chord) => !chord.alt || chord.mod,\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 ops = useChatOperations();\n const uiEvents = useUiEventTarget(\"document\");\n const windowEvents = useUiEventTarget(\"window\");\n const chatList = useSessionUiFeature(\"chatList\");\n const keyboardShortcuts = useSessionUiFeature(\"keyboardShortcuts\");\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 currentChat =\n app.session && app.session.id === routeChatId && app.session.workspaceId === workspaceId\n ? app.session\n : null;\n\n const [menu, setMenu] = useState<{\n open: boolean;\n mounted: boolean;\n chat: SessionListRow | null;\n }>({ open: false, mounted: false, chat: null });\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 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) => ({ open: !current.open, mounted: true, chat: null }));\n }, [rememberFocus]);\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, workspaceId, currentChat);\n // Title and pin changes refresh the record without reordering.\n }, [currentChat?.id, subjectId, workspaceId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const env = useMemo<ActionEnv>(\n () => ({\n workspaceId,\n subjectId,\n surface,\n platform,\n currentChat,\n ops,\n chatList,\n newChat: () => rail.startNewSession(),\n openChat: (chatId) => rail.openSession(chatId),\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 findInChat: () => requestConversationFind(uiEvents),\n searchMessages: (query) => requestSessionSearch(windowEvents, workspaceId, undefined, query),\n renameCurrentChat: () => uiEvents.dispatchEvent(new Event(RENAME_CURRENT_CHAT_EVENT)),\n openCommandMenu,\n openShortcutSheet,\n switchToRecentChat: () => {\n const target = openChatSwitcher(\n readChatDirectory(subjectId, workspaceId),\n routeChatId,\n false,\n );\n const id = target?.ids[target.index];\n if (id) rail.openSession(id);\n },\n sidebarOrder: () => readChatDirectory(subjectId, workspaceId).sidebarOrder,\n pinnedOrder: () => readChatDirectory(subjectId, workspaceId).pinnedOrder,\n }),\n [\n workspaceId,\n subjectId,\n platform,\n currentChat,\n routeChatId,\n ops,\n chatList,\n rail,\n navigate,\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 APP_ACTIONS.filter((action) => action.desktopMenu).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 APP_ACTIONS) {\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 // 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 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) envRef.current.openChat(id);\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 );\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 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 {switcher?.visible ? (\n <Suspense fallback={null}>\n <ChatSwitcher\n state={switcher}\n subjectId={subjectId}\n workspaceId={workspaceId}\n currentChatId={routeChatId}\n platform={platform}\n onHover={(index) => {\n const current = switcherRef.current;\n if (current) setSwitcher({ ...current, index });\n }}\n onPick={pickSwitcherChat}\n onDismiss={() => setSwitcher(null)}\n />\n </Suspense>\n ) : null}\n </ActionsContext.Provider>\n );\n}\n","/**\n * Control+Tab in the desktop app: switch between recently viewed chats, most\n * recent first, as ⌘Tab switches apps. 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 * The list is read once when the switcher opens, so it holds still while the\n * person cycles through it.\n */\nimport type { ChatDirectorySnapshot } from \"./chat-directory\";\n\n/** At most this many chats; older ones are a search away in ⌘K. */\nexport const SWITCHER_LIMIT = 10;\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, most recently viewed first. */\n ids: readonly string[];\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\n/**\n * The chats to switch between, most recently viewed first, with the open chat\n * (when there is one) at the front. Null when there is nowhere to switch to.\n */\nexport function openChatSwitcher(\n directory: Pick<ChatDirectorySnapshot, \"recent\" | \"rows\">,\n currentChatId: string | null,\n backwards: boolean,\n): ChatSwitcherState | null {\n const switchable = directory.recent.filter((id) => {\n const record = directory.rows.get(id);\n if (!record || record.archived) return false;\n // Subagent chats live under their parent, as in the sidebar.\n return !record.row || record.row.parentSessionId === null;\n });\n const ids = currentChatId\n ? [currentChatId, ...switchable.filter((id) => id !== currentChatId)]\n : switchable;\n const limited = ids.slice(0, SWITCHER_LIMIT);\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 (limited.length <= first) return null;\n return { ids: limited, index: backwards ? limited.length - 1 : first, visible: false };\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","/**\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 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\";\n\nexport type ChatOperations = {\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\nasync function writeClipboard(text: string): Promise<void> {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return;\n }\n // Older embeds without the async clipboard: a hidden textarea and execCommand.\n const area = document.createElement(\"textarea\");\n area.value = text;\n area.setAttribute(\"readonly\", \"\");\n area.style.position = \"fixed\";\n area.style.opacity = \"0\";\n document.body.append(area);\n area.select();\n const copied = document.execCommand(\"copy\");\n area.remove();\n if (!copied) throw new Error(\"The browser blocked copying.\");\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 async (chat: Pick<SessionListRow, \"id\" | \"workspaceId\">) => {\n try {\n await writeClipboard(linkTo(chat));\n toast.success(\"Link copied\");\n } catch (error) {\n toast.error(\"Couldn't copy the link.\", {\n description: error instanceof Error ? error.message : String(error),\n });\n }\n },\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 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 context.client.updateSessionArchive(chat.workspaceId, chat.id, {\n archived,\n expectedVersion: chat.archiveVersion ?? 0,\n });\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 toast.success(updated.archived ? \"Chat archived.\" : \"Chat restored.\");\n } catch (error) {\n if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;\n toast.error(archived ? \"Couldn't archive the chat.\" : \"Couldn't restore the chat.\", {\n description: error instanceof Error ? error.message : String(error),\n });\n } finally {\n archiving.current.delete(chat.id);\n }\n },\n [context],\n );\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: error instanceof Error ? error.message : String(error),\n });\n }\n },\n [context],\n );\n return useMemo(\n () => ({ linkTo, copyLink, setPinned, setArchived, setUnread }),\n [linkTo, copyLink, setPinned, setArchived, setUnread],\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 ArchiveRestoreIcon,\n ArrowDownIcon,\n ArrowUpIcon,\n CommandIcon,\n HistoryIcon,\n InboxIcon,\n KeyboardIcon,\n LinkIcon,\n MailIcon,\n MailOpenIcon,\n PanelLeftIcon,\n PencilIcon,\n PinIcon,\n PinOffIcon,\n PlusIcon,\n SearchIcon,\n TextSearchIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport type { SessionListRow } from \"../../../session-list-model\";\nimport type { ActionSurface, Chord, ChordPlatform } from \"./chords\";\nimport type { ChatOperations } from \"./chat-operations\";\n\nexport type ActionGroup = \"chat\" | \"navigate\" | \"view\" | \"help\";\n\n/** Where the desktop menu bar shows an action. */\nexport type DesktopMenuPlacement = \"file\" | \"view\" | \"go\" | \"chat\" | \"help\";\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 ops: ChatOperations;\n /** Whether the sidebar's chat list is part of this surface. */\n chatList: boolean;\n newChat(): void;\n openChat(chatId: string): void;\n openInbox(): void;\n toggleSidebar(): void;\n findInChat(): void;\n searchMessages(query?: string): void;\n renameCurrentChat(): 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 /** 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\nconst PINNED_CHORDS: Chord[] = Array.from({ length: 9 }, (_, index) => ({\n code: `Digit${index + 1}`,\n mod: true,\n only: \"desktop\" as const,\n}));\n\nexport const APP_ACTIONS: readonly AppAction[] = [\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 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.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: (_env, chat) => (chat?.archived ? \"Restore\" : \"Archive\"),\n group: \"chat\",\n icon: ArchiveIcon,\n iconFor: (chat) => (chat?.archived ? ArchiveRestoreIcon : ArchiveIcon),\n keywords: [\"restore\", \"hide\", \"done\"],\n forChat: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && chat.parentSessionId === null,\n run: (env, chat) => (chat ? env.ops.setArchived(chat, !chat.archived) : 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.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: \"view.sidebar\",\n title: \"Toggle sidebar\",\n group: \"view\",\n icon: PanelLeftIcon,\n keywords: [\"hide\", \"show\", \"collapse\", \"rail\"],\n chords: [\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: \"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\nexport function findAction(id: string): AppAction | undefined {\n return APP_ACTIONS.find((action) => action.id === id);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,OAEK;;;ACJA,IAAM,iBAAiB;AAEvB,IAAM,yBAAyB;AAe/B,SAAS,iBACd,WACA,eACA,WAC0B;AAC1B,QAAM,aAAa,UAAU,OAAO,OAAO,CAAC,OAAO;AACjD,UAAM,SAAS,UAAU,KAAK,IAAI,EAAE;AACpC,QAAI,CAAC,UAAU,OAAO,SAAU,QAAO;AAEvC,WAAO,CAAC,OAAO,OAAO,OAAO,IAAI,oBAAoB;AAAA,EACvD,CAAC;AACD,QAAM,MAAM,gBACR,CAAC,eAAe,GAAG,WAAW,OAAO,CAAC,OAAO,OAAO,aAAa,CAAC,IAClE;AACJ,QAAM,UAAU,IAAI,MAAM,GAAG,cAAc;AAE3C,QAAM,QAAQ,gBAAgB,IAAI;AAClC,MAAI,QAAQ,UAAU,MAAO,QAAO;AACpC,SAAO,EAAE,KAAK,SAAS,OAAO,YAAY,QAAQ,SAAS,IAAI,OAAO,SAAS,MAAM;AACvF;AAGO,SAAS,iBAAiB,OAA0B,MAAiC;AAC1F,QAAM,QAAQ,MAAM,IAAI;AACxB,SAAO,EAAE,GAAG,OAAO,QAAQ,MAAM,QAAQ,OAAO,SAAS,OAAO,SAAS,KAAK;AAChF;AAGO,SAAS,cACd,OACA;AACA,SAAO,MAAM,SAAS,SAAS,MAAM,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM;AAC3E;;;ACxDA,SAAS,aAAa,SAAS,cAAc;AAiBtC,SAAS,SAAS,MAA0D;AACjF,SAAO,eAAe,mBAAmB,KAAK,WAAW,CAAC,aAAa,mBAAmB,KAAK,EAAE,CAAC;AACpG;AAEA,eAAe,eAAe,MAA6B;AACzD,MAAI,OAAO,cAAc,eAAe,UAAU,WAAW,WAAW;AACtE,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,cAAc,UAAU;AAC9C,OAAK,QAAQ;AACb,OAAK,aAAa,YAAY,EAAE;AAChC,OAAK,MAAM,WAAW;AACtB,OAAK,MAAM,UAAU;AACrB,WAAS,KAAK,OAAO,IAAI;AACzB,OAAK,OAAO;AACZ,QAAM,SAAS,SAAS,YAAY,MAAM;AAC1C,OAAK,OAAO;AACZ,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,8BAA8B;AAC7D;AAEO,SAAS,oBAAoC;AAClD,QAAM,UAAU,cAAc;AAC9B,QAAM,OAAO,QAAQ;AACrB,QAAM,YAAY,OAAO,oBAAI,IAAY,CAAC;AAC1C,QAAM,SAAS;AAAA,IACb,CAAC,SAAqD,GAAG,KAAK,OAAO,CAAC,GAAG,SAAS,IAAI,CAAC;AAAA,IACvF,CAAC,IAAI;AAAA,EACP;AACA,QAAM,WAAW;AAAA,IACf,OAAO,SAAqD;AAC1D,UAAI;AACF,cAAM,eAAe,OAAO,IAAI,CAAC;AACjC,cAAM,QAAQ,aAAa;AAAA,MAC7B,SAAS,OAAO;AACd,cAAM,MAAM,2BAA2B;AAAA,UACrC,aAAa,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QACpE,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AACA,QAAM,YAAY;AAAA,IAChB,OAAO,MAAsB,WAAoB;AAC/C,YAAM,UAAU,MAAM,QAAQ;AAAA,QAC5B,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA,KAAK,cAAc;AAAA,MACrB;AACA,UAAI,QAAS,OAAM,QAAQ,SAAS,gBAAgB,eAAe;AAAA,UAC9D,OAAM,MAAM,SAAS,2BAA2B,0BAA0B;AAAA,IACjF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACA,QAAM,cAAc;AAAA,IAClB,OAAO,MAAsB,aAAsB;AACjD,UAAI,UAAU,QAAQ,IAAI,KAAK,EAAE,EAAG;AACpC,YAAM,WAAW,QAAQ,2BAA2B,KAAK,WAAW;AACpE,UAAI,CAAC,SAAU;AACf,gBAAU,QAAQ,IAAI,KAAK,EAAE;AAC7B,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ,OAAO,qBAAqB,KAAK,aAAa,KAAK,IAAI;AAAA,UACnF;AAAA,UACA,iBAAiB,KAAK,kBAAkB;AAAA,QAC1C,CAAC;AACD,YAAI,CAAC,QAAQ,wBAAwB,KAAK,aAAa,QAAQ,EAAG;AAClE,gBAAQ;AAAA,UAAW,CAAC,YAClB,SAAS,OAAO,QAAQ,MAAM,QAAQ,gBAAgB,QAAQ,cAC1D,8BAA8B,SAAS,OAAO,IAC9C;AAAA,QACN;AACA,iCAAyB;AAAA,UACvB,aAAa,KAAK;AAAA,UAClB,WAAW,KAAK;AAAA,UAChB,UAAU,QAAQ;AAAA,QACpB,CAAC;AACD,cAAM,QAAQ,QAAQ,WAAW,mBAAmB,gBAAgB;AAAA,MACtE,SAAS,OAAO;AACd,YAAI,CAAC,QAAQ,wBAAwB,KAAK,aAAa,QAAQ,EAAG;AAClE,cAAM,MAAM,WAAW,+BAA+B,8BAA8B;AAAA,UAClF,aAAa,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QACpE,CAAC;AAAA,MACH,UAAE;AACA,kBAAU,QAAQ,OAAO,KAAK,EAAE;AAAA,MAClC;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACA,QAAM,YAAY;AAAA,IAChB,OAAO,MAAsB,WAAoB;AAC/C,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ,OAAO,uBAAuB,KAAK,aAAa,KAAK,IAAI;AAAA,UACrF;AAAA,UACA,iBAAiB,KAAK,oBAAoB;AAAA,QAC5C,CAAC;AACD,gBAAQ;AAAA,UAAW,CAAC,YAClB,SAAS,OAAO,QAAQ,KACpB;AAAA,YACE,GAAG;AAAA,YACH,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,YACjE,GAAI,QAAQ,qBAAqB,SAC7B,EAAE,kBAAkB,QAAQ,iBAAiB,IAC7C,CAAC;AAAA,UACP,IACA;AAAA,QACN;AACA,iCAAyB,EAAE,aAAa,KAAK,aAAa,WAAW,KAAK,GAAG,CAAC;AAC9E,cAAM,QAAQ,SAAS,qBAAqB,gBAAgB;AAAA,MAC9D,SAAS,OAAO;AACd,cAAM,MAAM,6BAA6B;AAAA,UACvC,aAAa,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QACpE,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AACA,SAAO;AAAA,IACL,OAAO,EAAE,QAAQ,UAAU,WAAW,aAAa,UAAU;AAAA,IAC7D,CAAC,QAAQ,UAAU,WAAW,aAAa,SAAS;AAAA,EACtD;AACF;;;AC1IA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAkEA,SAAS,YACd,QACA,KACA,MACQ;AACR,SAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI;AACjF;AAEO,SAAS,WAAW,QAAmB,MAAyC;AACrF,SAAO,OAAO,UAAU,IAAI,KAAK,OAAO;AAC1C;AAEA,IAAM,SAAS,MAAM;AAErB,SAAS,SAAS,KAAgB,WAAyB;AACzD,QAAM,QAAQ,IAAI,aAAa;AAC/B,MAAI,MAAM,WAAW,EAAG;AACxB,QAAM,QAAQ,IAAI,cAAc,MAAM,QAAQ,IAAI,YAAY,EAAE,IAAI;AACpE,QAAM,OAAO,QAAQ,IAAK,cAAc,IAAI,IAAI,MAAM,SAAS,IAAK,QAAQ;AAC5E,MAAI,OAAO,KAAK,QAAQ,MAAM,OAAQ;AACtC,MAAI,SAAS,MAAM,IAAI,CAAE;AAC3B;AAEA,IAAM,gBAAyB,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,WAAW;AAAA,EACtE,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACvB,KAAK;AAAA,EACL,MAAM;AACR,EAAE;AAEK,IAAM,cAAoC;AAAA,EAC/C;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ,CAAC,EAAE,MAAM,QAAQ,KAAK,KAAK,CAAC;AAAA,IACpC,eAAe;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,IACX,KAAK,CAAC,QAAQ,IAAI,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,SAAS,UAAU,SAAS;AAAA;AAAA,IAEvC,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU;AAAA,MAC3C,EAAE,MAAM,QAAQ,KAAK,MAAM,OAAO,KAAK;AAAA,IACzC;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,KAAK,CAAC,QAAQ,IAAI,QAAQ;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,SAAS,OAAO,SAAS;AAAA,IACpC,QAAQ,CAAC,EAAE,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK,CAAC;AAAA,IAClD,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW,CAAC,MAAM,SAAS,SAAS;AAAA,IACpC,KAAK,CAAC,KAAK,SAAU,OAAO,IAAI,IAAI,SAAS,IAAI,IAAI;AAAA,EACvD;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO,CAAC,MAAM,SAAU,MAAM,SAAS,UAAU;AAAA,IACjD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,SAAU,MAAM,SAAS,aAAa;AAAA,IAChD,UAAU,CAAC,SAAS,YAAY,MAAM;AAAA,IACtC,QAAQ,CAAC,EAAE,MAAM,QAAQ,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,IAC/C,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW,CAAC,MAAM,SAAS,SAAS,QAAQ,CAAC,KAAK;AAAA,IAClD,KAAK,CAAC,KAAK,SAAU,OAAO,IAAI,IAAI,UAAU,MAAM,CAAC,KAAK,MAAM,IAAI;AAAA,EACtE;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,SAAS,MAAM;AAAA,IAC1B,SAAS;AAAA,IACT,aAAa;AAAA;AAAA,IAEb,WAAW,CAAC,KAAK,SAAS,SAAS,QAAQ,IAAI,aAAa,OAAO,KAAK;AAAA,IACxE,KAAK,CAAC,QAAQ,IAAI,kBAAkB;AAAA,EACtC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO,CAAC,MAAM,SAAU,MAAM,SAAS,iBAAiB;AAAA,IACxD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,SAAU,MAAM,SAAS,eAAe;AAAA,IAClD,UAAU,CAAC,QAAQ,QAAQ;AAAA,IAC3B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW,CAAC,MAAM,SAAS,SAAS,QAAQ,CAAC,KAAK;AAAA,IAClD,KAAK,CAAC,KAAK,SAAU,OAAO,IAAI,IAAI,UAAU,MAAM,CAAC,KAAK,MAAM,IAAI;AAAA,EACtE;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO,CAAC,MAAM,SAAU,MAAM,WAAW,YAAY;AAAA,IACrD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS,CAAC,SAAU,MAAM,WAAW,qBAAqB;AAAA,IAC1D,UAAU,CAAC,WAAW,QAAQ,MAAM;AAAA,IACpC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW,CAAC,MAAM,SAAS,SAAS,QAAQ,KAAK,oBAAoB;AAAA,IACrE,KAAK,CAAC,KAAK,SAAU,OAAO,IAAI,IAAI,YAAY,MAAM,CAAC,KAAK,QAAQ,IAAI;AAAA,EAC1E;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,UAAU,MAAM;AAAA,IAC3B,QAAQ,CAAC,EAAE,MAAM,QAAQ,KAAK,KAAK,CAAC;AAAA,IACpC,aAAa;AAAA;AAAA,IAEb,WAAW,CAAC,QAAQ,IAAI,gBAAgB;AAAA,IACxC,KAAK,CAAC,QAAQ,IAAI,WAAW;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,iBAAiB,WAAW,WAAW;AAAA,IAClD,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,KAAK,MAAM,OAAO,MAAM,UAAU,MAAM;AAAA;AAAA,MAExD,EAAE,MAAM,QAAQ,KAAK,MAAM,OAAO,MAAM,UAAU,SAAS,MAAM,UAAU;AAAA,IAC7E;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,KAAK,CAAC,QAAQ,IAAI,UAAU;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ,CAAC,EAAE,MAAM,WAAW,KAAK,KAAK,CAAC;AAAA,IACvC,eAAe;AAAA,IACf,WAAW,CAAC,QAAQ,IAAI;AAAA,IACxB,KAAK,CAAC,QAAQ,SAAS,KAAK,EAAE;AAAA,EAChC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ,CAAC,EAAE,MAAM,aAAa,KAAK,KAAK,CAAC;AAAA,IACzC,eAAe;AAAA,IACf,WAAW,CAAC,QAAQ,IAAI;AAAA,IACxB,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,IAIE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,OAAO,SAAS,MAAM,UAAU,OAAO,MAAM,UAAU;AAAA;AAAA,MAE/D,EAAE,MAAM,OAAO,KAAK,MAAM,UAAU,SAAS,MAAM,UAAU;AAAA,IAC/D;AAAA,IACA,eAAe;AAAA,IACf,WAAW;AAAA,IACX,KAAK,CAAC,QAAQ,IAAI,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc,CAAC,aAAc,aAAa,QAAQ,2BAAY;AAAA,IAC9D,eAAe;AAAA,IACf,WAAW,CAAC,QAAQ,IAAI;AAAA,IACxB,KAAK,CAAC,KAAK,OAAO,UAAU;AAC1B,YAAM,QAAQ,QAAQ,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI;AACxD,YAAM,KAAK,IAAI,YAAY,EAAE,KAAK;AAClC,UAAI,GAAI,KAAI,SAAS,EAAE;AAAA,IACzB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW,WAAW;AAAA,IACzC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,KAAK,CAAC,QAAQ,IAAI,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,QAAQ,YAAY,MAAM;AAAA,IAC7C,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,KAAK,MAAM,SAAS,MAAM,UAAU,MAAM;AAAA,MAC1D,EAAE,MAAM,QAAQ,KAAK,MAAM,OAAO,MAAM,UAAU,QAAQ;AAAA,IAC5D;AAAA,IACA,aAAa;AAAA,IACb,WAAW,CAAC,QAAQ,IAAI;AAAA,IACxB,KAAK,CAAC,QAAQ,IAAI,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW,eAAe,MAAM;AAAA,IACnD,QAAQ,CAAC,EAAE,MAAM,SAAS,KAAK,KAAK,CAAC;AAAA,IACrC,aAAa;AAAA,IACb,WAAW;AAAA,IACX,KAAK,CAAC,QAAQ,IAAI,kBAAkB;AAAA,EACtC;AACF;AAEO,SAAS,WAAW,IAAmC;AAC5D,SAAO,YAAY,KAAK,CAAC,WAAW,OAAO,OAAO,EAAE;AACtD;;;AHkHI,SAIM,KAJN;AA5YJ,IAAM,cAAc,KAAK,MAAM,OAAO,+CAA4C,CAAC;AACnF,IAAM,gBAAgB,KAAK,MAAM,OAAO,iDAA8C,CAAC;AACvF,IAAM,mBAAmB,MAAM,OAAO,gDAA6C;AACnF,IAAM,eAAe,KAAK,gBAAgB;AAU1C,IAAM,iBAAiB,cAA0C,IAAI;AAE9D,SAAS,gBAA4C;AAC1D,SAAO,WAAW,cAAc;AAClC;AAMO,SAAS,kBACd,UAC0D;AAG1D,QAAM,UAAU,oBAAoB,mBAAmB;AACvD,QAAM,SAAS,WAAW,QAAQ;AAClC,MAAI,CAAC,WAAW,CAAC,OAAQ,QAAO;AAChC,QAAM,WAAW,gBAAgB;AACjC,QAAM,SAAS,iBAAiB,OAAO,QAAQ,SAAS,QAAQ;AAChE,QAAM,QAAQ,OAAO,CAAC;AACtB,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,OAAO,WAAW,OAAO,QAAQ;AAAA,IACjC,UAAU,OAAO,IAAI,CAAC,cAAc,cAAc,WAAW,QAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,IAChF;AAAA,EACF;AACF;AAEA,IAAM,UAAyB,gBAAgB,YAAY;AAE3D,SAAS,mBAAmB,QAAqC;AAC/D,MAAI,EAAE,kBAAkB,SAAU,QAAO;AACzC,QAAM,UAAU,OAAO;AAAA,IACrB;AAAA,EACF;AACA,SAAO,QAAQ,WAAW,CAAC,QAAQ,QAAQ,iDAAiD,CAAC;AAC/F;AAGA,SAAS,eAAe,QAAmB,UAA4C;AAErF,SAAO,iBAAiB,OAAO,QAAQ,WAAW,QAAQ,EAAE;AAAA,IAC1D,CAAC,UAAU,CAAC,MAAM,OAAO,MAAM;AAAA,EACjC;AACF;AAEA,SAAS,UAAU,QAAmB,UAAwC;AAC5E,QAAM,QAAQ,eAAe,QAAQ,QAAQ;AAC7C,SAAO,QAAQ,iBAAiB,KAAK,IAAI;AAC3C;AAEA,SAAS,kBAAkB,QAAqC;AAC9D,SAAO,kBAAkB,WAAW,QAAQ,OAAO,QAAQ,wBAAwB,CAAC;AACtF;AAEA,SAAS,iBAAiB,QAAqC;AAC7D,MAAI,kBAAkB,uBAAuB,kBAAkB,kBAAkB;AAC/E,WAAO,OAAO,MAAM,WAAW;AAAA,EACjC;AACA,MAAI,kBAAkB,eAAe,OAAO,mBAAmB;AAC7D,YAAQ,OAAO,eAAe,IAAI,WAAW;AAAA,EAC/C;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,OAAgC;AAC9D,QAAM,MAAM,cAAc;AAC1B,QAAM,OAAO,QAAQ;AACrB,QAAM,WAAW,YAAY;AAC7B,QAAM,MAAM,kBAAkB;AAC9B,QAAM,WAAW,iBAAiB,UAAU;AAC5C,QAAM,eAAe,iBAAiB,QAAQ;AAC9C,QAAM,WAAW,oBAAoB,UAAU;AAC/C,QAAM,oBAAoB,oBAAoB,mBAAmB;AACjE,QAAM,WAAWC,SAAQ,MAAM,gBAAgB,GAAG,CAAC,CAAC;AACpD,QAAM,cAAc,KAAK;AACzB,QAAM,YAAY,IAAI,cAAc;AACpC,QAAM,WAAW,eAAe,EAAE,QAAQ,CAAC,UAAU,MAAM,SAAS,SAAS,CAAC;AAC9E,QAAM,cAAc,sBAAsB,KAAK,QAAQ,IAAI,CAAC,KAAK;AACjE,QAAM,cACJ,IAAI,WAAW,IAAI,QAAQ,OAAO,eAAe,IAAI,QAAQ,gBAAgB,cACzE,IAAI,UACJ;AAEN,QAAM,CAAC,MAAM,OAAO,IAAI,SAIrB,EAAE,MAAM,OAAO,SAAS,OAAO,MAAM,KAAK,CAAC;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE,MAAM,OAAO,SAAS,MAAM,CAAC;AAElE,QAAM,UAAUC,QAAO,IAAI;AAC3B,UAAQ,UAAU;AAIlB,QAAM,cAAcA,QAA2B,IAAI;AACnD,QAAM,WAAWA,QAAO,KAAK;AAC7B,QAAM,YAAYA,QAAO,KAAK;AAC9B,WAAS,UAAU,KAAK;AACxB,YAAU,UAAU,MAAM;AAC1B,QAAM,gBAAgBC,aAAY,MAAM;AACtC,QAAI,SAAS,WAAW,UAAU,WAAW,OAAO,aAAa,YAAa;AAG9E,UAAM,gBAAgB,QAAQ,QAAQ,aAClC,QAAQ,QAAQ,iBAAiB,UACjC;AACJ,QAAI,eAAe;AACjB,kBAAY,UAAU;AACtB;AAAA,IACF;AACA,UAAM,SAAS,SAAS;AACxB,gBAAY,UAAU,kBAAkB,eAAe,WAAW,SAAS,OAAO,SAAS;AAAA,EAC7F,GAAG,CAAC,CAAC;AACL,QAAM,kBAAkBA,aAAY,MAAM;AACxC,kBAAc;AACd,aAAS,CAAC,YAAa,QAAQ,OAAO,EAAE,GAAG,SAAS,MAAM,MAAM,IAAI,OAAQ;AAG5E,YAAQ,QAAQ,cAAc;AAC9B,YAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,MAAM,SAAS,MAAM,MAAM,KAAK,EAAE;AAAA,EAC3E,GAAG,CAAC,aAAa,CAAC;AAClB,QAAM,oBAAoBA,aAAY,MAAM;AAC1C,kBAAc;AACd,YAAQ,CAAC,YAAa,QAAQ,OAAO,EAAE,GAAG,SAAS,MAAM,MAAM,IAAI,OAAQ;AAC3E,aAAS,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,MAAM,SAAS,KAAK,EAAE;AAAA,EAChE,GAAG,CAAC,aAAa,CAAC;AAGlB,YAAU,MAAM;AACd,QAAI,YAAa,iBAAgB,WAAW,aAAa,WAAW;AAAA,EAEtE,GAAG,CAAC,aAAa,IAAI,WAAW,WAAW,CAAC;AAE5C,QAAM,MAAMF;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,MAAM,KAAK,gBAAgB;AAAA,MACpC,UAAU,CAAC,WAAW,KAAK,YAAY,MAAM;AAAA,MAC7C,WAAW,MAAM;AACf,aAAK,cAAc,KAAK;AACxB,aAAK,SAAS,EAAE,IAAI,kCAAkC,QAAQ,EAAE,YAAY,EAAE,CAAC;AAAA,MACjF;AAAA,MACA,eAAe,MACb,KAAK,WAAW,KAAK,cAAc,CAAC,KAAK,UAAU,IAAI,KAAK,gBAAgB;AAAA,MAC9E,YAAY,MAAM,wBAAwB,QAAQ;AAAA,MAClD,gBAAgB,CAAC,UAAU,qBAAqB,cAAc,aAAa,QAAW,KAAK;AAAA,MAC3F,mBAAmB,MAAM,SAAS,cAAc,IAAI,MAAM,yBAAyB,CAAC;AAAA,MACpF;AAAA,MACA;AAAA,MACA,oBAAoB,MAAM;AACxB,cAAM,SAAS;AAAA,UACb,kBAAkB,WAAW,WAAW;AAAA,UACxC;AAAA,UACA;AAAA,QACF;AACA,cAAM,KAAK,QAAQ,IAAI,OAAO,KAAK;AACnC,YAAI,GAAI,MAAK,YAAY,EAAE;AAAA,MAC7B;AAAA,MACA,cAAc,MAAM,kBAAkB,WAAW,WAAW,EAAE;AAAA,MAC9D,aAAa,MAAM,kBAAkB,WAAW,WAAW,EAAE;AAAA,IAC/D;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAASC,QAAO,GAAG;AACzB,SAAO,UAAU;AAEjB,QAAM,YAAYC;AAAA,IAChB,CAAC,WAAsB,iBAAiB,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACxE,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,MAAMA,aAAY,CAAC,QAAmB,MAA8B,UAAkB;AAC1F,UAAM,UAAU,OAAO;AAEvB,QAAI,OAAO,OAAO,oBAAoB;AACpC,cAAQ,CAAC,UAAW,MAAM,OAAO,EAAE,GAAG,OAAO,MAAM,MAAM,IAAI,KAAM;AAAA,IACrE;AACA,QAAI,OAAO,OAAO,kBAAkB;AAClC,eAAS,CAAC,UAAW,MAAM,OAAO,EAAE,GAAG,OAAO,MAAM,MAAM,IAAI,KAAM;AAAA,IACtE;AACA,UAAM,SAAS,SAAS,SAAY,QAAQ,cAAc;AAC1D,QAAI,CAAC,OAAO,UAAU,SAAS,OAAO,UAAU,SAAS,IAAI,EAAG;AAChE,SAAK,QAAQ,QAAQ,OAAO,IAAI,SAAS,OAAO,UAAU,SAAS,MAAM,KAAK,CAAC,EAAE,MAAM,MAAM;AAAA,IAE7F,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAGL,QAAM,aAAa,kBAAkB,aAAa,GAAG,eAAe;AACpE,QAAM,gBAAgBF,SAAQ,MAAM;AAClC,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,KAAK;AAAA,MACV,YAAY,OAAO,CAAC,WAAW,OAAO,WAAW,EAAE,IAAI,CAAC,WAAW;AACjE,cAAM,OAAO,OAAO,UAAU,IAAI,cAAc;AAChD,eAAO;AAAA,UACL,IAAI,OAAO;AAAA,UACX,OAAO,YAAY,QAAQ,KAAK,IAAI;AAAA,UACpC,SAAS,OAAO;AAAA,UAChB,aAAa,UAAU,QAAQ,QAAQ;AAAA,UACvC,SAAS,OAAO,UAAU,KAAK,IAAI;AAAA,QACrC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC;AAC9B,YAAU,MAAM;AACd,QAAI,CAAC,cAAc,CAAC,cAAe;AACnC,eAAW,IAAI,KAAK,MAAM,aAAa,CAAC;AAAA,EAC1C,GAAG,CAAC,YAAY,aAAa,CAAC;AAC9B,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AACjB,WAAO,WAAW,SAAS,CAAC,OAAO;AACjC,YAAM,SAAS,WAAW,EAAE;AAC5B,UAAI,OAAQ,KAAI,MAAM;AAAA,IACxB,CAAC;AAAA,EACH,GAAG,CAAC,YAAY,GAAG,CAAC;AAGpB,YAAU,MAAM;AACd,UAAM,OAAO,MAAM,gBAAgB;AACnC,iBAAa,iBAAiB,yBAAyB,IAAI;AAC3D,WAAO,MAAM,aAAa,oBAAoB,yBAAyB,IAAI;AAAA,EAC7E,GAAG,CAAC,cAAc,eAAe,CAAC;AAElC,YAAU,MAAM;AACd,QAAI,CAAC,kBAAmB;AACxB,UAAM,eAAe,QAAQ,UAAU;AACvC,aAAS,UAAU,OAAsB;AACvC,UAAI,MAAM,iBAAkB;AAC5B,YAAM,UAAU,OAAO;AACvB,iBAAW,UAAU,aAAa;AAEhC,YAAI,OAAO,OAAO,YAAa;AAE/B,YAAI,OAAO,OAAO,gBAAiB;AACnC,cAAM,QAAQ,iBAAiB,OAAO,QAAQ,SAAS,QAAQ,EAAE;AAAA,UAAK,CAAC,cACrE,aAAa,OAAO,WAAW,QAAQ;AAAA,QACzC;AACA,YAAI,CAAC,MAAO;AAEZ,YAAI,gBAAgB,OAAO,eAAe,UAAU,eAAe,QAAQ,QAAQ;AACjF;AACF,cAAM,aAAa,OAAO,OAAO;AAEjC,YAAI,OAAO,WAAW,kBAAkB,MAAM,MAAM,EAAG;AACvD,YAAI,CAAC,cAAc,mBAAmB,MAAM,MAAM,EAAG;AAErD,YAAI,CAAC,MAAM,OAAO,YAAY,MAAM,MAAM,KAAK,CAAC,iBAAiB,MAAM,MAAM,EAAG;AAChF,YAAI,CAAC,OAAO,UAAU,SAAS,OAAO,UAAU,QAAQ,cAAc,IAAI,EAAG;AAC7E,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,YAAI,QAAQ,QAAW,KAAK;AAC5B;AAAA,MACF;AAAA,IACF;AACA,aAAS,iBAAiB,WAAW,WAAW,IAAI;AACpD,WAAO,MAAM,SAAS,oBAAoB,WAAW,WAAW,IAAI;AAAA,EACtE,GAAG,CAAC,mBAAmB,YAAY,UAAU,GAAG,CAAC;AAGjD,QAAM,CAAC,UAAU,gBAAgB,IAAI,SAAmC,IAAI;AAC5E,QAAM,cAAcC,QAAiC,IAAI;AACzD,QAAM,cAAcC,aAAY,CAAC,SAAmC;AAClE,gBAAY,UAAU;AACtB,qBAAiB,IAAI;AAAA,EACvB,GAAG,CAAC,CAAC;AACL,QAAM,iBAAiBD,QAAO,WAAW;AACzC,iBAAe,UAAU;AACzB,QAAM,kBAAkB,qBAAqB,YAAY,YAAY;AACrE,QAAM,mBAAmBC;AAAA,IACvB,CAAC,UAAmB;AAClB,YAAM,QAAQ,YAAY;AAC1B,UAAI,CAAC,MAAO;AACZ,YAAM,KAAK,MAAM,IAAI,SAAS,MAAM,KAAK;AACzC,kBAAY,IAAI;AAChB,UAAI,MAAM,OAAO,eAAe,QAAS,QAAO,QAAQ,SAAS,EAAE;AAAA,IACrE;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AACA,YAAU,MAAM;AACd,QAAI,CAAC,iBAAiB;AACpB,kBAAY,IAAI;AAChB;AAAA,IACF;AACA,QAAI;AACJ,UAAM,SAAS,MAAM;AACnB,mBAAa,SAAS;AACtB,UAAI,YAAY,QAAS,aAAY,IAAI;AAAA,IAC3C;AACA,aAAS,UAAU,OAAsB;AACvC,YAAM,QAAQ,YAAY;AAC1B,UAAI,cAAc,KAAK,GAAG;AACxB,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,YAAI,OAAO;AACT,uBAAa,SAAS;AACtB,sBAAY,iBAAiB,OAAO,MAAM,WAAW,KAAK,CAAC,CAAC;AAC5D;AAAA,QACF;AAEA,YAAI,MAAM,UAAU,SAAS,WAAW,UAAU,QAAS;AAC3D,YAAI,mBAAmB,MAAM,MAAM,EAAG;AACtC,cAAM,SAAS;AAAA,UACb,kBAAkB,WAAW,WAAW;AAAA,UACxC,eAAe;AAAA,UACf,MAAM;AAAA,QACR;AACA,YAAI,CAAC,OAAQ;AACb,aAAK,iBAAiB;AACtB,oBAAY,MAAM;AAElB,oBAAY,WAAW,MAAM;AAC3B,gBAAM,UAAU,YAAY;AAC5B,cAAI,WAAW,CAAC,QAAQ,QAAS,aAAY,EAAE,GAAG,SAAS,SAAS,KAAK,CAAC;AAAA,QAC5E,GAAG,sBAAsB;AACzB;AAAA,MACF;AACA,UAAI,CAAC,MAAO;AAEZ,UAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,WAAW;AAC7C,eAAO;AACP;AAAA,MACF;AACA,UAAI,MAAM,QAAQ,UAAU;AAC1B,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,eAAO;AAAA,MACT,WAAW,MAAM,QAAQ,SAAS;AAChC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,qBAAa,SAAS;AACtB,yBAAiB;AAAA,MACnB,WAAW,MAAM,QAAQ,eAAe,MAAM,QAAQ,WAAW;AAC/D,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,qBAAa,SAAS;AACtB,oBAAY,iBAAiB,OAAO,MAAM,QAAQ,cAAc,IAAI,EAAE,CAAC;AAAA,MACzE;AAAA,IACF;AACA,aAAS,QAAQ,OAAsB;AACrC,UAAI,MAAM,QAAQ,aAAa,CAAC,YAAY,QAAS;AACrD,mBAAa,SAAS;AACtB,uBAAiB;AAAA,IACnB;AACA,aAAS,iBAAiB,WAAW,WAAW,IAAI;AACpD,aAAS,iBAAiB,SAAS,SAAS,IAAI;AAChD,WAAO,iBAAiB,QAAQ,MAAM;AACtC,WAAO,MAAM;AACX,mBAAa,SAAS;AACtB,eAAS,oBAAoB,WAAW,WAAW,IAAI;AACvD,eAAS,oBAAoB,SAAS,SAAS,IAAI;AACnD,aAAO,oBAAoB,QAAQ,MAAM;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,iBAAiB,WAAW,aAAa,kBAAkB,WAAW,CAAC;AAE3E,QAAM,QAAQF;AAAA,IACZ,OAAO,EAAE,KAAK,KAAK,UAAU;AAAA,IAC7B,CAAC,KAAK,KAAK,SAAS;AAAA,EACtB;AAEA,SACE,qBAAC,eAAe,UAAf,EAAwB,OACtB;AAAA,UAAM;AAAA,IACN,KAAK,UACJ,oBAAC,YAAS,UAAU,MAClB;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,cAAc,CAAC,SAAS,QAAQ,CAAC,aAAa,EAAE,GAAG,SAAS,KAAK,EAAE;AAAA,QACnE;AAAA;AAAA,IACF,GACF,IACE;AAAA,IACH,MAAM,UACL,oBAAC,YAAS,UAAU,MAClB;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM;AAAA,QACZ,cAAc,CAAC,SAAS,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,KAAK,EAAE;AAAA,QACpE;AAAA;AAAA,IACF,GACF,IACE;AAAA,IACH,UAAU,UACT,oBAAC,YAAS,UAAU,MAClB;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,QACA,SAAS,CAAC,UAAU;AAClB,gBAAM,UAAU,YAAY;AAC5B,cAAI,QAAS,aAAY,EAAE,GAAG,SAAS,MAAM,CAAC;AAAA,QAChD;AAAA,QACA,QAAQ;AAAA,QACR,WAAW,MAAM,YAAY,IAAI;AAAA;AAAA,IACnC,GACF,IACE;AAAA,KACN;AAEJ;","names":["useCallback","useMemo","useRef","useMemo","useRef","useCallback"]}
|
|
@@ -16,22 +16,22 @@ import {
|
|
|
16
16
|
defaultModelPolicyPickerMessages,
|
|
17
17
|
effectiveRows,
|
|
18
18
|
groupPresentationFor
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import {
|
|
21
|
-
findPickerRow,
|
|
22
|
-
labelReasoningEffort,
|
|
23
|
-
modelOffersEffortChoice
|
|
24
|
-
} from "./chunk-GRLPRM56.js";
|
|
19
|
+
} from "./chunk-IQ64BNAG.js";
|
|
25
20
|
import {
|
|
26
21
|
usePortalTokenSource,
|
|
27
22
|
usePortalTokenStyle
|
|
28
23
|
} from "./chunk-XEA5BCMA.js";
|
|
24
|
+
import {
|
|
25
|
+
findPickerRow,
|
|
26
|
+
labelReasoningEffort,
|
|
27
|
+
modelOffersEffortChoice
|
|
28
|
+
} from "./chunk-CFEFYPNR.js";
|
|
29
29
|
import {
|
|
30
30
|
cn
|
|
31
31
|
} from "./chunk-TXS65BB2.js";
|
|
32
32
|
import {
|
|
33
33
|
useOpenGeniText
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-F2YABPRJ.js";
|
|
35
35
|
|
|
36
36
|
// src/components/model-policy-picker.tsx
|
|
37
37
|
import { modelDisplayName, modelLogoUrl } from "@opengeni/sdk/model-display";
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
} from "react";
|
|
55
55
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
56
56
|
var LazyModelPolicyPickerMenu = lazy(
|
|
57
|
-
() => import("./model-policy-picker-menu-
|
|
57
|
+
() => import("./model-policy-picker-menu-66JPM3G5.js").then(({ ModelPolicyPickerPopover }) => ({
|
|
58
58
|
default: ModelPolicyPickerPopover
|
|
59
59
|
}))
|
|
60
60
|
);
|
|
@@ -356,4 +356,4 @@ export {
|
|
|
356
356
|
PickerAnimatedPage,
|
|
357
357
|
ModelPolicyPicker
|
|
358
358
|
};
|
|
359
|
-
//# sourceMappingURL=chunk-
|
|
359
|
+
//# sourceMappingURL=chunk-JRSCWQMC.js.map
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
CrossSlotDeepLinkRecovery
|
|
4
|
+
} from "./chunk-YUVGBL7S.js";
|
|
2
5
|
import {
|
|
3
6
|
authorizedSessionReadWorkspaceIds,
|
|
4
7
|
canonicalSessionDeepLinkTarget,
|
|
@@ -7,9 +10,6 @@ import {
|
|
|
7
10
|
import {
|
|
8
11
|
workspaceSessionsPath
|
|
9
12
|
} from "./chunk-WRLWLGEF.js";
|
|
10
|
-
import {
|
|
11
|
-
CrossSlotDeepLinkRecovery
|
|
12
|
-
} from "./chunk-YUVGBL7S.js";
|
|
13
13
|
import {
|
|
14
14
|
LoadingPanel,
|
|
15
15
|
ProblemPanel
|
|
@@ -90,4 +90,4 @@ function SessionUnavailableRoute(props) {
|
|
|
90
90
|
export {
|
|
91
91
|
SessionUnavailableRoute
|
|
92
92
|
};
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
93
|
+
//# sourceMappingURL=chunk-JRXHSVD5.js.map
|
|
@@ -8,15 +8,15 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
Input
|
|
10
10
|
} from "./chunk-ECNX3UOI.js";
|
|
11
|
-
import {
|
|
12
|
-
userErrorText
|
|
13
|
-
} from "./chunk-L4OF77LE.js";
|
|
14
11
|
import {
|
|
15
12
|
useAppContext
|
|
16
13
|
} from "./chunk-W6KAUGXO.js";
|
|
17
14
|
import {
|
|
18
15
|
Button
|
|
19
16
|
} from "./chunk-HMU5IELG.js";
|
|
17
|
+
import {
|
|
18
|
+
userErrorText
|
|
19
|
+
} from "./chunk-L4OF77LE.js";
|
|
20
20
|
|
|
21
21
|
// src/app/components/session/model-context-inspector.tsx
|
|
22
22
|
import { AGENT_PROMPT_MODULE_TITLES } from "@opengeni/contracts";
|
|
@@ -483,4 +483,4 @@ export {
|
|
|
483
483
|
instructionSections,
|
|
484
484
|
ModelContextInspectorPane
|
|
485
485
|
};
|
|
486
|
-
//# sourceMappingURL=chunk-
|
|
486
|
+
//# sourceMappingURL=chunk-JXYLDT6X.js.map
|
|
@@ -1,74 +1,70 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
CodexAccountIndicator
|
|
4
|
-
} from "./chunk-FN2KA3MJ.js";
|
|
5
2
|
import {
|
|
6
3
|
ModelAccountIndicator
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WD3UXNJV.js";
|
|
5
|
+
import {
|
|
6
|
+
CodexAccountIndicator
|
|
7
|
+
} from "./chunk-FUS76DO4.js";
|
|
8
8
|
import {
|
|
9
9
|
PrivateSessionIndicator
|
|
10
10
|
} from "./chunk-QJ2NKC5F.js";
|
|
11
|
+
import {
|
|
12
|
+
SessionHeader
|
|
13
|
+
} from "./chunk-TTPXGD5S.js";
|
|
14
|
+
import {
|
|
15
|
+
useSessionAdminAccess
|
|
16
|
+
} from "./chunk-HM633ROV.js";
|
|
11
17
|
import {
|
|
12
18
|
PrimaryNav,
|
|
13
19
|
RailHeader,
|
|
14
20
|
SessionShellSlotsContext
|
|
15
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-WTJUKYB2.js";
|
|
16
22
|
import {
|
|
17
23
|
CollapsedSessionsButton,
|
|
18
24
|
SessionList
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import {
|
|
21
|
-
SessionHeader
|
|
22
|
-
} from "./chunk-HUQHJSPV.js";
|
|
23
|
-
import {
|
|
24
|
-
useSessionAdminAccess
|
|
25
|
-
} from "./chunk-OMBIG3NC.js";
|
|
25
|
+
} from "./chunk-7G446JFO.js";
|
|
26
26
|
import {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} from "./chunk-53IXIUYP.js";
|
|
27
|
+
applySessionArchiveProjection
|
|
28
|
+
} from "./chunk-OSI2QWSL.js";
|
|
30
29
|
import {
|
|
31
30
|
notifySessionListChanged
|
|
32
31
|
} from "./chunk-O5S57N6H.js";
|
|
33
|
-
import {
|
|
34
|
-
applySessionArchiveProjection
|
|
35
|
-
} from "./chunk-OSI2QWSL.js";
|
|
36
32
|
import {
|
|
37
33
|
SessionComputeIndicator,
|
|
38
34
|
sessionSupportsFleetSwitching
|
|
39
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-3X46PNBX.js";
|
|
40
36
|
import {
|
|
41
37
|
RAIL_DEFAULT_WIDTH,
|
|
42
38
|
RAIL_MAX_WIDTH,
|
|
43
39
|
RAIL_MIN_WIDTH,
|
|
44
40
|
useRail
|
|
45
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-SF3M27AN.js";
|
|
46
42
|
import {
|
|
47
43
|
useSessionRepliesMute
|
|
48
44
|
} from "./chunk-TSQCKC34.js";
|
|
45
|
+
import {
|
|
46
|
+
useSessionUiFeature
|
|
47
|
+
} from "./chunk-XFNLU7EW.js";
|
|
49
48
|
import {
|
|
50
49
|
SessionStartupProvider
|
|
51
50
|
} from "./chunk-M6K5AXN2.js";
|
|
52
|
-
import {
|
|
53
|
-
useSessionUiFeature
|
|
54
|
-
} from "./chunk-OYJY4Y4A.js";
|
|
55
51
|
import {
|
|
56
52
|
useUiEventTarget
|
|
57
53
|
} from "./chunk-WGPLDFEC.js";
|
|
54
|
+
import {
|
|
55
|
+
windowControlsInPage
|
|
56
|
+
} from "./chunk-FABYS4WM.js";
|
|
58
57
|
import {
|
|
59
58
|
requestSessionUsageLimitEditor,
|
|
60
59
|
sessionUsageLimitCapability
|
|
61
60
|
} from "./chunk-RBRX5ZS3.js";
|
|
62
|
-
import {
|
|
63
|
-
useWorkspaceModelCatalog
|
|
64
|
-
} from "./chunk-LD3HVI2J.js";
|
|
65
61
|
import {
|
|
66
62
|
BrandMark,
|
|
67
63
|
Wordmark
|
|
68
64
|
} from "./chunk-Z63GB7JI.js";
|
|
69
65
|
import {
|
|
70
|
-
|
|
71
|
-
} from "./chunk-
|
|
66
|
+
useWorkspaceModelCatalog
|
|
67
|
+
} from "./chunk-EMFGBAQL.js";
|
|
72
68
|
import {
|
|
73
69
|
cn
|
|
74
70
|
} from "./chunk-A3MTTRCX.js";
|
|
@@ -78,12 +74,12 @@ import {
|
|
|
78
74
|
SheetDescription,
|
|
79
75
|
SheetTitle
|
|
80
76
|
} from "./chunk-6KELG2EG.js";
|
|
77
|
+
import {
|
|
78
|
+
TooltipProvider
|
|
79
|
+
} from "./chunk-OLTGED2Q.js";
|
|
81
80
|
import {
|
|
82
81
|
isIntelligenceEffort
|
|
83
82
|
} from "./chunk-L6Y4ALSM.js";
|
|
84
|
-
import {
|
|
85
|
-
isPersonalWorkspace
|
|
86
|
-
} from "./chunk-74JEZLLQ.js";
|
|
87
83
|
import {
|
|
88
84
|
toast
|
|
89
85
|
} from "./chunk-YG6NARQY.js";
|
|
@@ -92,27 +88,27 @@ import {
|
|
|
92
88
|
useNavigate,
|
|
93
89
|
useRouterState
|
|
94
90
|
} from "./chunk-MYNUBDU7.js";
|
|
91
|
+
import {
|
|
92
|
+
isPersonalWorkspace
|
|
93
|
+
} from "./chunk-74JEZLLQ.js";
|
|
95
94
|
import {
|
|
96
95
|
useAppContext
|
|
97
96
|
} from "./chunk-W6KAUGXO.js";
|
|
98
|
-
import {
|
|
99
|
-
TooltipProvider
|
|
100
|
-
} from "./chunk-OLTGED2Q.js";
|
|
101
97
|
import {
|
|
102
98
|
Button
|
|
103
99
|
} from "./chunk-HMU5IELG.js";
|
|
100
|
+
import {
|
|
101
|
+
isCodexProductModel
|
|
102
|
+
} from "./chunk-J2C6LB6W.js";
|
|
104
103
|
import {
|
|
105
104
|
useLastStartedTurnPolicy
|
|
106
105
|
} from "./chunk-7KGKDWWR.js";
|
|
107
106
|
import {
|
|
108
107
|
useSessionLineage
|
|
109
108
|
} from "./chunk-QEJTQTF5.js";
|
|
110
|
-
import {
|
|
111
|
-
isCodexProductModel
|
|
112
|
-
} from "./chunk-QGSGIYE3.js";
|
|
113
109
|
import {
|
|
114
110
|
findPickerRow
|
|
115
|
-
} from "./chunk-
|
|
111
|
+
} from "./chunk-CFEFYPNR.js";
|
|
116
112
|
|
|
117
113
|
// src/app/components/rail/session-shell.tsx
|
|
118
114
|
import { MenuIcon, MessagesSquareIcon, Settings2Icon } from "lucide-react";
|
|
@@ -296,7 +292,6 @@ function SessionShell({
|
|
|
296
292
|
function SessionShellFrame({ children }) {
|
|
297
293
|
const rail = useRail();
|
|
298
294
|
const chatList = useSessionUiFeature("chatList");
|
|
299
|
-
const newSessionShortcut = useSessionUiFeature("newChatShortcut");
|
|
300
295
|
const context = useAppContext();
|
|
301
296
|
const { canvasBanners } = useContext(SessionShellSlotsContext);
|
|
302
297
|
const pathname = useRouterState({
|
|
@@ -343,16 +338,6 @@ function SessionShellFrame({ children }) {
|
|
|
343
338
|
rail.setDrawerOpen(false);
|
|
344
339
|
}
|
|
345
340
|
}, [pathname]);
|
|
346
|
-
useEffect(() => {
|
|
347
|
-
if (!newSessionShortcut) return;
|
|
348
|
-
function onKeyDown(event) {
|
|
349
|
-
if (!matchesShortcut(event, NEW_SESSION_SHORTCUT.chord)) return;
|
|
350
|
-
event.preventDefault();
|
|
351
|
-
rail.startNewSession();
|
|
352
|
-
}
|
|
353
|
-
document.addEventListener("keydown", onKeyDown);
|
|
354
|
-
return () => document.removeEventListener("keydown", onKeyDown);
|
|
355
|
-
}, [newSessionShortcut, rail]);
|
|
356
341
|
return /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 w-full flex-1 overflow-hidden", children: [
|
|
357
342
|
chatList && !rail.isMobile ? /* @__PURE__ */ jsxs(
|
|
358
343
|
"nav",
|
|
@@ -608,4 +593,4 @@ export {
|
|
|
608
593
|
RailBody,
|
|
609
594
|
SessionShell
|
|
610
595
|
};
|
|
611
|
-
//# sourceMappingURL=chunk-
|
|
596
|
+
//# sourceMappingURL=chunk-KA4LV7G6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/components/rail/session-shell.tsx"],"sourcesContent":["// The session shell every session surface renders: the left rail (fixed and\n// resizable on desktop, an overlay drawer on phones), the canvas top strip with\n// the session header on session routes, and the canvas itself. Surface-owned\n// sections (workspace switcher, navigation extras, footer, banners) come in as\n// slots, so the web app and embeds share one shell and differ only in what they\n// put in it.\nimport type { SessionSummary } from \"@opengeni/sdk\";\nimport { MenuIcon, MessagesSquareIcon, Settings2Icon } from \"lucide-react\";\nimport {\n useCallback,\n useContext,\n useEffect,\n lazy,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n Suspense,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { toast } from \"../../lib/toast\";\n\nimport { findPickerRow } from \"../../../model-policy\";\nimport { useLastStartedTurnPolicy } from \"../../../hooks/use-last-started-turn-policy\";\nimport { useSessionLineage } from \"../../../hooks/use-session-lineage\";\nimport { BrandMark, Wordmark } from \"../brand-mark\";\nimport { SessionHeader } from \"./session-header\";\nimport { SessionStartupProvider } from \"../../lib/session-startup\";\nimport {\n requestSessionUsageLimitEditor,\n sessionUsageLimitCapability,\n} from \"../../lib/session-usage-limit\";\nimport { RAIL_DEFAULT_WIDTH, RAIL_MAX_WIDTH, RAIL_MIN_WIDTH, useRail } from \"./rail-context\";\nimport { CollapsedSessionsButton, SessionList } from \"./session-list\";\nimport {\n PrimaryNav,\n RailHeader,\n SessionShellSlotsContext,\n type SessionShellSlots,\n} from \"./rail-sections\";\n\nexport {\n PrimaryNav,\n RailHeader,\n SessionShellSlotsProvider,\n type SessionShellSlots,\n} from \"./rail-sections\";\nimport {\n SessionComputeIndicator,\n sessionSupportsFleetSwitching,\n} from \"../session/sandbox-switcher\";\nimport { CodexAccountIndicator } from \"../session/codex-account-indicator\";\nimport { ModelAccountIndicator } from \"../session/model-account-indicator\";\nimport { PrivateSessionIndicator } from \"../session/private-session-indicator\";\nimport { Button } from \"../../../ui/button\";\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"../../../ui/sheet\";\nimport { TooltipProvider } from \"../../../ui/tooltip\";\nimport { Link, useNavigate, useRouterState } from \"../../lib/navigation\";\nimport { useWorkspaceModelCatalog } from \"../../lib/use-workspace-model-catalog\";\nimport { useAppContext } from \"../../app-context\";\nimport { isPersonalWorkspace } from \"../../lib/managed-self-context\";\nimport { isCodexProductModel } from \"../../lib/session-model\";\nimport { isIntelligenceEffort } from \"../../lib/session-tools\";\nimport { useSessionRepliesMute } from \"../../lib/inbox\";\nimport { useSessionAdminAccess } from \"../session/session-admin-access\";\nimport { applySessionArchiveProjection } from \"../../lib/session-pagination\";\nimport { notifySessionListChanged } from \"../../lib/session-list-invalidation\";\nimport type { Session } from \"../../types\";\nimport { cn } from \"../../lib/utils\";\nimport { windowControlsInPage } from \"../../lib/desktop\";\nimport { useSessionUiFeature } from \"../../lib/session-ui-features\";\nimport { useUiEventTarget } from \"../../lib/ui-events\";\n\nconst LazySessionTenancyRouteControl = lazy(() =>\n import(\"../session/session-tenancy-control\").then(({ SessionTenancyRouteControl }) => ({\n default: SessionTenancyRouteControl,\n })),\n);\n\n/** The rail body — shared between the fixed desktop column and the mobile drawer. */\nexport function RailBody() {\n const rail = useRail();\n const { switcher, mobileWorkspacePanel, railFooter } = useContext(SessionShellSlotsContext);\n const [mobileSection, setMobileSection] = useState<\"sessions\" | \"workspace\">(\"sessions\");\n const sessionsTabRef = useRef<HTMLButtonElement>(null);\n const workspaceTabRef = useRef<HTMLButtonElement>(null);\n // Unique per app, so two apps on one page never share these ids.\n const mobileNavId = `mobile-nav-${useId().replaceAll(\":\", \"\")}`;\n useEffect(() => {\n if (rail.drawerOpen) setMobileSection(\"sessions\");\n }, [rail.drawerOpen]);\n const moveMobileTab = (section: \"sessions\" | \"workspace\") => {\n setMobileSection(section);\n window.requestAnimationFrame(() =>\n (section === \"sessions\" ? sessionsTabRef : workspaceTabRef).current?.focus(),\n );\n };\n return (\n <div\n data-rail\n className=\"og-rail-glow isolate flex h-full min-h-0 flex-col overflow-hidden pt-[env(safe-area-inset-top)]\"\n >\n {/* Native macOS controls sit over this row. Keep it outside the clipped\n viewport so navigation cannot scroll underneath them. */}\n {windowControlsInPage ? (\n <div data-rail-window-controls className=\"relative z-10 shrink-0 pb-3\">\n <RailHeader showSwitcher={false} />\n </div>\n ) : null}\n <div\n data-rail-scroll-viewport\n className=\"relative z-0 min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-y-contain\"\n >\n <div className=\"flex min-h-full flex-col\">\n {!windowControlsInPage ? <RailHeader /> : null}\n\n {rail.collapsed || windowControlsInPage ? switcher : null}\n\n {rail.isMobile && mobileWorkspacePanel ? (\n <>\n <div\n role=\"tablist\"\n aria-label=\"Navigation section\"\n onKeyDown={(event) => {\n if (event.key === \"ArrowLeft\" || event.key === \"Home\") {\n event.preventDefault();\n moveMobileTab(\"sessions\");\n } else if (event.key === \"ArrowRight\" || event.key === \"End\") {\n event.preventDefault();\n moveMobileTab(\"workspace\");\n }\n }}\n className=\"mx-3 mt-3 grid shrink-0 grid-cols-2 rounded-lg bg-surface-2/70 p-1\"\n >\n <button\n ref={sessionsTabRef}\n id={`${mobileNavId}-tab-sessions`}\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileSection === \"sessions\"}\n aria-controls={`${mobileNavId}-panel-sessions`}\n tabIndex={mobileSection === \"sessions\" ? 0 : -1}\n onClick={() => setMobileSection(\"sessions\")}\n className={cn(\n \"flex h-10 items-center justify-center gap-2 rounded-md text-sm font-normal transition-colors\",\n mobileSection === \"sessions\"\n ? \"bg-surface-3 text-fg shadow-sm\"\n : \"text-fg-label hover:text-fg\",\n )}\n >\n <MessagesSquareIcon className=\"size-4\" />\n Sessions\n </button>\n <button\n ref={workspaceTabRef}\n id={`${mobileNavId}-tab-workspace`}\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileSection === \"workspace\"}\n aria-controls={`${mobileNavId}-panel-workspace`}\n tabIndex={mobileSection === \"workspace\" ? 0 : -1}\n onClick={() => setMobileSection(\"workspace\")}\n className={cn(\n \"flex h-10 items-center justify-center gap-2 rounded-md text-sm font-normal transition-colors\",\n mobileSection === \"workspace\"\n ? \"bg-surface-3 text-fg shadow-sm\"\n : \"text-fg-label hover:text-fg\",\n )}\n >\n <Settings2Icon className=\"size-4\" />\n Workspace\n </button>\n </div>\n {mobileSection === \"sessions\" ? (\n <div\n id={`${mobileNavId}-panel-sessions`}\n role=\"tabpanel\"\n aria-labelledby={`${mobileNavId}-tab-sessions`}\n className=\"mt-2 flex shrink-0 flex-col\"\n >\n <PrimaryNav />\n <SessionList />\n </div>\n ) : (\n <div\n id={`${mobileNavId}-panel-workspace`}\n role=\"tabpanel\"\n aria-labelledby={`${mobileNavId}-tab-workspace`}\n className=\"mt-2 flex shrink-0 flex-col border-t border-border pt-2\"\n >\n {mobileWorkspacePanel}\n </div>\n )}\n </>\n ) : (\n <>\n {/* Sessions are the primary object. Workspace administration remains\n secondary on desktop and becomes its own screen on phones. */}\n <PrimaryNav />\n <div className=\"mt-2 flex shrink-0 flex-col\">\n {rail.collapsed ? <CollapsedSessionsButton /> : <SessionList />}\n </div>\n </>\n )}\n </div>\n </div>\n {/* Keep the persistent controls above the scroll viewport, including\n session-row actions with their own stacking levels. The footer is a\n sibling of the clipped viewport, so it can stay transparent and let\n the rail glow run to the bottom edge. */}\n {railFooter ? (\n <div data-rail-footer className=\"relative z-10 shrink-0 border-t border-border\">\n {railFooter}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * The drag handle on the expanded rail's right edge. A quiet, wide-ish hit area\n * straddling the border: at rest it's invisible (the border is the only line);\n * on hover it thickens into a stronger line, and while dragging it wears the\n * brand tint. Double-click snaps back to the default width. Keyboard users get\n * the collapse toggle elsewhere; this is a pointer affordance (hidden from the\n * a11y tree beyond its separator role + label).\n */\nfunction RailResizeHandle({\n onStart,\n active,\n}: {\n onStart: (event: ReactPointerEvent) => void;\n active: boolean;\n}) {\n const rail = useRail();\n return (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize sidebar\"\n onPointerDown={onStart}\n onDoubleClick={() => rail.setWidth(RAIL_DEFAULT_WIDTH)}\n className=\"group absolute inset-y-0 -right-1 z-20 w-2 cursor-col-resize touch-none select-none\"\n >\n <span\n className={cn(\n \"absolute inset-y-0 right-1 w-px transition-[width,background-color] duration-150\",\n active\n ? \"w-0.5 bg-brand/70\"\n : \"bg-transparent group-hover:w-0.5 group-hover:bg-border-strong\",\n )}\n />\n </div>\n );\n}\n\nconst NO_SLOTS: SessionShellSlots = {};\n\nexport function SessionShell({\n children,\n slots = NO_SLOTS,\n}: {\n children: ReactNode;\n slots?: SessionShellSlots | undefined;\n}) {\n return (\n <SessionShellSlotsContext.Provider value={slots}>\n <SessionShellFrame>{children}</SessionShellFrame>\n </SessionShellSlotsContext.Provider>\n );\n}\n\nfunction SessionShellFrame({ children }: { children: ReactNode }) {\n const rail = useRail();\n const chatList = useSessionUiFeature(\"chatList\");\n const context = useAppContext();\n const { canvasBanners } = useContext(SessionShellSlotsContext);\n const pathname = useRouterState({\n select: (state) => state.location.pathname,\n });\n // Focus returns here when the mobile drawer closes (D9.1): the drawer is a\n // controlled Sheet with no in-tree trigger, so radix can't restore focus on\n // its own — we point it back at the hamburger that opened it.\n const hamburgerRef = rail.drawerTriggerRef;\n\n // Live width while the reader drags the resize handle. Held locally (not in\n // context) so we don't write localStorage on every pointer move — the chosen\n // width is committed once on pointer-up. `null` means \"not resizing\".\n const [liveWidth, setLiveWidth] = useState<number | null>(null);\n const resizing = liveWidth !== null;\n // Teardown for an in-progress drag (remove window listeners + reset body\n // styles). Held in a ref so an unmount / route change MID-DRAG can run it —\n // otherwise the listeners and the col-resize cursor / no-select body styles\n // linger until an unrelated pointer release elsewhere.\n const endResizeRef = useRef<(() => void) | null>(null);\n const startResize = useCallback(\n (event: ReactPointerEvent) => {\n // Ignore anything but a primary-button / touch drag.\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n const startX = event.clientX;\n const startWidth = rail.width;\n const clamp = (w: number) =>\n Math.min(RAIL_MAX_WIDTH, Math.max(RAIL_MIN_WIDTH, Math.round(w)));\n setLiveWidth(startWidth);\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n const onMove = (moveEvent: PointerEvent) =>\n setLiveWidth(clamp(startWidth + (moveEvent.clientX - startX)));\n const teardown = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n endResizeRef.current = null;\n };\n const onUp = (upEvent: PointerEvent) => {\n rail.setWidth(clamp(startWidth + (upEvent.clientX - startX)));\n setLiveWidth(null);\n teardown();\n };\n endResizeRef.current = teardown;\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n },\n [rail],\n );\n // Unmount / route-change mid-drag: run the drag teardown so listeners and\n // body styles never leak.\n useEffect(() => () => endResizeRef.current?.(), []);\n\n // Close the mobile drawer on route change.\n useEffect(() => {\n if (rail.drawerOpen) {\n rail.setDrawerOpen(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname]);\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex h-full min-h-0 w-full flex-1 overflow-hidden\">\n {/* Fixed desktop rail — user-resizable when expanded. */}\n {chatList && !rail.isMobile ? (\n <nav\n aria-label=\"Primary\"\n data-collapsed={rail.collapsed}\n style={rail.collapsed ? undefined : { width: resizing ? liveWidth! : rail.width }}\n className={cn(\n \"relative shrink-0 border-r border-border\",\n // Animate the collapse/expand toggle, but never while dragging — a\n // transition there would lag the handle behind the pointer.\n !resizing && \"motion-safe:transition-[width] motion-safe:duration-150\",\n rail.collapsed && \"w-[56px]\",\n )}\n >\n <RailBody />\n {/* The drag handle only exists on the expanded desktop rail; the\n collapsed strip and the mobile drawer are fixed-width. */}\n {!rail.collapsed ? <RailResizeHandle onStart={startResize} active={resizing} /> : null}\n </nav>\n ) : null}\n\n {/* Mobile overlay drawer. */}\n {chatList && rail.isMobile ? (\n <Sheet open={rail.drawerOpen} onOpenChange={rail.setDrawerOpen}>\n <SheetContent\n side=\"left\"\n showCloseButton={false}\n aria-label=\"Session navigation\"\n className=\"w-screen max-w-none gap-0 p-0 sm:w-[380px] sm:max-w-[90vw]\"\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n rail.restoreDrawerFocus();\n }}\n >\n <SheetTitle className=\"sr-only\">Session navigation</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Browse workspace sessions or open Workspace.\n </SheetDescription>\n <nav aria-label=\"Primary\" className=\"h-full\">\n <RailBody />\n </nav>\n </SheetContent>\n </Sheet>\n ) : null}\n\n {/* Main canvas. */}\n <div data-canvas className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <SessionStartupProvider session={context.session}>\n <CanvasTopStrip hamburgerRef={hamburgerRef} />\n {canvasBanners}\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">{children}</div>\n </SessionStartupProvider>\n </div>\n </div>\n </TooltipProvider>\n );\n}\n\n/**\n * The slim canvas top strip. On mobile it always shows (hamburger + brand). On\n * session routes it also carries the session title/status, the connection and\n * lock pills, and the inspector toggle — moved here from the old top header.\n */\nfunction CanvasTopStrip({ hamburgerRef }: { hamburgerRef: RefObject<HTMLButtonElement | null> }) {\n const rail = useRail();\n const chatList = useSessionUiFeature(\"chatList\");\n const context = useAppContext();\n const pathname = useRouterState({\n select: (state) => state.location.pathname,\n });\n const isSessionRoute = /\\/sessions\\/[^/]+/.test(pathname);\n const showSessionActions = Boolean(context.session) && isSessionRoute;\n const sharedFeed = useSyncExternalStore(\n context.sessionEventFeedStore.subscribe,\n context.sessionEventFeedStore.getSnapshot,\n context.sessionEventFeedStore.getSnapshot,\n );\n const sessionEvents =\n sharedFeed && sharedFeed.sessionId === context.session?.id ? sharedFeed.events : [];\n // The route owns the only session stream. An empty shared feed is still an\n // authoritative shared feed, so this header can never fall back to self-streaming.\n const lineage = useSessionLineage(context.session?.id ?? null, {\n events: sessionEvents,\n pollIntervalMs: 30_000,\n });\n const ancestors = lineage.lineage?.ancestors ?? [];\n\n // On desktop, the strip only renders when there is something to show.\n if (!rail.isMobile && !showSessionActions) {\n return null;\n }\n\n const hamburger =\n chatList && rail.isMobile ? (\n <Button\n ref={hamburgerRef}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Open navigation\"\n onClick={() => {\n // On phones the workspace inspector is also a full-screen surface.\n // Make the two overlays mutually exclusive instead of stacking one\n // modal beneath another and trapping the navigation out of sight.\n context.setInspectorOpen(false);\n rail.setDrawerOpen(true);\n }}\n className=\"size-11\"\n >\n <MenuIcon className=\"size-4\" />\n </Button>\n ) : null;\n\n // Session route: the full identity + status header (its own bar). The live\n // sandbox switcher and codex indicator flow in as slots so the header stays a\n // pure, screenshot-testable component.\n if (showSessionActions && context.session) {\n return (\n <SessionRouteHeader\n session={{\n ...context.session,\n hasSchedules: lineage.lineage?.sessionHasSchedules ?? context.session.hasSchedules,\n }}\n ancestors={ancestors}\n lineageLoading={lineage.loading}\n lineageError={lineage.error}\n events={sessionEvents}\n hamburger={hamburger}\n />\n );\n }\n\n // Mobile, off a session route: the slim brand strip.\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-canvas/75 px-3 backdrop-blur sm:px-4\">\n {hamburger}\n <Link\n to=\"/workspaces/$workspaceId/sessions\"\n params={{ workspaceId: rail.workspaceId }}\n className=\"flex items-center gap-2 text-fg\"\n >\n <BrandMark className=\"w-5\" />\n <Wordmark className=\"text-[17px]\" />\n </Link>\n </header>\n );\n}\n\n/** Session-route header: last-admitted model·effort, not the composer next pick. */\nfunction SessionRouteHeader({\n session,\n ancestors,\n lineageLoading,\n lineageError,\n events,\n hamburger,\n}: {\n session: Session;\n ancestors: SessionSummary[];\n lineageLoading: boolean;\n lineageError: Error | null;\n events: import(\"@opengeni/sdk\").SessionEvent[];\n hamburger: ReactNode;\n}) {\n const uiEvents = useUiEventTarget(\"document\");\n const rail = useRail();\n const context = useAppContext();\n const lastStarted = useLastStartedTurnPolicy(session.id, {\n events,\n pollIntervalMs: 15_000,\n includeServingModel: true,\n });\n const lastStartedModel = lastStarted.policy?.model;\n const lastStartedReasoningEffort = isIntelligenceEffort(lastStarted.policy?.reasoningEffort)\n ? lastStarted.policy.reasoningEffort\n : undefined;\n const lastStartedLatencyMode = lastStarted.policy?.latencyMode;\n // Wait for last-started fetch before trusting session.model — creation default\n // can be a different rail than the newest admitted turn.\n const policyReady = !lastStarted.loading;\n const displayModelId = policyReady ? lastStartedModel || session.model : session.model;\n const navigate = useNavigate();\n const catalog = useWorkspaceModelCatalog(session.workspaceId);\n const selectedRow = findPickerRow(catalog.rows, displayModelId);\n const policyLoading = lastStarted.loading || catalog.loading;\n const credentialSource = selectedRow?.catalog.credentialSource;\n const subscriptionProvider =\n credentialSource?.kind === \"connected_subscription\" ? credentialSource.provider : null;\n const repliesMute = useSessionRepliesMute(session);\n const sessionAdminAccess = useSessionAdminAccess(session);\n const adminAccess = useSessionUiFeature(\"adminAccess\") ? sessionAdminAccess : null;\n const dock = useSessionUiFeature(\"dock\");\n const archiveInFlight = useRef(false);\n const onArchive = useCallback(\n async (target: Session, archived: boolean) => {\n if (archiveInFlight.current) return;\n const accepted = context.captureWorkspaceInvocation(target.workspaceId);\n if (!accepted) return;\n archiveInFlight.current = true;\n try {\n const updated = await context.client.updateSessionArchive(target.workspaceId, target.id, {\n archived,\n expectedVersion: target.archiveVersion ?? 0,\n });\n if (!context.ownsWorkspaceInvocation(target.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: target.workspaceId,\n sessionId: target.id,\n archived: updated.archived,\n });\n toast.success(updated.archived ? \"Chat archived.\" : \"Chat restored.\");\n } catch (error) {\n if (!context.ownsWorkspaceInvocation(target.workspaceId, accepted)) return;\n toast.error(archived ? \"Couldn't archive the chat.\" : \"Couldn't restore the chat.\", {\n description: error instanceof Error ? error.message : String(error),\n });\n } finally {\n archiveInFlight.current = false;\n }\n },\n [context],\n );\n\n return (\n <SessionHeader\n session={session}\n ancestors={ancestors}\n onOpenSchedule={\n session.hasSchedules\n ? () =>\n void navigate({\n to: \"/workspaces/$workspaceId/schedules\",\n params: { workspaceId: session.workspaceId },\n search: { targetSessionId: session.id },\n })\n : null\n }\n lineageLoading={lineageLoading}\n lineageError={lineageError}\n connectionState={context.connectionState}\n status={session.status}\n keyAuthRequired={context.keyAuthRequired}\n onForgetAccessKey={context.forgetAccessKey}\n inspectorOpen={context.inspectorOpen}\n onToggleInspector={\n dock\n ? () => {\n if (!context.inspectorOpen && rail.isMobile) rail.setDrawerOpen(false);\n context.setInspectorOpen((open) => !open);\n }\n : undefined\n }\n onRename={context.updateSessionTitle}\n onPin={(target, pinned) =>\n context.updateSessionPin(target.workspaceId, target.id, pinned, target.pinVersion ?? 0)\n }\n onArchive={onArchive}\n repliesMute={repliesMute}\n adminAccess={adminAccess}\n onOpenUsageLimit={\n // The editor lives in the session panel's Agent tab.\n sessionUsageLimitCapability(context.clientConfig) === \"absent\" || !dock\n ? null\n : () => requestSessionUsageLimitEditor(uiEvents)\n }\n leading={hamburger}\n lastStartedModel={lastStartedModel}\n lastStartedReasoningEffort={lastStartedReasoningEffort}\n lastStartedLatencyMode={lastStartedLatencyMode}\n billingClass={selectedRow?.billingClass}\n modelLabel={selectedRow?.label}\n modelLogoUrl={selectedRow?.catalog.logoUrl}\n policyLoading={policyLoading}\n accessSlot={\n session.tenancy ? (\n <Suspense fallback={null}>\n <LazySessionTenancyRouteControl session={session} events={events} />\n </Suspense>\n ) : isPersonalWorkspace(\n context.workspaces.find((candidate) => candidate.id === session.workspaceId) ?? null,\n context.managedSelfContext,\n ) ? (\n // Without a tenancy record there is no access control to show, but a\n // Personal workspace chat is still private: say so, read-only.\n <PrivateSessionIndicator />\n ) : null\n }\n sandboxSlot={\n sessionSupportsFleetSwitching(session.sandboxBackend) ? (\n <SessionComputeIndicator sessionId={session.id} sandboxBackend={session.sandboxBackend} />\n ) : null\n }\n codexSlot={\n policyReady && isCodexProductModel(displayModelId) ? (\n <CodexAccountIndicator\n workspaceId={session.workspaceId}\n sessionId={session.id}\n model={displayModelId}\n modelReady={policyReady}\n events={events}\n />\n ) : policyReady && subscriptionProvider ? (\n <ModelAccountIndicator\n workspaceId={session.workspaceId}\n sessionId={session.id}\n organizationId={\n context.workspaces.find((candidate) => candidate.id === session.workspaceId)\n ?.accountId ?? null\n }\n provider={subscriptionProvider}\n servingTurnId={lastStarted.policy?.turnId}\n events={events}\n />\n ) : null\n }\n />\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
import {
|
|
3
3
|
InlineDisabledReason
|
|
4
4
|
} from "./chunk-TFK4KFKA.js";
|
|
5
|
-
import {
|
|
6
|
-
FormDialog
|
|
7
|
-
} from "./chunk-MRXOGI3O.js";
|
|
8
|
-
import {
|
|
9
|
-
ReasonTooltip
|
|
10
|
-
} from "./chunk-KS57MLGE.js";
|
|
11
5
|
import {
|
|
12
6
|
MENU_CHECK_CLASS,
|
|
13
7
|
MENU_SEPARATOR_CLASS,
|
|
14
8
|
MENU_SURFACE_CLASS
|
|
15
9
|
} from "./chunk-5OTQA7CM.js";
|
|
10
|
+
import {
|
|
11
|
+
ReasonTooltip
|
|
12
|
+
} from "./chunk-KS57MLGE.js";
|
|
13
|
+
import {
|
|
14
|
+
FormDialog
|
|
15
|
+
} from "./chunk-77CUDSHG.js";
|
|
16
16
|
import {
|
|
17
17
|
containedPortal
|
|
18
18
|
} from "./chunk-J3BHDXQQ.js";
|
|
@@ -387,4 +387,4 @@ export {
|
|
|
387
387
|
needsEscalationConfirm,
|
|
388
388
|
RoleSelect
|
|
389
389
|
};
|
|
390
|
-
//# sourceMappingURL=chunk-
|
|
390
|
+
//# sourceMappingURL=chunk-KGTMHEAP.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
nodeIsActive
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-TASEV25T.js";
|
|
5
5
|
import {
|
|
6
6
|
recencyGroupFor,
|
|
7
7
|
sessionActivityTime
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-J2C6LB6W.js";
|
|
9
9
|
|
|
10
10
|
// src/app/lib/session-group-pagination.tsx
|
|
11
11
|
function sessionPaginationProjectGroup(channelId, label) {
|
|
@@ -132,4 +132,4 @@ export {
|
|
|
132
132
|
sessionMatchesPaginationGroup,
|
|
133
133
|
sessionPaginationLocalDateKey
|
|
134
134
|
};
|
|
135
|
-
//# sourceMappingURL=chunk-
|
|
135
|
+
//# sourceMappingURL=chunk-KOXVGPW4.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-CM7LVUKC.js";
|
|
5
5
|
import {
|
|
6
6
|
useOpenGeniText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-F2YABPRJ.js";
|
|
8
8
|
|
|
9
9
|
// src/components/queue-draft-policy.ts
|
|
10
10
|
function requestQueueDraftEdit(composer, confirmReplacement, editImmediately) {
|
|
@@ -110,4 +110,4 @@ export {
|
|
|
110
110
|
QueueStoppingStatus,
|
|
111
111
|
QueueErrorAlert
|
|
112
112
|
};
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
113
|
+
//# sourceMappingURL=chunk-L5GPPMUB.js.map
|