Server broadcast a state patch (agent list updated, or agent deleted).
Stream finished — render final markdown, clear typing indicator.
Send a chat message over the WebSocket. Returns false when the socket is not open (caller can fall back to MQTT).
Send any raw JSON object over the WebSocket (e.g. agent commands). Returns false when the socket is not open.
Complete (non-streaming) message — slash command replies, errors, etc.