Skip to content

Commit 2968a58

Browse files
neriousyopencode-agent[bot]
authored andcommitted
fix(app):workspace reset (anomalyco#13170)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
1 parent 4be0d9b commit 2968a58

4 files changed

Lines changed: 26 additions & 9 deletions

File tree

packages/app/src/context/layout.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
44
import { useGlobalSync } from "./global-sync"
55
import { useGlobalSDK } from "./global-sdk"
66
import { useServer } from "./server"
7+
import { usePlatform } from "./platform"
78
import { Project } from "@opencode-ai/sdk/v2"
89
import { Persist, persisted, removePersisted } from "@/utils/persist"
910
import { same } from "@/utils/same"
@@ -90,6 +91,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
9091
const globalSdk = useGlobalSDK()
9192
const globalSync = useGlobalSync()
9293
const server = useServer()
94+
const platform = usePlatform()
9395

9496
const isRecord = (value: unknown): value is Record<string, unknown> =>
9597
typeof value === "object" && value !== null && !Array.isArray(value)
@@ -200,10 +202,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
200202

201203
for (const entry of SESSION_STATE_KEYS) {
202204
const target = session ? Persist.session(dir, session, entry.key) : Persist.workspace(dir, entry.key)
203-
void removePersisted(target)
205+
void removePersisted(target, platform)
204206

205207
const legacyKey = `${dir}/${entry.legacy}${session ? "/" + session : ""}.${entry.version}`
206-
void removePersisted({ key: legacyKey })
208+
void removePersisted({ key: legacyKey }, platform)
207209
}
208210
}
209211
}

packages/app/src/context/terminal.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
33
import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js"
44
import { useParams } from "@solidjs/router"
55
import { useSDK } from "./sdk"
6+
import type { Platform } from "./platform"
67
import { Persist, persisted, removePersisted } from "@/utils/persist"
78

89
export type LocalPTY = {
@@ -37,14 +38,18 @@ type TerminalCacheEntry = {
3738

3839
const caches = new Set<Map<string, TerminalCacheEntry>>()
3940

40-
export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[]) {
41+
export function clearWorkspaceTerminals(
42+
dir: string,
43+
sessionIDs?: string[],
44+
platform?: Platform,
45+
) {
4146
const key = getWorkspaceTerminalCacheKey(dir)
4247
for (const cache of caches) {
4348
const entry = cache.get(key)
4449
entry?.value.clear()
4550
}
4651

47-
removePersisted(Persist.workspace(dir, "terminal"))
52+
removePersisted(Persist.workspace(dir, "terminal"), platform)
4853

4954
const legacy = new Set(getLegacyTerminalStorageKeys(dir))
5055
for (const id of sessionIDs ?? []) {
@@ -53,7 +58,7 @@ export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[]) {
5358
}
5459
}
5560
for (const key of legacy) {
56-
removePersisted({ key })
61+
removePersisted({ key }, platform)
5762
}
5863
}
5964

packages/app/src/pages/layout.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,6 +1203,16 @@ export default function Layout(props: ParentProps) {
12031203

12041204
if (!result) return
12051205

1206+
globalSync.set(
1207+
"project",
1208+
produce((draft) => {
1209+
const project = draft.find((item) => item.worktree === root)
1210+
if (!project) return
1211+
project.sandboxes = (project.sandboxes ?? []).filter((sandbox) => sandbox !== directory)
1212+
}),
1213+
)
1214+
setStore("workspaceOrder", root, (order) => (order ?? []).filter((workspace) => workspace !== directory))
1215+
12061216
layout.projects.close(directory)
12071217
layout.projects.open(root)
12081218

@@ -1230,6 +1240,7 @@ export default function Layout(props: ParentProps) {
12301240
clearWorkspaceTerminals(
12311241
directory,
12321242
sessions.map((s) => s.id),
1243+
platform,
12331244
)
12341245
await globalSDK.client.instance.dispose({ directory }).catch(() => undefined)
12351246

packages/app/src/utils/persist.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { usePlatform } from "@/context/platform"
1+
import { Platform, usePlatform } from "@/context/platform"
22
import { makePersisted, type AsyncStorage, type SyncStorage } from "@solid-primitives/storage"
33
import { checksum } from "@opencode-ai/util/encode"
44
import { createResource, type Accessor } from "solid-js"
@@ -318,9 +318,8 @@ export const Persist = {
318318
},
319319
}
320320

321-
export function removePersisted(target: { storage?: string; key: string }) {
322-
const platform = usePlatform()
323-
const isDesktop = platform.platform === "desktop" && !!platform.storage
321+
export function removePersisted(target: { storage?: string; key: string }, platform?: Platform) {
322+
const isDesktop = platform?.platform === "desktop" && !!platform.storage
324323

325324
if (isDesktop) {
326325
return platform.storage?.(target.storage)?.removeItem(target.key)

0 commit comments

Comments
 (0)