File size: 2,319 Bytes
68d7816
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/* oxlint-disable typescript-eslint/no-unsafe-declaration-merging, eslint-plugin-import/namespace -- Event2 class+payload-interface declaration merging is the sanctioned event-declaration idiom. */
import { z } from 'zod';

import type { CronJobOrigin } from '#/agent/contextMemory/types';
import type { CronTask } from '#/features/cron/cronTask';
import { Event2 } from '#/app/event/event2';

export type CronModelState = Map<string, CronTask>;

const cronTaskSchema = z.object({
  id: z.string(),
  cron: z.string(),
  prompt: z.string(),
  createdAt: z.number(),
  recurring: z.boolean().optional(),
  lastFiredAt: z.number().optional(),
  tags: z.record(z.string(), z.string()).optional(),
});

const cronAddSchema = z.object({ task: cronTaskSchema });
const cronDeleteSchema = z.object({ ids: z.array(z.string()) });
const cronCursorSchema = z.object({ id: z.string(), lastFiredAt: z.number() });

export interface CronAddPayload {
  readonly task: CronTask;
}

export class CronAdd extends Event2<CronAddPayload> {
  static override readonly type = 'cron.add';
  static override readonly durable = true;
  static override readonly schema = cronAddSchema;
}
export interface CronAdd extends CronAddPayload {}

export interface CronDeletePayload {
  readonly ids: readonly string[];
}

export class CronDelete extends Event2<CronDeletePayload> {
  static override readonly type = 'cron.delete';
  static override readonly durable = true;
  static override readonly schema = cronDeleteSchema;
}
export interface CronDelete extends CronDeletePayload {}

export interface CronCursorPayload {
  readonly id: string;
  readonly lastFiredAt: number;
}

export class CronCursor extends Event2<CronCursorPayload> {
  static override readonly type = 'cron.cursor';
  static override readonly durable = true;
  static override readonly schema = cronCursorSchema;
}
export interface CronCursor extends CronCursorPayload {}

export interface CronFiredPayload {
  readonly origin: CronJobOrigin;
  readonly prompt: string;
}

export class CronFired extends Event2<CronFiredPayload> {
  static override readonly type = 'cron.fired';
  static override readonly observable = true;
}
export interface CronFired extends CronFiredPayload {}

export interface CronFiredEvent extends CronFiredPayload {
  readonly type: 'cron.fired';
}