import sys from io import StringIO import contextlib import json from datetime import datetime @contextlib.contextmanager def capture_output(): """Capture stdout and stderr""" stdout, stderr = StringIO(), StringIO() old_out, old_err = sys.stdout, sys.stderr try: sys.stdout, sys.stderr = stdout, stderr yield stdout, stderr finally: sys.stdout, sys.stderr = old_out, old_err def execute_code(code: str) -> tuple: """ Execute the provided code and return stdout, stderr and any exceptions """ with capture_output() as (stdout, stderr): try: exec(code) return stdout.getvalue().strip(), stderr.getvalue().strip(), None except Exception as e: return stdout.getvalue().strip(), stderr.getvalue().strip(), str(e) def export_session(code: str, output: str, error: str) -> dict: """ Create an exportable session object """ return { "timestamp": datetime.now().isoformat(), "code": code, "output": output, "error": error }