d3ro-voice/CLAUDE.md
Yun Chan c3ddd36c6f
Some checks failed
deploy-site / deploy (push) Failing after 40s
docs: record the 1.1.0 release and add the infrastructure map
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.
2026-09-16 23:27:52 +09:00

4.3 KiB

D3RO-VOICE — 로컬 AI 음성 어시스턴트

Speakly RE 기반 완전 로컬 음성 어시스턴트. Ollama + Whisper + TTS.

에이전트 진입점: 작업 전 AGENTS.md를 읽고, 기능/인프라 현황은 docs/map/를 참조한다. 기능 추가·삭제·변경·백로그 이관 시 docs/map/10-feature-catalog.mddocs/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종)