Phase 12~13 전체 구현: Pro+ 피처 6종 + 음성 대화 + RAG + OS 자동화

Phase 12:
- FileTranscriptionService: ffmpeg PCM 변환 + 30초 청크 순차 STT
- MeetingSummaryService: 자막 세션 → LLM 자동 요약 + DB summaryText
- DictationTemplateService: 필드별 음성 입력 상태 머신 + 프리셋 3개

Phase 13.1:
- VoiceConversationService: STT→Ollama /api/chat→TTS 대화 루프 (10턴)
- TTSPlaybackService: Windows SAPI 문장 단위 큐 재생
- LocalLLMService.chatStream: Ollama /api/chat 스트리밍

Phase 13.2:
- RAGService: Ollama 임베딩 + SQLite 벡터 + 코사인 유사도 검색
- KnowledgeBasePage: 문서 관리 + 질문/답변 UI
- PDF 파서: zlib FlateDecode 해제 + BT/ET 텍스트 추출

Phase 13.3:
- VoiceActionService: LLM JSON 액션 플랜 생성 + 실행
- 프리셋 6개 (크롬/메모장/탐색기/볼륨), 위험 명령 차단

공통: IPC ~70채널, 에러코드 780-878, i18n 100+키
버그픽스: 라이선스 로컬 키 우선, i18n featureLabel, DOM 중첩
This commit is contained in:
Yun Chan 2026-04-05 23:52:14 +09:00
parent a31f96bbb8
commit eb83682269
38 changed files with 5678 additions and 19 deletions

View file

@ -300,13 +300,28 @@
"license.feature.voice_memo": "Voice Memo",
"license.feature.history_unlimited": "Unlimited History",
"license.feature.history_export": "History Export",
"license.feature.custom_instruction_create": "Custom Instruction Create",
"license.feature.custom_instruction_create": "Custom Instruction",
"license.feature.file_transcription": "File Transcription",
"license.feature.voice_conversation": "Voice Conversation",
"license.feature.dictation_template": "Dictation Template",
"license.feature.meeting_summary": "Meeting Summary",
"license.feature.local_rag": "Local RAG",
"license.feature.os_automation": "OS Automation",
"license.feature.llmProcess": "LLM Processing",
"license.feature.liveCaption": "Live Caption",
"license.feature.screenContext": "Screen Context",
"license.feature.voiceCommand": "Voice Commands",
"license.feature.llmChain": "LLM Chain",
"license.feature.voiceMemo": "Voice Memo",
"license.feature.historyUnlimited": "Unlimited History",
"license.feature.historyExport": "History Export",
"license.feature.customInstruction": "Custom Instruction",
"license.feature.fileTranscription": "File Transcription",
"license.feature.voiceConversation": "Voice Conversation",
"license.feature.dictationTemplate": "Dictation Template",
"license.feature.meetingSummary": "Meeting Summary",
"license.feature.localRag": "Local RAG",
"license.feature.osAutomation": "OS Automation",
"license.pro.required": "PRO Required",
"license.proPlus.required": "PRO+ Required",
"license.included": "Included",
@ -327,5 +342,80 @@
"license.perDay": "/day",
"license.unlimited": "Unlimited",
"license.locked": "Locked",
"license.nav": "License"
"license.nav": "License",
"fileTranscription.title": "File Transcription",
"fileTranscription.dropZone": "Drop audio/video file here",
"fileTranscription.dropZoneHint": "Supports MP3, WAV, M4A, MP4, MKV, WEBM",
"fileTranscription.converting": "Converting...",
"fileTranscription.processing": "Transcribing...",
"fileTranscription.progress": "Chunk {{current}} / {{total}}",
"fileTranscription.complete": "Transcription complete",
"fileTranscription.copyAll": "Copy All",
"fileTranscription.cancel": "Cancel",
"fileTranscription.retry": "Retry",
"fileTranscription.error.invalidFormat": "Unsupported file format",
"fileTranscription.error.unknown": "Unknown error",
"meetingSummary.title": "Meeting Summary",
"meetingSummary.generating": "Generating summary...",
"meetingSummary.summary": "Summary",
"meetingSummary.decisions": "Key Decisions",
"meetingSummary.actionItems": "Action Items",
"meetingSummary.exportMarkdown": "Export as Markdown",
"meetingSummary.noSummary": "No summary available",
"meetingSummary.generate": "Generate Summary",
"template.title": "Dictation Templates",
"template.create": "New Template",
"template.edit": "Edit Template",
"template.delete": "Delete",
"template.name": "Template Name",
"template.description": "Description",
"template.fields": "Fields",
"template.addField": "Add Field",
"template.fieldName": "Field Name",
"template.fieldLabel": "Label",
"template.fieldPrompt": "Voice Prompt",
"template.outputFormat": "Output Format",
"template.startSession": "Start",
"template.cancelSession": "Cancel Session",
"template.empty": "No templates",
"nav.conversation": "Talk",
"conversation.title": "Voice Conversation",
"conversation.idle": "Idle",
"conversation.listening": "Listening",
"conversation.thinking": "Thinking",
"conversation.speaking": "Speaking",
"conversation.empty": "Talk to D3RO",
"conversation.emptyHint": "Press the mic button or type a message",
"conversation.inputPlaceholder": "Type a message...",
"conversation.end": "End",
"conversation.clearHistory": "Clear history",
"nav.knowledge": "Knowledge",
"rag.title": "Knowledge Base",
"rag.addDocument": "Add Document",
"rag.documents": "Documents",
"rag.noDocuments": "No documents",
"rag.chunks": "chunks",
"rag.indexed": "Indexed",
"rag.pending": "Pending",
"rag.indexing": "Indexing",
"rag.reindex": "Reindex",
"rag.askQuestion": "Ask a Question",
"rag.queryPlaceholder": "Ask about your documents...",
"rag.searching": "Searching...",
"rag.sources": "Sources",
"rag.adding": "Adding...",
"rag.parsing": "Parsing document...",
"voiceAction.title": "Voice Actions",
"voiceAction.execute": "Execute",
"voiceAction.presets": "Preset Commands",
"voiceAction.history": "Action History",
"voiceAction.noHistory": "No action history",
"voiceAction.blocked": "Blocked (unsafe)",
"voiceAction.executed": "Executed"
}