File size: 1,051 Bytes
4e23b01 | 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 | import { z } from 'zod';
export const userMessageOriginSchema = z.discriminatedUnion('kind', [
z.object({
kind: z.literal('user'),
cron_id: z.string().min(1).optional(),
schedule: z.string().min(1).optional(),
}),
z.object({
kind: z.literal('cron'),
cron_id: z.string().min(1).optional(),
schedule: z.string().min(1).optional(),
}),
z.object({
kind: z.literal('task'),
task_id: z.string().min(1),
title: z.string(),
body: z.string(),
severity: z.string().optional(),
type: z.string().optional(),
source_kind: z.string().optional(),
source_id: z.string().optional(),
agent_id: z.string().optional(),
raw: z.unknown().optional(),
}),
z.object({
kind: z.literal('skill'),
skill_name: z.string().min(1),
args: z.string().optional(),
trigger: z.string().optional(),
}),
]);
export type UserMessageOrigin = z.infer<typeof userMessageOriginSchema>;
export type TaskNotificationPayload = Omit<Extract<UserMessageOrigin, { kind: 'task' }>, 'kind' | 'task_id'>;
|