feat(web): add WebSocket connection handler with auto-reconnect master
Implements WsConnection class managing persistent WebSocket connection to /ws endpoint with automatic reconnection using exponential backoff (1s, 2s, 4s, 8s, 16s, capped at 30s). Resets backoff on successful connection. Parses incoming messages as JSON, type-narrows to WsEvent variants, and dispatches to registered listeners. Handles malformed JSON and unknown event types gracefully with console warnings for forward compatibility. - createWsConnection() factory function for singleton-style initialization - Event listener registration via onEvent() and removal via offEvent() - Connection state exposed as connected boolean property - disconnect() method stops reconnection attempts and closes socket - Comprehensive test coverage: 14 tests covering all reconnection scenarios, event dispatching, listener management, backoff capping, and error handling All tests pass. TypeScript types validated. Build succeeds. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>