chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import Dict
|
||||
|
||||
|
||||
class LocalController:
|
||||
"""Minimal controller to execute bash and python code locally.
|
||||
|
||||
WARNING: Executing arbitrary code is dangerous. Only enable/use this in trusted
|
||||
environments and with trusted inputs.
|
||||
"""
|
||||
|
||||
def run_bash_script(self, code: str, timeout: int = 30) -> Dict:
|
||||
try:
|
||||
proc = subprocess.run(
|
||||
["/bin/bash", "-lc", code],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=timeout,
|
||||
)
|
||||
output = (proc.stdout or "") + (proc.stderr or "")
|
||||
|
||||
print("BASH OUTPUT =======================================")
|
||||
print(output)
|
||||
print("BASH OUTPUT =======================================")
|
||||
|
||||
return {
|
||||
"status": "ok" if proc.returncode == 0 else "error",
|
||||
"returncode": proc.returncode,
|
||||
"output": output,
|
||||
"error": "",
|
||||
}
|
||||
except subprocess.TimeoutExpired as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"returncode": -1,
|
||||
"output": e.stdout or "",
|
||||
"error": f"TimeoutExpired: {str(e)}",
|
||||
}
|
||||
except Exception as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"returncode": -1,
|
||||
"output": "",
|
||||
"error": str(e),
|
||||
}
|
||||
|
||||
def run_python_script(self, code: str) -> Dict:
|
||||
try:
|
||||
proc = subprocess.run(
|
||||
[sys.executable, "-c", code],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
print("PYTHON OUTPUT =======================================")
|
||||
print(proc.stdout or "")
|
||||
print("PYTHON OUTPUT =======================================")
|
||||
return {
|
||||
"status": "ok" if proc.returncode == 0 else "error",
|
||||
"return_code": proc.returncode,
|
||||
"output": proc.stdout or "",
|
||||
"error": proc.stderr or "",
|
||||
}
|
||||
except Exception as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"return_code": -1,
|
||||
"output": "",
|
||||
"error": str(e),
|
||||
}
|
||||
|
||||
|
||||
class LocalEnv:
|
||||
"""Simple environment that provides a controller compatible with CodeAgent."""
|
||||
|
||||
def __init__(self):
|
||||
self.controller = LocalController()
|
||||
Reference in New Issue
Block a user