diff --git a/source/main.py b/source/main.py index aa9964e..f905d5a 100644 --- a/source/main.py +++ b/source/main.py @@ -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 cmd" - 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: Befehl +""" + # 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 ---