d3ro-voice/CHANGELOG.md
Yun Chan 4fdf8bfdf8
Some checks failed
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 4s
fix(config): v0.2.1-alpha — CONFIG_DEFAULTS 7키 기본값 누락 핫픽스 (앱 실행 불가)
refactor-wave WS2가 AppConfig 인터페이스에 7키 추가 + as never 16건 제거했으나
CONFIG_DEFAULTS(ConfigService.ts) 기본값 누락 → 기존 사용자 config(0.1.x) 마이그레이션
시 configGet undefined → main 프로세스 .map() 크래시 (v0.2.0-alpha 앱 실행 불가).

수정: CONFIG_DEFAULTS에 7키 기본값 추가.
검증: dev 실행 — main 빌드 + electron start 정상 (수정 전엔 이 단계 크래시).
교훈: 배포 전 dev 실행 + 산물 e2e 필수. typecheck GREEN ≠ 런타임 안전.
2026-07-22 04:06:43 +09:00

177 lines
10 KiB
Markdown

# Changelog
All notable changes to D3RO Voice will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Planned
- macOS / Linux support
- Additional Whisper model management UI
- Cloud-optional backup (encrypted, opt-in)
- Plugin system for custom pipelines
## [0.2.1-alpha] - 2026-07-22
### Fixed
- **v0.2.0-alpha 치명적 버그 (앱 실행 불가)**: refactor-wave WS2(AppConfig SSOT)에서 7개 키(`customInstructions`, `llmChains`, `voiceCommandRules`, `voiceCommandsEnabled`, `activeInstructionId`, `activeChainId`, `captionAudioSource`)를 AppConfig 인터페이스에 추가하고 `as never` 16건을 제거했으나 **`CONFIG_DEFAULTS`(ConfigService.ts) 기본값을 누락** → 기존 사용자 config(0.1.x) 마이그레이션 시 `configGet()``undefined` 반환 → main 프로세스 `.map()` 크래시. `CONFIG_DEFAULTS`에 기본값(`[]`, `[]`, `[]`, `false`, `''`, `null`, `'mic'`) 추가.
- **교훈**: typecheck/lint/unit test가 GREEN이어도 런타임을 보장하지 않음. **배포 전 `npm run dev` 실행 + 산물 설치 e2e 필수** — 이번에 e2e를 건너뛰어 사용자가 발견.
## [0.2.0-alpha] - 2026-07-22
> **다운로드**: Windows `D3RO-Voice-Setup-0.2.0-alpha-x64.exe` · macOS `D3RO-Voice-0.2.0-alpha-arm64.dmg`
> (Release assets 첨부) — 기존 Windows 사용자는 자동 업데이트(4시간 주기)로 수신됩니다.
> macOS는 ad-hoc 서명 — Gatekeeper 차단 시 우클릭→열기.
Midnight Glass v2 전면 재설계 + refactor-wave 대규모 코드 품질 정리. 기능 추가보다 시각·구조 개선 중심.
### Added
- **Midnight Glass v2 전면 리디자인**: 미드나이트 네이비 + 글래스모피즘 카드(헤어라인 그라디언트 + 앰비언트 글로우) + 시안→블루→퍼플→마젠타 그라디언트. 6종 테마(dark/light/nord/solarized/catppuccin/dracula) 전환. 보더리스 UI + 커스텀 TitleBar. Pretendard Variable 폰트 오프라인 번들.
- **TiltCard DS**: 커서 추종 3D 틸트 + 스페큘러 빛 반사 (reduced-motion 완전 존중)
- **GradientWave / StatRing DS** 신규 (기존 CrtDisplay WebGL 오실로스코프를 그라디언트 스펙트럼 웨이브로 교체)
- **실시간 부분 전사**: 받아쓰기 홀드 중 RecordingTip에 interim 전사 표시
- **Windows 자동 업데이트**: electron-updater + GitLab Generic Registry feed (4시간 주기, 재시작 다이얼로그)
- **멀티플랫폼 배포**: macOS arm64(ad-hoc 서명) + Windows 동시 릴리스. GitLab Package Registry(버전별+latest) + Release 자동 생성
- **번들 Ollama v0.32.1**: 온보딩 gemma4:e4b pull 412 실패 해소, GPU 런타임 가지치기로 ~1GB→119MB 슬림화
- **gpt-realtime-2.1 라이브 음성 대화** (Premium 백엔드, OpenAI Realtime) — 로컬 파이프라인 자동 fallback
- **Whisper large-v3-turbo 기본 STT**: 6배 빠름, 사이드카 백그라운드 다운로드 API
### Fixed
- **한국어 날짜 "TODAY"/"YESTERDAY" 표시 버그** — `date.today/yesterday` 중복 정의(JSON last-wins) 해소
- **팝업/렌더러 색상 충돌** — 팝업이 v1 주황(`#f25b29`)으로 렌더되던 것을 파랑(`#3b82f6`)으로 SSOT 정합
- **받아쓰기 파이프라인 4버그**: press 액션이 STT 초기화를 await하며 큐 점유→release 지연/유령 세션; 사이드카 crash 루프; RecordingTip hide 타이머 leak; 빈 STT 가드
- **온보딩 무진행 구간 UX**: verifying(모델 검증) 단계 피드백 + 중복 실행 가드
- **마이크 테스트 조기 종료**: 초기 `level:0`을 종료 신호로 오인하던 버그
- **트레이 아이콘 빈 이미지** 버그
### Changed
- **`accent.amber``accent.main` 전면 통일** (162건, deprecated 별칭 2곳 제거) — desktop/web/admin/mobile/ui-native 전역. 6 테마 일관.
- **IPC 채널 SSOT 일원화**: `ipc-channels.ts`에 9 그룹/키 추가(INSTRUCTION, POPUP_*, CLIPBOARD, APP 등), 하드코딩 채널 문자열 제거, `ipcSuccess/ipcError` 헬퍼 통일, `catch(error)` 패턴 32건
- **AppConfig 타입 강화**: 7개 누락 키 추가, `as never` 16건 제거, dynamic `require` → static import
- **팝업 i18n**: 4종 팝업(command/history/result/recording-tip) 한국어/영어 하드코딩 → `t()` 키 주입 (`popup.*` 17키)
- **매직 리터럴 토큰화**: 인라인 fontSize/fontWeight/borderRadius → `d3roTypo`/`d3roRadius` 토큰 (렌더러 전역)
### Removed
- DS 미사용 3종: **MetalDial, ButtonGroup, CrtDisplay** (barrel export 포함)
- **미사용 의존성 8종**: `@mui/icons-material`, `@d3ro/api-client`, `fluent-ffmpeg`(+`@types`), `pdf-parse`, `node-record-lpcm16`(+`.d.ts`), `electron-audio-loopback`, `@electron-toolkit/preload`
- **i18n 고아 키 967건** (12 locale) — camelCase license.feature 15키 등 동적 참조는 P1 재검증으로 보존
- `services/index.ts` 데드 레지스트리, `electron-builder.yml` Linux 섹션
### Internal
- **refactor-wave Wave 1+2**: 정책(`docs/REFACTOR_POLICY.md`) 수립 → 공격적 감사(106건) → 9 워크스트림 병렬 → 분리 커밋 9개 + 메타 2. 공유 패키지 토큰 SSOT, IPC/타입 정합, 데드코드 대량 제거. 보고서 `docs/REFACTOR_WAVE1_REPORT.md`·`WAVE2_REPORT.md`.
---
## [1.0.0] - 2026-04-06
### Added
#### Core Pipeline (Phase 1-3)
- Electron 33 + React 19 + MUI 7 + TypeScript strict mode
- AudioCaptureService: SoX-based PCM16 16kHz mono microphone capture
- LocalSTTService: faster-whisper Python sidecar (dual-condition flush pattern)
- VoiceModeService: 9-state RecognitionState + 4-state AudioState dual state machine
- HotkeyService: uiohook-napi global keyboard hooking (hold/toggle/double-press)
- TextInsertService: clipboard save/set/Ctrl+V/restore via @nut-tree-fork/nut-js
- RecordingTip popup: 9 wave bars with cosine distribution, thinking progress bar
- ResultPopup: auto-close with mouse hover pause, copy button
- Settings modal: General/Audio/STT/LLM tabs
- System tray with close-to-tray support
#### Cursor History Popup (Phase 3.5)
- Ctrl+Shift+V global shortcut opens recent transcription history at cursor position
- Arrow key navigation, Enter to paste, 1-9 direct select, ESC dismiss
- focusable: false maintains active app focus
#### LLM Integration (Phase 4)
- LocalLLMService: Ollama REST API with NDJSON streaming
- 6 system prompts: refine/translate/summarize/grammar/expand/custom
- VoiceModeService LLM integration with original text fallback
#### Database & History (Phase 5)
- better-sqlite3 + drizzle-orm (WAL mode)
- HistoryService: CRUD + search + stats + 30-day retention policy
- DictionaryService: custom words + STT initialPrompt injection
- Dashboard with real statistics
#### Custom Instructions & i18n (Phase 6)
- CustomInstructionService: 5 presets + user-defined CRUD
- i18n system: ko/en with t() function and React context
#### Build & Test (Phase 7)
- vitest: 41 unit tests (HistoryService, DictionaryService, VoiceModeService, etc.)
- electron-builder: NSIS installer for Windows x64
- GitLab CI/CD: lint, typecheck, test, build, release pipeline
- SoX download script, PyInstaller sidecar build script
#### Speakly Pattern Enhancement (Phase 7.5)
- SoundEffectService: WAV preload, fire-and-forget playback
- AutoLaunchService: app.setLoginItemSettings
- TextInsertService: basic insertion verification
- VoiceModeService: sound effect integration on session events
#### UI Redesign (Phase 8)
- Industrial instrument aesthetic (dark theme, amber #f25b29 accent)
- Design system: 9 DS components (CrtDisplay, InstrumentPanel, Led, PhysicalButton, MetalCard, PhosphorText, MetalDial, ScreenPanel, ButtonGroup)
- d3roPalette SSOT: all colors via CSS custom properties
- HotkeyRecordModal: key combination recording UI
- DashboardPage: feature-focused layout with stats + history + system status
#### Quality & UX (Phase 9)
- 4-step onboarding wizard (welcome, mic, hotkey, Ollama)
- Microphone test UI with level meter
- Audio recording WAV file saving
- MetalDial component with drag rotation
- Ctrl+Shift+C command popup at cursor position
- Dictionary inline editing
- Ollama installation guide with nudging bubble
- Real-time UI refresh on data changes
#### Killer Features (Phase 10)
- CaptionService: 3-second chunk continuous transcription with overlay popup
- VoiceCommandService: keyword-to-command matching engine (4 preset keywords)
- ScreenContextService: active window detection + selected text capture
- ChainService: sequential LLM command pipeline with step-by-step events
- MemoService: memo tags DB table + tag CRUD + markdown export
- Shared components: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard
- Shared utilities: formatters.ts (formatDuration, getDateKey, formatNumber)
#### Monetization (Phase 11)
- LicenseService: Free/Pro/Pro+ 3-tier system
- Feature gating with 16 feature enums and tier-based access mapping
- Daily usage quota tracking (Free: 20 dictation/day, 10 LLM/day)
- LemonSqueezy API integration for license key activation
- UpgradePromptModal, ProBadge, useProFeature hook
- Settings License tab with tier comparison table
#### Pro Features (Phase 12)
- FileTranscriptionService: ffmpeg PCM conversion, 30s chunk sequential STT
- MeetingSummaryService: caption session LLM summarization
- DictationTemplateService: CRUD + session state machine, 3 presets
#### Pro+ Premium (Phase 13)
- VoiceConversationService: STT-LLM-TTS loop for voice conversations
- TTSPlaybackService: Windows SAPI via PowerShell
- RAGService: Ollama nomic-embed-text embeddings, SQLite vector storage, cosine similarity
- KnowledgeBasePage: document management, indexing progress, Q&A UI
- VoiceActionService: LLM JSON action plans, 6 presets, dangerous command blocking
#### Landing Page
- Promotional website at `site/` directory
- Vite + React 19 + Tailwind CSS
- 4 design references integrated into D3RO brand identity
- CRT screen effects, crosshair decorations, noise textures (CSS only)
- 10-language i18n: en/ko/ja/zh/es/fr/de/pt/ru/vi
- GitHub Pages auto-deployment workflow
### Technical Details
- Total IPC channels: ~200+
- Total services: 20+
- Total error codes: 0-878
- Design system components: 9
- Supported languages (app): ko, en
- Supported languages (landing): 10
- Test count: 41 unit tests
- Build target: Windows x64 NSIS installer