UNPKG

vibe-coder-mcp

Version:

Production-ready MCP server with complete agent integration, multi-transport support, and comprehensive development automation tools for AI-assisted workflows.

192 lines (191 loc) 6.52 kB
import { z } from 'zod'; import { taskTypeSchema } from './context-curator.js'; export const packageMetadataSchema = z.object({ generationTimestamp: z.date(), targetDirectory: z.string().min(1, 'Target directory cannot be empty'), originalPrompt: z.string().min(1, 'Original prompt cannot be empty'), refinedPrompt: z.string().min(1, 'Refined prompt cannot be empty'), totalTokenEstimate: z.number().min(0), processingTimeMs: z.number().min(0), taskType: taskTypeSchema, version: z.string().min(1), formatVersion: z.string().min(1), toolVersion: z.string().min(1), codemapCacheUsed: z.boolean(), filesAnalyzed: z.number().min(0), filesIncluded: z.number().min(0) }); export const contentSectionSchema = z.object({ type: z.enum(['full', 'optimized']), startLine: z.number().min(1), endLine: z.number().min(1), content: z.string(), tokenCount: z.number().min(0), description: z.string(), originalTokenCount: z.number().min(0).optional() }).refine(data => data.startLine <= data.endLine, { message: 'Start line must be less than or equal to end line', path: ['startLine'] }); export const functionRelevanceScoreSchema = z.object({ functionName: z.string().min(1, 'Function name cannot be empty'), relevanceScore: z.number().min(0).max(1), confidence: z.number().min(0).max(1), reasoning: z.string().min(1), modificationLikelihood: z.enum(['very_high', 'high', 'medium', 'low', 'very_low']), lineNumbers: z.object({ start: z.number().min(1), end: z.number().min(1) }), complexity: z.enum(['low', 'medium', 'high', 'very_high']), dependencies: z.array(z.string()) }); export const classRelevanceScoreSchema = z.object({ className: z.string().min(1, 'Class name cannot be empty'), relevanceScore: z.number().min(0).max(1), confidence: z.number().min(0).max(1), reasoning: z.string().min(1), modificationLikelihood: z.enum(['very_high', 'high', 'medium', 'low', 'very_low']), lineNumbers: z.object({ start: z.number().min(1), end: z.number().min(1) }), complexity: z.enum(['low', 'medium', 'high', 'very_high']), methods: z.array(z.object({ methodName: z.string().min(1), relevanceScore: z.number().min(0).max(1), modificationLikelihood: z.enum(['very_high', 'high', 'medium', 'low', 'very_low']), lineNumbers: z.object({ start: z.number().min(1), end: z.number().min(1) }) })), properties: z.array(z.object({ propertyName: z.string().min(1), relevanceScore: z.number().min(0).max(1), modificationLikelihood: z.enum(['very_high', 'high', 'medium', 'low', 'very_low']), lineNumber: z.number().min(1) })), inheritance: z.object({ extends: z.string().nullable(), implements: z.array(z.string()) }) }); export const fileRelevanceScoreSchema = z.object({ overall: z.number().min(0).max(1), confidence: z.number().min(0).max(1), modificationLikelihood: z.enum(['very_high', 'high', 'medium', 'low', 'very_low']), reasoning: z.array(z.string()).min(1, 'At least one reasoning item is required'), categories: z.array(z.string()).min(1, 'At least one category is required'), functions: z.array(functionRelevanceScoreSchema).optional(), classes: z.array(classRelevanceScoreSchema).optional(), imports: z.array(z.string()), exports: z.array(z.string()) }); export const processedFileSchema = z.object({ path: z.string().min(1, 'File path cannot be empty'), content: z.string(), isOptimized: z.boolean(), totalLines: z.number().min(0), fullContentLines: z.number().min(0).optional(), optimizedLines: z.number().min(0).optional(), tokenEstimate: z.number().min(0), contentSections: z.array(contentSectionSchema), relevanceScore: fileRelevanceScoreSchema, reasoning: z.string().min(1), language: z.string(), lastModified: z.date(), size: z.number().min(0) }); export const fileReferenceSchema = z.object({ path: z.string().min(1, 'File path cannot be empty'), relevanceScore: z.number().min(0).max(1), reasoning: z.string().min(1), tokenEstimate: z.number().min(0), lastModified: z.date(), size: z.number().min(0), language: z.string() }); export const xmlSerializableSchema = z.object({ toXML: z.function().returns(z.string()), xmlVersion: z.string().optional(), xmlEncoding: z.string().optional() }); export const contextPackageSchema = z.object({ metadata: packageMetadataSchema, refinedPrompt: z.string().min(1), codemapPath: z.string().min(1), highPriorityFiles: z.array(processedFileSchema), mediumPriorityFiles: z.array(processedFileSchema), lowPriorityFiles: z.array(fileReferenceSchema), metaPrompt: z.string().optional() }); export const validatePackageMetadata = (metadata) => { try { packageMetadataSchema.parse(metadata); return true; } catch { return false; } }; export const validateProcessedFile = (file) => { try { processedFileSchema.parse(file); return true; } catch { return false; } }; export const validateFileReference = (reference) => { try { fileReferenceSchema.parse(reference); return true; } catch { return false; } }; export const validateFileRelevanceScore = (score) => { try { fileRelevanceScoreSchema.parse(score); return true; } catch { return false; } }; export const validateContextPackage = (pkg) => { try { contextPackageSchema.parse(pkg); return true; } catch { return false; } }; export const createEmptyContextPackage = (targetDirectory, originalPrompt, taskType = 'general') => { return { metadata: { generationTimestamp: new Date(), targetDirectory, originalPrompt, refinedPrompt: originalPrompt, totalTokenEstimate: 0, processingTimeMs: 0, taskType, version: '1.0.0', formatVersion: '1.0.0', toolVersion: '1.0.0', codemapCacheUsed: false, filesAnalyzed: 0, filesIncluded: 0 }, refinedPrompt: originalPrompt, codemapPath: '', highPriorityFiles: [], mediumPriorityFiles: [], lowPriorityFiles: [] }; };