|
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