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 useSessionEvents hook connects to /api/events via EventSource
  • 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

MetricBeforeAfter
/api/sessions response time51s~6s
Dashboard refreshManual page reloadAuto every 5s via SSE
Terminal after network dropPermanently deadAuto-reconnects
Lifecycle activity detectiontmux-only (terminal regex)Runtime-agnostic (JSONL)