diff --git a/apps/desktop/src/app/chat/composer/hooks/use-composer-voice.ts b/apps/desktop/src/app/chat/composer/hooks/use-composer-voice.ts index c3b7b96249d..bc833d9f305 100644 --- a/apps/desktop/src/app/chat/composer/hooks/use-composer-voice.ts +++ b/apps/desktop/src/app/chat/composer/hooks/use-composer-voice.ts @@ -164,17 +164,23 @@ export function useComposerVoice({ .catch(() => undefined) }, []) + // The ref is a request token (did WE issue wake.pause?), not an atom mirror — + // it guards resumeWakeIfPaused from resuming a detector another surface owns. + const pauseWakeForVoice = useCallback(() => { + wakePausedRef.current = true + void $gateway + .get() + ?.request('wake.pause', {}) + .catch(() => undefined) + }, []) + useEffect(() => { if (voiceConversationActive) { - wakePausedRef.current = true - void $gateway - .get() - ?.request('wake.pause', {}) - .catch(() => undefined) + pauseWakeForVoice() } else { resumeWakeIfPaused() } - }, [resumeWakeIfPaused, voiceConversationActive]) + }, [pauseWakeForVoice, resumeWakeIfPaused, voiceConversationActive]) useEffect(() => resumeWakeIfPaused, [resumeWakeIfPaused])