Files
ARIA-AGENT/issue.md
T
duffyduck fc3ecaacca docs(issue): heutige Session-Fixes ergaenzt
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:32:05 +02:00

22 KiB

ARIA Issues & Features

Audio-Verhalten in der App

So sollte die App in den verschiedenen Phasen mit fremden Audio-Apps (Spotify, YouTube, Podcasts etc.) und dem eigenen Mikro umgehen. Wenn was anders ist, ist's ein Bug.

Phase Andere App (Spotify) ARIA-Mikro Hintergrund-Service
Idle / Ohr aus spielt frei aus aus
Wake-Word lauscht (armed) spielt frei passiv (openWakeWord) aktiv ('wake')
User-Aufnahme laeuft pausiert (EXCLUSIVE) Recording aktiv ('rec')
Aufnahme zu Ende resumed aus (rec released)
ARIA denkt/schreibt (~20s) spielt frei aus (kein Slot)
TTS startet pausiert (DUCK) aus (oder barge) aktiv ('tts')
TTS spielt (auch GPU-Pausen) bleibt pausiert barge wenn Wake-Word aktiv
TTS zu Ende nach 800ms resumed (Conversation-Window) (tts released)
Eingehender Anruf (auch VoIP) Mikro pausiert aus
Anruf vorbei Mikro wieder armed aktiv ('wake')
Anruf vorbei (Auto-Resume) pausiert wieder aus aktiv ('tts')
Neue Frage waehrend Anruf Mikro pausiert (rec waehrend Anruf nicht)
Anruf vorbei nach neuer Frage (siehe TTS-Phasen) (siehe TTS-Phasen) (tts gewinnt, alter Resume verworfen)

Wichtige Mechanismen:

  • Underrun-Schutz im PcmStreamPlayer fuettert Stille rein wenn die Bridge in Render-Pausen liefert — Spotify bleibt durchgehend pausiert, auch zwischen den Saetzen einer langen Antwort.
  • Conversation-Focus (nur bei Wake-Word 'conversing') haelt den AudioFocus dauerhaft. Bei reinem Tap-to-Talk oder Text-Chat greift's nicht — Spotify darf in der Denk-Phase ruhig weiterspielen.
  • Foreground-Service (mediaPlayback|microphone) haelt App-Prozess am Leben damit TTS/Mikro/Wake-Word auch bei minimierter App weiter- laufen. Notification zeigt aktuellen Status ("ARIA spricht/hoert zu/bereit").
  • Anruf-Erkennung ueber TelephonyManager (klassisch) + AudioFocus- Loss-Listener mit Polling-Fallback (VoIP wie WhatsApp/Signal/Discord).
  • Auto-Resume nach Anruf: beim Halt wird die Wiedergabe-Position gemerkt (Date.now() - playbackStart - leadingSilence). Nach Auflegen wartet die App bis zu 30s auf den WAV-Cache und spielt dann ab der gemerkten Position weiter. Wenn das Telefonat länger als die Antwort dauerte, ist der Cache schon fertig — instant Resume.
  • Neue Frage waehrend Anruf (Text-Chat geht trotz Telefonat): die neue Antwort ueberschreibt den pending Resume. _handlePcmChunkImpl stoppt einen ggf. laufenden resumeSound und setzt pausedMessageId zurueck wenn die neue Stream-messageId abweicht. Die letzte Antwort gewinnt immer.
  • Audio-Ausgabe trotz aktivem Telefonat: ARIA antwortet auch waehrend eines Telefonats per Lautsprecher (Telefon-Audio geht ueber separaten Stream zur Gegenseite). haltAllPlayback wird nur beim STATE-WECHSEL ringing/offhook gerufen — wenn der Anruf schon laeuft (offhook→offhook), triggert eine neue Frage keinen Halt mehr.

Erledigt

