From 80d2fe3e93ad0f915edb1b0b7ed5bdf21359fe9d Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 24 May 2026 20:55:28 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20README=20aktualisiert=20=E2=80=94=20FLU?= =?UTF-8?q?X,=20ARIA=20Live,=20OAuth=20+=20Caddy,=20Skill-Mgmt,=20Bridge-W?= =?UTF-8?q?atchdog,=20Bubble-Aktionen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Diagnostic-Sektion: OAuth-Apps zeigt jetzt Spotify-Default + on-demand- Provider statt fixe 5er-Liste, `oauth_register_provider` als 4. Tool erwaehnt, Caddy/Let's-Encrypt vor RVS dokumentiert - App-Features: Long-Press/⎘-Bubble-Aktionen + System-Share, neue Settings- Sektionen "πŸ› οΈ Skills" und "πŸ”‘ OAuth-Apps", Voice-Speed persistent - Voice-Bridge-Sektion: 3-Schichten Hang-Schutz (TCP-Keepalive + Asyncio-Watchdog + File-Based Liveness) erlaeutert, TLS-Fallback-Reset - Roadmap Phase B: sechs neue Eintraege fuer die letzten ~10 Commits (FLUX, ARIA Live + Not-Aus, OAuth-Pipeline, Skill-Mgmt-Tools, Bridge-Hang-Schutz, Bubble-Aktionen) Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b8f8d4..9247958 100644 --- a/README.md +++ b/README.md @@ -301,6 +301,16 @@ aria-brain β†’ Antwort β†’ Bridge β†’ RVS β†’ App buchstabiert (`USB` β†’ "U S B", `XTTS` β†’ "X T T S"). - **Wake-Word**: openwakeword (lokales Mikrofon auf der VM, optional) - **Modi**: Normal, Nicht stoeren, Fluestern, Hangar, Gaming +- **3-Schichten Hang-Schutz** (gegen tote NAT-Verbindungen + asyncio-Limbo): + (1) TCP-Keepalive auf dem RVS-Socket (30s idle / 10s probe / 3 retries β€” + tote Connections in ~1 min erkannt statt nach 2h Linux-Default), + (2) Asyncio-Heartbeat-Watchdog (eigene Coroutine, killt WS-Connection + wenn `_last_heartbeat_ok` > 60s stale ist β€” Schutz gegen + `ws.ping()`-Limbo bei halb-toten Verbindungen), + (3) File-Based Liveness Thread (separater OS-Thread, immun gegen asyncio- + Hangs, `os._exit(1)` nach 180s Staleness β†’ Docker restart_policy + uebernimmt). Plus: TLS-Fallback klebt nicht mehr β€” bei Reconnect + wird wieder primary wss:// versucht. ### Betriebsmodi @@ -332,7 +342,7 @@ Erreichbar unter `http://:3001`. Teilt das Netzwerk mit der Bridge. **AuflΓΆsung**: Background-Loop tickt alle 8s (vorher 30s β€” bei 100 km/h durch einen 300m-Radius war eine Vorbeifahrt nur ~22s drin und konnte verpasst werden). Plus event-getrieben: Bridge ruft nach jedem `location_update` von der App sofort einen `/triggers/check-now` im Brain β€” Watcher sehen die frische Position in Millisekunden statt im Polling-Takt. `near()`-Funktionen ignorieren GPS-Daten Γ€lter als 5 Minuten (verhindert Phantom-Fires bei abgeschaltetem Tracking). - **Dateien**: Browser fuer `/shared/uploads/` mit Multi-Select + "Alle markieren" + Bulk-Download (ZIP bei 2+) + Bulk-Delete. Live-Update der Chat-Bubbles beim Delete. -- **Einstellungen**: Reparatur (Container-Restart fuer Brain/Bridge/Qdrant), Komplett-Reset, Betriebsmodi, Sprachausgabe + Voice-Cloning + F5-TTS-Tuning + Voice Export/Import, **FLUX Bildgenerierung** (Default-Modell + Raw/Switch-Keywords + HF-Token), **OAuth-Apps** (Spotify, Google, GitHub, Strava, Microsoft, ...) mit client_id+client_secret pro Service + One-Click-Autorisieren, Whisper, Sprachmodell (brainModel), Onboarding-QR, App-Cleanup +- **Einstellungen**: Reparatur (Container-Restart fuer Brain/Bridge/Qdrant), Komplett-Reset, Betriebsmodi, Sprachausgabe + Voice-Cloning + F5-TTS-Tuning + Voice Export/Import, **FLUX Bildgenerierung** (Default-Modell + Raw/Switch-Keywords + HF-Token), **OAuth-Apps** (Spotify Default, alle anderen Provider per ARIA on-demand oder "+ Custom"-Button mit auth_url/token_url/scopes) mit client_id+client_secret pro Service + One-Click-Autorisieren + Service-Loeschen, Whisper, Sprachmodell (brainModel), Onboarding-QR, App-Cleanup ### Was zusaetzlich noch drin steckt @@ -343,7 +353,7 @@ Erreichbar unter `http://:3001`. Teilt das Netzwerk mit der Bridge. - **Settings Export/Import**: `voice_config.json` + `highlight_triggers.json` als JSON-Bundle - **Claude Login**: Browser-Terminal zum Einloggen in den Proxy - **ARIA Live**: read-only Mirror der Claude-Code-Session β€” alle Tool-Calls + Inputs + Outputs live in einer Monospace-Liste, farbcodiert. Plus β›” **Not-Aus**-Button der per RVS einen `cancel_request` mit `hard:true` ausloest β†’ aria-bridge ruft den proxy-internen `/cancel-all` Side-Channel β†’ alle Claude-Subprocesses werden sofort gekillt -- **OAuth-Callback-Pipeline**: RVS hat einen HTTP-Listener auf demselben Port wie der WebSocket. Provider (Spotify/Google/...) redirecten den User an `https://{RVS_HOST}/oauth/callback/{service}` β†’ RVS broadcastet als `oauth_callback`-WS-Message β†’ aria-bridge forwarded an Brain β†’ Brain matched `state`, tauscht `code` gegen Token, persistiert in `/shared/config/oauth_tokens.json`. Token-Refresh laeuft automatisch. ARIA hat `oauth_authorize` / `oauth_get_token` / `oauth_revoke` als Brain-Tools +- **OAuth-Callback-Pipeline**: Caddy davor terminiert TLS via Let's Encrypt, RVS hat einen HTTP-Listener auf demselben Port wie der WebSocket. Provider (Spotify/Dropbox/Discord/...) redirecten den User an `https://{RVS_HOST}/oauth/callback/{service}` β†’ RVS broadcastet als `oauth_callback`-WS-Message β†’ aria-bridge forwarded an Brain β†’ Brain matched `state`, tauscht `code` gegen Token, persistiert in `/shared/config/oauth_tokens.json`. Token-Refresh laeuft automatisch. ARIA hat vier Brain-Tools: **`oauth_register_provider`** (legt URLs eines neuen Providers wie Dropbox/Discord/Notion/... on-demand in `oauth_apps.json` an β€” Credentials bleiben Stefans Job), `oauth_authorize`, `oauth_get_token`, `oauth_revoke` --- @@ -378,7 +388,10 @@ Erreichbar unter `http://:3001`. Teilt das Netzwerk mit der Bridge. - **Mehrere Anhaenge**: Bilder + Dateien sammeln, Text hinzufuegen, dann zusammen senden - **Paste-Support**: Bilder aus Zwischenablage einfuegen (Diagnostic) - **Anhaenge**: Bridge speichert in Shared Volume, ARIA kann darauf zugreifen, Re-Download ueber RVS +- **Bubble-Aktionen** (Long-Press oder ⎘-Icon): oeffnet ein Aktions-Menu mit "πŸ“‹ Ganzen Text teilen" (System-Share-Sheet β†’ Zwischenablage / WhatsApp / etc.) plus pro extrahierte URL/E-Mail/Telefonnummer eine eigene Teilen-Option. Plus native Text-Markierung via `selectable` ist weiter da - **Einstellungen**: TTS-aktiv, F5-TTS-Voice, Pre-Roll-Buffer, Stille-Toleranz, Speicherort, Auto-Download, GPS, Verbose-Logging +- **Settings-Sektionen "πŸ› οΈ Skills" und "πŸ”‘ OAuth-Apps"** (unterwegs konfigurieren ohne Diagnostic): Skills-Browser mit Run + Live-stdout/stderr + Logs der letzten 20 Runs + Loeschen; OAuth-Apps mit client_id/secret-Eingabe + "Autorisieren β†—" (oeffnet System-Browser, redirect zur RVS-Callback-Seite, Status-Refresh nach 8s) + "+ Custom"-Modal um eigene Provider mit auth_url/token_url/scopes anzulegen +- **Voice-Speed persistent**: App-Setting wird in `voice_config.json` als `xttsSpeed` persistiert. Greift jetzt auch bei Diagnostic-Chats / Trigger-Replies / nach Bridge-Restart β€” nicht mehr nur waehrend der App-Chat-Sitzung - **Auto-Update**: Prueft beim Start + per Button auf neue Version, Download + Installation ueber RVS (FileProvider) - GPS-Position (optional, mit Runtime-Permission-Request) β€” wird in jeden Chat/Audio-Payload mitgegeben und ist in Diagnostic als Debug-Block einblendbar - **GPS-Tracking (kontinuierlich)**: Toggle in Settings β†’ Standort. Wenn aktiv, pushed die App ab 30m Bewegung ein `location_update` an die Bridge β€” Voraussetzung damit Watcher mit `near(lat, lon, m)` (z.B. Blitzer-Warner, Ankunft-Erinnerungen) ueberhaupt feuern koennen. **Heartbeat alle 60 s**: auch ohne Bewegung wird die letzte bekannte Position erneut an die Bridge geschickt damit der Brain-State nicht nach 5 min (NEAR_MAX_AGE_SEC) veraltet β€” kein extra GPS-Wakeup, akkufreundlich. ARIA selbst kann das Tracking via `request_location_tracking`-Tool an-/ausschalten und tut das automatisch wenn sie einen GPS-Watcher anlegt @@ -912,6 +925,12 @@ docker exec aria-brain curl localhost:8080/memory/stats - [x] App: Chat-Suche mit Next/Prev Navigation statt Filter - [x] Token/Call-Metrics + Subscription-Quota-Tracking (Pro / Max 5x / Max 20x / Custom) - [x] Datei-Manager Multi-Select: Bulk-Download als ZIP + Bulk-Delete (Diagnostic + App) +- [x] **FLUX.1 Bildgenerierung**: eigener `flux-bridge`-Container auf der Gamebox (analog xtts/whisper) mit Hot-Swap zwischen FLUX.1-dev (Quali) und FLUX.1-schnell (Tempo). Default-Modell + Raw-/Switch-Keywords + HuggingFace-Token in Diagnostic-UI verwaltet, automatischer Pipeline-Reload bei Modell-Wechsel. ARIA bekommt `flux_generate`-Tool, Output landet als `/shared/uploads/aria_generated_.png` und wird via `[FILE: ...]`-Marker als Anhang-Bubble in App + Diagnostic gerendert. Download-Status (mehrere GB) sichtbar als πŸŽ‰-Toast wenn fertig +- [x] **ARIA Live (Diagnostic) + Not-Aus**: read-only Mirror der Claude-Code-Session ersetzt den SSH-Tab. Tool-Calls + Inputs + Outputs (truncated 4 KB) live, farbcodiert. Roter β›” Not-Aus-Button schickt `cancel_request` mit `hard:true` β†’ Bridge ruft den proxy-internen `/cancel-all` Side-Channel (Port 3457) β†’ alle Claude-Subprocesses sofort tot. Plus: Idle-Watchdog im Proxy (20 min Inaktivitaet β†’ Subprocess-Kill) + httpx-Timeout-Split im Brain (connect 10s / read 24h) damit lange Pentests durchlaufen +- [x] **OAuth2-Pipeline ueber RVS-Callback**: Caddy mit Let's Encrypt vor dem RVS, HTTP-Route `/oauth/callback/{service}` broadcastet als `oauth_callback`-WS-Message, aria-bridge forwarded an Brain, Token landet in `/shared/config/oauth_tokens.json` (mode 0600). ARIAs `oauth_register_provider`-Tool legt neue Provider on-demand an (URLs/scopes, nicht Credentials). Diagnostic + App haben beide Provider-Verwaltung inklusive Custom-Provider-Anlage +- [x] **Skill-Mgmt-Tools fuer ARIA**: `skill_update` (Code/README/pip_packages mit venv-Rebuild) + `skill_delete` β€” verhindert Skill-Friedhof mit `-v2`/`-fixed`-Suffixen. Plus App-seitiger SkillBrowser (Run + Live-Output + Logs der letzten 20 Runs) in Settings β†’ πŸ› οΈ Skills +- [x] **Bridge-Hang-Schutz + Voice-Speed persistent**: 3-Schichten-Watchdog (TCP-Keepalive + Asyncio-Watchdog + File-Based Liveness mit Self-Kill), TLS-Fallback klebt nicht mehr beim Reconnect. `xttsSpeed` jetzt im voice_config.json persistiert β€” greift auch bei Diagnostic-Chats und nach Bridge-Restart +- [x] **Bubble-Aktionen in der App**: Long-Press oder ⎘-Icon auf einer Chat-Bubble β†’ Aktions-Menu mit "πŸ“‹ Ganzen Text teilen" plus pro extrahierte URL/E-Mail/Telefonnummer eine eigene Teilen-Option (System-Share-Sheet β†’ Zwischenablage / Apps / Browser) ### Phase 2 β€” ARIA wird produktiv