feat: Mode-Wechsel auch aus Diagnostic global syncronisiert

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) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 22:57:41 +02:00
parent 763e0d79ab
commit d411df4074
4 changed files with 49 additions and 11 deletions
+2 -2
View File
@@ -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