fix(client): count frames on arrival and keep the default ping interval

Review follow-ups for the slow-link probe changes:

- Count each WebSocket frame as it arrives, with a message listener on the
  session's socket, instead of counting read-loop pulls. A read loop held up
  by a full stream buffer no longer hides a link that still delivers. The
  session field is now receivedFrames.
- Keep Effect's 5 second ping interval. Delivery is in order, so a pong for
  a ping sent after the probe arrives after the probe's answer and cannot
  extend it. The 3 second interval only added ping traffic on every client.
- Comments no longer promise a frame in every probe window. The local
  window variable is now probeWindow, so it does not shadow the DOM global.
- Shell and thread tests check that a mobile refocus does not resubscribe.
- The connection runtime doc describes the probe extension and the refocus.

Co-authored-by: Nick <1109914+nick-potts@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
f79ea3580bTheo Browne committed on 10/14/2026, 12:22:10 PMparente453eff
20 files changedLine totals unavailable