diff options
Diffstat (limited to 'packages/desktop/src/context/session.tsx')
| -rw-r--r-- | packages/desktop/src/context/session.tsx | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/packages/desktop/src/context/session.tsx b/packages/desktop/src/context/session.tsx index a468f4673..36319b0c5 100644 --- a/packages/desktop/src/context/session.tsx +++ b/packages/desktop/src/context/session.tsx @@ -6,11 +6,17 @@ import { makePersisted } from "@solid-primitives/storage" import { TextSelection } from "./local" import { pipe, sumBy } from "remeda" import { AssistantMessage } from "@opencode-ai/sdk" +import { useParams } from "@solidjs/router" +import { base64Encode } from "@/utils" export const { use: useSession, provider: SessionProvider } = createSimpleContext({ name: "Session", - init: (props: { sessionId?: string }) => { + init: () => { + const params = useParams() const sync = useSync() + const name = createMemo( + () => `${base64Encode(sync.data.project.worktree)}/session${params.id ? "/" + params.id : ""}`, + ) const [store, setStore] = makePersisted( createStore<{ @@ -29,17 +35,17 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex cursor: undefined, }), { - name: props.sessionId ?? "new-session", + name: name(), }, ) createEffect(() => { - if (!props.sessionId) return - sync.session.sync(props.sessionId) + if (!params.id) return + sync.session.sync(params.id) }) - const info = createMemo(() => (props.sessionId ? sync.session.get(props.sessionId) : undefined)) - const messages = createMemo(() => (props.sessionId ? (sync.data.message[props.sessionId] ?? []) : [])) + const info = createMemo(() => (params.id ? sync.session.get(params.id) : undefined)) + const messages = createMemo(() => (params.id ? (sync.data.message[params.id] ?? []) : [])) const userMessages = createMemo(() => messages() .filter((m) => m.role === "user") @@ -53,10 +59,10 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex return userMessages()?.find((m) => m.id === store.messageId) }) const working = createMemo(() => { - if (!props.sessionId) return false + if (!params.id) return false const last = lastUserMessage() if (!last) return false - const assistantMessages = sync.data.message[props.sessionId]?.filter( + const assistantMessages = sync.data.message[params.id]?.filter( (m) => m.role === "assistant" && m.parentID == last?.id, ) as AssistantMessage[] const error = assistantMessages?.find((m) => m?.error)?.error @@ -80,7 +86,7 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex const model = createMemo(() => last() ? sync.data.provider.find((x) => x.id === last().providerID)?.models[last().modelID] : undefined, ) - const diffs = createMemo(() => (props.sessionId ? (sync.data.session_diff[props.sessionId] ?? []) : [])) + const diffs = createMemo(() => (params.id ? (sync.data.session_diff[params.id] ?? []) : [])) const tokens = createMemo(() => { if (!last()) return @@ -96,7 +102,7 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex }) return { - id: props.sessionId, + id: params.id, info, working, diffs, |
