import { compact, type CompactionResult, type ExtensionContext, type SessionBeforeCompactEvent, } from "@earendil-works/pi-coding-agent"; import type { ResolvedCompactionTarget } from "./config.ts"; export type CompactFunction = typeof compact; export type CompactionPreparation = SessionBeforeCompactEvent["preparation"]; export function isAbortFailure(error: unknown, signal?: AbortSignal): boolean { return Boolean(signal?.aborted || (error instanceof Error && error.name === "AbortError")); } export async function runLocalCompaction(params: { target: ResolvedCompactionTarget; preparation: CompactionPreparation; ctx: Pick; customInstructions?: string; signal?: AbortSignal; compactFn?: CompactFunction; }): Promise { const auth = await params.ctx.modelRegistry.getApiKeyAndHeaders(params.target.model); if (!auth.ok) throw new Error(auth.error); const provider = params.ctx.modelRegistry.getProvider?.(params.target.model.provider); return (params.compactFn ?? compact)( params.preparation, params.target.model, auth.apiKey, auth.headers, params.customInstructions, params.signal, params.target.reasoningEffort, provider?.streamSimple?.bind(provider), auth.env, ); }