diff options
| author | Adam <[email protected]> | 2025-12-17 15:04:13 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-17 15:42:55 -0600 |
| commit | b4209582fb7d696e28b499b2b254ef4f853e0a13 (patch) | |
| tree | 688da3912bd0f5a1e7e94ffe4fb675a2d9a57bb7 /packages/desktop/src/context | |
| parent | dbdea2f65958b088bda2998f0f225eafa1b95b43 (diff) | |
| download | opencode-b4209582fb7d696e28b499b2b254ef4f853e0a13.tar.gz opencode-b4209582fb7d696e28b499b2b254ef4f853e0a13.zip | |
feat(desktop): optimistic prompt submit
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/sync.tsx | 35 |
1 files changed, 35 insertions, 0 deletions
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 }), |
