Adds optional conference_prefix query param to GET /meetings that filters
by conference_id LIKE prefix%. This enables rMeets to scope MI data per space.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
Fixes three issues preventing summary generation via RunPod GPU:
- Extract text from vLLM's nested choices/tokens output format
- Strip LLM preamble text before JSON parsing
- Serialize lists to JSON strings for asyncpg jsonb columns
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Increase Ollama timeout from hardcoded 120s to configurable 600s default.
Add optional AI Orchestrator integration for RunPod GPU acceleration with
automatic fallback to direct Ollama when orchestrator is unavailable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add wget to builder stage for model download
- Add curl and build-essential to production stage for health check and webrtcvad
- Remove unused whisper_models volume (model baked into image)
- Fix WHISPER_MODEL env var to use full path
- Update Jibri to use Docker internal DNS names (meet.jitsi)
- Connect Jibri to jeffsi-meet_meet.jitsi network for Prosody access
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>