refactor(queue): share runtime settings and summary helpers

This commit is contained in:
Peter Steinberger
2026-02-18 17:54:56 +00:00
parent 84841aebe5
commit 1aa4d3a6f0
5 changed files with 187 additions and 64 deletions

View File

@@ -1,34 +1,15 @@
import { defaultRuntime } from "../../../runtime.js";
import {
buildCollectPrompt,
buildQueueSummaryPrompt,
clearQueueSummaryState,
hasCrossChannelItems,
previewQueueSummaryPrompt,
waitForQueueDebounce,
} from "../../../utils/queue-helpers.js";
import { isRoutableChannel } from "../route-reply.js";
import { FOLLOWUP_QUEUES } from "./state.js";
import type { FollowupRun } from "./types.js";
function previewQueueSummaryPrompt(queue: {
dropPolicy: "summarize" | "old" | "new";
droppedCount: number;
summaryLines: string[];
}): string | undefined {
return buildQueueSummaryPrompt({
state: {
dropPolicy: queue.dropPolicy,
droppedCount: queue.droppedCount,
summaryLines: [...queue.summaryLines],
},
noun: "message",
});
}
function clearQueueSummaryState(queue: { droppedCount: number; summaryLines: string[] }): void {
queue.droppedCount = 0;
queue.summaryLines = [];
}
export function scheduleFollowupDrain(
key: string,
runFollowup: (run: FollowupRun) => Promise<void>,
@@ -89,7 +70,7 @@ export function scheduleFollowupDrain(
}
const items = queue.items.slice();
const summary = previewQueueSummaryPrompt(queue);
const summary = previewQueueSummaryPrompt({ state: queue, noun: "message" });
const run = items.at(-1)?.run ?? queue.lastRun;
if (!run) {
break;
@@ -127,7 +108,7 @@ export function scheduleFollowupDrain(
continue;
}
const summaryPrompt = previewQueueSummaryPrompt(queue);
const summaryPrompt = previewQueueSummaryPrompt({ state: queue, noun: "message" });
if (summaryPrompt) {
const run = queue.lastRun;
if (!run) {

View File

@@ -1,3 +1,4 @@
import { applyQueueRuntimeSettings } from "../../../utils/queue-helpers.js";
import type { FollowupRun, QueueDropPolicy, QueueMode, QueueSettings } from "./types.js";
export type FollowupQueueState = {
@@ -22,16 +23,10 @@ export const FOLLOWUP_QUEUES = new Map<string, FollowupQueueState>();
export function getFollowupQueue(key: string, settings: QueueSettings): FollowupQueueState {
const existing = FOLLOWUP_QUEUES.get(key);
if (existing) {
existing.mode = settings.mode;
existing.debounceMs =
typeof settings.debounceMs === "number"
? Math.max(0, settings.debounceMs)
: existing.debounceMs;
existing.cap =
typeof settings.cap === "number" && settings.cap > 0
? Math.floor(settings.cap)
: existing.cap;
existing.dropPolicy = settings.dropPolicy ?? existing.dropPolicy;
applyQueueRuntimeSettings({
target: existing,
settings,
});
return existing;
}
@@ -52,6 +47,10 @@ export function getFollowupQueue(key: string, settings: QueueSettings): Followup
droppedCount: 0,
summaryLines: [],
};
applyQueueRuntimeSettings({
target: created,
settings,
});
FOLLOWUP_QUEUES.set(key, created);
return created;
}