434ea57eb0
The desktop app spawns `hermes serve --ws-only` instead of `hermes serve`. The slim server (tui_gateway/entry_ws.py) uses the bare websockets library to call handle_ws directly — same dispatch surface, same 158 RPCs, same events, zero HTTP framework. tui_gateway.server has zero FastAPI imports; the slim server never touches web_server.py (19.8K lines) at all. Full backward compat: older runtimes strip --ws-only and fall back to regular serve (still headless, just through uvicorn).