From bdb13d6c4c1f0dcc5dad76e3569a37300159f73f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 18 Feb 2026 22:49:28 +0000 Subject: [PATCH] refactor(cron-cli): share enable-disable command wiring --- src/cli/cron-cli.test.ts | 22 +++++++ src/cli/cron-cli/register.cron-simple.ts | 78 ++++++++++++------------ 2 files changed, 61 insertions(+), 39 deletions(-) diff --git a/src/cli/cron-cli.test.ts b/src/cli/cron-cli.test.ts index 271b5a61e0..f347f061b9 100644 --- a/src/cli/cron-cli.test.ts +++ b/src/cli/cron-cli.test.ts @@ -79,6 +79,18 @@ async function runCronAddAndGetParams(addArgs: string[]): Promise return (addCall?.[2] ?? {}) as CronAddParams; } +async function runCronSimpleAndGetUpdatePatch( + command: "enable" | "disable", +): Promise<{ enabled?: boolean }> { + resetGatewayMock(); + const program = buildProgram(); + await program.parseAsync(["cron", command, "job-1"], { from: "user" }); + const updateCall = callGatewayFromCli.mock.calls.find((call) => call[0] === "cron.update"); + return ((updateCall?.[2] as { patch?: { enabled?: boolean } } | undefined)?.patch ?? {}) as { + enabled?: boolean; + }; +} + describe("cron cli", () => { it("trims model and thinking on cron add", { timeout: 60_000 }, async () => { resetGatewayMock(); @@ -196,6 +208,16 @@ describe("cron cli", () => { expect(params?.deleteAfterRun).toBe(false); }); + it("cron enable sets enabled=true patch", async () => { + const patch = await runCronSimpleAndGetUpdatePatch("enable"); + expect(patch.enabled).toBe(true); + }); + + it("cron disable sets enabled=false patch", async () => { + const patch = await runCronSimpleAndGetUpdatePatch("disable"); + expect(patch.enabled).toBe(false); + }); + it("sends agent id on cron add", async () => { resetGatewayMock(); diff --git a/src/cli/cron-cli/register.cron-simple.ts b/src/cli/cron-cli/register.cron-simple.ts index e5baa11714..bd8be34d33 100644 --- a/src/cli/cron-cli/register.cron-simple.ts +++ b/src/cli/cron-cli/register.cron-simple.ts @@ -4,6 +4,33 @@ 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 @@ -24,45 +51,18 @@ export function registerCronSimpleCommands(cron: Command) { }), ); - addGatewayClientOptions( - cron - .command("enable") - .description("Enable a cron job") - .argument("", "Job id") - .action(async (id, opts) => { - try { - const res = await callGatewayFromCli("cron.update", opts, { - id, - patch: { enabled: true }, - }); - defaultRuntime.log(JSON.stringify(res, null, 2)); - await warnIfCronSchedulerDisabled(opts); - } catch (err) { - defaultRuntime.error(danger(String(err))); - defaultRuntime.exit(1); - } - }), - ); - - addGatewayClientOptions( - cron - .command("disable") - .description("Disable a cron job") - .argument("", "Job id") - .action(async (id, opts) => { - try { - const res = await callGatewayFromCli("cron.update", opts, { - id, - patch: { enabled: false }, - }); - defaultRuntime.log(JSON.stringify(res, null, 2)); - await warnIfCronSchedulerDisabled(opts); - } 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