diff --git a/CHANGELOG.md b/CHANGELOG.md index b3425cd155..7b2e95bfd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - Auto-reply: removed `autoReply` from Discord/Slack/Telegram channel configs; use `requireMention` instead (Telegram topics now support `requireMention` overrides). ### Fixes +- macOS: harden Voice Wake tester/runtime (pause trigger, mic persistence, local-only tester) and keep transcript logs private. Thanks @xadenryan for PR #438. - Doctor/Daemon: surface gateway runtime state + port collision diagnostics; warn on legacy workspace dirs. - Discord: format slow listener logs in seconds to match shared duration style. - CLI: show colored table output for `clawdbot cron list` (JSON behind `--json`). diff --git a/apps/macos/Sources/Clawdbot/VoiceWakeRuntime.swift b/apps/macos/Sources/Clawdbot/VoiceWakeRuntime.swift index d29f7b75ef..5ed48daea9 100644 --- a/apps/macos/Sources/Clawdbot/VoiceWakeRuntime.swift +++ b/apps/macos/Sources/Clawdbot/VoiceWakeRuntime.swift @@ -399,11 +399,11 @@ actor VoiceWakeRuntime { return "\(seg.text)@\(start)-\(end)" }.joined(separator: ", ") - self.logger.info( - "voicewake runtime transcript='\(transcript, privacy: .public)' textOnly=\(textOnly) " + + self.logger.debug( + "voicewake runtime transcript='\(transcript, privacy: .private)' textOnly=\(textOnly) " + "isFinal=\(isFinal) timing=\(timingCount)/\(segments.count) " + "capturing=\(capturing) fallback=\(usedFallback) " + - "\(matchSummary) segments=[\(segmentSummary, privacy: .public)]") + "\(matchSummary) segments=[\(segmentSummary, privacy: .private)]") } private func noteAudioTap(rms: Double) { diff --git a/apps/macos/Sources/Clawdbot/VoiceWakeTester.swift b/apps/macos/Sources/Clawdbot/VoiceWakeTester.swift index 6b10260b5f..34b1060802 100644 --- a/apps/macos/Sources/Clawdbot/VoiceWakeTester.swift +++ b/apps/macos/Sources/Clawdbot/VoiceWakeTester.swift @@ -282,10 +282,10 @@ final class VoiceWakeTester { "match=true gap=\(String(format: "%.2f", $0.postGap))s cmdLen=\($0.command.count)" } ?? "match=false" - self.logger.info( - "voicewake test transcript='\(transcript, privacy: .public)' textOnly=\(textOnly) " + + self.logger.debug( + "voicewake test transcript='\(transcript, privacy: .private)' textOnly=\(textOnly) " + "isFinal=\(isFinal) timing=\(timingCount)/\(segments.count) " + - "\(matchSummary) gaps=[\(gaps, privacy: .public)] segments=[\(segmentSummary, privacy: .public)]") + "\(matchSummary) gaps=[\(gaps, privacy: .private)] segments=[\(segmentSummary, privacy: .private)]") } private static func debugSegments(_ segments: [WakeWordSegment]) -> String {