From debd96b16fce39f7b06be08a32d71ff18f649ba9 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 11 Jul 2026 22:57:52 +0200 Subject: [PATCH] fix(fast-path): converse folgt dem Skill (Manifest/Output), nicht hart False MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fast-Path hatte converse hart auf False — ein Fast-Path-Skill konnte damit nie ein Dialog-Skill sein. Jetzt konsistent zu local/Claude: speak UND converse kommen aus dem Skill-Manifest-Default und werden vom Skill-JSON-Output pro Aufruf ueberschrieben. Default (kein Flag) bleibt false/false = stumm/stop. Co-Authored-By: Claude Opus 4.8 --- aria-brain/agent.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/aria-brain/agent.py b/aria-brain/agent.py index 399347d..18cabb1 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -1225,8 +1225,12 @@ class Agent: continue args = pat.get("args") or {} reply = pat.get("reply") or f"{skill_name}: ok" - # Vorlesen? Folgt dem Skill-Manifest (Default False=Steuerbefehl). + # Vorlesen/Weiterlauschen folgen dem Skill — GENAU wie bei local/ + # Claude: Manifest-Default, vom Skill-Output pro Aufruf ueber- + # schreibbar. Also NICHT generell converse=False: ein Fast-Path- + # Skill darf ein Dialog-Skill sein. self._fast_path_speak = bool(skill.get("speak", False)) + self._fast_path_converse = bool(skill.get("converse", False)) logger.info("[fast-path] match skill=%s pattern=%r msg=%r", skill_name, rx, user_message[:60]) try: @@ -1239,6 +1243,16 @@ class Agent: tail = (res.get("stderr") or res.get("stdout") or "").strip().splitlines() hint = (tail[-1] if tail else "")[:120] return f"{skill_name}: {reply} — Fehler: {hint or 'siehe Brain-Log'}" + # Per-Aufruf-Override aus dem Skill-JSON-Output (falls vorhanden). + try: + _j = json.loads((res.get("stdout") or "").strip()) + if isinstance(_j, dict): + if isinstance(_j.get("speak"), bool): + self._fast_path_speak = _j["speak"] + if isinstance(_j.get("converse"), bool): + self._fast_path_converse = _j["converse"] + except Exception: + pass return reply return None @@ -1507,8 +1521,9 @@ class Agent: # Vorlesen folgt dem Skill-Manifest (speak): Steuerbefehl=stumm, # Antwort-Skill=vorlesen. Default False (reiner Steuerbefehl). speak = bool(getattr(self, "_fast_path_speak", False)) - # Fast-Path = reiner Steuerbefehl → nie ins 30s-Gespraech (converse=False). - return fast_reply, "fast-path", speak, False + # converse folgt dem Skill (Manifest/Output) — nicht mehr generell False. + converse = bool(getattr(self, "_fast_path_converse", False)) + return fast_reply, "fast-path", speak, converse # 1. User-Turn an die Konversation self.conversation.add("user", user_message, source=source,