From 6a5afa3ba9475eeb9c60ada0c44dbb65a8b0b269 Mon Sep 17 00:00:00 2001 From: Jakub Wolniewicz <4850809+frizikk@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:27:23 +0200 Subject: [PATCH] fix(tui): decode slash worker streams as UTF-8 --- ...test_windows_subprocess_no_window_flags.py | 23 +++++++++++++++++++ tui_gateway/server.py | 2 ++ 2 files changed, 25 insertions(+) diff --git a/tests/test_windows_subprocess_no_window_flags.py b/tests/test_windows_subprocess_no_window_flags.py index ae13ba1a44f4c..13dbb70243f60 100644 --- a/tests/test_windows_subprocess_no_window_flags.py +++ b/tests/test_windows_subprocess_no_window_flags.py @@ -399,3 +399,26 @@ def fake_popen(cmd, **kwargs): assert captured[0][0][:3] == [server.sys.executable, "-m", "tui_gateway.slash_worker"] assert captured[0][1]["creationflags"] == _CREATE_NO_WINDOW + + +def test_tui_slash_worker_decodes_subprocess_streams_as_utf8(monkeypatch): + from tui_gateway import server + + captured = [] + + class _Proc: + stdin = SimpleNamespace() + stdout = [] + stderr = [] + + def fake_popen(cmd, **kwargs): + captured.append((cmd, kwargs)) + return _Proc() + + monkeypatch.setattr(server.subprocess, "Popen", fake_popen) + monkeypatch.setattr(server.threading, "Thread", lambda *a, **k: SimpleNamespace(start=lambda: None)) + + server._SlashWorker("session-key", "model-x") + + assert captured[0][1]["encoding"] == "utf-8" + assert captured[0][1]["errors"] == "replace" diff --git a/tui_gateway/server.py b/tui_gateway/server.py index 0a87f133d4a0d..fc88a36625f7d 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -317,6 +317,8 @@ def __init__(self, session_key: str, model: str, profile_home: str | None = None stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, + encoding="utf-8", + errors="replace", bufsize=1, cwd=os.getcwd(), env=env,