fix: start fresh cron sessions each run

This commit is contained in:
Peter Steinberger
2026-01-16 21:27:44 +00:00
parent e9d6869290
commit 16768a9998
6 changed files with 65 additions and 13 deletions

View File

@@ -206,8 +206,10 @@ export async function runCronIsolatedAgentTurn(params: {
const base = `[cron:${params.job.id} ${params.job.name}] ${params.message}`.trim();
const commandBody = base;
const needsSkillsSnapshot = cronSession.isNewSession || !cronSession.sessionEntry.skillsSnapshot;
const existingSnapshot = cronSession.sessionEntry.skillsSnapshot;
const skillsSnapshotVersion = getSkillsSnapshotVersion(workspaceDir);
const needsSkillsSnapshot =
!existingSnapshot || existingSnapshot.version !== skillsSnapshotVersion;
const skillsSnapshot = needsSkillsSnapshot
? buildWorkspaceSkillSnapshot(workspaceDir, {
config: cfgWithAgentDefaults,

View File

@@ -1,12 +1,7 @@
import crypto from "node:crypto";
import type { ClawdbotConfig } from "../../config/config.js";
import {
DEFAULT_IDLE_MINUTES,
loadSessionStore,
resolveStorePath,
type SessionEntry,
} from "../../config/sessions.js";
import { loadSessionStore, resolveStorePath, type SessionEntry } from "../../config/sessions.js";
export function resolveCronSession(params: {
cfg: ClawdbotConfig;
@@ -15,16 +10,13 @@ export function resolveCronSession(params: {
agentId: string;
}) {
const sessionCfg = params.cfg.session;
const idleMinutes = Math.max(sessionCfg?.idleMinutes ?? DEFAULT_IDLE_MINUTES, 1);
const idleMs = idleMinutes * 60_000;
const storePath = resolveStorePath(sessionCfg?.store, {
agentId: params.agentId,
});
const store = loadSessionStore(storePath);
const entry = store[params.sessionKey];
const fresh = entry && params.nowMs - entry.updatedAt <= idleMs;
const sessionId = fresh ? entry.sessionId : crypto.randomUUID();
const systemSent = fresh ? Boolean(entry.systemSent) : false;
const sessionId = crypto.randomUUID();
const systemSent = false;
const sessionEntry: SessionEntry = {
sessionId,
updatedAt: params.nowMs,
@@ -36,6 +28,8 @@ export function resolveCronSession(params: {
sendPolicy: entry?.sendPolicy,
lastChannel: entry?.lastChannel,
lastTo: entry?.lastTo,
lastAccountId: entry?.lastAccountId,
skillsSnapshot: entry?.skillsSnapshot,
};
return { storePath, store, sessionEntry, systemSent, isNewSession: !fresh };
return { storePath, store, sessionEntry, systemSent, isNewSession: true };
}