import { z } from 'zod' export const modelSchema = z.object({ providerId: z.string().min(1), label: z.string().default(''), modelId: z.string().min(1), temperature: z.number().min(0).max(2).nullable().default(null), topP: z.number().min(0).max(1).nullable().default(null), maxOutputTokens: z.number().int().positive().nullable().default(null) }) export const requirementsSchema = z.object({ style: z.string(), language: z.string(), pov: z.string(), narration: z.string(), wordsPerChapter: z.number().int().min(100).max(50000), extra: z.string() }) export const settingsSchema = z.object({ autoMode: z.boolean(), pauseAfterBrief: z.boolean(), allowEditorCreateWriters: z.boolean(), prevTailChars: z.number().int().min(0).max(20000), recentSummaryCount: z.number().int().min(0).max(50), maxContinuations: z.number().int().min(0).max(10), autoChapterLimit: z.number().int().min(1).max(200) }) export const memorySchema = z.object({ characterStates: z.array(z.object({ name: z.string(), state: z.string() })), foreshadowing: z.array(z.object({ text: z.string(), status: z.enum(['open', 'resolved']), chapter: z.number(), resolvedChapter: z.number().optional() })), timeline: z.array(z.object({ chapter: z.number(), event: z.string() })) }) export const characterSchema = z.object({ name: z.string().min(1), identity: z.string().default(''), description: z.string().default(''), personality: z.string().default(''), speechExamples: z.string().default(''), notes: z.string().default(''), sortOrder: z.number().int().default(0) }) export const loreSchema = z.object({ title: z.string().default(''), keys: z.array(z.string()).default([]), content: z.string().default(''), constant: z.boolean().default(false), enabled: z.boolean().default(true), sortOrder: z.number().int().default(100) }) export const agentSchema = z.object({ role: z.enum(['editor', 'writer', 'summarizer']), name: z.string().min(1), modelId: z.string().nullable().default(null), systemPrompt: z.string().default(''), styleNotes: z.string().default(''), enabled: z.boolean().default(true) })