Commit graph

61 commits

Author SHA1 Message Date
Chirag Agggarwal
0cb8ab2162
feat: implement structured outputs for post-processing providers (#706)
* feat: implement structured outputs for Cerebras, OpenRouter, OpenAI, and Apple Intelligence

- Add structured output support with JSON schema in llm_client.rs
- Update actions.rs to use system prompt + user content approach
- Remove legacy ${output} variable substitution for supported providers
- Update Apple Intelligence Swift code to accept system prompts
- All providers now use consistent structured output format
- Remove duplicate check_apple_intelligence_availability function

* wip changes

* fix(structured-outputs): address PR #706 review comments

- Add settings migration to sync supports_structured_output field for existing providers
- Fix fallback behavior: structured output failures now fall through to legacy mode
- Clone api_key to prevent ownership issues in fallback path
- Clean up build_system_prompt(): remove  placeholder entirely
  (instead of replacing with 'the user's message' which reads awkwardly)
- Add warn import from log crate

* refactor(structured-outputs): apply best practice improvements

- Optimize settings migration: use single match instead of double iteration
- Add TRANSCRIPTION_FIELD constant to replace magic strings
- Keep Apple Intelligence behavior unchanged (no API fallback for privacy)

Addresses code review feedback on PR #706:
1. More efficient provider lookup in ensure_post_process_defaults()
2. Eliminates hardcoded 'transcription' string in JSON parsing
3. Maintains privacy-first approach for Apple Intelligence

* fix groq output

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-17 12:14:00 +08:00
Brandon Chen
cc477a310a
feat(i18n): add Traditional Chinese (zh-TW) locale (#796)
* feat(i18n): add Traditional Chinese (zh-TW) locale

* style(i18n): clarify zh as Simplified Chinese and format languages.ts

* tweak

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-12 18:19:28 +08:00
Phuoc Thinh Vu
b02873dab5
feat(linux): Add option to select typing tool (#760)
* 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>
2026-02-11 15:00:29 +08:00
sasha
bf2a59f5ef
feat: add configurable auto-submit after transcription paste (#765)
* 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>
2026-02-11 10:55:31 +08:00
Victor Navarro
f2c306eab6
Add show tray icon setting (#667)
* 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>
2026-02-10 10:39:35 +08:00
CJ Pais
db854363b4 default for post-process and revert ui changes 2026-02-06 16:46:17 +08:00
Sam
462b03b024
feat: add optional hotkey for post-processing request (#355)
* 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>
2026-02-06 16:28:14 +08:00
CJ Pais
e9a6108559
Add a paste delay setting (#694)
* Add a paste delay setting.

* format
2026-02-01 20:58:02 +08:00
CJ Pais
b733ccc458
init attempt at new kb (#580)
* 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
2026-01-20 08:23:35 +08:00
CJ Pais
28d1d814b7
add experimental features to ui + reorg everything (#620) 2026-01-19 10:33:04 +08:00
Viren Mohindra
d3a0281062
fix: prevent crash on macos 26.x beta during startup (#473)
defer apple intelligence availability check from app initialization
to when the user actually tries to use the feature. accessing
SystemLanguageModel.default during early app startup causes SIGABRT
on macOS 26.x (tahoe) beta.

- remove availability check from default_post_process_providers()
- always include apple intelligence provider on macos arm64
- add checkAppleIntelligenceAvailable command for lazy checking
- show error message if apple intelligence unavailable when selected
- clear error on any dropdown selection for better UX
2026-01-04 07:52:06 +08:00
Dmitry Gordin
5c5e428e06
fix: replace async-openai library with post request (#480)
* fix: replace async-openai library with post request to support custom providers

* move models call to llm_client too

* tweak post processing ui and add groq and cerebras

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-27 11:21:27 +07:00
Viren Mohindra
bfca46fcd6
feat: add tray menu localization using system locale (#446) 2025-12-18 04:14:32 -08:00
CJ Pais
ffd38f4d89
stored settings for language, and also overlay is now transcribed (#465) 2025-12-16 11:01:23 +07:00
CJ Pais
aaade62f9d
Add ctrl+shift+v as option on windows and linux (#430)
* ctrl+shift+v

* clean up some clipboard code

* format
2025-12-10 17:49:43 +07:00
Chirag Agggarwal
bfecade869
Apple intel integration (#391)
* feat: add Apple Intelligence post-processing provider

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* feat: guide apple intelligence output

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* fix(build): add fallback stub for Apple Intelligence on older SDKs

- Checks if 'FoundationModels.framework' is present in the macOS SDK.
- If missing, compiles a stub Swift file that returns 'unavailable' errors instead of failing the build.
- Prevents build errors on older Xcode versions (or macOS versions < 26.0) where the macros are not supported.

* fix(ui): hide Apple Intelligence option when unavailable

- Checks for runtime availability of Apple Intelligence (via 'check_apple_intelligence_availability') in 'settings.rs'.
- Only adds the Apple Intelligence provider to the default settings if it is actually available on the device.
- Ensures the option does not appear in the UI for unsupported Macs (e.g., Intel or older macOS versions), even if the app was built with support enabled.

* move some files around as well as some ui text

* format

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-09 21:04:24 +07:00
Danny Smith
246feda45d
Add option to append trailing space after pasted text (#405) 2025-12-05 17:37:33 +07:00
CJ Pais
39adf1b455
Switch to disable update checking (#362)
* codex thinks it did it

* run format

* properly disable on startup

* text
2025-11-28 10:17:13 +07:00
CJ Pais
4fcf0447b3
notes regarding linux (#387)
* notes regarding linux

* fix overlay not being default false on linux

* note
2025-11-28 09:37:49 +07:00
Jackson
381b8a8bfb
Add a cancel hotkey and configuration (#224)
* From scratch

* Cleanup

* Small fixes

* simplify

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-28 09:00:47 +07:00
Ole Jakob Schjøth
c8389f34b2
feat: Add disabled option for pasting. (#364)
* feat: Add disabled option for pasting.

* update bindings

* -> none

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-27 17:38:41 +07:00
CJ Pais
9521ab9332
WIP: Add tauri-specta for generating TS bindings (#322)
* initial specta commands

* refactor to use the bindings in the ui

* merge fixes

* remove unused commands

* add clamshell to lib

* Remove Invoke from everything.

* fix settings not being loaded properly

* fix settings being overwritten due to deserialization failure + remove
provider kind

* fix model loading text bug
2025-11-27 17:07:22 +07:00
CJ Pais
18536aa81e
Add file based debug logging (#347)
* add basic logging to handy

* 100kb of logs

* add open button to the ui for logs

* use log everywhere

* some minor cleanup

* finish debug logging
2025-11-17 12:55:24 +07:00
Jorge
3b3ed5abc5
feat: add more options for deleting recordings automatically and added button to open the folder that holds the recordings (#330)
* feat: add more options for deleting recordings automatically and added button to open the folder that olds the recordings

- deleting automatically options: after certain time, never or preserving certain number of recordings
- new button "Open Recordings Folder" located on History page

* refactor: moved "Delete Recordings" selector to Debug settings

* refactor: simplify opening recordings folder logic by using tauri's opener plugin

* clean up ui and code a bit

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-17 10:41:05 +07:00
Jorge
45eec57226
feat: add fallback microphone for clamshell/desktop mode (#329)
* feat: add fallback microphone for clamshell/desktop mode

* refactor: moved "Closed Laptop Microphone" setting to Debug

* cleanup

* run format

* add check back

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-17 10:38:41 +07:00
Luc Stepniewski
a80c37097b
Add rule for example prompt to keep the original language (#316) 2025-11-08 08:39:35 +08:00
Luis Eduardo
f7380fa69a
feat: LLM based post-processing (#222)
* Add LLM post-processing feature with settings management and UI integration

* Refactor LLM post-processing settings and prompt selection logic

* Rename CLAUDE.md to more standard AGENTS.md

* Replace Open Router with OpenAI Compatible endpoints for post-processing

* Fix post processing settings api styles

* refactor or something

* simplify

* cleanup a bit?

* remove useless code

* minor improvements

* fix laggy textarea

* Store post-processing results in db

* fix text color

* new default prompt

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-05 18:29:03 -08:00
helpful
09f16b1048
windows paste shift+ins instead of ctrl+v (#236)
* windows paste shift+ins instead of ctrl+v

Shift+Insert is older and more universal than Ctrl+V on windows. For example SSH terminal software often will not permit ctrl+v.

* add option for shift+ins on windows/linux

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-03 09:21:46 -08:00
Maicon Moreira
7c04ee85a7
feat: add “mute while recording” setting (#257)
* feat: mute while recording

* refactor: move MuteWhileRecording from AdvancedSettings to DebugSettings
2025-10-28 17:49:33 -07:00
CJ Pais
db00ff240f
Add Setting to Copy to Clipboard (#220)
* update transcribe-rs

* add copy to clipboard feat
2025-10-17 16:25:35 -07:00
Jackson
93215dc097
A few optimizations on startup (#182)
* Use an optimal release profile... load managers & hotkeys first, add a
splash, simplify app handler

* removed splashscreen, hopefully app boots fast enough anyhow

* No need to load transcription model on start now that its loaded on
demand & cleanup

* Make an unloaded model status

* tiny modification to unloading

* update comment

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-17 16:05:43 -07:00
Jackson
a286fe5143
Add custom sound and control notif volume (#214)
* Add custom sound and control notif volume

* Modularize the picker and slider, consolidate the playback and loading

* Move custom sounds to advanced

* pairs of audio

* custom sound handling

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-16 09:08:27 -07:00
CJ Pais
1029e901d1 default to no overlay on linux 2025-10-13 10:00:16 -07:00
Gr3mIin
aed3a75d54
feat(settings): add autostart toggle in advanced settings (#177)
* feat(settings): add autostart toggle in advanced settings

Enable users to configure autostart behavior through a new toggle in the advanced settings UI. The backend now checks user preferences on startup to enable or disable autostart accordingly, with the setting persisted and manageable via a new Tauri command. This provides better control over app initialization without affecting existing functionality.

* immediate toggle effect?

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-09 10:47:51 -07:00
CJ Pais
18f32c7c8d simplify history slightly 2025-10-08 16:28:01 -07:00
becker
d0e6a17c17
Add history limit setting (#150)
* Add history limit setting

Dearest Reviewer,

I have added a history limit setting. The limit change is applied instantly.
If the limit is 0 then no recordings are saved.

Becker

* remove extra save

save happens on exit

* move to debug menu

* use the text color

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-08 13:01:09 -07:00
CJ Pais
1432bac30f
add support for changing paste method (#187)
* add support for changing paste method

* rename/refactor of methods
2025-10-08 12:32:04 -07:00
Dylan
b82b3b2f20
Added "Start Hidden" (#105)
* Added "Start Hidden"

* revert visible option in tauri conf

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-09-06 14:07:33 -07:00
CJ Pais
ae5f640da5
Add VRAM Inactivity Timer (#101)
* init vram unload

* logging

* add immediate unloading

* thread fixes
2025-09-03 19:00:36 -07:00
CJ Pais
5296738bac tweak thresh 2025-08-19 18:54:00 -07:00
CJ Pais
d52df53343 tweak default to 0.15 2025-08-15 12:11:35 -07:00
CJ Pais
04b006d5b8 new default correction threshold + debug menu 2025-08-15 11:55:15 -07:00
CJ Pais
c2b3815f56 'custom words' everywhere instead of 'correct words' 2025-08-11 15:19:48 -07:00
Vlad Gerasimov
003bf23402 feat(transcription): add word correction with phonetic matching 2025-08-08 17:50:31 +04:00
CJ Pais
c0fc1ba817 some cleanup 2025-08-07 16:53:07 -07:00
Vlad Gerasimov
091b392aa6 feat(overlay): replace show_overlay toggle with position selector 2025-08-06 07:52:09 +04:00
CJ Pais
1ce954d02f add a very simple debug mode toggle 2025-08-01 18:16:51 -07:00
CJ Pais
dd957a894d add setting to enable or disable showing the overlay 2025-08-01 14:29:02 -07:00
Václav Škorpil
b767eca6fb Add language select to settings 2025-07-28 19:52:37 +02:00
segudev
c3aa2d7c1b Add "Translate to English" setting: Introduced a new setting to enable automatic translation of speech to English. Updated relevant components, settings modules, and transcription logic to support this feature. Adjusted accessibility permission calls for consistency. 2025-07-11 18:19:15 -07:00