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
JavaScript
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: []
};
};