import type { TriggerType } from "./agent/prompts"; import type { AgentTurnResult } from "./agent/runner"; export interface RunState { id: string; status: "pending" | "running" | "completed" | "failed"; trigger: TriggerType; result?: AgentTurnResult; createdAt: string; completedAt?: string; } const runs = new Map(); const ONE_HOUR_MS = 60 * 60 * 1000; function pruneOldRuns(): void { const cutoff = Date.now() - ONE_HOUR_MS; for (const [id, run] of runs) { if (new Date(run.createdAt).getTime() < cutoff) { runs.delete(id); } } } export function createRun(trigger: TriggerType): RunState { pruneOldRuns(); const run: RunState = { id: crypto.randomUUID(), status: "pending", trigger, createdAt: new Date().toISOString(), }; runs.set(run.id, run); return run; } export function updateRun(id: string, update: Partial): void { const run = runs.get(id); if (!run) return; Object.assign(run, update); if (update.status === "completed" || update.status === "failed") { run.completedAt = new Date().toISOString(); } } export function getRun(id: string): RunState | undefined { return runs.get(id); }