What's New in 0.16.0
- windows path safety: validate project_path/cwd against pkg virtual paths and deleted dirs to prevent ERROR_DIRECTORY (os error 267)
- background agent capacity counter: saturating CAS loop prevents underflow when kill_all races with cancel/completion
- stream parser: mem::take instead of clone, process_parsed() avoids double JSON parsing in StreamProcessor
- process registry: lock-free AtomicI64 for id generation, don't destroy child handle on transient try_wait errors (EINTR)
- yume-cli spawner: EOF safety net emits claude-complete, 30-min timeout on completion monitor, emit on original session ID
- mcp bash pty fallback chain: python3 → macOS script → stdbuf, add PYTHONUNBUFFERED env, faster poll (250ms → 100ms)
- focus manager: DOM heartbeat (1s), keyboard catch-all redirect, mouseDown 5s safety timeout, window focus fallback restoration
- zustand useShallow selectors in MessageRenderer and SessionTabs
- file path links check existence before becoming clickable
- functional setState updaters to avoid stale overwrites
- timer/listener cleanup on unmount (speech, timers, tauri events)
- socket.io listener cleanup uses specific handler refs
- per-pane spinner word dedup across concurrent panes
- stuck agent indicators clearable via Escape
- sequential tab close interrupt, space no longer submits ask-user
- cmd+o works when input focused, open project reuses blank tab
- atomic MCP config write, stale temp cleanup, AsyncMutex timeout
- remove yume-cli-windows .cmd wrappers, rename warm→tengu theme
- replace dynamic import('./claudeCodeStore') with direct getState()
- adaptiveConnect generation tracking aborts stale retry chains
- HMR cleanup: tauri unlisten array, interval guards, beforeunload