Bugs / Fixes

  • Diagnostic: "ARIA denkt..." bleibt nicht mehr stehen
  • App: "ARIA denkt..." Indicator + Abbrechen-Button (Bridge spiegelt agent_activity via RVS)
  • Textnachrichten werden von ARIA beantwortet (Bridge chat handler fix)
  • Voice-Auswahl funktioniert wieder: speaker_wav als Basename statt Pfad fuer daswer123 local-Mode
  • Diagnostic-Voice-Wechsel resettet alle App-lokalen Voice-Overrides via type "config"
  • Streaming TTS Stop-Race: Writer wartet auf playbackHeadPosition vor stop()/release() — keine abgeschnittenen Saetze mehr
  • App: Audioausgabe hoert nicht mehr mitten im Satz auf (playbackHeadPosition wait + Stop-Race fix)
  • AudioFocus.release wartet auf echten Playback-Ende — kein Volume-Hochfahren mehr mid-Antwort
  • App Mute-/Auto-Playback-Bug: Closure-Bug geloest (ttsCanPlayRef live-gespiegelt, nicht mehr stale)
  • App Zombie-Recording: Ohr-aus kill laufende Aufnahme damit der Aufnahme-Button weiter funktioniert
  • Whisper transkribiert Voice-Uploads nicht mehr mit hardcoded "small" — aktuelles Modell wird behalten, kein unnoetiger Modell-Swap
  • RVS/WebSocket maxPayload 50MB: voice_upload mit WAV als base64 sprengt kein Frame-Limit mehr
  • Wake-Word Embedding rank-4 Fix (Pipeline-Bug der das Triggern verhinderte) + Frame-Count aus Modell-Metadaten lesen
  • PCM-Underrun-Schutz: Stille-Fill in Render-Pausen verhindert Spotify-Auto-Resume nach 10s Stillstand
  • Conversation-Focus-Lifecycle: AudioFocus haengt am Wake-Word-State 'conversing' statt an einzelnen Streams — Spotify bleibt durchgehend gepaust, auch zwischen mehreren Antworten
  • Voice-Override behaelt Stimme ueber alle TTS-Calls einer Antwort (vorher: nach erstem TTS-Call zurueck auf Default)
  • Sprachnachricht-Bubble defensiv: STT-Result fuegt neue Bubble hinzu wenn Placeholder fehlt (Race-Schutz)
  • Bild + Text als EINE Anfrage: Bridge buffert files 800ms, merged mit folgendem chat-Text zu einem send_to_core (statt zwei getrennten ARIA-Antworten)
  • Diagnostic→App: persistente RVS-Connection statt frische pro Send (Race-Probleme mit Zombie-WS geloest)
  • Textauswahl in Bubbles wieder funktional (nested Text+onPress raus, dataDetectorType="all" macht Links automatisch klickbar)
  • Placeholder-Race bei parallelen Sprachnachrichten geloest: jede Aufnahme bekommt eine eindeutige audioRequestId, Bridge gibt sie ans STT-Result zurueck — App matcht jetzt punktgenau die richtige Bubble statt per Substring
  • Mikro-Offen-Toast "🎤 sprich jetzt" erscheint erst wenn audioService.startRecording wirklich erfolgreich war (statt ~400ms vorher beim Wake-Word-Detect)
  • Sprachnachrichten ohne STT-Result werden nach 60s+Aufnahmedauer automatisch entfernt (sicher genug fuer 5-30min-Aufnahmen, schnell genug fuer leere Wake-Word-Echos)
  • VAD adaptive Baseline robuster: minimum statt avg + Cap auf -50dB bis -28dB (Stille) / -40dB bis -18dB (Speech) — keine "tote" VAD-Konfiguration mehr bei lauter Umgebung oder Wake-Word-Echo
  • Push-to-Talk raus, nur noch Tap-to-Talk (verhinderte Touch-Race-Probleme)
  • Manueller Mikro-Stop beendet Wake-Word-Konversation: Tap auf Mikro-Knopf waehrend conversing → audio raus + zurueck zu armed (= Wake-Word lauscht wieder, kein Auto-Mikro nach ARIAs Antwort). VAD-Auto-Stop bleibt bei Multi-Turn
  • Wake-Word pausiert bei Anruf: phoneCall ruft pauseForCall (openWakeWord.stop) bei RINGING/OFFHOOK, resumeFromCall bei IDLE. Pre-Call-State wird gemerkt — armed bleibt armed, conversing degraded zu armed (User soll nicht in halbem Dialog landen)
  • App-Resume-Cooldown: Wechsel von Background → Foreground triggert keinen falschen Wake-Word-Trigger mehr. AppState-Listener setzt 1.5s Cooldown in dem onWakeDetected-Events ignoriert werden (Audio-Pegel-Spike beim AudioFocus-Switch sonst als Wake-Word interpretiert)
  • Background-Mikro robust: acquireBackgroundAudio('rec'/'wake') wird jetzt VOR AudioRecord.startRecording gerufen — Foreground-Service mit foregroundServiceType=microphone muss aktiv sein bevor das Mikro greift, sonst blockiert Android ab 11+ den Background-Zugriff
  • Stille-Pegel manuell setzbar (Settings → Spracheingabe): Override-Wert in dB von -55 bis -15, default "automatisch". Info-Button mit Modal erklaert die Skala (niedriger = sensibler, hoeher = robuster gegen Hintergrundlaerm). Bei manuell gesetztem Wert wird die adaptive Baseline ignoriert
  • Kurze TTS-Texte (1-3 Worte) spielen jetzt ab — auf OnePlus A12 stallte AudioTrack mit pos=0 weil der Default-Start-Threshold bufferSize/2 (= 2s) bei kurzen Streams nie ueberschritten wurde. Fix: setStartThresholdInFrames(100ms) direkt nach dem Track-Build (API 31+). Buffer auf 4s entkoppelt von Pre-Roll, play() wird beim allerersten data-chunk gerufen
  • Mute-Button stoppt jetzt auch laufenden PCM-StreampcmStreamActive wurde beim isFinal-Chunk schon false gesetzt, der AudioTrack spielte aber noch sekundenlang aus seinem Buffer. stopPlayback() uebersprang darum PcmStreamPlayer.stop(). Fix: stop() immer rufen (ist idempotent), kein Flag-Check mehr
  • GPS-Permission im Manifest + Runtime-Request beim Settings-Toggle — vorher fehlten ACCESS_COARSE_LOCATION / ACCESS_FINE_LOCATION komplett. Geolocation.getCurrentPosition schlug lautlos fehl, App sendete nie ein location-Feld
  • GPS-Position auch im STT-Payload an Diagnostic — die App sendet location einmal im audio-Payload. Die Bridge nutzte sie zwar (ging in aria-core's Kontext rein), reichte sie aber nicht im STT-broadcast an Diagnostic durch. Diagnostic zeigte darum bei Spracheingaben nie den GPS-Block, obwohl der "GPS einblenden"-Toggle aktiv war
  • Auto-Resume nach Anruf — pcmBuffer bleibt erhalten: haltAllPlayback leerte den pcmBuffer mid-Anruf, isFinal schrieb dann eine leere WAV. Neue pauseForCall-Methode statt haltAllPlayback: AudioTrack stoppt + Focus released, pcmBuffer und pcmMessageId bleiben — chunks werden weiter gesammelt damit isFinal die WAV schreibt und resumeFromInterruption sie findet. Plus captureInterruption idempotent gemacht (ringing → offhook ueberschreibt nicht)
  • Replay-Resume nach Anruf: _firePlaybackStarted ueberschrieb currentPlaybackMsgId mit leerem pcmMessageId — captureInterruption hatte nichts zu merken. Plus Regex [0-9a-f-]+\.wav matchte nicht alle Dateinamen. Plus _playFromPathAtPosition aktualisiert jetzt das Tracking damit ein zweiter Anruf in derselben Antwort auch funktioniert
  • pauseForCall setzt isPlaying zurueck: vorher haengten weitere Play-Button-Klicks nach Anruf, weil playAudio bei isPlaying=true den _playNext-Pfad ueberspringt
  • Play-Button rendert neu wenn Cache-Datei weg ist: vorher checkte der Button nur if (item.audioPath) — auf eine geloeschte Cache-Datei zeigte das aber stillschweigend ins Leere. Jetzt RNFS.exists-Check mit Fallback auf tts_request an die Bridge → F5-TTS rendert neu, WAV wandert zurueck in den Cache
  • Bridge WebSocket max_size 50 MB: Python websockets.connect hat 1 MiB Default — Stefan's 4MB JPEG (5.78 MB Base64) sprengte das, Bridge-Connection wurde silent gedroppt. f5tts/whisper-bridges hatten max_size schon, nur aria_bridge war vergessen
  • Bridge resized Bilder >2 MB serverseitig auf 1568px: Claude-Vision-API hat ~5 MB Base64-Limit. Galerie-Bilder via react-native-image-picker sind clientseitig schon klein, Buroklammer/DocumentPicker reichte das rohe File durch — Claude lieferte leere Antwort. Pillow im Bridge-Container, nur fuer JPEG/PNG/WebP/GIF (PDFs/ZIPs/SVGs unangetastet)
  • Bridge chat:error liest auch errorMessage: OpenClaw legt bei state=error den Text dort statt in error ab → Bridge meldete generisches "[Fehler] Unbekannt", echter Fehler nur in Container-Logs. Plus: chat:final ohne text wird jetzt mit Hinweis-Bubble an die App gemeldet (statt stumm), z.B. wenn Vision das Bild silent ablehnt
  • Cache-Cleanup beim App-Start — orphane aria_tts_*.wav Files (>5 min) im CachesDirectoryPath werden weggeraeumt, sammeln sich sonst an wenn Sound mid-playback gestoppt wird (Anruf, Mute, Barge-In) und der completion-Callback nicht feuert. Plus neuer Settings-Button "TTS-Cache leeren" mit Live-Groessenanzeige
  • Verbose-Logging-Toggle in Settings → Protokoll: console.log global stummschaltbar (warn/error bleiben aktiv) — spart adb-logcat-Speicher wenn alles laeuft
  • 800 ms-Delay vor Anruf-Auto-Resume: ARIA's neuer Focus-Request kollidierte sonst mit Spotify's Auto-Resume nach Anruf-Ende. System haengt noch im IN_CALL→NORMAL-Mode-Uebergang, Spotify sieht Loss → Loss und bleibt pausiert. Mit Delay schafft Spotify den Resume-Schritt, dann pausiert ARIA wieder ordnungsgemaess
  • Mute-Button = Stop fuer aktuelle Antwort: vorher startete eine NEUE PCM-Chunk-Sequenz nach Mute-aus die alte Antwort weiter wo sie war (funktionierte 2x, dann nicht mehr weil isFinal schon kam). Jetzt mit _stoppedMessageId-Tracking: bei Mute wird die aktive msgId gemerkt, alle weiteren chunks dieser msgId bleiben silent — auch wenn Mute zurueckgenommen wird. Reset bei neuer msgId, neue Antworten spielen normal
  • Spotify resumed nach Mute-Stop: stopPlayback released seinen TRANSIENT-Focus (USAGE_ASSISTANT) sauber → Spotify bekommt GAIN-Event und resumed automatisch. Ein zwischenzeitlich eingebauter kickReleaseMedia (USAGE_MEDIA + GAIN) verhinderte das Auto-Resume sogar (Spotify interpretierte es als "user-action stopp") — wieder rausgenommen

App Features

  • Bildupload funktioniert (Shared Volume /shared/uploads/)
  • Sprachnachrichten werden als Text angezeigt (STT → Chat-Bubble)
  • Cache leeren + Auto-Download von Anhaengen
  • ARIA liest Nachrichten vor (TTS via Piper, später ersetzt)
  • Autoscroll zur letzten Nachricht (inverted FlatList)
  • Bilder im Chat groesser + Vollbild-Vorschau
  • Ohr-Button → Gespraechsmodus (Auto-Aufnahme nach ARIA-Antwort)
  • Play-Button in ARIA-Nachrichten fuer Sprachwiedergabe
  • Chat-Suche in der App (Lupe in Statusleiste)
  • Abbrechen-Button im Diagnostic Chat
  • Stimmen-Einstellungen (Ramona/Thorsten, Speed pro Stimme — durch XTTS/F5-TTS ersetzt)
  • Highlight-Trigger konfigurierbar in Diagnostic (spaeter komplett entfernt — war Piper-Relikt)
  • XTTS v2 Integration (Gaming-PC, GPU, Voice Cloning) — durch F5-TTS ersetzt
  • XTTS Voice Cloning (Audio-Samples hochladen, eigene Stimme)
  • TTS Engine waehlbar (Piper/XTTS) — Piper raus, XTTS raus, jetzt nur F5-TTS
  • Auto-Update System (APK via RVS WebSocket)
  • Auto-Update: APK-Installation via FileProvider
  • Auto-Update: "Auf Updates pruefen" Button in App-Einstellungen
  • Audio-Queue (sequentielle Wiedergabe, kein Ueberlappen)
  • Mehrere Anhaenge + Text vor dem Senden (Pending-Vorschau)
  • Paste-Support fuer Bilder in Diagnostic Chat
  • Markdown-Bereinigung fuer TTS (fett, kursiv, code, links, etc.)
  • Diagnostic: Sessions als Markdown exportieren (Download-Button)
  • Speech Gate: Aufnahme wird verworfen wenn keine Sprache erkannt
  • Session-Persistenz: Gewaehlte Session bleibt ueber Container-Restarts erhalten
  • Whisper STT: Model-Auswahl in Diagnostic (tiny/base/small/medium/large-v3), Hot-Reload
  • App: Audio-Aufnahme explizit 16kHz mono (spart Resample, optimal fuer Whisper)
  • Streaming TTS: PCM-Stream → AudioTrack MODE_STREAM, keine WAV-Gaps
  • Piper komplett entfernt
  • Gespraechsmodus: Speech-Gate strenger (-28dB / 500ms)
  • Diagnostic: Archivierte Session-Versionen (.reset.*) angezeigt + exportierbar
  • tools/export-jsonl-to-md.js: CLI-Konverter fuer Session-JSONL zu Markdown
  • NO_REPLY-Filter in Bridge + Diagnostic
  • Audio-Ducking + Exklusiv-Focus (Kotlin AudioFocusModule)
  • TTS-Cleanup serverseitig: Code-Bloecke raus, Einheiten ausgeschrieben, Abkuerzungen buchstabiert, URLs zu "ein Link"
  • QR-Code Onboarding: Diagnostic generiert QR, App scannt
  • TTS-Audio-Cache im Filesystem: WAV pro messageId, Play-Button spielt aus Cache
  • Config via Diagnostic: RVS-Credentials + Auth-Token persistiert in /shared/config/runtime.json
  • Disk-Voll Banner in Diagnostic: rotes Overlay + copy-baren Cleanup-Befehlen (safe + aggressiv)
  • cleanup.sh: kombinierter Docker-Aufraeum-Befehl (safe / --full)
  • Streaming TTS Pre-Roll: AudioTrack play() startet erst wenn 2.5s gepuffert sind
  • Leading-Silence (200ms) am Stream-Anfang — AudioTrack faehrt sauber an
  • Pre-Roll-Buffer einstellbar in App-Settings (1.0-6.0s, Default 3.5s)
  • Fade-In auf erstem PCM-Chunk (120ms) — versteckt XTTS/F5-TTS Warmup-Glitches
  • Decimal-zu-Worte fuer TTS (0.1 → null komma eins, mit IP-Schutz-Lookahead)
  • Generic Acronym-Buchstabieren (XTTS → X T T S, USB → U S B, ueber expliziter Liste)
  • voice_preload/voice_ready: Stille Mini-Render bei Voice-Wechsel + Toast/Status "bereit"
  • Whisper STT auf die Gamebox ausgelagert (faster-whisper CUDA, float16) — neuer aria-whisper-bridge Container
  • aria-bridge: STT primaer remote (Gamebox), Fallback lokal nach 45s Timeout
  • Whisper-Modell hot-swap auf Gamebox via config-Broadcast aus Diagnostic
  • F5-TTS ersetzt XTTS komplett — neuer aria-f5tts-bridge Container, Voice Cloning, satzweises Streaming
  • Voice-Upload mit Whisper-Auto-Transkription — User muss keinen Referenz-Text eintippen
  • Audio-Pause statt Ducking: Spotify/YouTube pausieren komplett waehrend TTS (TRANSIENT statt MAY_DUCK)
  • VAD-Stille einstellbar in App-Settings (1.0-8.0s, Default 2.8s)
  • MAX_RECORDING auf 120s — laengere Erklaerungen moeglich
  • F5-TTS: Referenz-WAV-Preprocessing — Loudness-Normalisierung -16 LUFS + Silence-Trim + 10s Clip fuer konsistente Cloning-Quali
  • F5-TTS: deutsches Fine-Tune (aihpi/F5-TTS-German, Vocos-Variante) via hf:// Pfad in Diagnostic konfigurierbar
  • Dynamischer STT-Timeout in aria-bridge: 300s waehrend whisper-bridge 'loading', 45s wenn 'ready'
  • service_status Broadcasts: f5tts/whisper melden Lade-Status, Banner in Diagnostic (unten rechts) + App (oben)
  • config_request Pattern: Bridges fragen beim Connect die aktuelle Voice-Config an, aria-bridge antwortet
  • F5-TTS Tuning via Diagnostic (Modell-ID, Checkpoint, cfg_strength, nfe_step) statt ENV-Vars — Hot-Reload bei Modell-Wechsel
  • Conversation-Window: Gespraechsmodus endet nach X Sekunden Stille (1.0-20.0s, Default 8s, einstellbar in Settings)
  • Porcupine Wake-Word-Integration in der App (durch openWakeWord ersetzt)
  • HF-Cache als Bind-Mount statt Docker Volume — kein .vhdx-Bloat auf Docker Desktop / Windows
  • cleanup-windows.ps1 / .bat: VHDX-Cleanup via diskpart (ohne Hyper-V) mit Self-Elevation
  • App Text-Rendering: Nachrichten selektierbar + Autolink fuer URLs/E-Mails/Telefonnummern (Browser/Mail/Dialer)
  • TTS-Wiedergabegeschwindigkeit pro Geraet einstellbar (Settings → 0.5-2.0x in 0.1-Schritten, Default 1.0)
  • Diagnostic: Voice-Preview-Modal (Play-Icon vor Delete-X, Textfeld mit Default, WAV im Browser abspielen)
  • Wake-Word komplett on-device via openWakeWord (ONNX Runtime) — Porcupine raus, kein API-Key/keine Lizenzgebuehren mehr. Mitgelieferte Keywords: hey_jarvis, computer, alexa, hey_mycroft, hey_rhasspy
  • APK ABI-Split auf arm64-v8a — von ~136 MB auf ~35 MB, Auto-Update-Downloads aufs Phone deutlich kleiner
  • PhoneStateListener: TTS pausiert bei eingehendem Anruf (READ_PHONE_STATE Permission)
  • VoIP-Anrufe (WhatsApp/Signal/Discord/Teams) erkannt via AudioFocus-Loss-Listener + getMode-Polling-Fallback (alle 3s)
  • Auto-Resume nach Anruf: ARIAs unterbrochene Antwort spielt nach dem Auflegen ab der gemerkten Position weiter (Date.now()-Tracking + WAV-Cache, 30s-Wartezeit auf final-Marker bei kurzem Telefonat)
  • Neue Frage waehrend Telefonat ueberschreibt pending Auto-Resume — letzte Antwort gewinnt, alter resumeSound wird gestoppt
  • Audio-Ausgabe waehrend aktivem Telefonat funktioniert (haltAllPlayback nur bei state-Wechsel idle→ringing/offhook, nicht bei offhook→offhook)
  • PcmPlaybackFinished-Event im Native: AudioFocus wird erst released wenn AudioTrack wirklich durch ist (vorher: end()-Cap nach 0.5s → Spotify spielte 32s parallel zu ARIA)
  • APK-Cache-Cleanup robuster: durchsucht jetzt CachesDirectoryPath + DocumentDirectoryPath + ExternalCachesDirectoryPath + ExternalDirectoryPath statt nur Caches. Plus manueller Button "Update-Cache leeren" in Settings → Speicher mit Live-Anzeige der aktuellen Groesse
  • Diagnostic-Chat: bubblige Formatierung, mehrzeiliges Eingabefeld (textarea, Enter sendet, Shift+Enter neue Zeile)
  • Adaptive VAD-Schwelle: Baseline aus den ersten 500ms Mic-Pegel, Stille = baseline+6dB / Sprache = baseline+12dB
  • Max-Aufnahmedauer konfigurierbar in Settings (1-30 min, Default 5 min) — laengere Diktate moeglich
  • Barge-In: User kann ARIA waehrend Antwort/Tool-Use unterbrechen, alte Aktivitaet wird abgebrochen, Bridge gibt aria-core einen Kontext-Hint dass es eine Korrektur ist
  • Settings-Sub-Screens: 8 Kategorien (Verbindung, Allgemein, Spracheingabe, Wake-Word, Sprachausgabe, Speicher, Protokoll, Ueber) statt langer Liste
  • Bereit-Sound (Airplane Ding-Dong) wenn Mikro nach Wake-Word offen — akustische Bestaetigung statt nur Toast. Toggle in Settings → Wake-Word, default aktiv
  • Wake-Word parallel zu TTS mit AcousticEchoCanceler: User sagt "Computer" waehrend ARIA spricht → TTS verstummt sofort, neue Aufnahme startet
  • GPS-Position mitsenden: Toggle in Settings → Allgemein → Standort, persistiert in AsyncStorage. Wenn aktiv wird lat/lon mit jeder chat/audio-Message mitgegeben. Bridge prefixed den Text fuer aria-core mit GPS-Hint (mit Anweisung dass die Position nur bei Bedarf erwaehnt wird)
  • Background Audio Service: TTS, Wake-Word-Lauschen UND Aufnahme laufen auch bei minimierter App weiter. Foreground-Service mit foregroundServiceType=mediaPlayback|microphone, persistente Notification mit dynamischem Text ("ARIA spricht" / "ARIA hoert zu" / "ARIA bereit")

Infrastruktur

  • Watchdog mit Container-Restart (2min Warnung → 5min doctor --fix → 8min Restart)
  • Nachrichten Backup on-the-fly (/shared/config/chat_backup.jsonl)
  • RVS Nachrichten vom Smartphone gehen durch
  • SSH Volume read-write fuer Proxy (kein -F Workaround mehr)

Offen

Bugs

App Features

  • Chat-History zuverlaessiger laden (AsyncStorage Race Condition)
  • Custom-Wake-Word-Upload via Diagnostic (eigene .onnx-Files ohne App-Rebuild)

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