34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
import type { AgentMessage } from "@mariozechner/pi-agent-core";
|
|
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 as AgentMessage[],
|
|
settings: runtime.settings,
|
|
ctx,
|
|
isToolPrunable: runtime.isToolPrunable,
|
|
contextWindowTokensOverride: runtime.contextWindowTokens ?? undefined,
|
|
});
|
|
|
|
if (next === event.messages) return undefined;
|
|
return { messages: next };
|
|
});
|
|
}
|