diff options
| author | Adam <[email protected]> | 2026-03-13 07:38:03 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-13 07:38:03 -0500 |
| commit | 1a3735b6197a192be10a2576ed21edee93f9da21 (patch) | |
| tree | bc55b2d672b378b8838411718fc1e9522d041121 /packages/app/src/components/prompt-input/submit.ts | |
| parent | d4ae13f2a0e7748dd8f3a94ec21ee05050ec2cf7 (diff) | |
| download | opencode-1a3735b6197a192be10a2576ed21edee93f9da21.tar.gz opencode-1a3735b6197a192be10a2576ed21edee93f9da21.zip | |
fix(app): better optimistic prompt submit (#17337)
Diffstat (limited to 'packages/app/src/components/prompt-input/submit.ts')
| -rw-r--r-- | packages/app/src/components/prompt-input/submit.ts | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/packages/app/src/components/prompt-input/submit.ts b/packages/app/src/components/prompt-input/submit.ts index eb3e0c82f..e8d765cd9 100644 --- a/packages/app/src/components/prompt-input/submit.ts +++ b/packages/app/src/components/prompt-input/submit.ts @@ -1,6 +1,7 @@ -import type { Message } from "@opencode-ai/sdk/v2/client" +import type { Message, Session } from "@opencode-ai/sdk/v2/client" import { showToast } from "@opencode-ai/ui/toast" import { base64Encode } from "@opencode-ai/util/encode" +import { Binary } from "@opencode-ai/util/binary" import { useNavigate, useParams } from "@solidjs/router" import type { Accessor } from "solid-js" import type { FileSelection } from "@/context/file" @@ -266,6 +267,20 @@ export function createPromptSubmit(input: PromptSubmitInput) { } } + const seed = (dir: string, info: Session) => { + const [, setStore] = globalSync.child(dir) + setStore("session", (list: Session[]) => { + const result = Binary.search(list, info.id, (item) => item.id) + const next = [...list] + if (result.found) { + next[result.index] = info + return next + } + next.splice(result.index, 0, info) + return next + }) + } + const handleSubmit = async (event: Event) => { event.preventDefault() @@ -341,7 +356,7 @@ export function createPromptSubmit(input: PromptSubmitInput) { let session = input.info() if (!session && isNewSession) { - session = await client.session + const created = await client.session .create() .then((x) => x.data ?? undefined) .catch((err) => { @@ -351,7 +366,9 @@ export function createPromptSubmit(input: PromptSubmitInput) { }) return undefined }) - if (session) { + if (created) { + seed(sessionDirectory, created) + session = created if (shouldAutoAccept) permission.enableAutoAccept(session.id, sessionDirectory) layout.handoff.setTabs(base64Encode(sessionDirectory), session.id) navigate(`/${base64Encode(sessionDirectory)}/session/${session.id}`) |
