From d411df407434da1139bafa77da17916a36820219 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 19 Apr 2026 22:57:41 +0200 Subject: [PATCH] feat: Mode-Wechsel auch aus Diagnostic global syncronisiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vorher: Diagnostic's setMode sendete einen faked chat mit der Aktivierungsphrase ('ARIA, Hangar-Modus') — das wurde erst in _process_core_response auf dem ARIA-Antwort-Text detected, war unzuverlaessig und nutzte nicht den sauberen mode-Message-Path. Nachher: sauberer set_mode-Pfad mit Live-Sync. diagnostic/server.js: - Neue action 'set_mode' → sendet type=mode an RVS direkt - RVS-Message-Handler: type=mode Broadcast von Bridge wird an Browser-Clients durchgereicht diagnostic/index.html: - setMode() nutzt jetzt action=set_mode (keine Phrase mehr) - updateModeUI separat — wird bei Broadcast auch aufgerufen - Mode-Broadcast vom Server syncs UI live (andere Diagnostic/App hat gewechselt → unser UI aktualisiert sofort) - Button data-mode + MODE_LABELS auf kanonische IDs umgestellt (nicht_stoeren, fluester statt dnd, whisper) bridge/modes.py: - canonical_id() liefert die IDs die App + Diagnostic kennen (nicht_stoeren, fluester, ...) — damit Broadcast-ID zur UI-ID passt bridge/aria_bridge.py: - _broadcast_current_mode nutzt canonical_id statt enum.name.lower() Flow jetzt: Diagnostic wechselt Mode → set_mode → Bridge → persist + broadcast → alle Apps + alle Diagnostic-Browser-Tabs aktualisieren sofort Co-Authored-By: Claude Opus 4.7 (1M context) --- bridge/aria_bridge.py | 4 ++-- bridge/modes.py | 15 +++++++++++++++ diagnostic/index.html | 33 ++++++++++++++++++++++++--------- diagnostic/server.js | 8 ++++++++ 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/bridge/aria_bridge.py b/bridge/aria_bridge.py index a49e673..a46146b 100644 --- a/bridge/aria_bridge.py +++ b/bridge/aria_bridge.py @@ -37,7 +37,7 @@ import websockets from faster_whisper import WhisperModel from openwakeword.model import Model as WakeWordModel -from modes import Mode, detect_mode_switch, mode_from_id, should_speak +from modes import Mode, canonical_id, detect_mode_switch, mode_from_id, should_speak # ── Logging ────────────────────────────────────────────────── @@ -921,7 +921,7 @@ class ARIABridge: await self._send_to_rvs({ "type": "mode", "payload": { - "mode": self.current_mode.name.lower(), + "mode": canonical_id(self.current_mode), "name": self.current_mode.config.name, "emoji": self.current_mode.config.emoji, "sender": "bridge", # Filter in mode-Handler gegen Loops diff --git a/bridge/modes.py b/bridge/modes.py index 5b53860..4ea040d 100644 --- a/bridge/modes.py +++ b/bridge/modes.py @@ -110,6 +110,21 @@ def mode_from_id(mode_id: str) -> Optional[Mode]: return _ID_MAP.get(mode_id.strip().lower()) +# Kanonische IDs fuer Broadcasts (matchen die App-UI-IDs in ModeSelector) +_CANONICAL_ID: dict[Mode, str] = { + Mode.NORMAL: "normal", + Mode.DND: "nicht_stoeren", + Mode.WHISPER: "fluester", + Mode.HANGAR: "hangar", + Mode.GAMING: "gaming", +} + + +def canonical_id(mode: Mode) -> str: + """Kanonische ID die App + Diagnostic + Bridge gleichermassen kennen.""" + return _CANONICAL_ID.get(mode, mode.name.lower()) + + def detect_mode_switch(text: str) -> Optional[Mode]: """Erkennt ob ein Text eine Modus-Umschaltung enthaelt. diff --git a/diagnostic/index.html b/diagnostic/index.html index 14e12df..c567151 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -383,10 +383,10 @@ - -