diff --git a/src/auto-reply/reply/commands-compact.ts b/src/auto-reply/reply/commands-compact.ts index 2ef77fb77e2..fece4e2a63c 100644 --- a/src/auto-reply/reply/commands-compact.ts +++ b/src/auto-reply/reply/commands-compact.ts @@ -72,29 +72,32 @@ export const handleCompactCommand: CommandHandler = async (params) => { const thinkLevel = params.resolvedThinkLevel ?? (await params.resolveDefaultThinkingLevel()); - const learnResult = await runLearnForSession({ - sessionId, - sessionKey: params.sessionKey, - messageChannel: params.command.channel, - groupId: params.sessionEntry.groupId, - groupChannel: params.sessionEntry.groupChannel, - groupSpace: params.sessionEntry.space, - spawnedBy: params.sessionEntry.spawnedBy, - sessionFile: params.sessionEntry.sessionFile, - workspaceDir: params.workspaceDir, - agentDir: params.agentDir, - config: params.cfg, - skillsSnapshot: params.sessionEntry.skillsSnapshot, - provider: params.provider, - model: params.model, - thinkLevel, - customFocus: "What insights and lessons should be remembered before context compaction?", - senderIsOwner: params.command.senderIsOwner, - ownerNumbers: params.command.ownerList.length > 0 ? params.command.ownerList : undefined, - }); - if (learnResult.ok) { + const learnResult = params.sessionEntry.sessionFile + ? await runLearnForSession({ + sessionId, + sessionKey: params.sessionKey, + messageChannel: params.command.channel, + groupId: params.sessionEntry.groupId, + groupChannel: params.sessionEntry.groupChannel, + groupSpace: params.sessionEntry.space, + spawnedBy: params.sessionEntry.spawnedBy, + sessionFile: params.sessionEntry.sessionFile, + workspaceDir: params.workspaceDir, + agentDir: params.agentDir, + config: params.cfg, + skillsSnapshot: params.sessionEntry.skillsSnapshot, + provider: params.provider, + model: params.model, + thinkLevel, + customFocus: "What insights and lessons should be remembered before context compaction?", + senderIsOwner: params.command.senderIsOwner, + ownerNumbers: params.command.ownerList.length > 0 ? params.command.ownerList : undefined, + }) + : null; + + if (learnResult?.ok) { logVerbose(`Pre-compaction learning completed for session ${params.sessionKey}`); - } else { + } else if (learnResult) { logVerbose( `Pre-compaction learning failed for session ${params.sessionKey}: ${learnResult.message ?? "unknown error"}`, ); diff --git a/src/auto-reply/reply/commands-core.ts b/src/auto-reply/reply/commands-core.ts index f76604ed5e4..abbeacf3fab 100644 --- a/src/auto-reply/reply/commands-core.ts +++ b/src/auto-reply/reply/commands-core.ts @@ -235,7 +235,7 @@ export async function handleCommands(params: HandleCommandsParams): Promise; + skillsSnapshot?: SkillSnapshot; provider: string; model: string; - thinkLevel?: string; + thinkLevel?: ThinkLevel; customFocus?: string; senderIsOwner: boolean; ownerNumbers?: string[]; @@ -85,6 +87,7 @@ export async function runLearnForSession(params: { try { await runEmbeddedPiAgent({ + runId: crypto.randomUUID(), sessionId: params.sessionId, sessionKey: params.sessionKey, sessionFile: resolvedSessionFile, @@ -150,6 +153,13 @@ export const handleLearnCommand = async ( params.ctx.CommandBody ?? params.ctx.RawBody ?? params.ctx.Body, ); + if (!params.sessionEntry.sessionFile) { + return { + shouldContinue: false, + reply: { text: "Learning unavailable (missing session file)." }, + }; + } + const result = await runLearnForSession({ sessionId, sessionKey: params.sessionKey, @@ -158,14 +168,7 @@ export const handleLearnCommand = async ( groupChannel: params.sessionEntry.groupChannel, groupSpace: params.sessionEntry.space, spawnedBy: params.sessionEntry.spawnedBy, - sessionFile: resolveSessionFilePath( - sessionId, - params.sessionEntry, - resolveSessionFilePathOptions({ - agentId: params.agentId, - storePath: params.storePath, - }), - ), + sessionFile: params.sessionEntry.sessionFile, workspaceDir: params.workspaceDir, agentDir: params.agentDir, config: params.cfg,