fixed chat textjson format, selected session for all, fixed android echo

This commit is contained in:
2026-03-29 03:18:02 +02:00
parent f2aebcbad9
commit 1972c4d1b4
3 changed files with 50 additions and 12 deletions
+20 -1
View File
@@ -30,6 +30,7 @@ import wave
from pathlib import Path
from typing import Optional
import urllib.request
import numpy as np
import sounddevice as sd
import websockets
@@ -59,6 +60,7 @@ RVS_PORT = os.getenv("RVS_PORT", "443") # Port des RVS
RVS_TLS = os.getenv("RVS_TLS", "true") # true = wss://, false = ws://
RVS_TLS_FALLBACK = os.getenv("RVS_TLS_FALLBACK", "true") # Bei TLS-Fehler ws:// versuchen
RVS_TOKEN = os.getenv("RVS_TOKEN", "") # Pairing-Token (gleich wie in der App)
DIAGNOSTIC_URL = os.getenv("DIAGNOSTIC_URL", "http://127.0.0.1:3001") # Diagnostic API
WHISPER_MODEL = os.getenv("WHISPER_MODEL", "small")
WHISPER_LANGUAGE = os.getenv("WHISPER_LANGUAGE", "de")
@@ -409,7 +411,8 @@ class ARIABridge:
self.ws_url = self.config.get("ARIA_CORE_WS", CORE_WS_URL)
self.core_auth_token = self.config.get("ARIA_AUTH_TOKEN", CORE_AUTH_TOKEN)
self._req_id_counter = 0
self._session_key = "aria-bridge" # Feste Session fuer die Bridge
self._session_key = "main" # Fallback, wird per Diagnostic API aktualisiert
self._diagnostic_url = self.config.get("DIAGNOSTIC_URL", DIAGNOSTIC_URL)
# RVS-Verbindungsinfo aus Config oder Env
rvs_host = self.config.get("RVS_HOST", RVS_HOST)
rvs_port = self.config.get("RVS_PORT", RVS_PORT)
@@ -790,12 +793,28 @@ class ARIABridge:
else:
logger.info("[core] TTS unterdrueckt (Modus: %s)", self.current_mode.config.name)
def _fetch_active_session(self) -> None:
"""Holt die aktive Session vom Diagnostic-Endpoint."""
try:
req = urllib.request.Request(f"{self._diagnostic_url}/api/session", method="GET")
with urllib.request.urlopen(req, timeout=2) as resp:
data = json.loads(resp.read().decode())
new_key = data.get("sessionKey", "")
if new_key and new_key != self._session_key:
logger.info("[session] Aktive Session gewechselt: %s -> %s", self._session_key, new_key)
self._session_key = new_key
except Exception as e:
logger.debug("[session] Diagnostic nicht erreichbar (%s) — nutze '%s'", e, self._session_key)
async def send_to_core(self, text: str, source: str = "bridge") -> None:
"""Sendet Text an aria-core (OpenClaw chat.send Protokoll)."""
if self.ws_core is None:
logger.error("[core] Nicht verbunden — Nachricht verworfen: '%s'", text[:60])
return
# Aktive Session vom Diagnostic holen
self._fetch_active_session()
req_id = self._next_req_id()
message = json.dumps({
"type": "req",