From 2a6b8713dacdf3e6b7487d35c7d4b7d21e6bc778 Mon Sep 17 00:00:00 2001 From: Aegis-commits Date: Fri, 20 Feb 2026 13:44:07 +0000 Subject: [PATCH] fix(session): scope session list to current directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pass the existing `directory` parameter to all session list call sites that were missing it, so sessions are filtered to the current working directory instead of showing all sessions globally. Fixes four entry points: - CLI `session list` command - TUI bootstrap session fetch - TUI /sessions dialog search - TUI SSE session.updated event handler (new session inserts) Uses the existing Session.list() directory filter and GET /session?directory= API parameter — no server or API contract changes required. Fixes #8836 --- packages/opencode/src/cli/cmd/session.ts | 3 ++- .../src/cli/cmd/tui/component/dialog-session-list.tsx | 2 +- packages/opencode/src/cli/cmd/tui/context/sdk.tsx | 2 +- packages/opencode/src/cli/cmd/tui/context/sync.tsx | 4 +++- packages/opencode/src/cli/cmd/tui/thread.ts | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/cli/cmd/session.ts b/packages/opencode/src/cli/cmd/session.ts index 4aa702359d17..a0366f9dac86 100644 --- a/packages/opencode/src/cli/cmd/session.ts +++ b/packages/opencode/src/cli/cmd/session.ts @@ -1,6 +1,7 @@ import type { Argv } from "yargs" import { cmd } from "./cmd" import { Session } from "../../session" +import { Instance } from "../../project/instance" import { bootstrap } from "../bootstrap" import { UI } from "../ui" import { Locale } from "../../util/locale" @@ -86,7 +87,7 @@ export const SessionListCommand = cmd({ }, handler: async (args) => { await bootstrap(process.cwd(), async () => { - const sessions = [...Session.list({ roots: true, limit: args.maxCount })] + const sessions = [...Session.list({ roots: true, limit: args.maxCount, directory: Instance.directory })] if (sessions.length === 0) { return diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx index 775969bfcb38..d6ab53393a83 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx @@ -26,7 +26,7 @@ export function DialogSessionList() { const [searchResults] = createResource(search, async (query) => { if (!query) return undefined - const result = await sdk.client.session.list({ search: query, limit: 30 }) + const result = await sdk.client.session.list({ search: query, limit: 30, directory: sdk.directory || sync.data.path.directory || undefined }) return result.data ?? [] }) diff --git a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx index 7fa7e05c3d25..198aba320987 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx @@ -96,6 +96,6 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ if (timer) clearTimeout(timer) }) - return { client: sdk, event: emitter, url: props.url } + return { client: sdk, event: emitter, url: props.url, directory: props.directory } }, }) diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index 269ed7ae0bd1..2a6b1593469c 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -211,6 +211,8 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ setStore("session", result.index, reconcile(event.properties.info)) break } + // Only insert new sessions if they belong to the current directory + if (sdk.directory && event.properties.info.directory !== sdk.directory) break setStore( "session", produce((draft) => { @@ -350,7 +352,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ console.log("bootstrapping") const start = Date.now() - 30 * 24 * 60 * 60 * 1000 const sessionListPromise = sdk.client.session - .list({ start: start }) + .list({ start: start, directory: sdk.directory }) .then((x) => (x.data ?? []).toSorted((a, b) => a.id.localeCompare(b.id))) // blocking - include session.list when continuing a session diff --git a/packages/opencode/src/cli/cmd/tui/thread.ts b/packages/opencode/src/cli/cmd/tui/thread.ts index 50f63c3dfbd1..421986d473eb 100644 --- a/packages/opencode/src/cli/cmd/tui/thread.ts +++ b/packages/opencode/src/cli/cmd/tui/thread.ts @@ -163,6 +163,7 @@ export const TuiThreadCommand = cmd({ const tuiPromise = tui({ url, + directory: cwd, fetch: customFetch, events, args: {