문제 1: STT release 안 됨 → 진짜 원인은 sidecar import 실패
- 시스템 python3 (Python 3.13)에 numpy/faster-whisper 등 sidecar deps 없음
- 매번 spawn 직후 ModuleNotFoundError로 즉사 → /health 30s 타임아웃
- 사용자에게는 '핫키 release 안 됨'으로 보이지만, 실제로는 핫키는 정상,
STT 응답이 없어 결과 팝업이 안 뜬 것
수정:
- apps/desktop/sidecar/.venv/ 신규 (gitignored)
- Python 3.13.13 venv
- 최소 deps: faster-whisper 1.2.1, fastapi 0.135, uvicorn 0.44, python-multipart, numpy 2.4
- torch/pyannote는 lazy import이므로 화자 구분 쓸 때 추가 설치
- main/utils/paths.ts: getSidecarCommand가 venv python 우선 사용
- existsSync(.venv/bin/python3) → 그걸로 spawn
- 없으면 시스템 python3 폴백 (기존 동작)
- Windows는 .venv/Scripts/python.exe
문제 2: HotkeyRecordModal 칩에 'WIN' 그대로 표기
- getKeyName()이 KEY_DISPLAY_MAP (Windows 전용 매핑) 사용
- 91/92 → 'Win' 하드코딩
- format-hotkey.ts의 keyCodeToName/getPlatform export
- HotkeyRecordModal.getKeyName이 keyCodeToName(platform) 호출
→ macOS는 ⌘/⇧/⌃/⌥
- 'Shift + Win + 1 — 저장을 눌러주세요' 안내 텍스트도 macOS는 구분자 없이 결합
- npm workspaces 루트 (apps/*, packages/*) 세팅
- V1 전체를 apps/desktop/으로 git mv (src, resources, tests, sidecar,
scripts, electron.vite.config.ts, electron-builder.yml, vitest.config.ts,
tsconfig.node.json, tsconfig.web.json)
- apps/desktop/package.json 신규 (name=@d3ro/desktop)
- productName: 'd3ro-voice' 명시 — app.getName()을 고정하여 userData 경로
%APPDATA%\d3ro-voice\ 그대로 유지 (기존 DB/설정 연속성 보장)
- 루트 package.json을 workspace 루트로 재구성, 공통 devDep만 유지
(typescript, eslint, prettier)
- turbo.json, tsconfig.base.json 추가 (Turborepo 자체 설치는 별도 sub-phase)
- memory/project_status.md 생성 (규칙 13)
검증:
- npm run typecheck 통과
- npm run build 통과 (electron-vite main+preload+renderer)
- npm run dev 실제 실행 → DB/핫키/Ollama 자동 실행 모두 정상