|
1 | | -import { z } from "zod"; |
2 | | - |
3 | 1 | // Task and Project Interfaces |
4 | 2 | export interface Task { |
5 | 3 | id: string; |
@@ -34,127 +32,6 @@ export const VALID_STATUS_TRANSITIONS = { |
34 | 32 |
|
35 | 33 | export type TaskState = "open" | "pending_approval" | "completed" | "all"; |
36 | 34 |
|
37 | | -// Tool schemas |
38 | | -// Project action schemas |
39 | | -const ListProjectActionSchema = z.object({ |
40 | | - action: z.literal("list"), |
41 | | - arguments: z.object({ |
42 | | - state: z.enum(["open", "pending_approval", "completed", "all"]).optional() |
43 | | - }).strict() |
44 | | -}); |
45 | | - |
46 | | -const CreateProjectActionSchema = z.object({ |
47 | | - action: z.literal("create"), |
48 | | - arguments: z.object({ |
49 | | - initialPrompt: z.string().min(1, "Initial prompt is required"), |
50 | | - projectPlan: z.string().optional(), |
51 | | - tasks: z.array(z.object({ |
52 | | - title: z.string().min(1, "Task title is required"), |
53 | | - description: z.string().min(1, "Task description is required") |
54 | | - })).min(1, "At least one task is required") |
55 | | - }).strict() |
56 | | -}); |
57 | | - |
58 | | -const DeleteProjectActionSchema = z.object({ |
59 | | - action: z.literal("delete"), |
60 | | - arguments: z.object({ |
61 | | - projectId: z.string().min(1, "Project ID is required") |
62 | | - }).strict() |
63 | | -}); |
64 | | - |
65 | | -const AddTasksActionSchema = z.object({ |
66 | | - action: z.literal("add_tasks"), |
67 | | - arguments: z.object({ |
68 | | - projectId: z.string().min(1, "Project ID is required"), |
69 | | - tasks: z.array(z.object({ |
70 | | - title: z.string().min(1, "Task title is required"), |
71 | | - description: z.string().min(1, "Task description is required") |
72 | | - })).min(1, "At least one task is required") |
73 | | - }).strict() |
74 | | -}); |
75 | | - |
76 | | -const FinalizeActionSchema = z.object({ |
77 | | - action: z.literal("finalize"), |
78 | | - arguments: z.object({ |
79 | | - projectId: z.string().min(1, "Project ID is required") |
80 | | - }).strict() |
81 | | -}); |
82 | | - |
83 | | -// Task action schemas |
84 | | -const ListTaskActionSchema = z.object({ |
85 | | - action: z.literal("list"), |
86 | | - arguments: z.object({ |
87 | | - projectId: z.string().min(1, "Project ID is required").optional(), |
88 | | - state: z.enum(["open", "pending_approval", "completed", "all"]).optional() |
89 | | - }).strict() |
90 | | -}); |
91 | | - |
92 | | -const ReadTaskActionSchema = z.object({ |
93 | | - action: z.literal("read"), |
94 | | - arguments: z.object({ |
95 | | - taskId: z.string().min(1, "Task ID is required") |
96 | | - }).strict() |
97 | | -}); |
98 | | - |
99 | | -const UpdateTaskActionSchema = z.object({ |
100 | | - action: z.literal("update"), |
101 | | - arguments: z.object({ |
102 | | - projectId: z.string().min(1, "Project ID is required"), |
103 | | - taskId: z.string().min(1, "Task ID is required"), |
104 | | - title: z.string().optional(), |
105 | | - description: z.string().optional(), |
106 | | - status: z.enum(["not started", "in progress", "done"]).optional(), |
107 | | - completedDetails: z.string().optional() |
108 | | - }).strict().refine( |
109 | | - data => { |
110 | | - if (data.status === 'done' && !data.completedDetails) { |
111 | | - return false; |
112 | | - } |
113 | | - return true; |
114 | | - }, |
115 | | - { |
116 | | - message: 'completedDetails is required when status is "done"', |
117 | | - path: ['completedDetails'] |
118 | | - } |
119 | | - ) |
120 | | -}); |
121 | | - |
122 | | -const DeleteTaskActionSchema = z.object({ |
123 | | - action: z.literal("delete"), |
124 | | - arguments: z.object({ |
125 | | - projectId: z.string().min(1, "Project ID is required"), |
126 | | - taskId: z.string().min(1, "Task ID is required") |
127 | | - }).strict() |
128 | | -}); |
129 | | - |
130 | | -// Combined action schemas using discriminated unions |
131 | | -export const ProjectActionSchema = z.discriminatedUnion("action", [ |
132 | | - ListProjectActionSchema, |
133 | | - CreateProjectActionSchema, |
134 | | - DeleteProjectActionSchema, |
135 | | - AddTasksActionSchema, |
136 | | - FinalizeActionSchema |
137 | | -]); |
138 | | - |
139 | | -export const TaskActionSchema = z.discriminatedUnion("action", [ |
140 | | - ListTaskActionSchema, |
141 | | - ReadTaskActionSchema, |
142 | | - UpdateTaskActionSchema, |
143 | | - DeleteTaskActionSchema |
144 | | -]); |
145 | | - |
146 | | -// The project tool schema |
147 | | -export const ProjectToolSchema = z.object({ |
148 | | - tool: z.literal("project"), |
149 | | - params: ProjectActionSchema |
150 | | -}); |
151 | | - |
152 | | -// The task tool schema |
153 | | -export const TaskToolSchema = z.object({ |
154 | | - tool: z.literal("task"), |
155 | | - params: TaskActionSchema |
156 | | -}); |
157 | | - |
158 | 35 | // Error Types |
159 | 36 | export enum ErrorCategory { |
160 | 37 | Validation = 'VALIDATION', |
|
0 commit comments