From 6b11d643b964be9d2dfde95176449f0ac5ff307f Mon Sep 17 00:00:00 2001 From: claude-dev Date: Mon, 9 Mar 2026 20:55:08 +0100 Subject: [PATCH] Fix: Analyse-Parser erkennt jetzt Markdown-Code-Fences Claude-Antworten mit ```json ... ``` Wrapping werden korrekt geparst. Verhindert den Verlust von Analyse-Ergebnissen bei inkrementellen Refreshes. Co-Authored-By: Claude Opus 4.6 --- src/agents/analyzer.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/agents/analyzer.py b/src/agents/analyzer.py index 04f86d7..9a1931b 100644 --- a/src/agents/analyzer.py +++ b/src/agents/analyzer.py @@ -298,14 +298,25 @@ class AnalyzerAgent: def _parse_response(self, response: str) -> dict | None: """Parst die Claude-Antwort als JSON-Objekt.""" + # Markdown-Code-Fences entfernen + cleaned = response.strip() + if cleaned.startswith("```"): + # Erste Zeile (```json oder ```) entfernen + first_nl = cleaned.find(chr(10)) + if first_nl != -1: + cleaned = cleaned[first_nl + 1:] + if cleaned.endswith("```"): + cleaned = cleaned[:-3].rstrip() + try: - data = json.loads(response) + data = json.loads(cleaned) if isinstance(data, dict): return data except json.JSONDecodeError: pass - match = re.search(r'\{.*\}', response, re.DOTALL) + # Fallback: aeusserstes JSON-Objekt per Regex finden + match = re.search(r"""\{.*\}""", response, re.DOTALL) if match: try: data = json.loads(match.group())