* feat(audio): opt-in lazy stream close for bluetooth mic latency
keep the microphone stream open for 30s after recording stops to
reduce latency on back-to-back transcriptions. gated behind an
experimental setting (off by default) since it keeps the mic actively
capturing while idle — degrading bluetooth audio quality on macOS.
adds lazy_stream_close setting, tauri command, toggle in experimental
settings section, and i18n strings.
* fix: gate lazy close on setting in cancel_recording path
cancel_recording was unconditionally calling schedule_lazy_close,
keeping the mic open for 30s even when the setting was disabled.
also bump close_generation on AlwaysOn→OnDemand switch to cancel
any stale lazy close timers.
* feat(audio): opt-in lazy stream close for bluetooth mic latency
keep the microphone stream open for 30s after recording stops to
reduce latency on back-to-back transcriptions. gated behind an
experimental setting (off by default) since it keeps the mic actively
capturing while idle — degrading bluetooth audio quality on macOS.
adds lazy_stream_close setting, tauri command, toggle in experimental
settings section, and i18n strings.
* fix: gate lazy close on setting in cancel_recording path
cancel_recording was unconditionally calling schedule_lazy_close,
keeping the mic open for 30s even when the setting was disabled.
also bump close_generation on AlwaysOn→OnDemand switch to cancel
any stale lazy close timers.
* chore: fix cargo fmt on model.rs line from main merge
* fix race
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* first pass at gpu acceleration
* unload the model when changing
* mock accelerator
* translations and build fix
* format
* clean up helptext
* type cleanup
* format
* lint
* fix: add TranscriptionState to prevent race conditions & add debounce
* refactor(transcription): replace state machine with actor coordinator
* some cleanup
* format
* minor cleanup
* format
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat(linux): Add option to select typing tool
- Added a Linux-only typing tool setting shown for direct paste, with a new dropdown in advanced settings.
- Wired new typing tool setting through settings store, bindings, and Tauri commands.
- Added typing tool enum/defaults and selection handling in Linux clipboard direct typing.
- Added translations for the new typing tool setting across locales.
* fix compilation on macos
* format
* only list available tools
* format
---------
Co-authored-by: Thinh Vu <phuocthinhvu@gmail.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add configurable auto-submit after transcription paste
Add an Advanced output setting that can send Enter, Ctrl+Enter, or Cmd+Enter after text insertion so Handy works smoothly with different editor and agent submit shortcuts. This keeps the behavior opt-in, persists it in settings, and adds focused Rust tests for defaults and paste auto-submit decision logic.
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: simplify auto submit configuration UX
Replace the auto-submit toggle and key dropdown with a single dropdown that includes an Off state, so output behavior is clearer and faster to configure. Clarify Meta-key behavior by showing Cmd+Enter on macOS and Super+Enter on Windows/Linux, with matching localized copy.
Co-authored-by: Cursor <cursoragent@cursor.com>
* use bindings generated on macos
* and translations.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add show tray icon setting
Allow hiding system tray icon via Settings > Advanced.
When hidden, closing window quits app instead of hiding.
* i8n
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add post-processing hotkey
* rewrite
* bring back toggle
* Make sure the toggle on and off propagates for the key binding.
* rename for clarity
* cleanup
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* init attempt at new kb
* 0.1.1 handy-keys
* format
* cleanup
* support for capslock/shiftlock?
* move kb to experimental
* use hook
* fix macos bug
* attempt mouse buttons as well