하네스 전면 업데이트 + Phase 10 킬러 피처 설계

This commit is contained in:
Yun Chan 2026-04-05 13:52:41 +09:00
parent 561502ec36
commit 36d77ca224
2 changed files with 343 additions and 42 deletions

View file

@ -77,48 +77,11 @@ npm run typecheck # tsc --noEmit
6. **녹음 UI**: 9개 웨이브 바, cos 분포 가중치, 100ms 애니메이션
## 현재 상태
Phase: 9 완료 (Phase 1~9 전부 완료)
마지막 작업: Phase 9 — About 탭 + WAV 저장 + 마이크 테스트 + 온보딩 + MetalDial
다음 작업: 폴리싱, TTS, 빌드 배포 최적화
Phase: 9 완료 + 폴리싱 완료 (Phase 1~9 전부 완료)
마지막 작업: Ollama 설치 안내 UI + Settings 속도 개선 + 커맨드 선택 팝업 + 실시간 UI 갱신
다음 작업: **Phase 10 킬러 피처** (실시간 자막, 스크린 컨텍스트, 음성 메모장, 멀티 LLM 체인, 음성 단축키)
차단 이슈: @nut-tree-fork/nut-js 포크 사용
### ⚠️ 핵심 병목: VoiceModeService ↔ 팝업 연동 미구현
Speakly RE 재조사로 발견된 치명적 갭:
1. **VoiceModeService가 RecordingTip/ResultPopup과 전혀 연동 안 됨**
- 녹음 시작 시 팝업 표시 안 함, 에러 시 팝업 숨김 안 함
- Speakly: VoiceModeService가 이벤트 발행 → main/index.js에서 RecordingTipWindow 메서드 호출
2. **RecordingTipUIState 상태 머신 없음**
- Speakly: OPENING→RECORDING→THINKING→COMPLETED/ERROR/CANCELLED
- D3RO: 상태 없이 수동 show/hide만
3. **session-aware 윈도우 관리 없음**
- Speakly: showForSession(sessionId) / hideForSession(sessionId) — race condition 방지
4. **에러 후 복구 안 됨**
- 에러 시 RecordingTip이 "실패" 상태로 남아있고, 핫키가 안 먹힘
- Speakly: 에러 표시 → 3초 후 자동 숨김 → idle 복귀
### Speakly 음성 파이프라인 패턴 (RE 결과)
```
[핫키 press] → Action Queue에 enqueue → processActionQueue()
→ startRecording():
1. 시스템 오디오 뮤트 (500ms 후)
2. emit('recording-tip:show-opening') → RecordingTip 표시
3. MicNativeService.start() → 오디오 스트리밍
4. emit('recording-tip:mic-ready') → 웨이브 바 활성
5. RecognitionSession 생성 → STT 연결
→ 녹음 중: 오디오 레벨 → sendAudioLevel() → 웨이브 바
[핫키 release] → stopAndProcess():
1. MicNativeService.stop()
2. accidentalPress 체크 (< 700ms 취소)
3. 언뮤트 + 종료 효과음
4. RecordingTip → thinking 상태
5. session.commitAndWait() → 전사 결과 대기
6. 전사 완료 → 텍스트 삽입 시도
7. 삽입 성공 → RecordingTip 숨김
8. 삽입 실패 → ResultPopup 표시
9. 에러 → RecordingTip에 에러 표시 → 3초 후 숨김
```
### DS 컴포넌트 현황 (src/renderer/components/ds/)
- CrtDisplay.tsx: WebGL CRT 셰이더 (파형+스캔라인+비네팅+글리치) ✅
- InstrumentPanel.tsx: 메탈 섀시 컨테이너 (각인 텍스트, 노이즈) ✅
@ -126,9 +89,23 @@ Speakly RE 재조사로 발견된 치명적 갭:
- PhysicalButton.tsx: 물리 버튼 (돌출 그림자, 눌림 피드백) ✅
- MetalCard.tsx: 메탈 카드 컨테이너 ✅
- PhosphorText.tsx: 인광 텍스트 (hero/value/label/dim) ✅
- ❌ MetalDial: 미구현 (시안 A의 핵심 요소)
- MetalDial.tsx: 메탈 다이얼 (동심원 텍스처, 드래그 회전, 금속 광택) ✅
### Phase 8 구현 내용 (진행 중)
### Phase 9 구현 내용
- **Settings About 탭**: 앱/Electron 버전, 기술 스택, 프로젝트 링크, 정밀기기 디자인
- **녹음 WAV 저장**: VoiceModeService 세션 완료 시 WAV 파일 저장 + HistoryService audioLocalPath 연동
- **마이크 테스트 UI**: Settings Audio 탭 레벨 바 (3초 캡처, audio-level 이벤트)
- **온보딩 플로우**: 4단계 위저드 (환영→마이크 설정→핫키 설정→Ollama 설정→완료)
- **MetalDial 컴포넌트**: 동심원 텍스처, 드래그 회전, 금속 광택 — 시안 A 핵심 요소 완성
- **오디오 디바이스 선택**: AudioEndpoint + 디바이스 캐싱, Settings에서 실시간 전환
- **Commands CRUD IPC 연결**: instruction:* 핸들러 완전 연동 + 활성 명령어 선택 UI
- **Ctrl+Shift+C 커맨드 팝업**: 커서 위치에 명령어 선택 팝업, 키보드 탐색 (Arrow/Enter/ESC)
- **Dictionary 편집**: 인라인 편집 + STT initialPrompt에 사전 단어 주입
- **Ollama 설치 안내**: OllamaGuideModal + 넛징 버블 (Ollama 미실행 시 자동 표시)
- **실시간 UI 갱신**: app:dataChanged IPC 이벤트 → Dashboard/History/Dictionary 자동 리프레시
- **Settings 속도 개선**: 비동기 디바이스 로드 + 부팅 시 프리캐싱으로 모달 열기 지연 제거
### Phase 8 구현 내용
- **SSOT 완료**: d3roPalette에 11개 토큰 추가 (sidebar, chassis, inactive, dimLabel 등)
- **매직넘버 제거**: tsx/ts 파일 매직넘버 0개 달성 (theme.ts 제외)
- **DS 컴포넌트 SSOT**: 6개 모두 d3roPalette 참조로 교체
@ -233,6 +210,9 @@ Speakly RE 재조사로 발견된 치명적 갭:
- Phase 6: 커스텀 명령어 + 설정 UI 고도화
- Phase 7: 테스트 + 빌드 + 배포
- Phase 7.5: Speakly 패턴 보강 (SoundEffect, AutoLaunch, EditMonitor, 오디오 뮤트)
- Phase 8: UI 디자인 재설계 + SSOT + DS 컴포넌트 정비
- Phase 9: 품질 보강 + UX 개선 (온보딩, 마이크 테스트, WAV 저장, 커맨드 팝업, Ollama 안내)
- Phase 10: 킬러 피처 — Speakly를 넘어서 (실시간 자막, 스크린 컨텍스트, 음성 메모장, 멀티 LLM 체인, 음성 단축키)
## 설계 문서 (구현 시 반드시 참조)
@docs/design/00-master-architecture.md
@ -250,6 +230,9 @@ Speakly RE 재조사로 발견된 치명적 갭:
@docs/phases/phase-6.md
@docs/phases/phase-7.md
@docs/phases/phase-7.5.md
@docs/phases/phase-8.md
@docs/phases/phase-9.md
@docs/phases/phase-10-killer-features.md
## RE 노하우 (패턴 적용 근거)
@docs/re-findings/speakly-architecture.md