Files
openclaw/src/gateway/server-methods/cron-error-classification.ts
Peter Steinberger a6768d9de5 feat(cron): event triggers — polled condition-watcher scripts via code mode (#101195)
* feat(cron): add headless code-mode driver and trigger-script evaluator

Part A of cron event triggers: runCodeModeScriptHeadless runs a script
to completion (exec/settle/resume, no snapshots, no session), plus the
cron-facing evaluator with per-job tool catalog cache, semaphore, 16KB
state cap, and closed failure taxonomy.

* fix(cron): correct trigger-script bootstrap flags and cache narrowing

* feat(cron): add event triggers (polled condition-watcher scripts)

Part B: trigger field on cron jobs gated by cron.triggers.enabled;
timer evaluates the script each due tick, quiet ticks leave no run
history, fired runs append the script message to the payload; once
semantics, min-interval floor, SQLite columns, RPC/CLI/agent-tool
surfaces, and docs.

* fix(cron): propagate triggerEval through startup catch-up outcomes

* fix(cron): honor cron staggering on quiet trigger ticks; fix trigger test types

* fix(cron): reject with Error reason in trigger-script abort test

* fix(cron): regenerate protocol/docs/snapshot artifacts and break madge cycle for trigger types

CI fixes for #101195: trigger evaluator result types move to the cron
types leaf (madge cycle), cron tool schema inventory gains trigger,
Swift protocol bindings + docs map + Linux prompt snapshots regenerated.

* fix(cron): drop underscore-dangle names in trigger code sync assert

* fix(cron): adopt registerHeadlessToolSearchCatalog after tool-search symbol localization

Upstream #101831 made registerToolSearchCatalog module-private; fold the
headless ref-only catalog registration into one public seam.
2026-07-07 19:12:38 +01:00

31 lines
1.6 KiB
TypeScript

import { formatErrorMessage } from "../../infra/errors.js";
export function isCronInvalidRequestError(err: unknown): boolean {
const message = formatErrorMessage(err);
return (
message.startsWith("unknown cron job id:") ||
message.startsWith("cron job already exists:") ||
message.includes("cron job id must not be blank") ||
message.includes("cron declarationKey") ||
message.includes("cron displayName") ||
message.includes("cron triggers are disabled") ||
message.includes("cron triggers require") ||
message.includes("cron trigger every interval") ||
message.includes("cron job is missing sessionTarget") ||
message.includes("invalid cron sessionTarget session id") ||
message.includes('main cron jobs require payload.kind="systemEvent"') ||
message.includes('isolated/current/session cron jobs require payload.kind="agentTurn"') ||
message.includes("has no upcoming run time and would never fire") ||
message.includes('sessionTarget "main" is only valid for the default agent') ||
message.includes('cron.update payload.kind="systemEvent" requires text') ||
message.includes('cron.update payload.kind="agentTurn" requires message') ||
message.includes("cron webhook delivery requires") ||
message.includes("delivery.channel") ||
message.includes("delivery.failureDestination.channel") ||
message.includes("cron completion destination webhook requires") ||
message.includes("cron failure destination webhook requires") ||
message.includes("cron channel delivery config is only supported") ||
message.includes("cron delivery.failureDestination is only supported")
);
}