This commit is contained in:
Hiroki 2026-01-30 17:05:32 +05:30 committed by GitHub
commit dbc32366a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 1 deletions

View File

@ -79,6 +79,9 @@ export function buildEmbeddedExtensionPaths(params: {
const compactionCfg = params.cfg?.agents?.defaults?.compaction; const compactionCfg = params.cfg?.agents?.defaults?.compaction;
setCompactionSafeguardRuntime(params.sessionManager, { setCompactionSafeguardRuntime(params.sessionManager, {
maxHistoryShare: compactionCfg?.maxHistoryShare, maxHistoryShare: compactionCfg?.maxHistoryShare,
// Provide model as fallback for when ctx.model is undefined
// (ExtensionRunner not initialized during direct compaction calls)
model: params.model,
}); });
paths.push(resolvePiExtensionPath("compaction-safeguard")); paths.push(resolvePiExtensionPath("compaction-safeguard"));
} }

View File

@ -1,5 +1,13 @@
import type { Model } from "@mariozechner/pi-ai";
export type CompactionSafeguardRuntimeValue = { export type CompactionSafeguardRuntimeValue = {
maxHistoryShare?: number; maxHistoryShare?: number;
/**
* Fallback model for compaction summarization.
* Used when ctx.model is undefined (ExtensionRunner not initialized).
*/
// biome-ignore lint/suspicious/noExplicitAny: Model API type varies by provider
model?: Model<any>;
}; };
// Session-scoped runtime registry keyed by object identity. // Session-scoped runtime registry keyed by object identity.

View File

@ -146,8 +146,15 @@ export default function compactionSafeguardExtension(api: ExtensionAPI): void {
const toolFailureSection = formatToolFailuresSection(toolFailures); const toolFailureSection = formatToolFailuresSection(toolFailures);
const fallbackSummary = `${FALLBACK_SUMMARY}${toolFailureSection}${fileOpsSummary}`; const fallbackSummary = `${FALLBACK_SUMMARY}${toolFailureSection}${fileOpsSummary}`;
const model = ctx.model; // Use ctx.model if available, otherwise fall back to runtime.model
// (needed when ExtensionRunner is not initialized during direct compaction)
const runtime = getCompactionSafeguardRuntime(ctx.sessionManager);
const model = ctx.model ?? runtime?.model;
if (!model) { if (!model) {
console.warn(
"Compaction safeguard: no model available (ctx.model and runtime.model both undefined). " +
"Returning fallback summary.",
);
return { return {
compaction: { compaction: {
summary: fallbackSummary, summary: fallbackSummary,