diff --git a/main.py b/main.py index 14bbc4e..46c3d82 100644 --- a/main.py +++ b/main.py @@ -49,7 +49,7 @@ async def get_ai_response(user_input, system_prompt): chat_history.append({"role": "user", "content": user_input}) # 2. Gedächtnis auf die letzten 10 Nachrichten begrenzen - chat_history = chat_history[-10:] + chat_history = chat_history[-30:] ai_msg = "" @@ -291,18 +291,21 @@ async def chat_endpoint(websocket: WebSocket): print(f"Chat Fehler: {e}") async def run_remote_task(ip, user, cmd, task_name): + global chat_history # Zugriff auf das Gedächtnis der KI + await manager.broadcast(f"🚀 KI-Task gestartet: {cmd} auf {ip}") ssh_cmd = f"ssh -o StrictHostKeyChecking=no {user}@{ip} '{cmd}'" - # Asynchroner Subprozess, damit das restliche Dashboard nicht einfriert process = await asyncio.create_subprocess_shell( ssh_cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT ) - # Lese die Logs Zeile für Zeile, während sie entstehen + # Hier speichern wir die komplette Terminal-Ausgabe + full_output = "" + while True: line = await process.stdout.readline() if not line: @@ -310,13 +313,25 @@ async def run_remote_task(ip, user, cmd, task_name): decoded_line = line.decode('utf-8', errors='ignore').strip() if decoded_line: await manager.broadcast(f"🛠️ {decoded_line}") + full_output += decoded_line + "\n" await process.wait() - # Falls es ein Docker-Befehl war, Status updaten - if "docker" in cmd.lower(): - update_node_status(ip, "Docker Aktiv") - await manager.broadcast(f"✨ {ip} ist nun 'Docker Aktiv'") + # --- NEU: Feedback an die KI --- + # Wir bereiten den Bericht vor + if not full_output.strip(): + full_output = "Befehl wurde ohne Ausgabe ausgeführt (Exit Code 0)." + + system_report = f"[SYSTEM-RÜCKMELDUNG] Der Befehl '{cmd}' auf Node {ip} wurde beendet. Ausgabe des Terminals:\n{full_output}" + + # Wir schmuggeln den Bericht als "User"-Nachricht in den Verlauf, + # damit die KI beim nächsten Mal weiß, was passiert ist. + chat_history.append({"role": "user", "content": system_report}) + # ------------------------------- + + if "docker" in cmd.lower() and "install" in cmd.lower(): + # Kleiner Bonus: Nur updaten, wenn wirklich installiert wird + await manager.broadcast(f"✨ Bitte aktualisiere den Status für {ip} manuell über das Refresh-Icon.") await manager.broadcast(f"✅ Befehl auf {ip} abgeschlossen.")