294 Commits

Author SHA1 Message Date
Beingpax
69c5d4abd1 Migrate legacy "GROQ" raw value to "Groq" 2026-01-06 14:20:33 +05:45
Beingpax
c4167e9e90 Fix keychain access errors by removing explicit access group that mismatched entitlements 2026-01-05 23:19:30 +05:45
Beingpax
aab096d252 Move license key and trial date from UserDefaults to Keychain 2026-01-05 23:06:46 +05:45
Beingpax
eadf889a15 Remove unused aiProviderApiKey from UserDefaults 2026-01-05 22:37:56 +05:45
Beingpax
8c1443f901 Standardize Groq naming to proper case 2026-01-05 22:32:22 +05:45
Beingpax
948033ac28 Migrate API key storage to Keychain with iCloud sync
Move API keys from UserDefaults to secure Keychain storage. Add KeychainService and APIKeyManager for centralized key management. Enable iCloud Keychain sync for cross-device sharing between macOS and iOS.
2026-01-05 22:28:34 +05:45
Beingpax
0090b2f8f8 Add GPT 5.2 model support
Added gpt-5.2 to OpenAI available models list and set as default model
2026-01-03 08:55:32 +05:45
Beingpax
658291635b Remove prewarm transcription database saving 2026-01-01 17:56:13 +05:45
Beingpax
8bfaf88f9b Add configurable audio resumption delay for Bluetooth headphones
Fixes #459
2025-12-31 16:23:13 +05:45
Beingpax
93f8811d77 Add missing rollback in dictionary import error handling 2025-12-28 12:47:21 +05:45
Beingpax
7beb63e3c6 Prevent crashes and duplicates in import operations 2025-12-28 12:26:50 +05:45
Beingpax
4e551926e7 Fix Soniox vocabulary integration to read from SwiftData 2025-12-28 12:16:59 +05:45
Beingpax
60125c316b Migrate dictionary data from UserDefaults to SwiftData
Migrates vocabulary words and word replacements from UserDefaults to SwiftData for better data management and persistence.

Changes:
- Create VocabularyWord and WordReplacement SwiftData models
- Add dual ModelConfiguration setup (default.store for transcripts, dictionary.store for dictionary data)
- Implement DictionaryMigrationService for one-time UserDefaults→SwiftData migration
- Rename "Correct Spellings" to "Vocabulary" for clearer terminology
- Update all dictionary views to use @Query instead of manager classes
- Update all services to fetch from SwiftData using FetchDescriptor
- Enhance word replacement duplicate detection (now checks during add AND edit)
- Update import/export services to work with SwiftData
- Preserve all existing functionality with improved data integrity

Technical details:
- Separate store files: default.store (transcripts) + dictionary.store (vocabulary + replacements)
- Migration flag: "HasMigratedDictionaryToSwiftData_v2"
- All CRUD operations properly implemented with duplicate detection
2025-12-28 12:09:43 +05:45
Beingpax
fe842de807 Rename Correct Spellings to Vocabulary and update related terminology 2025-12-27 15:27:00 +05:45
Beingpax
f351ed4dde Add support for gemini 3 flash for AI enhancement 2025-12-23 11:33:21 +05:45
Beingpax
003e0d8205 Revert "Fix: Allow device switching during recording on disconnection"
This reverts commit 0445dca865d0776c5ffe7efe502b001c151d37ea.
2025-12-21 22:05:55 +05:45
Beingpax
0445dca865 Fix: Allow device switching during recording on disconnection 2025-12-21 21:50:35 +05:45
Beingpax
4cef5aa12d Fix: Replace deprecated kAudioObjectPropertyElementMaster with kAudioObjectPropertyElementMain 2025-12-21 21:45:07 +05:45
Prakash Joshi Pax
621f99c10f
Update VoiceInk/Services/AudioDeviceConfiguration.swift
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-12-21 21:41:57 +05:45
Beingpax
873379c0ca Improve audio recording startup with validation, retry logic, and device change handling 2025-12-21 19:37:03 +05:45
Beingpax
2944e4ce5c Improve recorder device change handling 2025-12-21 13:04:35 +05:45
Beingpax
6ab3705123 Add timeout and retry logic to GroqTranscriptionService 2025-12-19 12:16:33 +05:45
Beingpax
583165f219 Cleanup resources properly 2025-12-19 09:24:22 +05:45
Beingpax
b227fa4b0d Fix Force unwrapping serviceRegistry! is risky 2025-12-19 09:21:38 +05:45
Beingpax
5ca848af91 Add TranscriptionServiceRegistry to eliminate duplicate service routing logic
- Create centralized registry for managing transcription services
- Replace duplicate switch statements across 4 manager classes
- Consolidate service initialization into single registry pattern
- Add cleanup method to registry for resource management
- Ensure fresh service registry on each transcription request
2025-12-18 21:29:35 +05:45
Beingpax
a2f19b04c6 Add model prewarm service on system wake and app launch 2025-12-17 21:23:30 +05:45
Beingpax
078e02c503 Parakeet model validation & Intel mac local model warning 2025-12-17 09:41:57 +05:45
Beingpax
ac8174b258 Fix migration logic 2025-12-12 14:36:33 +05:45
Beingpax
bd6973e559 Better device fallback logic 2025-12-12 11:39:25 +05:45
Beingpax
a3226bb0fb Simplify audio input modes: keep Custom and Prioritized, remove System Default option 2025-12-12 09:19:29 +05:45
Beingpax
baae439aae Preserve transcription in clipboard by default, add restore option with configurable delay 2025-12-07 15:24:10 +05:45
Nico Duldhardt
d25ae52333 Fix OCR capturing VoiceInk status overlay instead of frontmost app window
The screen capture service was selecting the first layer-0 window, which
during recording was VoiceInk's own status indicator overlay. This caused
OCR to always return 'No text detected' since the overlay has no readable
content.

