From 5a11ff7b258b5981ebfded54d4bd22f14db7774f Mon Sep 17 00:00:00 2001 From: Lulu <1192193394@qq.com> Date: Mon, 30 Mar 2026 03:36:42 +0800 Subject: [PATCH] fix(stage-layouts): clear voice auto-send input before ingest resolves (#1510) Co-authored-by-agent: Cursor --- .../stage-layouts/src/components/Widgets/ChatArea.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/stage-layouts/src/components/Widgets/ChatArea.vue b/packages/stage-layouts/src/components/Widgets/ChatArea.vue index ee6671343..d5f9a42b0 100644 --- a/packages/stage-layouts/src/components/Widgets/ChatArea.vue +++ b/packages/stage-layouts/src/components/Widgets/ChatArea.vue @@ -95,18 +95,22 @@ async function debouncedAutoSend(text: string) { const textToSend = pendingAutoSendText.value.trim() if (textToSend && autoSendEnabled.value) { try { + // `ingest()` resolves only after the full assistant turn finishes; clear UI/buffer now so + // the next SentenceEnd during streaming does not append to the message we already committed. + messageInput.value = '' + pendingAutoSendText.value = '' const providerConfig = providersStore.getProviderConfig(activeProvider.value) await ingest(textToSend, { chatProvider: await providersStore.getProviderInstance(activeProvider.value) as ChatProvider, model: activeModel.value, providerConfig, }) - // Clear the message input after sending - messageInput.value = '' - pendingAutoSendText.value = '' } catch (err) { console.error('[ChatArea] Auto-send error:', err) + // Preserve any transcription that arrived while ingest was in flight (see PR review). + messageInput.value = [textToSend, messageInput.value.trim()].filter(Boolean).join(' ') + pendingAutoSendText.value = [textToSend, pendingAutoSendText.value.trim()].filter(Boolean).join(' ') } } autoSendTimeout = undefined