diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index 1d5010679..9cf3383b2 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -367,6 +367,7 @@ export async function runEmbeddedPiAgent( log.warn( `context overflow detected; attempting auto-compaction for ${provider}/${modelId}`, ); + await params.onCompactionStart?.(); overflowCompactionAttempted = true; const compactResult = await compactEmbeddedPiSessionDirect({ sessionId: params.sessionId, diff --git a/src/agents/pi-embedded-runner/run/params.ts b/src/agents/pi-embedded-runner/run/params.ts index ac5753bf6..96d222d44 100644 --- a/src/agents/pi-embedded-runner/run/params.ts +++ b/src/agents/pi-embedded-runner/run/params.ts @@ -86,6 +86,7 @@ export type RunEmbeddedPiAgentParams = { onBlockReplyFlush?: () => void | Promise; blockReplyBreak?: "text_end" | "message_end"; blockReplyChunking?: BlockReplyChunking; + onCompactionStart?: () => void | Promise; onReasoningStream?: (payload: { text?: string; mediaUrls?: string[] }) => void | Promise; onToolResult?: (payload: { text?: string; mediaUrls?: string[] }) => void | Promise; onAgentEvent?: (evt: { stream: string; data: Record }) => void; diff --git a/src/auto-reply/reply/agent-runner-execution.ts b/src/auto-reply/reply/agent-runner-execution.ts index 21732f49f..40f500203 100644 --- a/src/auto-reply/reply/agent-runner-execution.ts +++ b/src/auto-reply/reply/agent-runner-execution.ts @@ -276,6 +276,13 @@ export async function runAgentTurnWithFallback(params: { abortSignal: params.opts?.abortSignal, blockReplyBreak: params.resolvedBlockStreamingBreak, blockReplyChunking: params.blockReplyChunking, + onCompactionStart: async () => { + if (params.opts?.onPartialReply) { + await params.opts.onPartialReply({ + text: "🧹 Compacting context, please wait...", + }); + } + }, onPartialReply: allowPartialStream ? async (payload) => { const textForTyping = await handlePartialForTyping(payload);