From cfdcabc8b450f660ef9c0df20fddb898afe67253 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 8 Dec 2025 20:20:56 +0100 Subject: [PATCH] VoiceWake: sanitize triggers only when applying --- apps/macos/Sources/Clawdis/AppState.swift | 9 ++------- apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/macos/Sources/Clawdis/AppState.swift b/apps/macos/Sources/Clawdis/AppState.swift index 95b27917b..bb9ea7eb7 100644 --- a/apps/macos/Sources/Clawdis/AppState.swift +++ b/apps/macos/Sources/Clawdis/AppState.swift @@ -35,13 +35,8 @@ final class AppState: ObservableObject { @Published var swabbleTriggerWords: [String] { didSet { - // Trim user input but keep empty placeholders so the UI can show newly added rows. - let cleaned = self.swabbleTriggerWords.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } - UserDefaults.standard.set(cleaned, forKey: swabbleTriggersKey) - if cleaned != self.swabbleTriggerWords { - self.swabbleTriggerWords = cleaned - return - } + // Preserve the raw editing state; sanitization happens when we actually use the triggers. + UserDefaults.standard.set(self.swabbleTriggerWords, forKey: swabbleTriggersKey) if self.swabbleEnabled { Task { await VoiceWakeRuntime.shared.refresh(state: self) } } diff --git a/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift b/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift index 864806f9c..ae897e553 100644 --- a/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift +++ b/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift @@ -46,7 +46,7 @@ actor VoiceWakeRuntime { let snapshot = await MainActor.run { () -> (Bool, RuntimeConfig) in let enabled = state.swabbleEnabled let config = RuntimeConfig( - triggers: state.swabbleTriggerWords, + triggers: sanitizeVoiceWakeTriggers(state.swabbleTriggerWords), micID: state.voiceWakeMicID.isEmpty ? nil : state.voiceWakeMicID, localeID: state.voiceWakeLocaleID.isEmpty ? nil : state.voiceWakeLocaleID) return (enabled, config)