Temporary solution to fix response message being cut off

This commit is contained in:
Wells Bunker 2025-10-03 02:05:30 -06:00
parent e33f16df6d
commit c7d9432703
No known key found for this signature in database
GPG Key ID: DB16D6F2679B78FC
2 changed files with 17 additions and 14 deletions

View File

@ -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') {

View File

@ -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;
};