""" Mission Control - eine schlanke Steuerzentrale fuer einen lokalen llama-swap Stack. Dieser Einstieg haelt nur noch das Geruest zusammen: er baut die FastAPI-App, haengt die Router ein und liefert das statische UI aus. Die eigentliche Logik liegt nach Concern getrennt in: - config.py Env-Vars / Konstanten - auth.py optionale Token-Auth - jobengine.py Hintergrund-Jobs mit Live-Log - llamaswap.py Reden mit llama-swap + config.yaml lesen/schreiben - routers/* ein Router je Bereich (models, jobs, maintenance, ...) Bewusst KISS: kein Build-Schritt, kein Framework ueber FastAPI hinaus, keine DB. Neue Bereiche kommen als routers/.py + static/js/panels/.js dazu. """ from pathlib import Path from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponse, JSONResponse from fastapi.staticfiles import StaticFiles from routers import jobs, maintenance, models, system app = FastAPI(title="Mission Control") app.include_router(models.router) app.include_router(jobs.router) app.include_router(maintenance.router) app.include_router(system.router) _STATIC = Path(__file__).parent / "static" @app.get("/") def index(): return FileResponse(_STATIC / "index.html") app.mount("/static", StaticFiles(directory=_STATIC), name="static") @app.exception_handler(HTTPException) def _http_exc(_req, exc: HTTPException): return JSONResponse(status_code=exc.status_code, content={"error": exc.detail})