""" FILE: app/core/parsing/parsing_scanner.py DESCRIPTION: Pre-Scan für den LocalBatchCache (Pass 1). AUDIT v1.1.0: Dynamisierung der Scan-Parameter (WP-14). """ import os import re from typing import Optional, Dict, Any from .parsing_models import NoteContext from .parsing_markdown import read_markdown def pre_scan_markdown(path: str, registry: Optional[Dict[str, Any]] = None) -> Optional[NoteContext]: """ Extrahiert Identität und Kurz-Kontext zur Validierung. WP-14: Scan-Tiefe und Summary-Länge sind nun über die Registry steuerbar. """ parsed = read_markdown(path) if not parsed: return None # WP-14: Konfiguration laden oder Standardwerte nutzen reg = registry or {} summary_cfg = reg.get("summary_settings", {}) scan_depth = summary_cfg.get("pre_scan_depth", 600) max_len = summary_cfg.get("max_summary_length", 500) fm = parsed.frontmatter # ID-Findung: Frontmatter ID oder Dateiname als Fallback note_id = str(fm.get("id") or os.path.splitext(os.path.basename(path))[0]) # Erstelle Kurz-Zusammenfassung mit dynamischen Limits clean_body = re.sub(r'[#*`>]', '', parsed.body[:scan_depth]).strip() summary = clean_body[:max_len] + "..." if len(clean_body) > max_len else clean_body return NoteContext( note_id=note_id, title=str(fm.get("title", note_id)), type=str(fm.get("type", "concept")), summary=summary, tags=fm.get("tags", []) if isinstance(fm.get("tags"), list) else [] )