Files
openclaw/src/cron/service.ts
Tyler Yust 38543d8196 fix(cron): consolidate announce delivery, fire-and-forget trigger, and minimal prompt mode (#40204)
* fix(cron): consolidate announce delivery and detach manual runs

* fix: queue detached cron runs (#40204)
2026-03-08 14:46:33 -07:00

61 lines
1.5 KiB
TypeScript

import * as ops from "./service/ops.js";
import { type CronServiceDeps, createCronServiceState } from "./service/state.js";
import type { CronJob, CronJobCreate, CronJobPatch } from "./types.js";
export type { CronEvent, CronServiceDeps } from "./service/state.js";
export class CronService {
private readonly state;
constructor(deps: CronServiceDeps) {
this.state = createCronServiceState(deps);
}
async start() {
await ops.start(this.state);
}
stop() {
ops.stop(this.state);
}
async status() {
return await ops.status(this.state);
}
async list(opts?: { includeDisabled?: boolean }) {
return await ops.list(this.state, opts);
}
async listPage(opts?: ops.CronListPageOptions) {
return await ops.listPage(this.state, opts);
}
async add(input: CronJobCreate) {
return await ops.add(this.state, input);
}
async update(id: string, patch: CronJobPatch) {
return await ops.update(this.state, id, patch);
}
async remove(id: string) {
return await ops.remove(this.state, id);
}
async run(id: string, mode?: "due" | "force") {
return await ops.run(this.state, id, mode);
}
async enqueueRun(id: string, mode?: "due" | "force") {
return await ops.enqueueRun(this.state, id, mode);
}
getJob(id: string): CronJob | undefined {
return this.state.store?.jobs.find((job) => job.id === id);
}
wake(opts: { mode: "now" | "next-heartbeat"; text: string }) {
return ops.wakeNow(this.state, opts);
}
}