ARIA-AGENT/CHANGELOG.md

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-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 — zeigt verfügbare Modelle als Tags + DEFAULT_MODEL Hinweis 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 login im Proxy-Container aus, streamt Output live (URL + Code), klickbarer Link zum Autorisieren
  • Docker Exec API: Generische dockerExec() + Streaming-Variante dockerExecStreaming() 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.challengeconnect 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)
  • Proxy Claude-Config Volume :ro:rw — Login via Diagnostic-UI braucht Schreibzugriff

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.0claude-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-CompletionnormalizeModelName() 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.xmlCAMERA 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:latestghcr.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-proxyclaude-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