From 7f8e04d22f9a8151172a80b626e0ccde099a782f Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Wed, 24 Jun 2026 00:43:19 +0300 Subject: [PATCH] fix(session): prefer current directory for implicit drafts --- packages/ui/src/stores/useSnippetsStore.ts | 7 +++++-- packages/ui/src/sync/session-ui-store.test.js | 6 +++--- packages/ui/src/sync/session-ui-store.ts | 3 --- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/ui/src/stores/useSnippetsStore.ts b/packages/ui/src/stores/useSnippetsStore.ts index ca71cd9f..25e9df9f 100644 --- a/packages/ui/src/stores/useSnippetsStore.ts +++ b/packages/ui/src/stores/useSnippetsStore.ts @@ -4,6 +4,7 @@ import type { Snippet } from '@/types/snippet'; import { opencodeClient } from '@/lib/opencode/client'; import { runtimeFetch } from '@/lib/runtime-fetch'; import { useProjectsStore } from '@/stores/useProjectsStore'; +import { useDirectoryStore } from '@/stores/useDirectoryStore'; export type SnippetScope = 'global' | 'project'; @@ -37,10 +38,12 @@ let loadInFlight: Promise | null = null; const getRequestDirectory = (): string | null => { try { - const activeProject = useProjectsStore.getState().getActiveProject?.(); - if (activeProject?.path?.trim()) return activeProject.path.trim(); + const currentDirectory = useDirectoryStore.getState().currentDirectory; + if (currentDirectory?.trim()) return currentDirectory.trim(); const clientDir = opencodeClient.getDirectory(); if (clientDir?.trim()) return clientDir.trim(); + const activeProject = useProjectsStore.getState().getActiveProject?.(); + if (activeProject?.path?.trim()) return activeProject.path.trim(); } catch (error) { console.warn('[SnippetsStore] Error resolving config directory:', error); } diff --git a/packages/ui/src/sync/session-ui-store.test.js b/packages/ui/src/sync/session-ui-store.test.js index b97afbfe..ff144d10 100644 --- a/packages/ui/src/sync/session-ui-store.test.js +++ b/packages/ui/src/sync/session-ui-store.test.js @@ -246,13 +246,13 @@ describe('openNewSessionDraft project binding', () => { useDirectoryStore.getState().setDirectory(projectB.path, { showOverlay: false }); }); - test('binds draft to active project when current directory differs', () => { + test('keeps implicit draft on current directory when active project differs', () => { useSessionUIStore.getState().openNewSessionDraft(); const draft = useSessionUIStore.getState().newSessionDraft; expect(draft.open).toBe(true); - expect(draft.selectedProjectId).toBe(projectA.id); - expect(draft.directoryOverride).toBe(projectA.path); + expect(draft.selectedProjectId).toBe(projectB.id); + expect(draft.directoryOverride).toBe(projectB.path); }); test('respects explicit directoryOverride over active project', () => { diff --git a/packages/ui/src/sync/session-ui-store.ts b/packages/ui/src/sync/session-ui-store.ts index 6ae058d9..e2f3a248 100644 --- a/packages/ui/src/sync/session-ui-store.ts +++ b/packages/ui/src/sync/session-ui-store.ts @@ -626,7 +626,6 @@ export const useSessionUIStore = create()((set, get) => ({ if (explicitProject || explicitDirectory !== null) { return explicitProject ?? inferredProjectFromDir ?? fallbackProject } - if (activeProject) return activeProject if (currentDirectory) return currentDirProject ?? fallbackProject return persistedProjectByDir ?? persistedProjectById ?? fallbackProject })() @@ -634,8 +633,6 @@ export const useSessionUIStore = create()((set, get) => ({ const directory = (() => { if (explicitDirectory !== null) return explicitDirectory if (explicitProject) return normalizePath(explicitProject.path ?? null) - const selectedProjectPath = normalizePath(selectedProject?.path ?? null) - if (selectedProjectPath && selectedProjectPath !== currentDirectory) return selectedProjectPath if (currentDirectory) return currentDirectory if (persistedTarget?.directory) return persistedTarget.directory return normalizePath(selectedProject?.path ?? null)