From a976f8c74ca4eab6e16bb47b5fa446154b743371 Mon Sep 17 00:00:00 2001 From: maria Date: Sat, 3 Oct 2026 20:47:41 -0300 Subject: [PATCH] fix(web): sending past the resume banner compacts first (#15290) Co-authored-by: Claude Opus 5.5 (1M context) --- apps/web/src/components/ChatView.tsx | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index e02eb60c9008c0276ed03c2c00b79b3af2e09c43..8c4c0bb1a456327338359ad82a8794ece91f82e8 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -8733,7 +8733,18 @@ export default function ChatView(props: ChatViewProps) { ); const messageIdForSend = newMessageId(); const messageCreatedAt = new Date().toISOString(); - const shouldQueueBehindActiveRun = phase === "running" && dispatchMode === "queue"; + // Sending past the resume banner compacts first so the turn does not resend the stale + // history. The message queues behind the /compact run; steering into it is rejected, + // and a held queue would strand it. + const compactBeforeSend = + resumeCompactionBannerItem !== null && + !compactDisabled && + !hasHeldQueuedRuns && + multipleModelSelections === null && + messageTextForSend.toLowerCase() !== "/compact"; + const turnDispatchMode = compactBeforeSend ? "queue" : dispatchMode; + const shouldQueueBehindActiveRun = + compactBeforeSend || (phase === "running" && dispatchMode === "queue"); const outgoingMessageText = formatOutgoingPrompt({ provider: ctxSelectedProvider, model: ctxSelectedModel, @@ -9299,6 +9310,22 @@ export default function ChatView(props: ChatViewProps) { failure = turnAttachmentsResult; } + if (failure === null && compactBeforeSend) { + const compactResult = await startThreadTurn({ + environmentId, + input: { + threadId: threadIdForSend, + message: { messageId: newMessageId(), role: "user", text: "/compact", attachments: [] }, + modelSelection: ctxSelectedModelSelection, + runtimeMode, + interactionMode: sendInteractionMode, + }, + }); + if (compactResult._tag === "Failure") { + failure = compactResult; + } + } + let backgroundDraftOpened = false; let turnStartSucceeded = false; if (failure === null && turnAttachmentsResult._tag === "Success") { @@ -9376,7 +9403,7 @@ export default function ChatView(props: ChatViewProps) { titleSeed: title, runtimeMode, interactionMode: sendInteractionMode, - dispatchMode, + dispatchMode: turnDispatchMode, ...(bootstrap ? { bootstrap } : {}), createdAt: messageCreatedAt, }, -- 2.54.0