@elizaos/plugin-cron 2.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,553 @@
1
+ import { UUID, IAgentRuntime } from '@elizaos/core';
2
+
3
+ /**
4
+ * @module types
5
+ * @description Type definitions for the cron scheduling plugin
6
+ */
7
+
8
+ /**
9
+ * One-time schedule that runs at a specific timestamp
10
+ */
11
+ interface CronScheduleAt {
12
+ kind: "at";
13
+ /** ISO 8601 timestamp for one-time execution */
14
+ at: string;
15
+ }
16
+ /**
17
+ * Interval-based schedule that runs repeatedly at fixed intervals
18
+ */
19
+ interface CronScheduleEvery {
20
+ kind: "every";
21
+ /** Interval in milliseconds (minimum enforced by config) */
22
+ everyMs: number;
23
+ /** Optional anchor timestamp for interval calculation */
24
+ anchorMs?: number;
25
+ }
26
+ /**
27
+ * Cron expression-based schedule supporting standard 5-field or 6-field (with seconds) format
28
+ */
29
+ interface CronScheduleCron {
30
+ kind: "cron";
31
+ /** Cron expression (e.g., "0 9 * * 1-5" for 9am weekdays) */
32
+ expr: string;
33
+ /** IANA timezone (e.g., "America/New_York"). Defaults to UTC if not specified */
34
+ tz?: string;
35
+ }
36
+ /**
37
+ * Union type for all schedule variants
38
+ */
39
+ type CronSchedule = CronScheduleAt | CronScheduleEvery | CronScheduleCron;
40
+ /**
41
+ * Payload that sends a prompt to the agent for processing
42
+ */
43
+ interface CronPayloadPrompt {
44
+ kind: "prompt";
45
+ /** The prompt text to send to the agent */
46
+ text: string;
47
+ /** Optional model override (provider/model format or alias) */
48
+ model?: string;
49
+ /** Thinking level for reasoning models */
50
+ thinking?: "none" | "low" | "medium" | "high";
51
+ /** Execution timeout in seconds (overrides default) */
52
+ timeoutSeconds?: number;
53
+ }
54
+ /**
55
+ * Payload that invokes a specific action by name
56
+ */
57
+ interface CronPayloadAction {
58
+ kind: "action";
59
+ /** Name of the action to invoke (must be registered with the runtime) */
60
+ actionName: string;
61
+ /** Parameters to pass to the action handler */
62
+ params?: Record<string, unknown>;
63
+ /** Optional room context for action execution */
64
+ roomId?: UUID;
65
+ }
66
+ /**
67
+ * Payload that emits a custom event
68
+ */
69
+ interface CronPayloadEvent {
70
+ kind: "event";
71
+ /** Event name to emit */
72
+ eventName: string;
73
+ /** Event payload data */
74
+ payload?: Record<string, unknown>;
75
+ }
76
+ /**
77
+ * Union type for all payload variants
78
+ */
79
+ type CronPayload$1 = CronPayloadPrompt | CronPayloadAction | CronPayloadEvent;
80
+ /**
81
+ * Status of a job execution
82
+ */
83
+ type CronJobStatus = "ok" | "error" | "skipped" | "timeout";
84
+ /**
85
+ * Runtime state of a cron job, tracking execution history and next run
86
+ */
87
+ interface CronJobState {
88
+ /** Next scheduled run time (ms since epoch) */
89
+ nextRunAtMs?: number;
90
+ /** Currently running since (ms since epoch), undefined if not running */
91
+ runningAtMs?: number;
92
+ /** Last completed run time (ms since epoch) */
93
+ lastRunAtMs?: number;
94
+ /** Status of the last run */
95
+ lastStatus?: CronJobStatus;
96
+ /** Error message from the last run if it failed */
97
+ lastError?: string;
98
+ /** Duration of the last run in milliseconds */
99
+ lastDurationMs?: number;
100
+ /** Total number of successful runs */
101
+ runCount: number;
102
+ /** Total number of failed runs */
103
+ errorCount: number;
104
+ }
105
+ /**
106
+ * Complete definition of a cron job
107
+ */
108
+ interface CronJob$1 {
109
+ /** Unique job identifier (UUID v4) */
110
+ id: string;
111
+ /** Human-readable name for the job */
112
+ name: string;
113
+ /** Optional description explaining what the job does */
114
+ description?: string;
115
+ /** Whether the job is active and will be scheduled */
116
+ enabled: boolean;
117
+ /** If true, the job is deleted after successful execution (for one-shot jobs) */
118
+ deleteAfterRun?: boolean;
119
+ /** Timestamp when the job was created (ms since epoch) */
120
+ createdAtMs: number;
121
+ /** Timestamp when the job was last updated (ms since epoch) */
122
+ updatedAtMs: number;
123
+ /** Schedule configuration defining when the job runs */
124
+ schedule: CronSchedule;
125
+ /** Payload configuration defining what the job does */
126
+ payload: CronPayload$1;
127
+ /** Runtime state tracking execution history */
128
+ state: CronJobState;
129
+ /** Optional tags for filtering and grouping jobs */
130
+ tags?: string[];
131
+ /** Optional metadata for extensibility */
132
+ metadata?: Record<string, unknown>;
133
+ }
134
+ /**
135
+ * Input for creating a new cron job (id, timestamps, and state are auto-generated)
136
+ */
137
+ type CronJobCreate$1 = Omit<CronJob$1, "id" | "createdAtMs" | "updatedAtMs" | "state"> & {
138
+ /** Optional partial state to initialize (e.g., for migration) */
139
+ state?: Partial<CronJobState>;
140
+ };
141
+ /**
142
+ * Input for updating an existing cron job (id and createdAt are immutable)
143
+ */
144
+ type CronJobPatch$1 = Partial<Omit<CronJob$1, "id" | "createdAtMs" | "state">> & {
145
+ /** Optional partial state updates */
146
+ state?: Partial<CronJobState>;
147
+ };
148
+ /**
149
+ * Filter options for listing cron jobs
150
+ */
151
+ interface CronJobFilter {
152
+ /** If true, include disabled jobs in results */
153
+ includeDisabled?: boolean;
154
+ /** Filter by tags (matches if job has any of these tags) */
155
+ tags?: string[];
156
+ /** Filter by enabled status */
157
+ enabled?: boolean;
158
+ }
159
+ /**
160
+ * Configuration options for the cron service
161
+ */
162
+ interface CronServiceConfig {
163
+ /** Minimum interval for 'every' schedules in ms (default: 10000) */
164
+ minIntervalMs: number;
165
+ /** Maximum number of jobs per agent (default: 100) */
166
+ maxJobsPerAgent: number;
167
+ /** Default execution timeout in ms (default: 300000 = 5 minutes) */
168
+ defaultTimeoutMs: number;
169
+ /** Whether to run missed jobs on startup (default: false) */
170
+ catchUpMissedJobs: boolean;
171
+ /** How far back to look for missed jobs in ms (default: 3600000 = 1 hour) */
172
+ catchUpWindowMs: number;
173
+ /** Timer check interval for managing job scheduling in ms (default: 1000) */
174
+ timerCheckIntervalMs: number;
175
+ }
176
+ /**
177
+ * Default configuration values
178
+ */
179
+ declare const DEFAULT_CRON_CONFIG: CronServiceConfig;
180
+ /**
181
+ * Payload for cron-related events
182
+ */
183
+ interface CronEventData {
184
+ /** Job ID */
185
+ jobId: string;
186
+ /** Job name */
187
+ jobName: string;
188
+ /** Job schedule */
189
+ schedule: CronSchedule;
190
+ /** Execution result (only for CRON_FIRED event) */
191
+ result?: {
192
+ status: CronJobStatus;
193
+ durationMs: number;
194
+ output?: string;
195
+ error?: string;
196
+ };
197
+ }
198
+ /**
199
+ * Result of executing a cron job
200
+ */
201
+ interface CronExecutionResult {
202
+ /** Whether execution was successful */
203
+ status: CronJobStatus;
204
+ /** Duration of execution in milliseconds */
205
+ durationMs: number;
206
+ /** Output from the execution (for prompt payloads) */
207
+ output?: string;
208
+ /** Error message if execution failed */
209
+ error?: string;
210
+ }
211
+ /**
212
+ * Context provided during job execution
213
+ */
214
+ interface CronExecutionContext {
215
+ /** The job being executed */
216
+ job: CronJob$1;
217
+ /** Timestamp when execution started */
218
+ startedAtMs: number;
219
+ /** Abort signal for timeout handling */
220
+ signal: AbortSignal;
221
+ }
222
+
223
+ /**
224
+ * @module otto/types
225
+ * @description Otto-specific cron type definitions
226
+ *
227
+ * These extend the base plugin-cron types with Otto-specific features:
228
+ * - Session targeting (main vs isolated)
229
+ * - Wake modes (heartbeat integration)
230
+ * - Delivery configuration (channel routing)
231
+ */
232
+
233
+ type CronSessionTarget = "main" | "isolated";
234
+ type CronWakeMode = "next-heartbeat" | "now";
235
+ type CronMessageChannel = string | "last";
236
+ type CronDeliveryMode = "none" | "announce";
237
+ type CronDelivery = {
238
+ mode: CronDeliveryMode;
239
+ channel?: CronMessageChannel;
240
+ to?: string;
241
+ bestEffort?: boolean;
242
+ };
243
+ type CronDeliveryPatch = Partial<CronDelivery>;
244
+ type CronPayload = {
245
+ kind: "systemEvent";
246
+ text: string;
247
+ } | {
248
+ kind: "agentTurn";
249
+ message: string;
250
+ /** Optional model override (provider/model or alias). */
251
+ model?: string;
252
+ thinking?: string;
253
+ timeoutSeconds?: number;
254
+ allowUnsafeExternalContent?: boolean;
255
+ deliver?: boolean;
256
+ channel?: CronMessageChannel;
257
+ to?: string;
258
+ bestEffortDeliver?: boolean;
259
+ };
260
+ type CronPayloadPatch = {
261
+ kind: "systemEvent";
262
+ text?: string;
263
+ } | {
264
+ kind: "agentTurn";
265
+ message?: string;
266
+ model?: string;
267
+ thinking?: string;
268
+ timeoutSeconds?: number;
269
+ allowUnsafeExternalContent?: boolean;
270
+ deliver?: boolean;
271
+ channel?: CronMessageChannel;
272
+ to?: string;
273
+ bestEffortDeliver?: boolean;
274
+ };
275
+ type CronJob = {
276
+ id: string;
277
+ agentId?: string;
278
+ name: string;
279
+ description?: string;
280
+ enabled: boolean;
281
+ deleteAfterRun?: boolean;
282
+ createdAtMs: number;
283
+ updatedAtMs: number;
284
+ schedule: CronSchedule;
285
+ sessionTarget: CronSessionTarget;
286
+ wakeMode: CronWakeMode;
287
+ payload: CronPayload;
288
+ delivery?: CronDelivery;
289
+ state: CronJobState;
290
+ };
291
+ type CronStoreFile = {
292
+ version: 1;
293
+ jobs: CronJob[];
294
+ };
295
+ type CronJobCreate = Omit<CronJob, "id" | "createdAtMs" | "updatedAtMs" | "state"> & {
296
+ state?: Partial<CronJobState>;
297
+ };
298
+ type CronJobPatch = Partial<Omit<CronJob, "id" | "createdAtMs" | "state" | "payload">> & {
299
+ payload?: CronPayloadPatch;
300
+ delivery?: CronDeliveryPatch;
301
+ state?: Partial<CronJobState>;
302
+ };
303
+
304
+ /**
305
+ * @module otto/delivery
306
+ * @description Delivery plan resolution for cron jobs
307
+ */
308
+
309
+ type CronDeliveryPlan = {
310
+ mode: CronDeliveryMode;
311
+ channel: CronMessageChannel;
312
+ to?: string;
313
+ source: "delivery" | "payload";
314
+ requested: boolean;
315
+ };
316
+ declare function resolveCronDeliveryPlan(job: CronJob): CronDeliveryPlan;
317
+
318
+ /**
319
+ * @module otto/detect
320
+ * @description Lightweight Otto payload detection. No heavy dependencies.
321
+ */
322
+ /**
323
+ * Check if a job payload uses Otto-specific kinds (systemEvent or agentTurn)
324
+ * rather than base plugin kinds (prompt, action, event).
325
+ */
326
+ declare function isOttoPayload(payload: Record<string, unknown>): boolean;
327
+
328
+ /**
329
+ * @module otto/executor
330
+ * @description Otto-specific job executor.
331
+ *
332
+ * Handles the two Otto payload kinds:
333
+ *
334
+ * - systemEvent: pushes text to the heartbeat system events queue and
335
+ * optionally triggers an immediate heartbeat wake.
336
+ *
337
+ * - agentTurn: creates an isolated room (cron:<jobId>), sends the
338
+ * message via messageService.handleMessage() so the agent processes
339
+ * it through its normal pipeline, captures the response, and delivers
340
+ * it to the configured channel via sendMessageToTarget().
341
+ *
342
+ * This module follows the same connector pattern as Discord/Telegram –
343
+ * it is an "internal connector" that manufactures Memory objects and
344
+ * calls handleMessage().
345
+ */
346
+
347
+ /**
348
+ * Execute an Otto job. Called from the main CronService when the payload
349
+ * kind is systemEvent or agentTurn.
350
+ */
351
+ declare function executeOttoJob(runtime: IAgentRuntime, job: CronJob, config: CronServiceConfig): Promise<CronExecutionResult>;
352
+
353
+ /**
354
+ * @module otto/job-utils
355
+ * @description Utility functions for cron job manipulation
356
+ *
357
+ * These functions handle job creation, patching, and validation,
358
+ * including backward-compatible legacy delivery field handling.
359
+ */
360
+
361
+ /**
362
+ * Validates that the job spec is valid for the given session target
363
+ */
364
+ declare function assertSupportedJobSpec(job: Pick<CronJob, "sessionTarget" | "payload">): void;
365
+ /**
366
+ * Validates that delivery config is only used with isolated sessions
367
+ */
368
+ declare function assertDeliverySupport(job: Pick<CronJob, "sessionTarget" | "delivery">): void;
369
+ /**
370
+ * Normalizes a name field - trims and ensures non-empty
371
+ */
372
+ declare function normalizeRequiredName(name: unknown): string;
373
+ /**
374
+ * Normalizes an optional text field
375
+ */
376
+ declare function normalizeOptionalText(text: unknown): string | undefined;
377
+ /**
378
+ * Normalizes an optional agent ID
379
+ */
380
+ declare function normalizeOptionalAgentId(agentId: unknown): string | undefined;
381
+ /**
382
+ * Applies a patch to a job in place, handling legacy delivery fields
383
+ */
384
+ declare function applyJobPatch(job: CronJob, patch: CronJobPatch): void;
385
+
386
+ /**
387
+ * @module otto/normalize
388
+ * @description Input normalization utilities for cron jobs
389
+ */
390
+
391
+ type UnknownRecord$1 = Record<string, unknown>;
392
+ type NormalizeOptions = {
393
+ applyDefaults?: boolean;
394
+ /**
395
+ * Optional function to sanitize agent IDs.
396
+ * If not provided, basic trimming is applied.
397
+ */
398
+ sanitizeAgentId?: (raw: string) => string;
399
+ };
400
+ declare function normalizeCronJobInput(raw: unknown, options?: NormalizeOptions): UnknownRecord$1 | null;
401
+ declare function normalizeCronJobCreate(raw: unknown, options?: NormalizeOptions): CronJobCreate | null;
402
+ declare function normalizeCronJobPatch(raw: unknown, options?: NormalizeOptions): CronJobPatch | null;
403
+
404
+ /**
405
+ * @module otto/parse
406
+ * @description Timestamp parsing utilities for cron schedules
407
+ */
408
+ declare function parseAbsoluteTimeMs(input: string): number | null;
409
+
410
+ /**
411
+ * @module otto/payload-migration
412
+ * @description Legacy payload migration utilities
413
+ */
414
+ type UnknownRecord = Record<string, unknown>;
415
+ declare function migrateLegacyCronPayload(payload: UnknownRecord): boolean;
416
+
417
+ /**
418
+ * @module otto/run-log
419
+ * @description Cron job run log management
420
+ */
421
+ type CronRunLogEntry = {
422
+ ts: number;
423
+ jobId: string;
424
+ action: "finished";
425
+ status?: "ok" | "error" | "skipped";
426
+ error?: string;
427
+ summary?: string;
428
+ runAtMs?: number;
429
+ durationMs?: number;
430
+ nextRunAtMs?: number;
431
+ };
432
+ declare function resolveCronRunLogPath(params: {
433
+ storePath: string;
434
+ jobId: string;
435
+ }): string;
436
+ declare function appendCronRunLog(filePath: string, entry: CronRunLogEntry, opts?: {
437
+ maxBytes?: number;
438
+ keepLines?: number;
439
+ }): Promise<void>;
440
+ declare function readCronRunLogEntries(filePath: string, opts?: {
441
+ limit?: number;
442
+ jobId?: string;
443
+ }): Promise<CronRunLogEntry[]>;
444
+
445
+ /**
446
+ * @module otto/store
447
+ * @description Cron job store management
448
+ */
449
+
450
+ /**
451
+ * Resolves the cron store path.
452
+ * If a path is provided, it will be resolved (with ~ expansion).
453
+ * If no path is provided, returns undefined (caller should use their own default).
454
+ */
455
+ declare function resolveCronStorePath(storePath?: string): string | undefined;
456
+ declare function loadCronStore(storePath: string): Promise<CronStoreFile>;
457
+ declare function saveCronStore(storePath: string, store: CronStoreFile): Promise<void>;
458
+
459
+ /**
460
+ * @module otto/validate-timestamp
461
+ * @description Timestamp validation for cron schedules
462
+ */
463
+
464
+ type TimestampValidationError = {
465
+ ok: false;
466
+ message: string;
467
+ };
468
+ type TimestampValidationSuccess = {
469
+ ok: true;
470
+ };
471
+ type TimestampValidationResult = TimestampValidationSuccess | TimestampValidationError;
472
+ /**
473
+ * Validates at timestamps in cron schedules.
474
+ * Rejects timestamps that are:
475
+ * - More than 1 minute in the past
476
+ * - More than 10 years in the future
477
+ */
478
+ declare function validateScheduleTimestamp(schedule: CronSchedule, nowMs?: number): TimestampValidationResult;
479
+
480
+ /**
481
+ * @module otto
482
+ * @description Otto-specific cron utilities and types
483
+ *
484
+ * This module provides Otto-specific extensions to the base plugin-cron:
485
+ * - Extended types with session targeting, wake modes, and delivery
486
+ * - Input normalization with backward compatibility
487
+ * - Job utilities for patching and validation
488
+ * - Run log management
489
+ * - Store utilities
490
+ *
491
+ * @example
492
+ * ```typescript
493
+ * import {
494
+ * normalizeCronJobCreate,
495
+ * normalizeCronJobPatch,
496
+ * validateScheduleTimestamp,
497
+ * } from '@elizaos/plugin-cron/otto';
498
+ *
499
+ * // Normalize input from API/CLI
500
+ * const normalized = normalizeCronJobCreate(rawInput);
501
+ *
502
+ * // Validate timestamp for "at" schedules
503
+ * const validation = validateScheduleTimestamp(schedule);
504
+ * if (!validation.ok) {
505
+ * throw new Error(validation.message);
506
+ * }
507
+ * ```
508
+ */
509
+
510
+ type index_CronDelivery = CronDelivery;
511
+ type index_CronDeliveryMode = CronDeliveryMode;
512
+ type index_CronDeliveryPatch = CronDeliveryPatch;
513
+ type index_CronDeliveryPlan = CronDeliveryPlan;
514
+ type index_CronJob = CronJob;
515
+ type index_CronJobCreate = CronJobCreate;
516
+ type index_CronJobPatch = CronJobPatch;
517
+ type index_CronMessageChannel = CronMessageChannel;
518
+ type index_CronPayload = CronPayload;
519
+ type index_CronPayloadPatch = CronPayloadPatch;
520
+ type index_CronRunLogEntry = CronRunLogEntry;
521
+ type index_CronSchedule = CronSchedule;
522
+ type index_CronSessionTarget = CronSessionTarget;
523
+ type index_CronStoreFile = CronStoreFile;
524
+ type index_CronWakeMode = CronWakeMode;
525
+ type index_TimestampValidationError = TimestampValidationError;
526
+ type index_TimestampValidationResult = TimestampValidationResult;
527
+ type index_TimestampValidationSuccess = TimestampValidationSuccess;
528
+ declare const index_appendCronRunLog: typeof appendCronRunLog;
529
+ declare const index_applyJobPatch: typeof applyJobPatch;
530
+ declare const index_assertDeliverySupport: typeof assertDeliverySupport;
531
+ declare const index_assertSupportedJobSpec: typeof assertSupportedJobSpec;
532
+ declare const index_executeOttoJob: typeof executeOttoJob;
533
+ declare const index_isOttoPayload: typeof isOttoPayload;
534
+ declare const index_loadCronStore: typeof loadCronStore;
535
+ declare const index_migrateLegacyCronPayload: typeof migrateLegacyCronPayload;
536
+ declare const index_normalizeCronJobCreate: typeof normalizeCronJobCreate;
537
+ declare const index_normalizeCronJobInput: typeof normalizeCronJobInput;
538
+ declare const index_normalizeCronJobPatch: typeof normalizeCronJobPatch;
539
+ declare const index_normalizeOptionalAgentId: typeof normalizeOptionalAgentId;
540
+ declare const index_normalizeOptionalText: typeof normalizeOptionalText;
541
+ declare const index_normalizeRequiredName: typeof normalizeRequiredName;
542
+ declare const index_parseAbsoluteTimeMs: typeof parseAbsoluteTimeMs;
543
+ declare const index_readCronRunLogEntries: typeof readCronRunLogEntries;
544
+ declare const index_resolveCronDeliveryPlan: typeof resolveCronDeliveryPlan;
545
+ declare const index_resolveCronRunLogPath: typeof resolveCronRunLogPath;
546
+ declare const index_resolveCronStorePath: typeof resolveCronStorePath;
547
+ declare const index_saveCronStore: typeof saveCronStore;
548
+ declare const index_validateScheduleTimestamp: typeof validateScheduleTimestamp;
549
+ declare namespace index {
550
+ export { type index_CronDelivery as CronDelivery, type index_CronDeliveryMode as CronDeliveryMode, type index_CronDeliveryPatch as CronDeliveryPatch, type index_CronDeliveryPlan as CronDeliveryPlan, type index_CronJob as CronJob, type index_CronJobCreate as CronJobCreate, type index_CronJobPatch as CronJobPatch, type index_CronMessageChannel as CronMessageChannel, type index_CronPayload as CronPayload, type index_CronPayloadPatch as CronPayloadPatch, type index_CronRunLogEntry as CronRunLogEntry, type index_CronSchedule as CronSchedule, type index_CronSessionTarget as CronSessionTarget, type index_CronStoreFile as CronStoreFile, type index_CronWakeMode as CronWakeMode, type index_TimestampValidationError as TimestampValidationError, type index_TimestampValidationResult as TimestampValidationResult, type index_TimestampValidationSuccess as TimestampValidationSuccess, index_appendCronRunLog as appendCronRunLog, index_applyJobPatch as applyJobPatch, index_assertDeliverySupport as assertDeliverySupport, index_assertSupportedJobSpec as assertSupportedJobSpec, index_executeOttoJob as executeOttoJob, index_isOttoPayload as isOttoPayload, index_loadCronStore as loadCronStore, index_migrateLegacyCronPayload as migrateLegacyCronPayload, index_normalizeCronJobCreate as normalizeCronJobCreate, index_normalizeCronJobInput as normalizeCronJobInput, index_normalizeCronJobPatch as normalizeCronJobPatch, index_normalizeOptionalAgentId as normalizeOptionalAgentId, index_normalizeOptionalText as normalizeOptionalText, index_normalizeRequiredName as normalizeRequiredName, index_parseAbsoluteTimeMs as parseAbsoluteTimeMs, index_readCronRunLogEntries as readCronRunLogEntries, index_resolveCronDeliveryPlan as resolveCronDeliveryPlan, index_resolveCronRunLogPath as resolveCronRunLogPath, index_resolveCronStorePath as resolveCronStorePath, index_saveCronStore as saveCronStore, index_validateScheduleTimestamp as validateScheduleTimestamp };
551
+ }
552
+
553
+ export { resolveCronDeliveryPlan as $, type CronPayload as A, type CronPayloadPatch as B, type CronJob$1 as C, DEFAULT_CRON_CONFIG as D, type CronRunLogEntry as E, type CronSessionTarget as F, type CronStoreFile as G, type CronWakeMode as H, type TimestampValidationResult as I, type TimestampValidationSuccess as J, appendCronRunLog as K, applyJobPatch as L, assertDeliverySupport as M, assertSupportedJobSpec as N, executeOttoJob as O, isOttoPayload as P, loadCronStore as Q, migrateLegacyCronPayload as R, normalizeCronJobCreate as S, type TimestampValidationError as T, normalizeCronJobInput as U, normalizeCronJobPatch as V, normalizeOptionalAgentId as W, normalizeOptionalText as X, normalizeRequiredName as Y, parseAbsoluteTimeMs as Z, readCronRunLogEntries as _, type CronServiceConfig as a, resolveCronRunLogPath as a0, resolveCronStorePath as a1, saveCronStore as a2, validateScheduleTimestamp as a3, type CronExecutionResult as b, type CronSchedule as c, type CronJobCreate$1 as d, type CronJobPatch$1 as e, type CronJobFilter as f, type CronEventData as g, type CronExecutionContext as h, type CronJobState as i, type CronJobStatus as j, type CronPayload$1 as k, type CronPayloadAction as l, type CronPayloadEvent as m, type CronPayloadPrompt as n, type CronScheduleAt as o, type CronScheduleCron as p, type CronScheduleEvery as q, index as r, type CronDelivery as s, type CronDeliveryMode as t, type CronDeliveryPatch as u, type CronDeliveryPlan as v, type CronJob as w, type CronJobCreate as x, type CronJobPatch as y, type CronMessageChannel as z };