fix(tui-gateway): keep queued user titles from being dropped

Retry queued pending titles even when the DB already has a non-empty title so explicit user title intents are not silently lost (for example after auto-title). Includes regression coverage.
This commit is contained in:
Brooklyn Nicholson
2026-04-27 11:31:49 -05:00
parent 3aa86717b6
commit 27936ee02d
2 changed files with 30 additions and 2 deletions

View File

@@ -403,6 +403,34 @@ def test_session_title_get_retries_persist_for_pending_title(monkeypatch):
server._sessions.pop("sid", None)
def test_session_title_get_retries_pending_even_when_db_has_title(monkeypatch):
class _FakeDB:
def __init__(self):
self.title = "auto title"
def get_session_title(self, _key):
return self.title
def set_session_title(self, _key, title):
self.title = title
return True
def get_session(self, _key):
return {"id": _key, "title": self.title}
db = _FakeDB()
server._sessions["sid"] = _session(pending_title="queued title")
monkeypatch.setattr(server, "_get_db", lambda: db)
try:
resp = server.handle_request(
{"id": "1", "method": "session.title", "params": {"session_id": "sid"}}
)
assert resp["result"]["title"] == "queued title"
assert server._sessions["sid"]["pending_title"] is None
finally:
server._sessions.pop("sid", None)
def test_session_title_rejects_empty_title_with_specific_error_code(monkeypatch):
class _FakeDB:
def get_session_title(self, _key):

View File

@@ -1766,7 +1766,7 @@ def _(rid, params: dict) -> dict:
fallback = session.get("pending_title") or ""
try:
resolved_title = db.get_session_title(key) or ""
if not resolved_title and fallback:
if fallback:
if db.set_session_title(key, fallback):
session["pending_title"] = None
resolved_title = fallback
@@ -1776,7 +1776,7 @@ def _(rid, params: dict) -> dict:
if existing_title == fallback:
session["pending_title"] = None
resolved_title = fallback
else:
elif not resolved_title:
resolved_title = fallback
elif resolved_title:
session["pending_title"] = None