TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { z } from "zod";2import { generationSettingsSchema } from "@/lib/chat/schemas";34/** Body of POST /api/projects; PATCH uses `.partial()`. */5export const projectBodySchema = z.object({6 name: z.string().min(1).max(80),7 description: z.string().max(600).nullable().optional(),8 icon: z.string().max(8).nullable().optional(),9 color: z.string().max(24).nullable().optional(),10 instructions: z.string().max(50_000).nullable().optional(),11 preferredModelKeys: z.array(z.string().min(3).max(120)).max(8).optional(),12 defaultSettings: generationSettingsSchema.optional(),13 notes: z.string().max(200_000).nullable().optional(),14 archived: z.boolean().optional(),15 sortOrder: z.number().int().min(0).max(100_000).optional(),16});17export type ProjectBodyInput = z.infer<typeof projectBodySchema>;1819/** POST /api/projects/:id actions (move conversations in / out). */20export const projectActionSchema = z.discriminatedUnion("action", [21 z.object({ action: z.literal("add-conversations"), conversationIds: z.array(z.string().max(64)).min(1).max(200) }),22 z.object({ action: z.literal("remove-conversations"), conversationIds: z.array(z.string().max(64)).min(1).max(200) }),23]);24