diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 8e0340325..456bb809e 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -222,12 +222,14 @@ export interface CronJob { id: string; name?: string; prompt: string; - schedule: string; - status: "enabled" | "paused" | "error"; + schedule: { kind: string; expr: string; display: string }; + schedule_display: string; + enabled: boolean; + state: string; deliver?: string; last_run_at?: string | null; next_run_at?: string | null; - error?: string | null; + last_error?: string | null; } export interface SkillInfo { diff --git a/web/src/pages/CronPage.tsx b/web/src/pages/CronPage.tsx index 20b13a84a..d4107d42f 100644 --- a/web/src/pages/CronPage.tsx +++ b/web/src/pages/CronPage.tsx @@ -19,10 +19,14 @@ function formatTime(iso?: string | null): string { const STATUS_VARIANT: Record = { enabled: "success", + scheduled: "success", paused: "warning", error: "destructive", + exhausted: "destructive", }; + + export default function CronPage() { const [jobs, setJobs] = useState([]); const [loading, setLoading] = useState(true); @@ -75,7 +79,8 @@ export default function CronPage() { const handlePauseResume = async (job: CronJob) => { try { - if (job.status === "paused") { + const isPaused = job.state === "paused"; + if (isPaused) { await api.resumeCronJob(job.id); showToast(`Resumed "${job.name || job.prompt.slice(0, 30)}"`, "success"); } else { @@ -212,8 +217,8 @@ export default function CronPage() { {job.name || job.prompt.slice(0, 60) + (job.prompt.length > 60 ? "..." : "")} - - {job.status} + + {job.state} {job.deliver && job.deliver !== "local" && ( {job.deliver} @@ -225,12 +230,12 @@ export default function CronPage() {

)}
- {job.schedule} + {job.schedule_display} Last: {formatTime(job.last_run_at)} Next: {formatTime(job.next_run_at)}
- {job.error && ( -

{job.error}

+ {job.last_error && ( +

{job.last_error}

)} @@ -239,11 +244,11 @@ export default function CronPage() {