summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-19 14:38:25 -0600
committerAdam <[email protected]>2025-12-20 04:25:16 -0600
commit742cf10deeffb31292cdbf8a5ca7afb07698d9dc (patch)
treec3f6f7269527bae0c1f4cdea2bc3a7ebd37cdfe2
parent7664453f947f736ccf4710e90bae4ac24511decc (diff)
downloadopencode-742cf10deeffb31292cdbf8a5ca7afb07698d9dc.tar.gz
opencode-742cf10deeffb31292cdbf8a5ca7afb07698d9dc.zip
fix(desktop): removed projects
-rw-r--r--packages/desktop/src/context/layout.tsx13
-rw-r--r--packages/desktop/src/context/local.tsx3
-rw-r--r--packages/desktop/src/pages/layout.tsx2
-rw-r--r--packages/opencode/src/file/index.ts9
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<Project> & { 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)