import type { AgentMessage } from "@mariozechner/pi-agent-core" ;
import { describe, expect, it, vi } from "vitest" ;
const piCodingAgentMocks = vi.hoisted(() => ({
estimateTokens: vi.fn((_message: unknown) => 1 ),
generateSummary: vi.fn(async () => "summary" ),
}));
vi.mock("@mariozechner/pi-coding-agent" , async () => {
const actual = await vi.importActual<typeof import ("@mariozechner/pi-coding-agent" )>(
"@mariozechner/pi-coding-agent" ,
);
return {
...actual,
estimateTokens: piCodingAgentMocks.estimateTokens,
generateSummary: piCodingAgentMocks.generateSummary,
};
});
import { chunkMessagesByMaxTokens, splitMessagesByTokenShare } from "./compaction.js" ;
describe("compaction token accounting sanitization" , () => {
it("does not pass toolResult.details into per-message token estimates" , () => {
const messages: AgentMessage[] = [
{
role: "toolResult" ,
toolCallId: "call_1" ,
toolName: "browser" ,
isError: false ,
content: [{ type: "text" , text: "ok" }],
details: { raw: "x" .repeat(50 _000 ) },
timestamp: 1 ,
} as any,
{
role: "user" ,
content: "next" ,
timestamp: 2 ,
},
];
splitMessagesByTokenShare(messages, 2 );
chunkMessagesByMaxTokens(messages, 16 );
const calledWithDetails = piCodingAgentMocks.estimateTokens.mock.calls.some((call) => {
const message = call[0 ] as { details?: unknown } | undefined;
return Boolean (message?.details);
});
expect(calledWithDetails).toBe(false );
});
});
Messung V0.5 in Prozent C=93 H=95 G=93
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland