The bundled whisper-cli / ggml dylibs JIT-compile Metal shaders at
runtime; under the hardened runtime that needs com.apple.security.cs.allow-jit
or the process gets killed. Completes the entitlement set for the
notarized Developer ID build (alongside device.audio-input).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The v1.2.0 Developer ID re-sign enabled the hardened runtime but the
entitlements were missing com.apple.security.device.audio-input. Under
the hardened runtime tccd refuses to even prompt for the microphone and
denies kTCCServiceMicrophone outright, so the app recorded pure silence
and whisper hallucinated text on the empty audio. Adding the resource
-access entitlement restores the mic permission prompt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The bundle's marketing version was stuck at 1.0.0 while the Makefile and the
shipped releases are 1.2.0. Align it so the app reports its real version.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
WhisperDictate.entitlements: non-sandboxed hardened-runtime entitlements
(app-sandbox=false; cs.disable-library-validation for the bundled whisper-cli
+ ggml/whisper dylibs). Used to deep-sign the app with the company Developer ID
identity before notarization. Also ignore the stray Contents/CodeResources
signing artifact.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- If clipboard was empty, clear it after paste (don't leave transcript)
- If clipboard had content, restore original content
- Prevents sensitive dictated text from remaining on clipboard
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add "Auto-detect" option at top of language dropdown
- When selected, whisper-cli detects language automatically
- Useful for multilingual users or unknown language content
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ggml-large-v3-turbo.bin to model list
- Mark as recommended: fast like Medium, accurate like Large
- Update README with new model comparison
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Save clipboard before pasting transcript (text, images, any content)
- Restore original clipboard contents after paste completes
- User's copied content is no longer lost after dictation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- whisper-cli and dependencies bundled in app (no brew required for users)
- Built-in model downloader with 5 model options (Tiny to Large)
- Download progress indicator (e.g., "45% Downloading Small")
- Model selection dropdown in Settings
- First-run wizard for initial model download
Security fixes:
- Input validation for language and model path
- Private temp directory for audio files
- Auto-cleanup of audio files after transcription
- Auto-detect whisper-cli path (ARM/Intel)
Bug fixes:
- Fixed Settings window crash (NSWindowController)
- Fixed model selection with tag-based indexing
Build:
- bundle-whisper.sh script for packaging whisper-cli
- Updated Makefile with Frameworks bundling
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Check multiple paths: /opt/homebrew/bin (ARM), /usr/local/bin (Intel),
/opt/local/bin (MacPorts), ~/bin (user local)
- Show error status if whisper-cli not found
- Use isExecutableFile to verify binary exists and is executable
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Security improvements:
- Audio file now stored in user's private NSTemporaryDirectory
- Filename includes process ID to avoid conflicts
- Audio file deleted after transcription (success or failure)
- Audio file deleted when app terminates
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Security improvements:
- Language selection now uses dropdown with 31 supported languages
- Model path validated: must be .bin file, no path traversal
- Validation runs before transcription execution
- Invalid inputs show error status instead of executing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add checkAccessibilityPermission() with AXIsProcessTrusted check
- Permission alerts now have "Open Settings" button
- Button opens directly to the relevant Privacy settings pane
- Import ApplicationServices for accessibility API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move macOS code to macos/ directory for platform separation
- Add Settings window with configurable language, model path, and sound toggle
- Add launch at login support using SMAppService
- Add proper .app bundle structure with Info.plist
- Add Makefile for build, install, run, and dmg targets
- Store preferences in UserDefaults for persistence
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>