(input: {
name: string;
cron: string;
prompt: string;
cwd: string;
model?: string;
allowedTools?: string[];
deliver?: string;
recipe?: string;
})
| 99 | } |
| 100 | |
| 101 | add(input: { |
| 102 | name: string; |
| 103 | cron: string; |
| 104 | prompt: string; |
| 105 | cwd: string; |
| 106 | model?: string; |
| 107 | allowedTools?: string[]; |
| 108 | deliver?: string; |
| 109 | recipe?: string; |
| 110 | }): ScheduleEntry { |
| 111 | const parsed = parseCron(input.cron); // throws on invalid |
| 112 | const next = nextAfter(parsed, new Date()); |
| 113 | const id = uuidv4(); |
| 114 | const allowed = input.allowedTools && input.allowedTools.length > 0 ? JSON.stringify(input.allowedTools) : null; |
| 115 | this.db.prepare(` |
| 116 | INSERT INTO schedules (id, name, cron, prompt, cwd, model, allowed_tools, next_run_at, deliver, recipe) |
| 117 | VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) |
| 118 | `).run(id, input.name, input.cron, input.prompt, input.cwd, input.model ?? null, allowed, next?.toISOString() ?? null, |
| 119 | input.deliver ?? null, input.recipe ?? null); |
| 120 | return this.get(id)!; |
| 121 | } |
| 122 | |
| 123 | remove(idOrName: string): boolean { |
| 124 | const e = this.resolve(idOrName); |
no test coverage detected