Files
openclaw/src/auto-reply/reply/commands-session-store.ts
2026-02-26 14:00:35 +01:00

54 lines
1.6 KiB
TypeScript

import type { SessionEntry } from "../../config/sessions.js";
import { updateSessionStore } from "../../config/sessions.js";
import { applyAbortCutoffToSessionEntry, type AbortCutoff } from "./abort-cutoff.js";
import type { CommandHandler } from "./commands-types.js";
type CommandParams = Parameters<CommandHandler>[0];
export async function persistSessionEntry(params: CommandParams): Promise<boolean> {
if (!params.sessionEntry || !params.sessionStore || !params.sessionKey) {
return false;
}
params.sessionEntry.updatedAt = Date.now();
params.sessionStore[params.sessionKey] = params.sessionEntry;
if (params.storePath) {
await updateSessionStore(params.storePath, (store) => {
store[params.sessionKey] = params.sessionEntry as SessionEntry;
});
}
return true;
}
export async function persistAbortTargetEntry(params: {
entry?: SessionEntry;
key?: string;
sessionStore?: Record<string, SessionEntry>;
storePath?: string;
abortCutoff?: AbortCutoff;
}): Promise<boolean> {
const { entry, key, sessionStore, storePath, abortCutoff } = params;
if (!entry || !key || !sessionStore) {
return false;
}
entry.abortedLastRun = true;
applyAbortCutoffToSessionEntry(entry, abortCutoff);
entry.updatedAt = Date.now();
sessionStore[key] = entry;
if (storePath) {
await updateSessionStore(storePath, (store) => {
const nextEntry = store[key] ?? entry;
if (!nextEntry) {
return;
}
nextEntry.abortedLastRun = true;
applyAbortCutoffToSessionEntry(nextEntry, abortCutoff);
nextEntry.updatedAt = Date.now();
store[key] = nextEntry;
});
}
return true;
}