From 60f380479a83cc8953a14b958c2d7a8c62c2b9e7 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Fri, 15 May 2026 20:22:01 +0300 Subject: [PATCH] feat: add session switcher to VS Code layout Open recent sessions from the VS Code header Add compact session switcher mode Limit session prefetch to the active directory --- .../ui/src/components/layout/VSCodeLayout.tsx | 23 ++- .../session/SessionSwitcherDropdown.tsx | 165 ++++++++++++++---- .../session/sidebar/hooks/useSwitcherItems.ts | 14 +- 3 files changed, 164 insertions(+), 38 deletions(-) diff --git a/packages/ui/src/components/layout/VSCodeLayout.tsx b/packages/ui/src/components/layout/VSCodeLayout.tsx index e74bb693..4467a453 100644 --- a/packages/ui/src/components/layout/VSCodeLayout.tsx +++ b/packages/ui/src/components/layout/VSCodeLayout.tsx @@ -9,6 +9,8 @@ import { useSessions, useDirectorySync, useSessionMessages, useSessionMessagesRe import { useConfigStore } from '@/stores/useConfigStore'; import { ContextUsageDisplay } from '@/components/ui/ContextUsageDisplay'; import { McpDropdown } from '@/components/mcp/McpDropdown'; +import { SessionSwitcherDropdown } from '@/components/session/SessionSwitcherDropdown'; +import { useProjectsStore } from '@/stores/useProjectsStore'; import { cn } from '@/lib/utils'; import { DropdownMenu, @@ -422,6 +424,7 @@ export const VSCodeLayout: React.FC = () => { showMcp showContextUsage showRateLimits + enableSessionSwitcher />
@@ -474,6 +477,7 @@ export const VSCodeLayout: React.FC = () => { showMcp showContextUsage showRateLimits + enableSessionSwitcher />
@@ -511,6 +515,7 @@ export const VSCodeLayout: React.FC = () => { showMcp showContextUsage showRateLimits + enableSessionSwitcher />
@@ -535,13 +540,15 @@ interface VSCodeHeaderProps { showMcp?: boolean; showContextUsage?: boolean; showRateLimits?: boolean; + enableSessionSwitcher?: boolean; } -const VSCodeHeader: React.FC = ({ title, showBack, onBack, onNewSession, onSettings, onAgentManager, showMcp, showContextUsage, showRateLimits }) => { +const VSCodeHeader: React.FC = ({ title, showBack, onBack, onNewSession, onSettings, onAgentManager, showMcp, showContextUsage, showRateLimits, enableSessionSwitcher }) => { const { t } = useI18n(); const getCurrentModel = useConfigStore((state) => state.getCurrentModel); const providers = useConfigStore((state) => state.providers); const currentSessionId = useSessionUIStore((state) => state.currentSessionId); + const activeProjectId = useProjectsStore((state) => state.activeProjectId); const currentSessionMessages = useSessionMessages(currentSessionId ?? ''); const currentSessionMessagesResolved = useSessionMessagesResolved(currentSessionId ?? ''); const quotaResults = useQuotaStore((state) => state.results); @@ -697,7 +704,19 @@ const VSCodeHeader: React.FC = ({ title, showBack, onBack, on )} -

{title}

+ {enableSessionSwitcher ? ( + + + + ) : ( +

{title}

+ )} {onNewSession && (