diff --git a/main.py b/main.py
index 46c3d82..385d8b9 100644
--- a/main.py
+++ b/main.py
@@ -256,36 +256,41 @@ async def chat_endpoint(websocket: WebSocket):
try:
while True:
user_msg = await websocket.receive_text()
-
- # 1. Dynamischen Prompt laden
sys_prompt = get_system_prompt()
-
- # 2. KI fragen
ai_response = await get_ai_response(user_msg, sys_prompt)
- # 3. XML-Tags auslesen (Befehl)
+ # Befehle extrahieren
commands_to_run = re.findall(r'(.*?)', ai_response, re.IGNORECASE | re.DOTALL)
-
- # 4. XML-Tags für das UI ausblenden, damit der Chat sauber aussieht
clean_chat_msg = re.sub(r'.*?', '', ai_response, flags=re.IGNORECASE | re.DOTALL).strip()
if clean_chat_msg:
await websocket.send_text(clean_chat_msg)
- # 5. Gefundene Befehle an den Pi schicken!
- for target_ip, cmd in commands_to_run:
- target_ip = target_ip.strip()
- cmd = cmd.strip()
+ if commands_to_run:
+ # Liste für alle laufenden Tasks erstellen
+ tasks = []
+ for target_ip, cmd in commands_to_run:
+ conn = get_db()
+ node = conn.execute('SELECT * FROM nodes WHERE ip = ? OR name = ?', (target_ip.strip(), target_ip.strip())).fetchone()
+ conn.close()
+
+ if node:
+ # Wir erstellen den Task, starten ihn aber noch nicht separat
+ tasks.append(run_remote_task(node['ip'], node['user'], cmd.strip(), "KI-Kommando"))
- conn = get_db()
- node = conn.execute('SELECT * FROM nodes WHERE ip = ? OR name = ?', (target_ip, target_ip)).fetchone()
- conn.close()
-
- if node:
- # Leite Aufgabe an die System Logs weiter
- asyncio.create_task(run_remote_task(node['ip'], node['user'], cmd, "KI-Kommando"))
- else:
- await websocket.send_text(f"⚠️ Konnte Node {target_ip} in DB nicht finden.")
+ if tasks:
+ # Dem Nutzer im Chat kurz Bescheid geben
+ await websocket.send_text("ℹ️ *Warte auf Rückmeldungen der Nodes...*")
+
+ # Jetzt werden alle SSH-Befehle gleichzeitig gestartet und abgewartet
+ await asyncio.gather(*tasks)
+
+ # Sobald asyncio.gather fertig ist, geht es hier weiter mit dem Follow-up:
+ follow_up_prompt = "Die Befehle wurden ausgeführt. Bitte fasse die Ergebnisse kurz zusammen."
+ ai_summary = await get_ai_response(follow_up_prompt, sys_prompt)
+
+ await websocket.send_text("--- Ergebnis-Zusammenfassung ---")
+ await websocket.send_text(ai_summary)
except Exception as e:
print(f"Chat Fehler: {e}")