Releases: AkashJana18/miccli
Release list
v1.0.0 — stable
v1.0.0 — First stable release (macOS only)
CI green, no macOS bloat.
v0.3.2 — Tall HUD waveform (real height)
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_levelwasrms*420/peak*95/0.45/0.55gate2.5→ normal speechrms 0.03/peak 0.3gave21→▂. Nowrms*900→90/peak*140→10030/70*1.35+8gate10→ same speech60+→▆/▇with height. - Overlay HUD height — was
78pxwindow with16pxwave at11pt, so blocks were thin. Now96pxwindow,28pxwave at18pt Menlo(src/overlay.rs:create_windowmake_label(size: f64)viaClass::get("NSFont")fontWithName:size:), centered top, so▁▂▃▄▅▆▇█have vertical height like WhisperFlow.
Changed
Cargo.toml0.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)
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
opencodewas frontmost. Now uses a native floating HUD window (src/overlay.rs,cocoaNSWindowNSBorderlessWindowMaskat level1000,560×78, centered top, dark translucent0.11,0.11,0.13,0.92, rounded12pt,canJoinAllSpaces) visible on every Space/app like WhisperFlow. Falls back to terminal overlay when not on macOS or window creation fails.overlay::spawn()createsNSWindowon main queue (dispatch::Queue::main().exec_async+OnceLock<WindowState>) and updates viaexec_async(do_show/do_hide/do_waveformetc.), so globally visible even whenopencodeis frontmost. Previously on background thread →SIGABRTforeign exception.src/daemon.rs:run_overlay_loopprefersnative_overlayand falls back toterm_overlay; waveform (48 blocks), transcription/status sent to whichever is available. Idle still blank.src/main.rs:Startkeeps main thread'sCFRunLoopalive (daemon on bg thread, main runsCFRunLoop::run_in_mode50ms) so main-queue overlay is serviced (previouslyblock_onblocked main,exec_asyncnever ran → timeout → fallback).- Added
cocoa = "0.25",objc = "0.2",dispatch = "0.2",once_cell = "1.19"(macos).
Changed
Cargo.toml0.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
v0.3.0 — 2026-09-13
Minor: whisperflow minimal overlay as default + dashboard coexistence (both per request).
Added
- Overlay (default, whisperflow) —
miccli startis blank when idle (primary screen unchanged, no clear) and shows a small top bar only while holding hotkey; auto-hides ~1.4s after release. Noq/Ctrl+Cneeded while coding.src/tui/ui.rs:render_overlay(~6 lines, top-aligned,● RECpulsing +app_name+⌨ type, single-line blocks▁▂▃▄▅▆▇█viasrc/tui/waveform.rs:level_to_block/waveform_to_blocks40–180 cols, color by peak, transcription + latencies). Transient alt-screen (src/tui/mod.rs:init_overlay_terminal) only during recording viasrc/daemon.rs:run_overlay_loop;50msidle /12msrec → bg vs fg perf identical (~0.1% idle, ~0.5–1% rec, 24MB, no fork,CGEventTapstays 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+Cquit → auto-restarts overlay daemon in same terminal (start().await). Both modes coexist;startremains overlay.tui.mode(src/config.rs:TuiConfig, defaultoverlay):overlay|dashboard|noneinconfig/config.toml;AppState.mode/paused. - Pause: repurpose
SIGUSR1(miccli toggle) viasetup_pause_handler(tokio::signal::unix::signal(SignalKind::user_defined1),Arc<AtomicBool> paused); overlay shows⏸ paused, hotkey ignored until toggled.
Changed
miccli startno longer takes--foreground/--no-tui(removed unusedforegroundflag; fallback nowtui.mode = "none"or!is_tty()).src/daemon.rs:start()now() -> Result.src/tui/mod.rs:init_terminalno longer clears on overlay idle; overlay uses transient alt-screen.src/tui/ui.rs:rendernow dispatches onAppMode(Overlay→render_overlay, elserender_dashboard); existing dashboard kept.Cargo.toml0.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".
SIGUSR1no longer kills daemon (now handled); toggle was no-op in0.2.0.- Waveform
50→▄(testblocks_mappingfixed).
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
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 startnow 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 viaosascript), pulsing● REC/■ idle, 30–80 fps. - Models:
tiny 75 MB/base 142 MB/small 466 MB/medium 1.5 GBwith✅/○and▶active marker. - Config: syntax-highlighted
~/.config/miccli/config.toml. - Help: keys + insertion + macOS perms.
- Keys:
q/Esc/Ctrl+Cquit,Tab/Shift+Tabcycle,1–4jump. Alt-screen raw mode, TTY-gated. - Lightweight:
ratatui 0.29+crossterm 0.28~1–2 MB (24 MB release / 62 MB debug, dominated byort/whisper-rs). HotkeyManager::try_actionnon-blocking keeps TUI responsive (globalShift+Controlhold-to-talk viaCGEventTap).
- Live: waveform sparkline (RMS+peak
- Silero VAD v5 (
ortONNX) auto-download~/.config/miccli/silero_vad.onnx, auto-stop on speech end.
Changed
- ONNX Runtime statically bundled (
download-binaries) — fixesdlopendylib failure. - Hotkey →
CGEventTap(modifier-onlyShift+Control, needs Accessibility), hold-to-talk. Cargo.toml0.1.0→0.2.0+ratatui/crossterm.
Fixed
- Silent capture (bounded
PendingResamplerblocks). - Hallucinated
Thank you.without speech (VAD gate). - 50 ms cut (timeout ≠ release).
- Removed tracked
silero_vad.onnxbinary (now.gitignore+ auto-download), deadconfig/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.