From b4209582fb7d696e28b499b2b254ef4f853e0a13 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 17 Dec 2025 15:04:13 -0600 Subject: feat(desktop): optimistic prompt submit --- packages/desktop/src/context/sync.tsx | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'packages/desktop/src/context') diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx index 2ab54b3ae..cb782c24b 100644 --- a/packages/desktop/src/context/sync.tsx +++ b/packages/desktop/src/context/sync.tsx @@ -4,6 +4,7 @@ import { Binary } from "@opencode-ai/util/binary" import { createSimpleContext } from "@opencode-ai/ui/context" import { useGlobalSync } from "./global-sync" import { useSDK } from "./sdk" +import type { Message, Part } from "@opencode-ai/sdk/v2/client" export const { use: useSync, provider: SyncProvider } = createSimpleContext({ name: "Sync", @@ -30,6 +31,40 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ if (match.found) return store.session[match.index] return undefined }, + addOptimisticMessage(input: { + sessionID: string + text: string + parts: Part[] + agent: string + model: { providerID: string; modelID: string } + }) { + const messageID = crypto.randomUUID() + const message: Message = { + id: messageID, + sessionID: input.sessionID, + role: "user", + time: { created: Date.now() }, + agent: input.agent, + model: input.model, + } + setStore( + produce((draft) => { + const messages = draft.message[input.sessionID] + if (!messages) { + draft.message[input.sessionID] = [message] + } else { + const result = Binary.search(messages, messageID, (m) => m.id) + messages.splice(result.index, 0, message) + } + draft.part[messageID] = input.parts.map((part, i) => ({ + ...part, + id: `${messageID}-${i}`, + sessionID: input.sessionID, + messageID, + })) + }), + ) + }, async sync(sessionID: string, _isRetry = false) { const [session, messages, todo, diff] = await Promise.all([ sdk.client.session.get({ sessionID }, { throwOnError: true }), -- cgit v1.2.3