From eccba40ad090b15fdb155a57ca3da0cd87174ab0 Mon Sep 17 00:00:00 2001 From: Bin Deng Date: Sun, 15 Feb 2026 05:25:20 +0800 Subject: [PATCH] fix: clear compaction timeout timer on success Ensure the safety timeout is cleared when compact() resolves normally, preventing a 5-minute timer leak. Co-Authored-By: Claude Opus 4.6 --- src/agents/pi-embedded-runner/compact.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/agents/pi-embedded-runner/compact.ts b/src/agents/pi-embedded-runner/compact.ts index 43738d0495e..6a52f8eca09 100644 --- a/src/agents/pi-embedded-runner/compact.ts +++ b/src/agents/pi-embedded-runner/compact.ts @@ -633,16 +633,21 @@ export async function compactEmbeddedPiSessionDirect( const compactStartedAt = Date.now(); const COMPACT_TIMEOUT_MS = 300_000; // 5 minutes safety timeout + let compactTimer: ReturnType | undefined; const result = await Promise.race([ session.compact(params.customInstructions), new Promise((_, reject) => { - const timer = setTimeout( + compactTimer = setTimeout( () => reject(new Error("Compaction timed out")), COMPACT_TIMEOUT_MS, ); - timer.unref?.(); + compactTimer.unref?.(); }), - ]); + ]).finally(() => { + if (compactTimer) { + clearTimeout(compactTimer); + } + }); // Estimate tokens after compaction by summing token estimates for remaining messages let tokensAfter: number | undefined; try {