Spaces:
Running
Running
| 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, | |
| }); | |
| if (next === event.messages) { | |
| return undefined; | |
| } | |
| if (runtime.settings.mode === "cache-ttl") { | |
| runtime.lastCacheTouchAt = Date.now(); | |
| } | |
| return { messages: next }; | |
| }); | |
| } | |