Each dictation previously spawned whisper-cli with -m, reloading the full
1.5-1.6GB model (+ ~10s Metal init) every single time. This adds a
WhisperServer manager that keeps a whisper-server child process alive with
the model preloaded, so each utterance is a fast local HTTP POST to
/inference (~0.5s) instead of a multi-second cold start.
- Bundles whisper-server alongside whisper-cli (bundle-whisper.sh).
- Server (re)starts on launch and on model change; stops on terminate;
picks a free loopback port; -nt (plain text) + -sns (fewer hallucinations).
- transcribe() prefers the warm server and falls back to a per-call
whisper-cli spawn if the server is unavailable.
- Warm-up now starts BEFORE the blocking accessibility prompt so the model
load overlaps with the user granting permissions.
- Info.plist: NSAllowsLocalNetworking for the loopback HTTP call.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Patch release shipping the hardened-runtime microphone fix
(device.audio-input + allow-jit entitlements). The previously released
1.2.0 build could not access the microphone once hardened-runtime signed.
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>
- 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>