Files
glpi-neural-brain/internal/web/static/index.html
jbergner 37377c79aa
All checks were successful
release-tag / release-image (push) Successful in 2m23s
CSS-Verbesserung
2026-08-05 21:37:04 +02:00

164 lines
8.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>
<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>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 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>