refactor: share agent wait dedupe cleanup

This commit is contained in:
Peter Steinberger 2026-03-13 21:36:42 +00:00
parent b5010719d6
commit c8898034f9
1 changed files with 13 additions and 20 deletions

View File

@ -23,6 +23,17 @@ function asFiniteNumber(value: unknown): number | undefined {
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
}
function removeWaiter(runId: string, waiter: () => void): void {
const waiters = AGENT_WAITERS_BY_RUN_ID.get(runId);
if (!waiters) {
return;
}
waiters.delete(waiter);
if (waiters.size === 0) {
AGENT_WAITERS_BY_RUN_ID.delete(runId);
}
}
function addWaiter(runId: string, waiter: () => void): () => void {
const normalizedRunId = runId.trim();
if (!normalizedRunId) {
@ -31,28 +42,10 @@ function addWaiter(runId: string, waiter: () => void): () => void {
const existing = AGENT_WAITERS_BY_RUN_ID.get(normalizedRunId);
if (existing) {
existing.add(waiter);
return () => {
const waiters = AGENT_WAITERS_BY_RUN_ID.get(normalizedRunId);
if (!waiters) {
return;
}
waiters.delete(waiter);
if (waiters.size === 0) {
AGENT_WAITERS_BY_RUN_ID.delete(normalizedRunId);
}
};
return () => removeWaiter(normalizedRunId, waiter);
}
AGENT_WAITERS_BY_RUN_ID.set(normalizedRunId, new Set([waiter]));
return () => {
const waiters = AGENT_WAITERS_BY_RUN_ID.get(normalizedRunId);
if (!waiters) {
return;
}
waiters.delete(waiter);
if (waiters.size === 0) {
AGENT_WAITERS_BY_RUN_ID.delete(normalizedRunId);
}
};
return () => removeWaiter(normalizedRunId, waiter);
}
function notifyWaiters(runId: string): void {