From 742cf10deeffb31292cdbf8a5ca7afb07698d9dc Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:38:25 -0600 Subject: [PATCH] fix(desktop): removed projects --- packages/desktop/src/context/layout.tsx | 13 ++++++++----- packages/desktop/src/context/local.tsx | 3 ++- packages/desktop/src/pages/layout.tsx | 2 +- packages/opencode/src/file/index.ts | 9 +++++---- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx index 01e0bdf52..b30d3f350 100644 --- a/packages/desktop/src/context/layout.tsx +++ b/packages/desktop/src/context/layout.tsx @@ -61,21 +61,22 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( function enrich(project: { worktree: string; expanded: boolean }) { const metadata = globalSync.data.project.find((x) => x.worktree === project.worktree) - if (!metadata) return [] return [ { ...project, - ...metadata, + ...(metadata ?? {}), }, ] } - function colorize(project: Project & { expanded: boolean }) { + function colorize(project: Partial & { worktree: string; expanded: boolean }) { if (project.icon?.color) return project const color = pickAvailableColor() usedColors.add(color) project.icon = { ...project.icon, color } - globalSdk.client.project.update({ projectID: project.id, icon: { color } }) + if (project.id) { + globalSdk.client.project.update({ projectID: project.id, icon: { color } }) + } return project } @@ -95,7 +96,9 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( projects: { list, open(directory: string) { - if (store.projects.find((x) => x.worktree === directory)) return + if (store.projects.find((x) => x.worktree === directory)) { + return + } globalSync.project.loadSessions(directory) setStore("projects", (x) => [{ worktree: directory, expanded: true }, ...x]) }, diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx index 2ea4de524..f56973835 100644 --- a/packages/desktop/src/context/local.tsx +++ b/packages/desktop/src/context/local.tsx @@ -337,6 +337,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ const load = async (path: string) => { const relativePath = relative(path) await sdk.client.file.read({ path: relativePath }).then((x) => { + if (!store.node[relativePath]) return setStore( "node", relativePath, @@ -425,7 +426,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ init, expand(path: string) { setStore("node", path, "expanded", true) - if (store.node[path].loaded) return + if (store.node[path]?.loaded) return setStore("node", path, "loaded", true) list(path) }, diff --git a/packages/desktop/src/pages/layout.tsx b/packages/desktop/src/pages/layout.tsx index 626bceb22..6272071f9 100644 --- a/packages/desktop/src/pages/layout.tsx +++ b/packages/desktop/src/pages/layout.tsx @@ -517,7 +517,7 @@ export default function Layout(props: ParentProps) { ) } - const SortableProject = (props: { project: Project & { expanded: boolean } }): JSX.Element => { + const SortableProject = (props: { project: Project & { worktree: string; expanded: boolean } }): JSX.Element => { const sortable = createSortable(props.project.worktree) const slug = createMemo(() => base64Encode(props.project.worktree)) const name = createMemo(() => getFilename(props.project.worktree)) diff --git a/packages/opencode/src/file/index.ts b/packages/opencode/src/file/index.ts index 6eb18e518..821a7365f 100644 --- a/packages/opencode/src/file/index.ts +++ b/packages/opencode/src/file/index.ts @@ -1,5 +1,4 @@ import { BusEvent } from "@/bus/bus-event" -import { Bus } from "@/bus" import z from "zod" import { $ } from "bun" import type { BunFile } from "bun" @@ -290,9 +289,11 @@ export namespace File { } const resolved = dir ? path.join(Instance.directory, dir) : Instance.directory const nodes: Node[] = [] - for (const entry of await fs.promises.readdir(resolved, { - withFileTypes: true, - })) { + for (const entry of await fs.promises + .readdir(resolved, { + withFileTypes: true, + }) + .catch(() => [])) { if (exclude.includes(entry.name)) continue const fullPath = path.join(resolved, entry.name) const relativePath = path.relative(Instance.directory, fullPath)