fix: add type imports and sessionFile checks for learn command

This commit is contained in:
lubolin0925 2026-03-07 15:06:03 +08:00
parent 35159c7a54
commit 6351caaf7e
3 changed files with 39 additions and 33 deletions

View File

@ -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"}`,
);

View File

@ -235,7 +235,7 @@ export async function handleCommands(params: HandleCommandsParams): Promise<Comm
}
// Trigger learning before reset/new commands (after ACP target resolution)
if (targetSessionEntry?.sessionId) {
if (targetSessionEntry?.sessionId && targetSessionEntry.sessionFile) {
const learnResult = await runLearnForSession({
sessionId: targetSessionEntry.sessionId,
sessionKey: targetSessionKey,

View File

@ -1,8 +1,10 @@
import fs from "node:fs/promises";
import path from "node:path";
import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js";
import type { SkillSnapshot } from "../../agents/skills.js";
import type { OpenClawConfig } from "../../config/config.js";
import { logVerbose } from "../../globals.js";
import type { ThinkLevel } from "./directives.js";
const LEARN_SYSTEM_PROMPT = [
"Learning turn.",
@ -68,10 +70,10 @@ export async function runLearnForSession(params: {
workspaceDir: string;
agentDir?: string;
config: OpenClawConfig;
skillsSnapshot?: Record<string, unknown>;
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,