- Configure how to send messages in each mode. Choose between Enter or Command+Enter - for each input type. + Configure how to send messages in each mode. Choose between Enter or{' '} + {isMacOS() ? 'Command' : 'Ctrl'}+Enter for each input type.
{/* AI Mode Setting */} @@ -1324,13 +1324,13 @@ export const SettingsModal = memo(function SettingsModal(props: SettingsModalPro border: `1px solid ${theme.colors.border}`, }} > - {props.enterToSendAI ? 'Enter' : '⌘ + Enter'} + {props.enterToSendAI ? 'Enter' : isMacOS() ? '⌘ + Enter' : 'Ctrl + Enter'}{props.enterToSendAI ? 'Press Enter to send. Use Shift+Enter for new line.' - : 'Press Command+Enter to send. Enter creates new line.'} + : `Press ${isMacOS() ? 'Command' : 'Ctrl'}+Enter to send. Enter creates new line.`}
@@ -1352,13 +1352,13 @@ export const SettingsModal = memo(function SettingsModal(props: SettingsModalPro border: `1px solid ${theme.colors.border}`, }} > - {props.enterToSendTerminal ? 'Enter' : '⌘ + Enter'} + {props.enterToSendTerminal ? 'Enter' : isMacOS() ? '⌘ + Enter' : 'Ctrl + Enter'}{props.enterToSendTerminal ? 'Press Enter to send. Use Shift+Enter for new line.' - : 'Press Command+Enter to send. Enter creates new line.'} + : `Press ${isMacOS() ? 'Command' : 'Ctrl'}+Enter to send. Enter creates new line.`}
diff --git a/src/renderer/components/Wizard/screens/ConversationScreen.tsx b/src/renderer/components/Wizard/screens/ConversationScreen.tsx index 071e812a..d8cb4a37 100644 --- a/src/renderer/components/Wizard/screens/ConversationScreen.tsx +++ b/src/renderer/components/Wizard/screens/ConversationScreen.tsx @@ -34,6 +34,7 @@ import type { WizardError } from '../services/wizardErrorDetection'; import { AUTO_RUN_FOLDER_NAME, wizardDebugLogger } from '../services/phaseGenerator'; import { getNextFillerPhrase } from '../services/fillerPhrases'; import { ScreenReaderAnnouncement } from '../ScreenReaderAnnouncement'; +import { isMacOS } from '../../../utils/shortcutFormatter'; interface ConversationScreenProps { theme: Theme; @@ -1613,7 +1614,7 @@ export function ConversationScreen({ className="px-1.5 py-0.5 rounded text-xs" style={{ backgroundColor: theme.colors.border }} > - ⌘+Enter + {isMacOS() ? '⌘' : 'Ctrl'}+Enter Send diff --git a/src/renderer/contexts/ToastContext.tsx b/src/renderer/contexts/ToastContext.tsx index 8f7ca541..124bcfa2 100644 --- a/src/renderer/contexts/ToastContext.tsx +++ b/src/renderer/contexts/ToastContext.tsx @@ -98,7 +98,16 @@ export function ToastProvider({ // Capture audio feedback state for logging const { enabled: audioEnabled, command: audioCommand } = audioFeedbackRef.current; + // Determine if we have content to send for custom notification + // Also skip if there's no content to send + const hasContent = toast.message && toast.message.trim().length > 0; + + // Determine if custom notification will actually be triggered + const willTriggerCustomNotification = + audioEnabled && audioCommand && !toast.skipCustomNotification && hasContent; + // Log toast to system logs (include audio notification info) + // Only log enabled: true when we will actually trigger the notification window.maestro.logger.toast(toast.title, { type: toast.type, message: toast.message, @@ -107,23 +116,29 @@ export function ToastProvider({ taskDuration: toast.taskDuration, agentSessionId: toast.agentSessionId, tabName: toast.tabName, - // Audio/TTS notification info - audioNotification: - audioEnabled && audioCommand - ? { - enabled: true, - command: audioCommand, - } - : { - enabled: false, - }, + // Audio/TTS notification info - reflects whether notification WILL be triggered + audioNotification: willTriggerCustomNotification + ? { + enabled: true, + command: audioCommand, + } + : { + enabled: false, + reason: !audioEnabled + ? 'disabled' + : !audioCommand + ? 'no-command' + : toast.skipCustomNotification + ? 'opted-out' + : !hasContent + ? 'no-content' + : 'unknown', + }, }); // Run custom notification command if enabled and configured // Skip for toasts that explicitly opt out (e.g., synopsis messages) - // Also skip if there's no content to send - const hasContent = toast.message && toast.message.trim().length > 0; - if (audioEnabled && audioCommand && !toast.skipCustomNotification && hasContent) { + if (willTriggerCustomNotification) { console.log( '[ToastContext] Running custom notification with message:', toast.message,