Commit gráf

26 Commit-ok

Szerző SHA1 Üzenet Dátum
hariel1985
636a4acf97 Add custom dictionary (recognised -> replacement) with editable GUI
A single editable table in Settings ("Felismert" -> "Helyette"). Two
effects from one list:
- the replacement pairs are applied to every transcript (fix names/jargon,
  and "\n" expands to a real newline for spoken line-break commands);
- the "to" terms are fed to whisper as the initial --prompt to bias
  recognition toward the user's vocabulary.
Stored in UserDefaults; wired through both the warm server and the CLI
fallback. Settings window grown to fit the table + add/remove buttons.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 09:04:15 +02:00
hariel1985
4c680f9e4d Add live mic-level HUD with silence warning
Shows a small floating, non-interactive panel while recording with a
segmented VU meter driven by AVAudioRecorder metering (averagePower).
If the input peak stays at silence for >1.2s it turns red and shows
"Nincs hangbemenet?" — surfacing the dead-mic case that previously
produced empty recordings and whisper hallucinations with no feedback.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 08:59:33 +02:00
hariel1985
21be80ddb4 Add warm whisper-server backend (no per-dictation model reload)
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>
2026-06-27 08:56:45 +02:00
hariel1985
865b194eeb Bump version to 1.2.1
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>
v1.2.1
2026-06-27 06:36:21 +02:00
hariel1985
bd20988fa0 Add cs.allow-jit entitlement for whisper.cpp Metal backend
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>
2026-06-26 13:41:51 +02:00
hariel1985
3e96a6e394 Fix microphone under hardened runtime: add audio-input entitlement
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>
2026-06-26 13:34:05 +02:00
hariel1985
9cd0d3eaa5 Fix version: Info.plist CFBundleShortVersionString 1.0.0 → 1.2.0
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>
2026-06-05 21:57:03 +02:00
hariel1985
b0533f85f0 Add entitlements for Developer ID signing + notarization
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>
2026-06-05 21:28:29 +02:00
hariel1985
8e1c7bd813 Release v1.2.0
- Explain Accessibility permission in README
- Bump version to 1.2.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 17:08:02 +01:00
hariel1985
a7e6c19fc2 Update README with security and auto-detect features
- Document clipboard security (cleared after paste)
- Document original clipboard preservation
- Add auto-detect language mention

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 11:15:10 +01:00
hariel1985
62cc705ce8 Security: Clear clipboard if it was empty before dictation
- 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>
2026-02-03 11:14:29 +01:00
hariel1985
47c7d2274a Add automatic language detection
- 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>
2026-02-03 10:19:45 +01:00
hariel1985
41be75dd19 Add Large v3 Turbo model (recommended)
- 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>
2026-02-03 10:13:17 +01:00
hariel1985
170006ea1f Preserve clipboard contents after paste
- 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>
2026-02-02 14:14:45 +01:00
hariel1985
51438ea1bb Major update: bundled whisper-cli, model downloader, progress indicator
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>
2026-02-02 14:09:36 +01:00
hariel1985
f94265e4c5 Update README with download instructions and model comparison
- Add Quick Install section for DMG download
- Add Build from Source section for developers
- Add Whisper model comparison table (tiny/base/small/medium)
- Note about Intel Mac performance
- Note about Accessibility permission after updates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 13:00:55 +01:00
hariel1985
4e68fee1c1 Auto-detect whisper-cli path for Intel and ARM Macs
- 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>
2026-02-02 12:52:25 +01:00
hariel1985
18bc6186a0 Use private temp directory and auto-cleanup audio files
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>
2026-02-02 12:49:04 +01:00
hariel1985
66aed5edbd Add input validation to prevent command injection
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>
2026-02-02 12:40:54 +01:00
hariel1985
e155c8d074 Update .gitignore to exclude root binary 2026-02-02 12:36:03 +01:00
hariel1985
b243e198a6 Remove accidentally committed binary 2026-02-02 12:35:53 +01:00
hariel1985
72bac53cbe Add Open Settings buttons to permission dialogs
- 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>
2026-02-02 12:35:46 +01:00
hariel1985
23129d5067 Add LICENSE and update .gitignore
- Add MIT License
- Ignore macos build directory and compiled binary
- Ignore DMG files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:32:23 +01:00
hariel1985
2dea8574a3 Update README for new project structure
- Add platform support table (macOS ready, Linux/Windows planned)
- Document Settings window features
- Update build instructions for macos/ directory
- Add make command reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:32:06 +01:00
hariel1985
1727f4ba5b Restructure for multi-platform support and add Settings UI
- 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>
2026-02-02 12:31:42 +01:00
hariel1985
3d9e798f02 Initial commit: WhisperDictate menu bar app
- Global hotkey (⌃⌥D) for voice dictation
- Local Whisper transcription (offline)
- Auto-paste to active app
- Hungarian language default

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:09:39 +01:00