diff options
| author | Adam <[email protected]> | 2025-11-11 08:55:20 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-11-11 09:01:28 -0600 |
| commit | 0057ef6336958886ee01333af5cf91709f24c209 (patch) | |
| tree | a1ead682e577b59019c918817f0d18e7fa66f412 /packages/desktop/src/context | |
| parent | 4f604b38399bea3ce08fdba3ce2ad8c7603ed4ea (diff) | |
| download | opencode-0057ef6336958886ee01333af5cf91709f24c209.tar.gz opencode-0057ef6336958886ee01333af5cf91709f24c209.zip | |
fix(desktop): prompt input not clearing, attachments flaky
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/session.tsx | 63 |
1 files changed, 9 insertions, 54 deletions
diff --git a/packages/desktop/src/context/session.tsx b/packages/desktop/src/context/session.tsx index 02c859a5b..0a517e0d3 100644 --- a/packages/desktop/src/context/session.tsx +++ b/packages/desktop/src/context/session.tsx @@ -22,65 +22,20 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex active?: string opened: string[] } + prompt: Prompt + cursor?: number }>({ tabs: { opened: [], }, + prompt: clonePrompt(DEFAULT_PROMPT), + cursor: undefined, }), { name: seed, }, ) - const [promptStore, setPromptStore] = createStore<{ - prompt: Prompt - cursor?: number - }>({ - prompt: clonePrompt(DEFAULT_PROMPT), - }) - - const key = createMemo(() => props.sessionId ?? "new-session") - const [ready, setReady] = createSignal(false) - const prefix = "session-prompt:" - - createEffect( - on( - key, - (value) => { - setReady(false) - const record = localStorage.getItem(prefix + value) - if (!record) { - setPromptStore("prompt", clonePrompt(DEFAULT_PROMPT)) - setPromptStore("cursor", undefined) - setReady(true) - return - } - const payload = JSON.parse(record) as { prompt?: Prompt; cursor?: number } - const parts = payload.prompt ?? DEFAULT_PROMPT - const cursor = typeof payload.cursor === "number" ? payload.cursor : undefined - setPromptStore("prompt", clonePrompt(parts)) - setPromptStore("cursor", cursor) - setReady(true) - }, - { defer: true }, - ), - ) - - createEffect(() => { - if (!ready()) return - const value = key() - const isDefault = isPromptEqual(promptStore.prompt, DEFAULT_PROMPT) - if (isDefault && (promptStore.cursor === undefined || promptStore.cursor <= 0)) { - localStorage.removeItem(prefix + value) - return - } - const next = JSON.stringify({ - prompt: clonePrompt(promptStore.prompt), - cursor: promptStore.cursor, - }) - localStorage.setItem(prefix + value, next) - }) - createEffect(() => { if (!props.sessionId) return sync.session.sync(props.sessionId) @@ -149,14 +104,14 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex working, diffs, prompt: { - current: createMemo(() => promptStore.prompt), - cursor: createMemo(() => promptStore.cursor), - dirty: createMemo(() => !isPromptEqual(promptStore.prompt, DEFAULT_PROMPT)), + current: createMemo(() => persist.prompt), + cursor: createMemo(() => persist.cursor), + dirty: createMemo(() => !isPromptEqual(persist.prompt, DEFAULT_PROMPT)), set(prompt: Prompt, cursorPosition?: number) { const next = clonePrompt(prompt) batch(() => { - setPromptStore("prompt", next) - if (cursorPosition !== undefined) setPromptStore("cursor", cursorPosition) + setPersist("prompt", next) + if (cursorPosition !== undefined) setPersist("cursor", cursorPosition) }) }, }, |
