/**
* Validation schemas for task tools.
* @module
*/
import { z } from "zod";
// Shared enums
const taskMarker = z.enum(["TODO", "DOING", "DONE", "CANCELED"]);
const taskPriority = z.enum(["A", "B", "C"]);
const isoDate = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format");
// get_tasks - all optional
export const getTasksSchema = z.object({
pageName: z.string().optional(),
markers: z.array(taskMarker).optional(),
});
// create_task - pageName and content required
export const createTaskSchema = z.object({
pageName: z.string().min(1, "Page name is required"),
content: z.string().min(1, "Task content is required"),
priority: taskPriority.optional(),
deadline: isoDate.optional(),
scheduled: isoDate.optional(),
});
// mark_task - uuid and marker required
export const markTaskSchema = z.object({
uuid: z.string().min(1, "UUID is required"),
marker: taskMarker,
});
// mark_tasks - uuids and marker required
export const markTasksSchema = z.object({
uuids: z.array(z.string().min(1)).min(1, "At least one UUID is required"),
marker: taskMarker,
});
// set_task_priority - uuid required, priority can be null
export const setTaskPrioritySchema = z.object({
uuid: z.string().min(1, "UUID is required"),
priority: taskPriority.nullable(),
});
// set_task_deadline - uuid required, date can be null
export const setTaskDeadlineSchema = z.object({
uuid: z.string().min(1, "UUID is required"),
date: isoDate.nullable(),
});
// set_task_scheduled - uuid required, date can be null
export const setTaskScheduledSchema = z.object({
uuid: z.string().min(1, "UUID is required"),
date: isoDate.nullable(),
});
// search_tasks - query required
export const searchTasksSchema = z.object({
query: z.string().min(1, "Search query is required"),
markers: z.array(taskMarker).optional(),
pageName: z.string().optional(),
});
// get_overdue_tasks - no params
export const getOverdueTasksSchema = z.object({});
// get_tasks_due_soon - all optional
export const getTasksDueSoonSchema = z.object({
days: z.number().int().positive().optional(),
markers: z.array(taskMarker).optional(),
});
// get_task_stats - all optional
export const getTaskStatsSchema = z.object({
pageName: z.string().optional(),
});