diff options
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/global-sync.tsx | 2 | ||||
| -rw-r--r-- | packages/desktop/src/context/layout.tsx | 34 | ||||
| -rw-r--r-- | packages/desktop/src/context/local.tsx | 2 | ||||
| -rw-r--r-- | packages/desktop/src/context/session.tsx | 13 |
4 files changed, 39 insertions, 12 deletions
diff --git a/packages/desktop/src/context/global-sync.tsx b/packages/desktop/src/context/global-sync.tsx index 188db1e69..2c5c05125 100644 --- a/packages/desktop/src/context/global-sync.tsx +++ b/packages/desktop/src/context/global-sync.tsx @@ -74,7 +74,7 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple session_status: {}, session_diff: {}, todo: {}, - limit: 10, + limit: 5, message: {}, part: {}, node: [], diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx index 1b43cf511..5ef41c1f4 100644 --- a/packages/desktop/src/context/layout.tsx +++ b/packages/desktop/src/context/layout.tsx @@ -1,14 +1,18 @@ import { createStore } from "solid-js/store" -import { createMemo } from "solid-js" +import { createMemo, onMount } from "solid-js" import { createSimpleContext } from "@opencode-ai/ui/context" import { makePersisted } from "@solid-primitives/storage" +import { useGlobalSync } from "./global-sync" +import { useGlobalSDK } from "./global-sdk" export const { use: useLayout, provider: LayoutProvider } = createSimpleContext({ name: "Layout", init: () => { + const globalSdk = useGlobalSDK() + const globalSync = useGlobalSync() const [store, setStore] = makePersisted( createStore({ - projects: [] as { directory: string; expanded: boolean; lastSession?: string }[], + projects: [] as { directory: string; expanded: boolean }[], sidebar: { opened: false, width: 280, @@ -26,11 +30,31 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }, ) + async function loadProjectSessions(directory: string) { + const [, setStore] = globalSync.child(directory) + globalSdk.client.session.list({ directory }).then((x) => { + const sessions = (x.data ?? []) + .slice() + .sort((a, b) => a.id.localeCompare(b.id)) + .slice(0, 5) + setStore("session", sessions) + }) + } + + onMount(() => { + Promise.all( + store.projects.map(({ directory }) => { + return loadProjectSessions(directory) + }), + ) + }) + return { projects: { list: createMemo(() => store.projects), open(directory: string) { if (store.projects.find((x) => x.directory === directory)) return + loadProjectSessions(directory) setStore("projects", (x) => [...x, { directory, expanded: true }]) }, close(directory: string) { @@ -42,12 +66,6 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( collapse(directory: string) { setStore("projects", (x) => x.map((x) => (x.directory === directory ? { ...x, expanded: false } : x))) }, - lastSession(directory: string) { - return store.projects.find((x) => x.directory === directory)?.lastSession - }, - setLastSession(directory: string, session: string | undefined) { - setStore("projects", (x) => x.map((x) => (x.directory === directory ? { ...x, lastSession: session } : x))) - }, }, sidebar: { opened: createMemo(() => store.sidebar.opened), diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx index a9f48ec67..0d8303b45 100644 --- a/packages/desktop/src/context/local.tsx +++ b/packages/desktop/src/context/local.tsx @@ -335,7 +335,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ return { node: async (path: string) => { - if (!store.node[path]) { + if (!store.node[path] || store.node[path].loaded === false) { await init(path) } return store.node[path] diff --git a/packages/desktop/src/context/session.tsx b/packages/desktop/src/context/session.tsx index 2a0391d6b..5335422f7 100644 --- a/packages/desktop/src/context/session.tsx +++ b/packages/desktop/src/context/session.tsx @@ -1,9 +1,9 @@ import { createStore, produce } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" -import { batch, createEffect, createMemo } from "solid-js" +import { batch, createEffect, createMemo, onMount } from "solid-js" import { useSync } from "./sync" import { makePersisted } from "@solid-primitives/storage" -import { TextSelection } from "./local" +import { TextSelection, useLocal } from "./local" import { pipe, sumBy } from "remeda" import { AssistantMessage, UserMessage } from "@opencode-ai/sdk/v2" import { useParams } from "@solidjs/router" @@ -25,6 +25,7 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex const sdk = useSDK() const params = useParams() const sync = useSync() + const local = useLocal() const name = createMemo( () => `${base64Encode(sync.data.project.worktree)}/session${params.id ? "/" + params.id : ""}.v2`, ) @@ -55,6 +56,14 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex }, ) + onMount(() => { + store.tabs.all.forEach((tab) => { + if (tab.startsWith("file://")) { + local.file.open(tab.replace("file://", "")) + } + }) + }) + createEffect(() => { if (!params.id) return sync.session.sync(params.id) |
