summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src
diff options
context:
space:
mode:
authorFilip <[email protected]>2026-02-11 17:59:09 +0100
committerGitHub <[email protected]>2026-02-11 10:59:09 -0600
commit81b5a6a08b6b2f591096a0f9a7fed04871002a33 (patch)
treed3af9d288776adab1628ec898ffad5f0f8cea2de /packages/app/src
parent94cb6390aad2066281dfecb64b2edcccb51fa362 (diff)
downloadopencode-81b5a6a08b6b2f591096a0f9a7fed04871002a33.tar.gz
opencode-81b5a6a08b6b2f591096a0f9a7fed04871002a33.zip
fix(app):workspace reset (#13170)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Diffstat (limited to 'packages/app/src')
-rw-r--r--packages/app/src/context/layout.tsx6
-rw-r--r--packages/app/src/context/terminal.tsx11
-rw-r--r--packages/app/src/pages/layout.tsx11
-rw-r--r--packages/app/src/utils/persist.ts7
4 files changed, 26 insertions, 9 deletions
diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx
index 8d9c865f8..4019b2f29 100644
--- a/packages/app/src/context/layout.tsx
+++ b/packages/app/src/context/layout.tsx
@@ -4,6 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { useGlobalSync } from "./global-sync"
import { useGlobalSDK } from "./global-sdk"
import { useServer } from "./server"
+import { usePlatform } from "./platform"
import { Project } from "@opencode-ai/sdk/v2"
import { Persist, persisted, removePersisted } from "@/utils/persist"
import { same } from "@/utils/same"
@@ -90,6 +91,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
const globalSdk = useGlobalSDK()
const globalSync = useGlobalSync()
const server = useServer()
+ const platform = usePlatform()
const isRecord = (value: unknown): value is Record<string, unknown> =>
typeof value === "object" && value !== null && !Array.isArray(value)
@@ -200,10 +202,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
for (const entry of SESSION_STATE_KEYS) {
const target = session ? Persist.session(dir, session, entry.key) : Persist.workspace(dir, entry.key)
- void removePersisted(target)
+ void removePersisted(target, platform)
const legacyKey = `${dir}/${entry.legacy}${session ? "/" + session : ""}.${entry.version}`
- void removePersisted({ key: legacyKey })
+ void removePersisted({ key: legacyKey }, platform)
}
}
}
diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx
index d00c792e0..144bef284 100644
--- a/packages/app/src/context/terminal.tsx
+++ b/packages/app/src/context/terminal.tsx
@@ -3,6 +3,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js"
import { useParams } from "@solidjs/router"
import { useSDK } from "./sdk"
+import type { Platform } from "./platform"
import { Persist, persisted, removePersisted } from "@/utils/persist"
export type LocalPTY = {
@@ -37,14 +38,18 @@ type TerminalCacheEntry = {
const caches = new Set<Map<string, TerminalCacheEntry>>()
-export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[]) {
+export function clearWorkspaceTerminals(
+ dir: string,
+ sessionIDs?: string[],
+ platform?: Platform,
+) {
const key = getWorkspaceTerminalCacheKey(dir)
for (const cache of caches) {
const entry = cache.get(key)
entry?.value.clear()
}
- removePersisted(Persist.workspace(dir, "terminal"))
+ removePersisted(Persist.workspace(dir, "terminal"), platform)
const legacy = new Set(getLegacyTerminalStorageKeys(dir))
for (const id of sessionIDs ?? []) {
@@ -53,7 +58,7 @@ export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[]) {
}
}
for (const key of legacy) {
- removePersisted({ key })
+ removePersisted({ key }, platform)
}
}
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index 13d15bdce..1513752f0 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -1203,6 +1203,16 @@ export default function Layout(props: ParentProps) {
if (!result) return
+ globalSync.set(
+ "project",
+ produce((draft) => {
+ const project = draft.find((item) => item.worktree === root)
+ if (!project) return
+ project.sandboxes = (project.sandboxes ?? []).filter((sandbox) => sandbox !== directory)
+ }),
+ )
+ setStore("workspaceOrder", root, (order) => (order ?? []).filter((workspace) => workspace !== directory))
+
layout.projects.close(directory)
layout.projects.open(root)
@@ -1230,6 +1240,7 @@ export default function Layout(props: ParentProps) {
clearWorkspaceTerminals(
directory,
sessions.map((s) => s.id),
+ platform,
)
await globalSDK.client.instance.dispose({ directory }).catch(() => undefined)
diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts
index 57e01d86a..91c504742 100644
--- a/packages/app/src/utils/persist.ts
+++ b/packages/app/src/utils/persist.ts
@@ -1,4 +1,4 @@
-import { usePlatform } from "@/context/platform"
+import { Platform, usePlatform } from "@/context/platform"
import { makePersisted, type AsyncStorage, type SyncStorage } from "@solid-primitives/storage"
import { checksum } from "@opencode-ai/util/encode"
import { createResource, type Accessor } from "solid-js"
@@ -318,9 +318,8 @@ export const Persist = {
},
}
-export function removePersisted(target: { storage?: string; key: string }) {
- const platform = usePlatform()
- const isDesktop = platform.platform === "desktop" && !!platform.storage
+export function removePersisted(target: { storage?: string; key: string }, platform?: Platform) {
+ const isDesktop = platform?.platform === "desktop" && !!platform.storage
if (isDesktop) {
return platform.storage?.(target.storage)?.removeItem(target.key)