From 35b14bb54793c57e8c1658f06010abee79339b9a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 12 Aug 2026 20:51:29 -0700 Subject: [PATCH] fix(agents): report recovered compaction runs as completed --- .../run/attempt-session-cleanup.test.ts | 13 +++++++++++++ .../run/attempt-session-settle.ts | 7 +++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/agents/embedded-agent-runner/run/attempt-session-cleanup.test.ts b/src/agents/embedded-agent-runner/run/attempt-session-cleanup.test.ts index c53ca44b8cc0..01b883920ed2 100644 --- a/src/agents/embedded-agent-runner/run/attempt-session-cleanup.test.ts +++ b/src/agents/embedded-agent-runner/run/attempt-session-cleanup.test.ts @@ -97,6 +97,19 @@ describe("cleanupEmbeddedAttemptSessionPhase", () => { expect(input.emitDiagnosticRunCompleted).toHaveBeenCalledWith("completed", null, undefined); }); + it("keeps compaction timeout observations abort-like only for cleanup", async () => { + const input = createInput(); + const readState = input.readState; + input.readState = () => ({ ...readState(), timedOutDuringCompaction: true }); + + await cleanupEmbeddedAttemptSessionPhase(input as never); + + expect(hoisted.cleanupEmbeddedAttemptResources).toHaveBeenCalledWith( + expect.objectContaining({ aborted: true }), + ); + expect(input.emitDiagnosticRunCompleted).toHaveBeenCalledWith("completed", null, undefined); + }); + it("emits the before-agent blocked status and owner", async () => { const input = createInput({ readState: () => ({ diff --git a/src/agents/embedded-agent-runner/run/attempt-session-settle.ts b/src/agents/embedded-agent-runner/run/attempt-session-settle.ts index a923c03d468f..541119e01ff6 100644 --- a/src/agents/embedded-agent-runner/run/attempt-session-settle.ts +++ b/src/agents/embedded-agent-runner/run/attempt-session-settle.ts @@ -175,6 +175,8 @@ export async function cleanupEmbeddedAttemptSessionPhase( const finalState = input.readState(); const cleanupFailure = cleanupError; const beforeAgentRunBlocked = finalState.beforeAgentRunBlockedBy !== undefined; + const diagnosticTerminalAborted = + finalState.aborted || finalState.timedOut || finalState.idleTimedOut; input.emitDiagnosticRunCompleted?.( cleanupFailure ? "error" @@ -182,10 +184,7 @@ export async function cleanupEmbeddedAttemptSessionPhase( ? "blocked" : finalState.promptError ? "error" - : finalState.aborted || - finalState.timedOut || - finalState.idleTimedOut || - finalState.timedOutDuringCompaction + : diagnosticTerminalAborted ? "aborted" : "completed", cleanupFailure ?? finalState.promptError,