@opengeni/react 4.6.1 → 4.6.2-canary.39854174564001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/app-state.js +5 -5
- package/dist/app/components/Composer.js +14 -14
- package/dist/app/components/artifacts/artifact-library.js +2 -2
- package/dist/app/components/artifacts/chat-interactive-block.js +10 -10
- package/dist/app/components/artifacts/inline-chat-image.js +14 -14
- package/dist/app/components/artifacts/retained-file-preview.js +15 -15
- package/dist/app/components/artifacts/retained-text-preview.js +2 -2
- package/dist/app/components/artifacts/site-conversations.js +4 -3
- package/dist/app/components/artifacts/site-data.js +2 -2
- package/dist/app/components/artifacts/site-publishing.js +11 -11
- package/dist/app/components/artifacts/site-settings.js +12 -12
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/capabilities/capability-detail-sheet.js +2 -2
- package/dist/app/components/capabilities/capability-logo-source.js +7 -7
- package/dist/app/components/capabilities/native-connect-readiness.js +1 -0
- package/dist/app/components/capabilities/native-connect-readiness.js.map +1 -1
- package/dist/app/components/capabilities/native-connect-setup.js +6 -6
- package/dist/app/components/capabilities/perform-capability-action.js +2 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +8 -8
- package/dist/app/components/capabilities/session-capability-card.js +28 -27
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +14 -14
- package/dist/app/components/capabilities/session-custom-mcp-card.js +9 -9
- package/dist/app/components/capabilities/session-github-card.js +9 -9
- package/dist/app/components/capabilities/session-machine-card.js +13 -13
- package/dist/app/components/command-menu/chat-status.js +6 -5
- package/dist/app/components/command-menu/chat-switcher.d.ts +2 -0
- package/dist/app/components/command-menu/chat-switcher.js +26 -9
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +9 -8
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +4 -4
- package/dist/app/components/composer-mobile-plus-panel.js +5 -5
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +3 -3
- package/dist/app/components/desktop/app-shots.js +5 -5
- package/dist/app/components/desktop/this-computer.js +4 -4
- package/dist/app/components/feedback.js +3 -3
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +3 -3
- package/dist/app/components/markdown.js +4 -4
- package/dist/app/components/models/models-ui.js +2 -2
- package/dist/app/components/pickers.js +5 -5
- package/dist/app/components/rail/rail-context.js +1 -1
- package/dist/app/components/rail/rail-sections.js +15 -14
- package/dist/app/components/rail/session-header.d.ts +6 -5
- package/dist/app/components/rail/session-header.js +11 -10
- package/dist/app/components/rail/session-list.js +14 -13
- package/dist/app/components/rail/session-row-hover-details.js +7 -6
- package/dist/app/components/rail/session-shell.js +30 -32
- package/dist/app/components/rail/site-session-group-heading.js +2 -1
- package/dist/app/components/session/agent-configuration-panel.js +3 -3
- package/dist/app/components/session/banners.js +6 -6
- package/dist/app/components/session/editable-artifacts-workspace.js +12 -12
- package/dist/app/components/session/failed-session-banner.js +4 -4
- package/dist/app/components/session/human-input.js +24 -24
- package/dist/app/components/session/inspector.js +30 -30
- package/dist/app/components/session/message-actions.js +3 -3
- package/dist/app/components/session/message-resource-attachments.js +5 -5
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +4 -4
- package/dist/app/components/session/sandbox-switcher.js +7 -7
- package/dist/app/components/session/sandbox-workspace.js +33 -33
- package/dist/app/components/session/search-markdown-highlight.js +5 -5
- package/dist/app/components/session/search-results-view.js +6 -6
- package/dist/app/components/session/session-admission-notice.js +4 -4
- package/dist/app/components/session/session-machine-access-notice.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +6 -6
- package/dist/app/components/session/session-usage-limit-section.js +3 -3
- package/dist/app/components/session/session-wait-status.js +2 -1
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/subagents.js +5 -4
- package/dist/app/components/session/subscription-account-indicator.d.ts +35 -0
- package/dist/app/components/session/{codex-account-indicator.js → subscription-account-indicator.js} +23 -10
- package/dist/app/components/session/subscription-account-menu.d.ts +11 -12
- package/dist/app/components/session/subscription-account-menu.js +1 -1
- package/dist/app/components/session/subscription-account.d.ts +105 -0
- package/dist/app/components/usage/usage-entry.js +3 -3
- package/dist/app/components/workspace-composer-plus.js +10 -10
- package/dist/app/embed/session-app.js +92 -94
- package/dist/app/lib/actions/actions-provider.js +4 -4
- package/dist/app/lib/actions/chat-switcher.d.ts +19 -7
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +8 -8
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/drive-connect-return.d.ts +26 -0
- package/dist/app/lib/drive-connect-return.js +16 -0
- package/dist/app/lib/events.js +7 -7
- package/dist/app/lib/failed-session-copy.js +3 -3
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/session-branch-cache.js +6 -5
- package/dist/app/lib/session-group-pagination.js +6 -5
- package/dist/app/lib/session-hover-facts.js +6 -5
- package/dist/app/lib/session-rail.js +2 -1
- package/dist/app/lib/sessions-group.js +5 -4
- package/dist/app/lib/turn-failure-analytics.js +4 -4
- package/dist/app/lib/use-workspace-machines.js +4 -4
- package/dist/app/lib/use-workspace-model-catalog.js +3 -3
- package/dist/app/lib/use-workspace-rigs.js +2 -2
- package/dist/app/lib/workspace-navigation-preference.js +4 -4
- package/dist/app/lib/workspace-scope-context.js +3 -3
- package/dist/app/routes/artifacts.js +26 -25
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +15 -15
- package/dist/app/routes/session.js +64 -63
- package/dist/app/routes/sessions-index.js +41 -41
- package/dist/app/routes/site-view.js +30 -29
- package/dist/app/routes/site-view.js.map +1 -1
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +10 -10
- package/dist/{browser-viewer-YQC6BFMS.js → browser-viewer-VKIAULG7.js} +4 -4
- package/dist/{chat-interactive-block-Z22YHDRU.js → chat-interactive-block-JGYSW4KB.js} +5 -5
- package/dist/{chunk-WN2MIB4Q.js → chunk-22V2QCEM.js} +2 -2
- package/dist/{chunk-SJPAKWWP.js → chunk-2BISI664.js} +2 -2
- package/dist/{chunk-O5UOCMH4.js → chunk-2LPJVEWY.js} +3 -3
- package/dist/{chunk-JI6WPLZB.js → chunk-2SBCOGQN.js} +4 -4
- package/dist/{chunk-6JF7C3U3.js → chunk-2WERWWSS.js} +2 -2
- package/dist/{chunk-4XKT4ENZ.js → chunk-2Y3QL3DA.js} +4 -4
- package/dist/{chunk-KVMFT6FN.js → chunk-3FL3F4WF.js} +2 -2
- package/dist/{chunk-4VJOZJDV.js → chunk-3JPQAIYJ.js} +2 -2
- package/dist/{chunk-27EORKJ4.js → chunk-3N4LNBJF.js} +2 -2
- package/dist/{chunk-7JZSFJHB.js → chunk-3OJU3RUR.js} +2 -2
- package/dist/{chunk-NV5OYV3G.js → chunk-3U6K36QA.js} +5 -5
- package/dist/{chunk-MDRLP5DO.js → chunk-3W7ROHN4.js} +3 -3
- package/dist/{chunk-3MQM4ZOC.js → chunk-3Y6ZR2VN.js} +3 -3
- package/dist/{chunk-HXZIX7MR.js → chunk-47AB65IO.js} +4 -4
- package/dist/{chunk-DNYD7AUG.js → chunk-4BOLIZ7Y.js} +3 -3
- package/dist/{chunk-4XO346BW.js → chunk-4FBJFQFU.js} +2 -2
- package/dist/{chunk-DAQG3C4W.js → chunk-4HM6YDBX.js} +3 -3
- package/dist/{chunk-BWKZEW6K.js → chunk-4T3E56NT.js} +3 -3
- package/dist/{chunk-4PC7LIQK.js → chunk-4ZMUWRFF.js} +3 -3
- package/dist/{chunk-O4AWXTZQ.js → chunk-52XIYULR.js} +3 -3
- package/dist/{chunk-GXK4CUAB.js → chunk-5WQKTT5Z.js} +2 -2
- package/dist/{chunk-MHIYYHCL.js → chunk-5ZAHAUWD.js} +10 -10
- package/dist/{chunk-6N7W3TOV.js → chunk-63BPMTBM.js} +2 -2
- package/dist/{chunk-R5YZ3ROM.js → chunk-63PQKTTT.js} +2 -2
- package/dist/{chunk-WLZVXCPZ.js → chunk-6GO6WN22.js} +3 -3
- package/dist/{chunk-6PQBKMUL.js → chunk-6IIA63VD.js} +11 -7
- package/dist/chunk-6IIA63VD.js.map +1 -0
- package/dist/{chunk-PQCFW2KT.js → chunk-6IRDW7K3.js} +18 -13
- package/dist/chunk-6IRDW7K3.js.map +1 -0
- package/dist/{chunk-XDCZBOEY.js → chunk-6LGBGPBU.js} +1 -1
- package/dist/{chunk-D4QOZXPM.js → chunk-7ITDATTP.js} +2 -2
- package/dist/{chunk-M5E3CKSE.js → chunk-7QWWE5XL.js} +2 -2
- package/dist/{chunk-RABKQFTA.js → chunk-A2HCAMRH.js} +2 -2
- package/dist/{chunk-6K3WNTRI.js → chunk-AODISQO6.js} +2 -2
- package/dist/{chunk-C6JL6PBL.js → chunk-AQDRH6VF.js} +3 -3
- package/dist/{chunk-72XEFLMD.js → chunk-ASWINLSW.js} +2 -2
- package/dist/{chunk-DNLXQUBX.js → chunk-B746OUJC.js} +24 -36
- package/dist/chunk-B746OUJC.js.map +1 -0
- package/dist/{chunk-FVCLVASD.js → chunk-B7ZKSROO.js} +24 -24
- package/dist/{chunk-EURDMOXZ.js → chunk-BYJZUCOQ.js} +2 -2
- package/dist/{chunk-ZWACUOU5.js → chunk-CDBGAAJY.js} +3 -3
- package/dist/chunk-CDBGAAJY.js.map +1 -0
- package/dist/{chunk-BPD4IJBG.js → chunk-CG6CJMIS.js} +2 -2
- package/dist/{chunk-B254JG72.js → chunk-CQX24PT7.js} +2 -2
- package/dist/{chunk-HJTTDLF6.js → chunk-CY3NO4JN.js} +4 -4
- package/dist/{chunk-OLUG4IFF.js → chunk-D2RLPRSG.js} +2 -2
- package/dist/{chunk-74NIHMAT.js → chunk-D653JH6D.js} +3 -3
- package/dist/{chunk-FMATVQFW.js → chunk-DA6EQDFR.js} +6 -6
- package/dist/{chunk-2LUO22FR.js → chunk-DAI5CTQF.js} +4 -4
- package/dist/{chunk-HTKVYEVB.js → chunk-DBM4ZXDN.js} +2 -2
- package/dist/{chunk-MB2DTUEG.js → chunk-DNYKLU3K.js} +4 -4
- package/dist/{chunk-NPDL4W4Y.js → chunk-DT53LBQN.js} +44 -45
- package/dist/chunk-DT53LBQN.js.map +1 -0
- package/dist/{chunk-26P7B46A.js → chunk-DXYARXK3.js} +3 -3
- package/dist/{chunk-JQKURO3S.js → chunk-E4MQRQ6Z.js} +2 -2
- package/dist/{chunk-KW53DBY7.js → chunk-EBW2E32G.js} +2 -2
- package/dist/{chunk-O73DRA77.js → chunk-ENKBO7FC.js} +4 -4
- package/dist/{chunk-32HA7DXJ.js → chunk-EQNGX77H.js} +11 -11
- package/dist/{chunk-CA64OZLZ.js → chunk-FAPYRTG6.js} +4 -4
- package/dist/{chunk-WWM7WVD2.js → chunk-GABFKHQE.js} +2 -2
- package/dist/chunk-GLCOKWLH.js +42 -0
- package/dist/chunk-GLCOKWLH.js.map +1 -0
- package/dist/{chunk-OHG2UQ2O.js → chunk-GNM3OY36.js} +51 -13
- package/dist/chunk-GNM3OY36.js.map +1 -0
- package/dist/{chunk-JJ7VMIEQ.js → chunk-H2GTWX4D.js} +14 -14
- package/dist/{chunk-LR7U3HCD.js → chunk-HPSATFLQ.js} +4 -4
- package/dist/{chunk-TM2ZLY3Q.js → chunk-I56TUH3Z.js} +13 -13
- package/dist/{chunk-ZZUKJ5HQ.js → chunk-IG2ERMSB.js} +2 -2
- package/dist/{chunk-2SZ3KC5S.js → chunk-IMKIIS4Y.js} +2 -2
- package/dist/{chunk-I57HZMMA.js → chunk-IXIE3H43.js} +2 -2
- package/dist/{chunk-OWJD3V4V.js → chunk-J3YQ3554.js} +2 -2
- package/dist/{chunk-BCFHMBMK.js → chunk-J5HZBHU4.js} +7 -7
- package/dist/{chunk-UHMMRQGU.js → chunk-KD7GNHOP.js} +3 -3
- package/dist/{chunk-RXMIXKB3.js → chunk-KIKAVZOW.js} +2 -2
- package/dist/{chunk-X7Z4B5GK.js → chunk-KPL7EXS6.js} +2 -2
- package/dist/{chunk-GTR2WUBA.js → chunk-KX6M5CJI.js} +1 -1
- package/dist/{chunk-CYO5HL4C.js → chunk-KYL2BPS2.js} +2 -2
- package/dist/{chunk-ZPZYYSHW.js → chunk-L7EAQGWN.js} +5 -5
- package/dist/{chunk-QLDMF7MH.js → chunk-LC5HE7PZ.js} +2 -2
- package/dist/{chunk-3SMJ2BIQ.js → chunk-LGD5RESZ.js} +7 -33
- package/dist/chunk-LGD5RESZ.js.map +1 -0
- package/dist/{chunk-4ICPJZAB.js → chunk-LMYSYG6U.js} +2 -2
- package/dist/{chunk-3ZZOE4SN.js → chunk-LOCDYMD6.js} +4 -4
- package/dist/{chunk-DNWBLT4U.js → chunk-MASBMJ2M.js} +2 -2
- package/dist/{chunk-6VITVQ23.js → chunk-MTYE2PPR.js} +1 -1
- package/dist/{chunk-NZMQDUOD.js → chunk-MU6HYDNF.js} +5 -5
- package/dist/{chunk-GMVKCEBG.js → chunk-MY6QEDZ2.js} +2 -2
- package/dist/{chunk-SK57RWSA.js → chunk-MZGKQ5WV.js} +2 -2
- package/dist/{chunk-HSQRYJ4P.js → chunk-N52SFH2K.js} +2 -2
- package/dist/{chunk-CEQUNJJY.js → chunk-NDCP5TVN.js} +2 -2
- package/dist/{chunk-MY6VZVCP.js → chunk-OAJX5CEL.js} +4 -4
- package/dist/{chunk-BQWUXC55.js → chunk-OBBLVC2W.js} +9 -9
- package/dist/{chunk-IWIMIRV3.js → chunk-OSJTLQXA.js} +9 -4
- package/dist/chunk-OSJTLQXA.js.map +1 -0
- package/dist/{chunk-FH75NNLB.js → chunk-OZ5NAXCP.js} +2 -2
- package/dist/{chunk-PEGNFZ3F.js → chunk-P5S777YI.js} +2 -2
- package/dist/{chunk-LY6727IF.js → chunk-PPSVFNEA.js} +1 -1
- package/dist/{chunk-K4FDZVMQ.js → chunk-PR42VIVY.js} +2 -2
- package/dist/{chunk-I74J2UZ2.js → chunk-PWMZCW4H.js} +8 -8
- package/dist/{chunk-6YDXUE5H.js → chunk-PYA2O3WS.js} +2 -2
- package/dist/{chunk-GUIZDI5T.js → chunk-Q2PA4KZS.js} +2 -2
- package/dist/{chunk-DZH2HTTB.js → chunk-R27GW5WV.js} +1 -1
- package/dist/chunk-R4U4EWZG.js +414 -0
- package/dist/chunk-R4U4EWZG.js.map +1 -0
- package/dist/{chunk-7OIBLMDP.js → chunk-RAQISW42.js} +2 -2
- package/dist/{chunk-CPKD2YGK.js → chunk-RNU5CUPI.js} +2 -2
- package/dist/{chunk-467VRP4E.js → chunk-RO5YZQHZ.js} +3 -3
- package/dist/{chunk-SSZROOOI.js → chunk-ROLXYGT5.js} +2 -2
- package/dist/{chunk-F4B2YYCN.js → chunk-TAWFXRXB.js} +3 -3
- package/dist/{chunk-G3FU2IF7.js → chunk-TB7UW5BB.js} +3 -3
- package/dist/{chunk-NF6Q4XTN.js → chunk-TQF2I5SY.js} +3 -3
- package/dist/{chunk-MM7OKOTE.js → chunk-UBXHP224.js} +43 -18
- package/dist/chunk-UBXHP224.js.map +1 -0
- package/dist/{chunk-M7A226EQ.js → chunk-UL44R3W2.js} +2 -2
- package/dist/{chunk-65K5LV4L.js → chunk-UQKBV22P.js} +21 -20
- package/dist/{chunk-65K5LV4L.js.map → chunk-UQKBV22P.js.map} +1 -1
- package/dist/{chunk-GTR5NLVP.js → chunk-VCRQPLKS.js} +2 -2
- package/dist/{chunk-NWSAF6P5.js → chunk-WJDH7CH5.js} +22 -1
- package/dist/chunk-WJDH7CH5.js.map +1 -0
- package/dist/{chunk-LG67ZNRU.js → chunk-WK2ZCTUF.js} +2 -2
- package/dist/{chunk-XGE75VPK.js → chunk-WNARM3LY.js} +3 -3
- package/dist/{chunk-RNBH5TSM.js → chunk-WQ2RTQYO.js} +2 -2
- package/dist/chunk-X5XEYQ4B.js +84 -0
- package/dist/chunk-X5XEYQ4B.js.map +1 -0
- package/dist/{chunk-W57QFLQD.js → chunk-X6JIGNLI.js} +4 -4
- package/dist/{chunk-CKA4SJRK.js → chunk-XIQDCQX7.js} +2 -2
- package/dist/{chunk-AJ7PY4FJ.js → chunk-Y3GCG6CA.js} +2 -2
- package/dist/{chunk-2K27S6LK.js → chunk-Y565N5ZJ.js} +24 -7
- package/dist/chunk-Y565N5ZJ.js.map +1 -0
- package/dist/{chunk-ZRB4M3GG.js → chunk-YC5KH7ZB.js} +3 -3
- package/dist/{chunk-4RY64KQY.js → chunk-YJUKLLNP.js} +2 -2
- package/dist/{chunk-24POWVUY.js → chunk-ZDJNRRVS.js} +4 -4
- package/dist/{chunk-S6WJ6TUT.js → chunk-ZEVJGMNB.js} +2 -2
- package/dist/chunk-ZEVJGMNB.js.map +1 -0
- package/dist/{chunk-M7YEZR6X.js → chunk-ZITMDA4C.js} +2 -2
- package/dist/components/model-policy-picker.d.ts +2 -0
- package/dist/composer.js +6 -6
- package/dist/{computer-viewer-BWVNDFTO.js → computer-viewer-6CRLWQHP.js} +5 -5
- package/dist/connect.js +6 -6
- package/dist/connection-service-presentation.d.ts +1 -4
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-GBXSZ3TO.js → embedded-new-voice-KILV3RYM.js} +5 -5
- package/dist/{embedded-voice-MGI7EK7C.js → embedded-voice-GHDRLCFX.js} +5 -5
- package/dist/{fleet-decision-row-35S3GAUN.js → fleet-decision-row-DQXRRBT7.js} +2 -2
- package/dist/index.js +36 -36
- package/dist/interaction.js +5 -5
- package/dist/machines.js +3 -3
- package/dist/messages/en.d.ts +1 -1
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-KP53N6UJ.js → model-policy-picker-menu-5ALKUJMR.js} +4 -4
- package/dist/{platform-activity-row-ISMXR7NJ.js → platform-activity-row-227C764Z.js} +2 -2
- package/dist/{queue-surface-implementation-ULW7DDJA.js → queue-surface-implementation-H3NOBXU5.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{sandbox-files-QYSD4XCZ.js → sandbox-files-5FEOHUMD.js} +6 -6
- package/dist/session-app.js +92 -94
- package/dist/{session-realtime-JXRLPNUH.js → session-realtime-OHBMODNX.js} +3 -3
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +24 -24
- package/dist/session.js +5 -5
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/connector-logo-index.d.ts +19 -0
- package/dist/{timeline-annotation-markers-OJYKHBEO.js → timeline-annotation-markers-NDHS7MCK.js} +2 -2
- package/dist/{timeline-annotation-selection-6OAZLXFU.js → timeline-annotation-selection-DRQSTJOV.js} +2 -2
- package/dist/{timeline-annotations-dialog-5M6DP5FX.js → timeline-annotations-dialog-G6J5ZJKN.js} +3 -3
- package/dist/timeline-model.d.ts +2 -0
- package/dist/timeline-model.js +9 -1
- package/dist/ui/list-row.js +1 -1
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +4 -4
- package/src/app/components/capabilities/native-connect-readiness.tsx +1 -0
- package/src/app/components/capabilities/perform-capability-action.test.ts +67 -0
- package/src/app/components/capabilities/perform-capability-action.tsx +28 -0
- package/src/app/components/command-menu/chat-switcher.tsx +25 -4
- package/src/app/components/rail/session-header.test.tsx +73 -2
- package/src/app/components/rail/session-header.tsx +20 -12
- package/src/app/components/rail/session-shell.tsx +10 -18
- package/src/app/components/session/subscription-account-indicator.test.ts +239 -0
- package/src/app/components/session/subscription-account-indicator.tsx +361 -0
- package/src/app/components/session/subscription-account-menu.tsx +21 -43
- package/src/app/components/session/subscription-account.test.ts +314 -0
- package/src/app/components/session/subscription-account.ts +354 -0
- package/src/app/lib/actions/actions-provider.tsx +11 -0
- package/src/app/lib/actions/actions.test.ts +59 -4
- package/src/app/lib/actions/chat-switcher.ts +73 -20
- package/src/app/lib/drive-connect-return.test.ts +183 -0
- package/src/app/lib/drive-connect-return.tsx +116 -0
- package/src/app/routes/session.tsx +12 -14
- package/src/app/routes/sessions-index.tsx +1 -0
- package/src/components/model-policy-picker-menu.tsx +25 -4
- package/src/components/model-policy-picker.tsx +2 -0
- package/src/components/session-mcp-capability-card.tsx +13 -4
- package/src/connection-service-presentation.ts +6 -1
- package/src/messages/en.ts +1 -1
- package/src/timeline/connector-logo-index.test.ts +46 -0
- package/src/timeline/connector-logo-index.ts +68 -0
- package/src/timeline-model.ts +6 -0
- package/src/ui/list-row.tsx +38 -10
- package/styles/compiled.css +13 -0
- package/dist/app/components/session/codex-account-indicator.d.ts +0 -9
- package/dist/app/components/session/model-account-indicator.d.ts +0 -10
- package/dist/app/components/session/model-account-indicator.js +0 -34
- package/dist/app/components/session/model-account-usage.d.ts +0 -8
- package/dist/app/components/session/model-account-usage.js +0 -8
- package/dist/chunk-2K27S6LK.js.map +0 -1
- package/dist/chunk-3SMJ2BIQ.js.map +0 -1
- package/dist/chunk-6PQBKMUL.js.map +0 -1
- package/dist/chunk-7H2D4VNU.js +0 -150
- package/dist/chunk-7H2D4VNU.js.map +0 -1
- package/dist/chunk-DNLXQUBX.js.map +0 -1
- package/dist/chunk-HCCSAECI.js +0 -132
- package/dist/chunk-HCCSAECI.js.map +0 -1
- package/dist/chunk-IWIMIRV3.js.map +0 -1
- package/dist/chunk-M77ZQE5T.js +0 -58
- package/dist/chunk-M77ZQE5T.js.map +0 -1
- package/dist/chunk-MM7OKOTE.js.map +0 -1
- package/dist/chunk-NPDL4W4Y.js.map +0 -1
- package/dist/chunk-NWSAF6P5.js.map +0 -1
- package/dist/chunk-OHG2UQ2O.js.map +0 -1
- package/dist/chunk-PQCFW2KT.js.map +0 -1
- package/dist/chunk-S6WJ6TUT.js.map +0 -1
- package/dist/chunk-ZWACUOU5.js.map +0 -1
- package/dist/session-realtime-JXRLPNUH.js.map +0 -1
- package/src/app/components/session/codex-account-indicator.tsx +0 -207
- package/src/app/components/session/model-account-indicator.tsx +0 -189
- package/src/app/components/session/model-account-usage.test.ts +0 -59
- package/src/app/components/session/model-account-usage.tsx +0 -89
- /package/dist/app/components/session/{codex-account-indicator.js.map → subscription-account-indicator.js.map} +0 -0
- /package/dist/app/{components/session/model-account-indicator.js.map → lib/drive-connect-return.js.map} +0 -0
- /package/dist/{app/components/session/model-account-usage.js.map → browser-viewer-VKIAULG7.js.map} +0 -0
- /package/dist/{browser-viewer-YQC6BFMS.js.map → chat-interactive-block-JGYSW4KB.js.map} +0 -0
- /package/dist/{chunk-WN2MIB4Q.js.map → chunk-22V2QCEM.js.map} +0 -0
- /package/dist/{chunk-SJPAKWWP.js.map → chunk-2BISI664.js.map} +0 -0
- /package/dist/{chunk-O5UOCMH4.js.map → chunk-2LPJVEWY.js.map} +0 -0
- /package/dist/{chunk-JI6WPLZB.js.map → chunk-2SBCOGQN.js.map} +0 -0
- /package/dist/{chunk-6JF7C3U3.js.map → chunk-2WERWWSS.js.map} +0 -0
- /package/dist/{chunk-4XKT4ENZ.js.map → chunk-2Y3QL3DA.js.map} +0 -0
- /package/dist/{chunk-KVMFT6FN.js.map → chunk-3FL3F4WF.js.map} +0 -0
- /package/dist/{chunk-4VJOZJDV.js.map → chunk-3JPQAIYJ.js.map} +0 -0
- /package/dist/{chunk-27EORKJ4.js.map → chunk-3N4LNBJF.js.map} +0 -0
- /package/dist/{chunk-7JZSFJHB.js.map → chunk-3OJU3RUR.js.map} +0 -0
- /package/dist/{chunk-NV5OYV3G.js.map → chunk-3U6K36QA.js.map} +0 -0
- /package/dist/{chunk-MDRLP5DO.js.map → chunk-3W7ROHN4.js.map} +0 -0
- /package/dist/{chunk-3MQM4ZOC.js.map → chunk-3Y6ZR2VN.js.map} +0 -0
- /package/dist/{chunk-HXZIX7MR.js.map → chunk-47AB65IO.js.map} +0 -0
- /package/dist/{chunk-DNYD7AUG.js.map → chunk-4BOLIZ7Y.js.map} +0 -0
- /package/dist/{chunk-4XO346BW.js.map → chunk-4FBJFQFU.js.map} +0 -0
- /package/dist/{chunk-DAQG3C4W.js.map → chunk-4HM6YDBX.js.map} +0 -0
- /package/dist/{chunk-BWKZEW6K.js.map → chunk-4T3E56NT.js.map} +0 -0
- /package/dist/{chunk-4PC7LIQK.js.map → chunk-4ZMUWRFF.js.map} +0 -0
- /package/dist/{chunk-O4AWXTZQ.js.map → chunk-52XIYULR.js.map} +0 -0
- /package/dist/{chunk-GXK4CUAB.js.map → chunk-5WQKTT5Z.js.map} +0 -0
- /package/dist/{chunk-MHIYYHCL.js.map → chunk-5ZAHAUWD.js.map} +0 -0
- /package/dist/{chunk-6N7W3TOV.js.map → chunk-63BPMTBM.js.map} +0 -0
- /package/dist/{chunk-R5YZ3ROM.js.map → chunk-63PQKTTT.js.map} +0 -0
- /package/dist/{chunk-WLZVXCPZ.js.map → chunk-6GO6WN22.js.map} +0 -0
- /package/dist/{chunk-XDCZBOEY.js.map → chunk-6LGBGPBU.js.map} +0 -0
- /package/dist/{chunk-D4QOZXPM.js.map → chunk-7ITDATTP.js.map} +0 -0
- /package/dist/{chunk-M5E3CKSE.js.map → chunk-7QWWE5XL.js.map} +0 -0
- /package/dist/{chunk-RABKQFTA.js.map → chunk-A2HCAMRH.js.map} +0 -0
- /package/dist/{chunk-6K3WNTRI.js.map → chunk-AODISQO6.js.map} +0 -0
- /package/dist/{chunk-C6JL6PBL.js.map → chunk-AQDRH6VF.js.map} +0 -0
- /package/dist/{chunk-72XEFLMD.js.map → chunk-ASWINLSW.js.map} +0 -0
- /package/dist/{chunk-FVCLVASD.js.map → chunk-B7ZKSROO.js.map} +0 -0
- /package/dist/{chunk-EURDMOXZ.js.map → chunk-BYJZUCOQ.js.map} +0 -0
- /package/dist/{chunk-BPD4IJBG.js.map → chunk-CG6CJMIS.js.map} +0 -0
- /package/dist/{chunk-B254JG72.js.map → chunk-CQX24PT7.js.map} +0 -0
- /package/dist/{chunk-HJTTDLF6.js.map → chunk-CY3NO4JN.js.map} +0 -0
- /package/dist/{chunk-OLUG4IFF.js.map → chunk-D2RLPRSG.js.map} +0 -0
- /package/dist/{chunk-74NIHMAT.js.map → chunk-D653JH6D.js.map} +0 -0
- /package/dist/{chunk-FMATVQFW.js.map → chunk-DA6EQDFR.js.map} +0 -0
- /package/dist/{chunk-2LUO22FR.js.map → chunk-DAI5CTQF.js.map} +0 -0
- /package/dist/{chunk-HTKVYEVB.js.map → chunk-DBM4ZXDN.js.map} +0 -0
- /package/dist/{chunk-MB2DTUEG.js.map → chunk-DNYKLU3K.js.map} +0 -0
- /package/dist/{chunk-26P7B46A.js.map → chunk-DXYARXK3.js.map} +0 -0
- /package/dist/{chunk-JQKURO3S.js.map → chunk-E4MQRQ6Z.js.map} +0 -0
- /package/dist/{chunk-KW53DBY7.js.map → chunk-EBW2E32G.js.map} +0 -0
- /package/dist/{chunk-O73DRA77.js.map → chunk-ENKBO7FC.js.map} +0 -0
- /package/dist/{chunk-32HA7DXJ.js.map → chunk-EQNGX77H.js.map} +0 -0
- /package/dist/{chunk-CA64OZLZ.js.map → chunk-FAPYRTG6.js.map} +0 -0
- /package/dist/{chunk-WWM7WVD2.js.map → chunk-GABFKHQE.js.map} +0 -0
- /package/dist/{chunk-JJ7VMIEQ.js.map → chunk-H2GTWX4D.js.map} +0 -0
- /package/dist/{chunk-LR7U3HCD.js.map → chunk-HPSATFLQ.js.map} +0 -0
- /package/dist/{chunk-TM2ZLY3Q.js.map → chunk-I56TUH3Z.js.map} +0 -0
- /package/dist/{chunk-ZZUKJ5HQ.js.map → chunk-IG2ERMSB.js.map} +0 -0
- /package/dist/{chunk-2SZ3KC5S.js.map → chunk-IMKIIS4Y.js.map} +0 -0
- /package/dist/{chunk-I57HZMMA.js.map → chunk-IXIE3H43.js.map} +0 -0
- /package/dist/{chunk-OWJD3V4V.js.map → chunk-J3YQ3554.js.map} +0 -0
- /package/dist/{chunk-BCFHMBMK.js.map → chunk-J5HZBHU4.js.map} +0 -0
- /package/dist/{chunk-UHMMRQGU.js.map → chunk-KD7GNHOP.js.map} +0 -0
- /package/dist/{chunk-RXMIXKB3.js.map → chunk-KIKAVZOW.js.map} +0 -0
- /package/dist/{chunk-X7Z4B5GK.js.map → chunk-KPL7EXS6.js.map} +0 -0
- /package/dist/{chunk-GTR2WUBA.js.map → chunk-KX6M5CJI.js.map} +0 -0
- /package/dist/{chunk-CYO5HL4C.js.map → chunk-KYL2BPS2.js.map} +0 -0
- /package/dist/{chunk-ZPZYYSHW.js.map → chunk-L7EAQGWN.js.map} +0 -0
- /package/dist/{chunk-QLDMF7MH.js.map → chunk-LC5HE7PZ.js.map} +0 -0
- /package/dist/{chunk-4ICPJZAB.js.map → chunk-LMYSYG6U.js.map} +0 -0
- /package/dist/{chunk-3ZZOE4SN.js.map → chunk-LOCDYMD6.js.map} +0 -0
- /package/dist/{chunk-DNWBLT4U.js.map → chunk-MASBMJ2M.js.map} +0 -0
- /package/dist/{chunk-6VITVQ23.js.map → chunk-MTYE2PPR.js.map} +0 -0
- /package/dist/{chunk-NZMQDUOD.js.map → chunk-MU6HYDNF.js.map} +0 -0
- /package/dist/{chunk-GMVKCEBG.js.map → chunk-MY6QEDZ2.js.map} +0 -0
- /package/dist/{chunk-SK57RWSA.js.map → chunk-MZGKQ5WV.js.map} +0 -0
- /package/dist/{chunk-HSQRYJ4P.js.map → chunk-N52SFH2K.js.map} +0 -0
- /package/dist/{chunk-CEQUNJJY.js.map → chunk-NDCP5TVN.js.map} +0 -0
- /package/dist/{chunk-MY6VZVCP.js.map → chunk-OAJX5CEL.js.map} +0 -0
- /package/dist/{chunk-BQWUXC55.js.map → chunk-OBBLVC2W.js.map} +0 -0
- /package/dist/{chunk-FH75NNLB.js.map → chunk-OZ5NAXCP.js.map} +0 -0
- /package/dist/{chunk-PEGNFZ3F.js.map → chunk-P5S777YI.js.map} +0 -0
- /package/dist/{chunk-LY6727IF.js.map → chunk-PPSVFNEA.js.map} +0 -0
- /package/dist/{chunk-K4FDZVMQ.js.map → chunk-PR42VIVY.js.map} +0 -0
- /package/dist/{chunk-I74J2UZ2.js.map → chunk-PWMZCW4H.js.map} +0 -0
- /package/dist/{chunk-6YDXUE5H.js.map → chunk-PYA2O3WS.js.map} +0 -0
- /package/dist/{chunk-GUIZDI5T.js.map → chunk-Q2PA4KZS.js.map} +0 -0
- /package/dist/{chunk-DZH2HTTB.js.map → chunk-R27GW5WV.js.map} +0 -0
- /package/dist/{chunk-7OIBLMDP.js.map → chunk-RAQISW42.js.map} +0 -0
- /package/dist/{chunk-CPKD2YGK.js.map → chunk-RNU5CUPI.js.map} +0 -0
- /package/dist/{chunk-467VRP4E.js.map → chunk-RO5YZQHZ.js.map} +0 -0
- /package/dist/{chunk-SSZROOOI.js.map → chunk-ROLXYGT5.js.map} +0 -0
- /package/dist/{chunk-F4B2YYCN.js.map → chunk-TAWFXRXB.js.map} +0 -0
- /package/dist/{chunk-G3FU2IF7.js.map → chunk-TB7UW5BB.js.map} +0 -0
- /package/dist/{chunk-NF6Q4XTN.js.map → chunk-TQF2I5SY.js.map} +0 -0
- /package/dist/{chunk-M7A226EQ.js.map → chunk-UL44R3W2.js.map} +0 -0
- /package/dist/{chunk-GTR5NLVP.js.map → chunk-VCRQPLKS.js.map} +0 -0
- /package/dist/{chunk-LG67ZNRU.js.map → chunk-WK2ZCTUF.js.map} +0 -0
- /package/dist/{chunk-XGE75VPK.js.map → chunk-WNARM3LY.js.map} +0 -0
- /package/dist/{chunk-RNBH5TSM.js.map → chunk-WQ2RTQYO.js.map} +0 -0
- /package/dist/{chunk-W57QFLQD.js.map → chunk-X6JIGNLI.js.map} +0 -0
- /package/dist/{chunk-CKA4SJRK.js.map → chunk-XIQDCQX7.js.map} +0 -0
- /package/dist/{chunk-AJ7PY4FJ.js.map → chunk-Y3GCG6CA.js.map} +0 -0
- /package/dist/{chunk-ZRB4M3GG.js.map → chunk-YC5KH7ZB.js.map} +0 -0
- /package/dist/{chunk-4RY64KQY.js.map → chunk-YJUKLLNP.js.map} +0 -0
- /package/dist/{chunk-24POWVUY.js.map → chunk-ZDJNRRVS.js.map} +0 -0
- /package/dist/{chunk-M7YEZR6X.js.map → chunk-ZITMDA4C.js.map} +0 -0
- /package/dist/{chat-interactive-block-Z22YHDRU.js.map → computer-viewer-6CRLWQHP.js.map} +0 -0
- /package/dist/{computer-viewer-BWVNDFTO.js.map → embedded-new-voice-KILV3RYM.js.map} +0 -0
- /package/dist/{embedded-new-voice-GBXSZ3TO.js.map → embedded-voice-GHDRLCFX.js.map} +0 -0
- /package/dist/{fleet-decision-row-35S3GAUN.js.map → fleet-decision-row-DQXRRBT7.js.map} +0 -0
- /package/dist/{embedded-voice-MGI7EK7C.js.map → model-policy-picker-menu-5ALKUJMR.js.map} +0 -0
- /package/dist/{platform-activity-row-ISMXR7NJ.js.map → platform-activity-row-227C764Z.js.map} +0 -0
- /package/dist/{queue-surface-implementation-ULW7DDJA.js.map → queue-surface-implementation-H3NOBXU5.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-KP53N6UJ.js.map → sandbox-files-5FEOHUMD.js.map} +0 -0
- /package/dist/{sandbox-files-QYSD4XCZ.js.map → session-realtime-OHBMODNX.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-OJYKHBEO.js.map → timeline-annotation-markers-NDHS7MCK.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-6OAZLXFU.js.map → timeline-annotation-selection-DRQSTJOV.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-5M6DP5FX.js.map → timeline-annotations-dialog-G6J5ZJKN.js.map} +0 -0
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
TooltipProvider,
|
|
34
34
|
TooltipTrigger,
|
|
35
35
|
useLightboxOptional
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-MASBMJ2M.js";
|
|
37
37
|
import {
|
|
38
38
|
stringifyPayload
|
|
39
39
|
} from "./chunk-SJGAHTY5.js";
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
} from "./chunk-TXS65BB2.js";
|
|
43
43
|
import {
|
|
44
44
|
useOpenGeniText
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
46
46
|
|
|
47
47
|
// src/secrets-ui.tsx
|
|
48
48
|
import { createContext, useContext } from "react";
|
|
@@ -2051,4 +2051,4 @@ export {
|
|
|
2051
2051
|
retainedImageId,
|
|
2052
2052
|
Markdown
|
|
2053
2053
|
};
|
|
2054
|
-
//# sourceMappingURL=chunk-
|
|
2054
|
+
//# sourceMappingURL=chunk-DXYARXK3.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
t
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CG6CJMIS.js";
|
|
5
5
|
import {
|
|
6
6
|
defaultEffortForModel,
|
|
7
7
|
findPickerRow,
|
|
@@ -133,4 +133,4 @@ export {
|
|
|
133
133
|
includedDefaultModel,
|
|
134
134
|
confirmIncludedModel
|
|
135
135
|
};
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
136
|
+
//# sourceMappingURL=chunk-E4MQRQ6Z.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-PRJUHXST.js";
|
|
5
5
|
import {
|
|
6
6
|
t
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CG6CJMIS.js";
|
|
8
8
|
import {
|
|
9
9
|
userErrorText
|
|
10
10
|
} from "./chunk-L4OF77LE.js";
|
|
@@ -68,4 +68,4 @@ function useWorkspaceModelCatalog(workspaceId, fundingRevision) {
|
|
|
68
68
|
export {
|
|
69
69
|
useWorkspaceModelCatalog
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-EBW2E32G.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ComposerUsageNotice
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2WERWWSS.js";
|
|
5
5
|
import {
|
|
6
6
|
useAppShotTarget
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PYA2O3WS.js";
|
|
8
8
|
import {
|
|
9
9
|
MessageContextPills
|
|
10
10
|
} from "./chunk-A2EWJQXX.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-W6KAUGXO.js";
|
|
14
14
|
import {
|
|
15
15
|
ChatComposer
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TAWFXRXB.js";
|
|
17
17
|
import {
|
|
18
18
|
useFileAttachments
|
|
19
19
|
} from "./chunk-I6FIXEL4.js";
|
|
@@ -79,4 +79,4 @@ export {
|
|
|
79
79
|
useDraftAttachments,
|
|
80
80
|
ConsoleComposer
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
82
|
+
//# sourceMappingURL=chunk-ENKBO7FC.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
SessionShell
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-B746OUJC.js";
|
|
5
5
|
import {
|
|
6
6
|
ActionsProvider
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GNM3OY36.js";
|
|
8
8
|
import {
|
|
9
9
|
createMessageContextStore
|
|
10
10
|
} from "./chunk-H2ZOIATZ.js";
|
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
} from "./chunk-FSN6APRD.js";
|
|
14
14
|
import {
|
|
15
15
|
SessionsIndexRoute
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-UQKBV22P.js";
|
|
17
17
|
import {
|
|
18
18
|
SessionRoute
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-DT53LBQN.js";
|
|
20
20
|
import {
|
|
21
21
|
RailProvider
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MTYE2PPR.js";
|
|
23
23
|
import {
|
|
24
24
|
parseSessionSearchRoute
|
|
25
25
|
} from "./chunk-TXIIBNCA.js";
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
} from "./chunk-G46333YC.js";
|
|
55
55
|
import {
|
|
56
56
|
CreditRequiredGate
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-6LGBGPBU.js";
|
|
58
58
|
import {
|
|
59
59
|
apiErrorFromResponseBody
|
|
60
60
|
} from "./chunk-L5HJ4UYB.js";
|
|
@@ -64,10 +64,10 @@ import {
|
|
|
64
64
|
import {
|
|
65
65
|
createSlackLinkPrepareController,
|
|
66
66
|
useAppState
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-4HM6YDBX.js";
|
|
68
68
|
import {
|
|
69
69
|
authorizedWorkspaceFromList
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-YJUKLLNP.js";
|
|
71
71
|
import {
|
|
72
72
|
toast
|
|
73
73
|
} from "./chunk-YG6NARQY.js";
|
|
@@ -87,10 +87,10 @@ import {
|
|
|
87
87
|
} from "./chunk-HMU5IELG.js";
|
|
88
88
|
import {
|
|
89
89
|
OpenGeniProvider
|
|
90
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-XIQDCQX7.js";
|
|
91
91
|
import {
|
|
92
92
|
SecretsUiProvider
|
|
93
|
-
} from "./chunk-
|
|
93
|
+
} from "./chunk-DXYARXK3.js";
|
|
94
94
|
import {
|
|
95
95
|
PortalContainerProvider
|
|
96
96
|
} from "./chunk-J3BHDXQQ.js";
|
|
@@ -385,4 +385,4 @@ function SessionAppForWorkspace(props) {
|
|
|
385
385
|
export {
|
|
386
386
|
SessionApp
|
|
387
387
|
};
|
|
388
|
-
//# sourceMappingURL=chunk-
|
|
388
|
+
//# sourceMappingURL=chunk-EQNGX77H.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
NewSessionLink
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-H2GTWX4D.js";
|
|
5
5
|
import {
|
|
6
6
|
useActionShortcut
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GNM3OY36.js";
|
|
8
8
|
import {
|
|
9
9
|
TooltipWithKeys
|
|
10
10
|
} from "./chunk-OHGG2G3A.js";
|
|
11
11
|
import {
|
|
12
12
|
useRail
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MTYE2PPR.js";
|
|
14
14
|
import {
|
|
15
15
|
useSessionUiFeature
|
|
16
16
|
} from "./chunk-H5M33DAL.js";
|
|
@@ -163,4 +163,4 @@ export {
|
|
|
163
163
|
RailHeader,
|
|
164
164
|
PrimaryNav
|
|
165
165
|
};
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
166
|
+
//# sourceMappingURL=chunk-FAPYRTG6.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-TVQCDDSZ.js";
|
|
9
9
|
import {
|
|
10
10
|
useOpenGeniText
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
12
12
|
|
|
13
13
|
// src/hooks/use-machines.ts
|
|
14
14
|
import { useCallback as useCallback2, useRef, useState as useState2 } from "react";
|
|
@@ -409,4 +409,4 @@ export {
|
|
|
409
409
|
MACHINES_COMPOSER_POLL_MS,
|
|
410
410
|
useMachines
|
|
411
411
|
};
|
|
412
|
-
//# sourceMappingURL=chunk-
|
|
412
|
+
//# sourceMappingURL=chunk-GABFKHQE.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// src/timeline/connector-logo-index.ts
|
|
4
|
+
function normalizeConnectorDomain(domain) {
|
|
5
|
+
return domain.trim().toLowerCase().replace(/^www\./, "");
|
|
6
|
+
}
|
|
7
|
+
function urlHost(url) {
|
|
8
|
+
if (!url) return null;
|
|
9
|
+
try {
|
|
10
|
+
return new URL(url).hostname || null;
|
|
11
|
+
} catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function connectorLogoIndex(catalog, logoUrl) {
|
|
16
|
+
const logos = /* @__PURE__ */ new Map();
|
|
17
|
+
const entries = catalog.flatMap((item) => {
|
|
18
|
+
const url = logoUrl(item.logoAssetPath);
|
|
19
|
+
return url ? [{ item, url }] : [];
|
|
20
|
+
});
|
|
21
|
+
const claim = (domain, url) => {
|
|
22
|
+
if (!domain) return;
|
|
23
|
+
const key = normalizeConnectorDomain(domain);
|
|
24
|
+
if (key && !logos.has(key)) logos.set(key, url);
|
|
25
|
+
};
|
|
26
|
+
for (const { item, url } of entries) claim(item.providerDomain, url);
|
|
27
|
+
for (const { item, url } of entries) {
|
|
28
|
+
claim(item.connectionRef?.providerDomain, url);
|
|
29
|
+
claim(urlHost(item.mcpUrl), url);
|
|
30
|
+
}
|
|
31
|
+
return logos;
|
|
32
|
+
}
|
|
33
|
+
function connectorLogo(index, domain) {
|
|
34
|
+
return domain ? index.get(normalizeConnectorDomain(domain)) ?? null : null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
normalizeConnectorDomain,
|
|
39
|
+
connectorLogoIndex,
|
|
40
|
+
connectorLogo
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=chunk-GLCOKWLH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/timeline/connector-logo-index.ts"],"sourcesContent":["/*\n * Which logo belongs to a connector domain. Tool steps and sign-in cards name\n * their connector by the domain of the connection or MCP server they used\n * (Linear's is mcp.linear.app), while the catalog files the logo under the\n * provider's own domain (linear.app). Indexing every domain a catalog entry is\n * known by lets any of them find the logo. Framework-neutral, so web, native\n * and embedded surfaces resolve logos the same way.\n */\n\n/** The catalog fields that name a connector's domains and logo. */\nexport type ConnectorLogoSource = {\n providerDomain?: string | null | undefined;\n mcpUrl?: string | null | undefined;\n connectionRef?: { providerDomain?: string | null | undefined } | null | undefined;\n logoAssetPath?: string | null | undefined;\n};\n\n/** \"WWW.Linear.app \" → \"linear.app\". */\nexport function normalizeConnectorDomain(domain: string): string {\n return domain\n .trim()\n .toLowerCase()\n .replace(/^www\\./, \"\");\n}\n\nfunction urlHost(url: string | null | undefined): string | null {\n if (!url) return null;\n try {\n return new URL(url).hostname || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Every domain each catalog entry is known by, mapped to its logo URL. The\n * provider's own domain is claimed first across the whole catalog, so another\n * entry's server host never takes over a provider's logo.\n */\nexport function connectorLogoIndex(\n catalog: readonly ConnectorLogoSource[],\n logoUrl: (logoAssetPath: string | null | undefined) => string | null | undefined,\n): ReadonlyMap<string, string> {\n const logos = new Map<string, string>();\n const entries = catalog.flatMap((item) => {\n const url = logoUrl(item.logoAssetPath);\n return url ? [{ item, url }] : [];\n });\n const claim = (domain: string | null | undefined, url: string) => {\n if (!domain) return;\n const key = normalizeConnectorDomain(domain);\n if (key && !logos.has(key)) logos.set(key, url);\n };\n for (const { item, url } of entries) claim(item.providerDomain, url);\n for (const { item, url } of entries) {\n claim(item.connectionRef?.providerDomain, url);\n claim(urlHost(item.mcpUrl), url);\n }\n return logos;\n}\n\n/** The logo for a connector domain from an index built by `connectorLogoIndex`. */\nexport function connectorLogo(\n index: ReadonlyMap<string, string>,\n domain: string | null | undefined,\n): string | null {\n return domain ? (index.get(normalizeConnectorDomain(domain)) ?? null) : null;\n}\n"],"mappings":";;;AAkBO,SAAS,yBAAyB,QAAwB;AAC/D,SAAO,OACJ,KAAK,EACL,YAAY,EACZ,QAAQ,UAAU,EAAE;AACzB;AAEA,SAAS,QAAQ,KAA+C;AAC9D,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,EAAE,YAAY;AAAA,EAClC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAOO,SAAS,mBACd,SACA,SAC6B;AAC7B,QAAM,QAAQ,oBAAI,IAAoB;AACtC,QAAM,UAAU,QAAQ,QAAQ,CAAC,SAAS;AACxC,UAAM,MAAM,QAAQ,KAAK,aAAa;AACtC,WAAO,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AAAA,EAClC,CAAC;AACD,QAAM,QAAQ,CAAC,QAAmC,QAAgB;AAChE,QAAI,CAAC,OAAQ;AACb,UAAM,MAAM,yBAAyB,MAAM;AAC3C,QAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAG,OAAM,IAAI,KAAK,GAAG;AAAA,EAChD;AACA,aAAW,EAAE,MAAM,IAAI,KAAK,QAAS,OAAM,KAAK,gBAAgB,GAAG;AACnE,aAAW,EAAE,MAAM,IAAI,KAAK,SAAS;AACnC,UAAM,KAAK,eAAe,gBAAgB,GAAG;AAC7C,UAAM,QAAQ,KAAK,MAAM,GAAG,GAAG;AAAA,EACjC;AACA,SAAO;AACT;AAGO,SAAS,cACd,OACA,QACe;AACf,SAAO,SAAU,MAAM,IAAI,yBAAyB,MAAM,CAAC,KAAK,OAAQ;AAC1E;","names":[]}
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
OPEN_COMMAND_MENU_EVENT,
|
|
24
24
|
RENAME_CURRENT_CHAT_EVENT,
|
|
25
25
|
useRail
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-MTYE2PPR.js";
|
|
27
27
|
import {
|
|
28
28
|
requestSessionComposerFocus
|
|
29
29
|
} from "./chunk-MMY23KS7.js";
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
} from "./chunk-FABYS4WM.js";
|
|
46
46
|
import {
|
|
47
47
|
t
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-CG6CJMIS.js";
|
|
49
49
|
import {
|
|
50
50
|
hasWorkspacePermission
|
|
51
51
|
} from "./chunk-FIDD34ZF.js";
|
|
@@ -81,19 +81,47 @@ import {
|
|
|
81
81
|
} from "react";
|
|
82
82
|
|
|
83
83
|
// src/app/lib/actions/chat-switcher.ts
|
|
84
|
-
var SWITCHER_LIMIT =
|
|
84
|
+
var SWITCHER_LIMIT = 100;
|
|
85
85
|
var SWITCHER_SHOW_DELAY_MS = 140;
|
|
86
|
+
function switchable(record, reachable) {
|
|
87
|
+
if (!record || record.archived || !reachable(record.workspaceId)) return false;
|
|
88
|
+
return !record.row || record.row.parentSessionId === null;
|
|
89
|
+
}
|
|
90
|
+
function moreChats(directory, taken, reachable, room) {
|
|
91
|
+
if (room <= 0) return [];
|
|
92
|
+
const more = [];
|
|
93
|
+
for (const record of directory.rows.values()) {
|
|
94
|
+
if (!taken.has(record.id) && switchable(record, reachable)) more.push(record);
|
|
95
|
+
}
|
|
96
|
+
more.sort((a, b) => b.updatedAt - a.updatedAt || (a.id < b.id ? -1 : 1));
|
|
97
|
+
return more.slice(0, room).map((record) => record.id);
|
|
98
|
+
}
|
|
86
99
|
function openChatSwitcher(directory, currentChatId, backwards, reachable = () => true) {
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
const recent = directory.recent.filter(
|
|
101
|
+
(id) => id !== currentChatId && switchable(directory.rows.get(id), reachable)
|
|
102
|
+
);
|
|
103
|
+
const viewed = (currentChatId ? [currentChatId, ...recent] : recent).slice(0, SWITCHER_LIMIT);
|
|
104
|
+
const ids = [
|
|
105
|
+
...viewed,
|
|
106
|
+
...moreChats(directory, new Set(viewed), reachable, SWITCHER_LIMIT - viewed.length)
|
|
107
|
+
];
|
|
94
108
|
const first = currentChatId ? 1 : 0;
|
|
95
|
-
if (
|
|
96
|
-
return {
|
|
109
|
+
if (ids.length <= first) return null;
|
|
110
|
+
return {
|
|
111
|
+
ids,
|
|
112
|
+
viewed: viewed.length,
|
|
113
|
+
index: backwards ? ids.length - 1 : first,
|
|
114
|
+
visible: false
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function extendChatSwitcher(state, directory, reachable = () => true) {
|
|
118
|
+
const more = moreChats(
|
|
119
|
+
directory,
|
|
120
|
+
new Set(state.ids),
|
|
121
|
+
reachable,
|
|
122
|
+
SWITCHER_LIMIT - state.ids.length
|
|
123
|
+
);
|
|
124
|
+
return more.length === 0 ? state : { ...state, ids: [...state.ids, ...more] };
|
|
97
125
|
}
|
|
98
126
|
function stepChatSwitcher(state, step) {
|
|
99
127
|
const count = state.ids.length;
|
|
@@ -993,6 +1021,16 @@ function ActionsProvider(props) {
|
|
|
993
1021
|
const current = switcherRef.current;
|
|
994
1022
|
if (current) setSwitcher({ ...current, index });
|
|
995
1023
|
},
|
|
1024
|
+
onDirectoryChange: () => {
|
|
1025
|
+
const current = switcherRef.current;
|
|
1026
|
+
if (!current) return;
|
|
1027
|
+
const next = extendChatSwitcher(
|
|
1028
|
+
current,
|
|
1029
|
+
readChatDirectory(subjectId, workspaceId),
|
|
1030
|
+
reachableRef.current
|
|
1031
|
+
);
|
|
1032
|
+
if (next !== current) setSwitcher(next);
|
|
1033
|
+
},
|
|
996
1034
|
onPick: pickSwitcherChat,
|
|
997
1035
|
onDismiss: () => setSwitcher(null)
|
|
998
1036
|
}
|
|
@@ -1010,4 +1048,4 @@ export {
|
|
|
1010
1048
|
useActionShortcut,
|
|
1011
1049
|
ActionsProvider
|
|
1012
1050
|
};
|
|
1013
|
-
//# sourceMappingURL=chunk-
|
|
1051
|
+
//# sourceMappingURL=chunk-GNM3OY36.js.map
|
|
@@ -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 { requestSessionComposerFocus } from \"../session-focus\";\nimport { useSessionUiFeature } from \"../session-ui-features\";\nimport { useUiEventTarget } from \"../ui-events\";\nimport { t } from \"../console-text\";\nimport { isPersonalWorkspace } from \"../managed-self-context\";\nimport { workspacesByOrganization } from \"../org\";\nimport { hasWorkspacePermission } from \"../permissions\";\nimport { readChatDirectory, recordChatVisit } from \"./chat-directory\";\nimport {\n extendChatSwitcher,\n isSwitcherKey,\n openChatSwitcher,\n stepChatSwitcher,\n SWITCHER_SHOW_DELAY_MS,\n type ChatSwitcherState,\n} from \"./chat-switcher\";\nimport {\n applicableChords,\n chordAccelerator,\n chordAriaKeys,\n chordLabel,\n currentPlatform,\n isTextEntry,\n matchesChord,\n type ActionSurface,\n type Chord,\n type ChordPlatform,\n} from \"./chords\";\nimport { useChatOperations } from \"./chat-operations\";\nimport {\n FORK_CURRENT_CHAT_EVENT,\n OPEN_COMMAND_MENU_EVENT,\n RENAME_CURRENT_CHAT_EVENT,\n} from \"./events\";\nimport {\n appActions,\n actionTitle,\n findAction,\n type ActionEnv,\n type AppAction,\n type WorkspaceChoice,\n} from \"./registry\";\n\nconst CommandMenu = lazy(() => import(\"../../components/command-menu/command-menu\"));\nconst ShortcutSheet = lazy(() => import(\"../../components/command-menu/shortcut-sheet\"));\nconst loadChatSwitcher = () => import(\"../../components/command-menu/chat-switcher\");\nconst ChatSwitcher = lazy(loadChatSwitcher);\n\ntype ActionsContextValue = {\n env: ActionEnv;\n /** Run an action for a chat (row menus) or the current chat. */\n run(action: AppAction, chat?: SessionListRow | null, chord?: Chord): void;\n /** The chords to show for an action on this surface and platform. */\n chordsFor(action: AppAction): Chord[];\n};\n\nconst ActionsContext = createContext<ActionsContextValue | null>(null);\n\nexport function useAppActions(): ActionsContextValue | null {\n return useContext(ActionsContext);\n}\n\n/**\n * An action's key for tooltips, labels and `aria-keyshortcuts`, in the\n * person's notation; nothing when this surface has no page-wide keys.\n */\nexport function useActionShortcut(\n actionId: string,\n): { label: string; ariaKeys: string; chord: Chord } | null {\n // Keys depend only on the surface and platform, so rows need not re-render\n // when the actions' environment changes.\n const enabled = useSessionUiFeature(\"keyboardShortcuts\");\n const action = findAction(actionId);\n if (!enabled || !action) return null;\n const platform = currentPlatform();\n const chords = applicableChords(action.chords, surface, platform);\n const chord = chords[0];\n if (!chord) return null;\n return {\n label: chordLabel(chord, platform),\n ariaKeys: chords.map((candidate) => chordAriaKeys(candidate, platform)).join(\" \"),\n chord,\n };\n}\n\nconst surface: ActionSurface = desktopBridge ? \"desktop\" : \"web\";\n\nfunction isRichTextEditor(target: EventTarget | null): boolean {\n return target instanceof HTMLElement && target.isContentEditable;\n}\n\nfunction insideOtherOverlay(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n const overlay = target.closest(\n '[role=\"dialog\"],[role=\"alertdialog\"],[role=\"menu\"],[role=\"listbox\"]',\n );\n return Boolean(overlay && !overlay.closest(\"[data-og-command-menu],[data-og-shortcut-sheet]\"));\n}\n\n/** The chord the desktop menu bar shows and owns for an action. */\nfunction menuOwnedChord(action: AppAction, platform: ChordPlatform): Chord | undefined {\n // ⌥ chords stay with the page: a menu would take ⌥↑ from the composer's caret.\n // Formatting keys stay with the page too, so ⌘B can still bold rich text.\n return applicableChords(action.chords, \"desktop\", platform).find(\n (chord) => (!chord.alt || chord.mod) && !chord.formatting,\n );\n}\n\nfunction menuChord(action: AppAction, platform: ChordPlatform): string | null {\n const chord = menuOwnedChord(action, platform);\n return chord ? chordAccelerator(chord) : null;\n}\n\nfunction insideCommandMenu(target: EventTarget | null): boolean {\n return target instanceof Element && Boolean(target.closest(\"[data-og-command-menu]\"));\n}\n\nfunction textEntryIsEmpty(target: EventTarget | null): boolean {\n if (target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement) {\n return target.value.length === 0;\n }\n if (target instanceof HTMLElement && target.isContentEditable) {\n return (target.textContent ?? \"\").length === 0;\n }\n return true;\n}\n\nexport function ActionsProvider(props: { children: ReactNode }) {\n const app = useAppContext();\n const rail = useRail();\n const navigate = useNavigate();\n const ops = useChatOperations();\n const uiEvents = useUiEventTarget(\"document\");\n const windowEvents = useUiEventTarget(\"window\");\n const chatList = useSessionUiFeature(\"chatList\");\n const workspacePanel = useSessionUiFeature(\"dock\");\n const { inspectorOpen, setInspectorOpen } = app;\n const keyboardShortcuts = useSessionUiFeature(\"keyboardShortcuts\");\n const 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 // Every workspace open to the person, in the workspace picker's order.\n const workspaces = useMemo<WorkspaceChoice[]>(\n () =>\n workspacesByOrganization(t, app.accessContext, app.workspaces).flatMap((group) =>\n group.workspaces.map((workspace) => ({\n id: workspace.id,\n name: workspace.name,\n organization: group.org.label,\n personal: isPersonalWorkspace(workspace, app.managedSelfContext),\n })),\n ),\n [app.accessContext, app.workspaces, app.managedSelfContext],\n );\n // The same rule as the fork button under a message.\n const canForkCurrentChat =\n currentChat !== null &&\n app.clientConfig.auth.mode === \"managedSession\" &&\n app.authSession !== null &&\n Boolean(app.session?.tenancy) &&\n hasWorkspacePermission(app.accessContext, workspaceId, \"sessions:create\");\n\n const [menu, setMenu] = useState<{\n open: boolean;\n mounted: boolean;\n /** Opened to pick a workspace rather than search everything. */\n workspaces: boolean;\n }>({ open: false, mounted: false, workspaces: false });\n const [sheet, setSheet] = useState({ open: false, mounted: false });\n\n const railRef = useRef(rail);\n railRef.current = rail;\n // What had focus when the menu or sheet opened. They open from a key or a\n // button anywhere (and load lazily the first time), so they return focus\n // there themselves instead of relying on what the dialog saw when it mounted.\n const returnFocus = useRef<HTMLElement | null>(null);\n const menuOpen = useRef(false);\n const sheetOpen = useRef(false);\n menuOpen.current = menu.open;\n sheetOpen.current = sheet.open;\n const rememberFocus = useCallback(() => {\n if (menuOpen.current || sheetOpen.current || typeof document === \"undefined\") return;\n // Opened from inside the phone drawer, which closes: come back to the\n // drawer's persistent opener, as search does.\n const drawerTrigger = railRef.current.drawerOpen\n ? railRef.current.drawerTriggerRef.current\n : null;\n if (drawerTrigger) {\n returnFocus.current = drawerTrigger;\n return;\n }\n const active = document.activeElement;\n returnFocus.current = active instanceof HTMLElement && active !== document.body ? active : null;\n }, []);\n const openCommandMenu = useCallback(\n (pickWorkspace = false) => {\n rememberFocus();\n setSheet((current) => (current.open ? { ...current, open: false } : current));\n // The phone drawer is a modal of its own; the menu replaces it and returns\n // focus itself, so the retiring drawer must not take focus back.\n railRef.current.handOffDrawer();\n setMenu((current) => ({\n open: pickWorkspace ? true : !current.open,\n mounted: true,\n workspaces: pickWorkspace,\n }));\n },\n [rememberFocus],\n );\n const openShortcutSheet = useCallback(() => {\n rememberFocus();\n setMenu((current) => (current.open ? { ...current, open: false } : current));\n setSheet((current) => ({ open: !current.open, mounted: true }));\n }, [rememberFocus]);\n\n // Recent chats follow what is actually opened, in any way.\n useEffect(() => {\n if (currentChat) recordChatVisit(subjectId, currentChat);\n // Title and pin changes refresh the record without reordering.\n }, [currentChat?.id, subjectId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Control+Tab and ⌘K leave out chats in workspaces no longer open to the person.\n const reachable = useMemo(() => {\n const ids = new Set(workspaces.map((workspace) => workspace.id));\n return (id: string) => ids.has(id) || id === workspaceId;\n }, [workspaces, workspaceId]);\n\n // A chat opened from the keyboard (⌘K, Control+Tab, next/previous chat) is\n // opened to type in: hand its composer the focus once it is ready.\n const openChatForTyping = useCallback(\n (chatId: string, inWorkspaceId?: string) => {\n if (!rail.isMobile) {\n requestSessionComposerFocus(windowEvents, inWorkspaceId ?? workspaceId, chatId, \"keyboard\");\n }\n rail.openSession(chatId, inWorkspaceId);\n },\n [rail, windowEvents, workspaceId],\n );\n\n const env = useMemo<ActionEnv>(\n () => ({\n workspaceId,\n subjectId,\n surface,\n platform,\n currentChat,\n ops,\n chatList,\n workspacePanel,\n workspaces,\n canForkCurrentChat,\n newChat: () => rail.startNewSession(),\n openChat: (chatId, inWorkspaceId) => openChatForTyping(chatId, inWorkspaceId),\n openWorkspace: (id) => rail.openWorkspace(id),\n openWorkspacePicker: () => openCommandMenu(true),\n openInbox: () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/inbox\", params: { workspaceId } });\n },\n toggleSidebar: () =>\n rail.isMobile ? rail.setDrawerOpen(!rail.drawerOpen) : rail.toggleCollapsed(),\n toggleWorkspacePanel: () => {\n if (!inspectorOpen && rail.isMobile) rail.setDrawerOpen(false);\n setInspectorOpen((open) => !open);\n },\n findInChat: () => requestConversationFind(uiEvents),\n searchMessages: (query) => requestSessionSearch(windowEvents, workspaceId, undefined, query),\n renameCurrentChat: () => uiEvents.dispatchEvent(new Event(RENAME_CURRENT_CHAT_EVENT)),\n forkCurrentChat: () => uiEvents.dispatchEvent(new Event(FORK_CURRENT_CHAT_EVENT)),\n openCommandMenu: () => openCommandMenu(),\n openShortcutSheet,\n switchToRecentChat: () => {\n const directory = readChatDirectory(subjectId, workspaceId);\n const target = openChatSwitcher(directory, routeChatId, false, reachable);\n const id = target?.ids[target.index];\n if (id) openChatForTyping(id, directory.rows.get(id)?.workspaceId);\n },\n sidebarOrder: () => readChatDirectory(subjectId, workspaceId).sidebarOrder,\n pinnedOrder: () => readChatDirectory(subjectId, workspaceId).pinnedOrder,\n }),\n [\n workspaceId,\n subjectId,\n platform,\n currentChat,\n routeChatId,\n ops,\n chatList,\n workspacePanel,\n workspaces,\n canForkCurrentChat,\n reachable,\n inspectorOpen,\n setInspectorOpen,\n rail,\n openChatForTyping,\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 appActions()\n .filter((action) => action.desktopMenu)\n .map((action) => {\n const chat = action.forChat ? env.currentChat : null;\n return {\n id: action.id,\n label: actionTitle(action, env, chat),\n section: action.desktopMenu!,\n accelerator: menuChord(action, platform),\n enabled: action.available(env, chat),\n };\n }),\n );\n }, [menuBridge, env, platform]);\n useEffect(() => {\n if (!menuBridge || !menuSignature) return;\n menuBridge.set(JSON.parse(menuSignature));\n }, [menuBridge, menuSignature]);\n useEffect(() => {\n if (!menuBridge) return;\n return menuBridge.onAction((id) => {\n const action = findAction(id);\n if (action) run(action);\n });\n }, [menuBridge, run]);\n\n // Older desktop builds and other parts of the page open the menu by event.\n useEffect(() => {\n const open = () => openCommandMenu();\n windowEvents.addEventListener(OPEN_COMMAND_MENU_EVENT, open);\n return () => windowEvents.removeEventListener(OPEN_COMMAND_MENU_EVENT, open);\n }, [windowEvents, openCommandMenu]);\n\n useEffect(() => {\n if (!keyboardShortcuts) return;\n const menuOwnsKeys = Boolean(menuBridge);\n function onKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n const current = envRef.current;\n for (const action of appActions()) {\n // ⌘F belongs to the conversation's own find bar.\n if (action.id === \"chat.find\") continue;\n // The chat switcher handles Control+Tab itself: it needs Control's release.\n if (action.id === \"go.recentChat\") continue;\n const chord = applicableChords(action.chords, surface, platform).find((candidate) =>\n matchesChord(event, candidate, platform),\n );\n if (!chord) continue;\n // The menu bar delivers the key it shows; the page keeps the others.\n if (menuOwnsKeys && action.desktopMenu && chord === menuOwnedChord(action, platform))\n return;\n const toggleMenu = action.id === \"commandMenu.open\";\n // Inside the ⌘K menu, chat chords act on the highlighted chat; the menu handles them.\n if (action.forChat && insideCommandMenu(event.target)) return;\n if (!toggleMenu && insideOtherOverlay(event.target)) return;\n // Rich-text editors keep their formatting keys.\n if (chord.formatting && isRichTextEditor(event.target)) return;\n // Chords without ⌘/Ctrl leave text editing alone unless the field is empty.\n if (!chord.mod && isTextEntry(event.target) && !textEntryIsEmpty(event.target)) return;\n if (!action.available(current, action.forChat ? current.currentChat : null)) return;\n event.preventDefault();\n event.stopPropagation();\n run(action, undefined, chord);\n return;\n }\n }\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => document.removeEventListener(\"keydown\", onKeyDown, true);\n }, [keyboardShortcuts, menuBridge, platform, run]);\n\n // Control+Tab: the recent-chats switcher (desktop app only; browsers keep the key).\n const [switcher, setSwitcherState] = useState<ChatSwitcherState | null>(null);\n const switcherRef = useRef<ChatSwitcherState | null>(null);\n const setSwitcher = useCallback((next: ChatSwitcherState | null) => {\n switcherRef.current = next;\n setSwitcherState(next);\n }, []);\n const routeChatIdRef = useRef(routeChatId);\n routeChatIdRef.current = routeChatId;\n const reachableRef = useRef(reachable);\n reachableRef.current = reachable;\n const switcherEnabled = keyboardShortcuts && chatList && surface === \"desktop\";\n const pickSwitcherChat = useCallback(\n (index?: number) => {\n const state = switcherRef.current;\n if (!state) return;\n const id = state.ids[index ?? state.index];\n setSwitcher(null);\n if (!id || id === routeChatIdRef.current) return;\n const current = envRef.current;\n current.openChat(\n id,\n readChatDirectory(current.subjectId, current.workspaceId).rows.get(id)?.workspaceId,\n );\n },\n [setSwitcher],\n );\n useEffect(() => {\n if (!switcherEnabled) {\n setSwitcher(null);\n return;\n }\n let showTimer: ReturnType<typeof setTimeout> | undefined;\n const cancel = () => {\n clearTimeout(showTimer);\n if (switcherRef.current) setSwitcher(null);\n };\n function onKeyDown(event: KeyboardEvent) {\n const state = switcherRef.current;\n if (isSwitcherKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n if (state) {\n clearTimeout(showTimer);\n setSwitcher(stepChatSwitcher(state, event.shiftKey ? -1 : 1));\n return;\n }\n // Not over the ⌘K menu, the shortcut sheet or another dialog.\n if (event.repeat || menuOpen.current || sheetOpen.current) return;\n if (insideOtherOverlay(event.target)) return;\n const opened = openChatSwitcher(\n readChatDirectory(subjectId, workspaceId),\n routeChatIdRef.current,\n event.shiftKey,\n reachableRef.current,\n );\n if (!opened) return;\n void loadChatSwitcher();\n setSwitcher(opened);\n // A quick press switches without drawing the list at all.\n showTimer = setTimeout(() => {\n const current = switcherRef.current;\n if (current && !current.visible) setSwitcher({ ...current, visible: true });\n }, SWITCHER_SHOW_DELAY_MS);\n return;\n }\n if (!state) return;\n // Control was let go somewhere the page did not hear it.\n if (!event.ctrlKey && event.key !== \"Control\") {\n cancel();\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n cancel();\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(showTimer);\n pickSwitcherChat();\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(showTimer);\n setSwitcher(stepChatSwitcher(state, event.key === \"ArrowDown\" ? 1 : -1));\n }\n }\n function onKeyUp(event: KeyboardEvent) {\n if (event.key !== \"Control\" || !switcherRef.current) return;\n clearTimeout(showTimer);\n pickSwitcherChat();\n }\n document.addEventListener(\"keydown\", onKeyDown, true);\n document.addEventListener(\"keyup\", onKeyUp, true);\n window.addEventListener(\"blur\", cancel);\n return () => {\n clearTimeout(showTimer);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n document.removeEventListener(\"keyup\", onKeyUp, true);\n window.removeEventListener(\"blur\", cancel);\n };\n }, [switcherEnabled, subjectId, workspaceId, pickSwitcherChat, setSwitcher]);\n\n const value = useMemo<ActionsContextValue>(\n () => ({ env, run, chordsFor }),\n [env, run, chordsFor],\n );\n\n return (\n <ActionsContext.Provider value={value}>\n {props.children}\n {menu.mounted ? (\n <Suspense fallback={null}>\n <CommandMenu\n open={menu.open}\n pickWorkspace={menu.workspaces}\n onOpenChange={(open) => setMenu((current) => ({ ...current, open }))}\n returnFocus={returnFocus}\n />\n </Suspense>\n ) : null}\n {sheet.mounted ? (\n <Suspense fallback={null}>\n <ShortcutSheet\n open={sheet.open}\n onOpenChange={(open) => setSheet((current) => ({ ...current, open }))}\n returnFocus={returnFocus}\n />\n </Suspense>\n ) : null}\n {/* Mounted from the first press, so it reads chat statuses before it shows. */}\n {switcher ? (\n <Suspense fallback={null}>\n <ChatSwitcher\n state={switcher}\n subjectId={subjectId}\n workspaceId={workspaceId}\n workspaces={workspaces}\n currentChatId={routeChatId}\n platform={platform}\n onHover={(index) => {\n const current = switcherRef.current;\n if (current) setSwitcher({ ...current, index });\n }}\n onDirectoryChange={() => {\n const current = switcherRef.current;\n if (!current) return;\n const next = extendChatSwitcher(\n current,\n readChatDirectory(subjectId, workspaceId),\n reachableRef.current,\n );\n if (next !== current) setSwitcher(next);\n }}\n onPick={pickSwitcherChat}\n onDismiss={() => setSwitcher(null)}\n />\n </Suspense>\n ) : null}\n </ActionsContext.Provider>\n );\n}\n","/**\n * Control+Tab in the desktop app: switch between recently viewed chats, most\n * recent first, as ⌘Tab switches apps. The list spans the person's workspaces,\n * so it also jumps between chats in different workspaces. A quick press goes back to the previous\n * chat (press again to return); holding Control shows the list, each Tab moves\n * down it (Shift+Tab up), and releasing Control opens the highlighted chat.\n *\n * Past the chats someone opened, the list carries on through the other chats\n * the app knows, most recently active first, so holding Tab keeps going back\n * in time. The list is read when the switcher opens and only ever grows at\n * the end (as more chats load), so it holds still while the person cycles.\n */\nimport type { ChatDirectorySnapshot, ChatRecord } from \"./chat-directory\";\n\n/** At most this many chats; older ones are a search away in ⌘K. */\nexport const SWITCHER_LIMIT = 100;\n/** A press shorter than this switches without ever drawing the list. */\nexport const SWITCHER_SHOW_DELAY_MS = 140;\n\nexport type ChatSwitcherState = Readonly<{\n /** Chats in the order shown: recently viewed first, then recently active. */\n ids: readonly string[];\n /** How many of `ids`, from the front, are chats the person opened recently. */\n viewed: number;\n /** The highlighted chat. */\n index: number;\n /** Whether the list is drawn (after the delay, or once Tab is pressed again). */\n visible: boolean;\n}>;\n\ntype SwitcherDirectory = Pick<ChatDirectorySnapshot, \"recent\" | \"rows\">;\n\nfunction switchable(\n record: ChatRecord | undefined,\n reachable: (workspaceId: string) => boolean,\n): boolean {\n if (!record || record.archived || !reachable(record.workspaceId)) return false;\n // Subagent chats live under their parent, as in the sidebar.\n return !record.row || record.row.parentSessionId === null;\n}\n\n/** Known chats not in `taken`, most recently active first. */\nfunction moreChats(\n directory: SwitcherDirectory,\n taken: ReadonlySet<string>,\n reachable: (workspaceId: string) => boolean,\n room: number,\n): string[] {\n if (room <= 0) return [];\n const more: ChatRecord[] = [];\n for (const record of directory.rows.values()) {\n if (!taken.has(record.id) && switchable(record, reachable)) more.push(record);\n }\n more.sort((a, b) => b.updatedAt - a.updatedAt || (a.id < b.id ? -1 : 1));\n return more.slice(0, room).map((record) => record.id);\n}\n\n/**\n * The chats to switch between: the open chat (when there is one), the other\n * recently viewed chats, then the rest the app knows by latest activity.\n * Null when there is nowhere to switch to.\n */\nexport function openChatSwitcher(\n directory: SwitcherDirectory,\n currentChatId: string | null,\n backwards: boolean,\n /** Whether a workspace is still open to the person; chats elsewhere are left out. */\n reachable: (workspaceId: string) => boolean = () => true,\n): ChatSwitcherState | null {\n const recent = directory.recent.filter(\n (id) => id !== currentChatId && switchable(directory.rows.get(id), reachable),\n );\n const viewed = (currentChatId ? [currentChatId, ...recent] : recent).slice(0, SWITCHER_LIMIT);\n const ids = [\n ...viewed,\n ...moreChats(directory, new Set(viewed), reachable, SWITCHER_LIMIT - viewed.length),\n ];\n // Away from a chat (the inbox, a new chat) the most recent chat is the target.\n const first = currentChatId ? 1 : 0;\n if (ids.length <= first) return null;\n return {\n ids,\n viewed: viewed.length,\n index: backwards ? ids.length - 1 : first,\n visible: false,\n };\n}\n\n/**\n * Chats that loaded while the list is open join at its end, so nothing the\n * person is looking at moves. The same state when there is nothing new.\n */\nexport function extendChatSwitcher(\n state: ChatSwitcherState,\n directory: SwitcherDirectory,\n reachable: (workspaceId: string) => boolean = () => true,\n): ChatSwitcherState {\n const more = moreChats(\n directory,\n new Set(state.ids),\n reachable,\n SWITCHER_LIMIT - state.ids.length,\n );\n return more.length === 0 ? state : { ...state, ids: [...state.ids, ...more] };\n}\n\n/** Tab moves down the list and Shift+Tab up, wrapping at the ends. */\nexport function stepChatSwitcher(state: ChatSwitcherState, step: 1 | -1): ChatSwitcherState {\n const count = state.ids.length;\n return { ...state, index: (state.index + step + count) % count, visible: true };\n}\n\n/** Control+Tab exactly: no ⌘, no ⌥ (Shift reverses). */\nexport function isSwitcherKey(\n event: Pick<KeyboardEvent, \"code\" | \"ctrlKey\" | \"metaKey\" | \"altKey\">,\n) {\n return event.code === \"Tab\" && event.ctrlKey && !event.metaKey && !event.altKey;\n}\n","/**\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 setArchivedRef = useRef<ChatOperations[\"setArchived\"] | null>(null);\n const setArchived = useCallback(\n async (chat: SessionListRow, archived: boolean) => {\n if (archiving.current.has(chat.id)) return;\n const accepted = context.captureWorkspaceInvocation(chat.workspaceId);\n if (!accepted) return;\n archiving.current.add(chat.id);\n try {\n const updated = await 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 const after: SessionListRow = {\n ...chat,\n archived: updated.archived === true,\n ...(updated.archiveVersion !== undefined\n ? { archiveVersion: updated.archiveVersion }\n : {}),\n };\n toast.success(updated.archived ? \"Chat archived.\" : \"Chat restored.\", {\n // Archiving is one key away, so taking it back is one click away.\n action: updated.archived\n ? { label: \"Undo\", onClick: () => void setArchivedRef.current?.(after, false) }\n : undefined,\n });\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 setArchivedRef.current = setArchived;\n const setUnread = useCallback(\n async (chat: SessionListRow, unread: boolean) => {\n try {\n const updated = await context.client.updateSessionAttention(chat.workspaceId, chat.id, {\n unread,\n expectedVersion: chat.attentionVersion ?? 0,\n });\n context.setSession((current) =>\n current?.id === updated.id\n ? {\n ...current,\n ...(updated.unread !== undefined ? { unread: updated.unread } : {}),\n ...(updated.attentionVersion !== undefined\n ? { attentionVersion: updated.attentionVersion }\n : {}),\n }\n : current,\n );\n notifySessionListChanged({ workspaceId: chat.workspaceId, sessionId: chat.id });\n toast.success(unread ? \"Marked as unread\" : \"Marked as read\");\n } catch (error) {\n toast.error(\"Couldn't update the chat.\", {\n description: 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 ChevronsUpDownIcon,\n CommandIcon,\n GitForkIcon,\n HistoryIcon,\n InboxIcon,\n KeyboardIcon,\n LinkIcon,\n MailIcon,\n MailOpenIcon,\n PanelLeftIcon,\n PanelRightIcon,\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\n/** A workspace someone can switch to, in the workspace picker's order. */\nexport type WorkspaceChoice = {\n id: string;\n name: string;\n /** The workspace's organization, by name. */\n organization: string;\n /** A Personal workspace, private to its owner. */\n personal: boolean;\n};\n\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 /** Whether chats have the right-hand workspace panel on this surface. */\n workspacePanel: boolean;\n /** Every workspace open to the person, in the workspace picker's order. */\n workspaces: readonly WorkspaceChoice[];\n /** Whether the person may fork the chat on screen. */\n canForkCurrentChat: boolean;\n newChat(): void;\n /** Opens a chat; one in another workspace switches to that workspace. */\n openChat(chatId: string, workspaceId?: string): void;\n openWorkspace(workspaceId: string): void;\n /** The ⌘K menu, listing workspaces to switch to. */\n openWorkspacePicker(): void;\n openInbox(): void;\n toggleSidebar(): void;\n toggleWorkspacePanel(): void;\n findInChat(): void;\n searchMessages(query?: string): void;\n renameCurrentChat(): void;\n /** Asks the chat on screen to fork from its latest message. */\n forkCurrentChat(): void;\n openCommandMenu(): void;\n openShortcutSheet(): void;\n /** Back to the most recently viewed other chat (a quick Control+Tab). */\n switchToRecentChat(): void;\n /** Chats in sidebar order, and the pinned ones in their order. */\n sidebarOrder(): readonly string[];\n pinnedOrder(): readonly string[];\n};\n\nexport type AppAction = {\n id: string;\n /** Plain words; chat actions may read the chat (Pin or Unpin). */\n title: string | ((env: ActionEnv, chat: SessionListRow | null) => string);\n group: ActionGroup;\n icon: LucideIcon;\n /** A different icon for some chats (Unpin for a pinned chat). */\n iconFor?: (chat: SessionListRow | null) => LucideIcon;\n /** Extra words the ⌘K menu matches, e.g. \"share\" for Copy link. */\n keywords?: readonly string[];\n chords?: readonly Chord[];\n /** The cheat sheet's own key text when one action has many chords (⌘1 to ⌘9). */\n chordSummary?: (platform: ChordPlatform) => string;\n /** Acts on a chat: the current one, or the one a menu or ⌘K row points at. */\n forChat?: boolean;\n /** Listed in the ⌘K menu (some exist only as keys). Default true. */\n inCommandMenu?: boolean;\n /**\n * Opens a dialog of its own. From ⌘K it runs once the menu has handed focus\n * back, so the new dialog returns focus to the same place when it closes.\n */\n opensDialog?: boolean;\n /** Offered in ⌘K before anything is typed. */\n suggested?: boolean;\n /** The desktop menu bar section, when it appears there. */\n desktopMenu?: DesktopMenuPlacement;\n available(env: ActionEnv, chat: SessionListRow | null): boolean;\n run(env: ActionEnv, chat: SessionListRow | null, chord?: Chord): void | Promise<void>;\n};\n\nexport function actionTitle(\n action: AppAction,\n env: ActionEnv,\n chat: SessionListRow | null,\n): string {\n return typeof action.title === \"string\" ? action.title : action.title(env, chat);\n}\n\nexport function actionIcon(action: AppAction, chat: SessionListRow | null): LucideIcon {\n return action.iconFor?.(chat) ?? action.icon;\n}\n\nconst ALWAYS = () => true;\n\nfunction stepChat(env: ActionEnv, direction: 1 | -1): void {\n const order = env.sidebarOrder();\n if (order.length === 0) return;\n const index = env.currentChat ? order.indexOf(env.currentChat.id) : -1;\n const next = index < 0 ? (direction === 1 ? 0 : order.length - 1) : index + direction;\n if (next < 0 || next >= order.length) return;\n env.openChat(order[next]!);\n}\n\n/** The previous or next workspace in the picker's order, wrapping around. */\nexport function stepWorkspace(\n workspaces: readonly Pick<WorkspaceChoice, \"id\">[],\n currentId: string,\n direction: 1 | -1,\n): string | null {\n if (workspaces.length < 2) return null;\n const index = workspaces.findIndex((workspace) => workspace.id === currentId);\n const next =\n index < 0\n ? direction === 1\n ? 0\n : workspaces.length - 1\n : (index + direction + workspaces.length) % workspaces.length;\n return workspaces[next]!.id;\n}\n\nfunction switchWorkspace(env: ActionEnv, direction: 1 | -1): void {\n const id = stepWorkspace(env.workspaces, env.workspaceId, direction);\n if (id && id !== env.workspaceId) env.openWorkspace(id);\n}\n\nconst hasOtherWorkspaces = (env: ActionEnv) => env.workspaces.length > 1;\n\nconst PINNED_CHORDS: Chord[] = Array.from({ length: 9 }, (_, index) => ({\n code: `Digit${index + 1}`,\n mod: true,\n only: \"desktop\" as const,\n}));\n\nlet appActionList: readonly AppAction[] | undefined;\n\n/**\n * Every action, built on first use. The icons come from chunks the router\n * shares with other routes; reading them while this module loads can see them\n * before they exist, depending on which route a visitor opens first.\n */\nexport function appActions(): readonly AppAction[] {\n return (appActionList ??= [\n {\n id: \"commandMenu.open\",\n title: \"Command menu\",\n group: \"help\",\n icon: CommandIcon,\n chords: [{ code: \"KeyK\", mod: true }],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.openCommandMenu(),\n },\n {\n id: \"chat.new\",\n title: \"New chat\",\n group: \"chat\",\n icon: PlusIcon,\n keywords: [\"start\", \"create\", \"session\"],\n // The desktop menu shows its first key, the familiar ⌘N; browsers keep ⌘N for windows.\n chords: [\n { code: \"KeyN\", mod: true, only: \"desktop\" },\n { code: \"KeyO\", mod: true, shift: true },\n ],\n suggested: true,\n desktopMenu: \"file\",\n available: ALWAYS,\n run: (env) => env.newChat(),\n },\n {\n id: \"chat.copyLink\",\n title: \"Copy link\",\n group: \"chat\",\n icon: LinkIcon,\n keywords: [\"share\", \"url\", \"address\"],\n chords: [{ code: \"Comma\", mod: true, shift: true }],\n forChat: true,\n suggested: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null,\n run: (env, chat) => (chat ? env.ops.copyLink(chat) : undefined),\n },\n {\n id: \"chat.pin\",\n title: (_env, chat) => (chat?.pinned ? \"Unpin\" : \"Pin\"),\n group: \"chat\",\n icon: PinIcon,\n iconFor: (chat) => (chat?.pinned ? PinOffIcon : PinIcon),\n keywords: [\"unpin\", \"favorite\", \"star\"],\n chords: [{ code: \"KeyP\", mod: true, alt: true }],\n forChat: true,\n suggested: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && !chat.archived,\n run: (env, chat) => (chat ? env.ops.setPinned(chat, !chat.pinned) : undefined),\n },\n {\n id: \"chat.rename\",\n title: \"Rename\",\n group: \"chat\",\n icon: PencilIcon,\n keywords: [\"title\", \"name\"],\n forChat: true,\n desktopMenu: \"chat\",\n // Renaming happens in the chat's own title, so only for the chat on screen.\n available: (env, chat) => chat !== null && env.currentChat?.id === chat.id,\n run: (env) => env.renameCurrentChat(),\n },\n {\n id: \"chat.fork\",\n title: \"Fork chat\",\n group: \"chat\",\n icon: GitForkIcon,\n keywords: [\"copy\", \"duplicate\", \"branch\", \"clone\"],\n forChat: true,\n opensDialog: true,\n desktopMenu: \"chat\",\n // From the latest message, as the fork button under a message does; only\n // for the chat on screen, whose messages are loaded.\n available: (env, chat) =>\n chat !== null && env.currentChat?.id === chat.id && env.canForkCurrentChat,\n run: (env) => env.forkCurrentChat(),\n },\n {\n id: \"chat.unread\",\n title: (_env, chat) => (chat?.unread ? \"Mark as read\" : \"Mark as unread\"),\n group: \"chat\",\n icon: MailIcon,\n iconFor: (chat) => (chat?.unread ? MailOpenIcon : MailIcon),\n keywords: [\"read\", \"unread\"],\n forChat: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && !chat.archived,\n run: (env, chat) => (chat ? env.ops.setUnread(chat, !chat.unread) : undefined),\n },\n {\n id: \"chat.archive\",\n title: (_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 // Apple Mail's Archive key; Ctrl+Alt elsewhere, as Pin, since browsers there\n // keep Ctrl+Shift+A for tab search.\n chords: [\n { code: \"KeyA\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyA\", mod: true, alt: true, platform: \"other\" },\n ],\n forChat: true,\n desktopMenu: \"chat\",\n 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: \"go.switchWorkspace\",\n title: \"Switch workspace…\",\n group: \"navigate\",\n icon: ChevronsUpDownIcon,\n keywords: [\"workspace\", \"organization\", \"team\", \"change\", \"go to\"],\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => env.openWorkspacePicker(),\n },\n {\n // The workspace picker's order, wrapping around. ⌥⌘ and arrows sit in the\n // same place on every keyboard layout, and browsers leave them alone.\n id: \"go.previousWorkspace\",\n title: \"Previous workspace\",\n group: \"navigate\",\n icon: ArrowUpIcon,\n chords: [\n { code: \"ArrowUp\", mod: true, alt: true },\n // Some Linux desktops take Ctrl+Alt+arrows to switch their own workspaces.\n { code: \"PageUp\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => switchWorkspace(env, -1),\n },\n {\n id: \"go.nextWorkspace\",\n title: \"Next workspace\",\n group: \"navigate\",\n icon: ArrowDownIcon,\n chords: [\n { code: \"ArrowDown\", mod: true, alt: true },\n { code: \"PageDown\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => switchWorkspace(env, 1),\n },\n {\n id: \"view.sidebar\",\n title: \"Toggle sidebar\",\n group: \"view\",\n icon: PanelLeftIcon,\n keywords: [\"hide\", \"show\", \"collapse\", \"rail\"],\n // ⌘B as in most editors and chat apps. It is bold in rich text, so the menu\n // bar shows the platform's standard sidebar key instead, which also works.\n chords: [\n { code: \"KeyB\", mod: true, formatting: true },\n { code: \"KeyS\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyS\", mod: true, shift: true, platform: \"other\" },\n ],\n desktopMenu: \"view\",\n available: (env) => env.chatList,\n run: (env) => env.toggleSidebar(),\n },\n {\n id: \"view.workspacePanel\",\n title: \"Toggle workspace panel\",\n group: \"view\",\n icon: PanelRightIcon,\n keywords: [\"right\", \"inspector\", \"files\", \"browser\", \"terminal\", \"hide\", \"show\"],\n // The second sidebar's key in VS Code and Cursor.\n chords: [{ code: \"KeyB\", mod: true, alt: true }],\n desktopMenu: \"view\",\n available: (env) => env.workspacePanel && env.currentChat !== null,\n run: (env) => env.toggleWorkspacePanel(),\n },\n {\n id: \"help.shortcuts\",\n title: \"Keyboard shortcuts\",\n group: \"help\",\n icon: KeyboardIcon,\n keywords: [\"keys\", \"hotkeys\", \"cheat sheet\", \"help\"],\n chords: [{ code: \"Slash\", mod: true }],\n desktopMenu: \"help\",\n available: ALWAYS,\n run: (env) => env.openShortcutSheet(),\n },\n ]);\n}\n\nexport function findAction(id: string): AppAction | undefined {\n return appActions().find((action) => action.id === id);\n}\n"],"mappings":"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","names":["useCallback","useMemo","useRef","useMemo","useRef","useCallback"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
SiteOriginLink
|
|
4
|
+
} from "./chunk-MVZYNZXE.js";
|
|
2
5
|
import {
|
|
3
6
|
SessionRowHoverDetails
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-5WQKTT5Z.js";
|
|
5
8
|
import {
|
|
6
9
|
SiteSessionGroupHeading
|
|
7
10
|
} from "./chunk-NURA4KUR.js";
|
|
@@ -9,18 +12,15 @@ import {
|
|
|
9
12
|
SessionBrowseOrderControls
|
|
10
13
|
} from "./chunk-HI75UTI6.js";
|
|
11
14
|
import {
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
useActionShortcut,
|
|
16
|
+
useChatOperations
|
|
17
|
+
} from "./chunk-GNM3OY36.js";
|
|
14
18
|
import {
|
|
15
19
|
ActiveWorkMark,
|
|
16
20
|
RailTrailingMetadata,
|
|
17
21
|
SessionRowContent,
|
|
18
22
|
sessionRowAccessibleName
|
|
19
23
|
} from "./chunk-7EGWIME2.js";
|
|
20
|
-
import {
|
|
21
|
-
useActionShortcut,
|
|
22
|
-
useChatOperations
|
|
23
|
-
} from "./chunk-OHG2UQ2O.js";
|
|
24
24
|
import {
|
|
25
25
|
TooltipWithKeys
|
|
26
26
|
} from "./chunk-OHGG2G3A.js";
|
|
@@ -85,7 +85,7 @@ import {
|
|
|
85
85
|
sessionMatchesPaginationGroup,
|
|
86
86
|
sessionPaginationGroupQuery,
|
|
87
87
|
sessionPaginationProjectGroup
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-A2HCAMRH.js";
|
|
89
89
|
import {
|
|
90
90
|
authoritativeSessionBranchChannels,
|
|
91
91
|
beginSessionBranchRequest,
|
|
@@ -96,11 +96,11 @@ import {
|
|
|
96
96
|
sessionBranchSummaryDecision,
|
|
97
97
|
sessionBranchSummaryKey,
|
|
98
98
|
upsertSessionBranchChild
|
|
99
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-ASWINLSW.js";
|
|
100
100
|
import {
|
|
101
101
|
sessionHoverDescription,
|
|
102
102
|
sessionHoverFacts
|
|
103
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-WNARM3LY.js";
|
|
104
104
|
import {
|
|
105
105
|
sessionDescendantCountAria,
|
|
106
106
|
sessionDescendantCountText
|
|
@@ -134,7 +134,7 @@ import {
|
|
|
134
134
|
summarizeRailStatusCounts,
|
|
135
135
|
visibleForestRows,
|
|
136
136
|
visibleTreeRows
|
|
137
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-RNU5CUPI.js";
|
|
138
138
|
import {
|
|
139
139
|
countNeedsYou,
|
|
140
140
|
filterNeedsYou
|
|
@@ -155,7 +155,7 @@ import {
|
|
|
155
155
|
import {
|
|
156
156
|
requestCommandMenu,
|
|
157
157
|
useRail
|
|
158
|
-
} from "./chunk-
|
|
158
|
+
} from "./chunk-MTYE2PPR.js";
|
|
159
159
|
import {
|
|
160
160
|
cancelSessionRowRevealIntent,
|
|
161
161
|
consumeSessionRowRevealIntent,
|
|
@@ -220,7 +220,7 @@ import {
|
|
|
220
220
|
} from "./chunk-JHZRAYI4.js";
|
|
221
221
|
import {
|
|
222
222
|
t
|
|
223
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-CG6CJMIS.js";
|
|
224
224
|
import {
|
|
225
225
|
isPersonalWorkspace
|
|
226
226
|
} from "./chunk-74JEZLLQ.js";
|
|
@@ -4606,4 +4606,4 @@ export {
|
|
|
4606
4606
|
CollapsedSessionsButton,
|
|
4607
4607
|
isStillRunningDeleteRefusal
|
|
4608
4608
|
};
|
|
4609
|
-
//# sourceMappingURL=chunk-
|
|
4609
|
+
//# sourceMappingURL=chunk-H2GTWX4D.js.map
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
ArtifactLabelsProvider,
|
|
9
9
|
ArtifactSelect,
|
|
10
10
|
useArtifactLabels
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-63BPMTBM.js";
|
|
12
12
|
import {
|
|
13
13
|
PublishedHtmlArtifactFrame
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IMKIIS4Y.js";
|
|
15
15
|
import {
|
|
16
16
|
inlineHtmlDocument
|
|
17
17
|
} from "./chunk-IGFZFLI2.js";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-TXS65BB2.js";
|
|
24
24
|
import {
|
|
25
25
|
useOpenGeniText
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-ZEVJGMNB.js";
|
|
27
27
|
|
|
28
28
|
// src/components/artifacts/chat-interactive-block.tsx
|
|
29
29
|
import { useEffect as useEffect2, useMemo, useState as useState3 } from "react";
|
|
@@ -414,4 +414,4 @@ export {
|
|
|
414
414
|
DeferredChatMedia,
|
|
415
415
|
ChatInteractiveBlock
|
|
416
416
|
};
|
|
417
|
-
//# sourceMappingURL=chunk-
|
|
417
|
+
//# sourceMappingURL=chunk-HPSATFLQ.js.map
|