summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/session.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/desktop/src/context/session.tsx')
-rw-r--r--packages/desktop/src/context/session.tsx26
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,