From cf76d23535d18e157042a0d4e5a87bf5e4d327fd Mon Sep 17 00:00:00 2001 From: andrewdamelio Date: Fri, 13 Feb 2026 13:12:08 +0000 Subject: [PATCH] feat(cron): support prefix matching for job IDs Allow short ID prefixes to match cron jobs, similar to how Git handles short commit hashes. If the prefix uniquely matches one job, it resolves to that job. If multiple jobs match, an error lists the ambiguous matches. This removes the need to copy full UUIDs when interacting with cron jobs via the tool interface. --- src/cron/service/jobs.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cron/service/jobs.ts b/src/cron/service/jobs.ts index c8fcdce43e3..9b11dbfa883 100644 --- a/src/cron/service/jobs.ts +++ b/src/cron/service/jobs.ts @@ -47,7 +47,20 @@ function assertDeliverySupport(job: Pick) } export function findJobOrThrow(state: CronServiceState, id: string) { - const job = state.store?.jobs.find((j) => j.id === id); + // Exact match first + let job = state.store?.jobs.find((j) => j.id === id); + if (!job) { + // Prefix match (like git short hashes) + const matches = state.store?.jobs.filter((j) => j.id.startsWith(id)) ?? []; + if (matches.length === 1) { + job = matches[0]; + } else if (matches.length > 1) { + const ids = matches.map((j) => j.id).join(", "); + throw new Error( + `ambiguous cron job id prefix "${id}" matches ${matches.length} jobs: ${ids}`, + ); + } + } if (!job) { throw new Error(`unknown cron job id: ${id}`); }