il2cpp-dump-analyzer-mcp
Version:
Agentic RAG system for analyzing IL2CPP dump.cs files from Unity games
168 lines • 6.34 kB
JavaScript
;
/**
* 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