Skip to content

Commit f81bf71

Browse files
committed
fix: allow new tasks to bypass queued messages and add clear all button
- Modified ChatView to detect and allow new tasks even when messages are queued - Added "Clear All" button to QueuedMessages component for bulk deletion - Implemented clearAll() method in MessageQueueService - Added webview message handler for clearQueuedMessages - Updated WebviewMessage type definitions Fixes #9015
1 parent 8e4b145 commit f81bf71

File tree

5 files changed

+31
-6
lines changed

5 files changed

+31
-6
lines changed

src/core/message-queue/MessageQueueService.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ export class MessageQueueService extends EventEmitter<QueueEvents> {
9191
return this._messages.length === 0
9292
}
9393

94+
public clearAll(): void {
95+
this._messages = []
96+
this.emit("stateChanged", this._messages)
97+
}
98+
9499
public dispose(): void {
95100
this._messages = []
96101
this.removeAllListeners()

src/core/webview/webviewMessageHandler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3155,6 +3155,10 @@ export const webviewMessageHandler = async (
31553155
provider.getCurrentTask()?.messageQueueService.removeMessage(message.text ?? "")
31563156
break
31573157
}
3158+
case "clearQueuedMessages": {
3159+
provider.getCurrentTask()?.messageQueueService.clearAll()
3160+
break
3161+
}
31583162
case "editQueuedMessage": {
31593163
if (message.payload) {
31603164
const { id, text, images } = message.payload as EditQueuedMessagePayload

src/shared/WebviewMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ export interface WebviewMessage {
230230
| "openRouterImageGenerationSelectedModel"
231231
| "queueMessage"
232232
| "removeQueuedMessage"
233+
| "clearQueuedMessages"
233234
| "editQueuedMessage"
234235
| "dismissUpsell"
235236
| "getDismissedUpsells"

webview-ui/src/components/chat/ChatView.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -608,11 +608,11 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
608608
text = text.trim()
609609

610610
if (text || images.length > 0) {
611-
// Queue message if:
612-
// - Task is busy (sendingDisabled)
613-
// - API request in progress (isStreaming)
614-
// - Queue has items (preserve message order during drain)
615-
if (sendingDisabled || isStreaming || messageQueue.length > 0) {
611+
// Check if this is a new task request (no existing messages)
612+
const isNewTask = messagesRef.current.length === 0
613+
614+
// Allow starting new tasks even if queue has items
615+
if (!isNewTask && (sendingDisabled || isStreaming || messageQueue.length > 0)) {
616616
try {
617617
console.log("queueMessage", text, images)
618618
vscode.postMessage({ type: "queueMessage", text, images })

webview-ui/src/components/chat/QueuedMessages.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next"
44
import { QueuedMessage } from "@roo-code/types"
55

66
import { Button } from "@src/components/ui"
7+
import { vscode } from "@src/utils/vscode"
78

89
import Thumbnails from "../common/Thumbnails"
910

@@ -41,7 +42,21 @@ export const QueuedMessages = ({ queue, onRemove, onUpdate }: QueuedMessagesProp
4142

4243
return (
4344
<div className="px-[15px] py-[10px] pr-[6px]" data-testid="queued-messages">
44-
<div className="text-vscode-descriptionForeground text-md mb-2">{t("queuedMessages.title")}</div>
45+
<div className="flex justify-between items-center mb-2">
46+
<div className="text-vscode-descriptionForeground text-md">{t("queuedMessages.title")}</div>
47+
{queue.length > 0 && (
48+
<Button
49+
variant="ghost"
50+
size="sm"
51+
onClick={() => {
52+
// Clear all messages via backend
53+
vscode.postMessage({ type: "clearQueuedMessages" })
54+
}}
55+
className="text-xs">
56+
{t("queuedMessages.clearAll", "Clear All")}
57+
</Button>
58+
)}
59+
</div>
4560
<div className="flex flex-col gap-2 max-h-[300px] overflow-y-auto pr-2">
4661
{queue.map((message, index) => {
4762
const editState = getEditState(message.id, message.text)

0 commit comments

Comments
 (0)