Skip to content

Releases: AkashJana18/miccli

v1.0.0 — stable

Choose a tag to compare

@AkashJana18 AkashJana18 released this 17 Sep 19:02

v1.0.0 — First stable release (macOS only)

CI green, no macOS bloat.

v0.3.2 — Tall HUD waveform (real height)

Choose a tag to compare

@AkashJana18 AkashJana18 released this 13 Sep 13:02
28b271c

v0.3.2 — 2026-09-13

Patch: tall waveform — HUD now has real height, not a flat line.

Fixed

  • Waveform looked like a flat line — chunk_to_level was rms*420/peak*95/0.45/0.55 gate 2.5 → normal speech rms 0.03/peak 0.3 gave 21 → ▂. Now rms*900→90/peak*140→100 30/70 *1.35+8 gate 10 → same speech 60+ → ▆/▇ with height.
  • Overlay HUD height — was 78px window with 16px wave at 11pt, so blocks were thin. Now 96px window, 28px wave at 18pt Menlo (src/overlay.rs:create_window make_label(size: f64) via Class::get("NSFont") fontWithName:size:), centered top, so ▁▂▃▄▅▆▇█ have vertical height like WhisperFlow.

Changed

  • Cargo.toml 0.3.1→0.3.2.

Verify: cargo test 56 passed, cargo build --release 24MB, cargo test tui::waveform::tests::silence_is_zero still 0 for silence.

Merge: #8 fix/waveform-height → main (merge 28b271c).

Full diff: v0.3.1...v0.3.2

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

Choose a tag to compare

@AkashJana18 AkashJana18 released this 13 Sep 12:50
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

v0.3.0 — WhisperFlow overlay (minimal) + dashboard

Choose a tag to compare

@AkashJana18 AkashJana18 released this 13 Sep 12:26
88fd75c

v0.3.0 — 2026-09-13

Minor: whisperflow minimal overlay as default + dashboard coexistence (both per request).

Added

  • Overlay (default, whisperflow) — miccli start is blank when idle (primary screen unchanged, no clear) and shows a small top bar only while holding hotkey; auto-hides ~1.4s after release. No q/Ctrl+C needed while coding. src/tui/ui.rs:render_overlay (~6 lines, top-aligned, ● REC pulsing + app_name + ⌨ type, single-line blocks ▁▂▃▄▅▆▇█ via src/tui/waveform.rs:level_to_block/waveform_to_blocks 40–180 cols, color by peak, transcription + latencies). Transient alt-screen (src/tui/mod.rs:init_overlay_terminal) only during recording via src/daemon.rs:run_overlay_loop; 50ms idle / 12ms rec → bg vs fg perf identical (~0.1% idle, ~0.5–1% rec, 24MB, no fork, CGEventTap stays global).
  • Full dashboard coexistence — miccli dashboard (src/main.rs) stops daemon (SIGTERM, wait pid), opens persistent 4-tab TUI (src/tui/ui.rs:render_dashboard, src/daemon.rs:run_dashboard_loop + standalone), q/Esc/Ctrl+C quit → auto-restarts overlay daemon in same terminal (start().await). Both modes coexist; start remains overlay. tui.mode (src/config.rs:TuiConfig, default overlay): overlay | dashboard | none in config/config.toml; AppState.mode/paused.
  • Pause: repurpose SIGUSR1 (miccli toggle) via setup_pause_handler (tokio::signal::unix::signal(SignalKind::user_defined1), Arc<AtomicBool> paused); overlay shows ⏸ paused, hotkey ignored until toggled.

Changed

  • miccli start no longer takes --foreground/--no-tui (removed unused foreground flag; fallback now tui.mode = "none" or !is_tty()). src/daemon.rs:start() now () -> Result. src/tui/mod.rs:init_terminal no longer clears on overlay idle; overlay uses transient alt-screen.
  • src/tui/ui.rs:render now dispatches on AppMode (Overlay → render_overlay, else render_dashboard); existing dashboard kept.
  • Cargo.toml 0.2.0 → 0.3.0.

Fixed

  • Overlay idle no longer clears primary screen (was blank alt-screen even when idle) — now "terminal is as it is".
  • SIGUSR1 no longer kills daemon (now handled); toggle was no-op in 0.2.0.
  • Waveform 50 → ▄ (test blocks_mapping fixed).

Verify: cargo check clean, cargo test 56 passed (2 ignored, inc. renders_overlay_*), cargo build --release 24 MB, miccli start blank idle / hotkey overlay, miccli dashboard → q → restart, miccli toggle pause, cargo run -- --help shows start/dashboard/toggle/stop.

Merge: #6 feat/overlay → main (GitGuardian pass, merge 88fd75c).

Full diff: v0.2.0...v0.3.0

v0.2.0 — Ratatui TUI (default) + waveform

Choose a tag to compare

@AkashJana18 AkashJana18 released this 13 Sep 10:19
e97ee1f

v0.2.0 — 2026-09-13

Minor release: TUI as default + bundled Silero VAD / hotkey / capture fixes since v0.1.0.

Added

  • Ratatui TUI (default) — miccli start now shows live dashboard (fallback --no-tui / non-TTY):
    • Live: waveform sparkline (RMS+peak 0..100, decay, 60–220 cols), transcription (cleaned vs raw), latencies (transcribe/cleanup/insert/total), insertion target (type/paste + app via osascript), pulsing ● REC/■ idle, 30–80 fps.
    • Models: tiny 75 MB / base 142 MB / small 466 MB / medium 1.5 GB with ✅/○ and ▶ active marker.
    • Config: syntax-highlighted ~/.config/miccli/config.toml.
    • Help: keys + insertion + macOS perms.
    • Keys: q/Esc/Ctrl+C quit, Tab/Shift+Tab cycle, 1–4 jump. Alt-screen raw mode, TTY-gated.
    • Lightweight: ratatui 0.29 + crossterm 0.28 ~1–2 MB (24 MB release / 62 MB debug, dominated by ort/whisper-rs).
    • HotkeyManager::try_action non-blocking keeps TUI responsive (global Shift+Control hold-to-talk via CGEventTap).
  • Silero VAD v5 (ort ONNX) auto-download ~/.config/miccli/silero_vad.onnx, auto-stop on speech end.

Changed

  • ONNX Runtime statically bundled (download-binaries) — fixes dlopen dylib failure.
  • Hotkey → CGEventTap (modifier-only Shift+Control, needs Accessibility), hold-to-talk.
  • Cargo.toml 0.1.0 → 0.2.0 + ratatui/crossterm.

Fixed

  • Silent capture (bounded PendingResampler blocks).
  • Hallucinated Thank you. without speech (VAD gate).
  • 50 ms cut (timeout ≠ release).
  • Removed tracked silero_vad.onnx binary (now .gitignore + auto-download), dead config/dict.toml, etc.

Verify: cargo check clean, cargo test 51 passed (6 new TestBackend TUI renders), cargo build --release 24 MB.

Merge: #5 feat/tui → main (GitGuardian pass, merge commit e97ee1f).

Full diff: v0.1.0...v0.2.0 · cargo install miccli (crates.io pending) or cargo build --release.