d3ro-voice/apps/desktop
윤찬 2409cf9bd8 fix(desktop): hold 핫키 macOS beep 차단 + bootstrap import 누락 픽스
문제 1: hideRecordingTip is not defined (Action processing error)
- VoiceModeService는 import OK
- 그러나 bootstrap.ts에서 hideRecordingTip()를 호출하지만 import 목록에 없음
- voiceMode.on('session-cancelled') / voiceMode.on('error')에서 ReferenceError
- session-cancelled 후 RecordingTip 팝업이 안 닫혀서 누적 문제 발생 가능

수정:
- bootstrap.ts WindowManager import에 hideRecordingTip + updateRecordingTipState 추가

문제 2: 핫키 누르면 macOS 시스템 beep
- uiohook-napi는 키 이벤트를 모니터링만 하고 swallow 안 함
- macOS에서 ⌘+⇧+1 같은 hold 핫키가 OS로 그대로 전달되어 받는 곳이 없으면 beep
- 사용자가 hold-to-talk 동안 계속 beep 발생 → UX 파괴

수정:
- HotkeyService에 Electron globalShortcut 통합
  - bindingToAccelerator: Windows VK + modifier 플래그 → Electron Accelerator string
    - macOS: meta=true → 'Cmd', Windows: meta=true → 'Super'
    - vkToAcceleratorKey: 0~9, A~Z, F1~F24, Esc, Space, Enter, Tab,
      Insert, Delete, Home, End, PageUp/Down, Arrow, ;,=,/,. 등
  - HotkeyConfig에 acceleratorString?: string 필드 추가
  - registerHotkey: bindingToConfig 결과의 accelerator를
    globalShortcut.register(accel, noop)으로 등록 → OS swallow
    실제 hold/release 처리는 그대로 uiohook이 담당
  - unregisterHotkey: globalShortcut.unregister(기존 accel)
  - stop(): globalShortcut.unregisterAll()
- 단일 modifier 핫키 (예: Right Alt만 누름)는 accelerator 변환 불가 — null 반환
  → globalShortcut 등록 건너뛰고 uiohook만 사용 (단일키는 OS가 swallow 안 해도 beep 없음)

검증:
- voice-dictation: accelerator=Shift+Cmd+1로 등록 (로그 확인)
- globalShortcut.register false 반환 없음
2026-04-11 09:17:01 +09:00
..
build feat(V2-5): macOS 빌드 지원 — 플랫폼 분기 + electron-builder mac 타겟 + CI 2026-04-08 15:57:16 +09:00
resources feat(V2-5): macOS 빌드 지원 — 플랫폼 분기 + electron-builder mac 타겟 + CI 2026-04-08 15:57:16 +09:00
scripts feat(V2-5): macOS 빌드 지원 — 플랫폼 분기 + electron-builder mac 타겟 + CI 2026-04-08 15:57:16 +09:00
sidecar feat(V2-1a): Monorepo 구조 전환 — apps/desktop으로 V1 이동 2026-04-08 14:04:41 +09:00
src fix(desktop): hold 핫키 macOS beep 차단 + bootstrap import 누락 픽스 2026-04-11 09:17:01 +09:00
tests feat(V2-1a): Monorepo 구조 전환 — apps/desktop으로 V1 이동 2026-04-08 14:04:41 +09:00
electron-builder.yml feat(V2-5): macOS 빌드 지원 — 플랫폼 분기 + electron-builder mac 타겟 + CI 2026-04-08 15:57:16 +09:00
electron.vite.config.ts feat(V2-1d): packages/i18n 추출 — Electron 독립 i18n 엔진 2026-04-08 14:57:27 +09:00
package.json feat(V2-4): 데스크톱 ↔ Supabase 동기화 (push only MVP) 2026-04-09 16:28:19 +09:00
tsconfig.json feat(V2-1a): Monorepo 구조 전환 — apps/desktop으로 V1 이동 2026-04-08 14:04:41 +09:00
tsconfig.node.json feat(V2-1d): packages/i18n 추출 — Electron 독립 i18n 엔진 2026-04-08 14:57:27 +09:00
tsconfig.web.json feat(V2-1d): packages/i18n 추출 — Electron 독립 i18n 엔진 2026-04-08 14:57:27 +09:00
vitest.config.ts feat(V2-1d): packages/i18n 추출 — Electron 독립 i18n 엔진 2026-04-08 14:57:27 +09:00