From 7fe1365ebcb3b15ffee607c441768d51b9c77f57 Mon Sep 17 00:00:00 2001 From: eric Date: Sat, 21 Feb 2026 19:35:34 +0000 Subject: [PATCH] Fix get_field(): support multiline values in key-value format (email body was truncated to first line) --- app.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app.py b/app.py index e19ae3c..402e344 100644 --- a/app.py +++ b/app.py @@ -1002,16 +1002,23 @@ def parse_agent_commands(agent_key, response_text, task_id=None): import re def get_field(block, field): - """Extrahiert ein Feld aus einem XML-Block: 'field: value' oder 'value'.""" - # Versuche erst XML-Tag-Format + """Extrahiert ein Feld aus einem XML-Block: 'value' oder 'field: value'. + Unterstützt mehrzeilige Werte (z.B. langer Email-Body). + """ + # Versuche erst XML-Tag-Format (bevorzugt, unterstützt Mehrzeiligkeit) m = re.search(rf'<{field}>(.*?)', block, re.DOTALL | re.IGNORECASE) if m: return m.group(1).strip() - # Dann Key-Value-Format - m = re.search(rf'^{field}\s*:\s*(.+)', block, re.MULTILINE | re.IGNORECASE) - if m: - return m.group(1).strip() - return '' + # Key-Value-Format: finde 'field: ...' und lies bis zum nächsten echten Key (^\w+: ) + m = re.search(rf'(?m)^{field}\s*:\s*(.*)', block, re.IGNORECASE) + if not m: + return '' + rest = block[m.start(1):] + # Stoppe nur bei echten einwortigen Keys (^\w+: Leerzeichen) — nicht bei "Report:" etc. + stop = re.search(r'(?m)^\w+\s*:\s', rest) + if stop: + return rest[:stop.start()].strip() + return rest.strip() # ── CREATE_TASK ────────────────────────────────────────────────────────── for block in re.findall(r'(.*?)', response_text, re.DOTALL | re.IGNORECASE):