diff --git a/tests/tui_gateway/test_inline_rpc_gil_starvation.py b/tests/tui_gateway/test_inline_rpc_gil_starvation.py index e9a01a76c58..80244b71a73 100644 --- a/tests/tui_gateway/test_inline_rpc_gil_starvation.py +++ b/tests/tui_gateway/test_inline_rpc_gil_starvation.py @@ -64,9 +64,11 @@ def capture(server): # seconds when the GIL is contended by concurrent agent turns. FRONTEND_POLLED_RPCS = [ - "session.list", # loads session list — SQLite query - "pet.info", # petdex poll — file/network read - "process.list", # background process status — process registry scan + "session.list", # loads session list — SQLite query + "pet.info", # petdex poll — file/network read + "process.list", # background process status — process registry scan + "setup.runtime_check", # runtime readiness — resolve_runtime_provider() I/O + "setup.status", # provider configured check — config/credential scan ] diff --git a/tui_gateway/server.py b/tui_gateway/server.py index faa09ff18c6..944d5273fd9 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -212,6 +212,16 @@ _LONG_HANDLERS = frozenset( "projects.for_cwd", "projects.tree", "projects.project_sessions", + # Setup readiness RPCs are polled by the Desktop frontend on connect + # and periodically (use-status-snapshot → evaluateRuntimeReadiness). + # setup.runtime_check calls resolve_runtime_provider() which reads + # config, checks auth state, and may probe the provider endpoint; + # setup.status calls _has_any_provider_configured() which scans + # provider config + credential files. Under GIL pressure from + # concurrent agent turns, either can take seconds inline, blocking + # the WS read loop and causing false "needs setup" (#50005 family). + "setup.runtime_check", + "setup.status", "session.branch", "session.compress", "session.list",