execute method

  1. @override
Future<ToolResult> execute(
  1. Map<String, dynamic> input
)
override

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();
  }
}