UNPKG

mushcode-mcp-server

Version:

A specialized Model Context Protocol server for MUSHCODE development assistance. Provides AI-powered code generation, validation, optimization, and examples for MUD development.

144 lines 5.34 kB
/** * compress_mushcode tool implementation * Compresses and minifies MUSHCODE while preserving functionality */ import { MushcodeCompressor } from '../engines/compressor.js'; import { ValidationError } from '../utils/errors.js'; // Tool definition export const compressMushcodeTool = { name: 'compress_mushcode', description: 'Compress and minify MUSHCODE while preserving functionality', inputSchema: { type: 'object', properties: { code: { type: 'string', description: 'MUSHCODE to compress', minLength: 1, maxLength: 50000 }, compression_level: { type: 'string', description: 'Level of compression to apply', enum: ['minimal', 'moderate', 'aggressive'], default: 'moderate' }, preserve_functionality: { type: 'boolean', description: 'Ensure compressed code maintains original functionality', default: true }, remove_comments: { type: 'boolean', description: 'Strip comments for size reduction', default: true }, server_type: { type: 'string', description: 'Target MUD server type for optimization', enum: ['PennMUSH', 'TinyMUSH', 'RhostMUSH', 'TinyMUX', 'MUX'] } }, required: ['code'] } }; /** * Tool handler for compress_mushcode */ export async function compressMushcodeHandler(args, knowledgeBase) { try { // Validate and extract arguments const request = validateAndExtractArgs(args); // Create compressor instance const compressor = new MushcodeCompressor(knowledgeBase); // Compress the code const result = await compressor.compress(request); const toolResult = { compressed_code: result.compressedCode, original_size: result.originalSize, compressed_size: result.compressedSize, compression_ratio: result.compressionRatio, optimizations_applied: result.optimizationsApplied }; if (result.warnings) { toolResult.warnings = result.warnings; } return toolResult; } catch (error) { if (error instanceof ValidationError) { throw error; } throw new Error(`Code compression failed: ${error instanceof Error ? error.message : 'Unknown error'}`); } } /** * Validate and extract arguments from the tool call */ function validateAndExtractArgs(args) { // Validate required fields if (!args['code'] || typeof args['code'] !== 'string') { throw new ValidationError('code is required and must be a string'); } const code = args['code'].trim(); if (code.length === 0) { throw new ValidationError('code cannot be empty'); } if (code.length > 50000) { throw new ValidationError('code is too long (max 50000 characters)'); } // Validate optional fields let compressionLevel = undefined; if (args['compression_level'] !== undefined) { if (typeof args['compression_level'] !== 'string') { throw new ValidationError('compression_level must be a string'); } const validLevels = ['minimal', 'moderate', 'aggressive']; if (!validLevels.includes(args['compression_level'])) { throw new ValidationError(`compression_level must be one of: ${validLevels.join(', ')}`); } compressionLevel = args['compression_level']; } let preserveFunctionality = undefined; if (args['preserve_functionality'] !== undefined) { if (typeof args['preserve_functionality'] !== 'boolean') { throw new ValidationError('preserve_functionality must be a boolean'); } preserveFunctionality = args['preserve_functionality']; } let removeComments = undefined; if (args['remove_comments'] !== undefined) { if (typeof args['remove_comments'] !== 'boolean') { throw new ValidationError('remove_comments must be a boolean'); } removeComments = args['remove_comments']; } let serverType = undefined; if (args['server_type'] !== undefined) { if (typeof args['server_type'] !== 'string') { throw new ValidationError('server_type must be a string'); } const validServerTypes = ['PennMUSH', 'TinyMUSH', 'RhostMUSH', 'TinyMUX', 'MUX']; if (!validServerTypes.includes(args['server_type'])) { throw new ValidationError(`server_type must be one of: ${validServerTypes.join(', ')}`); } serverType = args['server_type']; } const request = { code }; if (compressionLevel !== undefined) { request.compressionLevel = compressionLevel; } if (preserveFunctionality !== undefined) { request.preserveFunctionality = preserveFunctionality; } if (removeComments !== undefined) { request.removeComments = removeComments; } if (serverType !== undefined) { request.serverType = serverType; } return request; } //# sourceMappingURL=compress.js.map