fix(fast-path): converse folgt dem Skill (Manifest/Output), nicht hart False
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 <noreply@anthropic.com>
This commit is contained in:
+18
-3
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user