diff --git a/src/agents/pi-embedded-runner/compact.queued.ts b/src/agents/pi-embedded-runner/compact.queued.ts index 496112256b1..267d48fba7c 100644 --- a/src/agents/pi-embedded-runner/compact.queued.ts +++ b/src/agents/pi-embedded-runner/compact.queued.ts @@ -235,6 +235,7 @@ export async function compactEmbeddedPiSession( } await runContextEngineMaintenance({ contextEngine, + sessionAgentId: agentIds.sessionAgentId, sessionId: postCompactionSessionId, sessionKey: params.sessionKey, sessionFile: postCompactionSessionFile, diff --git a/src/agents/pi-embedded-runner/context-engine-maintenance.ts b/src/agents/pi-embedded-runner/context-engine-maintenance.ts index fe79ca47e47..1a3532c473a 100644 --- a/src/agents/pi-embedded-runner/context-engine-maintenance.ts +++ b/src/agents/pi-embedded-runner/context-engine-maintenance.ts @@ -43,6 +43,7 @@ const DEFERRED_TURN_MAINTENANCE_ABORT_STATE_KEY = Symbol.for( ); type DeferredTurnMaintenanceScheduleParams = { contextEngine: ContextEngine; + sessionAgentId?: string; sessionId: string; sessionKey: string; sessionFile: string; @@ -273,6 +274,7 @@ function promoteTurnMaintenanceTaskVisibility(params: { * context-engine runtime context payload. */ export function buildContextEngineMaintenanceRuntimeContext(params: { + sessionAgentId?: string; sessionId: string; sessionKey?: string; sessionFile: string; @@ -305,6 +307,7 @@ export function buildContextEngineMaintenanceRuntimeContext(params: { const rewriteTranscriptEntriesInFile = async () => await rewriteTranscriptEntriesInSqliteTranscript({ transcriptPath: params.sessionFile, + agentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey: params.sessionKey, config: params.config, @@ -324,6 +327,7 @@ export function buildContextEngineMaintenanceRuntimeContext(params: { async function executeContextEngineMaintenance(params: { contextEngine: ContextEngine; + sessionAgentId?: string; sessionId: string; sessionKey?: string; sessionFile: string; @@ -342,6 +346,7 @@ async function executeContextEngineMaintenance(params: { sessionKey: params.sessionKey, sessionFile: params.sessionFile, runtimeContext: buildContextEngineMaintenanceRuntimeContext({ + sessionAgentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey: params.sessionKey, sessionFile: params.sessionFile, @@ -367,6 +372,7 @@ async function executeContextEngineMaintenance(params: { async function runDeferredTurnMaintenanceWorker(params: { contextEngine: ContextEngine; + sessionAgentId?: string; sessionId: string; sessionKey: string; sessionFile: string; @@ -447,6 +453,7 @@ async function runDeferredTurnMaintenanceWorker(params: { const result = await executeContextEngineMaintenance({ contextEngine: params.contextEngine, + sessionAgentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey: params.sessionKey, sessionFile: params.sessionFile, @@ -572,6 +579,7 @@ function scheduleDeferredTurnMaintenance(params: DeferredTurnMaintenanceSchedule runPromise = enqueueCommandInLane(resolveDeferredTurnMaintenanceLane(sessionKey), async () => runDeferredTurnMaintenanceWorker({ contextEngine: params.contextEngine, + sessionAgentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey, sessionFile: params.sessionFile, @@ -628,6 +636,7 @@ function scheduleDeferredTurnMaintenance(params: DeferredTurnMaintenanceSchedule */ export async function runContextEngineMaintenance(params: { contextEngine?: ContextEngine; + sessionAgentId?: string; sessionId: string; sessionKey?: string; sessionFile: string; @@ -652,6 +661,7 @@ export async function runContextEngineMaintenance(params: { try { scheduleDeferredTurnMaintenance({ contextEngine: params.contextEngine, + sessionAgentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey: params.sessionKey ?? params.sessionId, sessionFile: params.sessionFile, @@ -669,6 +679,7 @@ export async function runContextEngineMaintenance(params: { try { return await executeContextEngineMaintenance({ contextEngine: params.contextEngine, + sessionAgentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey: params.sessionKey, sessionFile: params.sessionFile, diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index df3bd227030..08831cd9bf5 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -1857,6 +1857,7 @@ export async function runEmbeddedPiAgent( adoptCompactionTranscript(compactResult); await runContextEngineMaintenance({ contextEngine, + sessionAgentId, sessionId: activeSessionId, sessionKey: params.sessionKey, sessionFile: activeSessionFile, @@ -1895,6 +1896,7 @@ export async function runEmbeddedPiAgent( cfg: params.config, agentId: sessionAgentId, }), + agentId: sessionAgentId, sessionId: activeSessionId, sessionKey: params.sessionKey, config: params.config, @@ -1957,6 +1959,7 @@ export async function runEmbeddedPiAgent( sessionFile: activeSessionFile, contextWindowTokens, maxCharsOverride: toolResultMaxChars, + agentId: sessionAgentId, sessionId: activeSessionId, sessionKey: params.sessionKey, config: params.config, diff --git a/src/agents/pi-embedded-runner/run/attempt.ts b/src/agents/pi-embedded-runner/run/attempt.ts index b90f5f74a46..4a9af641e77 100644 --- a/src/agents/pi-embedded-runner/run/attempt.ts +++ b/src/agents/pi-embedded-runner/run/attempt.ts @@ -1466,6 +1466,7 @@ export async function runEmbeddedAttempt( runMaintenance: async (contextParams) => await runContextEngineMaintenance({ contextEngine: contextParams.contextEngine as never, + sessionAgentId, sessionId: contextParams.sessionId, sessionKey: contextParams.sessionKey, sessionFile: contextParams.sessionFile, @@ -2593,6 +2594,7 @@ export async function runEmbeddedAttempt( sessionManager: activeSessionManager, contextWindowTokens: contextTokenBudget, maxCharsOverride: toolResultMaxChars, + agentId: sessionAgentId, sessionFile: params.sessionFile, sessionId: params.sessionId, sessionKey: params.sessionKey, @@ -3135,6 +3137,7 @@ export async function runEmbeddedAttempt( sessionManager, contextWindowTokens: contextTokenBudget, maxCharsOverride: toolResultMaxChars, + agentId: sessionAgentId, sessionFile: params.sessionFile, sessionId: params.sessionId, sessionKey: params.sessionKey, @@ -3463,6 +3466,7 @@ export async function runEmbeddedAttempt( runMaintenance: async (contextParams) => await runContextEngineMaintenance({ contextEngine: contextParams.contextEngine as never, + sessionAgentId, sessionId: contextParams.sessionId, sessionKey: contextParams.sessionKey, sessionFile: contextParams.sessionFile, diff --git a/src/agents/pi-embedded-runner/tool-result-truncation.ts b/src/agents/pi-embedded-runner/tool-result-truncation.ts index 8038728695b..b7646dc5480 100644 --- a/src/agents/pi-embedded-runner/tool-result-truncation.ts +++ b/src/agents/pi-embedded-runner/tool-result-truncation.ts @@ -617,6 +617,7 @@ function truncateOversizedToolResultsInExistingSessionManager(params: { sessionManager: SessionManager; contextWindowTokens: number; maxCharsOverride?: number; + agentId?: string; sessionFile?: string; sessionId?: string; sessionKey?: string; @@ -655,6 +656,8 @@ function truncateOversizedToolResultsInExistingSessionManager(params: { }); if (rewriteResult.changed && params.sessionFile) { emitSessionTranscriptUpdate({ + ...(params.agentId ? { agentId: params.agentId } : {}), + ...(params.sessionId ? { sessionId: params.sessionId } : {}), sessionFile: params.sessionFile, sessionKey: params.sessionKey, }); @@ -679,6 +682,7 @@ async function truncateOversizedToolResultsInTranscriptState(params: { sessionFile: string; contextWindowTokens: number; maxCharsOverride?: number; + agentId?: string; sessionId?: string; sessionKey?: string; config?: unknown; @@ -722,6 +726,8 @@ async function truncateOversizedToolResultsInTranscriptState(params: { appendedEntries: rewriteResult.appendedEntries, }); emitSessionTranscriptUpdate({ + ...(params.agentId ? { agentId: params.agentId } : {}), + ...(params.sessionId ? { sessionId: params.sessionId } : {}), sessionFile: params.sessionFile, sessionKey: params.sessionKey, }); @@ -745,6 +751,7 @@ export function truncateOversizedToolResultsInSessionManager(params: { sessionManager: SessionManager; contextWindowTokens: number; maxCharsOverride?: number; + agentId?: string; sessionFile?: string; sessionId?: string; sessionKey?: string; @@ -762,6 +769,7 @@ export async function truncateOversizedToolResultsInSession(params: { sessionFile: string; contextWindowTokens: number; maxCharsOverride?: number; + agentId?: string; sessionId?: string; sessionKey?: string; config?: unknown; @@ -774,6 +782,7 @@ export async function truncateOversizedToolResultsInSession(params: { state, contextWindowTokens, maxCharsOverride: params.maxCharsOverride, + agentId: params.agentId, sessionFile, sessionId: params.sessionId, sessionKey: params.sessionKey, diff --git a/src/agents/pi-embedded-runner/transcript-rewrite.ts b/src/agents/pi-embedded-runner/transcript-rewrite.ts index 5f47379e193..8ebffc53ab6 100644 --- a/src/agents/pi-embedded-runner/transcript-rewrite.ts +++ b/src/agents/pi-embedded-runner/transcript-rewrite.ts @@ -351,6 +351,7 @@ export function rewriteTranscriptEntriesInState(params: { */ export async function rewriteTranscriptEntriesInSqliteTranscript(params: { transcriptPath: string; + agentId?: string; sessionId?: string; sessionKey?: string; request: TranscriptRewriteRequest; @@ -369,6 +370,8 @@ export async function rewriteTranscriptEntriesInSqliteTranscript(params: { appendedEntries: result.appendedEntries, }); emitSessionTranscriptUpdate({ + ...(params.agentId ? { agentId: params.agentId } : {}), + ...(params.sessionId ? { sessionId: params.sessionId } : {}), sessionFile: params.transcriptPath, sessionKey: params.sessionKey, }); diff --git a/src/gateway/server-methods/chat.ts b/src/gateway/server-methods/chat.ts index 7cb52183cc0..7586bf1a65a 100644 --- a/src/gateway/server-methods/chat.ts +++ b/src/gateway/server-methods/chat.ts @@ -1016,6 +1016,8 @@ function extractTranscriptUserText(content: unknown): string | undefined { async function rewriteChatSendUserTurnMediaPaths(params: { transcriptPath: string; + agentId: string; + sessionId: string; sessionKey: string; message: string; savedImages: SavedMedia[]; @@ -1062,6 +1064,8 @@ async function rewriteChatSendUserTurnMediaPaths(params: { }; await rewriteTranscriptEntriesInSqliteTranscript({ transcriptPath: params.transcriptPath, + agentId: params.agentId, + sessionId: params.sessionId, sessionKey: params.sessionKey, config: params.cfg, request: { @@ -2310,6 +2314,8 @@ export const chatHandlers: GatewayRequestHandlers = { transcriptMediaRewriteDone = true; await rewriteChatSendUserTurnMediaPaths({ transcriptPath, + agentId, + sessionId: resolvedSessionId, sessionKey, message: parsedMessage, savedImages: await persistedImagesPromise,