From 1ca7895ffb7eb2d8a11aa9136e2e8d40d7d22f98 Mon Sep 17 00:00:00 2001 From: James Pine Date: Thu, 23 Apr 2026 19:50:55 -0700 Subject: [PATCH] fix(captures): hide macOS-only copy when running on Windows / Linux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two surfaces leaked macOS-specific copy onto other platforms: 1. The Input Monitoring + Accessibility rows in the readiness checklist rendered everywhere. On Windows/Linux the Rust permission stubs return true, so the rows showed as permanent green checkmarks with copy like "macOS allows Voicebox to detect your global shortcut." — nonsense when you're on Windows. Gate both rows on a userAgent-based isMacOS check so they only render where the underlying TCC permission actually exists. 2. The global-shortcut setting description ended with "macOS will ask for Input Monitoring permission the first time you turn this on." That sentence rendered on every platform. The readiness checklist already surfaces the TCC requirement at the right moment on macOS, so the description doesn't need the platform note — drop it from en / ja / zh-CN / zh-TW. Other macOS strings (AccessibilityNotice, InputMonitoringNotice, their "stillMissing" hints) are already gated behind the Rust permission booleans returning false, which never happens on Windows/Linux, so they stay inert without further changes. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../DictationReadinessChecklist.tsx | 75 +++++++++++-------- app/src/i18n/locales/en/translation.json | 2 +- app/src/i18n/locales/ja/translation.json | 2 +- app/src/i18n/locales/zh-CN/translation.json | 2 +- app/src/i18n/locales/zh-TW/translation.json | 2 +- 5 files changed, 47 insertions(+), 36 deletions(-) diff --git a/app/src/components/CapturesTab/DictationReadinessChecklist.tsx b/app/src/components/CapturesTab/DictationReadinessChecklist.tsx index 0fd6279f..08e1db7d 100644 --- a/app/src/components/CapturesTab/DictationReadinessChecklist.tsx +++ b/app/src/components/CapturesTab/DictationReadinessChecklist.tsx @@ -232,39 +232,50 @@ export function DictationReadinessChecklist({ /> )} - } - title={t('captures.readiness.inputMonitoring.label')} - description={ - readiness.inputMonitoring - ? t('captures.readiness.inputMonitoring.ready') - : t('captures.readiness.inputMonitoring.missing') - } - ready={readiness.inputMonitoring} - action={ - - } - /> + {/* Input Monitoring + Accessibility are macOS-only TCC permissions. + The Rust stubs return true on Windows/Linux, so rendering these + rows there would show permanent green checkmarks with copy + that talks about macOS — noise. Hide on non-mac. */} + {isMacOS && ( + } + title={t('captures.readiness.inputMonitoring.label')} + description={ + readiness.inputMonitoring + ? t('captures.readiness.inputMonitoring.ready') + : t('captures.readiness.inputMonitoring.missing') + } + ready={readiness.inputMonitoring} + action={ + + } + /> + )} - } - title={t('captures.readiness.accessibility.label')} - description={ - readiness.accessibility - ? t('captures.readiness.accessibility.ready') - : t('captures.readiness.accessibility.missing') - } - ready={readiness.accessibility} - action={ - - } - /> + {isMacOS && ( + } + title={t('captures.readiness.accessibility.label')} + description={ + readiness.accessibility + ? t('captures.readiness.accessibility.ready') + : t('captures.readiness.accessibility.missing') + } + ready={readiness.accessibility} + action={ + + } + /> + )} ); } + +const isMacOS = + typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent); diff --git a/app/src/i18n/locales/en/translation.json b/app/src/i18n/locales/en/translation.json index 91fdd00c..9661fcb8 100644 --- a/app/src/i18n/locales/en/translation.json +++ b/app/src/i18n/locales/en/translation.json @@ -851,7 +851,7 @@ "description": "Capture from anywhere on your machine with a global shortcut.", "globalShortcut": { "title": "Global shortcut", - "description": "Hold the shortcut to record from anywhere on your machine. Release to transcribe. macOS will ask for Input Monitoring permission the first time you turn this on." + "description": "Hold the shortcut to record from anywhere on your machine. Release to transcribe." }, "pushToTalk": { "title": "Push-to-talk shortcut", diff --git a/app/src/i18n/locales/ja/translation.json b/app/src/i18n/locales/ja/translation.json index 7508aa2e..ca302c0d 100644 --- a/app/src/i18n/locales/ja/translation.json +++ b/app/src/i18n/locales/ja/translation.json @@ -851,7 +851,7 @@ "description": "グローバルショートカットでマシン上のどこからでもキャプチャできます。", "globalShortcut": { "title": "グローバルショートカット", - "description": "ショートカットを押し続けるとマシン上のどこからでも録音できます。離すと文字起こしが行われます。最初に有効化したとき、macOS から入力監視の許可を求められます。" + "description": "ショートカットを押し続けるとマシン上のどこからでも録音できます。離すと文字起こしが行われます。" }, "pushToTalk": { "title": "プッシュトゥトーク用ショートカット", diff --git a/app/src/i18n/locales/zh-CN/translation.json b/app/src/i18n/locales/zh-CN/translation.json index 66d91bcb..a479e469 100644 --- a/app/src/i18n/locales/zh-CN/translation.json +++ b/app/src/i18n/locales/zh-CN/translation.json @@ -851,7 +851,7 @@ "description": "使用全局快捷键在系统的任何位置进行捕获。", "globalShortcut": { "title": "全局快捷键", - "description": "按住快捷键即可在系统的任何位置录制。松开后进行转录。首次开启时,macOS 会请求「输入监控」权限。" + "description": "按住快捷键即可在系统的任何位置录制。松开后进行转录。" }, "pushToTalk": { "title": "按住说话快捷键", diff --git a/app/src/i18n/locales/zh-TW/translation.json b/app/src/i18n/locales/zh-TW/translation.json index 7ed5c22c..eed6c07a 100644 --- a/app/src/i18n/locales/zh-TW/translation.json +++ b/app/src/i18n/locales/zh-TW/translation.json @@ -851,7 +851,7 @@ "description": "使用全域快捷鍵從電腦上任何位置進行擷取。", "globalShortcut": { "title": "全域快捷鍵", - "description": "按住快捷鍵以從電腦上任何位置錄音。放開後進行轉錄。第一次開啟時 macOS 會要求輸入監控權限。" + "description": "按住快捷鍵以從電腦上任何位置錄音。放開後進行轉錄。" }, "pushToTalk": { "title": "按住說話快捷鍵",