Phase 14 구현: 회의 모드 (Meeting Mode)

실시간 녹음 + 타임스탬프 메모 + STT 전사 + LLM 구조화 회의록 + PDF/MD 내보내기.
CaptionService 연동, 동시 사용 충돌 방지, 긴 회의 2-pass 요약 지원.
DB 2테이블, IPC 15채널, UI 3뷰(목록/녹음/상세), 12개 locale i18n.
This commit is contained in:
Yun Chan 2026-04-08 01:16:52 +09:00
parent dd68fc9ccd
commit d0c4f9ee53
38 changed files with 2550 additions and 769 deletions

View file

@ -152,6 +152,56 @@ export type NewRAGDocumentRow = typeof ragDocuments.$inferInsert
export type RAGChunkRow = typeof ragChunks.$inferSelect
export type NewRAGChunkRow = typeof ragChunks.$inferInsert
// ── meetingSessions (Phase 14) ──────────────────────────
export const meetingSessions = sqliteTable(
'meeting_sessions',
{
id: text('id').primaryKey(),
title: text('title'),
status: text('status', {
enum: ['recording', 'processing', 'completed', 'error'],
}).notNull().default('recording'),
startedAt: integer('started_at').notNull(),
endedAt: integer('ended_at'),
durationMs: integer('duration_ms'),
rawTranscript: text('raw_transcript'),
minutesMarkdown: text('minutes_markdown'),
minutesJson: text('minutes_json'),
sttModel: text('stt_model'),
llmModel: text('llm_model'),
sttLatencyMs: integer('stt_latency_ms'),
llmLatencyMs: integer('llm_latency_ms'),
errorMessage: text('error_message'),
createdAt: integer('created_at').notNull(),
updatedAt: integer('updated_at').notNull(),
},
(table) => [
index('idx_meeting_sessions_created_at').on(table.createdAt),
index('idx_meeting_sessions_status').on(table.status),
]
)
// ── meetingMemos (Phase 14) ─────────────────────────────
export const meetingMemos = sqliteTable(
'meeting_memos',
{
id: text('id').primaryKey(),
sessionId: text('session_id').notNull(),
content: text('content').notNull(),
timestampMs: integer('timestamp_ms').notNull(),
createdAt: integer('created_at').notNull(),
},
(table) => [
index('idx_meeting_memos_session_id').on(table.sessionId),
index('idx_meeting_memos_timestamp').on(table.timestampMs),
]
)
export type MeetingSessionRow = typeof meetingSessions.$inferSelect
export type NewMeetingSessionRow = typeof meetingSessions.$inferInsert
export type MeetingMemoRow = typeof meetingMemos.$inferSelect
export type NewMeetingMemoRow = typeof meetingMemos.$inferInsert
// ── 타입 추출 ────────────────────────────────────────────
export type History = typeof history.$inferSelect
export type NewHistory = typeof history.$inferInsert