summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-11-11 08:55:20 -0600
committerAdam <[email protected]>2025-11-11 09:01:28 -0600
commit0057ef6336958886ee01333af5cf91709f24c209 (patch)
treea1ead682e577b59019c918817f0d18e7fa66f412 /packages/desktop/src/context
parent4f604b38399bea3ce08fdba3ce2ad8c7603ed4ea (diff)
downloadopencode-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.tsx63
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)
})
},
},