- assistant messages get a 🔊 button that fetches TTS audio and plays
it, toggling to stop
- ChatInput gains a mic button: MediaRecorder capture, base64 upload to
/voice/stt, recognized text fills the input
- api client: voice.tts (blob) and voice.stt helpers
- new emotion package: rule-based sentiment (positive/negative lexicon)
drives mood transitions (开心/平静/难过) with 30min inactivity decay;
affection 0-100 grows with positive interaction, with 初识→熟悉→信赖→
羁绊 tiers
- pipeline records each user message and injects a mood line into the
system prompt so the persona's tone follows her mood
- mood changes broadcast over WS; frontend shows a mood badge with
affection tooltip; also handles the 'reminder' message type from the
reminder scheduler
- tests: sentiment scoring, mood shift, affection bounds, prompt line,
onChange callback
- SearchModal queries GET /messages/search and jumps to the matching
session; opened from the sidebar button or Ctrl+K
- session items in the sidebar gain a hover export button that
downloads the markdown export via an authenticated fetch + blob
(plain links cannot send the JWT)
- Color system: Miuix dark tokens (primary #277AF7, bg #242424, surface #000)
- Components: rounded-full buttons, squircle cards (18px), glass header
- Messages: blue user bubbles, dark AI bubbles with typing animation
- Admin dashboard: stat cards with real-time service status
- Login: centered logo with gradient shadow, HyperOS input fields
- Smooth transitions and scale-on-press interactions