From c7d9432703dd6a948bda29d2093686af029b360f Mon Sep 17 00:00:00 2001 From: Wells Bunker Date: Fri, 3 Oct 2025 02:05:30 -0600 Subject: [PATCH] Temporary solution to fix response message being cut off --- .../done-tool/done-tool-execute.ts | 2 ++ .../messages/update-message-entries.ts | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/ai/src/tools/communication-tools/done-tool/done-tool-execute.ts b/packages/ai/src/tools/communication-tools/done-tool/done-tool-execute.ts index e0218c1da..65bbabb01 100644 --- a/packages/ai/src/tools/communication-tools/done-tool/done-tool-execute.ts +++ b/packages/ai/src/tools/communication-tools/done-tool/done-tool-execute.ts @@ -90,6 +90,8 @@ export function createDoneToolExecute(context: DoneToolContext, state: DoneToolS } state.isFinalizing = true; + // Part of temporary solution: wait for 300ms after state is set to isFinalizing to block new requests and allow current pending requests to complete + await new Promise((resolve) => setTimeout(resolve, 300)); // CRITICAL: Wait for ALL pending updates from delta/finish to complete FIRST // This ensures execute's update is always the last one in the queue if (typeof state.latestSequenceNumber === 'number') { diff --git a/packages/database/src/queries/messages/update-message-entries.ts b/packages/database/src/queries/messages/update-message-entries.ts index 677461b65..e1bfd6e4d 100644 --- a/packages/database/src/queries/messages/update-message-entries.ts +++ b/packages/database/src/queries/messages/update-message-entries.ts @@ -70,16 +70,17 @@ function getOrCreateQueueState(messageId: string): MessageUpdateQueueState { return initialState; } -function cleanupQueueIfIdle(messageId: string, state: MessageUpdateQueueState): void { - if ( - state.closed && - state.finalSequence !== undefined && - state.lastCompletedSequence >= state.finalSequence && - state.pending.size === 0 - ) { - updateQueues.delete(messageId); - } -} +// function cleanupQueueIfIdle(messageId: string, state: MessageUpdateQueueState): void { +// if ( +// state.closed && +// state.finalSequence !== undefined && +// state.lastCompletedSequence >= state.finalSequence && +// state.pending.size === 0 +// ) { +// console.info('[cleanupQueueIfIdle] CLEANING UP QUEUE'); +// updateQueues.delete(messageId); +// } +// } export function isMessageUpdateQueueClosed(messageId: string): boolean { const queue = updateQueues.get(messageId); @@ -107,7 +108,7 @@ export async function waitForPendingUpdates( if (targetSequence === undefined) { await queue.tailPromise; - cleanupQueueIfIdle(messageId, queue); + // cleanupQueueIfIdle(messageId, queue); return; } @@ -115,7 +116,7 @@ export async function waitForPendingUpdates( const effectiveTarget = Math.min(targetSequence, maxKnownSequence); if (effectiveTarget <= queue.lastCompletedSequence) { - cleanupQueueIfIdle(messageId, queue); + // cleanupQueueIfIdle(messageId, queue); return; } @@ -134,7 +135,7 @@ export async function waitForPendingUpdates( await queue.tailPromise; } - cleanupQueueIfIdle(messageId, queue); + // cleanupQueueIfIdle(messageId, queue); } /** @@ -272,7 +273,7 @@ export async function updateMessageEntries( if (isFinal) { queue.finalSequence = sequenceNumber; } - cleanupQueueIfIdle(messageId, queue); + // cleanupQueueIfIdle(messageId, queue); return success; };