From abaabdcb738652e83526af08a6d805f1d5fd5afc Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Sun, 31 May 2026 18:30:29 +0000 Subject: [PATCH] fix(tui): remount session view on session switch (#30129) Co-authored-by: opencode-agent[bot] --- packages/opencode/src/cli/cmd/tui/app.tsx | 4 +++- packages/opencode/src/worktree/index.ts | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 68803d0d11..95321f71b2 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -1082,7 +1082,9 @@ function App(props: { onSnapshot?: () => Promise }) { - + + {(_) => } + {plugin()} diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index 6565555737..7a866c24c9 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -384,10 +384,19 @@ export const layer: Layer.Layer< function cleanDirectory(target: string) { return Effect.tryPromise({ - try: () => - import("fs/promises").then((fsp) => - fsp.rm(target, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }), - ), + try: async () => { + const fsp = await import("fs/promises") + const attempts = process.platform === "win32" ? 50 : 5 + for (const attempt of Array.from({ length: attempts }, (_, i) => i)) { + try { + await fsp.rm(target, { recursive: true, force: true }) + return + } catch (error) { + if (attempt === attempts - 1) throw error + await new Promise((resolve) => setTimeout(resolve, 100)) + } + } + }, catch: (error) => new RemoveFailedError({ message: errorMessage(error) || "Failed to remove git worktree directory" }), })