Release notes for 1.1.0 were split between an Unreleased section and the version section, so the published notes would have omitted the update-feed and desktop changes. Everything shipping in this version now sits under one `## [1.1.0]` heading. `docs/map/` becomes the entry point for what infrastructure exists per platform and how far each feature is developed, with a documented update protocol so feature work and this map do not drift apart again. The release guide now states that installer binaries live in the update feed rather than the repository.
4.3 KiB
D3RO-VOICE — 로컬 AI 음성 어시스턴트
Speakly RE 기반 완전 로컬 음성 어시스턴트. Ollama + Whisper + TTS.
에이전트 진입점: 작업 전
AGENTS.md를 읽고, 기능/인프라 현황은docs/map/를 참조한다. 기능 추가·삭제·변경·백로그 이관 시docs/map/10-feature-catalog.md와docs/map/11-gap-backlog.md를 반드시 함께 갱신한다 (규칙:docs/map/12-update-protocol.md).
기술 스택
Electron 33+ | React 19 + MUI 7 + Vite | TypeScript 5.7+ strict better-sqlite3 + drizzle-orm | faster-whisper (Python sidecar) | Ollama REST uiohook-napi | @nut-tree-fork/nut-js | electron-store | electron-log
빌드
npm run dev # Electron + Vite dev
npm run build # 프로덕션 빌드
npm run test # vitest
npm run typecheck # tsc --noEmit
코딩 규칙
- strict mode, any 금지, console.log 금지 (logger 사용)
- 서비스: 싱글톤 + EventEmitter
- IPC:
${feature}:${action}, D3ROError + ErrorCode - 메인앱=React+MUI, 팝업=Vanilla JS
- 테마 SSOT: d3roPalette/d3roShadow만 사용, hex 하드코딩 금지 (theme.ts 제외)
- i18n: t() 함수, 하드코딩 한국어/영어 금지
- Co-Authored-By, Claude 관련 커밋 문구 금지
- Windows 데스크톱 실행: AI 에이전트 서브쉘(가상 데스크톱
exebox)에서 GUI 백그라운드 구동을 반복하지 말고, 사용자가run-desktop.bat또는 외부 터미널에서 실행하도록 안내. - Single Instance Lock:
app.setName('d3ro-voice')와app.setAppUserModelId를 최상단 선언하고 dev 모드 사일런트 종료 방지. - 오디오 장치 탐색:
execSync동기 블로킹 금지 (반드시exec비동기 논블로킹). - GPU 충돌 방지:
app.disableHardwareAcceleration()및--disable-gpu유지.
핵심 패턴 (Speakly 차용)
- RecognitionState(9) + AudioState(4) 이중 상태머신
- 이중 조건 플러시 (모델 로딩 + 오디오 버퍼링 병렬)
- 텍스트 삽입: clipboard save→set→Ctrl+V→restore
- 윈도우: 프리로딩 + 2-phase 리사이즈
- 녹음 UI: 9개 웨이브 바, cos 분포, 100ms
현재 상태
Phase 1~15.5 전체 완료 + 랜딩 페이지(site/). 차단 이슈: @nut-tree-fork/nut-js 포크 사용
업데이트 / 릴리스
자동 업데이트는 electron-updater + canonical Forgejo feed
(git.chanpaca.net/api/packages/yunchan/generic/d3ro-voice/latest). GitLab project 1172은
legacy mirror다. 채널·최소 지원 버전·강제 업데이트·증분/전체·staged rollout·킬 스위치는
release/update-policy.json이 정본이다. 릴리스는 annotated vX.Y.Z 태그에서만 게시하며
태그는 불변이다. 규칙은 AGENTS.md §6, 평가·방법론은
docs/deployment/update-system-assessment.md 참조.
설계 문서 (구현 시 Read 도구로 참조)
- docs/design/00-master-architecture.md — 시스템 아키텍처, 초기화/종료, 서비스 목록
- docs/design/01-service-specifications.md — 서비스 인터페이스, 상태머신, 이벤트
- docs/design/02-ipc-and-types.md — IPC 채널 전체, 타입, 에러코드, preload API
- docs/design/03-db-and-ui.md — DB 스키마, React 컴포넌트, 팝업 명세, MUI 테마
서비스 목록 (src/main/services/)
Core: LoggerService, ConfigService, VoiceModeService(오케스트레이터) Audio: AudioCaptureService, LocalSTTService, LocalLLMService, TTSPlaybackService Input: HotkeyService, TextInsertService, SoundEffectService, AutoLaunchService Data: HistoryService, DictionaryService, CustomInstructionService, LicenseService Phase10+: MemoService, VoiceCommandService, ScreenContextService, ChainService, CaptionService Phase12+: FileTranscriptionService, MeetingSummaryService, DictationTemplateService Phase13+: VoiceConversationService, RAGService, VoiceActionService Phase14: MeetingModeService Phase14.5: MeetingDocTemplateService + 다중 문서 생성/편집/내보내기 Phase15: Auto Polish + AI 채팅 + 마인드맵 + 공유 Phase15.5: 화자 구분 (LLM 추정 + pyannote 준비)
DS 컴포넌트 (src/renderer/components/ds/)
CrtDisplay, InstrumentPanel, Led, PhysicalButton, MetalCard, PhosphorText(13변형), MetalDial, ScreenPanel, ButtonGroup
디자인 토큰 (theme.ts)
d3roPalette(색상) | d3roTypo(13단계) | d3roShadow(10종) | d3roRadius(7종)