(null);
@@ -210,11 +213,10 @@ export function Chat({ projectPath, onCloseProject }: ChatProps) {
if (last?.role === "assistant" && !last.tool_calls) {
setLoading(false);
setActivityStatus(null);
- if (queuedMessageRef.current) {
- const msg = queuedMessageRef.current;
- queuedMessageRef.current = null;
- setQueuedMessage(null);
- setPendingAutoSend(msg);
+ const nextQueued = queuedMessagesRef.current.shift();
+ if (nextQueued !== undefined) {
+ setQueuedMessages([...queuedMessagesRef.current]);
+ setPendingAutoSend(nextQueued.text);
}
}
},
@@ -225,11 +227,10 @@ export function Chat({ projectPath, onCloseProject }: ChatProps) {
console.error("WebSocket error:", message);
setLoading(false);
setActivityStatus(null);
- if (queuedMessageRef.current) {
- const msg = queuedMessageRef.current;
- queuedMessageRef.current = null;
- setQueuedMessage(null);
- setPendingAutoSend(msg);
+ const nextQueued = queuedMessagesRef.current.shift();
+ if (nextQueued !== undefined) {
+ setQueuedMessages([...queuedMessagesRef.current]);
+ setPendingAutoSend(nextQueued.text);
}
},
onPipelineState: (state) => {
@@ -330,9 +331,9 @@ export function Chat({ projectPath, onCloseProject }: ChatProps) {
}, []);
const cancelGeneration = async () => {
- // Discard any queued message — do not auto-send after cancel
- queuedMessageRef.current = null;
- setQueuedMessage(null);
+ // Discard any queued messages — do not auto-send after cancel
+ queuedMessagesRef.current = [];
+ setQueuedMessages([]);
try {
wsRef.current?.cancel();
await api.cancelChat();
@@ -358,8 +359,12 @@ export function Chat({ projectPath, onCloseProject }: ChatProps) {
// Agent is busy — queue the message instead of dropping it
if (loading) {
- queuedMessageRef.current = messageToSend;
- setQueuedMessage(messageToSend);
+ const newItem = {
+ id: String(queueIdCounterRef.current++),
+ text: messageToSend,
+ };
+ queuedMessagesRef.current = [...queuedMessagesRef.current, newItem];
+ setQueuedMessages([...queuedMessagesRef.current]);
if (!messageOverride || messageOverride === input) {
setInput("");
}
@@ -890,9 +895,10 @@ export function Chat({ projectPath, onCloseProject }: ChatProps) {
gap: "8px",
}}
>
- {/* Queued message indicator */}
- {queuedMessage && (
+ {/* Queued message indicators */}
+ {queuedMessages.map(({ id, text }) => (
- {queuedMessage}
+ {text}
- )}
+ ))}
{/* Input row */}