feat: GPS-Trigger-Kopplung + generatives Cockpit (aria_view)

GPS: near()/entered_near()/left_near()-Watcher schalten das Tracking automatisch an bzw. beim Loeschen des letzten wieder aus; gpsTracking.start() sichert jetzt die Background-Permission. Cockpit-Fundament: neues Brain-Tool present_view emittiert aria_view (Orb + Karten), Bridge/RVS leiten weiter, ariaView.ts haelt die Spec App-seitig.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 01:21:43 +02:00
co-authored by Claude Opus 4.8
parent f5b22253b2
commit fd6ba73f59
5 changed files with 239 additions and 6 deletions
+16
View File
@@ -2080,6 +2080,22 @@ class ARIABridge:
proj = event.get("project") or {}
logger.info("[brain] Projekt %s: %s (id=%s)",
event.get("action") or "?", proj.get("name"), proj.get("id"))
elif etype == "aria_view":
# M1: ARIA hat via present_view eine raeumliche Ansicht komponiert.
# View-Spec (Orb + Karten) + Projekt-Kontext an App/Web/Diagnostic;
# deren Renderer materialisieren die Karten auf der Flaeche.
view = event.get("view") or {}
await self._send_to_rvs({
"type": "aria_view",
"payload": {
"view": view,
"projectId": event.get("project_id") or "",
"clientMsgId": client_msg_id or "",
},
"timestamp": int(asyncio.get_event_loop().time() * 1000),
})
logger.info("[brain] ARIA hat eine Ansicht geschickt: %d Karte(n), orb=%s",
len(view.get("cards") or []), view.get("orb"))
# _process_core_response uebernimmt alles weitere:
# File-Marker extrahieren + broadcasten, NO_REPLY-Check, Chat-