Add WebSocket reconnect with exponential backoff + jitter (capped attempts), heartbeat keepalives, and reconnect on browser visibility/online plus Capacitor App/Network plugins when present
Refresh JWT before reconnect (coordinates with #22) so conversation refetch after a drop still works
Mid-stream drop recovery: mark interrupted + refetch conversation; surface connecting/reconnecting/disconnected state and disable send while down
Test plan
Unit tests: websocketReconnect helpers + WebSocketProvider reconnect/resume/send (npm run test:ci)
Background app ~30s and ~10min, then resume — chat reconnects without reload
Airplane mode on/off and cellular↔WiFi — reconnect indicator then restored send
Drop mid-stream response — interrupted banner + conversation refetch
## Summary
- Closes #23
- Add WebSocket reconnect with exponential backoff + jitter (capped attempts), heartbeat keepalives, and reconnect on browser visibility/`online` plus Capacitor `App`/`Network` plugins when present
- Refresh JWT before reconnect (coordinates with #22) so conversation refetch after a drop still works
- Mid-stream drop recovery: mark interrupted + refetch conversation; surface connecting/reconnecting/disconnected state and disable send while down
## Test plan
- [x] Unit tests: `websocketReconnect` helpers + `WebSocketProvider` reconnect/resume/send (`npm run test:ci`)
- [ ] Background app ~30s and ~10min, then resume — chat reconnects without reload
- [ ] Airplane mode on/off and cellular↔WiFi — reconnect indicator then restored send
- [ ] Drop mid-stream response — interrupted banner + conversation refetch
- [ ] Confirm nginx/`/ws/` proxy idle timeout stays above heartbeat (25s) or allows ping payloads
Reconnect with backoff/jitter, lifecycle + network resume hooks, JWT refresh before reconnect, heartbeat, and visible connection/stream-interrupted UI so backgrounding or network switches recover without a reload.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
onlineplus CapacitorApp/Networkplugins when presentTest plan
websocketReconnecthelpers +WebSocketProviderreconnect/resume/send (npm run test:ci)/ws/proxy idle timeout stays above heartbeat (25s) or allows ping payloads