@opengeni/react 4.4.1 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/app-state.js +25 -25
- package/dist/app/components/Composer.js +27 -27
- package/dist/app/components/agent/agent-capability-picker.js +4 -4
- package/dist/app/components/artifacts/artifact-browse-controls.js +3 -3
- package/dist/app/components/artifacts/artifact-library.js +19 -19
- package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
- package/dist/app/components/artifacts/chat-interactive-block.js +15 -15
- package/dist/app/components/artifacts/inline-chat-image.js +30 -29
- package/dist/app/components/artifacts/retained-file-preview.js +34 -33
- package/dist/app/components/artifacts/retained-text-preview.js +5 -5
- package/dist/app/components/artifacts/site-audience.js +4 -4
- package/dist/app/components/artifacts/site-conversations.js +20 -19
- package/dist/app/components/artifacts/site-data.js +18 -18
- package/dist/app/components/artifacts/site-publishing.js +39 -39
- package/dist/app/components/artifacts/site-settings.js +46 -46
- package/dist/app/components/billing-class-mark.js +5 -5
- package/dist/app/components/capabilities/capability-detail-sheet.js +8 -8
- package/dist/app/components/capabilities/capability-logo-source.js +11 -11
- package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
- package/dist/app/components/capabilities/native-connect-setup.js +14 -14
- package/dist/app/components/capabilities/perform-capability-action.js +1 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -15
- package/dist/app/components/capabilities/session-capability-card.js +77 -75
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +35 -33
- package/dist/app/components/capabilities/session-custom-mcp-card.js +19 -19
- package/dist/app/components/capabilities/session-github-card.js +22 -22
- package/dist/app/components/capabilities/session-machine-card.js +34 -32
- package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
- package/dist/app/components/command-menu/chat-status.js +15 -14
- package/dist/app/components/command-menu/chat-switcher.js +16 -15
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +32 -110
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +15 -15
- package/dist/app/components/composer-capabilities-menu-body.js +3 -3
- package/dist/app/components/composer-mobile-plus-panel.js +17 -17
- 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 +9 -9
- package/dist/app/components/credits/coupon-redeem.js +2 -2
- package/dist/app/components/credits/credit-refusal-notice.js +2 -2
- package/dist/app/components/desktop/app-shots.js +6 -6
- package/dist/app/components/desktop/this-computer.js +4 -4
- package/dist/app/components/feedback.js +4 -4
- package/dist/app/components/follow-up-repository-menu-body.js +4 -4
- package/dist/app/components/follow-up-repository-picker.js +1 -1
- package/dist/app/components/github-app-connect-launcher.js +2 -2
- package/dist/app/components/in-app-help-link.js +2 -2
- package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
- package/dist/app/components/machines/connect-machine-dialog.js +18 -18
- package/dist/app/components/markdown.js +8 -8
- package/dist/app/components/message-context-pills.js +2 -2
- package/dist/app/components/models/models-ui.js +8 -8
- package/dist/app/components/new-session-starters.js +2 -2
- package/dist/app/components/pickers.js +8 -8
- package/dist/app/components/rail/rail-context.js +3 -3
- package/dist/app/components/rail/rail-sections.js +65 -62
- package/dist/app/components/rail/session-header.js +48 -47
- package/dist/app/components/rail/session-list.js +64 -61
- package/dist/app/components/rail/session-row-content.d.ts +6 -2
- package/dist/app/components/rail/session-row-content.js +1 -1
- package/dist/app/components/rail/session-row-hover-details.js +20 -19
- package/dist/app/components/rail/session-shell.js +104 -101
- package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
- package/dist/app/components/rail/site-session-group-heading.js +20 -3
- package/dist/app/components/repository-picker.js +4 -4
- package/dist/app/components/secrets/session-secrets-panel.js +3 -3
- package/dist/app/components/session/agent-configuration-panel.js +33 -33
- package/dist/app/components/session/artifact-link-boundary.js +2 -2
- package/dist/app/components/session/artifact-session-page.js +5 -5
- package/dist/app/components/session/banners.js +10 -10
- package/dist/app/components/session/codex-account-indicator.js +11 -11
- package/dist/app/components/session/editable-artifacts-workspace.js +44 -44
- package/dist/app/components/session/failed-session-banner.js +10 -10
- package/dist/app/components/session/human-input.js +57 -53
- package/dist/app/components/session/inspector.js +94 -90
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +4 -4
- package/dist/app/components/session/message-resource-attachments.js +20 -19
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-account-indicator.js +11 -11
- package/dist/app/components/session/model-context-inspector.js +2 -2
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +9 -9
- package/dist/app/components/session/sandbox-switcher.js +16 -16
- package/dist/app/components/session/sandbox-workspace.js +81 -77
- package/dist/app/components/session/search-markdown-highlight.js +9 -9
- package/dist/app/components/session/search-results-view.js +10 -10
- package/dist/app/components/session/session-admin-access.js +8 -8
- package/dist/app/components/session/session-admission-notice.js +6 -6
- package/dist/app/components/session/session-machine-access-notice.js +6 -6
- package/dist/app/components/session/session-retention.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +11 -11
- package/dist/app/components/session/session-skill-reviews.js +1 -1
- package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
- package/dist/app/components/session/session-tenancy-control.js +40 -25
- package/dist/app/components/session/session-tenancy-control.js.map +1 -1
- package/dist/app/components/session/session-usage-limit-section.js +11 -11
- package/dist/app/components/session/session-wait-status.js +9 -8
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/site-origin-link.d.ts +1 -0
- package/dist/app/components/session/site-origin-link.js +2 -2
- package/dist/app/components/session/subagents.js +16 -15
- package/dist/app/components/session-connectors-menu-body.js +5 -5
- package/dist/app/components/settings/row-select.js +3 -3
- package/dist/app/components/transcription-settings.js +4 -4
- package/dist/app/components/ui/destructive-confirm.js +6 -6
- package/dist/app/components/usage/usage-entry.js +8 -8
- package/dist/app/components/workspace-composer-plus.js +21 -21
- package/dist/app/embed/memory-navigation.js +2 -2
- package/dist/app/embed/session-app.js +256 -250
- package/dist/app/lib/actions/actions-provider.js +15 -15
- package/dist/app/lib/actions/held-modifier.d.ts +11 -0
- package/dist/app/lib/app-surfaces.js +2 -2
- package/dist/app/lib/codex-usage-query.js +6 -6
- package/dist/app/lib/composer-connectors.js +12 -12
- package/dist/app/lib/console-site.d.ts +6 -0
- package/dist/app/lib/console-site.js +14 -0
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/events.js +17 -16
- 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/navigation.d.ts +5 -0
- package/dist/app/lib/navigation.js +1 -1
- package/dist/app/lib/routes.d.ts +17 -0
- package/dist/app/lib/routes.js +9 -3
- package/dist/app/lib/session-branch-cache.js +13 -12
- package/dist/app/lib/session-deep-link.js +2 -2
- package/dist/app/lib/session-failure-toasts.d.ts +8 -0
- package/dist/app/lib/session-group-pagination.js +13 -12
- package/dist/app/lib/session-hover-facts.js +14 -13
- package/dist/app/lib/session-model.js +3 -3
- package/dist/app/lib/session-rail.js +9 -8
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/session-ui-features.d.ts +6 -1
- package/dist/app/lib/session-ui-features.js +1 -1
- package/dist/app/lib/sessions-group.d.ts +43 -3
- package/dist/app/lib/sessions-group.js +21 -14
- package/dist/app/lib/shared-query.js +3 -3
- package/dist/app/lib/site-opened.d.ts +6 -0
- package/dist/app/lib/site-opened.js +10 -0
- package/dist/app/lib/turn-failure-analytics.js +4 -4
- package/dist/app/lib/use-duplicate-site.js +3 -3
- package/dist/app/lib/use-follow-up-repositories.js +4 -4
- package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
- package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
- package/dist/app/lib/use-workspace-machines.js +6 -6
- package/dist/app/lib/use-workspace-model-catalog.js +7 -7
- package/dist/app/lib/use-workspace-rigs.js +8 -8
- package/dist/app/lib/workspace-navigation-preference.js +5 -5
- package/dist/app/lib/workspace-scope-context.js +4 -4
- package/dist/app/routes/artifacts.js +132 -149
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +63 -62
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +7 -5
- package/dist/app/routes/session.js +170 -166
- package/dist/app/routes/sessions-index.js +110 -108
- package/dist/app/routes/site-view.d.ts +11 -0
- package/dist/app/routes/site-view.js +597 -0
- package/dist/app/routes/site-view.js.map +1 -0
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +39 -39
- package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-QMCNV4RI.js} +9 -7
- package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-PMIAUXSO.js} +6 -6
- package/dist/{chunk-TGVVEGZG.js → chunk-22FFOHPT.js} +9 -9
- package/dist/chunk-22GTC4MZ.js +15 -0
- package/dist/chunk-22GTC4MZ.js.map +1 -0
- package/dist/{chunk-Z5WMLJKI.js → chunk-22JFMNMF.js} +92 -4
- package/dist/chunk-22JFMNMF.js.map +1 -0
- package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
- package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
- package/dist/chunk-2KO2G3RI.js.map +1 -0
- package/dist/{chunk-5POTDNQT.js → chunk-2NC7NZCE.js} +6 -6
- package/dist/{chunk-ZKYYZH6L.js → chunk-2QBYDGWO.js} +9 -9
- package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
- package/dist/{chunk-R63QEVPK.js → chunk-35BC2FU2.js} +16 -16
- package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
- package/dist/{chunk-S4SC5SSV.js → chunk-3GU7AWG7.js} +18 -18
- package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
- package/dist/{chunk-63VGE4OH.js → chunk-3RMKPHBL.js} +3 -3
- package/dist/{chunk-6JKZILLF.js → chunk-3RQUWFZT.js} +67 -67
- package/dist/{chunk-6JKZILLF.js.map → chunk-3RQUWFZT.js.map} +1 -1
- package/dist/{chunk-RQDFYQHA.js → chunk-3STBLX4O.js} +9 -9
- package/dist/{chunk-S4EZ3JUB.js → chunk-3X5FKDYQ.js} +23 -23
- package/dist/{chunk-KTRKZRID.js → chunk-4GLLWX33.js} +11 -11
- package/dist/{chunk-ROQOVH4N.js → chunk-4HEXNAFI.js} +20 -20
- package/dist/chunk-4HEXNAFI.js.map +1 -0
- package/dist/{chunk-SD2K5ZN5.js → chunk-4LPA25NQ.js} +4 -4
- package/dist/{chunk-KWKGBGAF.js → chunk-4RMN4E2Y.js} +9 -9
- package/dist/{chunk-X7ASQHR6.js → chunk-4SAGYEVB.js} +2 -2
- package/dist/{chunk-HTT3FB7T.js → chunk-4VK2R5QC.js} +3 -3
- package/dist/{chunk-DDK4WFJ3.js → chunk-4XQC7VLT.js} +9 -9
- package/dist/{chunk-IVOA3DXA.js → chunk-4YXAQMTD.js} +12 -12
- package/dist/{chunk-HOJGAJAB.js → chunk-52WK2GGK.js} +8 -8
- package/dist/{chunk-NYZQ7LO7.js → chunk-552UYIQ7.js} +20 -20
- package/dist/{chunk-LEXPBQ56.js → chunk-5DSKMG2I.js} +4 -4
- package/dist/{chunk-WNG757ID.js → chunk-5FA455GR.js} +4 -4
- package/dist/{chunk-HWDGJFM4.js → chunk-5FEN3KYH.js} +11 -11
- package/dist/{chunk-OSVHU2WU.js → chunk-5JHRMUAZ.js} +12 -12
- package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
- package/dist/chunk-5MJHH72T.js.map +1 -0
- package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
- package/dist/{chunk-GFUUFM2O.js → chunk-5W6ZDKRR.js} +6 -6
- package/dist/{chunk-6PQNLL4E.js → chunk-5W7KJ5NQ.js} +37 -37
- package/dist/{chunk-Q35YZVDZ.js → chunk-5Y2FPLZE.js} +9 -9
- package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
- package/dist/chunk-5YFY4SFC.js.map +1 -0
- package/dist/{chunk-F3NERYBQ.js → chunk-62VER7O4.js} +6 -6
- package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
- package/dist/{chunk-LE2EDBXU.js → chunk-73WI7FL2.js} +18 -18
- package/dist/chunk-756MKA2J.js +45 -0
- package/dist/chunk-756MKA2J.js.map +1 -0
- package/dist/{chunk-ZRJCGBVV.js → chunk-7FJMRJDG.js} +2 -2
- package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
- package/dist/{chunk-72J6C2AJ.js → chunk-7KIENXRE.js} +2 -2
- package/dist/{chunk-CBY5CXBD.js → chunk-7NPCEBZE.js} +5 -5
- package/dist/{chunk-46VBQG2D.js → chunk-7P4AQMGA.js} +13 -13
- package/dist/{chunk-X7L4H4VG.js → chunk-7TCT7KPQ.js} +742 -644
- package/dist/chunk-7TCT7KPQ.js.map +1 -0
- package/dist/{chunk-CVG4FILQ.js → chunk-7XO7YKPC.js} +280 -1035
- package/dist/chunk-7XO7YKPC.js.map +1 -0
- package/dist/{chunk-S7PVL7XH.js → chunk-A4BD4ZVB.js} +4 -4
- package/dist/{chunk-EF5SYXAY.js → chunk-ACL2V2KE.js} +30 -22
- package/dist/chunk-ACL2V2KE.js.map +1 -0
- package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
- package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
- package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
- package/dist/{chunk-P5WABK2H.js → chunk-BCM7C3MJ.js} +9 -9
- package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
- package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
- package/dist/{chunk-3XOISKZC.js → chunk-BXQYAAVE.js} +4 -4
- package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
- package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
- package/dist/{chunk-GTQ3SNEI.js → chunk-CD3MO3IC.js} +2 -2
- package/dist/{chunk-WSMYOLHG.js → chunk-CDEXRJB6.js} +5 -5
- package/dist/{chunk-3GLAPCVI.js → chunk-CFFNT2OY.js} +8 -8
- package/dist/{chunk-HO5Y2OOX.js → chunk-CMLJSF2F.js} +10 -10
- package/dist/{chunk-RA3FNMWF.js → chunk-CP7ZQHBW.js} +10 -10
- package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
- package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
- package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
- package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
- package/dist/{chunk-4EAF3HSD.js → chunk-EJ7WARW7.js} +2 -2
- package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
- package/dist/{chunk-OOEO4MKY.js → chunk-EPWD4KRA.js} +2 -2
- package/dist/{chunk-PN66T6JA.js → chunk-EQE3MNQN.js} +5 -5
- package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
- package/dist/{chunk-OO2T63BY.js → chunk-EYS4ZOF5.js} +2 -2
- package/dist/{chunk-7CZTKBTI.js → chunk-FDAV72IX.js} +5 -5
- package/dist/{chunk-AG7VGUIW.js → chunk-FFNPUSVO.js} +7 -7
- package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
- package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
- package/dist/{chunk-BSX2R4CW.js → chunk-FTX5CNHA.js} +4 -4
- package/dist/{chunk-O756O2I7.js → chunk-FWOBNL2A.js} +1 -1
- package/dist/{chunk-6NIB2KGJ.js → chunk-FWYEZ3LE.js} +33 -33
- package/dist/{chunk-DLOYMWUQ.js → chunk-G4HQUBO4.js} +7 -7
- package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
- package/dist/chunk-GGV4NSG3.js +792 -0
- package/dist/chunk-GGV4NSG3.js.map +1 -0
- package/dist/{chunk-U36PO27Q.js → chunk-GHHM6WN4.js} +3 -3
- package/dist/{chunk-OANSIX34.js → chunk-GRSODLVO.js} +4 -4
- package/dist/{chunk-4R3JCVID.js → chunk-GT7JFQ4E.js} +410 -153
- package/dist/chunk-GT7JFQ4E.js.map +1 -0
- package/dist/{chunk-EU6XSQFM.js → chunk-GXW2I2M2.js} +2 -2
- package/dist/{chunk-5JEIDFPD.js → chunk-GZS37O3G.js} +1 -1
- package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
- package/dist/chunk-H5M33DAL.js.map +1 -0
- package/dist/{chunk-HNYJEAES.js → chunk-HQWVDQXW.js} +7 -7
- package/dist/{chunk-YXOKAG66.js → chunk-HU6JTNWF.js} +2 -2
- package/dist/{chunk-QRVNI5V6.js → chunk-I6KIQKU6.js} +3 -3
- package/dist/{chunk-APU42QDI.js → chunk-IBA5FMRE.js} +115 -111
- package/dist/chunk-IBA5FMRE.js.map +1 -0
- package/dist/{chunk-BNUPYHHZ.js → chunk-IDXTASGN.js} +4 -4
- package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
- package/dist/chunk-IECRGM6K.js.map +1 -0
- package/dist/chunk-IJYL5BZM.js +38 -0
- package/dist/chunk-IJYL5BZM.js.map +1 -0
- package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
- package/dist/{chunk-VUHPA3XQ.js → chunk-ITX2TB4K.js} +6 -6
- package/dist/{chunk-BXRIQZAH.js → chunk-J22HD2PB.js} +5 -5
- package/dist/{chunk-U47YDYLQ.js → chunk-J5MEDX7C.js} +8 -8
- package/dist/{chunk-F6LBGYS6.js → chunk-J7FBBLHF.js} +35 -35
- package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
- package/dist/chunk-JFK7NTEA.js.map +1 -0
- package/dist/{chunk-QZRDCFHI.js → chunk-JM4HQPAI.js} +5 -5
- package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
- package/dist/{chunk-XWWXIZFP.js → chunk-JO6R5EXF.js} +7 -7
- package/dist/{chunk-NWZW2WHN.js → chunk-JQCGPTZ6.js} +9 -9
- package/dist/chunk-JRSNCSZN.js +37 -0
- package/dist/chunk-JRSNCSZN.js.map +1 -0
- package/dist/{chunk-OR37STQZ.js → chunk-KEXYBG7Q.js} +3 -3
- package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
- package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
- package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
- package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
- package/dist/{chunk-AOLE4IRZ.js → chunk-LF5CBAOS.js} +5 -5
- package/dist/{chunk-BJIZ7PL7.js → chunk-LHLK7FUA.js} +145 -29
- package/dist/chunk-LHLK7FUA.js.map +1 -0
- package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
- package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
- package/dist/{chunk-RSNYGEVZ.js → chunk-LT4J7RHI.js} +13 -13
- package/dist/{chunk-U3HSFCON.js → chunk-MCTTONOW.js} +28 -28
- package/dist/{chunk-7DU35P5J.js → chunk-MIECLOQC.js} +9 -9
- package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
- package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
- package/dist/chunk-MVZYNZXE.js.map +1 -0
- package/dist/{chunk-L7YURQI2.js → chunk-MXLKI7BI.js} +3 -3
- package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
- package/dist/{chunk-UWJ5P5CU.js → chunk-NEK4WB5P.js} +3 -3
- package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
- package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
- package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
- package/dist/{chunk-DWPOQ3S5.js → chunk-OTMWHZBY.js} +2 -2
- package/dist/{chunk-JTN3T4QN.js → chunk-PCFK7HKD.js} +14 -14
- package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
- package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
- package/dist/{chunk-HGMWMK5K.js → chunk-PO3BH3KQ.js} +2 -2
- package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
- package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
- package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
- package/dist/{chunk-Q35DT6I6.js → chunk-QFMLAT7L.js} +234 -225
- package/dist/chunk-QFMLAT7L.js.map +1 -0
- package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
- package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
- package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
- package/dist/{chunk-HDHK3SXK.js → chunk-RFLYID6H.js} +5 -5
- package/dist/{chunk-ADJJQSYC.js → chunk-RIYZFKIM.js} +39 -37
- package/dist/chunk-RIYZFKIM.js.map +1 -0
- package/dist/{chunk-JK7C5A4I.js → chunk-RQNZDTKT.js} +19 -19
- package/dist/{chunk-EHCUFCXM.js → chunk-RYSRFAHN.js} +32 -22
- package/dist/chunk-RYSRFAHN.js.map +1 -0
- package/dist/{chunk-I6VUUEXH.js → chunk-S2U4CDAC.js} +150 -150
- package/dist/chunk-S2U4CDAC.js.map +1 -0
- package/dist/{chunk-ST22GONV.js → chunk-S37GP7LX.js} +19 -19
- package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
- package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
- package/dist/{chunk-4W7VISE7.js → chunk-SSOO4GWN.js} +193 -194
- package/dist/chunk-SSOO4GWN.js.map +1 -0
- package/dist/{chunk-UP4BE32Y.js → chunk-SY2AAZNB.js} +5 -5
- package/dist/{chunk-33TPANCR.js → chunk-TFK4KFKA.js} +4 -4
- package/dist/{chunk-4432A3HQ.js → chunk-TIQPKOFW.js} +4 -4
- package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
- package/dist/chunk-TL7BOFFL.js +89 -0
- package/dist/chunk-TL7BOFFL.js.map +1 -0
- package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
- package/dist/{chunk-QM5H4FPT.js → chunk-TV6BWONY.js} +3 -3
- package/dist/{chunk-4VKA5O7T.js → chunk-U6MPB3K6.js} +4 -4
- package/dist/{chunk-XOFUXMPP.js → chunk-ULJAOMJA.js} +2 -2
- package/dist/chunk-ULYQEFNH.js +529 -0
- package/dist/chunk-ULYQEFNH.js.map +1 -0
- package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
- package/dist/{chunk-RGW24ZZM.js → chunk-UP7I3W6O.js} +51 -49
- package/dist/chunk-UP7I3W6O.js.map +1 -0
- package/dist/{chunk-5MZTJMZ3.js → chunk-UUGR3X5I.js} +17 -11
- package/dist/chunk-UUGR3X5I.js.map +1 -0
- package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
- package/dist/{chunk-OBQVTCTW.js → chunk-UYNCMZX5.js} +4 -4
- package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
- package/dist/chunk-V3K4RQO7.js.map +1 -0
- package/dist/{chunk-KZHW27BV.js → chunk-V4QZ7UBK.js} +2 -2
- package/dist/{chunk-SUVEDKE2.js → chunk-VH5EGTH2.js} +3 -3
- package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
- package/dist/chunk-VYKW6TB2.js.map +1 -0
- package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
- package/dist/{chunk-VP62LPLW.js → chunk-WCMG4HYI.js} +10 -10
- package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
- package/dist/{chunk-7BST7BA6.js → chunk-WKHUZIOW.js} +1 -1
- package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
- package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
- package/dist/{chunk-GALB2G3W.js → chunk-X2AH4DRF.js} +2 -2
- package/dist/{chunk-Z2DAWUO3.js → chunk-XMNUZUUA.js} +6 -6
- package/dist/{chunk-GAIM5RNE.js → chunk-XN7NSPE6.js} +3 -3
- package/dist/chunk-XV6ZYRHK.js +59 -0
- package/dist/chunk-XV6ZYRHK.js.map +1 -0
- package/dist/{chunk-FLGUVRR7.js → chunk-Y5BSA3I7.js} +5 -5
- package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
- package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
- package/dist/{chunk-QCD5Y7K5.js → chunk-YEROLKOA.js} +16 -16
- package/dist/{chunk-NDF3SH3X.js → chunk-YJPKDRI2.js} +15 -15
- package/dist/{chunk-TQGJN5UZ.js → chunk-YV56F4UP.js} +318 -700
- package/dist/chunk-YV56F4UP.js.map +1 -0
- package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
- package/dist/{chunk-AD22P5X3.js → chunk-YXA2EKV3.js} +3 -3
- package/dist/{chunk-FDNJVZRE.js → chunk-YYCOSTUU.js} +17 -17
- package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
- package/dist/{chunk-BJW7G6EF.js → chunk-Z7IGO5EA.js} +3 -3
- package/dist/{chunk-NCX5SAQY.js → chunk-ZEIFJ6PX.js} +5 -5
- package/dist/{chunk-JRXHSVD5.js → chunk-ZS2UQ3DV.js} +65 -8
- package/dist/chunk-ZS2UQ3DV.js.map +1 -0
- package/dist/{chunk-4EONHNJU.js → chunk-ZVVT72MT.js} +2 -2
- package/dist/components/browser-viewer.d.ts +1 -1
- package/dist/composer.js +13 -13
- package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-25AJIDYA.js} +9 -9
- package/dist/connect.js +10 -10
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-LFHWWYD2.js → embedded-new-voice-RZZEJT6M.js} +7 -7
- package/dist/{embedded-voice-6QS4ANNX.js → embedded-voice-6OKSSPLW.js} +7 -7
- package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
- package/dist/hooks/internal.d.ts +38 -0
- package/dist/hooks/use-client-config-flags.d.ts +12 -0
- package/dist/hooks/use-workspace-sessions.d.ts +10 -1
- package/dist/index.js +233 -227
- package/dist/interaction.js +11 -9
- package/dist/interaction.js.map +1 -1
- package/dist/{latest-question-AW3PPDUM.js → latest-question-2PFWQSSG.js} +4 -3
- package/dist/{latest-question-AW3PPDUM.js.map → latest-question-2PFWQSSG.js.map} +1 -1
- package/dist/machines.js +5 -5
- package/dist/messages/en.d.ts +3 -3
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-VVFGGAI6.js} +6 -6
- package/dist/native-previews.js +3 -3
- package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
- package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-4SHOQPQQ.js} +10 -8
- package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-4SHOQPQQ.js.map} +1 -1
- package/dist/realtime.js +6 -6
- package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-CCOTGXXA.js} +11 -11
- package/dist/sandbox-files-CCOTGXXA.js.map +1 -0
- package/dist/session-app.js +258 -252
- package/dist/session-list-model.d.ts +1 -0
- package/dist/session-list-model.js +8 -2
- package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
- package/dist/session-realtime-JNKDSGH7.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +76 -71
- package/dist/session.js +24 -22
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/invoked-tool.d.ts +5 -0
- package/dist/timeline/tool-display-name.d.ts +2 -2
- package/dist/timeline/tool-icon.d.ts +14 -0
- package/dist/timeline/tool-presentation.d.ts +8 -3
- package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-KHNYNY2J.js} +5 -5
- package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-AXEDJHBP.js} +7 -7
- package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-AV4ZBXRC.js} +9 -9
- package/dist/timeline-model.js +25 -23
- package/dist/ui/access-list.js +18 -18
- package/dist/ui/cadence-picker.js +2 -2
- package/dist/ui/choice-cards.js +2 -2
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/diff-view.js +2 -2
- package/dist/ui/disclosure.js +4 -4
- package/dist/ui/flush-form-page.js +3 -3
- package/dist/ui/form-dialog.js +2 -2
- package/dist/ui/list-row.js +4 -4
- package/dist/ui/revision-history.js +11 -11
- package/dist/ui/role-select.js +7 -7
- package/dist/ui/select-menu.js +2 -2
- package/dist/ui/settings-nav.js +3 -3
- package/dist/usage.js +3 -3
- package/dist/workbench.js +11 -11
- package/package.json +4 -4
- package/src/app/app-state.tsx +3 -1
- package/src/app/components/capabilities/session-machine-card.tsx +9 -2
- package/src/app/components/rail/session-list.tsx +254 -44
- package/src/app/components/rail/session-row-content.tsx +24 -2
- package/src/app/components/rail/session-shell.tsx +14 -9
- package/src/app/components/rail/site-session-group-heading.tsx +59 -20
- package/src/app/components/session/session-tenancy-control.tsx +18 -0
- package/src/app/components/session/site-origin-link.test.tsx +73 -0
- package/src/app/components/session/site-origin-link.tsx +4 -2
- package/src/app/embed/memory-navigation.tsx +1 -0
- package/src/app/lib/actions/held-modifier.test.ts +101 -0
- package/src/app/lib/actions/held-modifier.ts +108 -0
- package/src/app/lib/console-site.tsx +38 -0
- package/src/app/lib/navigation.tsx +4 -0
- package/src/app/lib/routes.tsx +42 -0
- package/src/app/lib/session-failure-toasts.ts +26 -0
- package/src/app/lib/session-ui-features.tsx +18 -4
- package/src/app/lib/sessions-group.tsx +219 -30
- package/src/app/lib/site-opened.tsx +48 -0
- package/src/app/lib/site-session-groups.test.ts +173 -6
- package/src/app/lib/site-view-routes.test.ts +55 -0
- package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
- package/src/app/routes/artifacts.tsx +2 -29
- package/src/app/routes/session-transient-failures.test.tsx +343 -0
- package/src/app/routes/session-unavailable.tsx +74 -3
- package/src/app/routes/session.tsx +4 -13
- package/src/app/routes/sessions-index.tsx +13 -9
- package/src/app/routes/site-view.test.tsx +476 -0
- package/src/app/routes/site-view.tsx +583 -0
- package/src/components/browser-viewer.tsx +16 -2
- package/src/hooks/internal.ts +129 -6
- package/src/hooks/use-client-config-flags.ts +8 -0
- package/src/hooks/use-session-events.ts +83 -9
- package/src/hooks/use-workspace-sessions.ts +21 -1
- package/src/messages/en.ts +3 -3
- package/src/session-list-model.ts +4 -0
- package/src/timeline/activity-rail.tsx +3 -2
- package/src/timeline/invoked-tool.ts +14 -4
- package/src/timeline/projection.ts +11 -6
- package/src/timeline/rolling-activity.tsx +6 -2
- package/src/timeline/tool-display-name.ts +2 -2
- package/src/timeline/tool-icon.tsx +165 -0
- package/src/timeline/tool-presentation.ts +207 -48
- package/src/timeline/tool-renderers.tsx +1 -70
- package/styles/compiled.css +38 -0
- package/dist/chunk-22ZBT6CN.js +0 -50
- package/dist/chunk-22ZBT6CN.js.map +0 -1
- package/dist/chunk-4R3JCVID.js.map +0 -1
- package/dist/chunk-4W7VISE7.js.map +0 -1
- package/dist/chunk-5JZYPZ72.js.map +0 -1
- package/dist/chunk-5MZTJMZ3.js.map +0 -1
- package/dist/chunk-6W3LF3DB.js.map +0 -1
- package/dist/chunk-ADJJQSYC.js.map +0 -1
- package/dist/chunk-APU42QDI.js.map +0 -1
- package/dist/chunk-BJIZ7PL7.js.map +0 -1
- package/dist/chunk-CVG4FILQ.js.map +0 -1
- package/dist/chunk-EF5SYXAY.js.map +0 -1
- package/dist/chunk-EHCUFCXM.js.map +0 -1
- package/dist/chunk-GZ64CASI.js.map +0 -1
- package/dist/chunk-I6VUUEXH.js.map +0 -1
- package/dist/chunk-JRXHSVD5.js.map +0 -1
- package/dist/chunk-KF3MF6FP.js.map +0 -1
- package/dist/chunk-MYNUBDU7.js.map +0 -1
- package/dist/chunk-NAWXARTY.js.map +0 -1
- package/dist/chunk-PM3OSANE.js.map +0 -1
- package/dist/chunk-Q35DT6I6.js.map +0 -1
- package/dist/chunk-R25ZKOZR.js +0 -24
- package/dist/chunk-R25ZKOZR.js.map +0 -1
- package/dist/chunk-RGPYMHKI.js.map +0 -1
- package/dist/chunk-RGW24ZZM.js.map +0 -1
- package/dist/chunk-ROQOVH4N.js.map +0 -1
- package/dist/chunk-TQGJN5UZ.js.map +0 -1
- package/dist/chunk-X7L4H4VG.js.map +0 -1
- package/dist/chunk-XFNLU7EW.js.map +0 -1
- package/dist/chunk-Z5WMLJKI.js.map +0 -1
- /package/dist/{browser-viewer-RYYQSRTC.js.map → app/lib/console-site.js.map} +0 -0
- /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/site-opened.js.map} +0 -0
- /package/dist/{computer-viewer-KEDVLD42.js.map → browser-viewer-QMCNV4RI.js.map} +0 -0
- /package/dist/{embedded-new-voice-LFHWWYD2.js.map → chat-interactive-block-PMIAUXSO.js.map} +0 -0
- /package/dist/{chunk-TGVVEGZG.js.map → chunk-22FFOHPT.js.map} +0 -0
- /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
- /package/dist/{chunk-5POTDNQT.js.map → chunk-2NC7NZCE.js.map} +0 -0
- /package/dist/{chunk-ZKYYZH6L.js.map → chunk-2QBYDGWO.js.map} +0 -0
- /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
- /package/dist/{chunk-R63QEVPK.js.map → chunk-35BC2FU2.js.map} +0 -0
- /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
- /package/dist/{chunk-S4SC5SSV.js.map → chunk-3GU7AWG7.js.map} +0 -0
- /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
- /package/dist/{chunk-63VGE4OH.js.map → chunk-3RMKPHBL.js.map} +0 -0
- /package/dist/{chunk-RQDFYQHA.js.map → chunk-3STBLX4O.js.map} +0 -0
- /package/dist/{chunk-S4EZ3JUB.js.map → chunk-3X5FKDYQ.js.map} +0 -0
- /package/dist/{chunk-KTRKZRID.js.map → chunk-4GLLWX33.js.map} +0 -0
- /package/dist/{chunk-SD2K5ZN5.js.map → chunk-4LPA25NQ.js.map} +0 -0
- /package/dist/{chunk-KWKGBGAF.js.map → chunk-4RMN4E2Y.js.map} +0 -0
- /package/dist/{chunk-X7ASQHR6.js.map → chunk-4SAGYEVB.js.map} +0 -0
- /package/dist/{chunk-HTT3FB7T.js.map → chunk-4VK2R5QC.js.map} +0 -0
- /package/dist/{chunk-DDK4WFJ3.js.map → chunk-4XQC7VLT.js.map} +0 -0
- /package/dist/{chunk-IVOA3DXA.js.map → chunk-4YXAQMTD.js.map} +0 -0
- /package/dist/{chunk-HOJGAJAB.js.map → chunk-52WK2GGK.js.map} +0 -0
- /package/dist/{chunk-NYZQ7LO7.js.map → chunk-552UYIQ7.js.map} +0 -0
- /package/dist/{chunk-LEXPBQ56.js.map → chunk-5DSKMG2I.js.map} +0 -0
- /package/dist/{chunk-WNG757ID.js.map → chunk-5FA455GR.js.map} +0 -0
- /package/dist/{chunk-HWDGJFM4.js.map → chunk-5FEN3KYH.js.map} +0 -0
- /package/dist/{chunk-OSVHU2WU.js.map → chunk-5JHRMUAZ.js.map} +0 -0
- /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
- /package/dist/{chunk-GFUUFM2O.js.map → chunk-5W6ZDKRR.js.map} +0 -0
- /package/dist/{chunk-6PQNLL4E.js.map → chunk-5W7KJ5NQ.js.map} +0 -0
- /package/dist/{chunk-Q35YZVDZ.js.map → chunk-5Y2FPLZE.js.map} +0 -0
- /package/dist/{chunk-F3NERYBQ.js.map → chunk-62VER7O4.js.map} +0 -0
- /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
- /package/dist/{chunk-LE2EDBXU.js.map → chunk-73WI7FL2.js.map} +0 -0
- /package/dist/{chunk-ZRJCGBVV.js.map → chunk-7FJMRJDG.js.map} +0 -0
- /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
- /package/dist/{chunk-72J6C2AJ.js.map → chunk-7KIENXRE.js.map} +0 -0
- /package/dist/{chunk-CBY5CXBD.js.map → chunk-7NPCEBZE.js.map} +0 -0
- /package/dist/{chunk-46VBQG2D.js.map → chunk-7P4AQMGA.js.map} +0 -0
- /package/dist/{chunk-S7PVL7XH.js.map → chunk-A4BD4ZVB.js.map} +0 -0
- /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
- /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
- /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
- /package/dist/{chunk-P5WABK2H.js.map → chunk-BCM7C3MJ.js.map} +0 -0
- /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
- /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
- /package/dist/{chunk-3XOISKZC.js.map → chunk-BXQYAAVE.js.map} +0 -0
- /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
- /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
- /package/dist/{chunk-GTQ3SNEI.js.map → chunk-CD3MO3IC.js.map} +0 -0
- /package/dist/{chunk-WSMYOLHG.js.map → chunk-CDEXRJB6.js.map} +0 -0
- /package/dist/{chunk-3GLAPCVI.js.map → chunk-CFFNT2OY.js.map} +0 -0
- /package/dist/{chunk-HO5Y2OOX.js.map → chunk-CMLJSF2F.js.map} +0 -0
- /package/dist/{chunk-RA3FNMWF.js.map → chunk-CP7ZQHBW.js.map} +0 -0
- /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
- /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
- /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
- /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
- /package/dist/{chunk-4EAF3HSD.js.map → chunk-EJ7WARW7.js.map} +0 -0
- /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
- /package/dist/{chunk-OOEO4MKY.js.map → chunk-EPWD4KRA.js.map} +0 -0
- /package/dist/{chunk-PN66T6JA.js.map → chunk-EQE3MNQN.js.map} +0 -0
- /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
- /package/dist/{chunk-OO2T63BY.js.map → chunk-EYS4ZOF5.js.map} +0 -0
- /package/dist/{chunk-7CZTKBTI.js.map → chunk-FDAV72IX.js.map} +0 -0
- /package/dist/{chunk-AG7VGUIW.js.map → chunk-FFNPUSVO.js.map} +0 -0
- /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
- /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
- /package/dist/{chunk-BSX2R4CW.js.map → chunk-FTX5CNHA.js.map} +0 -0
- /package/dist/{chunk-O756O2I7.js.map → chunk-FWOBNL2A.js.map} +0 -0
- /package/dist/{chunk-6NIB2KGJ.js.map → chunk-FWYEZ3LE.js.map} +0 -0
- /package/dist/{chunk-DLOYMWUQ.js.map → chunk-G4HQUBO4.js.map} +0 -0
- /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
- /package/dist/{chunk-U36PO27Q.js.map → chunk-GHHM6WN4.js.map} +0 -0
- /package/dist/{chunk-OANSIX34.js.map → chunk-GRSODLVO.js.map} +0 -0
- /package/dist/{chunk-EU6XSQFM.js.map → chunk-GXW2I2M2.js.map} +0 -0
- /package/dist/{chunk-5JEIDFPD.js.map → chunk-GZS37O3G.js.map} +0 -0
- /package/dist/{chunk-HNYJEAES.js.map → chunk-HQWVDQXW.js.map} +0 -0
- /package/dist/{chunk-YXOKAG66.js.map → chunk-HU6JTNWF.js.map} +0 -0
- /package/dist/{chunk-QRVNI5V6.js.map → chunk-I6KIQKU6.js.map} +0 -0
- /package/dist/{chunk-BNUPYHHZ.js.map → chunk-IDXTASGN.js.map} +0 -0
- /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
- /package/dist/{chunk-VUHPA3XQ.js.map → chunk-ITX2TB4K.js.map} +0 -0
- /package/dist/{chunk-BXRIQZAH.js.map → chunk-J22HD2PB.js.map} +0 -0
- /package/dist/{chunk-U47YDYLQ.js.map → chunk-J5MEDX7C.js.map} +0 -0
- /package/dist/{chunk-F6LBGYS6.js.map → chunk-J7FBBLHF.js.map} +0 -0
- /package/dist/{chunk-QZRDCFHI.js.map → chunk-JM4HQPAI.js.map} +0 -0
- /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
- /package/dist/{chunk-XWWXIZFP.js.map → chunk-JO6R5EXF.js.map} +0 -0
- /package/dist/{chunk-NWZW2WHN.js.map → chunk-JQCGPTZ6.js.map} +0 -0
- /package/dist/{chunk-OR37STQZ.js.map → chunk-KEXYBG7Q.js.map} +0 -0
- /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
- /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
- /package/dist/{chunk-AOLE4IRZ.js.map → chunk-LF5CBAOS.js.map} +0 -0
- /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
- /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
- /package/dist/{chunk-RSNYGEVZ.js.map → chunk-LT4J7RHI.js.map} +0 -0
- /package/dist/{chunk-U3HSFCON.js.map → chunk-MCTTONOW.js.map} +0 -0
- /package/dist/{chunk-7DU35P5J.js.map → chunk-MIECLOQC.js.map} +0 -0
- /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
- /package/dist/{chunk-L7YURQI2.js.map → chunk-MXLKI7BI.js.map} +0 -0
- /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
- /package/dist/{chunk-UWJ5P5CU.js.map → chunk-NEK4WB5P.js.map} +0 -0
- /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
- /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
- /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
- /package/dist/{chunk-DWPOQ3S5.js.map → chunk-OTMWHZBY.js.map} +0 -0
- /package/dist/{chunk-JTN3T4QN.js.map → chunk-PCFK7HKD.js.map} +0 -0
- /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
- /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
- /package/dist/{chunk-HGMWMK5K.js.map → chunk-PO3BH3KQ.js.map} +0 -0
- /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
- /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
- /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
- /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
- /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
- /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
- /package/dist/{chunk-HDHK3SXK.js.map → chunk-RFLYID6H.js.map} +0 -0
- /package/dist/{chunk-JK7C5A4I.js.map → chunk-RQNZDTKT.js.map} +0 -0
- /package/dist/{chunk-ST22GONV.js.map → chunk-S37GP7LX.js.map} +0 -0
- /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
- /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
- /package/dist/{chunk-UP4BE32Y.js.map → chunk-SY2AAZNB.js.map} +0 -0
- /package/dist/{chunk-33TPANCR.js.map → chunk-TFK4KFKA.js.map} +0 -0
- /package/dist/{chunk-4432A3HQ.js.map → chunk-TIQPKOFW.js.map} +0 -0
- /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
- /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
- /package/dist/{chunk-QM5H4FPT.js.map → chunk-TV6BWONY.js.map} +0 -0
- /package/dist/{chunk-4VKA5O7T.js.map → chunk-U6MPB3K6.js.map} +0 -0
- /package/dist/{chunk-XOFUXMPP.js.map → chunk-ULJAOMJA.js.map} +0 -0
- /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
- /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
- /package/dist/{chunk-OBQVTCTW.js.map → chunk-UYNCMZX5.js.map} +0 -0
- /package/dist/{chunk-KZHW27BV.js.map → chunk-V4QZ7UBK.js.map} +0 -0
- /package/dist/{chunk-SUVEDKE2.js.map → chunk-VH5EGTH2.js.map} +0 -0
- /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
- /package/dist/{chunk-VP62LPLW.js.map → chunk-WCMG4HYI.js.map} +0 -0
- /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
- /package/dist/{chunk-7BST7BA6.js.map → chunk-WKHUZIOW.js.map} +0 -0
- /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
- /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
- /package/dist/{chunk-GALB2G3W.js.map → chunk-X2AH4DRF.js.map} +0 -0
- /package/dist/{chunk-Z2DAWUO3.js.map → chunk-XMNUZUUA.js.map} +0 -0
- /package/dist/{chunk-GAIM5RNE.js.map → chunk-XN7NSPE6.js.map} +0 -0
- /package/dist/{chunk-FLGUVRR7.js.map → chunk-Y5BSA3I7.js.map} +0 -0
- /package/dist/{chunk-QCD5Y7K5.js.map → chunk-YEROLKOA.js.map} +0 -0
- /package/dist/{chunk-NDF3SH3X.js.map → chunk-YJPKDRI2.js.map} +0 -0
- /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
- /package/dist/{chunk-AD22P5X3.js.map → chunk-YXA2EKV3.js.map} +0 -0
- /package/dist/{chunk-FDNJVZRE.js.map → chunk-YYCOSTUU.js.map} +0 -0
- /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
- /package/dist/{chunk-BJW7G6EF.js.map → chunk-Z7IGO5EA.js.map} +0 -0
- /package/dist/{chunk-NCX5SAQY.js.map → chunk-ZEIFJ6PX.js.map} +0 -0
- /package/dist/{chunk-4EONHNJU.js.map → chunk-ZVVT72MT.js.map} +0 -0
- /package/dist/{embedded-voice-6QS4ANNX.js.map → computer-viewer-25AJIDYA.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-CURJ247L.js.map → embedded-new-voice-RZZEJT6M.js.map} +0 -0
- /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-voice-6OKSSPLW.js.map} +0 -0
- /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
- /package/dist/{session-realtime-2XIB254N.js.map → model-policy-picker-menu-VVFGGAI6.js.map} +0 -0
- /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-KHNYNY2J.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-AXEDJHBP.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-AV4ZBXRC.js.map} +0 -0
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// active session (from the URL) is highlighted with an accent bar.
|
|
6
6
|
import { t } from "../../lib/console-text";
|
|
7
7
|
import { useSessionListHintRefresh } from "../../lib/use-session-list-hint-refresh";
|
|
8
|
+
import { useSiteOpenedListener } from "../../lib/site-opened";
|
|
8
9
|
import { useOpenGeni } from "../../../session-context";
|
|
9
10
|
import { useChannels } from "../../../hooks/use-channels";
|
|
10
11
|
import { useSessionLineage } from "../../../hooks/use-session-lineage";
|
|
@@ -15,6 +16,7 @@ import {
|
|
|
15
16
|
sessionListGroupRevision,
|
|
16
17
|
} from "../../lib/session-list-dirty-scopes";
|
|
17
18
|
import { SiteOriginLink } from "../session/site-origin-link";
|
|
19
|
+
import { sessionSiteOrigin } from "../../lib/session-site-origin";
|
|
18
20
|
import { SiteSessionGroupHeading } from "./site-session-group-heading";
|
|
19
21
|
import { SessionBrowseOrderControls } from "./session-browse-order-controls";
|
|
20
22
|
import {
|
|
@@ -43,7 +45,9 @@ import {
|
|
|
43
45
|
} from "lucide-react";
|
|
44
46
|
import { toast } from "../../lib/toast";
|
|
45
47
|
import {
|
|
48
|
+
createContext,
|
|
46
49
|
useCallback,
|
|
50
|
+
useContext,
|
|
47
51
|
useEffect,
|
|
48
52
|
useId,
|
|
49
53
|
useLayoutEffect,
|
|
@@ -188,9 +192,11 @@ import {
|
|
|
188
192
|
projectRailSessions,
|
|
189
193
|
groupSessionsForRail,
|
|
190
194
|
mergeSessionForRail,
|
|
195
|
+
parseSiteRowKey,
|
|
191
196
|
relativeTimeLabel,
|
|
192
197
|
sessionBrowseResultCount,
|
|
193
198
|
selectedDescendantNode,
|
|
199
|
+
siteRowConversationCount,
|
|
194
200
|
sessionCreatorLabelMap,
|
|
195
201
|
visibleForestRows,
|
|
196
202
|
visibleTreeRows,
|
|
@@ -205,6 +211,7 @@ import {
|
|
|
205
211
|
type SessionForest,
|
|
206
212
|
type SessionRecencyGroup,
|
|
207
213
|
} from "../../lib/sessions-group";
|
|
214
|
+
import { railRouteSelection } from "../../lib/routes";
|
|
208
215
|
import {
|
|
209
216
|
readSessionBrowsePreferences,
|
|
210
217
|
DEFAULT_SESSION_BROWSE_PREFERENCES,
|
|
@@ -241,6 +248,8 @@ import type { Channel, Session as SessionDetails } from "../../types";
|
|
|
241
248
|
import type { RailSession as Session } from "../../lib/session-list-entry";
|
|
242
249
|
import { useUiEventTarget } from "../../lib/ui-events";
|
|
243
250
|
import { useActionShortcut } from "../../lib/actions/actions-provider";
|
|
251
|
+
import { chordLabel, currentPlatform } from "../../lib/actions/chords";
|
|
252
|
+
import { useHeldModifier } from "../../lib/actions/held-modifier";
|
|
244
253
|
import { requestCommandMenu } from "../../lib/actions/events";
|
|
245
254
|
import { rememberChats, setSidebarOrder } from "../../lib/actions/chat-directory";
|
|
246
255
|
import { useChatOperations } from "../../lib/actions/chat-operations";
|
|
@@ -358,10 +367,11 @@ export function SessionList() {
|
|
|
358
367
|
const setContextSession = context.setSession;
|
|
359
368
|
const navigate = useNavigate();
|
|
360
369
|
const activeSessionId = useRouterState({
|
|
361
|
-
select: (state): string | null =>
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
370
|
+
select: (state): string | null => railRouteSelection(state.location).sessionId,
|
|
371
|
+
});
|
|
372
|
+
// The Site view marks its Site row, or the conversation open beside it.
|
|
373
|
+
const activeSiteId = useRouterState({
|
|
374
|
+
select: (state): string | null => railRouteSelection(state.location).siteId,
|
|
365
375
|
});
|
|
366
376
|
const [documentForeground, setDocumentForeground] = useState(() =>
|
|
367
377
|
Boolean(document.visibilityState === "visible" && document.hasFocus()),
|
|
@@ -450,6 +460,9 @@ export function SessionList() {
|
|
|
450
460
|
mineOnly,
|
|
451
461
|
search,
|
|
452
462
|
...(hierarchyMode ? { parentSessionId: null } : {}),
|
|
463
|
+
// Sites are rows of their own: their conversations nest under them and
|
|
464
|
+
// arrive as complete Site rows. Search and Archived list them as rows.
|
|
465
|
+
siteConversations: hierarchyMode && browseStatus !== "archived" ? "group" : "include",
|
|
453
466
|
archiveStatus: browseStatus,
|
|
454
467
|
...(browseStatus === "archived" ? {} : { sortBy: browseSortBy }),
|
|
455
468
|
pollIntervalMs: listHintsAvailable ? undefined : 15_000,
|
|
@@ -463,6 +476,7 @@ export function SessionList() {
|
|
|
463
476
|
projection: "summary",
|
|
464
477
|
limit: 1,
|
|
465
478
|
pinsOnly: true,
|
|
479
|
+
siteConversations: "include",
|
|
466
480
|
includeTotals: !hierarchyMode || browseStatus === "archived",
|
|
467
481
|
pollIntervalMs: listHintsAvailable ? undefined : 15_000,
|
|
468
482
|
beginRead: context.sessionChannelProjectionAuthority.beginRead,
|
|
@@ -524,10 +538,25 @@ export function SessionList() {
|
|
|
524
538
|
},
|
|
525
539
|
[refresh, refreshGlobalPins, refreshChannels],
|
|
526
540
|
);
|
|
541
|
+
// Opening a Site moves its row: only the grouped root page carries Site rows.
|
|
542
|
+
const refreshSiteRows = useCallback(() => void refresh(), [refresh]);
|
|
543
|
+
useSiteOpenedListener(
|
|
544
|
+
rail.workspaceId,
|
|
545
|
+
refreshSiteRows,
|
|
546
|
+
hierarchyMode && browseStatus !== "archived",
|
|
547
|
+
);
|
|
527
548
|
useEffect(() => {
|
|
528
549
|
if (workspaceSessionListEvent?.workspaceId !== rail.workspaceId) return;
|
|
529
|
-
if (workspaceSessionListEvent.available)
|
|
530
|
-
|
|
550
|
+
if (!workspaceSessionListEvent.available) return;
|
|
551
|
+
const { sessionIds, siteSessionIds = [] } = workspaceSessionListEvent;
|
|
552
|
+
// A Site conversation the rail has not loaded sits in a collapsed Site
|
|
553
|
+
// row, whose summary arrives with the root page this always re-reads.
|
|
554
|
+
// Only loaded ones dirty their own branch; none forces a full reload.
|
|
555
|
+
void refreshSessionPages(
|
|
556
|
+
sessionIds === null
|
|
557
|
+
? null
|
|
558
|
+
: [...sessionIds, ...siteSessionIds.filter((id) => knownListSessions.current.has(id))],
|
|
559
|
+
);
|
|
531
560
|
}, [workspaceSessionListEvent, rail.workspaceId, refreshSessionPages]);
|
|
532
561
|
useEffect(() => {
|
|
533
562
|
if (workspaceControlEvent) void refreshSessionPages();
|
|
@@ -716,7 +745,8 @@ export function SessionList() {
|
|
|
716
745
|
branchSummaryKeys.current.clear();
|
|
717
746
|
activeBranchHydration.current = null;
|
|
718
747
|
setChildPages(new Map());
|
|
719
|
-
|
|
748
|
+
// Site rows list root conversations, so the root filters scope them too.
|
|
749
|
+
}, [rail.workspaceId, hierarchyMode, browseSortBy, browseStatus, needsYouOnly, mineOnly]);
|
|
720
750
|
// Short-lived optimistic projections only. The page returned by the server
|
|
721
751
|
// remains canonical; after each mutation we replace the projection with that
|
|
722
752
|
// returned row and refresh once to reconcile tabs/devices/offline recovery.
|
|
@@ -1475,9 +1505,22 @@ export function SessionList() {
|
|
|
1475
1505
|
const railSections = useMemo(
|
|
1476
1506
|
() =>
|
|
1477
1507
|
buildPinnedRailSections(projectedSessions, new Date(), {
|
|
1478
|
-
|
|
1508
|
+
// Sites are stable rows whenever the rail is a hierarchy. Search is
|
|
1509
|
+
// flat: a matching conversation is listed as itself.
|
|
1510
|
+
groupSites: hierarchyMode,
|
|
1511
|
+
siteGroups: rootPage.siteGroups ?? undefined,
|
|
1512
|
+
siteRowsByProject: channelMode,
|
|
1513
|
+
workspaceId: rail.workspaceId,
|
|
1514
|
+
creator: { kind: "subject", subjectId: context.accessContext.subjectId },
|
|
1479
1515
|
}),
|
|
1480
|
-
[
|
|
1516
|
+
[
|
|
1517
|
+
projectedSessions,
|
|
1518
|
+
hierarchyMode,
|
|
1519
|
+
rootPage.siteGroups,
|
|
1520
|
+
channelMode,
|
|
1521
|
+
rail.workspaceId,
|
|
1522
|
+
context.accessContext.subjectId,
|
|
1523
|
+
],
|
|
1481
1524
|
);
|
|
1482
1525
|
const forest = useMemo(
|
|
1483
1526
|
() =>
|
|
@@ -1939,8 +1982,15 @@ export function SessionList() {
|
|
|
1939
1982
|
for (const node of bucket.sessions) visit(node);
|
|
1940
1983
|
}
|
|
1941
1984
|
for (const node of archivedNodes) visit(node);
|
|
1985
|
+
// Site rows are presentation-only; register them by key for disclosure.
|
|
1986
|
+
for (const node of [
|
|
1987
|
+
...railSections.ordinary.running,
|
|
1988
|
+
...railSections.ordinary.grouped.flatMap((bucket) => bucket.sessions),
|
|
1989
|
+
]) {
|
|
1990
|
+
if (node.siteGroup && !result.has(node.session.id)) result.set(node.session.id, node);
|
|
1991
|
+
}
|
|
1942
1992
|
return result;
|
|
1943
|
-
}, [archivedNodes, railSections.complete]);
|
|
1993
|
+
}, [archivedNodes, railSections.complete, railSections.ordinary]);
|
|
1944
1994
|
|
|
1945
1995
|
// Manual state is separate from the small derived active-path expansion.
|
|
1946
1996
|
// Polls can therefore never reopen a branch the user explicitly collapsed.
|
|
@@ -2007,11 +2057,24 @@ export function SessionList() {
|
|
|
2007
2057
|
);
|
|
2008
2058
|
try {
|
|
2009
2059
|
const readGeneration = context.sessionChannelProjectionAuthority.beginRead();
|
|
2060
|
+
// A Site row's "children" are the Site's own root conversations.
|
|
2061
|
+
const siteRow = parseSiteRowKey(parentSessionId);
|
|
2010
2062
|
const page = await readLoadedSessionBranchWindow(
|
|
2011
2063
|
(pageCursor) =>
|
|
2012
2064
|
context.client.listSessionSummaryPage(rail.workspaceId, {
|
|
2013
2065
|
limit: 50,
|
|
2014
|
-
|
|
2066
|
+
...(siteRow
|
|
2067
|
+
? {
|
|
2068
|
+
parentSessionId: null,
|
|
2069
|
+
originSiteId: siteRow.siteId,
|
|
2070
|
+
...(siteRow.channelId !== undefined ? { channelId: siteRow.channelId } : {}),
|
|
2071
|
+
// Its conversations are roots: list exactly the set the
|
|
2072
|
+
// Site row's count was computed over.
|
|
2073
|
+
...(needsYouOnly ? { needsYouOnly: true } : {}),
|
|
2074
|
+
...(mineOnly ? { mineOnly: true } : {}),
|
|
2075
|
+
}
|
|
2076
|
+
: // Work spawned by a Site conversation runs inside the Site too.
|
|
2077
|
+
{ parentSessionId, siteConversations: "include" as const }),
|
|
2015
2078
|
...(pageCursor ? { cursor: pageCursor } : {}),
|
|
2016
2079
|
archiveStatus: browseStatus,
|
|
2017
2080
|
sortBy: browseSortBy,
|
|
@@ -2051,6 +2114,8 @@ export function SessionList() {
|
|
|
2051
2114
|
branchReadRevision,
|
|
2052
2115
|
browseSortBy,
|
|
2053
2116
|
browseStatus,
|
|
2117
|
+
needsYouOnly,
|
|
2118
|
+
mineOnly,
|
|
2054
2119
|
],
|
|
2055
2120
|
);
|
|
2056
2121
|
// The active route supplies exact child + ancestor detail even before the
|
|
@@ -2146,6 +2211,46 @@ export function SessionList() {
|
|
|
2146
2211
|
});
|
|
2147
2212
|
}
|
|
2148
2213
|
}, [allSessions, childPages, context.session, expanded, loadChildPage, branchReadRevision]);
|
|
2214
|
+
// A loaded Site row follows its complete server summary: a new or newly
|
|
2215
|
+
// active conversation reloads an open Site and marks a closed one stale.
|
|
2216
|
+
const siteRowSummaryKeys = useRef(new Map<string, string>());
|
|
2217
|
+
useEffect(() => {
|
|
2218
|
+
const newlyStale = new Set<string>();
|
|
2219
|
+
for (const [key, page] of childPages) {
|
|
2220
|
+
if (!parseSiteRowKey(key)) continue;
|
|
2221
|
+
const summary = nodesById.get(key)?.siteSummary;
|
|
2222
|
+
// Membership and status always matter; activity time only when the
|
|
2223
|
+
// rows are ordered by it.
|
|
2224
|
+
const next = summary
|
|
2225
|
+
? [
|
|
2226
|
+
summary.conversations,
|
|
2227
|
+
summary.total,
|
|
2228
|
+
summary.attention,
|
|
2229
|
+
summary.failed,
|
|
2230
|
+
summary.active,
|
|
2231
|
+
summary.queued,
|
|
2232
|
+
summary.waiting,
|
|
2233
|
+
summary.unread,
|
|
2234
|
+
browseSortBy === "updatedAt" ? summary.updatedAt : "",
|
|
2235
|
+
].join(":")
|
|
2236
|
+
: "";
|
|
2237
|
+
const previous = siteRowSummaryKeys.current.get(key);
|
|
2238
|
+
if (page.loading) continue;
|
|
2239
|
+
siteRowSummaryKeys.current.set(key, next);
|
|
2240
|
+
if (previous === undefined || previous === next) continue;
|
|
2241
|
+
if (expanded.has(key)) void loadChildPage(key, undefined, { feedbackVisible: false });
|
|
2242
|
+
else if (!page.stale) newlyStale.add(key);
|
|
2243
|
+
}
|
|
2244
|
+
if (newlyStale.size === 0) return;
|
|
2245
|
+
setChildPages((current) => {
|
|
2246
|
+
const next = new Map(current);
|
|
2247
|
+
for (const key of newlyStale) {
|
|
2248
|
+
const page = next.get(key);
|
|
2249
|
+
if (page) next.set(key, { ...page, stale: true });
|
|
2250
|
+
}
|
|
2251
|
+
return next;
|
|
2252
|
+
});
|
|
2253
|
+
}, [childPages, expanded, loadChildPage, nodesById, browseSortBy]);
|
|
2149
2254
|
const toggleExpand = useCallback(
|
|
2150
2255
|
(sessionId: string) => {
|
|
2151
2256
|
const opening = !expanded.has(sessionId);
|
|
@@ -2162,9 +2267,9 @@ export function SessionList() {
|
|
|
2162
2267
|
return next;
|
|
2163
2268
|
});
|
|
2164
2269
|
const node = nodesById.get(sessionId);
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
node?.session.treeStats?.directChildren ?? node?.children.length ?? 0;
|
|
2270
|
+
const knownDirectChildren = node?.siteGroup
|
|
2271
|
+
? siteRowConversationCount(node)
|
|
2272
|
+
: (node?.session.treeStats?.directChildren ?? node?.children.length ?? 0);
|
|
2168
2273
|
if (
|
|
2169
2274
|
opening &&
|
|
2170
2275
|
hierarchyMode &&
|
|
@@ -2178,6 +2283,30 @@ export function SessionList() {
|
|
|
2178
2283
|
},
|
|
2179
2284
|
[childPages, expanded, hierarchyMode, loadChildPage, nodesById],
|
|
2180
2285
|
);
|
|
2286
|
+
// Opening one of a Site's conversations opens its Site row once per visit
|
|
2287
|
+
// to that Site, as a person's own expansion would: it stays open when
|
|
2288
|
+
// another session is selected, and closing it again is respected while
|
|
2289
|
+
// switching between the Site's conversations.
|
|
2290
|
+
const openSiteId =
|
|
2291
|
+
activeSiteId ??
|
|
2292
|
+
(activeSessionId &&
|
|
2293
|
+
context.session?.id === activeSessionId &&
|
|
2294
|
+
context.session.parentSessionId === null
|
|
2295
|
+
? (sessionSiteOrigin(context.session)?.siteId ?? null)
|
|
2296
|
+
: null);
|
|
2297
|
+
const siteRouteExpansion = useRef<string | null>(null);
|
|
2298
|
+
useEffect(() => {
|
|
2299
|
+
if (!hierarchyMode || !openSiteId) {
|
|
2300
|
+
siteRouteExpansion.current = null;
|
|
2301
|
+
return;
|
|
2302
|
+
}
|
|
2303
|
+
// The Site itself is marked without opening its row.
|
|
2304
|
+
if (!activeSessionId || siteRouteExpansion.current === openSiteId) return;
|
|
2305
|
+
const rows = [...nodesById.values()].filter((node) => node.siteGroup?.siteId === openSiteId);
|
|
2306
|
+
if (rows.length === 0) return;
|
|
2307
|
+
siteRouteExpansion.current = openSiteId;
|
|
2308
|
+
for (const row of rows) if (!expanded.has(row.session.id)) toggleExpand(row.session.id);
|
|
2309
|
+
}, [activeSessionId, expanded, hierarchyMode, nodesById, openSiteId, toggleExpand]);
|
|
2181
2310
|
const visibleRows = useMemo(() => {
|
|
2182
2311
|
const seen = new Set<string>();
|
|
2183
2312
|
// Channel mode replaces the ordinary recency forest with channel sections;
|
|
@@ -2247,9 +2376,14 @@ export function SessionList() {
|
|
|
2247
2376
|
directorySubject,
|
|
2248
2377
|
rail.workspaceId,
|
|
2249
2378
|
flat.map((session) => session.id),
|
|
2250
|
-
|
|
2379
|
+
pinnedNodes.map((node) => node.session.id),
|
|
2251
2380
|
);
|
|
2252
|
-
}, [directorySubject, rail.workspaceId, flat,
|
|
2381
|
+
}, [directorySubject, rail.workspaceId, flat, pinnedNodes]);
|
|
2382
|
+
// ⌘1 to ⌘9 open the pinned chats in the order shown; holding ⌘ shows which.
|
|
2383
|
+
const pinnedJumpNumbers = useMemo(
|
|
2384
|
+
() => new Map(pinnedNodes.slice(0, 9).map((node, index) => [node.session.id, index + 1])),
|
|
2385
|
+
[pinnedNodes],
|
|
2386
|
+
);
|
|
2253
2387
|
|
|
2254
2388
|
useLayoutEffect(() => {
|
|
2255
2389
|
const pending = pendingSessionFocus.current;
|
|
@@ -3475,26 +3609,28 @@ export function SessionList() {
|
|
|
3475
3609
|
<>
|
|
3476
3610
|
{pinnedNodes.length > 0 ? (
|
|
3477
3611
|
<>
|
|
3478
|
-
<
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3612
|
+
<PinnedJumpNumbers.Provider value={pinnedJumpNumbers}>
|
|
3613
|
+
<SessionGroup
|
|
3614
|
+
label="Pinned"
|
|
3615
|
+
nodes={pinnedNodes}
|
|
3616
|
+
localDeliveryAttention={localDeliveryAttention}
|
|
3617
|
+
flat={flat}
|
|
3618
|
+
activeSessionId={activeSessionId}
|
|
3619
|
+
focusIndex={focusIndex}
|
|
3620
|
+
onFocusSession={setFocusedSessionId}
|
|
3621
|
+
expanded={expanded}
|
|
3622
|
+
onToggleExpand={toggleExpand}
|
|
3623
|
+
childPages={childPages}
|
|
3624
|
+
onLoadMoreChildren={loadChildPage}
|
|
3625
|
+
onRename={context.updateSessionTitle}
|
|
3626
|
+
onPin={onPin}
|
|
3627
|
+
channels={channels}
|
|
3628
|
+
onMoveToChannel={onMoveToChannel}
|
|
3629
|
+
onUpdateAttention={onUpdateAttention}
|
|
3630
|
+
onArchive={onArchive}
|
|
3631
|
+
onRequestDelete={setSessionPendingDelete}
|
|
3632
|
+
/>
|
|
3633
|
+
</PinnedJumpNumbers.Provider>
|
|
3498
3634
|
{pinnedTruncated ? (
|
|
3499
3635
|
<p className="px-2 pb-2 text-[11px] text-fg-subtle" role="status">
|
|
3500
3636
|
Showing the 100 most recently pinned sessions. Older pins are omitted.
|
|
@@ -3502,6 +3638,19 @@ export function SessionList() {
|
|
|
3502
3638
|
) : null}
|
|
3503
3639
|
</>
|
|
3504
3640
|
) : null}
|
|
3641
|
+
{hierarchyMode && browseStatus !== "archived" && rootPage.siteGroupsTruncated ? (
|
|
3642
|
+
<p className="px-2 pb-2 text-[11px] text-fg-subtle" role="status">
|
|
3643
|
+
Some older Sites aren't shown. Find them in{" "}
|
|
3644
|
+
<Link
|
|
3645
|
+
to="/workspaces/$workspaceId/artifacts"
|
|
3646
|
+
params={{ workspaceId: rail.workspaceId }}
|
|
3647
|
+
className="underline underline-offset-2 hover:text-fg"
|
|
3648
|
+
>
|
|
3649
|
+
Artifacts
|
|
3650
|
+
</Link>
|
|
3651
|
+
.
|
|
3652
|
+
</p>
|
|
3653
|
+
) : null}
|
|
3505
3654
|
{browseStatus === "archived" ? null : channelMode ? (
|
|
3506
3655
|
renderedChannelSections.map((section) => (
|
|
3507
3656
|
<SessionGroup
|
|
@@ -4209,25 +4358,37 @@ function SessionGroup(props: {
|
|
|
4209
4358
|
);
|
|
4210
4359
|
}
|
|
4211
4360
|
|
|
4212
|
-
/**
|
|
4361
|
+
/**
|
|
4362
|
+
* A Site row. Its conversations stay nested under it whichever session is
|
|
4363
|
+
* open: collapsed it shows only the selected one, expanded it lists them all.
|
|
4364
|
+
*/
|
|
4213
4365
|
function SiteSessionGroupRow(props: Parameters<typeof SessionTreeRow>[0]) {
|
|
4214
4366
|
const { node } = props;
|
|
4215
4367
|
const origin = node.siteGroup!;
|
|
4216
|
-
const key =
|
|
4368
|
+
const key = node.session.id;
|
|
4217
4369
|
const expanded = props.expanded.has(key);
|
|
4218
|
-
const summary = summarizeRailNodes(node
|
|
4370
|
+
const summary = summarizeRailNodes([node], props.localDeliveryAttention);
|
|
4219
4371
|
const selected = selectedDescendantNode(node, props.activeSessionId);
|
|
4220
4372
|
const children = expanded ? node.children : selected ? [selected] : [];
|
|
4373
|
+
const page = props.childPages.get(key);
|
|
4374
|
+
const count = siteRowConversationCount(node);
|
|
4375
|
+
const activeSiteId = useRouterState({
|
|
4376
|
+
select: (state): string | null => railRouteSelection(state.location).siteId,
|
|
4377
|
+
});
|
|
4221
4378
|
return (
|
|
4222
4379
|
<div role="listitem" className="min-w-0">
|
|
4223
4380
|
<SiteSessionGroupHeading
|
|
4224
4381
|
origin={origin}
|
|
4225
4382
|
workspaceId={node.session.workspaceId}
|
|
4383
|
+
active={activeSiteId === origin.siteId && props.activeSessionId === null}
|
|
4226
4384
|
expanded={expanded}
|
|
4227
4385
|
onToggle={() => props.onToggleExpand(key)}
|
|
4228
4386
|
summary={summary}
|
|
4387
|
+
count={count}
|
|
4388
|
+
relativeTime={relativeTimeLabel(t, node.session.updatedAt)}
|
|
4389
|
+
depth={props.depth}
|
|
4229
4390
|
/>
|
|
4230
|
-
{children.length > 0 && (
|
|
4391
|
+
{children.length > 0 || (expanded && page) ? (
|
|
4231
4392
|
<div role="list" aria-label={`Conversations from ${origin.title}`}>
|
|
4232
4393
|
{children.map((child) => (
|
|
4233
4394
|
<SessionTreeRow
|
|
@@ -4235,10 +4396,28 @@ function SiteSessionGroupRow(props: Parameters<typeof SessionTreeRow>[0]) {
|
|
|
4235
4396
|
{...props}
|
|
4236
4397
|
node={child}
|
|
4237
4398
|
depth={props.depth + 1}
|
|
4399
|
+
nestedInSiteId={origin.siteId}
|
|
4238
4400
|
/>
|
|
4239
4401
|
))}
|
|
4402
|
+
{expanded && page?.loading && page.feedbackVisible ? (
|
|
4403
|
+
<TreeLoadRow depth={props.depth + 1} text="Loading conversations…" />
|
|
4404
|
+
) : null}
|
|
4405
|
+
{expanded && page?.failed && page.feedbackVisible ? (
|
|
4406
|
+
<TreeLoadRow
|
|
4407
|
+
depth={props.depth + 1}
|
|
4408
|
+
text="Retry loading conversations"
|
|
4409
|
+
onClick={() => void props.onLoadMoreChildren(key, page.retryCursor ?? undefined)}
|
|
4410
|
+
/>
|
|
4411
|
+
) : null}
|
|
4412
|
+
{expanded && !page?.loading && !page?.failed && page?.nextCursor ? (
|
|
4413
|
+
<TreeLoadRow
|
|
4414
|
+
depth={props.depth + 1}
|
|
4415
|
+
text="Show more"
|
|
4416
|
+
onClick={() => void props.onLoadMoreChildren(key, page.nextCursor!)}
|
|
4417
|
+
/>
|
|
4418
|
+
) : null}
|
|
4240
4419
|
</div>
|
|
4241
|
-
)}
|
|
4420
|
+
) : null}
|
|
4242
4421
|
</div>
|
|
4243
4422
|
);
|
|
4244
4423
|
}
|
|
@@ -4262,6 +4441,8 @@ function SessionTreeRow(props: {
|
|
|
4262
4441
|
onUpdateAttention: UpdateAttentionFn;
|
|
4263
4442
|
onArchive: ArchiveFn;
|
|
4264
4443
|
onRequestDelete: RequestDeleteFn;
|
|
4444
|
+
/** Listed under its Site row: opens in that Site's view, which names the Site. */
|
|
4445
|
+
nestedInSiteId?: string | undefined;
|
|
4265
4446
|
}) {
|
|
4266
4447
|
const { node } = props;
|
|
4267
4448
|
if (node.siteGroup) return <SiteSessionGroupRow {...props} />;
|
|
@@ -4306,6 +4487,7 @@ function SessionTreeRow(props: {
|
|
|
4306
4487
|
onUpdateAttention={props.onUpdateAttention}
|
|
4307
4488
|
onArchive={props.onArchive}
|
|
4308
4489
|
onRequestDelete={props.onRequestDelete}
|
|
4490
|
+
nestedInSiteId={props.nestedInSiteId}
|
|
4309
4491
|
/>
|
|
4310
4492
|
{hasVisibleChildRegion ? (
|
|
4311
4493
|
<div role="list" aria-label={`Spawned sessions from ${title}`}>
|
|
@@ -4411,6 +4593,23 @@ function TreeLoadRow({
|
|
|
4411
4593
|
);
|
|
4412
4594
|
}
|
|
4413
4595
|
|
|
4596
|
+
/** The ⌘1 to ⌘9 number of each top-level pinned row; absent outside the Pinned section. */
|
|
4597
|
+
const PinnedJumpNumbers = createContext<ReadonlyMap<string, number> | null>(null);
|
|
4598
|
+
|
|
4599
|
+
/** "⌘3" while ⌘ is held on a pinned row that ⌘3 opens; otherwise nothing. */
|
|
4600
|
+
function usePinnedJumpKey(sessionId: string, depth: number, mobile: boolean): string | undefined {
|
|
4601
|
+
const jumpNumber = useContext(PinnedJumpNumbers)?.get(sessionId);
|
|
4602
|
+
// Only where ⌘1 to ⌘9 work: browsers keep those keys for their own tabs.
|
|
4603
|
+
const pinnedKeys = useActionShortcut("go.pinnedChat");
|
|
4604
|
+
const platform = currentPlatform();
|
|
4605
|
+
const held = useHeldModifier(
|
|
4606
|
+
platform,
|
|
4607
|
+
Boolean(pinnedKeys && jumpNumber && depth === 0 && !mobile),
|
|
4608
|
+
);
|
|
4609
|
+
if (!held || !pinnedKeys || !jumpNumber) return undefined;
|
|
4610
|
+
return chordLabel({ ...pinnedKeys.chord, code: `Digit${jumpNumber}` }, platform);
|
|
4611
|
+
}
|
|
4612
|
+
|
|
4414
4613
|
function SessionRow(props: {
|
|
4415
4614
|
session: Session;
|
|
4416
4615
|
index: number;
|
|
@@ -4435,6 +4634,7 @@ function SessionRow(props: {
|
|
|
4435
4634
|
onUpdateAttention: UpdateAttentionFn;
|
|
4436
4635
|
onArchive: ArchiveFn;
|
|
4437
4636
|
onRequestDelete: RequestDeleteFn;
|
|
4637
|
+
nestedInSiteId?: string | undefined;
|
|
4438
4638
|
}) {
|
|
4439
4639
|
const rail = useRail();
|
|
4440
4640
|
const context = useAppContext();
|
|
@@ -4447,6 +4647,7 @@ function SessionRow(props: {
|
|
|
4447
4647
|
const hasChildren = props.hasChildren;
|
|
4448
4648
|
const focusEvents = useUiEventTarget("window");
|
|
4449
4649
|
const creator = railRowCreator(props.session);
|
|
4650
|
+
const jumpKey = usePinnedJumpKey(props.session.id, props.depth, rail.isMobile);
|
|
4450
4651
|
// A key press puts the person's attention elsewhere (⌘K right after opening a
|
|
4451
4652
|
// chat, with the pointer still on its row), so the hover card gives way, as
|
|
4452
4653
|
// tooltips do.
|
|
@@ -4581,7 +4782,7 @@ function SessionRow(props: {
|
|
|
4581
4782
|
<ContextMenuTrigger asChild>
|
|
4582
4783
|
<div className={rowClassName}>
|
|
4583
4784
|
{lead}
|
|
4584
|
-
<SiteOriginLink session={props.session} compact />
|
|
4785
|
+
{props.nestedInSiteId ? null : <SiteOriginLink session={props.session} compact />}
|
|
4585
4786
|
<HoverCard
|
|
4586
4787
|
openDelay={100}
|
|
4587
4788
|
closeDelay={80}
|
|
@@ -4590,7 +4791,16 @@ function SessionRow(props: {
|
|
|
4590
4791
|
>
|
|
4591
4792
|
<HoverCardTrigger asChild>
|
|
4592
4793
|
<Link
|
|
4593
|
-
|
|
4794
|
+
{...(props.nestedInSiteId
|
|
4795
|
+
? {
|
|
4796
|
+
to: "/workspaces/$workspaceId/sites/$siteId",
|
|
4797
|
+
params: { workspaceId: rail.workspaceId, siteId: props.nestedInSiteId },
|
|
4798
|
+
search: { conversation: props.session.id },
|
|
4799
|
+
}
|
|
4800
|
+
: {
|
|
4801
|
+
to: "/workspaces/$workspaceId/sessions/$sessionId",
|
|
4802
|
+
params: { workspaceId: rail.workspaceId, sessionId: props.session.id },
|
|
4803
|
+
})}
|
|
4594
4804
|
draggable={props.session.parentSessionId === null && !props.session.archived}
|
|
4595
4805
|
onDragStart={(event) => {
|
|
4596
4806
|
if (props.session.parentSessionId !== null || props.session.archived) {
|
|
@@ -4601,7 +4811,6 @@ function SessionRow(props: {
|
|
|
4601
4811
|
event.dataTransfer.effectAllowed = "move";
|
|
4602
4812
|
event.dataTransfer.setData(SESSION_DRAG_TYPE, props.session.id);
|
|
4603
4813
|
}}
|
|
4604
|
-
params={{ workspaceId: rail.workspaceId, sessionId: props.session.id }}
|
|
4605
4814
|
data-session-index={props.index}
|
|
4606
4815
|
data-session-focus
|
|
4607
4816
|
data-session-row={props.session.id}
|
|
@@ -4694,6 +4903,7 @@ function SessionRow(props: {
|
|
|
4694
4903
|
summary={props.aggregateStatus}
|
|
4695
4904
|
scheduled={sessionHasUpcomingSchedule(props.session)}
|
|
4696
4905
|
relativeTime={rail.isMobile ? undefined : relativeTime}
|
|
4906
|
+
jumpKey={jumpKey}
|
|
4697
4907
|
creator={creator}
|
|
4698
4908
|
/>
|
|
4699
4909
|
</Link>
|
|
@@ -110,12 +110,15 @@ export function RailTrailingMetadata({
|
|
|
110
110
|
summary,
|
|
111
111
|
scheduled = false,
|
|
112
112
|
relativeTime,
|
|
113
|
+
jumpKey,
|
|
113
114
|
creator,
|
|
114
115
|
quickActionSlots = 0,
|
|
115
116
|
}: {
|
|
116
117
|
summary: RailAggregateStatus;
|
|
117
118
|
scheduled?: boolean | undefined;
|
|
118
119
|
relativeTime?: string | undefined;
|
|
120
|
+
/** The key that opens this row ("⌘3"), shown in place of the time while ⌘ is held. */
|
|
121
|
+
jumpKey?: string | undefined;
|
|
119
122
|
/** Rightmost items replaced in place by the row's desktop quick actions. */
|
|
120
123
|
quickActionSlots?: number | undefined;
|
|
121
124
|
/**
|
|
@@ -135,7 +138,14 @@ export function RailTrailingMetadata({
|
|
|
135
138
|
summary.kind === "needs_attention" && summary.attentionSince
|
|
136
139
|
? formatWaitingSince(summary.attentionSince)
|
|
137
140
|
: "";
|
|
138
|
-
if (
|
|
141
|
+
if (
|
|
142
|
+
!scheduled &&
|
|
143
|
+
!hasStatusMarker &&
|
|
144
|
+
!hasRelativeTime &&
|
|
145
|
+
!jumpKey &&
|
|
146
|
+
!hasMonogram &&
|
|
147
|
+
!quickActionSlots
|
|
148
|
+
)
|
|
139
149
|
return null;
|
|
140
150
|
const items = Children.toArray([
|
|
141
151
|
scheduled ? (
|
|
@@ -163,7 +173,15 @@ export function RailTrailingMetadata({
|
|
|
163
173
|
<RailAggregateDot summary={summary} />
|
|
164
174
|
</span>
|
|
165
175
|
) : null,
|
|
166
|
-
|
|
176
|
+
jumpKey ? (
|
|
177
|
+
<kbd
|
|
178
|
+
key="time"
|
|
179
|
+
data-session-row-jump-key
|
|
180
|
+
className="inline-flex h-4.5 min-w-9 shrink-0 items-center justify-center rounded-[4px] border border-border bg-surface-2 px-1 font-sans text-2xs leading-none font-medium whitespace-nowrap text-fg-muted"
|
|
181
|
+
>
|
|
182
|
+
{jumpKey}
|
|
183
|
+
</kbd>
|
|
184
|
+
) : hasRelativeTime ? (
|
|
167
185
|
<span
|
|
168
186
|
key="time"
|
|
169
187
|
className="min-w-9 shrink-0 whitespace-nowrap text-right text-2xs tabular-nums text-fg"
|
|
@@ -213,6 +231,7 @@ export function SessionRowContent({
|
|
|
213
231
|
summary,
|
|
214
232
|
scheduled = false,
|
|
215
233
|
relativeTime,
|
|
234
|
+
jumpKey,
|
|
216
235
|
creator,
|
|
217
236
|
quickActionSlots = 0,
|
|
218
237
|
}: {
|
|
@@ -224,6 +243,8 @@ export function SessionRowContent({
|
|
|
224
243
|
summary: RailAggregateStatus;
|
|
225
244
|
scheduled?: boolean | undefined;
|
|
226
245
|
relativeTime?: string | undefined;
|
|
246
|
+
/** See RailTrailingMetadata. */
|
|
247
|
+
jumpKey?: string | undefined;
|
|
227
248
|
quickActionSlots?: number | undefined;
|
|
228
249
|
/** Session creator for a top-level row, else null. See RailTrailingMetadata. */
|
|
229
250
|
creator?: CreatorRef | null | undefined;
|
|
@@ -251,6 +272,7 @@ export function SessionRowContent({
|
|
|
251
272
|
summary={summary}
|
|
252
273
|
scheduled={scheduled}
|
|
253
274
|
relativeTime={relativeTime}
|
|
275
|
+
jumpKey={jumpKey}
|
|
254
276
|
creator={creator}
|
|
255
277
|
/>
|
|
256
278
|
</>
|
|
@@ -415,6 +415,7 @@ function SessionShellFrame({ children }: { children: ReactNode }) {
|
|
|
415
415
|
function CanvasTopStrip({ hamburgerRef }: { hamburgerRef: RefObject<HTMLButtonElement | null> }) {
|
|
416
416
|
const rail = useRail();
|
|
417
417
|
const chatList = useSessionUiFeature("chatList");
|
|
418
|
+
const brand = useSessionUiFeature("brand");
|
|
418
419
|
const context = useAppContext();
|
|
419
420
|
const pathname = useRouterState({
|
|
420
421
|
select: (state) => state.location.pathname,
|
|
@@ -490,18 +491,22 @@ function CanvasTopStrip({ hamburgerRef }: { hamburgerRef: RefObject<HTMLButtonEl
|
|
|
490
491
|
);
|
|
491
492
|
}
|
|
492
493
|
|
|
493
|
-
// Mobile, off a session route: the slim brand strip.
|
|
494
|
+
// Mobile, off a session route: the slim brand strip. A host without
|
|
495
|
+
// Opengeni's brand keeps only the menu button, or no strip at all.
|
|
496
|
+
if (!brand && !hamburger) return null;
|
|
494
497
|
return (
|
|
495
498
|
<header className="flex h-12 shrink-0 items-center gap-3 border-b border-border bg-canvas/75 px-3 backdrop-blur sm:px-4">
|
|
496
499
|
{hamburger}
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
500
|
+
{brand ? (
|
|
501
|
+
<Link
|
|
502
|
+
to="/workspaces/$workspaceId/sessions"
|
|
503
|
+
params={{ workspaceId: rail.workspaceId }}
|
|
504
|
+
className="flex items-center gap-2 text-fg"
|
|
505
|
+
>
|
|
506
|
+
<BrandMark className="w-5" />
|
|
507
|
+
<Wordmark className="text-[17px]" />
|
|
508
|
+
</Link>
|
|
509
|
+
) : null}
|
|
505
510
|
</header>
|
|
506
511
|
);
|
|
507
512
|
}
|