v0.2.0 — Live Dashboard & Performance
What's New
This release transforms the dashboard from a static snapshot into a live monitoring surface, fixes terminal reliability, and dramatically improves load times.
Live Dashboard Updates (PR #249)
The Dashboard now subscribes to the existing SSE endpoint for real-time session updates. Status, activity state, and attention levels refresh every 5 seconds automatically — no more manual page reloads.
- New
useSessionEventshook connects to/api/eventsviaEventSource - Merges lightweight SSE patches into full session objects with referential stability
- Auto-reconnects on connection drops
9x Faster Dashboard Load (PR #244)
Dashboard API response dropped from 51 seconds to ~6 seconds.
Root cause: findClaudeProcess() called ps -eo pid,tty,args once per session. On machines with 1000+ processes, each ps call took 30-35 seconds. With 18 sessions, that meant 18 concurrent ps processes competing for resources.
Fix: Module-level TTL cache with in-flight promise deduplication — ps is now called once across all sessions. Subprocess timeouts reduced from 30s to 5s.
WebSocket Terminal Reconnection (PR #248)
A single network hiccup (Wi-Fi switch, laptop sleep/wake, server restart) no longer permanently kills the web terminal.
- Exponential backoff reconnection (1s → 2s → 4s → ... → 15s max)
- Distinguishes permanent errors (auth failure, session not found) from transient disconnects
- Resets reconnection state on session change to prevent stale backoff
Runtime-Agnostic Lifecycle Detection (PR #247)
The lifecycle manager now uses JSONL-based activity detection (getActivityState()) instead of the deprecated terminal-text parser (detectActivity()).
- Reads Claude's structured session files directly — works with any runtime, not just tmux
- Falls back to terminal-based detection for agent plugins that haven't implemented
getActivityState()yet - Passes user-configured
readyThresholdMs(previously silently ignored)
Merged PRs
- #244 —
fix: cache ps output across sessions to fix 51s dashboard load - #247 —
fix: use JSONL-based activity detection in lifecycle manager - #248 —
fix: WebSocket reconnection in DirectTerminal - #249 —
feat: subscribe Dashboard to SSE for real-time session updates
Performance
| Metric | Before | After |
|---|---|---|
/api/sessions response time | 51s | ~6s |
| Dashboard refresh | Manual page reload | Auto every 5s via SSE |
| Terminal after network drop | Permanently dead | Auto-reconnects |
| Lifecycle activity detection | tmux-only (terminal regex) | Runtime-agnostic (JSONL) |