Skip to content

Commit cde1e2d

Browse files
committed
fix: preserve compaction split after trailing tool results
1 parent 3f7bd3b commit cde1e2d

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

src/agents/compaction.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,20 @@ describe("splitMessagesByTokenShare", () => {
171171
expect(parts.flat().length).toBe(messages.length);
172172
});
173173

174+
it("splits before a trailing completed tool-call pair", () => {
175+
const messages: AgentMessage[] = [
176+
makeMessage(1, 4000),
177+
makeAssistantToolCall(2, "call_tail", "y".repeat(200)),
178+
makeToolResult(3, "call_tail", "r".repeat(4000)),
179+
];
180+
181+
const parts = splitMessagesByTokenShare(messages, 2);
182+
183+
expect(parts.length).toBe(2);
184+
expect(parts[0]?.map((m) => m.timestamp)).toEqual([1]);
185+
expect(parts[1]?.map((m) => m.timestamp)).toEqual([2, 3]);
186+
});
187+
174188
it("does not block splits after aborted tool-call assistants", () => {
175189
const messages: AgentMessage[] = [
176190
makeAssistantToolCall(1, "call_abort", "y".repeat(4000), "aborted"),

src/agents/compaction.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,7 @@ export function splitMessagesByTokenShare(
188188
chunks.length < normalizedParts - 1 &&
189189
currentTokens > targetTokens
190190
) {
191-
chunks.push(current);
192-
current = [];
193-
currentTokens = 0;
191+
splitCurrentAtPendingBoundary();
194192
pendingChunkStartIndex = null;
195193
}
196194
}

0 commit comments

Comments
 (0)