summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/prompt-input/submit.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-13 07:38:03 -0500
committerGitHub <[email protected]>2026-03-13 07:38:03 -0500
commit1a3735b6197a192be10a2576ed21edee93f9da21 (patch)
treebc55b2d672b378b8838411718fc1e9522d041121 /packages/app/src/components/prompt-input/submit.ts
parentd4ae13f2a0e7748dd8f3a94ec21ee05050ec2cf7 (diff)
downloadopencode-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.ts23
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}`)