diff --git a/app/agent/tools/impl/_terminal_session.py b/app/agent/tools/impl/_terminal_session.py index 6c602471d..be57e2b7f 100644 --- a/app/agent/tools/impl/_terminal_session.py +++ b/app/agent/tools/impl/_terminal_session.py @@ -721,3 +721,11 @@ class _TerminalSessionManager: terminal_session_manager = _TerminalSessionManager() + + +def get_terminal_session_manager() -> _TerminalSessionManager: + """返回当前进程的终端会话管理器,避免复用已完成关停的实例。""" + global terminal_session_manager + if terminal_session_manager._closed: + terminal_session_manager = _TerminalSessionManager() + return terminal_session_manager diff --git a/app/agent/tools/impl/execute_command.py b/app/agent/tools/impl/execute_command.py index 591ba5660..a3bc9568e 100644 --- a/app/agent/tools/impl/execute_command.py +++ b/app/agent/tools/impl/execute_command.py @@ -21,7 +21,7 @@ from app.agent.tools.impl._terminal_session import ( TERMINAL_DEFAULT_READ_BYTES, TERMINAL_MAX_READ_BYTES, TERMINAL_WAIT_DEFAULT_MS, - terminal_session_manager, + get_terminal_session_manager, ) from app.runtime.log import logger @@ -528,6 +528,7 @@ class ExecuteCommandTool(MoviePilotTool): ) try: + terminal_session_manager = get_terminal_session_manager() if normalized_action == "start": start_command = self._require_command(command) self._validate_command(