feat(lotus): detailed call summary for the host (cinny #253) #60

Merged
jared merged 1 commits from feat/call-summary-details into lotus 2026-10-20 19:48:35 -04:00
Owner

For LotusGuild/cinny#253: a more detailed post-call summary. The owner chose: toast + Details card, all four kinds of content, every call, technical wording.

io.lotus.call_summary gains an optional details (older hosts ignore it):

  • participants: other Matrix users seen (@user:server, devices of one person counted once) and peak people in the call, you included.
  • quality: your connection poor/lost time, each other person's, and everyone poor at the same time (which points at the server/SFU).
  • network: RTT median/p95, outbound packet loss (your mic, as the SFU reports it), inbound packet loss and jitter (audio you received). Sampled every 5 s from LiveKit's public getSenderStats() / getReceiverStats(). A figure the browser doesn't report is left out, not zeroed.
  • activity: your talking, muted and screenshare time.

CallDetailsTracker is pure (injectable clock) and fed by LiveKit events. People already in the room when you connect are recorded on Connected, since LiveKit sends no ParticipantConnected for them. A two-person test caught that.

Tests: 7 new (12/12 in the file); full suite under Node 24 763 passed. oxlint, tsc, knip and the format check are clean.

Browser (two users, local stack, with the cinny side): the Details card showed Duration 21 s · peak 2 in the call, With Bob Builder, Verdict: good · 0 reconnects, Outbound packet loss 0%, Jitter 1 ms, muted 6 s · deafened 3 s.

🤖 Generated with Claude Code

https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5

For LotusGuild/cinny#253: a more detailed post-call summary. The owner chose: toast + Details card, all four kinds of content, every call, technical wording. `io.lotus.call_summary` gains an optional **`details`** (older hosts ignore it): - **participants:** other Matrix users seen (`@user:server`, devices of one person counted once) and **peak** people in the call, you included. - **quality:** your connection poor/lost time, **each other person's**, and **everyone poor at the same time** (which points at the server/SFU). - **network:** RTT median/p95, outbound packet loss (your mic, as the SFU reports it), inbound packet loss and jitter (audio you received). Sampled every 5 s from LiveKit's public `getSenderStats()` / `getReceiverStats()`. A figure the browser doesn't report is left out, not zeroed. - **activity:** your talking, muted and screenshare time. `CallDetailsTracker` is pure (injectable clock) and fed by LiveKit events. People already in the room when you connect are recorded on `Connected`, since LiveKit sends no `ParticipantConnected` for them. A two-person test caught that. **Tests:** 7 new (12/12 in the file); full suite under Node 24 763 passed. oxlint, tsc, knip and the format check are clean. **Browser** (two users, local stack, with the cinny side): the Details card showed `Duration 21 s · peak 2 in the call`, `With Bob Builder`, `Verdict: good · 0 reconnects`, `Outbound packet loss 0%`, `Jitter 1 ms`, `muted 6 s · deafened 3 s`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared added 1 commit 2026-10-20 19:45:02 -04:00
feat(lotus): detailed call summary for the host's Details card (cinny #253)
CI / Publish to Gitea npm registry (pull_request) Skipped
CI / Build embedded bundle (pull_request) Successful in 3m1s
a951e5b1f2
io.lotus.call_summary gains an optional `details`: the other Matrix users
seen and the peak in the call; how long your connection, each other
person's, and everyone at once (likely the server) was poor/lost; RTT
median/p95, outbound and inbound packet loss and jitter (sampled every 5 s
from LiveKit sender/receiver stats); and your talk, mute and screenshare
time. People already present when you connect are recorded on Connected
(LiveKit sends no ParticipantConnected for them), and joins are idempotent
per device. Older hosts ignore the field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared merged commit 72d307df18 into lotus 2026-10-20 19:48:35 -04:00
Sign in to join this conversation.