d3ro-voice/apps
윤찬 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
..
desktop fix(desktop): hold 핫키 macOS beep 차단 + bootstrap import 누락 픽스 2026-04-11 09:17:01 +09:00
mobile feat(V2-4차): Database 제네릭 복원 + /chat + /knowledge + Resend + Push + 문서 생성 2026-04-10 08:51:53 +09:00
web feat(V2-6차): 테마 토글 + Mermaid + 오디오 재생 + Dashboard 차트 2026-04-11 08:57:27 +09:00