source/main.py aktualisiert

This commit is contained in:
2026-03-08 00:27:17 +00:00
parent a0d5e4540b
commit 3ed40551ae

View File

@@ -9,6 +9,7 @@ import re
import httpx
import struct
import termios
from pathlib import Path
from telegram import Update
from telegram.ext import ApplicationBuilder, ContextTypes, MessageHandler, filters
from telegram.error import InvalidToken
@@ -21,19 +22,40 @@ from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from dotenv import load_dotenv, set_key
# Lade Umgebungsvariablen
load_dotenv()
# Basis-Verzeichnis (source/)
BASE_DIR = Path(__file__).resolve().parent
# Pfade zu den neuen Ordnern (eins hoch, dann in den Zielordner)
ROOT_DIR = BASE_DIR.parent
CONFIG_DIR = ROOT_DIR / "config"
DATA_DIR = ROOT_DIR / "data"
WORKSPACE_DIR = ROOT_DIR / "workspace"
# Konfigurationsdateien
ENV_FILE = CONFIG_DIR / ".env"
load_dotenv(ENV_FILE)
DB_PATH = DATA_DIR / "cluster.db"
PROMPT_FILE = CONFIG_DIR / "system_prompt.txt"
# Workspace Dateien
NOTES_FILE = WORKSPACE_DIR / "NOTIZEN.md"
TODO_FILE = WORKSPACE_DIR / "TODO.md"
# Sicherstellen, dass die Workspace-Dateien existieren
WORKSPACE_DIR.mkdir(exist_ok=True)
for f in [NOTES_FILE, TODO_FILE]:
if not f.exists():
f.write_text(f"# {f.name}\nHier fängt dein Gedächtnis an, J.A.R.V.I.S.\n", encoding="utf-8")
# FastAPI Pfade (relativ zu main.py in source/)
templates = Jinja2Templates(directory=BASE_DIR / "templates")
app.mount("/static", StaticFiles(directory=BASE_DIR / "static"), name="static")
app = FastAPI()
static_path = os.path.join(os.path.dirname(__file__), "static")
app.mount("/static", StaticFiles(directory=static_path), name="static")
templates = Jinja2Templates(directory="templates")
#static_path = os.path.join(os.path.dirname(__file__), "static")
SSH_KEY = os.path.expanduser("~/.ssh/id_rsa")
DB_PATH = "cluster.db"
chat_history = []
PROMPT_FILE = "system_prompt.txt"
ENV_FILE = os.path.join(os.path.dirname(__file__), ".env")
# KI KONFIGURATION
AI_PROVIDER = os.getenv("AI_PROVIDER", "google").lower()
@@ -89,14 +111,25 @@ def get_system_prompt():
docker_str = "Ja" if n['docker_installed'] else "Nein"
node_info += f"- Name: {n['name']}, IP: {n['ip']}, User: {n['user']}, OS: {n['os']}, Arch: {n['arch']}, Docker: {docker_str}\n"
if os.path.exists(PROMPT_FILE):
with open(PROMPT_FILE, "r", encoding="utf-8") as f:
template = f.read()
else:
template = "Du bist ein Cluster-Orchestrator. Nodes:\n{node_info}\nBefehle via <EXECUTE target=\"IP\">cmd</EXECUTE>"
print(f"⚠️ Warnung: {PROMPT_FILE} fehlt.")
workspace_context = f"""
### DEIN WORKSPACE (LOKALER SERVER)
Du hast Zugriff auf ein eigenes Arbeitsverzeichnis für Notizen und Aufgaben:
- Pfad: {WORKSPACE_DIR}
- Notizen: {NOTES_FILE}
- Aufgaben: {TODO_FILE}
return template.replace("{node_info}", node_info)
Du kannst diese Dateien jederzeit lesen oder beschreiben, um dir Dinge für Tony zu merken.
Nutze dazu: <EXECUTE target="localhost">Befehl</EXECUTE>
"""
# Hier liest du die system_prompt.txt aus config/
if PROMPT_FILE.exists():
template = PROMPT_FILE.read_text(encoding="utf-8")
else:
template = "Du bist J.A.R.V.I.S... {workspace_context}\nNodes: {node_info}"
prompt = template.replace("{node_info}", node_info)
prompt = prompt.replace("{workspace_context}", workspace_context)
return prompt
# --- KI FUNKTIONEN ---