200 lines
12 KiB
HTML
200 lines
12 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||
<title>Neural Knowledge Brain</title>
|
||
<link rel="stylesheet" href="/app.css">
|
||
</head>
|
||
<body>
|
||
<canvas id="brain" aria-label="Animierter Wissensgraph in 3D-Gehirnform"></canvas>
|
||
<div class="vignette"></div>
|
||
|
||
<header class="topbar glass">
|
||
<div class="brand">
|
||
<span class="mark"><i></i><i></i><i></i></span>
|
||
<div>
|
||
<strong>NEURAL KNOWLEDGE BRAIN</strong>
|
||
<small>Autonome Hirnaktivität · Agent · Knowledgebase · AI-THINK</small>
|
||
</div>
|
||
</div>
|
||
<div class="mode-status living" id="visualMode" aria-live="polite">
|
||
<i></i>
|
||
<div><b>LIVING</b><small>ruhige Eigenaktivität</small></div>
|
||
</div>
|
||
<div class="metrics">
|
||
<span><b id="nodeCount">0</b> Nodes</span>
|
||
<span><b id="edgeCount">0</b> Edges</span>
|
||
<span title="Aktuell gerenderte Knoten"><b id="renderCount">0</b> Render</span>
|
||
<span title="Gemessene Renderfrequenz"><b id="fpsCount">0</b> FPS</span>
|
||
<span><b id="pulseCount">0</b> Impulse</span>
|
||
<span class="state" id="systemState"><i></i> verbindet</span>
|
||
</div>
|
||
</header>
|
||
|
||
<aside class="activity glass">
|
||
<div class="panel-title">
|
||
<span>AKTIVITÄTSFEED</span>
|
||
<div class="panel-actions">
|
||
<span class="chip">wichtig</span>
|
||
<button id="clearLog" title="Aktivitätsprotokoll leeren">×</button>
|
||
</div>
|
||
</div>
|
||
<div class="panel-subtitle">Zeigt relevante Hirnaktivität, Anreicherungen, Recherchen und Suchläufe.</div>
|
||
<div id="autonomyStatus" class="autonomy-status" aria-live="polite"><i></i><span>AI-THINK-Status wird geladen …</span></div>
|
||
<div id="activityLog" class="activity-log"></div>
|
||
</aside>
|
||
|
||
<nav class="dock glass" aria-label="Ansichtssteuerung">
|
||
<button id="viewNeural" class="active" title="Semantischer Wissensgraph mit Edges">NEURAL</button>
|
||
<button id="viewHoneycomb" title="Gleichmäßig verteilte 3D-Wabenansicht ohne Edges">HONEYCOMB</button>
|
||
<button id="viewConstellation" title="Semantische Themen-Sternbilder mit leichten Clusterpfaden">CONSTELLATION</button>
|
||
<span class="dock-separator"></span>
|
||
<button id="toggleLearning" class="active" title="Lernen, Reindex und Embeddings aktivieren oder pausieren">LEARNING</button>
|
||
<button id="toggleThinking" class="active" title="Autonomes AI-THINK aktivieren oder pausieren">THINKING</button>
|
||
<span class="dock-separator"></span>
|
||
<button id="toggleLabels" class="active">Labels</button>
|
||
<button id="toggleEdges" class="active">Synapsen</button>
|
||
<button id="toggleRotate" class="active">Autopilot</button>
|
||
<button id="toggleCortex" class="active">Cortex</button>
|
||
<button id="toggleLOD" class="active" title="Hierarchische dynamische Verdichtung">LOD</button>
|
||
<button id="toggleEco" title="Optimierter Renderpfad für schwächere Systeme">ECO</button>
|
||
<button id="resetView">Zentrieren</button>
|
||
<button id="openSettings" title="Exakte KB-source-Filter und Laufzeitsteuerung">FILTER</button>
|
||
<a class="analysis-dashboard-link" href="/analysis.html" title="Technisches Analyse-Dashboard mit Lauf- und Graphhistorie">ANALYSE</a>
|
||
<button id="enrichNow" class="think-action" title="Einen autonomen AI-THINK-Zyklus sofort starten"><span>AI-THINK</span><small>STARTEN</small></button>
|
||
</nav>
|
||
|
||
<div class="legend glass" aria-label="Legende">
|
||
<span class="legend-title">STATUS</span>
|
||
<span><i class="prod"></i>Produktiv</span>
|
||
<span><i class="think"></i>AI-THINK</span>
|
||
<span><i class="stage"></i>Staging</span>
|
||
<span><i class="external"></i>Recherche</span>
|
||
</div>
|
||
|
||
<div id="settingsBackdrop" class="settings-backdrop hidden"></div>
|
||
<aside id="settingsPanel" class="settings-panel glass hidden" aria-label="Brain-Einstellungen">
|
||
<div class="settings-header">
|
||
<div><strong>BRAIN CONTROL</strong><small>Laufzeitmodi und exakte KB-source-Filter</small></div>
|
||
<button id="closeSettings" title="Schließen">×</button>
|
||
</div>
|
||
|
||
<div class="settings-scroll" tabindex="0" aria-label="Scrollbarer Einstellungsinhalt">
|
||
<section class="settings-section">
|
||
<h2>Betriebsmodi</h2>
|
||
<label class="switch-row" for="settingsLearning">
|
||
<span><b>Learning</b><small>Ingest, Reindex, GLPI-Sync und Embeddings</small></span>
|
||
<input id="settingsLearning" type="checkbox" checked>
|
||
</label>
|
||
<label class="switch-row" for="settingsThinking">
|
||
<span><b>Thinking</b><small>AI-THINK, Verknüpfungsanalyse und Recherche</small></span>
|
||
<input id="settingsThinking" type="checkbox" checked>
|
||
</label>
|
||
<div class="view-selector" aria-label="Standardansicht">
|
||
<button id="settingsViewNeural" class="active" type="button">Neural</button>
|
||
<button id="settingsViewHoneycomb" type="button">Honeycomb</button>
|
||
<button id="settingsViewConstellation" type="button">Constellation</button>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="settings-section performance-settings">
|
||
<div class="settings-section-title"><h2>Performance</h2><span>Browser-Rendering</span></div>
|
||
<label class="switch-row eco-switch" for="settingsLowPower">
|
||
<span><b>Eco-Modus</b><small>30 FPS, geringere Pixeldichte und günstigere Glow-Effekte. Aktivität, Rechercheanimationen und Fades bleiben sichtbar.</small></span>
|
||
<input id="settingsLowPower" type="checkbox">
|
||
</label>
|
||
<div class="settings-section-title performance-subtitle"><h2>Brain-Verarbeitung</h2><span>Relationen & Artikel</span></div>
|
||
<div class="settings-processing-mode" role="group" aria-label="Verarbeitungsmodus">
|
||
<button id="settingsProcessingPrecise" class="active" type="button">PRÄZISE</button>
|
||
<button id="settingsProcessingClustered" type="button">CLUSTER / FAST</button>
|
||
</div>
|
||
<p id="processingModeHint" class="setting-hint">Präzise: vollständige Cosine-Suche. Cluster/Fast: Semantic Hashing + exakte Top-K-Prüfung und kompakterer Artikelreview.</p>
|
||
<div class="settings-section-title performance-subtitle"><h2>GPU-Limit</h2><span>0 = unbegrenzt</span></div>
|
||
<label class="number-setting" for="settingsMaxDisplayNodes">
|
||
<span><b>Maximal angezeigte Nodes</b><small>Begrenzt Neural- und Honeycomb-Ansicht. Aktive Notes werden bei Bedarf temporär eingeblendet und ersetzen inaktive Nodes.</small></span>
|
||
<input id="settingsMaxDisplayNodes" type="number" min="0" max="500000" step="100" inputmode="numeric" value="0">
|
||
</label>
|
||
<div class="node-limit-presets" aria-label="Voreinstellungen für das Node-Limit">
|
||
<button type="button" data-node-limit="1000">1.000</button>
|
||
<button type="button" data-node-limit="5000">5.000</button>
|
||
<button type="button" data-node-limit="10000">10.000</button>
|
||
<button type="button" data-node-limit="25000">25.000</button>
|
||
<button type="button" data-node-limit="0">Unbegrenzt</button>
|
||
</div>
|
||
<p id="displayLimitHint" class="setting-hint">Unbegrenzt · Quellenfilter und LOD bestimmen die Renderlast.</p>
|
||
</section>
|
||
|
||
<section class="settings-section research-settings">
|
||
<div class="settings-section-title"><h2>SearXNG-Diagnose</h2><span id="researchStatusBadge">nicht geprüft</span></div>
|
||
<div id="researchStatus" class="research-status">Konfiguration wird geladen …</div>
|
||
<label class="research-test-query" for="researchTestQuery">
|
||
<span>Direkte Testanfrage</span>
|
||
<input id="researchTestQuery" type="text" value="Btrfs Snapshots und ZFS History Unterschiede Timeline" autocomplete="off">
|
||
</label>
|
||
<div class="research-test-actions">
|
||
<button id="testResearch" type="button">SEARXNG TESTEN</button>
|
||
<span id="researchTestFeedback" aria-live="polite"></span>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="settings-section autonomous-research-settings">
|
||
<div class="settings-section-title"><h2>Autonomous Research</h2><span id="autonomousResearchBadge">pausiert</span></div>
|
||
<label class="switch-row" for="settingsAutonomousResearch">
|
||
<span><b>Eigenständige Wissensanreicherung</b><small>Erkennt Wissenslücken, plant SearXNG-Recherchen und lernt geprüfte Volltextbelege. Artikel bleiben im Staging.</small></span>
|
||
<input id="settingsAutonomousResearch" type="checkbox">
|
||
</label>
|
||
<label class="switch-row" for="settingsAutonomousIdleOnly">
|
||
<span><b>Nur im Leerlauf</b><small>Hintergrundaufgaben werden nur an Ollama übergeben, wenn keine Anfrage oder AI-THINK-Auswertung läuft.</small></span>
|
||
<input id="settingsAutonomousIdleOnly" type="checkbox" checked>
|
||
</label>
|
||
<div class="autonomous-grid">
|
||
<label for="settingsAutonomousMinPriority"><span>Mindestpriorität</span><input id="settingsAutonomousMinPriority" type="number" min="0" max="1" step="0.05" value="0.65"></label>
|
||
<label for="settingsAutonomousMaxPerDay"><span>Maximal pro Tag</span><input id="settingsAutonomousMaxPerDay" type="number" min="1" max="500" step="1" value="12"></label>
|
||
<label for="settingsAutonomousPerCycle"><span>Neue Tasks je Scan</span><input id="settingsAutonomousPerCycle" type="number" min="1" max="8" step="1" value="1"></label>
|
||
</div>
|
||
<label class="research-test-query" for="autonomousResearchTopic">
|
||
<span>Manuelle Rechercheaufgabe</span>
|
||
<input id="autonomousResearchTopic" type="text" placeholder="z. B. ZFS-Schlüsselwiederherstellung auf Ersatzsystemen" autocomplete="off">
|
||
</label>
|
||
<div class="research-test-actions autonomous-actions">
|
||
<button id="queueAutonomousResearch" type="button">AUFGABE EINPLANEN</button>
|
||
<button id="scanAutonomousResearch" type="button">GRAPH ANALYSIEREN</button>
|
||
<button id="runAutonomousResearch" type="button">QUEUE STARTEN</button>
|
||
</div>
|
||
<p id="autonomousResearchFeedback" class="setting-hint" aria-live="polite">Die Queue wird asynchron und mit niedriger Priorität an Ollama abgearbeitet.</p>
|
||
<div class="settings-section-title queue-title"><h2>Research Queue</h2><span id="autonomousQueueCount">0</span></div>
|
||
<div id="autonomousResearchQueue" class="autonomous-queue"><span class="empty-filter">Keine Aufgaben geladen</span></div>
|
||
</section>
|
||
|
||
<section class="settings-section source-settings">
|
||
<div class="settings-section-title"><h2>KB-source-Filter</h2><span>exakter Treffer auf dem source-Feld</span></div>
|
||
<p id="filterScopeSummary" class="setting-hint filter-scope-summary">Quellen werden geladen …</p>
|
||
<label class="filter-search"><span>source-Werte durchsuchen</span><input id="sourceSearch" type="search" placeholder="z. B. internal-category oder GLPI Knowledge Base"></label>
|
||
|
||
<div class="filter-block">
|
||
<div class="filter-heading"><div><b>Lernen</b><small>Nur KB-Dokumente mit exakt diesem source-Wert werden eingebettet und bei Abfragen verwendet.</small></div><button type="button" data-clear-source-filter="learning">Alle</button></div>
|
||
<div id="learningSourceList" class="source-list"></div>
|
||
</div>
|
||
<div class="filter-block">
|
||
<div class="filter-heading"><div><b>Anzeige</b><small>Nur Dokumente mit exakt passendem source-Wert werden gerendert; direkte Taxonomie bleibt sichtbar.</small></div><button type="button" data-clear-source-filter="display">Alle</button></div>
|
||
<div id="displaySourceList" class="source-list"></div>
|
||
</div>
|
||
<div class="filter-block">
|
||
<div class="filter-heading"><div><b>Thinking</b><small>Nur Dokumente und Webbelege mit exakt passendem source-Wert speisen neue Relationen und Artikel.</small></div><button type="button" data-clear-source-filter="thinking">Alle</button></div>
|
||
<div id="thinkingSourceList" class="source-list"></div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="settings-footer">
|
||
<span id="settingsFeedback" aria-live="polite"></span>
|
||
<button id="saveSettings" type="button">ÜBERNEHMEN</button>
|
||
</div>
|
||
</aside>
|
||
|
||
<div id="tooltip" class="tooltip hidden"></div>
|
||
<script src="/app.js" defer></script>
|
||
</body>
|
||
</html>
|