You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Web UI over HTTPS via reverse proxy, iPhone (iOS 26.5.2) Edge/Safari
Bug
On mobile browsers, interactive cards (agent questions / approvals) sometimes never appear while the page stays open. They only show up after a manual page refresh. Happens intermittently — typically after the phone locks, the tab goes to background, or the network switches (WiFi <-> cellular).
What I traced in source
Server side is correct: when the agent asks a question it is stored in pendingQuestions (api-proxy.ts ~line 1388) and pushed as a question/requested frame over the mux WebSocket. On (re)connect the server replays all pending questions (api-proxy.ts ~line 3436) — which is exactly why a refresh makes the card appear.
Client side is fragile (packages/client/connection/src/web-api-client.ts + packages/client/runtime/src/client/sessions/manager.ts):
Reconnect is only triggered by the WebSocket close event (handleClose -> enqueue end -> reconnect loop with backoff).
There is no heartbeat / ping to detect a zombie connection.
There is no visibilitychange listener to force a reconnect when the tab returns to the foreground.
On mobile, browsers silently suspend WebSockets when the screen locks / the tab is backgrounded / the network changes — often without firing close. The client believes the connection is alive, so every subsequent question/requested frame is lost and no card is rendered. A manual refresh forces a fresh connection, the server replays pending questions, and the card appears.
Expected
Heartbeat (ping/pong) so a dead connection is detected and reconnected even without a close event.
visibilitychange (and online/offline) handlers that proactively reconnect when the tab becomes visible again — standard practice for mobile web apps.
Impact
Remote/mobile users miss agent questions entirely (approval prompts, clarification asks), which can stall a session without the user knowing.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Environment
Bug
On mobile browsers, interactive cards (agent questions / approvals) sometimes never appear while the page stays open. They only show up after a manual page refresh. Happens intermittently — typically after the phone locks, the tab goes to background, or the network switches (WiFi <-> cellular).
What I traced in source
Server side is correct: when the agent asks a question it is stored in
pendingQuestions(api-proxy.ts ~line 1388) and pushed as aquestion/requestedframe over the mux WebSocket. On (re)connect the server replays all pending questions (api-proxy.ts ~line 3436) — which is exactly why a refresh makes the card appear.Client side is fragile (
packages/client/connection/src/web-api-client.ts+packages/client/runtime/src/client/sessions/manager.ts):closeevent (handleClose-> enqueue end -> reconnect loop with backoff).visibilitychangelistener to force a reconnect when the tab returns to the foreground.On mobile, browsers silently suspend WebSockets when the screen locks / the tab is backgrounded / the network changes — often without firing
close. The client believes the connection is alive, so every subsequentquestion/requestedframe is lost and no card is rendered. A manual refresh forces a fresh connection, the server replays pending questions, and the card appears.Expected
closeevent.visibilitychange(andonline/offline) handlers that proactively reconnect when the tab becomes visible again — standard practice for mobile web apps.Impact
Remote/mobile users miss agent questions entirely (approval prompts, clarification asks), which can stall a session without the user knowing.
All reactions