refactor(queue): reuse collect-mode item drain flow

This commit is contained in:
Peter Steinberger
2026-02-19 07:00:44 +00:00
parent 2f6b8663ff
commit b22deada9e
3 changed files with 45 additions and 23 deletions

View File

@@ -2,6 +2,7 @@ import { defaultRuntime } from "../../../runtime.js";
import {
buildCollectPrompt,
clearQueueSummaryState,
drainCollectItemIfNeeded,
drainNextQueueItem,
hasCrossChannelItems,
previewQueueSummaryPrompt,
@@ -30,13 +31,6 @@ export function scheduleFollowupDrain(
// Prevents “collect after shift” collapsing different targets.
//
// Debug: `pnpm test src/auto-reply/reply/queue.collect-routing.test.ts`
if (forceIndividualCollect) {
if (!(await drainNextQueueItem(queue.items, runFollowup))) {
break;
}
continue;
}
// Check if messages span multiple channels.
// If so, process individually to preserve per-message routing.
const isCrossChannel = hasCrossChannelItems(queue.items, (item) => {
@@ -56,11 +50,19 @@ export function scheduleFollowupDrain(
};
});
if (isCrossChannel) {
forceIndividualCollect = true;
if (!(await drainNextQueueItem(queue.items, runFollowup))) {
break;
}
const collectDrainResult = await drainCollectItemIfNeeded({
forceIndividualCollect,
isCrossChannel,
setForceIndividualCollect: (next) => {
forceIndividualCollect = next;
},
items: queue.items,
run: runFollowup,
});
if (collectDrainResult === "empty") {
break;
}
if (collectDrainResult === "drained") {
continue;
}