9734a8b43b
Introduce per-route send queues and dedicated sender tasks so terminal output does not await slow WebSocket clients. Output is buffered up to a bounded queue; when full, the oldest data is dropped to keep sessions responsive. Sender tasks enforce a send timeout and close slow/broken sockets, preventing terminal run loops from stalling indefinitely. Tests updated/added to verify: - queued output instead of direct ws.send_bytes - sender timeout closes sockets - queue overflow drops oldest - session close stops sender task