default cwd to /workspace for all exec, pty, and job calls

All subprocess and PTY spawns now start in WORKSPACE_DIR (default /workspace)
instead of inheriting /app from the Python process.
This commit is contained in:
Sidney Marvin Fricke
2026-06-24 12:31:30 +02:00
parent 88901d4187
commit 0b8671b7b0
+5
View File
@@ -18,6 +18,8 @@ from typing import Any
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s") logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
log = logging.getLogger("mcp") log = logging.getLogger("mcp")
WORKSPACE = os.environ.get("WORKSPACE_DIR", "/workspace")
import pyte import pyte
import ptyprocess import ptyprocess
import uvicorn import uvicorn
@@ -49,6 +51,7 @@ class PtySession:
["/bin/bash", "--login"], ["/bin/bash", "--login"],
dimensions=(rows, cols), dimensions=(rows, cols),
env={**os.environ, "TERM": "xterm-256color", "COLUMNS": str(cols), "LINES": str(rows)}, env={**os.environ, "TERM": "xterm-256color", "COLUMNS": str(cols), "LINES": str(rows)},
cwd=WORKSPACE,
) )
self._reader = threading.Thread(target=self._read_loop, daemon=True) self._reader = threading.Thread(target=self._read_loop, daemon=True)
self._reader.start() self._reader.start()
@@ -100,6 +103,7 @@ class BackgroundJob:
stderr=subprocess.STDOUT, stderr=subprocess.STDOUT,
text=True, text=True,
executable="/bin/bash", executable="/bin/bash",
cwd=WORKSPACE,
) )
self._reader = threading.Thread(target=self._read_loop, daemon=True) self._reader = threading.Thread(target=self._read_loop, daemon=True)
self._reader.start() self._reader.start()
@@ -256,6 +260,7 @@ async def _dispatch(name: str, args: dict) -> dict:
r = subprocess.run( r = subprocess.run(
cmd, shell=True, capture_output=True, text=True, cmd, shell=True, capture_output=True, text=True,
timeout=timeout, executable="/bin/bash", timeout=timeout, executable="/bin/bash",
cwd=WORKSPACE,
) )
return {"stdout": r.stdout, "stderr": r.stderr, "exit_code": r.returncode} return {"stdout": r.stdout, "stderr": r.stderr, "exit_code": r.returncode}
except subprocess.TimeoutExpired: except subprocess.TimeoutExpired: