Commit Graph

3 Commits

Author SHA1 Message Date
Jeff Emmett 2fe77055a9 feat(meeting-intelligence): add per-meeting access control
Restrict MI data so only meeting attendees can access their meetings.
Each meeting gets a unique access_token generated at creation time.
Attendees discover their token via conference_id (room name) lookup.

Backend:
- New auth.py with Bearer token validation and multi-token extraction
- Token generation in create_meeting(), backfill on startup
- All endpoints gated: list_meetings filters by X-MI-Tokens header,
  per-meeting endpoints require Authorization: Bearer <token>
- New GET /meetings/token?conference_id=<room> discovery endpoint

Frontend:
- tokenStorage.ts manages tokens in localStorage keyed by room name
- middleware.ts auto-fetches token on CONFERENCE_JOINED
- All API calls in actions.ts now include auth headers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 10:18:13 -04:00
Jeff Emmett dd12348da8 fix(meeting-intelligence): fix transcription pipeline bugs
- Fix JSONB serialization in API database.py (json.dumps + ::jsonb casts)
- Fix integer vs UUID job ID handling in transcriber
- Fix UUID-to-string conversion for meeting_id in processor
- Add whisper.cpp shared libraries to Dockerfile (libwhisper, libggml)
- Fix Jibri finalize script log directory path
- Add graceful error handling for speaker diarization
- Support video_path parameter for automatic audio extraction

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 12:25:59 +00:00
Jeff Emmett 4cb219db0f feat(meeting-intelligence): add backend infrastructure for transcription and AI summaries
Add complete Meeting Intelligence System infrastructure:

Backend Services:
- PostgreSQL schema with pgvector for semantic search
- Transcription service using whisper.cpp and resemblyzer for diarization
- Meeting Intelligence API with FastAPI
- Jibri configuration for recording

API Endpoints:
- /meetings - List, get, delete meetings
- /meetings/{id}/transcript - Get transcripts with speaker attribution
- /meetings/{id}/summary - Generate AI summaries via Ollama
- /search - Full-text and semantic search
- /meetings/{id}/export - Export as PDF, Markdown, JSON
- /webhooks/recording-complete - Jibri callback

Features:
- Zero-cost local transcription (whisper.cpp CPU)
- Speaker diarization (who said what)
- AI-powered summaries with key points, action items, decisions
- Vector embeddings for semantic search
- Multi-format export

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 19:04:19 +00:00