- 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 자동 실행 모두 정상
1. HotkeyService: modifier 먼저 놓기 대응
- Alt+1에서 Alt를 먼저 놓아도 release 감지
- _handleKeyUp에서 pressed 핫키의 구성 키(main/modifier) 매칭
2. ResultPopup auto-close IPC 핸들러 추가
- window:hideResultPopup 핸들러가 없어서 팝업이 안 꺼지던 버그
- window-handlers.ts에 hideResultPopup/hideRecordingTip 핸들러 등록
3. bootstrap.ts 이중 팝업 제어 제거
- session-completed에서 무조건 showResultPopup 호출하던 코드 제거
- 팝업 제어는 VoiceModeService 내부에서만 처리
- bootstrap은 효과음만 담당