This commit is contained in:
team3
2026-07-12 16:13:50 +02:00
parent a284e03225
commit 31a42bbf1d
48 changed files with 3625 additions and 253 deletions

View File

@@ -10,7 +10,6 @@ STORAGE_DIR = PROJECT_ROOT / "storage"
TOPICS_DIR = PROJECT_ROOT / "topics" # Uni-Quelldateien: topics/<name>/*.txt|md|pdf
KORPUS_DIR = STORAGE_DIR / "korpus" # Snapshots: korpus/<topic>/q<id>.md
FRONTEND_DIST = PROJECT_ROOT / "frontend" / "dist"
DB_PATH = STORAGE_DIR / os.getenv("CREATOR_DB", "creator2.db") # Override für Smoke-Läufe
def _load_env(path: Path) -> None:
@@ -32,6 +31,23 @@ def _load_env(path: Path) -> None:
_load_env(PROJECT_ROOT / ".env")
# NACH _load_env lesen — sonst ist ein in .env gesetztes CREATOR_DB wirkungslos
# (der Loader-Kommentar verspricht „die Datei gewinnt").
DB_PATH = STORAGE_DIR / os.getenv("CREATOR_DB", "creator2.db") # Override für Smoke-Läufe
# ── Topic-Namen ───────────────────────────────────────────────────────────────
import re as _re
# Erstes Zeichen alphanumerisch (kein führendes „-" = rsync/CLI-Option), danach
# nur Wortzeichen/Umlaute/- /_. Kein „.", kein „/" → sicher als Pfadkomponente
# (rmtree, Snapshot-Ordner) UND als Shell-Argument (Transfer-Makefile).
TOPIC_NAME_RE = _re.compile(r"^[A-Za-z0-9äöüÄÖÜß][\wäöüÄÖÜß-]{0,63}$")
def topic_name_ok(name: str) -> bool:
return bool(name) and TOPIC_NAME_RE.match(name) is not None
# ── Nebenläufigkeit ───────────────────────────────────────────────────────────
MAX_CONCURRENT_AGENTS = int(os.getenv("MAX_CONCURRENT_AGENTS", "16")) # CLI-Prozesse (~310 MB RSS)
MAX_CONCURRENT_API_AGENTS = int(os.getenv("MAX_CONCURRENT_API_AGENTS", "28")) # direkte API, ~0 RAM
@@ -86,6 +102,10 @@ BAUSTEIN_MAX_ATOME = 8
ZIELE_CHUNK_ATOME = 30 # Atome pro Lernziel-Call
KAPITEL_BAUSTEINE = 5 # Richtwert Bausteine je Kapitel (Kapitel-Schnitt-Judge)
# ── Ebene 3.5: Diagramme ──────────────────────────────────────────────────────
DIAGRAMM_MIN_KANTEN = 3 # ab so vielen internen braucht-Kanten → Abhängigkeitsdiagramm
DIAGRAMM_TYPEN = ("dependency", "state", "flow", "tree")
# ── Ebene 4: Guide ────────────────────────────────────────────────────────────
SECTION_WOERTER_PRO_ATOM = (40, 220) # Längenband ausführlicher Teil je Atom
@@ -111,6 +131,9 @@ TIMEOUTS = {
"writer": (450, 60),
"pruefer": (600, 5),
"qa_judge": (600, 0),
"diagramm_plan": (200, 0),
"diagramm_spec": (300, 0),
"diagramm_verify": (200, 5),
}