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")
log = logging.getLogger("mcp")
WORKSPACE = os.environ.get("WORKSPACE_DIR", "/workspace")
import pyte
import ptyprocess
import uvicorn
@@ -49,6 +51,7 @@ class PtySession:
["/bin/bash", "--login"],
dimensions=(rows, cols),
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.start()
@@ -100,6 +103,7 @@ class BackgroundJob:
stderr=subprocess.STDOUT,
text=True,
executable="/bin/bash",
cwd=WORKSPACE,
)
self._reader = threading.Thread(target=self._read_loop, daemon=True)
self._reader.start()
@@ -256,6 +260,7 @@ async def _dispatch(name: str, args: dict) -> dict:
r = subprocess.run(
cmd, shell=True, capture_output=True, text=True,
timeout=timeout, executable="/bin/bash",
cwd=WORKSPACE,
)
return {"stdout": r.stdout, "stderr": r.stderr, "exit_code": r.returncode}
except subprocess.TimeoutExpired: