Spaces:
Sleeping
Sleeping
Commit History
-
Distinct colors per conversation type on History
Every session card and filter chip used the same blue regardless of context, so the list read as visually flat. Each context now gets its own fixed color (grouped by display label, since several raw context keys collapse to the same label — e.g. social/casual both render as "Casual & Low-Stakes" and must share a color). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>186c898
-
Fix HistoryView Retry button sending page=[object Object]
onClick={loadSessions} passed React's click SyntheticEvent as the first argument (pageNum), which then got template-interpolated straight into the request URL — confirmed in production logs as repeated 422s on GET /api/sessions?page=[object%20Object].c93687d -
Rebuild History/session-detail into 3 CLAUDE.md-compliant tabs
Replaces the old Dimensions tab (numeric 1-5 trait scores) and the per-participant speaker-timeline chart (rule #8: persisted behavioral signals for every other room participant, indefinitely) with: - Session Spectrum: 7 composites (Speech Style, Vocal Arousal, Rapport, Power Balance, Turn-taking Courtesy, Fluency, Responsive Engagement), each a self-relative "more/less than your usual" read computed by z-scoring components against their own history at read-time, never a stored raw score. New evidence_gate.py layer, verified with 18 synthetic checks. - Overview: metrics-first ordering, Notable Pattern removed (redundant + violated rule #3), Behavioral Observations horizontal-scroll with the resonance-vote layout fixed (vote now sits against the observation, not the adjacent reflective question) and tips attached via existing coaching_suggestions[].dimension_key matching. - HistoryView: dropped the numeric score dots and the speaker-timeline chart, added one self-re…31abd7f
-
Add job timeout watchdog, session pagination, feedback modal, and store assets
- Backend: 15-min per-job timeout using threading.Timer + _cancelled set; fires at every existing cancellation checkpoint in both prepare and finalize jobs - Backend: GET /api/sessions now paginated (page/page_size params, returns total + has_more) - Frontend: HistoryView loads 10 sessions at a time with a "Load more" button that appends - Frontend: FeedbackModal component wired into Account menu → Send feedback - Landing: CNAME for mirrorai.live custom domain - Store assets: listing copy, screenshots template, promo tile for CWS submission Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0580b30
-
Major feature update: Google Meet recording, cumulative mirror feed, UX overhaul
Backend: - Fix talk ratio inflation for multi-speaker Google Meet calls (use all_other_segs) - Add user_perspective field to InsightGenerator — user now feels personally seen - Mirror feed is now cumulative: items persist, evolve, and grow across sessions (v4) - Expose per-speaker WPM timeline in /api/sessions for history chart - Bump _MF_VERSION to 4 to force feed regeneration with new cumulative logic Frontend: - Google Meet WebRTC recording: content-meet.js + meet-webrtc-injector.js + offscreen audio pipeline - Speaker timeline chart in History tab (who spoke when, WPM per participant) - ProfileView: Portrait section moved above Mirror Feed (it's the centrepiece) - ProfileView: Recurring Themes section added (coaching areas flagged across sessions) - ResultsView: Summary tab removed, summary_sentence block removed - ResultsView: "Your Perspective" section added (user_perspective from InsightGenerator) - ResultsView: Visual 3-segment talk split bar (You / Others / Silence) - Results…5748a9d
-
Fix get_sessions 500 crash + extension panel stability
- backend/main.py: wrap each session in try/except in get_sessions so one malformed JSON field no longer crashes the entire endpoint with 500 - HistoryView: add loadError state and Retry button instead of silently showing "No sessions yet" when the API fails - MeetStatusBanner: sync a fresh Supabase token to the SW right before recording starts, preventing stale-JWT 401s on chunk upload - background.js: skip getMediaStreamId prefetch when already recording - manifest.json: add "tabs" permission for reliable Meet URL detection - vite.config.js: base "./" for correct extension asset paths - background.js: call sidePanel.open() before any await so it fires within Chrome's user-gesture window Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>8f4ee21
-
Rename to mirror., scroll reveal animations, waveform logo, deployment config
- Renamed app from Behavioral Mirror to mirror. throughout - Added waveform SVG logo (option 2A) to all pages replacing emoji placeholders - Added scroll reveal animations (Reveal/RevealItem) to all pages - Cleaned requirements.txt: removed unused anthropic, openai-whisper, whisperx, sqlalchemy - Added Dockerfile with CPU-only torch and ffmpeg for Railway deployment - Updated CORS to allow chrome-extension:// origins via regex + FRONTEND_URL env var - Added .env.example template Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>d1cde70
-
Profile intelligence, context-aware baselines, and Mirror Feed
Core additions: - Personality synthesis with paragraph + 5 scored dimensions (PersonalitySynthesizer) - Context-specific baselines: population norms per context type → personal context average once 3+ same-context sessions exist. Eliminates false-positive coaching (e.g. high talk ratio in evaluative contexts no longer flagged as domination) - Mirror Feed: per-session highlight feed on profile page, collapsed with peek effect - Reflect tab: pre-computed session Q&A (generate_reflection_questions) - Transcript quotes extracted and passed to profile synthesis for grounded narratives - Onboarding flow (3-step, localStorage gated) - Session delta: flags dimension score changes ≥8pts after each new session - Blind spots: top 3 context gaps the mirror hasn't seen - Profile completeness bar with depth label - Context detector pipeline stage (ContextDetector via Groq) - Voice enrollment UI (EnrollView) with 1–3 round recording - Auth UI (AuthView), Supabase client, API client - SSE-based pr…d4c6e81
-
Parallel transcription, SSE reliability fixes, HistoryView optimisation
- Parallelize Whisper + pyannote in prepare job using ThreadPoolExecutor (~4 min saved) - Add voiceprint.py speaker embedding module (pyannote/embedding, 70/30 blend) - Fix SSE done message dropped on stream close (asyncio.sleep flush before break) - Add onerror fallback: fetch result from DB if SSE drops after job completes - Reset UploadView to idle state after results delivered (no stuck finalizing screen) - Keep HistoryView always mounted; re-fetch only on tab activation (stops GET flooding) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>bd77e3e
-
Dimension scoring, expanded signals, and full results UI overhaul
- Add DimensionScorer with 4 behavioral dimensions (emotional state, relational dynamics, communication effectiveness, conversation arc), each with 5 sub-scores - Expand SignalExtractor with vocal energy, speech acceleration, questions, monologue detection, vocabulary richness, silence ratio, and notable signal detection - Add baseline comparison after 3+ sessions - Update InsightGenerator to include dimensions and transcript in LLM prompt, produce conversation summary and dimension narrative - Wire dimensions through main.py pipeline and database - Overhaul ResultsView to display all new signals and dimension scores Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>b18547f
-
MVP working - audio analysis pipeline with Whisper, MFCC diarization, Groq insights
b2eef7c