D3RO Voice — 멀티플랫폼 AI 음성 어시스턴트 (Monorepo & CI/CD)
Find a file
yunchan8804 b386733d1e feat(V2-5차): pgvector 시맨틱 검색 + chat 스트리밍 + doc 편집 + VoiceAction + Realtime + storage + 메모
묶음 Q — pgvector + 시맨틱 검색:
- migrations/20260410000004_pgvector_knowledge.sql
  - vector extension, embedding vector(1536) 컬럼
  - ivfflat cosine 인덱스
  - match_knowledge_chunks(query_embedding, match_count, similarity_threshold) RPC
  - RLS: user_id 또는 소속 팀 기준
- functions/embed-chunks: 문서 소유권 확인 후 OpenAI text-embedding-3-small 배치 호출 → knowledge_chunks.embedding 업데이트
- functions/search-knowledge: 쿼리 텍스트 → OpenAI 임베딩 → user 권한 RPC 호출 → 상위 청크 반환
- config.toml에 embed-chunks/search-knowledge 등록
- components/knowledge/knowledge-search.tsx: 검색창 + 결과 카드(유사도 %)
- /knowledge 페이지에 검색 UI 추가

묶음 R — /chat SSE 스트리밍:
- functions/llm-proxy: Anthropic Messages API stream 지원
  - ANTHROPIC_API_KEY 없으면 SSE placeholder 스트림
  - stream=true일 때 response.body 그대로 프록시 (text/event-stream)
  - stream=false는 JSON 응답
- components/chat/chat-panel.tsx:
  - stream=true로 요청
  - ReadableStream 파싱 (SSE: data: {type:content_block_delta, delta:{text_delta}})
  - assistantId 메시지를 progressive 업데이트, scrollToBottom
  - 불필요한 LlmResponse 인터페이스 제거

묶음 S — DocumentEditor:
- components/meetings/document-editor.tsx
  - 문서 박스 클릭 → MUI Dialog (fullWidth, maxWidth md)
  - TextField multiline 20~40 rows, monospace
  - 제목 편집 + 저장/삭제 버튼
- meetings/[id] 페이지 Documents 섹션을 DocumentEditor로 교체 (+ typoSx 미사용 import 제거)

묶음 T — /actions (VoiceAction 이식):
- components/actions/action-runner.tsx
  - SYSTEM_PROMPT로 JSON 스키마 강제 (create_meeting/search_knowledge/create_memo/send_team_invite/unknown)
  - LLM 응답에서 JSON 추출 → 파싱 → 확인 후 실행
  - 각 type별 실행 로직 (meetings/memos INSERT, 검색은 안내만)
- app/(app)/actions/page.tsx + Sidebar Actions 메뉴 + AutoAwesomeIcon

묶음 U — Realtime + Storage + 메모 UI:
- CloudSyncService:
  - RealtimeChannel import 추가
  - startRealtime(): meetings/history/dictionary 변경 구독, debounce 후 pullAll 자동 트리거
  - stopRealtime(), signIn 직후/세션 복원 시 자동 시작, signOut 시 종료
- apps/web/components/meetings/memo-form.tsx
  - TextField + 저장 버튼, 회의 시작 기준 경과 ms 자동 계산
  - Realtime 구독자에게 자동 전파
- meetings/[id] MEMOS 섹션에 MemoForm 렌더
- apps/web/components/record/mic-recorder.tsx
  - STT 성공 후 Supabase Storage 'audio' 버킷에 {user_id}/{ts}.webm 업로드
  - meetings 테이블에 INSERT (raw_transcript, audio_storage_key, duration_ms, ended_at)
  - Storage/meetings 실패는 전사 결과는 유지하며 경고

묶음 V — 11개 locale nav 키:
- en/ja/zh/zh-TW/es/fr/de/pt/ru/vi/th 에 nav.chat/nav.knowledge/nav.actions 추가
- ko.json에 nav.actions 추가
- Sidebar에 Actions 메뉴(AutoAwesomeIcon) 등록

