import io import contextlib import traceback def run_python_code(code: str, timeout_seconds: int = 5) -> dict: """ Safely execute Python code and capture stdout and locals. Returns dict with either 'result' or 'error'. """ local_vars = {} stdout = io.StringIO() try: with contextlib.redirect_stdout(stdout): # Optionally, you could run code with timeout or in sandbox here exec(code, {}, local_vars) return { "result": stdout.getvalue(), "locals": {k: repr(v) for k, v in local_vars.items()} } except Exception: err = traceback.format_exc() return {"error": err} # Alias for convenience safe_exec = run_python_code execute_code = run_python_code run_code = run_python_code