Spracherkennung für: .ts vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]
import type { LiveSessionModelSelection } from "../../agents/live-model-switch.js";
import type { SkillSnapshot } from "../../agents/skills.js";
import type { SessionEntry } from "../../config/sessions.js";
import type { resolveCronSession } from "./session.js";
type MutableSessionStore = Record<string, SessionEntry>;
export type MutableCronSessionEntry = SessionEntry;
export type MutableCronSession = ReturnType<typeof resolveCronSession> & {
store: MutableSessionStore;
sessionEntry: MutableCronSessionEntry;
};
export type CronLiveSelection = LiveSessionModelSelection;
type UpdateSessionStore = (
storePath: string,
update: (store: MutableSessionStore) => void,
) => Promise<void>;
export type PersistCronSessionEntry = () => Promise<void>;
function cloneSessionEntry(entry: MutableCronSessionEntry): MutableCronSessionEntry {
return globalThis.structuredClone(entry);
}
export function createPersistCronSessionEntry(params: {
isFastTestEnv: boolean;
cronSession: MutableCronSession;
agentSessionKey: string;
runSessionKey: string;
updateSessionStore: UpdateSessionStore;
}): PersistCronSessionEntry {
return async () => {
if (params.isFastTestEnv) {
return;
}
const runSessionEntry = cloneSessionEntry(params.cronSession.sessionEntry);
params.cronSession.store[params.agentSessionKey] = params.cronSession.sessionEntry;
if (params.runSessionKey !== params.agentSessionKey) {
params.cronSession.store[params.runSessionKey] = runSessionEntry;
}
await params.updateSessionStore(params.cronSession.storePath, (store) => {
store[params.agentSessionKey] = params.cronSession.sessionEntry;
if (params.runSessionKey !== params.agentSessionKey) {
store[params.runSessionKey] = runSessionEntry;
}
});
};
}
export async function persistCronSkillsSnapshotIfChanged(params: {
isFastTestEnv: boolean;
cronSession: MutableCronSession;
skillsSnapshot: SkillSnapshot;
nowMs: number;
persistSessionEntry: PersistCronSessionEntry;
}) {
if (
params.isFastTestEnv ||
params.skillsSnapshot === params.cronSession.sessionEntry.skillsSnapshot
) {
return;
}
params.cronSession.sessionEntry = {
...params.cronSession.sessionEntry,
updatedAt: params.nowMs,
skillsSnapshot: params.skillsSnapshot,
};
await params.persistSessionEntry();
}
export function markCronSessionPreRun(params: {
entry: MutableCronSessionEntry;
provider: string;
model: string;
}) {
params.entry.modelProvider = params.provider;
params.entry.model = params.model;
params.entry.systemSent = true;
}
export function syncCronSessionLiveSelection(params: {
entry: MutableCronSessionEntry;
liveSelection: CronLiveSelection;
}) {
params.entry.modelProvider = params.liveSelection.provider;
params.entry.model = params.liveSelection.model;
if (params.liveSelection.authProfileId) {
params.entry.authProfileOverride = params.liveSelection.authProfileId;
params.entry.authProfileOverrideSource = params.liveSelection.authProfileIdSource;
if (params.liveSelection.authProfileIdSource === "auto") {
params.entry.authProfileOverrideCompactionCount = params.entry.compactionCount ?? 0;
} else {
delete params.entry.authProfileOverrideCompactionCount;
}
return;
}
delete params.entry.authProfileOverride;
delete params.entry.authProfileOverrideSource;
delete params.entry.authProfileOverrideCompactionCount;
}
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet am 2026-04-27)
¤
*© Formatika GbR, Deutschland