검증:
- desktop typecheck + build OK
- web typecheck + build OK (15 라우트: 기존 14 + /actions)
- api-client test 19 passed
- 회귀 없음

통계:
- 총 Edge Functions 12개 (embed-chunks/search-knowledge 추가)
- 총 SQL 마이그레이션 8개
- 웹 라우트 15개 (accept-invite/actions/billing/chat/dashboard/knowledge/login/meetings/meetings[id]/record/teams/teams[id]/auth-callback/root/_not-found)
2026-04-10 09:30:41 +09:00
.claude skill updated 2026-04-08 13:23:51 +09:00
.github/workflows feat(V2-5): macOS 빌드 지원 — 플랫폼 분기 + electron-builder mac 타겟 + CI 2026-04-08 15:57:16 +09:00
apps feat(V2-5차): pgvector 시맨틱 검색 + chat 스트리밍 + doc 편집 + VoiceAction + Realtime + storage + 메모 2026-04-10 09:30:41 +09:00
docs feat(V2-4): 데스크톱 ↔ Supabase 동기화 (push only MVP) 2026-04-09 16:28:19 +09:00
memory feat(V2-5차): pgvector 시맨틱 검색 + chat 스트리밍 + doc 편집 + VoiceAction + Realtime + storage + 메모 2026-04-10 09:30:41 +09:00
packages feat(V2-5차): pgvector 시맨틱 검색 + chat 스트리밍 + doc 편집 + VoiceAction + Realtime + storage + 메모 2026-04-10 09:30:41 +09:00
server/supabase feat(V2-5차): pgvector 시맨틱 검색 + chat 스트리밍 + doc 편집 + VoiceAction + Realtime + storage + 메모 2026-04-10 09:30:41 +09:00
site 랜딩 페이지: D3RO 브랜드 프로모션 사이트 + GitHub Pages 배포 2026-04-05 23:55:13 +09:00
.editorconfig v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
.eslintignore fix(V2-1): minor 이슈 정리 [M4][M5] 2026-04-09 02:32:37 +09:00
.eslintrc.cjs Phase 1+2 구현: Electron 뼈대 + STT/핫키/오케스트레이터 2026-04-05 02:01:37 +09:00
.gitattributes v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
.gitignore chore: .next/.expo gitignore + 이전 커밋의 .next 산출물 제거 2026-04-09 16:40:26 +09:00
.gitlab-ci.yml Phase 7~8 구현: 테스트 + 빌드 + CI/CD + SoundEffect + AutoLaunch + UI 리디자인 2026-04-05 09:12:56 +09:00
.nvmrc v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
.prettierrc Phase 1+2 구현: Electron 뼈대 + STT/핫키/오케스트레이터 2026-04-05 02:01:37 +09:00
CHANGELOG.md v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
CLAUDE.md feat: Phase 15.5-2 — 오디오 보존 + pyannote 실제 화자 구분 2026-04-08 12:17:37 +09:00
CONTRIBUTING.md v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
LICENSE v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
package-lock.json feat(V2-4차): Database 제네릭 복원 + /chat + /knowledge + Resend + Push + 문서 생성 2026-04-10 08:51:53 +09:00
package.json feat(V2-6/V2-7/V2-8): Mobile MVP + Teams + Billing 스캐폴딩 2026-04-09 16:39:54 +09:00
SECURITY.md v1.0.0 배포 준비: CHANGELOG, LICENSE, 프로젝트 메타 파일 추가 2026-04-06 09:29:27 +09:00
tsconfig.base.json feat(V2-1a): Monorepo 구조 전환 — apps/desktop으로 V1 이동 2026-04-08 14:04:41 +09:00
tsconfig.json fix(V2-1a): 루트 workspace 설정 3파일 보충 2026-04-08 14:29:40 +09:00
turbo.json feat(V2-1a): Monorepo 구조 전환 — apps/desktop으로 V1 이동 2026-04-08 14:04:41 +09:00