Phase 7~8 구현: 테스트 + 빌드 + CI/CD + SoundEffect + AutoLaunch + UI 리디자인

- vitest 41개 단위 테스트 (HistoryService, DictionaryService, CustomInstructionService, VoiceModeService, D3ROError)
- electron-builder.yml (NSIS, asarUnpack, extraResources)
- .gitlab-ci.yml (lint, typecheck, test, build, release)
- SoundEffectService: WAV 프리로드 + PowerShell 재생 + VoiceMode 연동
- AutoLaunchService: app.setLoginItemSettings + ConfigService 동기화
- TextInsertService: 간이 삽입 검증 (EditMonitor 경량)
- 번들링 인프라: SoX 다운로드 스크립트, PyInstaller 빌드, 경로 해상도 유틸
- AudioCaptureService/LocalSTTService: 번들 경로 자동 감지
- 08-design-system.md 기반 MUI 테마 (다크+라이트+auto 테마 시스템)
- 전체 UI 컴포넌트 리디자인: AppLayout, Dashboard, StatusBar, History, Dictionary, Commands, Settings
- 효과음 WAV 생성: recording-start, recording-stop, error
- EPIPE 에러 핸들링 추가
This commit is contained in:
Yun Chan 2026-04-05 09:12:56 +09:00
parent ed5541f769
commit 3f4d0c5828
40 changed files with 6034 additions and 580 deletions

View file

@ -77,10 +77,46 @@ npm run typecheck # tsc --noEmit
6. **녹음 UI**: 9개 웨이브 바, cos 분포 가중치, 100ms 애니메이션
## 현재 상태
Phase: 6 완료 (Phase 1~6 + 3.5 전체 완료)
마지막 완료: Phase 6 — 커스텀 명령어 + i18n (ko/en)
다음 작업: Phase 7 — 테스트 + 빌드 + 배포 (electron-builder, CI/CD)
차단 이슈: SoX 미설치, @nut-tree-fork/nut-js 포크 사용
Phase: 8 완료 (Phase 1~8 + 3.5 전체 완료)
마지막 완료: Phase 8 — UI 전면 리디자인 (08-design-system.md SSOT 적용)
다음 작업: 전사 테스트 (npm run dev) → 온보딩 위저드
차단 이슈: @nut-tree-fork/nut-js 포크 사용
### Phase 8 구현 내용
- 08-design-system.md SSOT 기반 MUI 테마 전면 교체 (다크+라이트+auto 테마 시스템)
- theme.ts: d3roPalette(SSOT), createD3ROTheme('dark'|'light'), getTheme(mode, prefersDark)
- App.tsx: auto 모드 → 시스템 설정 따름 (나중에 커스텀 테마 확장 가능)
- AppLayout: 앰버 LED, 라벨 스타일, 아이콘 색상, 네비게이션 앰버 선택
- DashboardPage: hero 수치(28px mono), 카드 그리드, LED 상태 패널, 태그 시스템
- StatusBar: LED 인디케이터 + 모노 폰트 + 핫키 힌트
- HistoryPage: 카드 레이아웃, 앰버/퍼플 태그, 모노 메타데이터
- DictionaryPage: 카드 레이아웃, 카테고리 태그, 사용 횟수 모노
- CommandsPage: 카드 레이아웃, BUILT-IN/CUSTOM 태그
- SettingsModal: 디자인 시스템 border/close 스타일
### Phase 7.5 구현 내용
- SoundEffectService: WAV 프리로드, fire-and-forget, PowerShell SoundPlayer로 재생
- AutoLaunchService: app.setLoginItemSettings, ConfigService 연동, syncWithConfig
- TextInsertService: 간이 삽입 검증 (EditMonitor 경량), 클립보드 확인
- VoiceModeService 효과음 연동: session-started(start), completed(stop), cancelled(cancel), error(error)
- IPC: system:playSound/setSoundEnabled/isSoundEnabled, config:setAutoLaunch/setCloseToTray
- Bootstrap: sound-effects, auto-launch 초기화 단계 추가
- 효과음 WAV 파일: scripts/generate-sounds.js로 생성 (recording-start/stop, error)
### Phase 7 구현 내용
- vitest 테스트 환경: vitest.config.ts, tests/setup.ts (electron/electron-log 모킹)
- 테스트 헬퍼: tests/helpers/createTestDb.ts (in-memory SQLite + drizzle)
- 단위 테스트 41개: HistoryService, DictionaryService, CustomInstructionService, VoiceModeService, D3ROError
- electron-builder: electron-builder.yml (NSIS, asarUnpack, extraResources)
- GitLab CI/CD: .gitlab-ci.yml (lint, typecheck, test, build, release)
- 빌드 스크립트: pack, dist, test:unit 추가
- 참고: better-sqlite3는 Electron용 빌드라 vitest에서 직접 사용 불가 → DB 서비스는 모킹 테스트
- 번들링 인프라: SoX 다운로드 스크립트, PyInstaller 빌드 스크립트, 경로 해상도 유틸
- src/main/utils/paths.ts: dev vs production 경로 자동 감지 (SoX, sidecar, sounds)
- AudioCaptureService: 번들 SoX 경로 사용 (getSoxPath)
- LocalSTTService: 번들 sidecar 경로 사용 (getSidecarCommand)
- scripts/download-sox.ps1: SoX Windows 바이너리 다운로드 → resources/sox/
- scripts/build-sidecar.py: PyInstaller → sidecar-dist/sidecar/sidecar.exe
### Phase 6 구현 내용
- CustomInstructionService: electron-store 기반, 프리셋 5개 (번역/요약/전문리라이트/코드설명/자유프롬프트)