main.py aktualisiert

This commit is contained in:
2026-03-04 22:26:13 +00:00
parent 3f2af1b8d3
commit 29a2bd6bb0

29
main.py
View File

@@ -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.")