import { z } from "zod"; import { generationSettingsSchema } from "@/lib/chat/schemas"; /** Body of POST /api/projects; PATCH uses `.partial()`. */ export const projectBodySchema = z.object({ name: z.string().min(1).max(80), description: z.string().max(600).nullable().optional(), icon: z.string().max(8).nullable().optional(), color: z.string().max(24).nullable().optional(), instructions: z.string().max(50_000).nullable().optional(), preferredModelKeys: z.array(z.string().min(3).max(120)).max(8).optional(), defaultSettings: generationSettingsSchema.optional(), notes: z.string().max(200_000).nullable().optional(), archived: z.boolean().optional(), sortOrder: z.number().int().min(0).max(100_000).optional(), }); export type ProjectBodyInput = z.infer; /** POST /api/projects/:id actions (move conversations in / out). */ export const projectActionSchema = z.discriminatedUnion("action", [ z.object({ action: z.literal("add-conversations"), conversationIds: z.array(z.string().max(64)).min(1).max(200) }), z.object({ action: z.literal("remove-conversations"), conversationIds: z.array(z.string().max(64)).min(1).max(200) }), ]);