diff --git a/src/agents/subagent-registry.ts b/src/agents/subagent-registry.ts index d6910d41a..f50392dfd 100644 --- a/src/agents/subagent-registry.ts +++ b/src/agents/subagent-registry.ts @@ -46,6 +46,31 @@ function persistSubagentRuns() { const resumedRuns = new Set(); +function startSubagentAnnounceCleanupFlow(runId: string, entry: SubagentRunRecord): boolean { + if (!beginSubagentCleanup(runId)) { + return false; + } + const requesterOrigin = normalizeDeliveryContext(entry.requesterOrigin); + void runSubagentAnnounceFlow({ + childSessionKey: entry.childSessionKey, + childRunId: entry.runId, + requesterSessionKey: entry.requesterSessionKey, + requesterOrigin, + requesterDisplayKey: entry.requesterDisplayKey, + task: entry.task, + timeoutMs: SUBAGENT_ANNOUNCE_TIMEOUT_MS, + cleanup: entry.cleanup, + waitForCompletion: false, + startedAt: entry.startedAt, + endedAt: entry.endedAt, + label: entry.label, + outcome: entry.outcome, + }).then((didAnnounce) => { + finalizeSubagentCleanup(runId, entry.cleanup, didAnnounce); + }); + return true; +} + function resumeSubagentRun(runId: string) { if (!runId || resumedRuns.has(runId)) { return; @@ -59,27 +84,9 @@ function resumeSubagentRun(runId: string) { } if (typeof entry.endedAt === "number" && entry.endedAt > 0) { - if (!beginSubagentCleanup(runId)) { + if (!startSubagentAnnounceCleanupFlow(runId, entry)) { return; } - const requesterOrigin = normalizeDeliveryContext(entry.requesterOrigin); - void runSubagentAnnounceFlow({ - childSessionKey: entry.childSessionKey, - childRunId: entry.runId, - requesterSessionKey: entry.requesterSessionKey, - requesterOrigin, - requesterDisplayKey: entry.requesterDisplayKey, - task: entry.task, - timeoutMs: SUBAGENT_ANNOUNCE_TIMEOUT_MS, - cleanup: entry.cleanup, - waitForCompletion: false, - startedAt: entry.startedAt, - endedAt: entry.endedAt, - label: entry.label, - outcome: entry.outcome, - }).then((didAnnounce) => { - finalizeSubagentCleanup(runId, entry.cleanup, didAnnounce); - }); resumedRuns.add(runId); return; } @@ -222,27 +229,7 @@ function ensureListener() { } persistSubagentRuns(); - if (!beginSubagentCleanup(evt.runId)) { - return; - } - const requesterOrigin = normalizeDeliveryContext(entry.requesterOrigin); - void runSubagentAnnounceFlow({ - childSessionKey: entry.childSessionKey, - childRunId: entry.runId, - requesterSessionKey: entry.requesterSessionKey, - requesterOrigin, - requesterDisplayKey: entry.requesterDisplayKey, - task: entry.task, - timeoutMs: SUBAGENT_ANNOUNCE_TIMEOUT_MS, - cleanup: entry.cleanup, - waitForCompletion: false, - startedAt: entry.startedAt, - endedAt: entry.endedAt, - label: entry.label, - outcome: entry.outcome, - }).then((didAnnounce) => { - finalizeSubagentCleanup(evt.runId, entry.cleanup, didAnnounce); - }); + void startSubagentAnnounceCleanupFlow(evt.runId, entry); }); } @@ -370,27 +357,7 @@ async function waitForSubagentCompletion(runId: string, waitTimeoutMs: number) { if (mutated) { persistSubagentRuns(); } - if (!beginSubagentCleanup(runId)) { - return; - } - const requesterOrigin = normalizeDeliveryContext(entry.requesterOrigin); - void runSubagentAnnounceFlow({ - childSessionKey: entry.childSessionKey, - childRunId: entry.runId, - requesterSessionKey: entry.requesterSessionKey, - requesterOrigin, - requesterDisplayKey: entry.requesterDisplayKey, - task: entry.task, - timeoutMs: SUBAGENT_ANNOUNCE_TIMEOUT_MS, - cleanup: entry.cleanup, - waitForCompletion: false, - startedAt: entry.startedAt, - endedAt: entry.endedAt, - label: entry.label, - outcome: entry.outcome, - }).then((didAnnounce) => { - finalizeSubagentCleanup(runId, entry.cleanup, didAnnounce); - }); + void startSubagentAnnounceCleanupFlow(runId, entry); } catch { // ignore }