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: unload model on cancel when immediate unload enabled
adds model unload check to cancel_current_operation() to match
the behavior in transcribe(). previously, cancelling with escape
would leave the model loaded even with "unload immediately" enabled.
fixes#479
* also fix model not unloading if there is empty transcription
* refactor to util function
---------
Co-authored-by: CJ Pais <cj@cjpais.com>
* 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>
* Add Russian language
* Add Russian language
* Clean up hidden Unicode characters in Russian translation
* add languages.ts
* add some missing translations
---------
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>
* fix: re-assert always-on-top for overlay on Windows
On Windows, the recording/transcribing overlay can lose its topmost
Z-order and fall behind other windows during certain window manager
events (e.g., dragging windows, alt-tabbing, or other apps asserting
focus).
This fix uses the Win32 SetWindowPos API directly with HWND_TOPMOST
to aggressively re-assert the overlay's Z-order immediately after
showing it. Key implementation details:
- Uses Tauri 2's WebviewWindow::hwnd() to get the native handle
- Calls SetWindowPos on the main UI thread via run_on_main_thread
- Applies flags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW
- SWP_NOACTIVATE prevents stealing focus from the active window
- SWP_SHOWWINDOW reinforces the topmost state during the show
The fix is called after .show() in both show_recording_overlay and
show_transcribing_overlay, which is more reliable than setting it
before the window is visible.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* keep the fix to windows only
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: CJ Pais <cj@cjpais.com>