- bootstrap: notifyRenderer('app:dataChanged') 이벤트 발행
- session-completed: Dashboard 통계 + History 갱신
- command:selected: CMD 페이지 활성 명령어 갱신
- preload: app.onDataChanged 이벤트 리스너 추가
- DashboardPage/CommandsPage/HistoryPage: onDataChanged 구독하여 자동 loadData()
- CommandsPage: 명령어 카드 클릭 → 활성 명령어 설정 (앰버 하이라이트)
- 상단에 ACTIVE COMMAND 표시
- 같은 카드 다시 클릭하면 해제
- 활성화 시 defaultLLMAction='custom' + activeInstructionId 저장
- VoiceModeService: action='custom'일 때 활성 명령어 프롬프트로 LLM 처리
- {{text}}를 전사 텍스트로 치환
1. CommandsPage: handleSave/handleDelete에 실제 IPC 호출 연결
- instruction:create/update/delete 호출 추가
- 프리셋은 삭제 불가 (isBuiltin 체크)
2. Preload: instruction API 추가 (getAll/create/update/delete/reorder)
- 기존에 preload 브릿지가 없어서 렌더러에서 호출 불가했음
3. Dictionary → STT initialPrompt 주입
- VoiceModeService._transcribe에서 DictionaryService.getPromptHints() 호출
- 사용자 사전 단어를 Whisper initialPrompt로 전달
4. DictionaryPage: 편집 기능 추가
- 각 항목에 Edit 버튼 추가
- Add/Edit 공용 다이얼로그 (editId로 분기)
- 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