execute method
Execute the tool with the given input.
Implementation
@override
Future<ToolResult> execute(Map<String, dynamic> input) async {
final code = input['code'] as String?;
if (code == null || code.trim().isEmpty) {
return ToolResult.error('Error: No se proporcionó código JavaScript para evaluar.');
}
// Mock evaluation for unit tests to prevent headless runner FFI segmentation faults
if (Platform.environment.containsKey('FLUTTER_TEST')) {
return _executeMock(code);
}
JavascriptRuntime? jsRuntime;
try {
// Create a fresh isolated JavaScript environment
jsRuntime = getJavascriptRuntime();
// Evaluate within sandbox
final result = jsRuntime.evaluate(code);
if (result.isError) {
return ToolResult.error('Error de Ejecución en Sandbox:\n${result.stringResult}');
}
return ToolResult.success(result.stringResult);
} catch (e) {
return ToolResult.error('Fallo en el Sandbox JS: $e');
} finally {
// Clean up resources immediately to prevent memory leaks
jsRuntime?.dispose();
}
}