TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { z } from "zod";23export const PROMPT_KIND_VALUES = ["system", "user", "template", "structured"] as const;45export const promptVariableSchema = z.object({6 name: z.string().regex(/^[A-Za-z_][\w.-]*$/).max(64),7 label: z.string().max(80).optional(),8 default: z.string().max(4000).optional(),9 required: z.boolean().optional(),10 options: z.array(z.string().max(200)).max(50).optional(),11});1213/** Body of POST /api/prompts; PATCH uses `.partial()`. */14export const promptBodySchema = z.object({15 kind: z.enum(PROMPT_KIND_VALUES).optional(),16 name: z.string().min(1).max(120),17 description: z.string().max(600).nullable().optional(),18 content: z.string().min(1).max(100_000),19 variables: z.array(promptVariableSchema).max(50).optional(),20 schema: z.record(z.string(), z.unknown()).nullable().optional(),21 folder: z.string().max(60).nullable().optional(),22 tags: z.array(z.string().max(32)).max(12).optional(),23 favorite: z.boolean().optional(),24 defaultModelKey: z.string().max(120).nullable().optional(),25 projectId: z.string().max(64).nullable().optional(),26});27export type PromptBodyInput = z.infer<typeof promptBodySchema>;2829/** Body of POST /api/prompts/:id/use. */30export const promptUseSchema = z.object({ variables: z.record(z.string().max(64), z.string().max(20_000)).optional() }).default({});31