Commit graph

16 commits

Author SHA1 Message Date
Yun Chan
6197ceb132 fix: 오디오 테스트를 실시간 레벨 미터로 개선
단발성 평균값 → 100ms 간격 실시간 RMS 스트리밍.
AudioCaptureService 직접 시작/5초 자동 중지.
테스트 버튼 누르면 레벨 바가 왔다갔다 반응.
2026-04-08 09:07:29 +09:00
Yun Chan
7a925bdeb9 fix: 설정 오디오 테스트 버튼 실제 동작 연결
voice.onAudioLevel 구독(실제 캡처 없음) → audio.testDevice 호출로 변경.
2초 캡처 후 실제 RMS 레벨을 레벨 바에 표시.
2026-04-08 09:05:36 +09:00
Yun Chan
d0c4f9ee53 Phase 14 구현: 회의 모드 (Meeting Mode)
실시간 녹음 + 타임스탬프 메모 + STT 전사 + LLM 구조화 회의록 + PDF/MD 내보내기.
CaptionService 연동, 동시 사용 충돌 방지, 긴 회의 2-pass 요약 지원.
DB 2테이블, IPC 15채널, UI 3뷰(목록/녹음/상세), 12개 locale i18n.
2026-04-08 01:16:52 +09:00
Yun Chan
a31f96bbb8 Phase 10~11 전체 구현: 킬러 피처 5종 + 수익화 시스템
Phase 10 킬러 피처:
- MemoService: 태그 CRUD + 마크다운 내보내기 (memo_tags DB)
- VoiceCommandService: 키워드→명령어 매칭, 프리셋 4종
- ScreenContextService: PowerShell 활성 윈도우 + Ctrl+C 선택 텍스트
- ChainService: LLM 명령어 순차 실행 파이프라인
- CaptionService: 6초 청크 연속 전사 + 시스템 오디오 루프백

VoiceModeService 파이프라인 통합:
- 녹음 시작 → 컨텍스트 캡처 → STT → 키워드 매칭 → LLM(체인/컨텍스트 주입) → 삽입

시스템 오디오 캡처:
- setDisplayMediaRequestHandler + audio: 'loopback' (IPC 브릿지)
- electron-audio-loopback 패키지 contextIsolation 호환 불가 → 직접 구현

Phase 11 수익화:
- LicenseService: Free/Pro/Pro+ 3티어, LemonSqueezy API
- Feature Gate: requireFeature/checkFeature/consumeFeature
- 일일 쿼터: Free dictation 20/일, LLM 10/일 (SQLite daily_usage)
- LicenseModal, ProBadge, UpgradePromptModal UI

디자인 보강:
- d3roTypo(13종), d3roShadow(10종), d3roRadius(7종) 토큰 시스템
- ScreenPanel, ButtonGroup DS 컴포넌트 신규
- PhosphorText 4→13종 변형, MetalDial conic-gradient 광택
- 공유 컴포넌트: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard

기타:
- 자막 핫키 SSOT 전체 연동 (Config→Hotkey→VoiceMode→Caption→Settings)
- StatusBar 자막 LED + 효과음, 자막 로딩 UI
- LLM 상태 이벤트 전파 수정 (폴링 제거 → onStatusChanged)
- 커맨드 팝업 "선택 해제" 항목 추가
2026-04-05 21:36:09 +09:00
Yun Chan
561502ec36 Settings 열기 속도 개선: 디바이스 비동기 로드 + 부팅 시 프리캐싱
- SettingsModal: 설정+핫키 먼저 로드 → 즉시 표시, 디바이스는 백그라운드
- bootstrap: 앱 부팅 시 getDevices() 미리 호출 → 캐싱
- 첫 번째 Settings 열기도 빠르게 (캐시 히트)
2026-04-05 13:43:33 +09:00
Yun Chan
dc06a326b5 Ollama 설치 안내 UI + 온보딩 Ollama 단계
- StatusBar: 오프라인 3초 후 넛징 버블 표시 ("설치 안내 보기→" 링크)
- OllamaGuideModal: 3단계 설치 안내 (다운로드→모델 pull→자동 연결)
- OnboardingModal: Step 3에 Ollama 설치 안내 단계 추가
- Settings 정보 탭: "초기 설정 안내 다시 보기" 버튼
- system.openExternal IPC 추가 (외부 URL 열기)
2026-04-05 13:38:26 +09:00
Yun Chan
4e23622c44 LLM 후처리 명령어 선택 기능 추가
- Settings LLM 탭: "기본 후처리 명령어" 드롭다운 추가
  (없음/다듬기/번역/요약/문법교정/커스텀)
- VoiceModeService: defaultLLMAction='none'이면 LLM 스킵
  (이전: 'refine' 아니면 무조건 스킵 → 수정)
