Two side-by-side PWA standalone windows saturate the browser's per-origin HTTP/1.1 connection limit, causing 'Request timed out' toasts to cycle every ~30s. The idle-SSE close added in #3992/#3996 keys off the Page Visibility API (visibilitychange / document.hidden), but a PWA standalone window does not reliably fire visibilitychange when it loses focus to another window of the same app -- document.hidden only flips on minimize. So both windows stay 'visible', each holds its two global sidebar SSE streams (session-events + gateway) open, 2x3 = 6 hits the connection cap, and subsequent fetch() calls (the 30s background polls) queue behind the saturated pool and time out. The two global sidebar streams now also close on a sustained window blur (gated on document.hasFocus(), the signal visibilitychange misses) and reopen -- catching up the session list -- on focus, via a shared _sidebarSseBackgrounded() predicate and a debounced _installSidebarSseFocusHook(). The per-session live stream (messages.js startSessionStream) is intentionally left visibility-only: it carries live bg_task_complete toasts and server_turn_started live-view that an unfocused-but-visible window must still receive (the OS-notification path is gated on document.hidden, so the in-app toast is the only completion signal a visible-unfocused window gets). Closing it on blur would regress the multi-window live-view UX. Reported by @ddiall with a thorough root-cause analysis. Co-authored-by: ddiall <ddiall@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| vendor | ||
| apple-touch-icon.png | ||
| assistant_turn_anchors.js | ||
| boot.js | ||
| commands.js | ||
| favicon-32.png | ||
| favicon-192.png | ||
| favicon-512.png | ||
| favicon-512.svg | ||
| favicon.ico | ||
| favicon.svg | ||
| i18n.js | ||
| icons.js | ||
| index.html | ||
| login.js | ||
| manifest.json | ||
| messages.js | ||
| onboarding.js | ||
| outline.js | ||
| panels.js | ||
| pwa-startup.js | ||
| sessions.js | ||
| style.css | ||
| sw.js | ||
| terminal.js | ||
| ui.js | ||
| workspace.js | ||