@growthub/compiler-core
Version:
Core decomposition engine and orchestration logic for Growthub Marketing OS
1 lines • 51.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/decomposition.ts","../src/orchestration.ts","../src/csi.ts","../src/validation.ts"],"sourcesContent":["/**\n * @growthub/compiler-core\n * Core decomposition engine and orchestration logic for Growthub Marketing OS\n * \n * This package contains the core AT-03 patterns extracted from the production\n * Growthub system for decomposition, orchestration, CSI tracking, and validation.\n */\n\n// Re-export all decomposition utilities\nexport * from './decomposition'\nexport type {\n DecompositionEvent,\n DecompositionResult,\n DecompositionStep,\n BrandContext\n} from './decomposition'\n\n// Re-export all orchestration utilities \nexport * from './orchestration'\nexport type {\n OrchestrationRequest,\n OrchestrationResult,\n OrchestrationStep\n} from './orchestration'\n\n// Re-export all CSI utilities\nexport * from './csi'\nexport type {\n CSI,\n MessageMetadata,\n ThreadExecutionStatus,\n ThreadAnalysis\n} from './csi'\n\n// Re-export all validation utilities\nexport * from './validation'\nexport type {\n PreInitValidation,\n KVLockValidation,\n AuthValidation,\n ValidationResult,\n ValidationError\n} from './validation'\n\n// Package metadata\nexport const PACKAGE_INFO = {\n name: '@growthub/compiler-core',\n version: '1.0.0',\n description: 'Core decomposition engine and orchestration logic for Growthub Marketing OS',\n patterns: [\n 'AT-03 Decomposition Engine',\n 'CSI Coordination',\n 'Pre-Init Validation',\n 'Orchestration Patterns',\n 'Thread State Management'\n ],\n compliance: 'AT-03 PROD STABLE'\n} as const ","/**\n * @growthub/compiler-core/decomposition\n * Core decomposition engine patterns and utilities\n */\n\nimport { z } from 'zod'\nimport type { BrandKitSchema } from '@growthub/schemas'\n\n// 2025 Real-Time CSI Schema for Decomposition Events\nexport const DecompositionEventSchema = z.object({\n threadId: z.string().uuid(),\n userId: z.string().min(1),\n agentType: z.enum(['CONTENT_GENERATION_AGENT', 'TEXT_ANALYSIS_AGENT']),\n prompt: z.string().min(1),\n context: z.object({\n brandKit: z.object({\n id: z.string(),\n brand_name: z.string(),\n colors: z.object({\n primary: z.string().optional(),\n secondary: z.string().optional(),\n accent: z.string().optional(),\n neutral: z.string().optional(),\n }).optional(),\n messaging: z.string().optional(),\n }),\n referenceImages: z.array(z.object({\n url: z.string(),\n type: z.string(),\n description: z.string()\n })).default([]),\n }),\n})\n\nexport type DecompositionEvent = z.infer<typeof DecompositionEventSchema>\n\n// OpenAI Structured Output Schema for Decomposition Validation\nexport const decompositionStructuredOutput = {\n type: \"json_schema\" as const,\n json_schema: {\n name: \"decomposition_event\",\n strict: true,\n schema: {\n type: \"object\",\n properties: {\n threadId: { type: \"string\", format: \"uuid\" },\n userId: { type: \"string\", minLength: 1 },\n agentType: { \n type: \"string\", \n enum: [\"CONTENT_GENERATION_AGENT\", \"TEXT_ANALYSIS_AGENT\"] \n },\n prompt: { type: \"string\", minLength: 1 },\n context: {\n type: \"object\",\n properties: {\n brandKit: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n brand_name: { type: \"string\" },\n colors: {\n type: \"object\",\n properties: {\n primary: { type: \"string\" },\n secondary: { type: \"string\" },\n accent: { type: \"string\" },\n neutral: { type: \"string\" }\n },\n required: [\"primary\", \"secondary\", \"accent\", \"neutral\"],\n additionalProperties: false\n },\n messaging: { type: \"string\" }\n },\n required: [\"id\", \"brand_name\", \"colors\", \"messaging\"],\n additionalProperties: false\n },\n referenceImages: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n url: { type: \"string\" },\n type: { type: \"string\" },\n description: { type: \"string\" }\n },\n required: [\"url\", \"type\", \"description\"],\n additionalProperties: false\n }\n }\n },\n required: [\"brandKit\", \"referenceImages\"],\n additionalProperties: false\n }\n },\n required: [\"threadId\", \"userId\", \"agentType\", \"prompt\", \"context\"],\n additionalProperties: false\n }\n }\n}\n\n// Decomposition Result Types\nexport interface DecompositionResult {\n threadId: string\n userId: string\n agentType: 'CONTENT_GENERATION_AGENT' | 'TEXT_ANALYSIS_AGENT'\n steps: DecompositionStep[]\n metadata: {\n startedAt: string\n completedAt?: string\n duration?: number\n status: 'pending' | 'running' | 'completed' | 'failed'\n }\n}\n\nexport interface DecompositionStep {\n stepName: string\n stepType: 'analysis' | 'planning' | 'coordination' | 'execution'\n status: 'pending' | 'running' | 'completed' | 'failed'\n result?: any\n metadata?: Record<string, any>\n timestamp: string\n}\n\n// Brand Context Transformer\nexport interface BrandContext {\n brand_name: string\n colors: string[]\n messaging: string | null\n referenceImages: Array<{\n url: string\n type: string\n description: string\n }>\n}\n\n/**\n * Transform context from DecompositionEvent to BrandContext format\n */\nexport function transformBrandContext(context: DecompositionEvent['context']): BrandContext {\n return {\n brand_name: context.brandKit.brand_name,\n colors: context.brandKit.colors \n ? Object.values(context.brandKit.colors).filter(Boolean) as string[]\n : [],\n messaging: context.brandKit.messaging || null,\n referenceImages: context.referenceImages,\n }\n}\n\n/**\n * Validate decomposition event data with Zod\n */\nexport function validateDecompositionEvent(data: unknown): DecompositionEvent {\n return DecompositionEventSchema.parse(data)\n}\n\n/**\n * Create decomposition step metadata\n */\nexport function createDecompositionStep(\n stepName: string,\n stepType: DecompositionStep['stepType'],\n metadata?: Record<string, any>\n): DecompositionStep {\n return {\n stepName,\n stepType,\n status: 'pending',\n metadata,\n timestamp: new Date().toISOString()\n }\n}\n\n/**\n * Update decomposition step status\n */\nexport function updateDecompositionStep(\n step: DecompositionStep,\n status: DecompositionStep['status'],\n result?: any,\n metadata?: Record<string, any>\n): DecompositionStep {\n return {\n ...step,\n status,\n result,\n metadata: { ...step.metadata, ...metadata },\n timestamp: new Date().toISOString()\n }\n}\n\n/**\n * Calculate decomposition progress percentage\n */\nexport function calculateDecompositionProgress(steps: DecompositionStep[]): number {\n if (steps.length === 0) return 0\n \n const completedSteps = steps.filter(step => step.status === 'completed').length\n return Math.round((completedSteps / steps.length) * 100)\n}\n\n/**\n * Check if decomposition is complete\n */\nexport function isDecompositionComplete(steps: DecompositionStep[]): boolean {\n return steps.length > 0 && steps.every(step => \n step.status === 'completed' || step.status === 'failed'\n )\n}\n\n/**\n * Get current decomposition step\n */\nexport function getCurrentDecompositionStep(steps: DecompositionStep[]): DecompositionStep | null {\n return steps.find(step => step.status === 'running') || \n steps.find(step => step.status === 'pending') ||\n null\n} ","/**\n * @growthub/compiler-core/orchestration\n * Core orchestration patterns for agent coordination and execution\n */\n\nimport { z } from 'zod'\nimport type { DecompositionEvent, DecompositionStep, BrandContext } from './decomposition'\n\n// Orchestration Request Schema\nexport const OrchestrationRequestSchema = z.object({\n threadId: z.string().uuid(),\n userId: z.string().min(1),\n agentType: z.enum(['CONTENT_GENERATION_AGENT', 'TEXT_ANALYSIS_AGENT']),\n prompt: z.string().min(1),\n brandContext: z.object({\n brand_name: z.string(),\n colors: z.array(z.string()).default([]),\n messaging: z.string().nullable(),\n referenceImages: z.array(z.object({\n url: z.string(),\n type: z.string(), \n description: z.string()\n })).default([])\n }),\n executionPriority: z.enum(['low', 'normal', 'high']).default('normal'),\n maxRetries: z.number().int().min(0).max(3).default(1),\n metadata: z.record(z.any()).optional()\n})\n\nexport type OrchestrationRequest = z.infer<typeof OrchestrationRequestSchema>\n\n// Orchestration Result Types\nexport interface OrchestrationResult {\n success: boolean\n threadId: string\n userId: string\n agentType: string\n orchestrationId: string\n steps: OrchestrationStep[]\n metadata: {\n startedAt: string\n completedAt?: string\n duration?: number\n status: 'pending' | 'running' | 'completed' | 'failed'\n retryCount: number\n }\n error?: {\n message: string\n code: string\n details?: any\n }\n}\n\nexport interface OrchestrationStep {\n stepId: string\n stepName: string\n stepType: 'decomposition' | 'analysis' | 'execution' | 'coordination' | 'completion'\n status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped'\n progress: number\n result?: any\n metadata?: {\n startedAt?: string\n completedAt?: string\n duration?: number\n retryCount?: number\n [key: string]: any\n }\n dependencies?: string[]\n error?: {\n message: string\n code: string\n retry?: boolean\n }\n}\n\n// CSI (Current Step Information) Types\nexport interface CSI {\n completedSteps: string[]\n currentProgress: number\n totalSteps: number\n currentStep: string\n metadata?: Record<string, any>\n}\n\n/**\n * Create orchestration step with metadata\n */\nexport function createOrchestrationStep(\n stepId: string,\n stepName: string,\n stepType: OrchestrationStep['stepType'],\n dependencies: string[] = []\n): OrchestrationStep {\n return {\n stepId,\n stepName,\n stepType,\n status: 'pending',\n progress: 0,\n dependencies,\n metadata: {\n startedAt: new Date().toISOString(),\n retryCount: 0\n }\n }\n}\n\n/**\n * Update orchestration step status and progress\n */\nexport function updateOrchestrationStep(\n step: OrchestrationStep,\n status: OrchestrationStep['status'],\n progress: number,\n result?: any,\n metadata?: Record<string, any>\n): OrchestrationStep {\n const updatedStep = {\n ...step,\n status,\n progress,\n result,\n metadata: {\n ...step.metadata,\n ...metadata,\n }\n }\n\n if (status === 'completed' || status === 'failed') {\n updatedStep.metadata!.completedAt = new Date().toISOString()\n \n if (step.metadata?.startedAt) {\n const duration = Date.now() - new Date(step.metadata.startedAt).getTime()\n updatedStep.metadata!.duration = duration\n }\n }\n\n return updatedStep\n}\n\n/**\n * Check if step dependencies are satisfied\n */\nexport function areDependenciesSatisfied(\n step: OrchestrationStep,\n allSteps: OrchestrationStep[]\n): boolean {\n if (!step.dependencies || step.dependencies.length === 0) {\n return true\n }\n\n return step.dependencies.every(depId => {\n const depStep = allSteps.find(s => s.stepId === depId)\n return depStep?.status === 'completed'\n })\n}\n\n/**\n * Get next executable steps based on dependencies\n */\nexport function getNextExecutableSteps(steps: OrchestrationStep[]): OrchestrationStep[] {\n return steps.filter(step => \n step.status === 'pending' && areDependenciesSatisfied(step, steps)\n )\n}\n\n/**\n * Calculate overall orchestration progress\n */\nexport function calculateOrchestrationProgress(steps: OrchestrationStep[]): number {\n if (steps.length === 0) return 0\n\n const totalProgress = steps.reduce((sum, step) => sum + step.progress, 0)\n return Math.round(totalProgress / steps.length)\n}\n\n/**\n * Check if orchestration is complete\n */\nexport function isOrchestrationComplete(steps: OrchestrationStep[]): boolean {\n return steps.length > 0 && steps.every(step => \n step.status === 'completed' || step.status === 'failed' || step.status === 'skipped'\n )\n}\n\n/**\n * Get orchestration status based on steps\n */\nexport function getOrchestrationStatus(steps: OrchestrationStep[]): 'pending' | 'running' | 'completed' | 'failed' {\n if (steps.length === 0) return 'pending'\n \n const hasRunning = steps.some(step => step.status === 'running')\n if (hasRunning) return 'running'\n \n const hasFailed = steps.some(step => step.status === 'failed')\n if (hasFailed) return 'failed'\n \n const allComplete = steps.every(step => \n step.status === 'completed' || step.status === 'skipped'\n )\n if (allComplete) return 'completed'\n \n return 'pending'\n}\n\n/**\n * Create CSI from orchestration steps\n */\nexport function createCSIFromSteps(steps: OrchestrationStep[]): CSI {\n const completedSteps = steps\n .filter(step => step.status === 'completed')\n .map(step => step.stepName)\n \n const currentStep = steps.find(step => step.status === 'running')\n const progress = calculateOrchestrationProgress(steps)\n\n return {\n completedSteps,\n currentProgress: progress,\n totalSteps: steps.length,\n currentStep: currentStep?.stepName || 'pending',\n metadata: {\n timestamp: new Date().toISOString(),\n stepsStatus: steps.map(step => ({\n stepName: step.stepName,\n status: step.status,\n progress: step.progress\n }))\n }\n }\n}\n\n/**\n * Validate orchestration request\n */\nexport function validateOrchestrationRequest(data: unknown): OrchestrationRequest {\n return OrchestrationRequestSchema.parse(data)\n}\n\n/**\n * Generate unique orchestration ID\n */\nexport function generateOrchestrationId(userId: string, threadId: string): string {\n const timestamp = Date.now()\n return `orch_${userId.slice(0, 8)}_${threadId.slice(0, 8)}_${timestamp}`\n}\n\n/**\n * Create standard orchestration steps for content generation\n */\nexport function createContentGenerationSteps(): OrchestrationStep[] {\n return [\n createOrchestrationStep('intent_analysis', 'Intent Analysis', 'analysis'),\n createOrchestrationStep('brand_analysis', 'Brand Analysis', 'analysis', ['intent_analysis']),\n createOrchestrationStep('complexity_assessment', 'Complexity Assessment', 'analysis', ['intent_analysis', 'brand_analysis']),\n createOrchestrationStep('execution_planning', 'Execution Planning', 'coordination', ['complexity_assessment']),\n createOrchestrationStep('content_generation', 'Content Generation', 'execution', ['execution_planning']),\n createOrchestrationStep('finalization', 'Finalization', 'completion', ['content_generation'])\n ]\n}\n\n/**\n * Create error for orchestration step\n */\nexport function createOrchestrationError(\n message: string,\n code: string,\n retry: boolean = false,\n details?: any\n): OrchestrationStep['error'] {\n return {\n message,\n code,\n retry,\n ...(details && { details })\n }\n} ","/**\n * @growthub/compiler-core/csi\n * Current Step Information (CSI) tracking and coordination utilities\n */\n\nimport { z } from 'zod'\n\n// CSI Schema for validation\nexport const CSISchema = z.object({\n completedSteps: z.array(z.string()).default([]),\n currentProgress: z.number().min(0).max(100).default(0),\n totalSteps: z.number().int().positive().default(4),\n currentStep: z.string().default('pending'),\n metadata: z.record(z.any()).optional()\n})\n\nexport type CSI = z.infer<typeof CSISchema>\n\n// Thread Execution Status Types\nexport type ThreadExecutionStatus = 'PENDING' | 'RUNNING' | 'COMPLETED' | 'FAILED' | 'CANCELLED'\n\n// Message Metadata Schema for CSI tracking\nexport const MessageMetadataSchema = z.object({\n type: z.enum(['agent_step', 'system_message', 'user_message', 'completion']).default('agent_step'),\n step: z.string().optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled']).default('pending'),\n progress: z.number().min(0).max(100).default(0),\n agentType: z.string().optional(),\n toolName: z.string().optional(),\n timestamp: z.string().datetime().default(() => new Date().toISOString()),\n stepNumber: z.number().int().positive().optional(),\n totalSteps: z.number().int().positive().optional(),\n brandContext: z.string().optional(),\n referenceImages: z.number().int().min(0).optional(),\n generatedAssets: z.array(z.object({\n url: z.string(),\n type: z.string(),\n concept: z.string().optional()\n })).default([]),\n executionStats: z.object({\n apiCalls: z.number().int().min(0).optional(),\n storageBytes: z.number().int().min(0).optional(),\n executionTimeMs: z.number().int().min(0).optional()\n }).optional(),\n statusVersion: z.number().int().optional(),\n kvLockReleased: z.boolean().optional(),\n emissionTimestamp: z.string().datetime().optional()\n})\n\nexport type MessageMetadata = z.infer<typeof MessageMetadataSchema>\n\n/**\n * Create CSI with default values\n */\nexport function createCSI(\n currentStep: string = 'pending',\n totalSteps: number = 4,\n metadata?: Record<string, any>\n): CSI {\n return {\n completedSteps: [],\n currentProgress: 0,\n totalSteps,\n currentStep,\n metadata: {\n createdAt: new Date().toISOString(),\n ...metadata\n }\n }\n}\n\n/**\n * Update CSI with new step completion\n */\nexport function updateCSI(\n csi: CSI,\n completedStep: string,\n newCurrentStep: string,\n metadata?: Record<string, any>\n): CSI {\n const completedSteps = [...csi.completedSteps, completedStep]\n const progress = Math.round((completedSteps.length / csi.totalSteps) * 100)\n \n return {\n ...csi,\n completedSteps,\n currentProgress: progress,\n currentStep: newCurrentStep,\n metadata: {\n ...csi.metadata,\n ...metadata,\n updatedAt: new Date().toISOString()\n }\n }\n}\n\n/**\n * Check if CSI represents completed state\n */\nexport function isCSIComplete(csi: CSI): boolean {\n return csi.currentProgress >= 100 || \n csi.completedSteps.length >= csi.totalSteps ||\n csi.currentStep === 'completed'\n}\n\n/**\n * Extract thread execution status from message metadata\n */\nexport function extractStatusFromMetadata(metadata: MessageMetadata | null): ThreadExecutionStatus {\n if (!metadata) return 'PENDING'\n\n // Enhanced completion detection for both final_completion and enhanced_completion\n if (metadata.status === 'completed' && (\n metadata.step === 'final_completion' ||\n metadata.step === 'enhanced_completion'\n )) {\n return 'COMPLETED'\n }\n \n if (metadata.status === 'failed' || metadata.status === 'cancelled') {\n return metadata.status.toUpperCase() as ThreadExecutionStatus\n }\n \n if (metadata.status === 'running') return 'RUNNING'\n \n return 'PENDING'\n}\n\n/**\n * Create step metadata for agent tasks\n */\nexport function createStepMetadata(\n stepName: string,\n agentType: string,\n stepNumber: number,\n totalSteps: number,\n toolName: string,\n additionalMetadata: Partial<MessageMetadata> = {}\n): MessageMetadata {\n return {\n type: 'agent_step',\n step: stepName,\n status: 'pending',\n progress: Math.round((stepNumber / totalSteps) * 100),\n agentType,\n toolName,\n timestamp: new Date().toISOString(),\n stepNumber,\n totalSteps,\n generatedAssets: [],\n ...additionalMetadata\n }\n}\n\n/**\n * Analyze thread state from real-time messages\n */\nexport interface ThreadAnalysis {\n hasRunningSteps: boolean\n hasFinalCompletion: boolean\n shouldSwitchToHistorical: boolean\n shouldEnableRealtime: boolean\n executionStatus: ThreadExecutionStatus\n currentProgress: number\n completedSteps: number\n totalSteps: number\n}\n\nexport function analyzeThreadState(threadMessages: Array<{ \n step?: string\n status?: string\n progress?: number\n stepNumber?: number\n totalSteps?: number\n}>): ThreadAnalysis {\n // Check for running steps\n const hasRunningSteps = threadMessages.some(msg => \n msg.status === 'running' || msg.status === 'pending'\n )\n\n // Enhanced completion detection\n const hasFinalCompletion = threadMessages.some(msg =>\n (msg.step === 'final_completion' || msg.step === 'enhanced_completion') &&\n msg.status === 'completed'\n )\n\n // Calculate progress\n const progressValues = threadMessages\n .map(msg => msg.progress || 0)\n .filter(progress => progress > 0)\n \n const currentProgress = progressValues.length > 0 \n ? Math.max(...progressValues)\n : 0\n\n // Count completed steps\n const completedSteps = threadMessages.filter(msg => \n msg.status === 'completed'\n ).length\n\n // Get total steps\n const totalStepsValues = threadMessages\n .map(msg => msg.totalSteps)\n .filter(Boolean) as number[]\n \n const totalSteps = totalStepsValues.length > 0\n ? Math.max(...totalStepsValues)\n : 4\n\n // Determine execution status\n let executionStatus: ThreadExecutionStatus = 'PENDING'\n if (hasFinalCompletion) {\n executionStatus = 'COMPLETED'\n } else if (hasRunningSteps) {\n executionStatus = 'RUNNING'\n }\n\n return {\n hasRunningSteps,\n hasFinalCompletion,\n shouldSwitchToHistorical: hasFinalCompletion,\n shouldEnableRealtime: !hasFinalCompletion,\n executionStatus,\n currentProgress,\n completedSteps,\n totalSteps\n }\n}\n\n/**\n * Create message metadata with status versioning\n */\nexport function createVersionedMetadata(\n step: string,\n status: MessageMetadata['status'],\n progress: number,\n additionalData: Partial<MessageMetadata> = {}\n): MessageMetadata {\n return {\n type: 'agent_step',\n step,\n status,\n progress,\n timestamp: new Date().toISOString(),\n statusVersion: Date.now(),\n emissionTimestamp: new Date().toISOString(),\n generatedAssets: [],\n ...additionalData\n }\n}\n\n/**\n * Validate CSI data\n */\nexport function validateCSI(data: unknown): CSI {\n return CSISchema.parse(data)\n}\n\n/**\n * Validate message metadata\n */\nexport function validateMessageMetadata(data: unknown): MessageMetadata {\n return MessageMetadataSchema.parse(data)\n}\n\n/**\n * Merge CSI metadata safely\n */\nexport function mergeCSIMetadata(\n existing: CSI,\n updates: Partial<CSI>\n): CSI {\n return {\n ...existing,\n ...updates,\n completedSteps: updates.completedSteps || existing.completedSteps,\n metadata: {\n ...existing.metadata,\n ...updates.metadata,\n updatedAt: new Date().toISOString()\n }\n }\n}\n\n/**\n * Calculate step progress based on sequence\n */\nexport function calculateStepProgress(\n stepNumber: number,\n totalSteps: number,\n isCompleted: boolean = false\n): number {\n if (isCompleted) {\n return Math.round((stepNumber / totalSteps) * 100)\n }\n \n // If running, show progress slightly less than complete\n return Math.round(((stepNumber - 0.1) / totalSteps) * 100)\n} ","/**\n * @growthub/compiler-core/validation\n * Pre-init validation patterns and utilities for AT-03 system\n */\n\nimport { z } from 'zod'\nimport type { DecompositionEvent } from './decomposition'\nimport type { OrchestrationRequest } from './orchestration'\nimport type { CSI, MessageMetadata } from './csi'\n\n// Pre-Init Validation Schema\nexport const PreInitValidationSchema = z.object({\n userId: z.string().uuid('Invalid user ID format'),\n threadId: z.string().uuid('Invalid thread ID format'),\n runId: z.string().uuid('Invalid run ID format').optional(),\n prompt: z.string().min(1, 'Prompt cannot be empty').max(2000, 'Prompt too long'),\n brandKitId: z.string().uuid('Invalid brand kit ID'),\n agentType: z.enum(['CONTENT_GENERATION_AGENT', 'TEXT_ANALYSIS_AGENT']),\n creativeCount: z.number().int().min(1).max(10).default(1),\n referenceImages: z.array(z.object({\n url: z.string().url('Invalid reference image URL'),\n type: z.string().min(1),\n description: z.string().min(1)\n })).max(5, 'Too many reference images').default([]),\n executionPriority: z.enum(['low', 'normal', 'high']).default('normal'),\n maxRetries: z.number().int().min(0).max(3).default(1)\n})\n\nexport type PreInitValidation = z.infer<typeof PreInitValidationSchema>\n\n// KV Lock Validation Schema \nexport const KVLockValidationSchema = z.object({\n userId: z.string().uuid(),\n threadId: z.string().uuid(),\n lockKey: z.string().min(1),\n ttl: z.number().int().positive().default(900000), // 15 minutes\n metadata: z.object({\n runId: z.string().uuid(),\n lockAcquired: z.number().int().positive(),\n processId: z.string().optional(),\n expiresAt: z.string().datetime().optional()\n })\n})\n\nexport type KVLockValidation = z.infer<typeof KVLockValidationSchema>\n\n// Authentication Validation Schema\nexport const AuthValidationSchema = z.object({\n userId: z.string().uuid(),\n hasSession: z.boolean(),\n hasToken: z.boolean(),\n isAdmin: z.boolean().default(false),\n tokenLength: z.number().int().positive().optional(),\n sessionCookieFound: z.boolean().default(false),\n jwtValid: z.boolean().default(false)\n})\n\nexport type AuthValidation = z.infer<typeof AuthValidationSchema>\n\n// Validation Result Types\nexport interface ValidationResult<T = any> {\n success: boolean\n data?: T\n errors?: ValidationError[]\n warnings?: string[]\n metadata?: {\n validatedAt: string\n validationDuration: number\n validator: string\n }\n}\n\nexport interface ValidationError {\n field: string\n message: string\n code: string\n severity: 'error' | 'warning' | 'info'\n context?: Record<string, any>\n}\n\n/**\n * Validate pre-init request data\n */\nexport function validatePreInit(data: unknown): ValidationResult<PreInitValidation> {\n const startTime = performance.now()\n \n try {\n const validatedData = PreInitValidationSchema.parse(data)\n const duration = performance.now() - startTime\n \n return {\n success: true,\n data: validatedData,\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: Math.round(duration),\n validator: 'PreInitValidationSchema'\n }\n }\n } catch (error) {\n const duration = performance.now() - startTime\n \n if (error instanceof z.ZodError) {\n return {\n success: false,\n errors: error.errors.map(err => ({\n field: err.path.join('.'),\n message: err.message,\n code: err.code,\n severity: 'error' as const\n })),\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: Math.round(duration),\n validator: 'PreInitValidationSchema'\n }\n }\n }\n \n return {\n success: false,\n errors: [{\n field: 'unknown',\n message: 'Unknown validation error',\n code: 'UNKNOWN_ERROR',\n severity: 'error'\n }]\n }\n }\n}\n\n/**\n * Validate KV lock metadata\n */\nexport function validateKVLock(data: unknown): ValidationResult<KVLockValidation> {\n const startTime = performance.now()\n \n try {\n const validatedData = KVLockValidationSchema.parse(data)\n const duration = performance.now() - startTime\n \n return {\n success: true,\n data: validatedData,\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: Math.round(duration),\n validator: 'KVLockValidationSchema'\n }\n }\n } catch (error) {\n const duration = performance.now() - startTime\n \n if (error instanceof z.ZodError) {\n return {\n success: false,\n errors: error.errors.map(err => ({\n field: err.path.join('.'),\n message: err.message,\n code: err.code,\n severity: 'error' as const\n })),\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: Math.round(duration),\n validator: 'KVLockValidationSchema'\n }\n }\n }\n \n return {\n success: false,\n errors: [{\n field: 'unknown',\n message: 'KV lock validation failed',\n code: 'KV_VALIDATION_ERROR',\n severity: 'error'\n }]\n }\n }\n}\n\n/**\n * Validate authentication state\n */\nexport function validateAuth(data: unknown): ValidationResult<AuthValidation> {\n const startTime = performance.now()\n \n try {\n const validatedData = AuthValidationSchema.parse(data)\n const duration = performance.now() - startTime\n \n const warnings: string[] = []\n \n // Add warnings for suspicious auth states\n if (!validatedData.hasSession && !validatedData.hasToken) {\n warnings.push('No session or token found - authentication may be invalid')\n }\n \n if (validatedData.hasToken && !validatedData.jwtValid) {\n warnings.push('Token present but JWT validation failed')\n }\n \n return {\n success: true,\n data: validatedData,\n warnings: warnings.length > 0 ? warnings : undefined,\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: Math.round(duration),\n validator: 'AuthValidationSchema'\n }\n }\n } catch (error) {\n const duration = performance.now() - startTime\n \n if (error instanceof z.ZodError) {\n return {\n success: false,\n errors: error.errors.map(err => ({\n field: err.path.join('.'),\n message: err.message,\n code: err.code,\n severity: 'error' as const\n })),\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: Math.round(duration),\n validator: 'AuthValidationSchema'\n }\n }\n }\n \n return {\n success: false,\n errors: [{\n field: 'auth',\n message: 'Authentication validation failed',\n code: 'AUTH_VALIDATION_ERROR',\n severity: 'error'\n }]\n }\n }\n}\n\n/**\n * Validate thread ID format\n */\nexport function validateThreadId(threadId: string): boolean {\n return z.string().uuid().safeParse(threadId).success\n}\n\n/**\n * Validate user ID format\n */\nexport function validateUserId(userId: string): boolean {\n return z.string().uuid().safeParse(userId).success\n}\n\n/**\n * Validate prompt content\n */\nexport function validatePrompt(prompt: string): ValidationResult<string> {\n try {\n const validatedPrompt = z.string()\n .min(1, 'Prompt cannot be empty')\n .max(2000, 'Prompt exceeds maximum length')\n .parse(prompt)\n \n return {\n success: true,\n data: validatedPrompt\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n success: false,\n errors: error.errors.map(err => ({\n field: 'prompt',\n message: err.message,\n code: err.code,\n severity: 'error' as const\n }))\n }\n }\n \n return {\n success: false,\n errors: [{\n field: 'prompt',\n message: 'Invalid prompt format',\n code: 'PROMPT_VALIDATION_ERROR',\n severity: 'error'\n }]\n }\n }\n}\n\n/**\n * Validate reference images\n */\nexport function validateReferenceImages(images: unknown[]): ValidationResult<Array<{ url: string; type: string; description: string }>> {\n try {\n const schema = z.array(z.object({\n url: z.string().url('Invalid image URL'),\n type: z.string().min(1, 'Image type required'),\n description: z.string().min(1, 'Image description required')\n })).max(5, 'Maximum 5 reference images allowed')\n \n const validatedImages = schema.parse(images)\n \n return {\n success: true,\n data: validatedImages\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n success: false,\n errors: error.errors.map(err => ({\n field: `referenceImages.${err.path.join('.')}`,\n message: err.message,\n code: err.code,\n severity: 'error' as const\n }))\n }\n }\n \n return {\n success: false,\n errors: [{\n field: 'referenceImages',\n message: 'Reference images validation failed',\n code: 'IMAGES_VALIDATION_ERROR',\n severity: 'error'\n }]\n }\n }\n}\n\n/**\n * Create validation error\n */\nexport function createValidationError(\n field: string,\n message: string,\n code: string,\n severity: ValidationError['severity'] = 'error',\n context?: Record<string, any>\n): ValidationError {\n return {\n field,\n message,\n code,\n severity,\n context\n }\n}\n\n/**\n * Combine multiple validation results\n */\nexport function combineValidationResults<T>(\n ...results: ValidationResult<T>[]\n): ValidationResult<T[]> {\n const allErrors: ValidationError[] = []\n const allWarnings: string[] = []\n const allData: T[] = []\n \n let allSuccessful = true\n \n for (const result of results) {\n if (!result.success) {\n allSuccessful = false\n if (result.errors) {\n allErrors.push(...result.errors)\n }\n } else if (result.data !== undefined) {\n allData.push(result.data)\n }\n \n if (result.warnings) {\n allWarnings.push(...result.warnings)\n }\n }\n \n return {\n success: allSuccessful,\n data: allSuccessful ? allData : undefined,\n errors: allErrors.length > 0 ? allErrors : undefined,\n warnings: allWarnings.length > 0 ? allWarnings : undefined,\n metadata: {\n validatedAt: new Date().toISOString(),\n validationDuration: 0,\n validator: 'combined'\n }\n }\n} "],"mappings":"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