* 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
* Add Portuguese translations for permission error messages
Add error message translations for the permission check flow in the Portuguese locale, covering both check failures and request failures.
* Fix history audio playback on Linux
WebKitGTK cannot play audio files via the asset:// protocol (or at least
not reliably), returning MEDIA_ERR_SRC_NOT_SUPPORTED. Additionally,
convertFileSrc was double- encoding the path (/ became %2F).
Changed to read audio files directly using the fs plugin and create
blob URLs instead. Also added APPDATA to fs:scope permissions to allow
reading recordings from the app data directory.
* Fix audio playback on macOS by using asset protocol on non-Linux
The blob URL approach for audio playback works on Linux but breaks
macOS.
This reverts the blob change to use convertFileSrc with the asset
protocol on macOS/Windows while keeping the blob approach for Linux
where it's needed. Also adds proper cleanup of blob URLs to prevent
memory leaks when history entries are unmounted.
* refactor: use Immer for immutable state updates
Replace Set/Map with Record types and use Immer's produce() for
immutable state updates. This fixes mutation bugs where .add()/.set()
were mutating state before copying (e.g., `new Set(prev.add(id))`).
Changes:
- Add immer dependency
- Convert Set<string> to Record<string, true> (sparse hash set pattern)
- Convert Map<K,V> to Record<K,V>
- Use produce() for all state mutations
- Update prop types in child components
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* move deps back to where they started
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
* Add permission step to onboarding
* translations
* minor ui
* Update AccessibilityOnboarding.tsx
* claude suggestions
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
- hide model dropdown when apple intelligence is selected
- move error state into provider section (only shows when unavailable)
- remove redundant apple intelligence infobox
- add reusable Alert component with variants (error, warning, info, success)
- Alert supports contained prop for use inside settings groups
* Add `select-none` and `cursor-default` to root to prevent selection and
hover on most items
* Lint
* refactor paths a bit
* format
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
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
* 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>
* fix: prevent model auto-switch from interrupting active transcription
when a model download completes during an active recording/transcription,
the app now skips auto-switching to prevent data loss.
adds is_recording tauri command to check recording state before
auto-switching models on download or extraction completion.
fixes#418
* Update bindings.ts
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: add german, japanese, and chinese translations
adds complete translations for:
- german (de)
- japanese (ja)
- chinese simplified (zh)
builds on the internationalization foundation added in #437.
updates CONTRIBUTING_TRANSLATIONS.md to reflect supported languages.
* fix: escape Chinese quotation marks in zh translation
* cleanup
* remove extra keys for now
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* 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>
* 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
* feat: add sound duration retrieval for audio feedback
* Trim trailing silence from pop_start.wav and pop_stop.wav
* refactor: simplify sound file and base directory retrieval
* feat: only delay mute if audio feedback is enabled
* change the logic
* simplify new logic
* simplify get_sound_path and get_sound_base_dir, reorder functions
* add implicit blocking to playTestSound
* modify to my pref style
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* 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>
* 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>
* 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>
* 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>
* fix: tooltip overflow
* Adds more responsive Css
* StartHidden has tooltip bottom
* in debug setting too
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* feat: disable Translate to English switch for the whisper turbo
* add parakeet-tdt-0.6b-v2 to unsupportedTranslationModels
* disable language selector for parakeet v2
---------
Co-authored-by: CJ Pais <cj@cjpais.com>