From 2bc7b9b178839f059cad18a60848d8d2a23eed60 Mon Sep 17 00:00:00 2001 From: septonbarth Date: Mon, 27 Apr 2026 05:09:56 -0400 Subject: [PATCH] fix(ui): preserve slash command message ids (#1031) --- packages/ui/src/sync/session-ui-store.ts | 41 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/packages/ui/src/sync/session-ui-store.ts b/packages/ui/src/sync/session-ui-store.ts index ab242946..eb258000 100644 --- a/packages/ui/src/sync/session-ui-store.ts +++ b/packages/ui/src/sync/session-ui-store.ts @@ -70,9 +70,8 @@ function routeMessage(params: { files?: Array<{ type: "file"; mime: string; url: string; filename: string }> additionalParts?: Array<{ text: string; synthetic?: boolean; files?: Array<{ type: "file"; mime: string; url: string; filename: string }> }> }): Promise { - const sdk = opencodeClient.getSdkClient() - if (params.inputMode === "shell") { + const sdk = opencodeClient.getSdkClient() const dir = opencodeClient.getDirectory() || undefined return sdk.session.shell({ sessionID: params.sessionId, @@ -96,17 +95,25 @@ function routeMessage(params: { || storeCommands.find((c) => c.name === cmdName) if (isCommand) { - const dir = opencodeClient.getDirectory() || undefined - return sdk.session.command({ - sessionID: params.sessionId, - directory: dir, - command: cmdName, - arguments: tail.join(" "), + return optimisticSend({ + sessionId: params.sessionId, + content: params.content, + providerID: params.providerID, + modelID: params.modelID, agent: params.agent, - model: `${params.providerID}/${params.modelID}`, - variant: params.variant, - parts: params.files, - }).then(() => {}) + files: params.files, + send: (messageID) => opencodeClient.sendCommand({ + id: params.sessionId, + providerID: params.providerID, + modelID: params.modelID, + command: cmdName, + arguments: tail.join(" "), + agent: params.agent, + variant: params.variant, + files: params.files, + messageId: messageID, + }).then(() => {}), + }) } } @@ -132,6 +139,11 @@ function routeMessage(params: { }) } +function notifyMessageSent(sessionId: string): void { + fetch(`/api/sessions/${sessionId}/message-sent`, { method: "POST" }) + .catch(() => { /* ignore */ }) +} + // --------------------------------------------------------------------------- // Types // --------------------------------------------------------------------------- @@ -754,6 +766,8 @@ export const useSessionUIStore = create()((set, get) => ({ await waitForWorktreeBootstrap(createdDirectory) } + notifyMessageSent(created.id) + markPendingUserSendAnimation(created.id) const files = attachments?.map((a) => ({ @@ -823,8 +837,7 @@ export const useSessionUIStore = create()((set, get) => ({ } if (currentSessionId) { - fetch(`/api/sessions/${currentSessionId}/message-sent`, { method: "POST" }) - .catch(() => { /* ignore */ }) + notifyMessageSent(currentSessionId) } if (currentSessionId) {