11 KiB
ARIA — Changelog
Alle Änderungen am Projekt. Format: Keep a Changelog
[0.0.0.4] — 2026-03-11 / 2026-03-12
Hinzugefügt
Diagnostic Container — Selbstcheck-UI
- Neuer Container
aria-diagnosticmit 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 — zeigt verfügbare Modelle als Tags +DEFAULT_MODELHinweis für docker-compose.yml - Auth-Check: "Auth prüfen" Button zeigt Inhalt von
/root/.config/claude/im Proxy-Container (Dateien +.credentials.json) — per Docker Exec API - Claude Login via UI: "Login starten" Button führt
claude loginim Proxy-Container aus, streamt Output live (URL + Code), klickbarer Link zum Autorisieren - Docker Exec API: Generische
dockerExec()+ Streaming-VariantedockerExecStreaming()für Befehle in laufenden Containern (via Docker Socket) - 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→connectRequest (mit Auth-Token) →hello-ok - Nachrichten über
chat.sendMethod mitmessageundidempotencyKey - Antworten über
chat:finalEvents (statt custom JSON) - Streaming-Support vorbereitet (
chat:deltaEvents werden empfangen) - Fehlerbehandlung für
chat:errorEvents — 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 OpenAIDEFAULT_MODEL=claude-sonnet-4-6— ohneopenai/Prefix (Anthropic-Provider)OPENCLAW_GATEWAY_TOKENstattAUTH_TOKEN— korrekter Env-Var-NameARIA_AUTH_TOKENan Bridge und Diagnostic durchgereicht- Port 3001 auf aria-Service gemappt (für Diagnostic Web-UI)
- Proxy Claude-Config Volume
:ro→:rw— Login via Diagnostic-UI braucht Schreibzugriff
Behoben
- Handshake fehlgeschlagen
[object Object]— Fehlermeldung wurde nicht korrekt stringifiziert client.idundclient.modeim Connect-Request — OpenClaw akzeptiert nur vordefinierte Werte (cli,gateway-client,webchatetc.)chat.sendnutztmessagestatttextals Parameter — OpenClaw Schema-Validierung- Claude Proxy bindet auf 0.0.0.0 —
claude-max-api-proxybindet hardcoded auf127.0.0.1, nicht erreichbar im Docker-Netz. Fix:standalone.jswird beim Start gepatcht, liest jetztHOSTEnv-Var (Upstream-Bug:startServer()unterstützthost, aber CLI übergibt es nicht) - Claude Proxy Crash bei Chat-Completion —
normalizeModelName()incli-to-openai.jscrasht wennmodelundefined ist (TypeError: Cannot read properties of undefined). Fix: Null-Guard-Patch mit Fallback aufclaude-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_EXPIRYundRVS_PUBLIC_HOST/RVS_PUBLIC_PORTentfernt- 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.jsausrvs/entfernt- Neues
generate-token.shim Hauptverzeichnis (läuft auf ARIA-VM) - Token wird automatisch in
.envgeschrieben ./generate-token.sh showzeigt bestehendes Token als QR nochmal an
Konfiguration vereinfacht
RVS_URLersetzt durchRVS_HOST,RVS_PORT,RVS_TLS(klare Einzelfelder)- Port einmal in
.envändern → wirkt auf RVS docker-compose, Bridge und QR-Code rvs/docker-compose.ymlnutzt${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—CAMERAPermission 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) inbuild.gradlehinzugefügt —react-native-camera-kitbraucht beide Variantenbuild.shschreibtorg.gradle.java.homedynamisch ingradle.properties— verhindert dass Gradle kaputte JVM-Pfade findet (/usr/lib/jvm/openjdk-17ohne bin/java)minSdkVersion21 → 23 —react-native-camera-kitbraucht 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-codeals Peer-Dependency - Proxy Binary-Name fix:
claude-max-api-proxy→claude-max-api(npm-Paket heißt anders als die Binary) libportaudio2in Bridge Dockerfile hinzugefügt —sounddevicebraucht PortAudioaria-data/config/aria.env.examplehinzugefügt — Voice Bridge Konfigurationsvorlage
Wake-Word Fix (openwakeword)
WakeWordDetectorumgebaut — sucht Custom-Modell/voices/wake_aria.onnx, Fallback auf eingebauteshey_jarvis- Alter Code crashte:
wakeword_models=["aria"]erwartet Dateipfad, kein Keyword
TLS Fallback (Bridge → RVS)
- Bridge versucht zuerst
wss://(TLS), beissl.SSLErrorautomatisch Fallback aufws:// - Konfigurierbar über
RVS_TLS_FALLBACK=truein.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 aufws:// network_security_config.xmlhinzugefuegt — Android 9+ blockiert sonstws://(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
heartbeatals 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=trueinbuild.sh— verhindert EMFILE durch Metro File-Watcher im Release-Buildsetup.sherstellt Metro-Config-Dateien automatisch (metro.config.js, babel.config.js, .watchmanconfig)
Release-Script
release.shkomplett umgebaut — Kennwort wird interaktiv abgefragt statt Token in.env- Gitea-Upload fix:
-Fmultipart 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 Sicherheitsregelnaria-data/config/USER.md— Stefans Präferenzenaria-data/config/TOOLING.md— VM-Tooling Listearia-data/skills/README.md— Skill-Bauanleitung
Bekannte Probleme
- Android Release-Build:
EMFILE: too many open files— Fix:CI=trueinbuild.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