jobList
uses tcmts.studio.withJobs, which uses node:path
The queue, newest first (status narrows it: queued, running, done, failed or cancelled; 200 at most), and how
many jobs are in each state.
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { jobOfRow, withJobs } from "#codebase/tcmts/studio"; import type { Job } from "#codebase/tcmts/studio"; export function jobList( cb: Codebase, status: string, ): { jobs: Job[]; counts: Record<string, number> } { return ( withJobs(cb, (db) => { const counts = Object.fromEntries( ( db.prepare("SELECT status, count(*) AS n FROM jobs GROUP BY status").all() as { status: string; n: number; }[] ).map((r) => [r.status, r.n]), ); const rows = ( status ? db .prepare("SELECT * FROM jobs WHERE status = ? ORDER BY created DESC LIMIT 200") .all(status) : db.prepare("SELECT * FROM jobs ORDER BY created DESC LIMIT 200").all() ) as Record<string, unknown>[]; return { jobs: rows.map(jobOfRow), counts }; }) ?? { jobs: [], counts: {} } ); }