From 77bb64813cb987ad80236219a20c6cb549b40049 Mon Sep 17 00:00:00 2001 From: brooklyn! Date: Sun, 31 May 2026 18:23:10 -0500 Subject: [PATCH] fix(desktop): report desktop_contract in lazy session.create info (#36112) The lazy session.create path hand-builds a partial info dict that omitted desktop_contract. The desktop GUI reads a missing contract as undefined and treats it as an out-of-date backend, so it surfaced a "Backend out of date" toast on every launch even against a current backend. Carry the contract in the lazy payload like _session_info already does for resume/branch. --- tests/test_tui_gateway_server.py | 27 +++++++++++++++++++++++++++ tui_gateway/server.py | 1 + 2 files changed, 28 insertions(+) diff --git a/tests/test_tui_gateway_server.py b/tests/test_tui_gateway_server.py index 7b4ca867a..18a651e58 100644 --- a/tests/test_tui_gateway_server.py +++ b/tests/test_tui_gateway_server.py @@ -3572,6 +3572,33 @@ def test_session_create_continues_when_state_db_is_unavailable(monkeypatch): server._sessions.pop(sid, None) +def test_session_create_lazy_info_reports_desktop_contract(monkeypatch): + """The lazy session.create info payload must carry desktop_contract, else + the desktop GUI reads it as undefined and falsely warns "Backend out of + date" on every launch even against a current backend.""" + + class _FakeWorker: + def __init__(self, key, model): + self.key = key + + def close(self): + return None + + monkeypatch.setattr(server, "_SlashWorker", _FakeWorker) + monkeypatch.setattr(server, "_get_db", lambda: None) + monkeypatch.setattr(server, "_emit", lambda *a, **kw: None) + monkeypatch.setattr(server, "_start_agent_build", lambda *a, **kw: None) + + resp = server.handle_request( + {"id": "1", "method": "session.create", "params": {"cols": 80}} + ) + info = resp["result"]["info"] + + assert info["desktop_contract"] == server.DESKTOP_BACKEND_CONTRACT + + server._sessions.pop(resp["result"]["session_id"], None) + + def test_session_list_returns_clean_error_when_state_db_is_unavailable(monkeypatch): monkeypatch.setattr(server, "_get_db", lambda: None) monkeypatch.setattr(server, "_db_error", "locking protocol") diff --git a/tui_gateway/server.py b/tui_gateway/server.py index 7c83c915c..700010cf5 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -2789,6 +2789,7 @@ def _(rid, params: dict) -> dict: "cwd": _sessions[sid]["cwd"], "branch": _git_branch_for_cwd(_sessions[sid]["cwd"]), "lazy": True, + "desktop_contract": DESKTOP_BACKEND_CONTRACT, "profile_name": _current_profile_name(), }, },