Skip to content

Commit d826819

Browse files
committed
feat(cron): expose --fallbacks option on cron create and edit commands
- The fallbacks field already exists in CronAgentTurnPayloadFields but was never exposed via CLI - Add --fallbacks <models> (comma-separated) to cron add/create - Add --fallbacks <models> and --clear-fallbacks to cron edit Fixes #90302
1 parent 37962aa commit d826819

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

src/cli/cron-cli/register.cron-add.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ export function registerCronAddCommand(cron: Command) {
124124
"Thinking level for agent jobs (off|minimal|low|medium|high|xhigh)",
125125
)
126126
.option("--model <model>", "Model override for agent jobs (provider/model or alias)")
127+
.option("--fallbacks <models>", "Comma-separated fallback models for agent jobs")
127128
.option("--timeout-seconds <n>", "Timeout seconds for agent or command jobs")
128129
.option("--no-output-timeout-seconds <n>", "No-output timeout seconds for command jobs")
129130
.option("--output-max-bytes <n>", "Maximum captured stdout/stderr bytes for command jobs")
@@ -250,6 +251,10 @@ export function registerCronAddCommand(cron: Command) {
250251
outputMaxBytes && Number.isFinite(outputMaxBytes) ? outputMaxBytes : undefined,
251252
};
252253
}
254+
const fallbacks = normalizeOptionalString(opts.fallbacks)
255+
?.split(",")
256+
.map((s) => s.trim())
257+
.filter(Boolean);
253258
return {
254259
kind: "agentTurn" as const,
255260
message,
@@ -259,6 +264,7 @@ export function registerCronAddCommand(cron: Command) {
259264
timeoutSeconds && Number.isFinite(timeoutSeconds) ? timeoutSeconds : undefined,
260265
lightContext: opts.lightContext === true ? true : undefined,
261266
toolsAllow: parseCronToolsAllow(opts.tools),
267+
fallbacks: fallbacks?.length ? fallbacks : undefined,
262268
};
263269
})();
264270

src/cli/cron-cli/register.cron-edit.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ export function registerCronEditCommand(cron: Command) {
117117
"Remove the per-job model override (restore normal cron model precedence)",
118118
false,
119119
)
120+
.option("--fallbacks <models>", "Comma-separated fallback models for agent jobs")
121+
.option("--clear-fallbacks", "Remove the per-job fallback models", false)
120122
.option("--timeout-seconds <n>", "Timeout seconds for agent or command jobs")
121123
.option("--no-output-timeout-seconds <n>", "No-output timeout seconds for command jobs")
122124
.option("--output-max-bytes <n>", "Maximum captured stdout/stderr bytes for command jobs")
@@ -373,6 +375,8 @@ export function registerCronEditCommand(cron: Command) {
373375
typeof opts.message === "string" ||
374376
Boolean(model) ||
375377
Boolean(opts.clearModel) ||
378+
Boolean(opts.fallbacks) ||
379+
Boolean(opts.clearFallbacks) ||
376380
Boolean(thinking) ||
377381
(hasTimeoutSeconds &&
378382
!hasCommandSpecificPayloadField &&
@@ -406,6 +410,15 @@ export function registerCronEditCommand(cron: Command) {
406410
assignIf(payload, "model", model, Boolean(model));
407411
}
408412
assignIf(payload, "thinking", thinking, Boolean(thinking));
413+
if (opts.clearFallbacks) {
414+
payload.fallbacks = null;
415+
} else {
416+
const fallbacks = normalizeOptionalString(opts.fallbacks)
417+
?.split(",")
418+
.map((s: string) => s.trim())
419+
.filter(Boolean);
420+
assignIf(payload, "fallbacks", fallbacks, Boolean(fallbacks?.length));
421+
}
409422
assignIf(payload, "timeoutSeconds", timeoutSeconds, hasTimeoutSeconds);
410423
assignIf(
411424
payload,

0 commit comments

Comments
 (0)