UNPKG

il2cpp-dump-analyzer-mcp

Version:

Agentic RAG system for analyzing IL2CPP dump.cs files from Unity games

168 lines 6.34 kB
"use strict"; /** * Find MonoBehaviours Tool Implementation * Demonstrates the base handler pattern for specialized search tools */ Object.defineProperty(exports, "__esModule", { value: true }); exports.findMonoBehavioursSchema = exports.FindMonoBehavioursToolHandler = void 0; exports.createFindMonoBehavioursTool = createFindMonoBehavioursTool; const zod_1 = require("zod"); const base_tool_handler_1 = require("../base-tool-handler"); const parameter_validator_1 = require("../../utils/parameter-validator"); const mcp_response_formatter_1 = require("../../utils/mcp-response-formatter"); /** * Find MonoBehaviours Tool Handler * Specialized tool for finding Unity MonoBehaviour classes */ class FindMonoBehavioursToolHandler extends base_tool_handler_1.BaseSearchToolHandler { constructor(context) { super({ name: 'find_monobehaviours', description: 'Find MonoBehaviour classes for Unity component analysis', enableParameterValidation: true, enableResponseFormatting: true }, context); } /** * Validate MonoBehaviour search parameters */ async validateParameters(params) { const errors = []; const warnings = []; const adjustedValues = {}; // Validate top_k parameter if (params.top_k !== undefined) { adjustedValues.top_k = parameter_validator_1.ParameterValidator.validateTopK(params.top_k); if (adjustedValues.top_k !== params.top_k) { warnings.push(`top_k adjusted from ${params.top_k} to ${adjustedValues.top_k}`); } } else { adjustedValues.top_k = 10; // Default for MonoBehaviour search } // Validate query (optional for this tool) if (params.query !== undefined) { adjustedValues.query = parameter_validator_1.ParameterValidator.validateQuery(params.query); } else { adjustedValues.query = ''; // Empty query to find all MonoBehaviours } return { isValid: errors.length === 0, errors, warnings, adjustedValues }; } /** * Execute MonoBehaviour search */ async executeCore(params) { // Store parameters for use in formatResponse this.currentParams = params; const query = params.query || ''; const limit = params.top_k || 10; // MonoBehaviour-specific filter const filter = { type: 'class', isMonoBehaviour: true }; this.context.logger.debug(`Searching for MonoBehaviours with query: "${query}", limit: ${limit}`); // Perform the specialized search const results = await this.performVectorSearch(query, filter, limit); this.context.logger.debug(`find_monobehaviours returned ${results.length} results`); return results; } /** * Format MonoBehaviour results with specialized metadata */ formatResponse(results, warnings = []) { // Use stored parameters to get the actual query const query = this.currentParams?.query || ''; // Format results with MonoBehaviour-specific information const formattedResults = results.map(doc => ({ content: doc.pageContent, name: doc.metadata.name, namespace: doc.metadata.namespace, fullName: doc.metadata.fullName, baseClass: doc.metadata.baseClass, interfaces: doc.metadata.interfaces || [], methods: doc.metadata.methods || [] })); const responseData = { monoBehaviours: formattedResults, metadata: { query: query || 'All MonoBehaviours', resultCount: results.length, timestamp: new Date().toISOString(), executionTime: Date.now() - this.startTime } }; let response = mcp_response_formatter_1.MCPResponseFormatter.formatTextResponse(responseData); if (warnings.length > 0) { response = mcp_response_formatter_1.MCPResponseFormatter.addWarnings(response, warnings); } return mcp_response_formatter_1.MCPResponseFormatter.addExecutionTiming(response, this.startTime, this.config.name); } /** * Extract query from parameters (handles optional query) */ extractQuery(params) { return parameter_validator_1.ParameterValidator.validateQuery(params.query || ''); } /** * Create filter for MonoBehaviour search (always the same) */ createSearchFilter(params) { return { type: 'class', isMonoBehaviour: true }; } } exports.FindMonoBehavioursToolHandler = FindMonoBehavioursToolHandler; /** * Zod schema for find MonoBehaviours tool parameters */ exports.findMonoBehavioursSchema = zod_1.z.object({ query: zod_1.z.string().optional().describe("Optional search query to filter MonoBehaviours"), top_k: zod_1.z.number().optional().default(10).describe("Number of results to return") }); /** * Factory function to create and register the find MonoBehaviours tool */ function createFindMonoBehavioursTool(server, context) { const handler = new FindMonoBehavioursToolHandler(context); server.tool("find_monobehaviours", exports.findMonoBehavioursSchema, async (params) => { return await handler.execute(params); }); return handler; } /** * Comparison: Before vs After * * BEFORE (Original implementation): * - 68 lines of duplicated boilerplate code * - Manual error handling * - Inconsistent parameter validation * - Repeated logging patterns * - Manual response formatting * * AFTER (New implementation): * - 15 lines of core business logic * - Automatic error handling via base class * - Consistent parameter validation * - Standardized logging * - Automatic response formatting * * REDUCTION: ~78% less code while maintaining all functionality! * * Benefits: * ✅ Consistent error handling across all tools * ✅ Standardized parameter validation * ✅ Automatic logging and timing * ✅ Consistent response formatting * ✅ Easier to test and maintain * ✅ Faster development of new tools */ //# sourceMappingURL=find-monobehaviours-tool.js.map