feat: geraetelokaler Voice-Projektwechsel ("geh in Projekt X")
Der Voice-Projektwechsel ist zurueck, aber nur fuer das ausloesende Geraet: - App merkt sich die IDs eigener Anfragen (Text-clientMsgId via dispatchWithAck + Voice-audioRequestId an allen 4 Aufnahme-Stellen) in myRequestIdsRef. - Bridge haengt an project_changed die ausloesende clientMsgId an — in beiden Voice-Pfaden: send_to_core (ARIAs project_enter/exit) und _process_endpoint_text (Voice-Router back_to_main / project_prefix). - App folgt einem project_changed-Wechsel nur, wenn die clientMsgId eine eigene ist → andere App-Instanzen + Diagnostic bleiben unberuehrt. Nur Bridge + App betroffen. py-compile + tsc clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+10
-2
@@ -2007,10 +2007,15 @@ class ARIABridge:
|
||||
elif etype == "project_changed":
|
||||
# ARIA hat ein Projekt erstellt / betreten / verlassen / beendet.
|
||||
# App + Diagnostic refreshen ihren Projekt-Banner anhand des Events.
|
||||
# clientMsgId der ausloesenden Anfrage mitgeben (Text-cmid oder
|
||||
# Voice-audioRequestId) → das ausloesende Geraet kann einen
|
||||
# geraete-lokalen Projektwechsel machen ("geh in Projekt X"),
|
||||
# ohne andere App-/Diagnostic-Instanzen mitzuziehen.
|
||||
await self._send_to_rvs({
|
||||
"type": "project_changed",
|
||||
"payload": {
|
||||
"action": event.get("action") or "",
|
||||
"clientMsgId": client_msg_id or "",
|
||||
**(event.get("project") or {}),
|
||||
},
|
||||
"timestamp": int(asyncio.get_event_loop().time() * 1000),
|
||||
@@ -3618,8 +3623,11 @@ class ARIABridge:
|
||||
)
|
||||
|
||||
if meta_action in ("back_to_main", "project_prefix"):
|
||||
# UI-Focus-Update broadcasten
|
||||
payload = {"action": "entered" if meta_action == "project_prefix" else "exited"}
|
||||
# UI-Focus-Update broadcasten — clientMsgId (= audio_request_id der
|
||||
# Aufnahme) mitgeben, damit NUR das Geraet folgt, das den Sprach-
|
||||
# befehl gab (geraete-lokaler Fokus, keine anderen Instanzen ziehen).
|
||||
payload = {"action": "entered" if meta_action == "project_prefix" else "exited",
|
||||
"clientMsgId": audio_request_id or ""}
|
||||
if meta_action == "project_prefix" and project_id:
|
||||
# Namen aus dem Cache holen — best effort
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user