# Neural Knowledge Brain Eigenständiger Go-Dienst für Agent, lokale Knowledgebase, GLPI-Knowledgebase und autonome AI-THINK-Anreicherung. Der Dienst hält einen vollständigen Wissensgraphen im Arbeitsspeicher und rendert eine hierarchisch verdichtete Fullscreen-Ansicht als lebende Hirnaktivität. ## Kernfunktionen - Fullscreen-Canvas mit 3D-Hirnform, semantischen Cortex-Regionen und hierarchischem Level-of-Detail. - Drei Visualisierungen: Neural-Brain, gleichmäßige 3D-Honeycomb-Wabe und semantische Constellation-Ansicht mit Themensternen. - Persistierbarer **ECO**-Modus für schwächere Systeme sowie weiche Node-, Edge- und Ansichtsübergänge ohne sichtbaren Komplett-Reload. - Laufzeitsteuerung für Learning und Thinking sowie drei einfache, exakte `source`-Filter für Lernen, Anzeige und AI-THINK. - Echtzeitaktivierung über Server-Sent Events: Nodes glühen, aggregierte Edges leuchten und Partikel folgen tatsächlichen Wissenspfaden. - Ingest lokaler produktiver Knowledge-JSONs sowie separater AI-THINK-Staging-Dateien. - Optionaler read-only Ingest sichtbarer Beiträge aus der GLPI-Knowledgebase. - Read-only Tailing der Agent-`runs.jsonl` und optionale Suchtelemetrie aus Agent und KB. - Ollama-Pool mit mehreren unabhängigen Instanzen, Routing, Healthchecks, Cooldown und Failover. - Embeddings über `embeddinggemma`, Beziehungsanalyse über `qwen3:8b`. - Mehrstufiger AI-THINK-Worker: Relation Thinking, quellengebundene Wissenskonsolidierung, Recherche offener Punkte und reine Knowledge-Synthesis für vollständige KB-Artikel. - Persistente **Autonomous-Research-Queue**: selbstständige Wissenslückensuche, externe Trigger, Leerlauf-/Budgetsteuerung und niedrig priorisierte Übergabe an den vorhandenen Ollama-Pool. - Inkrementelle SQLite/WAL-Persistenz über `modernc.org/sqlite`: binäre Float32-Embeddings und standardmäßig alle fünf Minuten gebündelte Row-Updates. - Separates **BRAIN ANALYSIS CENTER** mit persistenter Laufhistorie, exakten Node-/Edge-/Vektoränderungen, Similarity-/Confidence-Auswertung, Research-Ergebnissen und technischem Roh-Eventstream. ## Vertrauens- und Schreibgrenzen Das Brain liest produktive Quellen und GLPI-KB ausschließlich. Es schreibt niemals in produktive Knowledge-Dateien oder nach GLPI zurück. Schreibbar sind nur: - das eigene `BRAIN_DATA_DIR` für Graphzustand und GLPI-KB-Cache; - der erste Pfad aus `BRAIN_STAGING_DIRS` für AI-THINK-Entwürfe. AI-THINK bleibt `auto_reply: false`, trägt die Kategorien `AI-THINK` und `AI-Staging` und wird erst nach einer expliziten Freigabe im bestehenden Editor produktiv. Artikelentwürfe erhalten zusätzlich `AI-Synthesis`; `text` und `answer` enthalten ausschließlich den fachlichen Artikel. Planung, Bewertung, Confidence, Quellen-IDs und Rechercheprotokolle werden separat unter `BRAIN_DATA_DIR/article-metadata/` gespeichert. ## Grounded Knowledge Synthesis Verwandtes Wissen wird nicht direkt als Bewertungsbericht gespeichert. Die aktive Pipeline arbeitet nach **Research → Generate → Review**: SearXNG sammelt offene deutsch- und englischsprachige Volltexte ohne `site:`-Filter, ein konfigurierbares Autor-Modell (z. B. Gemma) erzeugt daraus zusammen mit den internen KB-Quellen einen vollständigen Artikel und ein getrenntes Reviewer-Modell prüft erst danach den sichtbaren Text Claim für Claim. Vorab erkannte `critical_gaps` oder `ready_for_article=false` blockieren den Draft nicht mehr. Findet der Reviewer unbelegte Aussagen, erzeugt er präzise Nachrecherche-Queries; nur diese Punkte werden recherchiert, der Autor überarbeitet den Artikel und der Reviewer prüft erneut. Im Audit-Sidecar wird zwischen dem gesamten Research-Material und den vom Reviewer tatsächlich als Claim-Beleg verwendeten Quellen unterschieden; nur letztere erhalten am Artikel eine `grounded_by`-Verknüpfung. Konzept-, Referenz- und Entscheidungsartikel behalten ihre artikeltypgerechte Struktur statt künstlich erzeugter Schrittfolgen. Details: [`KNOWLEDGE-SYNTHESIS.md`](KNOWLEDGE-SYNTHESIS.md) und [`GENERATE-THEN-REVIEW.md`](GENERATE-THEN-REVIEW.md). ## Schnellstart ```bash cp .env.example .env # Pfade, Ollama-Pool und optional GLPI-Zugangsdaten anpassen. set -a; . ./.env; set +a go run ./cmd/brain ``` Oberfläche: `http://localhost:8090` Technisches Analyse-Dashboard: `http://localhost:8090/analysis.html` Das Analyse-Dashboard ist von der animierten Gehirnansicht getrennt. Es bewertet Läufe als positives Ergebnis, Aktualisierung, Bereinigung, Prüfung ohne Übernahme oder Fehler und zeigt die konkret betroffenen Node-, Edge- und Vektor-IDs. Die Historie wird in `graph.db` aufgezeichnet und beginnt ab Installation dieser Version. Details: [`ANALYSIS-DASHBOARD.md`](ANALYSIS-DASHBOARD.md). Docker: ```bash docker compose up -d --build ``` ## Mehrere Ollama-Instanzen `OLLAMA_URLS` hat Vorrang vor dem weiterhin unterstützten `OLLAMA_URL`. ```env OLLAMA_URLS=http://10.20.30.21:11434,http://10.20.30.22:11434,http://10.20.30.23:11434 OLLAMA_NODE_NAMES=gpu-01,gpu-02,gpu-03 OLLAMA_NODE_WEIGHTS=1,1,4 OLLAMA_ROUTING_MODE=least_inflight OLLAMA_NODE_MAX_INFLIGHT=1 OLLAMA_FAILOVER_ENABLED=true OLLAMA_FAILOVER_ATTEMPTS=0 OLLAMA_REQUIRE_SAME_MODEL_DIGEST=true OLLAMA_REQUIRE_EMBEDDING_MODEL=true ``` Unterstützte Routing-Modi: - `least_inflight` – bevorzugt den aktuell am wenigsten belasteten Node; - `round_robin` – zyklische Verteilung; - `weighted` – Verteilung entsprechend `OLLAMA_NODE_WEIGHTS`; - `fastest_recent` – bevorzugt die zuletzt schnellsten Nodes. Jeder Node muss das Chatmodell besitzen. Mit `OLLAMA_REQUIRE_EMBEDDING_MODEL=true` muss außerdem jeder Node das Embeddingmodell besitzen. Bei aktivierter Digest-Prüfung wird ein Pool mit unterschiedlichen Modellständen fail-closed behandelt. Mehr Details: [`OLLAMA-POOL.md`](OLLAMA-POOL.md). ## GLPI-Knowledgebase einbeziehen Die Integration verwendet denselben read-only OAuth-/OpenAPI-Ansatz wie der Agent. GLPI entscheidet anhand des Service-Accounts, welche Beiträge sichtbar sind. ```env GLPI_KB_ENABLED=true GLPI_URL=https://glpi.example.org GLPI_API_VERSION=v2.3 GLPI_CLIENT_ID=... GLPI_CLIENT_SECRET=... GLPI_USERNAME=... GLPI_PASSWORD=... GLPI_KB_PATH=auto GLPI_KB_LIMIT=500 GLPI_KB_SYNC_INTERVAL=10m GLPI_KB_SOURCE=GLPI Knowledge Base ``` Bei `GLPI_KB_PATH=auto` sucht das Brain im GLPI-OpenAPI-Dokument die lesbare `KnowbaseItem`-Collection. Die Beiträge werden als produktive Wissens-Nodes mit `glpi://KnowbaseItem/`-URI aufgenommen. Kategorien und Quelle erzeugen verifizierte Edges. Es gibt keine GLPI-Schreiboperation. Manueller Sync: ```bash curl -X POST http://localhost:8090/api/glpi-kb/sync ``` Mehr Details: [`GLPI-KB.md`](GLPI-KB.md). ## SQLite/WAL-Persistenz und Vorberechnung ```env BRAIN_PERSIST_INTERVAL=5m ``` Der Live-Graph liegt im Arbeitsspeicher. Dauerhaft gespeichert werden nur geänderte Zeilen in `BRAIN_DATA_DIR/graph.db`: 1. AI-THINK-, Metadaten- und Cache-Dateien werden atomar geschrieben; 2. danach folgen geänderte Nodes, Edges und Vektoren in einer SQLite-Transaktion; 3. Embeddings liegen binär als `float32`-BLOBs vor; 4. unveränderte KB-Scans verursachen keine erneuten Graphwrites. Manueller Flush: ```bash curl -X POST http://localhost:8090/api/flush ``` Ein auf einem leistungsfähigen System vorberechneter Graph kann kompakt exportiert und auf ein System mit identischen Dokument-IDs und demselben Embedding-Modell kopiert werden: ```bash curl -fsS http://localhost:8090/api/state/export -o graph.db ``` Mehr Details: [`PERSISTENCE.md`](PERSISTENCE.md) und [`SQLITE-STORAGE.md`](SQLITE-STORAGE.md). ## Laufzeitsteuerung, Visualisierungen und Performance Die untere Steuerleiste enthält direkte Schalter für **LEARNING**, **THINKING**, **NEURAL**, **HONEYCOMB**, **CONSTELLATION** und **ECO**. Sind Learning und Thinking deaktiviert, bleibt das System im Living-Modus; eingehende Agent- oder KB-Anfragen können weiterhin die tatsächlich verwendeten Notes aktivieren. Über **FILTER** werden ausschließlich die exakten Werte des JSON-Feldes `source` ausgewählt. Es gibt keine Kategoriefilter, keine technische `origin`-Aliasauflösung und keine Schnittmenge aus Environment und WebUI mehr. - **Lernen**: Nur Nodes mit exakt passendem `source` erhalten neue Embeddings und dürfen bei semantischen Abfragen verwendet werden. - **Anzeige**: Nur Nodes mit exakt passendem `source` werden gerendert; direkt verbundene Kategorie-, Quellen- und Konzept-Nodes bleiben als visuelle Taxonomie sichtbar. - **Thinking**: Nur Nodes und explizit mit einer Quelle versehene Webbelege mit exakt passendem `source` dürfen neue Relationen und Artikel speisen. Mehrere ausgewählte Quellen verwenden ODER-Semantik. Eine leere Liste bedeutet „alle Quellen“. Der Vergleich ist nach dem Entfernen äußerer Leerzeichen **case-sensitiv und exakt**: ```text source: "internal-category" passt zu internal-category source: "internal-category" passt nicht zu Internal-Category source: "GLPI Knowledge Base" passt nicht zu glpi-kb ``` Der GLPI-Quellenname stammt ausschließlich aus: ```env GLPI_KB_SOURCE=GLPI Knowledge Base ``` Dieser Wert wird in der WebUI immer als Auswahl angeboten, auch wenn GLPI noch nicht synchronisiert wurde oder aktuell 0 Beiträge vorhanden sind. Die folgenden Environment-Variablen sind nur Startwerte, wenn noch keine neue versionierte `runtime-settings.json` existiert. Danach ist die WebUI-Auswahl die einzige aktive Konfiguration; es gibt keine zusätzliche Environment-Obergrenze: ```env BRAIN_LEARNING_ENABLED=true BRAIN_THINKING_ENABLED=true # Exakte Werte des KB-JSON-Feldes source; leer = alle BRAIN_LEARNING_SOURCES= BRAIN_DISPLAY_SOURCES= BRAIN_THINKING_SOURCES= BRAIN_DEFAULT_VIEW=neural # neural | honeycomb | constellation BRAIN_MAX_DISPLAY_NODES=0 # 0 = unbegrenzt; alternativ z. B. 5000 BRAIN_LOW_POWER_MODE=false ``` Alte `learning_categories`, `display_categories`, `thinking_categories` und frühere unversionierte Source-Filter werden beim ersten Start dieser Version bewusst ignoriert. Schalter, Ansicht und Performancewerte bleiben erhalten. Beim nächsten Speichern schreibt die WebUI `source_filter_version: 1`. `graph.db` muss dafür nicht gelöscht werden. Die Ansichten erfüllen unterschiedliche Aufgaben: - **Neural** zeigt das lebende semantische Netz mit LOD, Cortex, Synapsen und Partikeln. - **Honeycomb** rendert `knowledge`, `ai-think` und `external` gleichmäßig in einer 3D-Gehirnwabe. Reguläre Edges und Cortex-Flächen bleiben dort unsichtbar. - **Constellation** ordnet Wissenselemente als Themensterne um semantische Zentren an. Dezente Bahnen und aggregierte Themenverbindungen machen Fachgebiete und Übergänge leichter lesbar als ein dichtes Gesamtnetz. Der **ECO**-Schalter begrenzt die Ausgabe auf ungefähr 30 FPS, reduziert die Device-Pixel-Ratio, teure Gradienten, Hintergrundsterne, gleichzeitig sichtbare inaktive Edges, Partikel und Wolken. Aktivierte Nodes, SearXNG-Animationen, Themenzentren und Übergänge bleiben sichtbar. Das ist zusätzlich zum GPU-Node-Limit; der ECO-Modus entfernt keine Wissenselemente. Graphupdates verändern vorhandene Node-Objekte und Positionen in-place. Neue Elemente blenden ein, entfernte Elemente blenden aus, Ansichtswechsel morphen zwischen den Koordinatenräumen. Unveränderte Snapshots werden übersprungen und reine Edgeupdates lösen keinen vollständigen Layout-Neuaufbau aus. Mehr Details: [`SOURCE-ONLY-FILTERS.md`](SOURCE-ONLY-FILTERS.md), [`VISUALIZATION-PERFORMANCE.md`](VISUALIZATION-PERFORMANCE.md) und [`RUNTIME-CONTROLS-HONEYCOMB.md`](RUNTIME-CONTROLS-HONEYCOMB.md). ## Autonomous Research: selbstständige Wissensanreicherung Die Webrecherche ist nicht mehr an einen einzelnen AI-THINK-Artikelversuch gebunden. Ein eigener Opportunity-Scanner bewertet den Graphen regelmäßig auf Widersprüche, fehlende externe Evidenz, Alter, Zentralität und schwache Verknüpfung. Qwen zerlegt geeignete Kandidaten in konkrete Forschungsfragen sowie deutsche und englische SearXNG-Queries. Aufgaben landen zuerst persistent in `graph.db`. Ein Low-Priority-Worker least genau eine Aufgabe, prüft Leerlauf und Tagesbudget und verwendet danach die bestehende iterative SearXNG-/Volltext-/Evidenzpipeline. SearXNG-Suchen, Volltextabrufe und Ollama-Aufrufe teilen jetzt zusätzlich eine gemeinsame begrenzte Work-Queue. Semantisch äquivalente Research-Intents werden über Embeddings erkannt: läuft bereits eine gleichbedeutende Recherche, wartet der zweite Auftrag auf ihr Ergebnis; kürzlich abgeschlossene Evidenz kann ohne erneuten Webabruf wiederverwendet werden. Deutsche und englische Query-Varianten innerhalb derselben Forschungsfrage bleiben ausdrücklich erhalten. ```env BRAIN_AUTONOMOUS_RESEARCH_ENABLED=false BRAIN_AUTONOMOUS_RESEARCH_IDLE_ONLY=true BRAIN_AUTONOMOUS_RESEARCH_INTERVAL=30m BRAIN_AUTONOMOUS_RESEARCH_TASKS_PER_CYCLE=1 BRAIN_AUTONOMOUS_RESEARCH_MAX_TASKS_PER_DAY=12 BRAIN_AUTONOMOUS_RESEARCH_MAX_QUERIES_PER_TASK=6 BRAIN_AUTONOMOUS_RESEARCH_MAX_PAGES_PER_TASK=8 BRAIN_AUTONOMOUS_RESEARCH_MAX_ROUNDS=3 BRAIN_AUTONOMOUS_RESEARCH_MIN_PRIORITY=0.65 BRAIN_AUTONOMOUS_RESEARCH_COOLDOWN=168h BRAIN_AUTONOMOUS_RESEARCH_LEASE=45m BRAIN_AUTONOMOUS_RESEARCH_MAX_ATTEMPTS=3 BRAIN_AUTONOMOUS_RESEARCH_QUERY_TRIGGERS=true BRAIN_AUTONOMOUS_RESEARCH_OPPORTUNITY_LIMIT=8 ``` Der Agent oder andere Systeme können über `POST /api/research/tasks` explizit Aufgaben einreihen. Die Eventtypen `knowledge.answer_insufficient`, `knowledge.search.empty` und `agent.answer.uncertain` erzeugen über `/api/events` ebenfalls eine priorisierte Aufgabe. Die WebUI zeigt Queue, Status, Evidenzzahl und Versuche und bietet manuelles Einreihen, Graphanalyse, Queue-Wakeup sowie Abbruch wartender Aufgaben. Die aktualisierten Integrationspatches unter `integrations/agent/` und `integrations/knowledgebase/` senden bei einer Suche ohne Treffer automatisch `knowledge.search.empty`; die Telemetrie bleibt asynchron und fail-open. Akzeptierte Webbelege werden automatisch gelernt und verknüpft. Neue oder überarbeitete Artikel bleiben weiterhin ausschließlich im AI-Staging und benötigen eine manuelle Freigabe. Details: [`AUTONOMOUS-RESEARCH.md`](AUTONOMOUS-RESEARCH.md). ## Autonome Anreicherung Der Worker arbeitet bewusst sequenziell, trennt aber jetzt zwei Aufgaben: 1. Kandidatenpaar aus bestehenden Vektoren auswählen; 2. **Relation Thinking** bewertet ausschließlich die Beziehung und erzeugt eine Edge oder verwirft sie; 3. bei einer bestätigten Relation werden drei bis acht verwandte interne Quellen gesammelt; 4. ein Planungsaufruf entscheidet `create`, `update`, `merge` oder `skip` und formuliert Research-Themen; 5. SearXNG sammelt passende Volltexte als Materialpool, ohne vor dem Draft jede Quelle durch ein weiteres LLM freigeben zu lassen; 6. `BRAIN_ARTICLE_SYNTHESIS_MODEL` schreibt den vollständigen Artikel; 7. `BRAIN_ARTICLE_REVIEW_MODEL` prüft den fertigen Text Claim für Claim und kann eine gezielte Research-/Rewrite-Runde auslösen; 8. nur der akzeptierte Artikel landet als `AI-THINK` / `AI-Staging` / `AI-Synthesis` im Staging; 9. der In-Memory-Graph sieht den Entwurf sofort, die Datei wird beim nächsten gebündelten Persistenz-Flush atomar geschrieben. Qualitätsregeln verhindern reine AI-THINK-Ketten: standardmäßig mindestens drei produktive Quellen, mindestens 70 Prozent Produktionswissen und maximal Generierungstiefe zwei. ```env BRAIN_AUTO_ENRICH=true BRAIN_ENRICH_INTERVAL=90s BRAIN_ENRICH_BATCH_SIZE=3 BRAIN_ENRICH_STEP_DELAY=3s BRAIN_ARTICLE_SYNTHESIS_ENABLED=true BRAIN_ARTICLE_LANGUAGE=de-DE BRAIN_ARTICLE_SYNTHESIS_MODEL=gemma3:12b BRAIN_ARTICLE_REVIEW_MODEL=qwen3:8b BRAIN_ARTICLE_REVIEW_REPAIR_ROUNDS=1 BRAIN_ARTICLE_MIN_SOURCES=3 BRAIN_ARTICLE_MAX_SOURCES=8 BRAIN_ARTICLE_MIN_PRODUCTION_RATIO=0.70 BRAIN_ARTICLE_MAX_GENERATION_DEPTH=2 BRAIN_ARTICLE_MIN_CONFIDENCE=0.74 # offene, recall-orientierte Recherche BRAIN_ARTICLE_RESEARCH_RESULTS=12 BRAIN_ARTICLE_RESEARCH_FETCH_RESULTS=6 BRAIN_ARTICLE_RESEARCH_EXPLORATION_RESULTS=3 BRAIN_ARTICLE_RESEARCH_PREFETCH_MIN_RELEVANCE=0.25 BRAIN_ARTICLE_RESEARCH_MIN_RELEVANCE=0.55 BRAIN_ARTICLE_RESEARCH_MIN_QUALITY=0.35 # gemeinsame Research/Ollama-Queue und semantische Deduplizierung BRAIN_RESEARCH_OLLAMA_MAX_INFLIGHT=2 BRAIN_RESEARCH_OLLAMA_QUEUE_SIZE=64 BRAIN_RESEARCH_DEDUPE_THRESHOLD=0.92 BRAIN_RESEARCH_DEDUPE_TTL=45m ``` Details: [`KNOWLEDGE-SYNTHESIS.md`](KNOWLEDGE-SYNTHESIS.md). Der manuelle AI-THINK-Button bleibt vorhanden. Alternativ: ```bash curl -X POST 'http://localhost:8090/api/enrich?async=1' ``` ## HTTP-Endpunkte | Methode | Pfad | Zweck | |---|---|---| | `GET` | `/api/status` | Gesamtstatus inklusive Ollama-Pool, GLPI-KB und Persistenzqueue | | `GET` | `/api/graph` | vollständiger aktueller In-Memory-Graph | | `GET` | `/api/analysis` | strukturelle Graphanalyse | | `GET` | `/api/analysis/dashboard` | detaillierte aktuelle Analyse, Laufhistorie, Zeitreihe und konkretes Änderungsjournal | | `GET` | `/api/analysis/export` | vollständige Analyse als formatiertes JSON exportieren | | `GET` | `/api/runtime-settings` | aktuelle Learning-, Thinking-, exakte Source- und View-Einstellungen | | `PUT` | `/api/runtime-settings` | Laufzeiteinstellungen ändern und gebündelt persistieren | | `GET` | `/api/sources` | exakte `source`-Werte mit Anzahl; enthält immer `GLPI_KB_SOURCE` | | `GET` | `/api/stream` | SSE-Aktivitätsstrom | | `POST` | `/api/query` | programmatische Wissensanfrage; in der Fullscreen-UI verborgen | | `POST` | `/api/events` | optionale Agent-/KB-Telemetrie | | `POST` | `/api/reindex` | lokaler Scan und Embedding-Abgleich | | `POST` | `/api/enrich` | AI-THINK-Zyklus einplanen/ausführen | | `POST` | `/api/glpi-kb/sync` | GLPI-KB manuell synchronisieren | | `POST` | `/api/flush` | ausstehende Dateien und geänderte SQLite-Zeilen sofort persistieren | | `GET` | `/api/state/export` | kompakte, konsistente `graph.db` exportieren | | `GET` | `/api/research/tasks` | persistente autonome Research-Queue und Workerstatus | | `POST` | `/api/research/tasks` | externe oder manuelle Rechercheaufgabe asynchron einreihen | | `POST` | `/api/research/tasks/{id}/cancel` | wartende, zurückgestellte oder reservierte Aufgabe abbrechen | | `POST` | `/api/research/autonomous/scan` | Graph sofort nach Wissenslücken analysieren | | `POST` | `/api/research/autonomous/run` | wartende Queue ohne Umgehung der Kapazitätsregeln wecken | Mit `BRAIN_API_KEY` werden POST-Endpunkte über `Authorization: Bearer …` oder `X-Brain-Key` geschützt. ## Statusdiagnose ```bash curl http://localhost:8090/api/status | jq ``` Wichtige Bereiche: - `ollama_pool.nodes[]`: Health, Kompatibilität, Inflight, Requests, Fehler und mittlere Laufzeit; - `glpi_kb`: letzter Sync, Dokumentanzahl, Pfad und Fehler; - `persistence`: ausstehende Dateien, Dirty-Status, letzter Flush und Flush-Fehler; - `graph_storage`: SQLite-/WAL-Größe, Vector-Bytes, Row-Anzahl und ausstehende Änderungen; - `enrich_*`: Zustand des AI-THINK-Workers; - `autonomous_research`: Queue-Zähler, laufende Aufgabe, Budgetparameter, letzte Fehler sowie gelernte Evidenz und erzeugte Staging-Artikel; - `relations_created`, `articles_created`, `articles_skipped`: getrennte Relation- und Artikelergebnisse. ## Validierung ```bash go test ./... go vet ./... node --check internal/web/static/app.js node --check internal/web/static/analysis.js ``` ## Sichtbare SearXNG-Recherche SearXNG-Suchen werden als eigenständige Aktivität visualisiert. Scanringe markieren die laufende Suche, gefundene Quellen erscheinen als externe Quellenpunkte und fließen anschließend in die neu erzeugten Forschungs-Nodes. Die Animation bleibt bei der Aktualisierung des Graphen bestehen und läuft nach dem Einblenden der neuen Nodes mindestens zwei Sekunden weiter. Unter **FILTER → SearXNG-Diagnose** kann eine direkte Testsuche ausgeführt werden. Diese umgeht die fachliche Qwen-Entscheidung, verändert den Graphen nicht und zeigt eindeutig: - die tatsächlich verwendete Basis-URL, - HTTP-Status und Content-Type, - Trefferzahl und Laufzeit, - DNS-, Netzwerk-, TLS-, HTTP- und JSON-Fehler, - bei Fehlern den Antwortausschnitt von SearXNG oder Reverse Proxy. Die automatische Artikelrecherche sammelt deutsch/englisches Volltextmaterial ohne `site:`-Filter. Ein separates Autor-Modell erzeugt daraus den Artikel; erst danach prüft das Reviewer-Modell den sichtbaren Text Claim für Claim und kann gezielte Nachrecherche auslösen. Im Analyse-Center zeigt der Ollama-Status außerdem aktive/wartende Einträge der gemeinsamen Research/Ollama-Queue sowie die Verfügbarkeit von Autor- und Reviewer-Modell. Die API-Endpunkte sind `GET /api/research/status` und `POST /api/research/test`. Details stehen in `SEARXNG-VISUALIZATION.md` und `GENERATE-THEN-REVIEW.md`. ## Cluster/Fast-Verarbeitungsmodus Für große Wissensgraphen kann neben dem bisherigen präzisen Vollscan der Modus `BRAIN_PROCESSING_MODE=clustered` verwendet werden. Er nutzt Semantic Hashing zur Kandidatenvorsortierung, berechnet exakte Cosine-Nähe nur für eine kleine Top-K-Shortlist, reduziert die Artikelquellenauswahl und verkleinert den Reviewer-Kontext. Der finale Claim-Review bleibt erhalten. Details: `CLUSTER-FAST-MODE.md`.