import type { ContextEvent, ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent" ;
import { pruneContextMessages } from "./pruner.js" ;
import { getContextPruningRuntime } from "./runtime.js" ;
export default function contextPruningExtension(api: ExtensionAPI): void {
api.on("context" , (event: ContextEvent, ctx: ExtensionContext) => {
const runtime = getContextPruningRuntime(ctx.sessionManager);
if (!runtime) {
return undefined;
}
if (runtime.settings.mode === "cache-ttl" ) {
const ttlMs = runtime.settings.ttlMs;
const lastTouch = runtime.lastCacheTouchAt ?? null ;
if (!lastTouch || ttlMs <= 0 ) {
return undefined;
}
if (ttlMs > 0 && Date.now() - lastTouch < ttlMs) {
return undefined;
}
}
const next = pruneContextMessages({
messages: event.messages,
settings: runtime.settings,
ctx,
isToolPrunable: runtime.isToolPrunable,
contextWindowTokensOverride: runtime.contextWindowTokens ?? undefined,
dropThinkingBlocksForEstimate: runtime.dropThinkingBlocks,
});
if (next === event.messages) {
return undefined;
}
if (runtime.settings.mode === "cache-ttl" ) {
runtime.lastCacheTouchAt = Date.now();
}
return { messages: next };
});
}
Messung V0.5 in Prozent C=94 H=95 G=94
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland