import type { Command } from "commander"; import { danger } from "../../globals.js"; import { defaultRuntime } from "../../runtime.js"; import { addGatewayClientOptions, callGatewayFromCli } from "../gateway-rpc.js"; import { warnIfCronSchedulerDisabled } from "./shared.js"; function registerCronToggleCommand(params: { cron: Command; name: "enable" | "disable"; description: string; enabled: boolean; }) { addGatewayClientOptions( params.cron .command(params.name) .description(params.description) .argument("", "Job id") .action(async (id, opts) => { try { const res = await callGatewayFromCli("cron.update", opts, { id, patch: { enabled: params.enabled }, }); defaultRuntime.log(JSON.stringify(res, null, 2)); await warnIfCronSchedulerDisabled(opts); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }), ); } export function registerCronSimpleCommands(cron: Command) { addGatewayClientOptions( cron .command("rm") .alias("remove") .alias("delete") .description("Remove a cron job") .argument("", "Job id") .option("--json", "Output JSON", false) .action(async (id, opts) => { try { const res = await callGatewayFromCli("cron.remove", opts, { id }); defaultRuntime.log(JSON.stringify(res, null, 2)); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }), ); registerCronToggleCommand({ cron, name: "enable", description: "Enable a cron job", enabled: true, }); registerCronToggleCommand({ cron, name: "disable", description: "Disable a cron job", enabled: false, }); addGatewayClientOptions( cron .command("runs") .description("Show cron run history (JSONL-backed)") .requiredOption("--id ", "Job id") .option("--limit ", "Max entries (default 50)", "50") .action(async (opts) => { try { const limitRaw = Number.parseInt(String(opts.limit ?? "50"), 10); const limit = Number.isFinite(limitRaw) && limitRaw > 0 ? limitRaw : 50; const id = String(opts.id); const res = await callGatewayFromCli("cron.runs", opts, { id, limit, }); defaultRuntime.log(JSON.stringify(res, null, 2)); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }), ); addGatewayClientOptions( cron .command("run") .description("Run a cron job now (debug)") .argument("", "Job id") .option("--due", "Run only when due (default behavior in older versions)", false) .action(async (id, opts) => { try { const res = await callGatewayFromCli("cron.run", opts, { id, mode: opts.due ? "due" : "force", }); defaultRuntime.log(JSON.stringify(res, null, 2)); const result = res as { ok?: boolean; ran?: boolean } | undefined; defaultRuntime.exit(result?.ok && result?.ran ? 0 : 1); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }), ); }