diff --git a/metagpt/const.py b/metagpt/const.py index 17ce9210a..8d52f6e92 100644 --- a/metagpt/const.py +++ b/metagpt/const.py @@ -152,3 +152,4 @@ AGENT = "agent" # SWE agent SWE_SETUP_PATH = get_metagpt_package_root() / "metagpt/tools/swe_agent_commands/setup_default.sh" +SWE_CMD_WORK_DIR = DEFAULT_WORKSPACE_ROOT / "swe_agent_workdir" diff --git a/metagpt/tools/libs/terminal.py b/metagpt/tools/libs/terminal.py index e93e4575f..9bb6a09ec 100644 --- a/metagpt/tools/libs/terminal.py +++ b/metagpt/tools/libs/terminal.py @@ -1,9 +1,10 @@ import asyncio +import os from asyncio import Queue from asyncio.subprocess import PIPE, STDOUT from typing import Optional -from metagpt.const import DEFAULT_WORKSPACE_ROOT, SWE_SETUP_PATH +from metagpt.const import DEFAULT_WORKSPACE_ROOT, SWE_CMD_WORK_DIR, SWE_SETUP_PATH from metagpt.logs import logger from metagpt.tools.tool_registry import register_tool from metagpt.utils.report import END_MARKER_VALUE, TerminalReporter @@ -28,7 +29,7 @@ class Terminal: async def _start_process(self): # Start a persistent shell process self.process = await asyncio.create_subprocess_exec( - *self.shell_command, stdin=PIPE, stdout=PIPE, stderr=STDOUT, executable="bash" + *self.shell_command, stdin=PIPE, stdout=PIPE, stderr=STDOUT, executable="bash", env=os.environ.copy() ) await self._check_state() @@ -150,6 +151,10 @@ class Bash(Terminal): def __init__(self): """init""" + if not SWE_CMD_WORK_DIR.exists(): + SWE_CMD_WORK_DIR.mkdir(parents=True) + + os.environ["SWE_CMD_WORK_DIR"] = str(SWE_CMD_WORK_DIR) super().__init__() self.start_flag = False diff --git a/metagpt/tools/swe_agent_commands/setup_default.sh b/metagpt/tools/swe_agent_commands/setup_default.sh index 5e02fad5d..265650001 100644 --- a/metagpt/tools/swe_agent_commands/setup_default.sh +++ b/metagpt/tools/swe_agent_commands/setup_default.sh @@ -16,4 +16,4 @@ source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/defaults.sh source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/search.sh source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/edit_linting.sh -export SWE_CMD_WORK_DIR="$REPO_ROOT_DIR/workspace/swe_agent_workdir" +echo "SWE_CMD_WORK_DIR: $SWE_CMD_WORK_DIR"