diff --git a/aria-data/config/AGENT.md b/aria-data/brain-import/AGENT.md similarity index 100% rename from aria-data/config/AGENT.md rename to aria-data/brain-import/AGENT.md diff --git a/aria-data/config/BOOTSTRAP.md b/aria-data/brain-import/BOOTSTRAP.md similarity index 100% rename from aria-data/config/BOOTSTRAP.md rename to aria-data/brain-import/BOOTSTRAP.md diff --git a/aria-data/config/TOOLING.md.example b/aria-data/brain-import/TOOLING.md.example similarity index 100% rename from aria-data/config/TOOLING.md.example rename to aria-data/brain-import/TOOLING.md.example diff --git a/aria-data/config/USER.md.example b/aria-data/brain-import/USER.md.example similarity index 100% rename from aria-data/config/USER.md.example rename to aria-data/brain-import/USER.md.example diff --git a/aria-data/config/aria.env.example b/aria-data/config/aria.env.example deleted file mode 100644 index 04c0a2e..0000000 --- a/aria-data/config/aria.env.example +++ /dev/null @@ -1,14 +0,0 @@ -# Bridge → aria-core (OpenClaw Gateway) -# Bridge teilt Netzwerk mit aria-core (network_mode: service:aria) -# → localhost ist aria-core -ARIA_CORE_WS=ws://127.0.0.1:18789 - -# Wake-Word -WAKE_WORD=aria - -# Whisper STT — wird zur Laufzeit in der Diagnostic (Sektion "Whisper") umgeschaltet -# und in /shared/config/voice_config.json gespeichert. Der Wert hier ist nur der -# Initial-Default beim ersten Start. -# Optionen: tiny | base | small | medium | large-v3 -WHISPER_MODEL=medium -WHISPER_LANGUAGE=de diff --git a/aria-data/config/openclaw-auth.json b/aria-data/config/openclaw-auth.json deleted file mode 100644 index 24110a6..0000000 --- a/aria-data/config/openclaw-auth.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": 1, - "profiles": { - "openai-proxy": { - "provider": "openai", - "default": true, - "apiKey": "not-needed", - "baseUrl": "http://proxy:3456/v1" - } - } -} diff --git a/aria-data/config/openclaw.env b/aria-data/config/openclaw.env deleted file mode 100644 index d3b37ab..0000000 --- a/aria-data/config/openclaw.env +++ /dev/null @@ -1,6 +0,0 @@ -# OpenClaw (aria-core) Konfiguration -# Diese Datei wird als /workspace/.env in den Container gemountet -# -# WICHTIG: ANTHROPIC_API_KEY und ANTHROPIC_BASE_URL absichtlich NICHT gesetzt! -# OpenClaw wuerde sonst die echte Anthropic API direkt anrufen (401 weil kein API Key). -# Stattdessen nur den OpenAI-kompatiblen Proxy nutzen. diff --git a/bridge/aria_bridge.py b/bridge/aria_bridge.py index 611faee..7f0cd1f 100644 --- a/bridge/aria_bridge.py +++ b/bridge/aria_bridge.py @@ -48,7 +48,6 @@ logger = logging.getLogger("aria-bridge") # ── Konfiguration ─────────────────────────────────────────── -CONFIG_PATH = Path("/config/aria.env") VOICES_DIR = Path("/voices") CORE_WS_URL = os.getenv("ARIA_CORE_WS", "ws://127.0.0.1:18789") CORE_AUTH_TOKEN = os.getenv("ARIA_AUTH_TOKEN", "") # OpenClaw Gateway Token @@ -68,38 +67,22 @@ BLOCK_SIZE = 1280 # 80ms bei 16kHz — gut fuer Wake-Word-Erkennung RECORD_SECONDS = 8 # Max. Aufnahmedauer nach Wake-Word def load_config() -> dict[str, str]: - """Laedt Konfiguration. - - Reihenfolge (hoechste Prioritaet zuletzt): - 1. /config/aria.env (bind-mount) - 2. /shared/config/runtime.json (zentral gepflegt ueber Diagnostic UI) - - Werte aus runtime.json ueberschreiben die env-Datei. + """Laedt Konfiguration ausschliesslich aus /shared/config/runtime.json + (zentral gepflegt ueber Diagnostic UI). Tokens + RVS-Settings kommen + via ENV (siehe docker-compose). """ config: dict[str, str] = {} - if CONFIG_PATH.exists(): - for line in CONFIG_PATH.read_text().splitlines(): - line = line.strip() - if not line or line.startswith("#"): - continue - if "=" in line: - key, _, value = line.partition("=") - config[key.strip()] = value.strip() - logger.info("Konfiguration geladen aus %s", CONFIG_PATH) - else: - logger.warning("Keine Konfiguration gefunden: %s", CONFIG_PATH) - - # Runtime-Overrides aus zentralem Shared-Volume (Diagnostic UI) runtime_path = Path("/shared/config/runtime.json") if runtime_path.exists(): try: runtime = json.loads(runtime_path.read_text()) - overrides = {k: str(v) for k, v in runtime.items() if v not in (None, "")} - if overrides: - config.update(overrides) - logger.info("Runtime-Overrides geladen: %s", sorted(overrides.keys())) + config = {k: str(v) for k, v in runtime.items() if v not in (None, "")} + if config: + logger.info("Runtime-Config geladen: %s", sorted(config.keys())) except Exception as e: logger.warning("runtime.json konnte nicht gelesen werden: %s", e) + else: + logger.info("Keine runtime.json — Diagnostic schreibt sie beim ersten Konfigurieren") return config @@ -554,7 +537,13 @@ class ARIABridge: # COMPACT_AFTER erreicht → Sessions reset + Container restart. # Counter ueberlebt Bridge-Restart nicht (frischer Zaehler beim Start ok). self._user_message_count: int = 0 - self._compact_after = int(os.getenv("COMPACT_AFTER_MESSAGES", "140")) + # Aus runtime.json gelesen (Diagnostic → Einstellungen → Compact-Schwelle) + # Default 140, 0 = deaktiviert + try: + rt = json.loads(Path("/shared/config/runtime.json").read_text()) if Path("/shared/config/runtime.json").exists() else {} + self._compact_after = int(rt.get("compactAfterMessages", 140)) + except Exception: + self._compact_after = 140 # Pending Files: wenn die App ein Bild + Text gleichzeitig schickt, kommen # zwei separate RVS-Events ('file' und 'chat') — wir buffern die Files # kurz und mergen sie mit dem nachfolgenden Chat-Text zu einer einzigen @@ -598,7 +587,7 @@ class ARIABridge: logger.info("RVS: %s (Token: %s...)", self.rvs_url, self.rvs_token[:8]) else: logger.warning("RVS nicht konfiguriert — App-Verbindung deaktiviert") - logger.warning(" Setze RVS_HOST, RVS_PORT, RVS_TOKEN in /config/aria.env") + logger.warning(" Setze RVS_HOST, RVS_PORT, RVS_TOKEN in der .env auf der VM") logger.info("Modus: %s %s", self.current_mode.config.emoji, self.current_mode.config.name) # ── aria-core Verbindung (OpenClaw Gateway Protokoll) ─── diff --git a/diagnostic/index.html b/diagnostic/index.html index e663927..32196f0 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -628,6 +628,10 @@ +