Changes:
- Filter out windows owned by VoiceInk's process
- Prioritize windows belonging to NSWorkspace.frontmostApplication
- Refactor WindowCandidate struct to class scope
2025-12-07 01:05:00 +01:00
Nico Duldhardt
df2a8d9901 remove check for windows < 120x120 2025-12-07 00:52:52 +01:00
Nico Duldhardt
3b043f4da9 Fix OCR capturing VoiceInk status overlay instead of frontmost app window
The screen capture service was selecting the first layer-0 window, which
during recording was VoiceInk's own status indicator overlay. This caused
OCR to always return 'No text detected' since the overlay has no readable
content.

Changes:
- Filter out windows owned by VoiceInk's process
- Prioritize windows belonging to NSWorkspace.frontmostApplication
- Filter out tiny windows (<120x120) to avoid tooltips/overlays
- Move CGWindowListCopyWindowInfo off main thread for better UI responsiveness
- Refactor WindowCandidate struct to class scope
2025-12-07 00:23:04 +01:00
Beingpax
ab9d6ad830 Add option to dismiss Affiliate promotion 2025-12-06 08:18:35 +05:45
Beingpax
d4fb2125e6 Remove virtual and aggregate device filtering from isValidInputDevice 2025-12-05 19:15:13 +05:45
Beingpax
8cc83f84dc Exclude virtual devices and aggregate devices for Audio input devices 2025-12-04 21:50:23 +05:45
Beingpax
feea0d7f2a Fix race conditions due to audio device selection in menu bar 2025-12-04 21:24:36 +05:45
Beingpax
8ce84e9a69 Add llama3.1-8b from Cerebras 2025-12-04 20:55:13 +05:45
Beingpax
ea64ff3109 Update AI enhancement models 2025-12-04 20:53:15 +05:45
Beingpax
b754f39d89 Remove text formatting during Paste operation 2025-12-04 19:06:20 +05:45
Beingpax
45a2b72bfd Resolve fatal crash due to text insertion 2025-12-02 08:19:20 +05:45
Beingpax
ac1a85c056 Improved text formatting during paste operation 2025-11-28 20:39:43 +05:45
Beingpax
e16c84e1ed Add accessibility permission check to prevent pop-up when calling SelectedTextService 2025-11-20 22:44:45 +05:45
Beingpax
b6068bc881 Show raw API error responses on key verification failure 2025-11-20 22:29:21 +05:45
Beingpax
a762070f3d Remove redundant codefiles 2025-11-18 15:36:12 +05:45
Beingpax
308098694d Add support for scribe v2 model 2025-11-17 10:14:32 +05:45
Beingpax
fb69db2fe9 Simplify the import logic for dictionary 2025-11-14 11:12:41 +05:45
Beingpax
7d12c50fcb Rename dictionary context to custom vocabulary 2025-11-14 09:02:12 +05:45
Beingpax
9d3d1482b0 Remove prepopulated dictionary items 2025-11-14 08:25:52 +05:45