Skip to content

v0.3.1 — Global HUD fix (native floating window)

Choose a tag to compare

@AkashJana18 AkashJana18 released this 13 Sep 12:50
· 10 commits to main since this release
da2cf4e

v0.3.1 — 2026-09-13

Patch: global floating HUD — overlay now visible on opencode / any terminal.

Fixed

  • Overlay not visible on opencode / other terminals — whisperflow overlay was a terminal alt-screen confined to the daemon's own tty, so it never appeared when opencode was frontmost. Now uses a native floating HUD window (src/overlay.rs, cocoa NSWindow NSBorderlessWindowMask at level 1000, 560×78, centered top, dark translucent 0.11,0.11,0.13,0.92, rounded 12pt, canJoinAllSpaces) visible on every Space/app like WhisperFlow. Falls back to terminal overlay when not on macOS or window creation fails.
    • overlay::spawn() creates NSWindow on main queue (dispatch::Queue::main().exec_async + OnceLock<WindowState>) and updates via exec_async (do_show/do_hide/do_waveform etc.), so globally visible even when opencode is frontmost. Previously on background thread → SIGABRT foreign exception.
    • src/daemon.rs:run_overlay_loop prefers native_overlay and falls back to term_overlay; waveform (48 blocks), transcription/status sent to whichever is available. Idle still blank.
    • src/main.rs:Start keeps main thread's CFRunLoop alive (daemon on bg thread, main runs CFRunLoop::run_in_mode 50ms) so main-queue overlay is serviced (previously block_on blocked main, exec_async never ran → timeout → fallback).
    • Added cocoa = "0.25", objc = "0.2", dispatch = "0.2", once_cell = "1.19" (macos).

Changed

  • Cargo.toml 0.3.0 → 0.3.1.

Verify: cargo check clean, cargo test 56 passed (3 ignored, manual_show no longer aborts), cargo build --release 24 MB, cargo test overlay::tests::manual_show -- --ignored --nocapture now “no overlay (not macos)” instead of SIGABRT (main queue not pumping in test harness, correctly falls back).

Merge: #7 fix/overlay-global → main (GitGuardian pass, merge da2cf4e).

Full diff: v0.3.0...v0.3.1