# ARIA — Changelog Alle Änderungen am Projekt. Format: [Keep a Changelog](https://keepachangelog.com/de/1.1.0/) --- ## [0.0.0.4] — 2026-03-11 / 2026-03-12 ### Hinzugefügt **Diagnostic Container — Selbstcheck-UI** - Neuer Container `aria-diagnostic` mit Web-UI auf Port 3001 - Status-Karten: OpenClaw Gateway, RVS, Claude Proxy — jeweils mit Dot-Indicator - Claude Proxy Test: Prüft Erreichbarkeit (`/v1/models`) und sendet Test-Prompt an Claude - Chat-Test: Nachrichten direkt über Gateway oder via RVS senden - Tabbed Logs: Separate Tabs für Alle, Gateway, RVS, Proxy, Server — mit Zähler pro Tab - Autoscroll-Pause: Automatisch wenn hochgescrollt, "Nach unten" Button zum Fortsetzen - TLS Fallback für RVS-Verbindung (wie Bridge und App) ### Geändert **Bridge → aria-core: OpenClaw Gateway Protokoll** - Bridge nutzt jetzt das echte OpenClaw Gateway WebSocket-Protokoll (Port 18789 statt 8080) - Vollständiger Handshake: `connect.challenge` → `connect` Request (mit Auth-Token) → `hello-ok` - Nachrichten über `chat.send` Method mit `message` und `idempotencyKey` - Antworten über `chat:final` Events (statt custom JSON) - Streaming-Support vorbereitet (`chat:delta` Events werden empfangen) - Fehlerbehandlung für `chat:error` Events — werden an die App weitergeleitet - Client-ID: `gateway-client` / Mode: `backend` (OpenClaw akzeptiert nur bestimmte Werte) **Docker-Compose Überarbeitung** - Bridge + Diagnostic nutzen `network_mode: "service:aria"` — teilen Netzwerk mit aria-core, kein separates Netz nötig - `ANTHROPIC_API_KEY` + `ANTHROPIC_BASE_URL` — OpenClaw nutzt Anthropic-Provider, nicht OpenAI - `DEFAULT_MODEL=claude-sonnet-4-6` — ohne `openai/` Prefix (Anthropic-Provider) - `OPENCLAW_GATEWAY_TOKEN` statt `AUTH_TOKEN` — korrekter Env-Var-Name - `ARIA_AUTH_TOKEN` an Bridge und Diagnostic durchgereicht - Port 3001 auf aria-Service gemappt (für Diagnostic Web-UI) ### Behoben - Handshake fehlgeschlagen `[object Object]` — Fehlermeldung wurde nicht korrekt stringifiziert - `client.id` und `client.mode` im Connect-Request — OpenClaw akzeptiert nur vordefinierte Werte (`cli`, `gateway-client`, `webchat` etc.) - `chat.send` nutzt `message` statt `text` als Parameter — OpenClaw Schema-Validierung - **Claude Proxy bindet auf 0.0.0.0** — `claude-max-api-proxy` bindet hardcoded auf `127.0.0.1`, nicht erreichbar im Docker-Netz. Fix: `standalone.js` wird beim Start gepatcht, liest jetzt `HOST` Env-Var (Upstream-Bug: `startServer()` unterstützt `host`, aber CLI übergibt es nicht) - **Claude Proxy Crash bei Chat-Completion** — `normalizeModelName()` in `cli-to-openai.js` crasht wenn `model` undefined ist (`TypeError: Cannot read properties of undefined`). Fix: Null-Guard-Patch mit Fallback auf `claude-sonnet-4` --- ## [0.0.0.3] — 2026-03-09 ### Geändert **RVS — Architektur-Umbau** - RVS ist jetzt reiner Relay — kennt keine Tokens, keine Expiry, leitet nur durch - `TOKEN_EXPIRY` und `RVS_PUBLIC_HOST`/`RVS_PUBLIC_PORT` entfernt - Rooms leben solange Clients verbunden sind (statt fester Ablaufzeit) - Multi-Instanz: Mehrere ARIA-VMs können denselben RVS nutzen (z.B. Stefan + Papa) **Token-Erzeugung auf ARIA-VM statt RVS** - `generate-token.js` aus `rvs/` entfernt - Neues `generate-token.sh` im Hauptverzeichnis (läuft auf ARIA-VM) - Token wird automatisch in `.env` geschrieben - `./generate-token.sh show` zeigt bestehendes Token als QR nochmal an **Konfiguration vereinfacht** - `RVS_URL` ersetzt durch `RVS_HOST`, `RVS_PORT`, `RVS_TLS` (klare Einzelfelder) - Port einmal in `.env` ändern → wirkt auf RVS docker-compose, Bridge und QR-Code - `rvs/docker-compose.yml` nutzt `${RVS_PORT:-443}` statt hardcoded Port **Android App — QR-Code Scanner** - Echter QR-Code Scanner statt Platzhalter-Alert (`react-native-camera-kit`) - Vollbild-Kamera mit Overlay, Validierung des QR-Formats - Kamera-Berechtigung (Android Runtime Permission) - `AndroidManifest.xml` — `CAMERA` Permission hinzugefügt **Voice Bridge — RVS-Anbindung** - Bridge verbindet sich jetzt parallel zu aria-core (lokal) UND zum RVS (öffentlich) - Nachrichten von der App werden über RVS → Bridge → aria-core weitergeleitet - Antworten von aria-core werden über Bridge → RVS → App zurückgeschickt - Auto-Reconnect mit Exponential Backoff für beide WebSocket-Verbindungen - Neue Message-Handler: chat, mode, location, file, audio **Android Build-Fixes** - `kotlin_version` (snake_case) in `build.gradle` hinzugefügt — `react-native-camera-kit` braucht beide Varianten - `build.sh` schreibt `org.gradle.java.home` dynamisch in `gradle.properties` — verhindert dass Gradle kaputte JVM-Pfade findet (`/usr/lib/jvm/openjdk-17` ohne bin/java) - `minSdkVersion` 21 → 23 — `react-native-camera-kit` braucht mindestens API 23 **Android App — Credentials Persistenz** - Verbindungsdaten (Host, Port, Token) werden nach QR-Scan in AsyncStorage gespeichert - Beim App-Start automatisch geladen und verbunden — einmal scannen, nie wieder - Neue Dependency: `@react-native-async-storage/async-storage` **Docker & Infrastruktur** - OpenClaw Image fix: `openclaw/openclaw:latest` → `ghcr.io/openclaw/openclaw:latest` - Proxy fix: Binary heißt `claude-max-api`, braucht `@anthropic-ai/claude-code` als Peer-Dependency - Proxy Binary-Name fix: `claude-max-api-proxy` → `claude-max-api` (npm-Paket heißt anders als die Binary) - `libportaudio2` in Bridge Dockerfile hinzugefügt — `sounddevice` braucht PortAudio - `aria-data/config/aria.env.example` hinzugefügt — Voice Bridge Konfigurationsvorlage **Wake-Word Fix (openwakeword)** - `WakeWordDetector` umgebaut — sucht Custom-Modell `/voices/wake_aria.onnx`, Fallback auf eingebautes `hey_jarvis` - Alter Code crashte: `wakeword_models=["aria"]` erwartet Dateipfad, kein Keyword **TLS Fallback (Bridge → RVS)** - Bridge versucht zuerst `wss://` (TLS), bei `ssl.SSLError` automatisch Fallback auf `ws://` - Konfigurierbar über `RVS_TLS_FALLBACK=true` in `.env` - Loggt deutlich wenn TLS gewollt aber nicht verfügbar ist **Audio-Rendering für App (Piper TTS via RVS)** - Bridge rendert Piper TTS → WAV → base64, sendet Text UND Audio gleichzeitig über RVS - App spielt Audio ab und zeigt Text parallel — Modus entscheidet ob Sprache oder nur Text - Voice Engine initialisiert IMMER (auch ohne Soundkarte in der VM) - STT/Wake-Word nur wenn Audio-Hardware vorhanden — graceful degradation - Neue Dependency: `react-native-fs` (base64 → temp WAV → Sound abspielen) **Chat-Persistenz (Android App)** - Chat-Verlauf wird in AsyncStorage gespeichert (letzte 500 Nachrichten) - Beim App-Start automatisch geladen — Konversation bleibt erhalten - Linearer 1:1 Chat, keine Threads **TLS Fallback + Verbindungslog (Android App)** - App versucht zuerst `wss://`, bei Fehler automatisch Fallback auf `ws://` - `network_security_config.xml` hinzugefuegt — Android 9+ blockiert sonst `ws://` (Cleartext) - Verbindungslog im Settings-Tab — zeigt jeden Verbindungsversuch, Fehler, Fallback (scrollbar, max 200px) - Gespeicherte Config wird beim Start in die Einstellungsfelder geladen - Fix: TLS-Fallback erzeugte Doppel-Verbindungen (onerror + onclose beide reconnected) **RVS — Ghost-Client Fix** - Heartbeat-Intervall 30s → 15s, Cleanup 60s → 30s — tote Clients werden schneller entfernt - `heartbeat` als erlaubter Nachrichtentyp hinzugefuegt — App-Heartbeats halten Verbindung lebendig - App-seitiger JSON-Heartbeat zaehlt als Lebenszeichen (zusaetzlich zu WebSocket Ping/Pong) **Neues Script: `get-voices.sh`** - Lädt Piper Stimmen (Ramona + Thorsten) von HuggingFace herunter - Neuer Installationsschritt in README **ARIA Persönlichkeit** - `AGENT.md` überarbeitet — ARIA ist jetzt Partnerin auf Augenhöhe (Claude-Charakter) - Direkt, ehrlich, humorvoll, lösungsorientiert, kein Theater --- ## [0.0.0.2] — 2026-03-08 ### Geändert **Build-Fixes** - `CI=true` in `build.sh` — verhindert EMFILE durch Metro File-Watcher im Release-Build - `setup.sh` erstellt Metro-Config-Dateien automatisch (metro.config.js, babel.config.js, .watchmanconfig) **Release-Script** - `release.sh` komplett umgebaut — Kennwort wird interaktiv abgefragt statt Token in `.env` - Gitea-Upload fix: `-F` multipart statt `--data-binary` - Login-Test vor Release, CHANGELOG.md-Integration für Release Notes --- ## [0.0.0.1] — 2026-03-08 ### Hinzugefügt **Infrastruktur** - `docker-compose.yml` — ARIA-VM mit Proxy, OpenClaw, Voice Bridge - `.env.example` — Konfigurationsvorlage (ohne Secrets) - `release.sh` — Automatisiertes Release (Build, Tag, Gitea Upload mit Kennwort-Abfrage) **RVS (Rendezvous-Server)** - WebSocket Relay Server (`rvs/server.js`) — Token-Rooms, Heartbeat, Message Types - Docker Setup (`rvs/Dockerfile`, `rvs/docker-compose.yml`) **Token & Pairing** - `generate-token.sh` — Token-Generator mit QR-Code (läuft auf ARIA-VM, schreibt Token in `.env`) **Voice Bridge** - Python Voice Bridge (`bridge/aria_bridge.py`) — Whisper STT, Piper TTS, Wake-Word - 5 Betriebsmodi (`bridge/modes.py`) — Normal, DND, Whisper, Hangar, Gaming - Docker Setup (`bridge/Dockerfile`, `bridge/requirements.txt`) **Android App (ARIA Cockpit)** - Chat-Screen mit Texteingabe, Voice-Button, Datei/Kamera-Upload - Settings-Screen mit Verbindungsstatus, Token-Eingabe, Modus-Auswahl, GPS-Toggle, Log-Viewer - WebSocket-Service mit Auto-Reconnect und Exponential Backoff - Audio-Service (Mikrofon-Aufnahme, TTS-Wiedergabe) - Push-to-Talk Button mit Puls-Animation - Modus-Selektor (5 Modi) - Build-Tooling: `setup.sh` (7-Schritt Dev-Setup), `build.sh` (Release/Debug APK) - Metro-Config, Babel-Config, Watchman-Config **Konfiguration & Daten** - `aria-data/config/AGENT.md` — ARIAs Persönlichkeit und Sicherheitsregeln - `aria-data/config/USER.md` — Stefans Präferenzen - `aria-data/config/TOOLING.md` — VM-Tooling Liste - `aria-data/skills/README.md` — Skill-Bauanleitung ### Bekannte Probleme - Android Release-Build: `EMFILE: too many open files` — Fix: `CI=true` in `build.sh` - JDK 21 inkompatibel mit AGP 8.1 — Fix: Automatischer Fallback auf JDK 17 - `react-native-screens` > 3.27.0 inkompatibel mit RN 0.73.4 — Fix: Version gepinnt