refactor(desktop): session-scoped voice runtime, STT/LLM ports, caption ownership and meeting export fixes

This commit is contained in:
Yun Chan 2026-09-28 00:53:43 +09:00
parent 0adedf5e7b
commit 83cf9133ac
39 changed files with 4787 additions and 1061 deletions

View file

@ -187,17 +187,24 @@ class MeetingSummaryService extends EventEmitter {
/**
* CaptionService 세션 종료 시 자동 요약 (옵션)
*/
async onCaptionSessionSaved(sessionSummary: { sessionId: string }): Promise<void> {
// caption 모드 히스토리에서 해당 세션 찾기
async onCaptionSessionSaved(sessionSummary: { sessionId: string; historyId?: string | null }): Promise<void> {
// caption 모드 히스토리에서 해당 세션 찾기.
// 히스토리 행 id 는 HistoryService 가 따로 만든다 — 자막 세션 id 와 절대 같지 않으므로
// CaptionService 가 실어 준 historyId 로 찾는다(없으면 저장되지 않은 세션).
const historyId = sessionSummary.historyId
if (!historyId) {
logger.info(`Caption session was not saved to history, skipping summary: ${sessionSummary.sessionId}`)
return
}
const db = getDatabase()
const rows = db
.select()
.from(history)
.where(eq(history.id, sessionSummary.sessionId))
.where(eq(history.id, historyId))
.all()
if (rows.length === 0) {
logger.warn(`Caption session not found in history: ${sessionSummary.sessionId}`)
logger.warn(`Caption session not found in history: ${historyId}`)
return
}