From 04d6a2b2bfdadc8a81b53553c85716ea6f43d8f4 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Thu, 8 Jan 2026 17:59:36 +0200 Subject: [PATCH] feat: add VS Code runtime detection to session sidebar and agent manager components --- packages/ui/src/components/session/SessionSidebar.tsx | 8 ++++++-- .../views/agent-manager/AgentManagerEmptyState.tsx | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/components/session/SessionSidebar.tsx b/packages/ui/src/components/session/SessionSidebar.tsx index 586bce0c..8628c006 100644 --- a/packages/ui/src/components/session/SessionSidebar.tsx +++ b/packages/ui/src/components/session/SessionSidebar.tsx @@ -57,6 +57,7 @@ import { opencodeClient } from '@/lib/opencode/client'; import { checkIsGitRepository } from '@/lib/gitApi'; import { getSafeStorage } from '@/stores/utils/safeStorage'; import { createWorktreeSession } from '@/lib/worktreeSessionCreator'; +import { isVSCodeRuntime } from '@/lib/desktop'; const PROJECT_COLLAPSE_STORAGE_KEY = 'oc.sessions.projectCollapse'; const SESSION_EXPANDED_STORAGE_KEY = 'oc.sessions.expandedParents'; @@ -377,6 +378,8 @@ export const SessionSidebar: React.FC = ({ return typeof window.opencodeDesktop !== 'undefined'; }); + const isVSCode = React.useMemo(() => isVSCodeRuntime(), []); + React.useEffect(() => { try { const storedParents = safeStorage.getItem(SESSION_EXPANDED_STORAGE_KEY); @@ -913,7 +916,8 @@ export const SessionSidebar: React.FC = ({ const getSessionsForProject = React.useCallback( (project: { normalizedPath: string }) => { - const worktreesForProject = availableWorktreesByProject.get(project.normalizedPath) ?? []; + // In VS Code, only show sessions from the main project directory (skip worktrees) + const worktreesForProject = isVSCode ? [] : (availableWorktreesByProject.get(project.normalizedPath) ?? []); const directories = [ project.normalizedPath, ...worktreesForProject @@ -937,7 +941,7 @@ export const SessionSidebar: React.FC = ({ return collected; }, - [availableWorktreesByProject, getSessionsByDirectory, sessionsByDirectory], + [availableWorktreesByProject, getSessionsByDirectory, sessionsByDirectory, isVSCode], ); const projectSections = React.useMemo(() => { diff --git a/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx b/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx index 5c6bc10d..da9cd1a0 100644 --- a/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx +++ b/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx @@ -108,7 +108,7 @@ export const AgentManagerEmptyState: React.FC = ({ if (markerIndex > 0) return normalized.slice(0, markerIndex); if (normalized.endsWith('/.openchamber')) return normalized.slice(0, normalized.length - '/.openchamber'.length); return normalized; - }, [activeProjectId, projects, currentDirectory, vscodeWorkspaceFolder]); + }, [activeProjectId, projects, currentDirectory, vscodeWorkspaceFolder, isVSCodeRuntime]); // Load setup commands from config React.useEffect(() => {