v1.9.0

Ghost
Thu, 26 Mar 2026 20:44:53 +0000

RDP performance overhaul:

Switched from polling (rAF loop calling rdp_get_frame every tick)
to event-driven rendering (backend emits rdp:frame:{id} when
frame buffer updates, frontend fetches on demand)

Eliminates thousands of empty IPC round-trips per second when
the screen is idle

Backend passes AppHandle into run_active_session for event emission

Frontend uses listen() instead of requestAnimationFrame polling

MCP terminal fix:

terminal_type and terminal_execute now send \r (carriage return)
instead of \n (newline) — PTY terminals expect CR to submit

Fixes commands not auto-sending, requiring manual Enter press

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com