All checks were successful
release-tag / release-image (push) Successful in 2m43s
46 lines
9.1 KiB
HTML
46 lines
9.1 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Agents & Controller · Neural Brain</title><link rel="stylesheet" href="/source-agents.css">
|
|
</head>
|
|
<body>
|
|
<header><div><strong>AGENTS & CONTROLLER</strong><small>Source-Ingest · CPU-Compute · kontrollierte Host-Docker-Automation</small></div><nav><a href="/">BRAIN</a><a href="/analysis.html">ANALYSE</a></nav></header>
|
|
<main>
|
|
<section class="panel auth"><div><h2>Administration</h2><p><code>BRAIN_API_KEY</code> bleibt nur in dieser Browser-Session.</p></div><input id="apiKey" type="password" placeholder="BRAIN_API_KEY (optional)"><button id="saveKey">Übernehmen</button></section>
|
|
<section id="brainURLWarning" class="panel hidden"></section>
|
|
<section class="stats"><article><b id="agentCount">0</b><span>Agents</span></article><article><b id="controllerCount">0</b><span>Controller online</span></article><article><b id="controllerJobs">0</b><span>Controller-Jobs aktiv</span></article><article><b id="candidateCount">0</b><span>Inbox-Kandidaten</span></article><article><b id="receivedCount">0</b><span>Queue</span></article></section>
|
|
|
|
<section class="panel controller-master" id="controllerMasterPanel">
|
|
<div class="title-row"><div><h2>Docker Controller · zentrale Sicherheitsgrenze</h2><p>Docker.sock entspricht praktisch Host-Root. Der Agent führt nur typisierte Jobs aus; kein freier Shell-/Exec-Kanal wird an das Brain oder ein Modell vergeben.</p></div><span id="controllerMasterState" class="master-state off">GESTOPPT</span></div>
|
|
<div class="switch-grid">
|
|
<label class="switch-card danger"><input id="controllerEnabled" type="checkbox"><span><b>HAUPTSCHALTER</b><small>Alle Docker-Mutationen zentral erlauben/stoppen</small></span></label>
|
|
<label class="switch-card"><input id="controllerAutonomous" type="checkbox"><span><b>Autonome Controller-Jobs</b><small>Nur vorher freigegebene Profile</small></span></label>
|
|
<label class="switch-card"><input id="controllerDryRun" type="checkbox"><span><b>Global Dry-Run</b><small>Jobs validieren, aber nichts verändern</small></span></label>
|
|
<label class="switch-card danger"><input id="controllerDestructive" type="checkbox"><span><b>Destruktive Aktionen</b><small>Remove / Compose down zusätzlich freigeben</small></span></label>
|
|
</div>
|
|
<div class="grid policy-grid">
|
|
<article><div class="two"><label>Max. parallele Jobs<input id="controllerMaxJobs" type="number" min="1" max="8" value="1"></label><label>Max. Jobdauer<input id="controllerMaxDuration" value="10m"></label></div><label>Erlaubte Images (eine Regel pro Zeile)<textarea id="controllerImages" rows="4" placeholder="curlimages/curl:"></textarea></label></article>
|
|
<article><label>Erlaubte Compose-Roots auf dem Controller-Agent<textarea id="controllerComposeRoots" rows="4" placeholder="/srv/brain-controller"></textarea></label><label>Geschützte Container<textarea id="controllerProtectedContainers" rows="3" placeholder="*brain* *source-agent*"></textarea></label><div class="two"><label>Geschützte Netzwerke<textarea id="controllerProtectedNetworks" rows="3" placeholder="brain_default"></textarea></label><label>Geschützte Volumes<textarea id="controllerProtectedVolumes" rows="3" placeholder="brain-data"></textarea></label></div></article>
|
|
</div>
|
|
<div class="actions master-actions"><button id="saveControllerPolicy">POLICY SPEICHERN</button><button id="controllerEmergencyStop" class="danger-button">DOCKER-STEUERUNG SOFORT STOPPEN</button></div>
|
|
</section>
|
|
|
|
<section class="panel"><div class="title-row"><div><h2>Controller-Inventar</h2><p>Vom Agent direkt über Docker Engine API gelesen. Compose wird nur gemeldet, wenn die CLI im Agent vorhanden ist.</p></div><button id="reload">AKTUALISIEREN</button></div><div id="controllerInventory" class="controller-inventory"></div></section>
|
|
|
|
<section class="grid">
|
|
<article class="panel"><h2>Controller-Profil</h2><p>Nur Profile mit <b>Autonom freigegeben</b> dürfen vom Brain selbst gestartet werden.</p><div class="two"><label>Name<input id="profileName" placeholder="Primärquellen Zweitprüfung"></label><label>Agent<select id="profileAgent"><option value="">beliebiger Controller</option></select></label></div><div class="two"><label>Zweck<select id="profilePurpose"><option>research</option><option>test</option><option>validation</option><option>performance</option><option>recovery</option><option>operations</option></select></label><label>Typ<select id="profileKind"><option>evidence_http_probe</option><option>health_recovery</option><option>compute_capacity_compose</option><option>compose_smoke_test</option><option>compose_up</option><option>compose_restart</option><option>compose_pull</option><option>container_restart</option></select></label></div><label>Konfiguration (JSON)<textarea id="profileConfig" rows="7" placeholder='{"image":"curlimages/curl:8.11.1"}'></textarea></label><label class="check"><input id="profileAutonomous" type="checkbox"> Autonom freigeben</label><button id="createProfile">PROFIL SPEICHERN</button></article>
|
|
<article class="panel"><h2>Manueller Controller-Job</h2><p>Auch manuelle Jobs unterliegen Hauptschalter, Policy und Schutzlisten.</p><div class="two"><label>Agent<select id="jobAgent"><option value="">beliebiger Controller</option></select></label><label>Aktion<select id="jobKind"><option>inventory_refresh</option><option>container_start</option><option>container_stop</option><option>container_restart</option><option>container_create</option><option>container_remove</option><option>network_create</option><option>network_remove</option><option>volume_create</option><option>volume_remove</option><option>compose_up</option><option>compose_restart</option><option>compose_pull</option><option>compose_ps</option><option>compose_down</option><option>evidence_http_probe</option></select></label></div><label>Parameter (JSON)<textarea id="jobParams" rows="8" placeholder='{"container":"searxng"}'></textarea></label><label class="check"><input id="jobDryRun" type="checkbox"> Nur diesen Job als Dry-Run anlegen</label><button id="createControllerJob">JOB EINPLANEN</button></article>
|
|
</section>
|
|
|
|
<section class="panel"><div class="title-row"><div><h2>Freigegebene Controller-Profile</h2><p>Research-Probe, Recovery, Compute-Kapazität und Smoke-Test sind die vorgesehenen autonomen Profile.</p></div></div><div id="controllerProfiles" class="cards"></div></section>
|
|
<section class="panel"><div class="title-row"><div><h2>Controller-Jobverlauf</h2><p>Queued/claimed Jobs können zentral abgebrochen werden. Der Agent prüft den Hauptschalter auch während längerer Aktionen erneut.</p></div></div><div class="table-wrap"><table><thead><tr><th>Status</th><th>Aktion / Zweck</th><th>Agent / Profil</th><th>Parameter / Ergebnis</th><th>Zeit</th><th></th></tr></thead><tbody id="controllerJobRows"></tbody></table></div></section>
|
|
|
|
<section class="grid">
|
|
<article class="panel"><h2>Agent anlegen</h2><label>Name<input id="agentName" placeholder="Controller Frankfurt"></label><label>ID (optional)<input id="agentID" placeholder="controller-frankfurt"></label><button id="createAgent">AGENT ERSTELLEN</button><pre id="tokenOutput" class="token-output hidden"></pre></article>
|
|
<article class="panel"><h2>Polling-Aufgabe</h2><label>Agent<select id="taskAgent"></select></label><div class="two"><label>Typ<select id="taskType"><option>rss</option><option>atom</option><option>sitemap</option><option>web</option></select></label><label>Intervall<input id="taskInterval" value="4h"></label></div><label>Name<input id="taskName" placeholder="Microsoft Security Blog"></label><label>URL<input id="taskURL" placeholder="https://example.org/feed.xml"></label><label>Kategorien<input id="taskCategories" placeholder="Security, Microsoft"></label><div class="two"><label>Max. Elemente<input id="taskMaxItems" type="number" min="1" max="500" value="20"></label><label>Security<select id="taskSecurityProactive"><option value="auto">Auto erkennen</option><option value="true">Proaktiv materialisieren</option><option value="false">Passiv</option></select></label></div><label class="check"><input id="taskRefetchSeen" type="checkbox"> Bekannte URLs erneut prüfen</label><button id="createTask">TASK SPEICHERN</button></article>
|
|
</section>
|
|
<section class="panel"><div class="title-row"><div><h2>Agents</h2><p>Source-, CPU- und Controller-Capabilities werden getrennt angezeigt.</p></div></div><div id="agents" class="cards"></div></section>
|
|
<section class="panel"><div class="title-row"><div><h2>Source Inbox</h2><p>Normale Candidates bleiben passiv; Security-Evidenz kann kontrolliert materialisiert werden.</p></div><select id="inboxFilter"><option value="">alle</option><option>received</option><option>processing</option><option>candidate</option><option>materialized</option><option>archived</option><option>used</option></select></div><div class="table-wrap"><table><thead><tr><th>Status</th><th>Titel / Quelle</th><th>Priorität / KB-Nähe</th><th>Agent / Task</th><th>Eingang</th></tr></thead><tbody id="inbox"></tbody></table></div></section>
|
|
</main><div id="toast"></div><script src="/source-agents.js"></script></body></html>
|