# ARIA Issues & Features ## Erledigt - [x] Bildupload funktioniert (Shared Volume /shared/uploads/) - [x] Sprachnachrichten werden als Text angezeigt (STT → Chat-Bubble) - [x] Cache leeren + Auto-Download von Anhaengen - [x] ARIA liest Nachrichten vor (TTS via Piper, später ersetzt) - [x] Autoscroll zur letzten Nachricht (inverted FlatList) - [x] Bilder im Chat groesser + Vollbild-Vorschau - [x] Ohr-Button → Gespraechsmodus (Auto-Aufnahme nach ARIA-Antwort) - [x] Play-Button in ARIA-Nachrichten fuer Sprachwiedergabe - [x] Chat-Suche in der App (Lupe in Statusleiste) - [x] Watchdog mit Container-Restart (2min Warnung → 5min doctor --fix → 8min Restart) - [x] Abbrechen-Button im Diagnostic Chat - [x] Nachrichten Backup on-the-fly (/shared/config/chat_backup.jsonl) - [x] Grosse Nachrichten satzweise aufteilen fuer TTS - [x] RVS Nachrichten vom Smartphone gehen durch - [x] Stimmen-Einstellungen (Ramona/Thorsten, Speed pro Stimme — durch XTTS/F5-TTS ersetzt) - [x] Highlight-Trigger konfigurierbar in Diagnostic - [x] XTTS v2 Integration (Gaming-PC, GPU, Voice Cloning) — durch F5-TTS ersetzt - [x] XTTS Voice Cloning (Audio-Samples hochladen, eigene Stimme) - [x] TTS Engine waehlbar (Piper/XTTS) — Piper raus, XTTS raus, jetzt nur F5-TTS - [x] Auto-Update System (APK via RVS WebSocket) - [x] Auto-Update: APK-Installation via FileProvider - [x] Auto-Update: "Auf Updates pruefen" Button in App-Einstellungen - [x] Audio-Queue (sequentielle Wiedergabe, kein Ueberlappen) - [x] Textnachrichten werden von ARIA beantwortet (Bridge chat handler fix) - [x] Mehrere Anhaenge + Text vor dem Senden (Pending-Vorschau) - [x] Paste-Support fuer Bilder in Diagnostic Chat - [x] Markdown-Bereinigung fuer TTS (fett, kursiv, code, links, etc.) - [x] SSH Volume read-write fuer Proxy (kein -F Workaround mehr) - [x] Diagnostic: Sessions als Markdown exportieren (Download-Button) - [x] Speech Gate: Aufnahme wird verworfen wenn keine Sprache erkannt - [x] Session-Persistenz: Gewaehlte Session bleibt ueber Container-Restarts erhalten - [x] Diagnostic: "ARIA denkt..." bleibt nicht mehr stehen - [x] App: "ARIA denkt..." Indicator + Abbrechen-Button (Bridge spiegelt agent_activity via RVS) - [x] Whisper STT: Model-Auswahl in Diagnostic (tiny/base/small/medium/large-v3), Hot-Reload - [x] App: Audio-Aufnahme explizit 16kHz mono (spart Resample, optimal fuer Whisper) - [x] Streaming TTS: PCM-Stream → AudioTrack MODE_STREAM, keine WAV-Gaps - [x] Piper komplett entfernt - [x] Gespraechsmodus: Speech-Gate strenger (-28dB / 500ms) - [x] Diagnostic: Archivierte Session-Versionen (.reset.*) angezeigt + exportierbar - [x] tools/export-jsonl-to-md.js: CLI-Konverter fuer Session-JSONL zu Markdown - [x] NO_REPLY-Filter in Bridge + Diagnostic - [x] Audio-Ducking + Exklusiv-Focus (Kotlin AudioFocusModule) - [x] TTS-Cleanup serverseitig: Code-Bloecke raus, Einheiten ausgeschrieben, Abkuerzungen buchstabiert, URLs zu "ein Link" - [x] QR-Code Onboarding: Diagnostic generiert QR, App scannt - [x] TTS-Audio-Cache im Filesystem: WAV pro messageId, Play-Button spielt aus Cache - [x] Config via Diagnostic: RVS-Credentials + Auth-Token persistiert in /shared/config/runtime.json - [x] Disk-Voll Banner in Diagnostic: rotes Overlay + copy-baren Cleanup-Befehlen (safe + aggressiv) - [x] cleanup.sh: kombinierter Docker-Aufraeum-Befehl (safe / --full) - [x] Streaming TTS Pre-Roll: AudioTrack play() startet erst wenn 2.5s gepuffert sind - [x] Streaming TTS Stop-Race: Writer wartet auf playbackHeadPosition vor stop()/release() — keine abgeschnittenen Saetze mehr - [x] Leading-Silence (200ms) am Stream-Anfang — AudioTrack faehrt sauber an - [x] Pre-Roll-Buffer einstellbar in App-Settings (1.0-6.0s, Default 3.5s) - [x] Fade-In auf erstem PCM-Chunk (120ms) — versteckt XTTS/F5-TTS Warmup-Glitches - [x] Decimal-zu-Worte fuer TTS (0.1 → null komma eins, mit IP-Schutz-Lookahead) - [x] Generic Acronym-Buchstabieren (XTTS → X T T S, USB → U S B, ueber expliziter Liste) - [x] Voice-Auswahl funktioniert wieder: speaker_wav als Basename statt Pfad fuer daswer123 local-Mode - [x] Diagnostic-Voice-Wechsel resettet alle App-lokalen Voice-Overrides via type "config" - [x] voice_preload/voice_ready: Stille Mini-Render bei Voice-Wechsel + Toast/Status "bereit" - [x] Whisper STT auf die Gamebox ausgelagert (faster-whisper CUDA, float16) — neuer aria-whisper-bridge Container - [x] aria-bridge: STT primaer remote (Gamebox), Fallback lokal nach 45s Timeout - [x] Whisper-Modell hot-swap auf Gamebox via config-Broadcast aus Diagnostic - [x] **F5-TTS ersetzt XTTS komplett** — neuer aria-f5tts-bridge Container, Voice Cloning, satzweises Streaming - [x] Voice-Upload mit Whisper-Auto-Transkription — User muss keinen Referenz-Text eintippen - [x] Audio-Pause statt Ducking: Spotify/YouTube pausieren komplett waehrend TTS (TRANSIENT statt MAY_DUCK) - [x] AudioFocus.release wartet auf echten Playback-Ende — kein Volume-Hochfahren mehr mid-Antwort - [x] VAD-Stille einstellbar in App-Settings (1.0-8.0s, Default 2.8s) - [x] MAX_RECORDING auf 120s — laengere Erklaerungen moeglich - [x] App: Audioausgabe hoert nicht mehr mitten im Satz auf (playbackHeadPosition wait + Stop-Race fix) - [x] F5-TTS: Referenz-WAV-Preprocessing — Loudness-Normalisierung -16 LUFS + Silence-Trim + 10s Clip fuer konsistente Cloning-Quali - [x] F5-TTS: deutsches Fine-Tune (aihpi/F5-TTS-German, Vocos-Variante) via hf:// Pfad in Diagnostic konfigurierbar - [x] Whisper transkribiert Voice-Uploads nicht mehr mit hardcoded "small" — aktuelles Modell wird behalten, kein unnoetiger Modell-Swap - [x] RVS/WebSocket maxPayload 50MB: voice_upload mit WAV als base64 sprengt kein Frame-Limit mehr - [x] Dynamischer STT-Timeout in aria-bridge: 300s waehrend whisper-bridge 'loading', 45s wenn 'ready' - [x] service_status Broadcasts: f5tts/whisper melden Lade-Status, Banner in Diagnostic (unten rechts) + App (oben) - [x] config_request Pattern: Bridges fragen beim Connect die aktuelle Voice-Config an, aria-bridge antwortet - [x] F5-TTS Tuning via Diagnostic (Modell-ID, Checkpoint, cfg_strength, nfe_step) statt ENV-Vars — Hot-Reload bei Modell-Wechsel - [x] Conversation-Window: Gespraechsmodus endet nach X Sekunden Stille (1.0-20.0s, Default 8s, einstellbar in Settings) - [x] Porcupine Wake-Word-Integration in der App (Built-In Keywords + Custom spaeter, per Geraet einstellbar) - [x] HF-Cache als Bind-Mount statt Docker Volume — kein .vhdx-Bloat auf Docker Desktop / Windows - [x] cleanup-windows.ps1 / .bat: VHDX-Cleanup via diskpart (ohne Hyper-V) mit Self-Elevation - [x] App Mute-/Auto-Playback-Bug: Closure-Bug geloest (ttsCanPlayRef live-gespiegelt, nicht mehr stale) - [x] App Zombie-Recording: Ohr-aus kill laufende Aufnahme damit der Aufnahme-Button weiter funktioniert - [x] App Text-Rendering: Nachrichten selektierbar + Autolink fuer URLs/E-Mails/Telefonnummern (Browser/Mail/Dialer) - [x] TTS-Wiedergabegeschwindigkeit pro Geraet einstellbar (Settings → 0.5-2.0x in 0.1-Schritten, Default 1.0) - [x] Diagnostic: Voice-Preview-Modal (Play-Icon vor Delete-X, Textfeld mit Default, WAV im Browser abspielen) ## Offen ### Bugs - [ ] App: Wake-Word "jarvis" triggert nicht zuverlaessig (Porcupine-Debugging via ADB-Logcat ausstehend) - [ ] App: Stuerzt beim Lauschen ab, eventuell bei Nebengeraeuschen (Porcupine + Mic-Race, errorCallback haelt's jetzt zurueck — Dauertest ausstehend) ### App Features - [ ] Chat-History zuverlaessiger laden (AsyncStorage Race Condition) - [ ] Background Audio Service (TTS auch bei minimierter App) ### Architektur - [ ] Bilder: Claude Vision direkt nutzen (aktuell nur Dateipfad an ARIA) - [ ] Auto-Compacting und Memory/Brain Verwaltung (SQLite?) - [ ] Diagnostic: System-Info Tab (Container-Status, Disk, RAM, CPU) - [ ] RVS Zombie-Connections endgueltig loesen - [ ] Alle .env-Variablen ueber Diagnostic konfigurierbar machen (Fallback .env bleibt fuer initialen Bootstrap) - [ ] Gamebox: kleine Web-Oberflaeche fuer Credentials/Server-Config oder zentral aus Diagnostic per RVS push - [ ] Root-Cause OpenClaw Session-Reset: Herausfinden warum Sessions beim ersten chat.send nach Container-Restart verworfen werden