diff --git a/apps/desktop/src/app/chat/composer/index.tsx b/apps/desktop/src/app/chat/composer/index.tsx
index 18aa1b97801a..21df163ef8fc 100644
--- a/apps/desktop/src/app/chat/composer/index.tsx
+++ b/apps/desktop/src/app/chat/composer/index.tsx
@@ -724,12 +724,21 @@ export function ChatBar({
return
}
- // Empty Enter while busy is a no-op — interrupting is explicit (Stop/Esc),
- // never a stray Enter after sending. With a payload, submitDraft queues it.
- // Gate on the live DOM payload (not the render-lagged composer state) so a
- // message typed fast / via IME while busy still reaches submitDraft() and
- // gets queued instead of being mistaken for an empty Enter.
+ // Empty Enter while busy. With prompts queued this is the double-send:
+ // the first Enter put the words in the queue, a second sends them now
+ // (promote + interrupt + drain on settle), mirroring the idle empty-Enter
+ // drain above. With nothing queued it stays a no-op — interrupting is
+ // explicit (Stop/Esc), never a stray Enter after sending. Gate on the live
+ // DOM payload (not the render-lagged composer state) so a message typed
+ // fast / via IME while busy still reaches submitDraft() and gets queued
+ // instead of being mistaken for an empty Enter.
if (busy && !hasLivePayload) {
+ const head = queuedPrompts.find(entry => entry.id !== queueEdit?.entryId)
+
+ if (head) {
+ sendQueuedNow(head.id)
+ }
+
return
}
diff --git a/apps/desktop/src/app/chat/composer/queue-panel.tsx b/apps/desktop/src/app/chat/composer/queue-panel.tsx
index 6bb04ec23c4e..591eeb10ebbe 100644
--- a/apps/desktop/src/app/chat/composer/queue-panel.tsx
+++ b/apps/desktop/src/app/chat/composer/queue-panel.tsx
@@ -4,7 +4,7 @@ import { Button } from '@/components/ui/button'
import { Codicon } from '@/components/ui/codicon'
import { Tip } from '@/components/ui/tooltip'
import { type Translations, useI18n } from '@/i18n'
-import { ArrowUp, iconSize, Pencil, Trash2 } from '@/lib/icons'
+import { CornerDownLeft, iconSize, Pencil, Trash2 } from '@/lib/icons'
import { cn } from '@/lib/utils'
import type { QueuedPromptEntry } from '@/store/composer-queue'
@@ -103,7 +103,7 @@ export function QueuePanel({
type="button"
variant="ghost"
>
-
+
diff --git a/apps/desktop/src/lib/icons.ts b/apps/desktop/src/lib/icons.ts
index 1fda821b796e..35e6a92237dc 100644
--- a/apps/desktop/src/lib/icons.ts
+++ b/apps/desktop/src/lib/icons.ts
@@ -33,6 +33,7 @@ import {
IconCommand as Command,
IconCopy as Copy,
IconCopy as CopyIcon,
+ IconCornerDownLeft as CornerDownLeft,
IconCpu as Cpu,
IconCreditCard as CreditCard,
IconDownload as Download,
@@ -155,6 +156,7 @@ export {
Command,
Copy,
CopyIcon,
+ CornerDownLeft,
Cpu,
CreditCard,
Download,