From cde1e2d3a1108aad02581f5b56472dfe50e95761 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 4 Apr 2026 22:34:05 +0530 Subject: [PATCH] fix: preserve compaction split after trailing tool results --- src/agents/compaction.test.ts | 14 ++++++++++++++ src/agents/compaction.ts | 4 +--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/agents/compaction.test.ts b/src/agents/compaction.test.ts index 9eb893eb961..94c09e240f4 100644 --- a/src/agents/compaction.test.ts +++ b/src/agents/compaction.test.ts @@ -171,6 +171,20 @@ describe("splitMessagesByTokenShare", () => { expect(parts.flat().length).toBe(messages.length); }); + it("splits before a trailing completed tool-call pair", () => { + const messages: AgentMessage[] = [ + makeMessage(1, 4000), + makeAssistantToolCall(2, "call_tail", "y".repeat(200)), + makeToolResult(3, "call_tail", "r".repeat(4000)), + ]; + + const parts = splitMessagesByTokenShare(messages, 2); + + expect(parts.length).toBe(2); + expect(parts[0]?.map((m) => m.timestamp)).toEqual([1]); + expect(parts[1]?.map((m) => m.timestamp)).toEqual([2, 3]); + }); + it("does not block splits after aborted tool-call assistants", () => { const messages: AgentMessage[] = [ makeAssistantToolCall(1, "call_abort", "y".repeat(4000), "aborted"), diff --git a/src/agents/compaction.ts b/src/agents/compaction.ts index 374cabd8b81..79c34c61a61 100644 --- a/src/agents/compaction.ts +++ b/src/agents/compaction.ts @@ -188,9 +188,7 @@ export function splitMessagesByTokenShare( chunks.length < normalizedParts - 1 && currentTokens > targetTokens ) { - chunks.push(current); - current = []; - currentTokens = 0; + splitCurrentAtPendingBoundary(); pendingChunkStartIndex = null; } }