diff --git a/README.md b/README.md index c39c383..83a23fe 100644 --- a/README.md +++ b/README.md @@ -341,10 +341,10 @@ Erreichbar unter `http://:3001`. Teilt das Netzwerk mit aria-core. - **Chat-Test**: Nachrichten direkt an ARIA senden (Gateway oder via RVS), Vollbild-Modus - **"ARIA denkt..." Indikator**: Zeigt live was ARIA gerade tut (Denken, Tool, Schreiben) - **Abbrechen-Button**: Stoppt laufende Anfragen + doctor --fix -- **Session-Verwaltung**: Sessions auflisten, wechseln, erstellen, loeschen +- **Session-Verwaltung**: Sessions auflisten, wechseln, erstellen, loeschen, als Markdown exportieren (⬇ Button) - **Chat-History**: Wird beim Laden und Session-Wechsel angezeigt (read-only aus JSONL) - **TTS-Diagnose Tab**: Stimmen testen, Status pruefen, Fehler anzeigen -- **Einstellungen**: TTS-Engine (Piper/XTTS), Stimmen, Speed, Highlight-Trigger, Betriebsmodi +- **Einstellungen**: TTS-Engine (Piper/XTTS), Stimmen, Speed, Highlight-Trigger, Betriebsmodi, Whisper-Modell (tiny…large-v3, Hot-Reload) - **XTTS Voice Cloning**: Audio-Samples hochladen, eigene Stimme erstellen - **Claude Login**: Browser-Terminal zum Einloggen in den Proxy - **Core Terminal**: Shell in aria-core (openclaw CLI) @@ -370,7 +370,9 @@ API-Endpoint fuer andere Services: `GET http://localhost:3001/api/session` - **Sprachaufnahme**: Push-to-Talk (halten) oder Tap-to-Talk (tippen, Auto-Stop bei Stille) - **Gespraechsmodus** (Ohr-Button): Nach jeder ARIA-Antwort startet automatisch die Aufnahme — wie ein natuerliches Gespraech hin und her, ohne Buttons druecken - **VAD (Voice Activity Detection)**: Erkennt 1.8s Stille und stoppt automatisch -- **STT (Speech-to-Text)**: Audio wird in der Bridge per Whisper transkribiert, transkribierter Text erscheint im Chat +- **Speech Gate**: Aufnahme wird verworfen wenn keine Sprache erkannt (kein Rauschen an Whisper) +- **STT (Speech-to-Text)**: Audio wird als 16kHz mono aufgenommen und in der Bridge per Whisper transkribiert, transkribierter Text erscheint im Chat +- **"ARIA denkt..." Indicator**: Zeigt live den Status vom Core (Denken, Tool, Schreiben) + Abbrechen-Button - **TTS-Wiedergabe**: ARIA antwortet per Lautsprecher (Piper oder XTTS v2), Audio-Queue mit Preloading - **Play-Button**: Jede ARIA-Nachricht kann nochmal vorgelesen werden - **Chat-Suche**: Lupe in der Statusleiste filtert Nachrichten live @@ -424,6 +426,17 @@ GITEA_USER=stefan RVS_UPDATE_HOST=root@aria-rvs # Optional: fuer Auto-Update ``` +### Docker-Cleanup + +Das Bridge-Image zieht grosse ML-Deps (faster-whisper, ctranslate2, onnxruntime, +openwakeword, piper-tts) — bei jedem Rebuild waechst der Docker-Build-Cache. Wenn +die VM voll laeuft: + +```bash +./cleanup.sh # sicher: Build-Cache + ungenutzte Images +./cleanup.sh --full # aggressiv: zusaetzlich ungenutzte Volumes (mit Rueckfrage) +``` + ### Auto-Update Die App prueft beim Start ob eine neuere Version auf dem RVS liegt. @@ -717,6 +730,12 @@ docker exec aria-core ssh aria-wohnung hostname - [x] Markdown-Bereinigung fuer TTS - [x] Auto-Update mit FileProvider + Update-Check Button - [x] Inverted FlatList (zuverlaessiges Scroll-to-Bottom) +- [x] Speech Gate (VAD verwirft Aufnahme ohne erkannte Sprache) +- [x] Session-Persistenz ueber Container-Restarts (sessionFromFile + atomic write) +- [x] Session-Export als Markdown-Datei (Download-Button pro Session) +- [x] "ARIA denkt..."-Indicator + Abbrechen-Button in App (via Bridge → RVS) +- [x] Whisper-Modell waehlbar in Diagnostic (tiny…large-v3, Hot-Reload) +- [x] App-Aufnahme explizit 16kHz mono (optimal fuer Whisper, kein Resample) ### Phase 2 — ARIA wird produktiv diff --git a/cleanup.sh b/cleanup.sh new file mode 100755 index 0000000..f468626 --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# ARIA Docker Cleanup +# +# Standard: docker builder prune + image prune (sicher, loescht keine Volumes) +# --full: Volle Reinigung inkl. --volumes (Vorsicht bei ungenutzten Volumes!) +# +# Usage: +# ./cleanup.sh # sicherer Cleanup +# ./cleanup.sh --full # aggressiver Cleanup (inkl. Volumes) + +set -e + +FULL=0 +for arg in "$@"; do + case "$arg" in + --full|-f) FULL=1 ;; + -h|--help) + grep '^#' "$0" | sed 's/^# \{0,1\}//' + exit 0 + ;; + esac +done + +echo "── Docker Speicher VOR Cleanup ───────────────────" +docker system df +echo + +if [ "$FULL" = "1" ]; then + echo ">>> VOLLE Reinigung (inkl. ungenutzter Volumes)" + read -p "Wirklich? [y/N] " -n 1 -r REPLY + echo + [[ ! $REPLY =~ ^[Yy]$ ]] && { echo "Abgebrochen."; exit 0; } + docker system prune -a --volumes -f +else + echo ">>> Sicherer Cleanup (Build-Cache + ungenutzte Images)" + docker builder prune -a -f + docker image prune -a -f +fi + +echo +echo "── Docker Speicher NACH Cleanup ──────────────────" +docker system df +echo +df -h / | head -2