- 사용자가 Settings에서 후처리 방식을 선택하면 모든 녹음에 적용
2026-04-05 13:15:54 +09:00
Yun Chan
2392d05ded 디바이스 목록 key 중복 수정: deviceId+index 조합 2026-04-05 12:34:16 +09:00
Yun Chan
c338a19c90 Phase 9 완료: 전체 남은 기능 구현
1. RecordingTip: thinking 상태 전환 시 opacity 보장
2. 히스토리 오디오 경로: WAV 파일 경로를 DB에 기록
3. 마이크 테스트 UI: Settings Audio 탭에 TEST 버튼 + 레벨 바
4. 온보딩 플로우: 첫 실행 시 3단계 안내 (환영→마이크→핫키→완료)
5. MetalDial 컴포넌트: 동심원 그루브, 회전 포인터, LED 인디케이터
2026-04-05 12:16:39 +09:00
Yun Chan
d7074e359d Settings UI 정밀기기 디자인 적용
- Dialog: 메탈 섀시 배경(#242528), 인셋 그림자, amber 타이틀
- Tabs: 사이드바 배경, 모노폰트, amber indicator
- VoiceModeCard: 인셋 패널 스타일 (inset shadow), 모노폰트 라벨
- 전체: d3roPalette + d3roFontMono 일관 적용
2026-04-05 12:09:25 +09:00
Yun Chan
f281809d05 Phase 9: About 탭 + 녹음 오디오 WAV 저장
- Settings: 정보(About) 탭 추가 (버전, 기술 스택, 음성 엔진 정보)
- VoiceModeService: 전사 완료 시 PCM→WAV 파일 저장 ({userData}/recordings/)
  - WAV 헤더 생성 (16kHz, 16bit, mono)
  - HistoryService와 연동 가능 (audioLocalPath)
- docs/phases/phase-9.md 설계 문서 작성
2026-04-05 11:20:10 +09:00
Yun Chan
438aa1de6c 오디오 소스 선택 기능 추가
- AudioCaptureService.getDevices(): PowerShell로 Windows 오디오 디바이스 열거
- SettingsModal 오디오 탭: 마이크 선택 드롭다운 (기본 + 감지된 디바이스)
- 선택 변경 시 ConfigService에 저장 → 다음 녹음 시 적용
2026-04-05 10:05:47 +09:00
Yun Chan
48582e46ec 핫키 3대 버그 수정: Alt 메뉴 차단 + 조합키 녹화 + aria-hidden
- WindowManager: Menu.setApplicationMenu(null)로 Alt 키 메뉴 완전 제거
- HotkeyRecordModal: 조합키 로직 재설계 — modifier 누른 채로 일반키 입력 시 조합 확정
- HotkeyRecordModal/SettingsModal: disableEnforceFocus로 aria-hidden 에러 방지
2026-04-05 10:03:01 +09:00
Yun Chan
28371a9d1a Phase 8: SSOT 리팩토링 + HotkeyRecordModal + Dashboard 재작성
- d3roPalette 11개 토큰 추가 (sidebar, chassis, inactive 등)
- DS 컴포넌트 6개 + 페이지 5개 매직넘버 → 팔레트 참조 (0개 잔여)
- HotkeyRecordModal 신규: 커스텀 핫키 녹화 모달
- SettingsModal 재작성: 음성 모드 3개(받아쓰기/Agent/원터치) + 핫키 변경
- DashboardPage 재작성: Hero + 통계 4카드 + CRT 서비스 상태 + 히스토리 날짜 그룹핑
- recording-tip 색상 수정: #1F5DF2(파란) → #f25b29(앰버)
- 설계 문서: phase-8.md, speakly-settings-ui.md
2026-04-05 09:54:55 +09:00
Yun Chan
3f4d0c5828 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 에러 핸들링 추가
2026-04-05 09:12:56 +09:00
Yun Chan
517210af2f Phase 3 구현: 텍스트 삽입 + RecordingTip/ResultPopup + Settings
- TextInsertService: clipboard save→set→Ctrl+V→restore (@nut-tree-fork/nut-js)
- RecordingTip 팝업: 9개 웨이브바 cos분포, thinking 점근수렴, 2-phase 리사이즈
- ResultPopup 팝업: 복사 버튼, auto-close, 마우스 호버 유지, 다크모드
- WindowManager: 팝업 프리로딩, 커서 위치 표시, 멀티모니터 보정
- Settings 모달: General/Audio/STT/LLM 탭
- VoiceModeService: 전사 완료 시 자동 텍스트 삽입 + 팝업 연동
- electron-vite: 팝업 HTML 멀티 엔트리 + popup preload 빌드
2026-04-05 02:11:58 +09:00