diff --git a/pyproject.toml b/pyproject.toml index 01bdaf7e..80787515 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,10 @@ cron = ["croniter"] slack = ["slack-bolt>=1.18.0", "slack-sdk>=3.27.0"] cli = ["simple-term-menu"] tts-premium = ["elevenlabs"] -pty = ["ptyprocess>=0.7.0"] +pty = [ + "ptyprocess>=0.7.0; sys_platform != 'win32'", + "pywinpty>=2.0.0; sys_platform == 'win32'", +] honcho = ["honcho-ai>=2.0.1"] mcp = ["mcp>=1.2.0"] homeassistant = ["aiohttp>=3.9.0"] diff --git a/tools/process_registry.py b/tools/process_registry.py index 948f2a4f..10d8c291 100644 --- a/tools/process_registry.py +++ b/tools/process_registry.py @@ -148,11 +148,14 @@ class ProcessRegistry: if use_pty: # Try PTY mode for interactive CLI tools try: - import ptyprocess + if _IS_WINDOWS: + from winpty import PtyProcess as _PtyProcessCls + else: + from ptyprocess import PtyProcess as _PtyProcessCls user_shell = _find_shell() pty_env = os.environ | (env_vars or {}) pty_env["PYTHONUNBUFFERED"] = "1" - pty_proc = ptyprocess.PtyProcess.spawn( + pty_proc = _PtyProcessCls.spawn( [user_shell, "-lic", command], cwd=session.cwd, env=pty_env,