fix(coding-agent): avoid empty compaction summaries

closes #4811
This commit is contained in:
Armin Ronacher
2026-06-18 22:17:57 +02:00
parent 6b9f3f492f
commit 7d08c81a09
7 changed files with 37 additions and 75 deletions

View File

@@ -67,19 +67,20 @@ function useSummaryStreamFn(harness: Harness, summary: string): () => number {
}
function seedCompactableSession(harness: Harness): void {
harness.settingsManager.applyOverrides({ compaction: { keepRecentTokens: 1 } });
const now = Date.now();
harness.sessionManager.appendMessage({
role: "user",
content: [{ type: "text", text: "message to compact" }],
timestamp: now - 1000,
});
harness.sessionManager.appendMessage(
createAssistant(harness, {
stopReason: "stop",
totalTokens: 100,
timestamp: now - 500,
}),
);
const assistant = createAssistant(harness, {
stopReason: "stop",
totalTokens: 100,
timestamp: now - 500,
});
assistant.content = [{ type: "text", text: "assistant response to compact" }];
harness.sessionManager.appendMessage(assistant);
harness.session.agent.state.messages = harness.sessionManager.buildSessionContext().messages;
}
@@ -96,6 +97,7 @@ describe("AgentSession compaction characterization", () => {
it("manually compacts using an extension-provided summary", async () => {
const harness = await createHarness({
settings: { compaction: { keepRecentTokens: 1 } },
extensionFactories: [
(pi) => {
pi.on("session_before_compact", async (event) => ({
@@ -145,7 +147,7 @@ describe("AgentSession compaction characterization", () => {
const result = await harness.session.compact();
expect(result.summary).toBe("summary from custom stream");
expect(result.summary).toContain("summary from custom stream");
expect(getStreamCallCount()).toBe(1);
});
@@ -165,6 +167,7 @@ describe("AgentSession compaction characterization", () => {
it("cancels in-progress manual compaction when abortCompaction is called", async () => {
const harness = await createHarness({
settings: { compaction: { keepRecentTokens: 1 } },
extensionFactories: [
(pi) => {
pi.on("session_before_compact", async (event) => {