Releases: harshalgajjar/Reminal
Releases · harshalgajjar/Reminal
Release list
v1.7.1
v1.7.0
Release v1.7.0 — v1.4.1 baseline + security fix #1 only
v1.6.2
Release v1.6.2 — fix tap-to-focus keyboard (cross-browser touch)
v1.6.1
Release v1.6.1 — restore pre-#2 reconnect behaviour (no flood)
v1.6.0
Release v1.6.0 — smooth momentum touch-scrolling in the web viewer
v1.5.1
Release v1.5.1 — fix reconnect scrollback flood
v1.5.0
Release v1.5.0 — security fix #1 (relay never learns the PIN)
v1.4.3
Reap leaked caffeinate inhibitors on startup The display-sleep inhibitor (caffeinate -d -w <pid>) is spawned while a window is mirrored. A hot-restart (`reminal restart`, syscall.Exec) keeps the same PID but never runs the stop funcs, so the old image's caffeinate children survive — their `-w <pid>` still points at the (same-PID) new image — and pile up across restarts, silently pinning the host display awake (never idle-locks). Combined with the pre-v1.4.2 winAwake leak this could leave dozens of orphaned inhibitors. keepawake.ReapOrphans(), called once at startup before Start()/StartDisplay(), kills any `caffeinate -w <our-pid>` left over — which at startup are all from a previous incarnation. This both prevents accumulation and auto-cleans an older leaky build's mess on the next `restart --all` after upgrading. Orphans of a genuinely-exited PID already self-terminate via `-w`, so it only matches our own live PID; macOS only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.4.2
Fix reconnect/leak/multi-viewer bugs + online critical-upgrade forcing
Three bug fixes found in a code review:
- Terminal blank on reconnect to an IDLE session (agent.go runSender): a
caught-up viewer reconnecting sent resume{from_seq=N} whose cursor was past
everything still buffered, so neither a snapshot nor a replay went out and the
screen stayed blank until a keystroke. Now every resume paints one snapshot;
up-to-date viewers drop it via seq dedup.
- Keep-awake (display-sleep inhibitor) leak (windows.go streamWindow): a stream
that self-exits (window closed, viewer silent) bypassed stopWindowStream and
never released winAwake, pinning the host awake forever — worsened by the
v1.4.1 close-detection. The defer now releases it when the last stream ends,
and clears the stale winMenu entry.
- WebRTC starved WS-only viewers (windows.go): once one viewer confirmed a
DataChannel, frames went ONLY to confirmed DCs, freezing every WS-only viewer.
Frames now also go over WS whenever a viewer isn't on a confirmed channel
(wsSinkNeeded); an all-P2P set still skips WS to save relay cost.
Also adds an online, maintainer-controlled critical-upgrade switch: the Worker
serves /version → {critical_min} (from a CRITICAL_MIN wrangler var, empty by
default). On its normal ≤24h check, a client below critical_min force-installs
the upgrade automatically — no `--force`, no user action — so a security fix can
be pushed out fast. Best-effort; the binary still comes from the signed release.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.4.1
Fix mirrored panes freezing open when a window is closed When a window closed but its app kept running, macOS kept returning the window's last frame from screencapture instead of erroring, so the picture looked merely static (0 fps) and the close-detection — which only ran on a capture failure — never fired. The window left the picker immediately but its pane stayed frozen on the last frame indefinitely. - exists() now checks the same on-screen list the picker uses (kCGWindowListOptionOnScreenOnly) instead of kCGWindowListOptionAll; the "All" list retained a closed window's still-capturable backing store, which is exactly what kept the pane alive. - streamWindow proactively re-verifies a static window is still on-screen (every winLiveCheck) rather than waiting for a capture failure that may never come, and drops the pane when it's gone. Occluded windows stay on-screen so they're unaffected; minimizing or moving a mirrored window to another Space now closes its pane too, matching the picker. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>