Spaces:
Paused
Paused
Download src/dashboard/static/index.html from ThomasHeisig/Brain-5D-Space: direct link, hf CLI and curl.
- Browser
- Download file 74.7 kB
-
https://huggingface.co/spaces/ThomasHeisig/Brain-5D-Space/resolve/main/src/dashboard/static/index.html
- Command line
-
hf download hf://spaces/ThomasHeisig/Brain-5D-Space/src/dashboard/static/index.html
-
curl -L -o index.html https://huggingface.co/spaces/ThomasHeisig/Brain-5D-Space/resolve/main/src/dashboard/static/index.html
74.7 kB
| <html lang="de"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Brain-5D Operator Dashboard</title> | |
| <style> | |
| .tab-content { display: none; } | |
| .tab-content.active { display: block; } | |
| /* The three-area navigation is the visible shell; legacy tab buttons remain routing targets. */ | |
| .tab-nav { display: none ; } | |
| </style> | |
| <link rel="stylesheet" href="/styles.css"> | |
| </head> | |
| <body> | |
| <!-- ============================================================ --> | |
| <!-- TOPBAR --> | |
| <!-- ============================================================ --> | |
| <header class="topbar"> | |
| <div class="topbar-brand"> | |
| <button id="nav-back" class="icon-btn" title="Zur vorherigen Ansicht" aria-label="Zurück">←</button> | |
| <button id="nav-home" class="icon-btn" title="Zur Übersicht" aria-label="Übersicht">⌂</button> | |
| <div> | |
| <p class="eyebrow">Brain-5D</p> | |
| <h1>Operator Dashboard</h1> | |
| </div> | |
| </div> | |
| <div class="topbar-right"> | |
| <span class="header-context" id="header-context">Overview</span> | |
| <button id="help-toggle" class="icon-btn" title="Hilfe zur aktuellen Ansicht" aria-label="Hilfe">?</button> | |
| <button id="theme-toggle" class="icon-btn" title="Dark / Light" aria-label="Dark oder Light Mode">◐</button> | |
| <button id="contrast-toggle" class="icon-btn" title="Kontrastmodus" aria-label="Kontrastmodus">◩</button> | |
| <button id="accessibility-toggle" class="icon-btn" title="Größere Bedienelemente" aria-label="Barrierearme Darstellung">A+</button> | |
| <button id="reader-toggle" class="icon-btn" title="Reader-Ansicht" aria-label="Reader-Ansicht" aria-pressed="false">▤</button> | |
| <button id="chat-toggle" class="multifunction-btn" title="Research Chat öffnen" aria-label="Research Chat öffnen">✦ CHAT</button> | |
| </div> | |
| </header> | |
| <!-- ============================================================ --> | |
| <!-- TAB NAVIGATION --> | |
| <!-- ============================================================ --> | |
| <nav class="tab-nav"> | |
| <button class="tab-btn active" data-tab="overview">📊 OVERVIEW</button> | |
| <button class="tab-btn" data-tab="network">🧠 NETWORK</button> | |
| <button class="tab-btn" data-tab="control">🎮 CONTROL</button> | |
| <button class="tab-btn" data-tab="research">🔬 RESEARCH</button> | |
| <button class="tab-btn" data-tab="gate">🚀 RELEASE</button> | |
| <button class="tab-btn" data-tab="settings">⚙ SETTINGS</button> | |
| <button class="tab-btn" data-tab="embodiment">◈ EMBODIMENT</button> | |
| </nav> | |
| <main> | |
| <section class="tab-content active" id="tab-overview"> | |
| <header class="overview-command-bar"> | |
| <div class="overview-command-copy"> | |
| <span class="overview-kicker">LIVING SYSTEM / COMMAND CENTER</span> | |
| <h2>Der aktuelle Körperzustand</h2> | |
| <p id="overview-context">Tick — · runtime wird verbunden</p> | |
| </div> | |
| <div class="overview-actions" aria-label="Schnellzugriff"> | |
| <button class="overview-action" type="button" data-overview-tab="control">▶ Ausführen</button> | |
| <button class="overview-action" type="button" data-overview-tab="embodiment">◈ Körper öffnen</button> | |
| <button class="overview-action" type="button" data-overview-tab="research">⌕ Nachweise</button> | |
| <button class="overview-action" type="button" data-overview-tab="settings">⚙ Parameter</button> | |
| </div> | |
| </header> | |
| <section class="overview-status-rail" aria-label="Systemstatus"> | |
| <div class="overview-status-item"><span>Runtime</span><strong id="overview-runtime-status">unknown</strong></div> | |
| <div class="overview-status-item"><span>Health</span><strong id="overview-health-status">unknown</strong></div> | |
| <div class="overview-status-item"><span>Scientific Gate</span><strong id="overview-scientific-status">unknown</strong></div> | |
| <div class="overview-status-item"><span>CI</span><strong id="overview-ci-status">unknown</strong></div> | |
| <div class="overview-status-item"><span>Release</span><strong id="overview-release-status">not_ready</strong></div> | |
| <div class="overview-status-item"><span>Mode</span><strong id="overview-mode-status">operator</strong></div> | |
| </section> | |
| <section class="overview-operations-grid"> | |
| <article class="overview-surface overview-body-surface"> | |
| <div class="overview-surface-title"><div><span>NEURONALES INNERES</span><h3>Aktivität und Regulation</h3></div><strong id="overview-system-status">idle</strong></div> | |
| <div class="overview-dynamics-grid"> | |
| <div><span>Aktive Neuronen</span><strong id="overview-active-neurons">—</strong></div><div><span>Stille Neuronen</span><strong id="overview-silent-neurons">—</strong></div><div><span>Feuerrate</span><strong id="overview-mean-rate">—</strong></div><div><span>Synchronität</span><strong id="overview-synchrony">—</strong></div><div><span>Burst Index</span><strong id="overview-burst-index">—</strong></div><div><span>E / I Ratio</span><strong id="overview-ei-ratio">—</strong></div> | |
| </div> | |
| <div class="overview-dynamics-grid overview-core-metrics"> | |
| <div><span>Tick</span><strong id="tick">—</strong></div><div><span>Neuronen</span><strong id="neurons">—</strong></div><div><span>Synapsen</span><strong id="synapses">—</strong></div><div><span>Spikes</span><strong id="spikes">—</strong></div><div><span>Core ms</span><strong id="core-ms">—</strong></div><div><span>Energie</span><strong id="energy">—</strong></div> | |
| </div> | |
| </article> | |
| <article class="overview-surface"><div class="overview-surface-title"><div><span>ORGANE</span><h3>Lebende Komponenten</h3></div><strong id="overview-component-count">0 / 0</strong></div><div class="overview-component-grid" id="overview-component-grid"><span class="overview-empty">Waiting for component state</span></div></article> | |
| <article class="overview-surface"><div class="overview-surface-title"><div><span>RÜCKMELDUNG</span><h3>Aufmerksamkeit</h3></div><strong id="overview-problem-count">0</strong></div><div class="overview-problem-list" id="overview-problem-list"><span class="overview-empty overview-clear">No problems detected</span></div></article> | |
| </section> | |
| <section class="overview-operations-grid overview-metrics-row"> | |
| <article class="overview-surface"><div class="overview-surface-title"><div><span>SPEICHER</span><h3>Gedächtnis des Systems</h3></div><strong id="queue-badge">—</strong></div><div class="overview-dynamics-grid"><div><span>Deltas</span><strong id="deltas">—</strong></div><div><span>Bytes</span><strong id="bytes">—</strong></div><div><span>Journal</span><strong id="journal-size">—</strong></div><div><span>Drops</span><strong id="drops">—</strong></div><div><span>Write</span><strong id="write-ms">—</strong></div><div><span>Commit</span><strong id="commit-ms">—</strong></div></div><div class="bar"><div class="bar-fill" id="queue-fill"></div></div></article> | |
| <article class="overview-surface"><div class="overview-surface-title"><div><span>LERNEN</span><h3>Plastizität</h3></div><strong id="learning-ms">—</strong></div><div class="overview-dynamics-grid"><div><span>STDP</span><strong id="stdp">—</strong></div><div><span>Rewards</span><strong id="rewards">—</strong></div><div><span>Pending</span><strong id="pending">—</strong></div><div><span>Reward Updates</span><strong id="reward-updates">—</strong></div><div><span>Homeostasis</span><strong id="homeostasis-state">—</strong></div><div><span>Active</span><strong id="active-neurons">—</strong></div></div></article> | |
| <article class="overview-surface"><div class="overview-surface-title"><div><span>STRUKTUR</span><h3>Wachstum und Umbau</h3></div><strong>live</strong></div><div class="overview-dynamics-grid"><div><span>Neuronen +</span><strong id="neurons-created">—</strong></div><div><span>Neuronen −</span><strong id="neurons-removed">—</strong></div><div><span>Synapsen +</span><strong id="synapses-created">—</strong></div><div><span>Synapsen −</span><strong id="synapses-pruned">—</strong></div><div><span>Target Rate</span><strong id="target-rate">—</strong></div><div><span>Mean Rate</span><strong id="mean-rate">—</strong></div></div></article> | |
| </section> | |
| <section class="snapshot-info-card overview-surface" aria-label="Snapshot-Nachweis"><div class="overview-surface-title"><div><span>IDENTITÄT</span><h3>Aktueller Snapshot</h3></div><strong id="snapshot-status">⏳</strong></div><div class="overview-dynamics-grid"><div><span>Datei</span><strong id="snapshot-file">—</strong></div><div><span>Tick</span><strong id="snapshot-tick">—</strong></div><div><span>Größe</span><strong id="snapshot-size">—</strong></div><div><span>Rate Error</span><strong id="rate-error">—</strong></div><div><span>Threshold</span><strong id="threshold-adaptation">—</strong></div><div><span>Energy Error</span><strong id="energy-error">—</strong></div></div></section> | |
| </section> | |
| <!-- ========================================================== --> | |
| <!-- TAB: NETWORK --> | |
| <!-- ========================================================== --> | |
| <section class="tab-content" id="tab-network"> | |
| <header class="workspace-header" data-workspace="network"> | |
| <div><span class="workspace-kicker">OBSERVE</span><h2>Network Workbench</h2><p>Live dynamics, topology, populations and 5D inspection</p></div> | |
| <div class="workspace-status-strip"><span>Source<strong id="network-workspace-source">live</strong></span><span>Tick<strong id="network-workspace-tick">0</strong></span></div> | |
| </header> | |
| <nav class="workspace-view-tabs" data-workspace-views="network" aria-label="Network views"> | |
| <button type="button" class="active" data-workspace-view="visual">Visual</button> | |
| <button type="button" data-workspace-view="dynamics">Dynamics</button> | |
| <button type="button" data-workspace-view="inspect">Inspect</button> | |
| <button type="button" data-workspace-view="data">Data</button> | |
| </nav> | |
| <section class="card heatmap-panel" id="network-projection" data-network-view="visual"> | |
| <div class="panel-title"><div><h2>5D Netzwerk-Projektion</h2><p><span id="source-badge" class="badge badge-live">LIVE</span> · Live Runtime oder Snapshot</p></div><div class="button-group"><button id="live-toggle" class="active" type="button">LIVE</button><button data-kind="spike" type="button">Spikes</button><button data-kind="weight" type="button">Gewichte</button><label class="compact-slider">Auflösung <input id="projection-resolution" type="range" min="10" max="120" step="10" value="50"><output id="projection-resolution-value">50</output></label></div></div> | |
| <div class="heatmap-split"><div class="heatmap-wrap"><canvas id="heatmap" width="800" height="420"></canvas><div class="heatmap-meta" id="heatmap-meta">Keine Live-Verbindung.</div></div><canvas id="projection-5d" width="800" height="420"></canvas></div> | |
| </section> | |
| <section class="card io-flow-panel" id="network-flow" data-network-view="visual"><div class="panel-title"><h2>Input-Output Fluss</h2><span id="io-flow-badge" class="gate-badge pending">pending</span></div><div class="io-flow-grid"><div id="io-input-count">0</div><div id="io-input-fill"></div><div id="io-input-rate">0.000</div><div id="io-output-count">0</div><div id="io-output-fill"></div><div id="io-output-rate">0.000</div></div></section> | |
| <section class="card population-panel" id="network-populations" data-network-view="visual"><div class="panel-title"><h2>Neuronale Populationen</h2><span id="ei-ratio-badge" class="gate-badge">E/I: —</span></div><div class="population-grid" id="population-grid"></div><div class="population-meta" id="population-meta">—</div></section> | |
| <section class="card raster-panel" id="network-dynamics" data-network-view="dynamics" hidden><div class="panel-title"><h2>Spike Raster</h2><span id="raster-badge" class="gate-badge pending">pending</span></div><canvas id="spike-raster" width="900" height="380"></canvas><div id="raster-meta" class="heatmap-meta">—</div></section> | |
| <section class="card histogram-panel" id="network-histogram" data-network-view="dynamics" hidden><div class="panel-title"><h2>Feuerraten-Histogramm</h2><label>Bins <input id="histogram-bins" type="range" min="10" max="80" step="5" value="30"><output id="histogram-bins-value">30</output></label><span id="histogram-stats" class="gate-badge">—</span></div><canvas id="rate-histogram" width="900" height="300"></canvas><div id="histogram-meta" class="heatmap-meta">—</div></section> | |
| <section class="card panel" id="network-inspector" data-network-view="inspect" hidden><div class="panel-title"><h2>Network Inspector</h2></div><dl class="kv" id="inspect-network-summary"></dl><canvas id="inspect-projection" width="900" height="480"></canvas><label>Samples <input id="projection-samples" type="range" min="250" max="2000" step="250" value="2000"><output id="projection-samples-value">2000</output></label></section> | |
| <section class="card panel" id="network-neurons" data-network-view="data" hidden><div class="panel-title"><h2>Neurons</h2></div><div class="table-wrap"></div></section> | |
| <section class="card panel" id="network-synapses" data-network-view="data" hidden><div class="panel-title"><h2>Synapses</h2></div><div class="table-wrap"></div></section> | |
| </section> <!-- /tab-network --> | |
| <!-- ========================================================== --> | |
| <!-- TAB: CONTROL --> | |
| <!-- ========================================================== --> | |
| <section class="tab-content" id="tab-control"> | |
| <header class="workspace-header" data-workspace="control"> | |
| <div><span class="workspace-kicker">OPERATE</span><h2>Control Workbench</h2><p>Runtime lifecycle, pacing, experiment sessions and structural approvals</p></div> | |
| <div class="workspace-status-strip"> | |
| <span>State<strong id="control-workspace-state">idle</strong></span> | |
| <span>Tick<strong id="control-workspace-tick">0</strong></span> | |
| <span>Mode<strong id="control-workspace-mode">operator</strong></span> | |
| <span>Pending<strong id="control-workspace-pending">0</strong></span> | |
| </div> | |
| </header> | |
| <nav class="workspace-jumps" aria-label="Control sections"> | |
| <a href="#experiment-panel">1 · Ziel</a><a href="#control-causal-flow">2 · Ursache</a><a href="#control-execution">3 · Ausführung</a><a href="#control-effects">4 · Wirkung</a><a href="#operator-console">5 · Nachweis</a> | |
| </nav> | |
| <section class="control-causal-map" id="control-causal-flow" aria-label="Cause and effect workflow"> | |
| <div><span>1</span><strong>Experimentziel</strong><small>Modus, Hypothese und Session definieren</small></div> | |
| <i>→</i><div><span>2</span><strong>Ursache</strong><small>Ticks, Loop und zeitliche Taktung wählen</small></div> | |
| <i>→</i><div><span>3</span><strong>Ausführung</strong><small>Starten, pausieren oder gezielt steppen</small></div> | |
| <i>→</i><div><span>4</span><strong>Wirkung</strong><small>Tick, Queue, Laufzeit und Netzwerk beobachten</small></div> | |
| <i>→</i><div><span>5</span><strong>Nachweis</strong><small>Log, Snapshot und Structural Journal sichern</small></div> | |
| </section> | |
| <!-- Runtime Control --> | |
| <section class="control-card" id="runtime-control-card"> | |
| <div class="control-card__header"> | |
| <div class="control-card__title-group"><h2 id="runtime-control-title">Runtime Control</h2><p class="control-card__subtitle">Single control plane for runtime, loop pacing and self-organization policy</p></div> | |
| <span class="runtime-state" id="runtime-state" role="status">unknown</span> | |
| </div> | |
| <div class="control-cause-effect-grid"> | |
| <section class="control-stage" id="control-causes"> | |
| <div class="control-stage-heading"><span>CAUSE</span><h3>Ursache festlegen</h3><p>Wähle einen begrenzten Step oder einen wiederholbaren Batch. Delay verändert nur die Ausführungsgeschwindigkeit.</p></div> | |
| <div class="control-stage-groups"> | |
| <div class="control-group step-group"> | |
| <div class="control-group__header"><span class="control-group__title">Gezielter Step</span><span class="shortcut-hint">Ctrl+Enter</span></div> | |
| <div class="control-group__body"><label class="input-label" for="step-ticks">Anzahl Ticks <input id="step-ticks" type="number" min="1" max="10000000" value="1" /></label><button id="step-button" type="button" class="btn-primary">▶ Ausführen</button></div> | |
| <small>Führt exakt N Ticks aus und stoppt wieder.</small> | |
| </div> | |
| <div class="control-group run-group"> | |
| <div class="control-group__header"><span class="control-group__title">Reproduzierbarer Batch</span><span class="shortcut-hint">Ctrl+Shift+R</span></div> | |
| <div class="control-group__body"><label class="input-label" for="loop-size">Batchgröße <input id="loop-size" type="number" min="1" max="1000000" value="100" /></label><button id="run-button" type="button" class="btn-success">⏩ Batch starten</button></div> | |
| <small>Stellt N Ticks in die Controller-Queue.</small> | |
| </div> | |
| <div class="control-group config-group"> | |
| <div class="control-group__header"><span class="control-group__title">Zeitliche Taktung</span></div> | |
| <div class="control-group__body"><label class="input-label" for="delay-ms">Delay pro Tick (ms) <input id="delay-ms" type="number" min="0" max="60000" step="0.1" value="0" /></label><button id="apply-runtime-config" type="button" class="btn-secondary">Übernehmen</button></div> | |
| <small>Beeinflusst das Tempo, nicht die wissenschaftliche Tick-Reihenfolge.</small> | |
| </div> | |
| </div> | |
| </section> | |
| <section class="control-stage" id="control-execution"> | |
| <div class="control-stage-heading"><span>EXECUTION</span><h3>Runtime steuern</h3><p>Lebenszyklusbefehle wirken auf den kanonischen RuntimeController.</p></div> | |
| <div class="control-group actions-group"> | |
| <div class="control-group__body actions-row"> | |
| <button id="start-button" type="button" class="btn-success" title="Kontinuierliche Ausführung starten">▶ Start</button> | |
| <button id="pause-button" type="button" class="btn-warning" title="Nach der aktuellen Tick-Grenze pausieren">⏸ Pause</button> | |
| <button id="resume-button" type="button" class="btn-primary" title="Pausierte Ausführung fortsetzen">⏵ Resume</button> | |
| <button id="stop-button" type="button" class="btn-danger" title="Runtime kontrolliert stoppen">⏹ Stop</button> | |
| <button id="snapshot-button" type="button" class="btn-info" title="Zustand an einer Tick-Grenze sichern">💾 Snapshot</button> | |
| </div> | |
| </div> | |
| <details class="self-org-section" id="self-org-section"> | |
| <summary class="self-org-summary"><h3>Strukturelle Wirkung freigeben</h3><span class="badge" id="self-org-status-badge">checking...</span></summary> | |
| <div class="self-org-controls"> | |
| <div class="self-org-row"> | |
| <label class="switch-line" for="self-org-enabled"><input id="self-org-enabled" type="checkbox" checked /><span class="switch-line__label">Policy enabled</span><span class="switch-line__help">Vorschläge zulassen</span></label> | |
| <label class="switch-line" for="self-org-dry-run"><input id="self-org-dry-run" type="checkbox" checked /><span class="switch-line__label">Dry-run mode</span><span class="switch-line__help">Keine Mutation anwenden</span></label> | |
| </div> | |
| <div class="proposal-line"><span class="proposal-label">Letzter Vorschlag</span><strong id="self-org-proposal">none</strong><span id="self-org-proposal-time" class="proposal-time"></span></div> | |
| <div class="proposal-actions"><button id="btn-undo-structural" type="button" class="btn-small">↩ Letzte Wirkung rückgängig</button><button id="btn-auto-approval" type="button" class="btn-small" data-enabled="false">Auto-Approval aktivieren</button></div> | |
| </div> | |
| </details> | |
| </section> | |
| <section class="control-stage control-effects" id="control-effects"> | |
| <div class="control-stage-heading"><span>EFFECT</span><h3>Wirkung beobachten</h3><p>Diese Werte sind das direkte Ergebnis der zuletzt ausgeführten Ursache.</p></div> | |
| <div class="runtime-metrics"> | |
| <div class="metric-item"><span class="metric-label">Aktueller Tick</span><strong class="metric-value" id="runtime-tick">0</strong></div> | |
| <div class="metric-item"><span class="metric-label">Queue</span><strong class="metric-value" id="runtime-queued">0</strong></div> | |
| <div class="metric-item"><span class="metric-label">Completed</span><strong class="metric-value" id="runtime-last-batch">0</strong></div> | |
| <div class="metric-item"><span class="metric-label">Batchdauer</span><strong class="metric-value" id="runtime-last-ms">0.0</strong></div> | |
| </div> | |
| <output id="control-message" class="control-message" aria-live="polite">Bereit für eine Ursache</output> | |
| <p class="control-effect-route">Vertiefung: <button type="button" data-overview-tab="settings">Ursachenparameter prüfen</button></p> | |
| </section> | |
| </div> | |
| </section> | |
| <!-- Operator Console (output-only) --> | |
| <section class="card operator-console" id="operator-console"> | |
| <div class="console-header"> | |
| <div class="console-title-group"><h2 id="console-title">Operator Console</h2><p class="console-subtitle">Output log, structural proposals & system events</p></div> | |
| <div class="console-status-group"><span class="status-badge" id="b5d-state-badge">idle</span><span class="tick-display" id="b5d-tick-display">0</span></div> | |
| </div> | |
| <div class="console-metrics" id="b5d-metrics" role="group"> | |
| <span class="metric">Neurons <span id="metric-neurons">0</span></span> | |
| <span class="metric">Synapses <span id="metric-synapses">0</span></span> | |
| <span class="metric">Spikes <span id="metric-spikes">0</span></span> | |
| <span class="metric">Queue <span id="metric-queue">0</span></span> | |
| </div> | |
| <details class="proposals-section" id="proposals-section"> | |
| <summary class="proposals-summary"><span class="proposals-title">Structural Proposals</span><span class="badge" id="proposals-count">0 pending</span></summary> | |
| <div id="b5d-proposals" class="proposals-list"><div class="proposal-empty">No pending proposals</div></div> | |
| </details> | |
| <div class="console-output-wrapper"> | |
| <div class="console-output-header"><span class="console-output-title">Console Log</span><span class="console-output-hint">Auto-scroll · Max 1000 entries</span></div> | |
| <div id="console-output" class="console-output" role="log" aria-live="polite"><div class="log-entry log-info"><span class="log-time">[00:00:00]</span> Brain-5D Operator Console ready</div></div> | |
| </div> | |
| <p class="operator-note">Structural proposals remain approval-gated. No autonomous mutation is enabled by this panel.</p> | |
| </section> | |
| <!-- Experiment Mode Panel --> | |
| <section class="card experiment-panel" id="experiment-panel"> | |
| <div class="panel-title"> | |
| <div> | |
| <h2 id="experiment-panel-title">🔬 Experiment Session</h2> | |
| <p class="panel-subtitle" id="experiment-panel-subtitle">Log structured experiment metadata</p> | |
| </div> | |
| <span class="experiment-badge" id="experiment-status-badge">operator</span> | |
| </div> | |
| <div class="experiment-form" id="experiment-form"> | |
| <label class="input-label" for="experiment-session-id">Session ID <input id="experiment-session-id" type="text" placeholder="e.g. exp-001" /></label> | |
| <label class="input-label" for="experiment-hypothesis">Hypothesis / Goal <input id="experiment-hypothesis" type="text" placeholder="What are you testing?" /></label> | |
| <div class="experiment-actions"> | |
| <button id="experiment-start" type="button" class="btn-success">▶ Start Session</button> | |
| <button id="experiment-stop" type="button" class="btn-danger" disabled>⏹ Stop Session</button> | |
| </div> | |
| </div> | |
| <div class="experiment-note-row"> | |
| <label class="input-label" for="experiment-note">Note <input id="experiment-note" type="text" placeholder="Add observation..." /></label> | |
| <button id="experiment-add-note" type="button" class="btn-secondary">Add Note</button> | |
| </div> | |
| <details class="experiment-sessions" id="experiment-sessions"> | |
| <summary><h3>Session History</h3></summary> | |
| <div id="experiment-session-list" class="experiment-session-list"></div> | |
| </details> | |
| </section> | |
| <!-- Structural Live Loop --> | |
| <details class="structural-live-card" id="structural-live-strip"> | |
| <summary class="structural-live-summary"><span>Structural Live Loop</span><small>evidence chain</small><span id="live-loop-badge" class="gate-badge pending">checking...</span></summary> | |
| <div class="structural-live-grid" id="structural-live-grid"> | |
| <div class="live-loop-step" id="ll-adapter"><span class="live-loop-label">RuntimeAdapter</span><span class="live-loop-status" data-proof="production_adapter_attached">—</span></div> | |
| <div class="live-loop-step" id="ll-signal"><span class="live-loop-label">HomeostasisSignal</span><span class="live-loop-status" data-proof="real_signal_generated">—</span></div> | |
| <div class="live-loop-step" id="ll-policy"><span class="live-loop-label">Policy</span><span class="live-loop-status" data-proof="policy_received_real_signal">—</span></div> | |
| <div class="live-loop-step" id="ll-proposal"><span class="live-loop-label">Proposal</span><span class="live-loop-status" data-proof="proposal_published proposal_non_mutating">—</span></div> | |
| <div class="live-loop-step" id="ll-coordinator"><span class="live-loop-label">Coordinator</span><span class="live-loop-status" data-proof="">—</span></div> | |
| <div class="live-loop-step" id="ll-approval"><span class="live-loop-label">Approval Gate</span><span class="live-loop-status" data-proof="reject_non_mutating approve_single_mutation">—</span></div> | |
| <div class="live-loop-step" id="ll-mutation"><span class="live-loop-label">Mutation</span><span class="live-loop-status" data-proof="journal_linked_to_proposal runtime_continues_after_mutation">—</span></div> | |
| <div class="live-loop-step" id="ll-journal"><span class="live-loop-label">Journal</span><span class="live-loop-status" data-proof="">—</span></div> | |
| <div class="live-loop-step" id="ll-undo"><span class="live-loop-label">Undo</span><span class="live-loop-status" data-proof="undo_restores_topology">—</span></div> | |
| <div class="live-loop-step" id="ll-replay"><span class="live-loop-label">Replay</span><span class="live-loop-status" data-proof="journal_reopen_replay_identity">—</span></div> | |
| </div> | |
| <p class="heatmap-meta" id="live-loop-meta">Requires poc_structural_live.yaml config</p> | |
| </details> | |
| </section> <!-- /tab-control --> | |
| <!-- ========================================================== --> | |
| <!-- TAB: SCIENTIFIC SETTINGS --> | |
| <!-- ========================================================== --> | |
| <section class="tab-content" id="tab-settings"> | |
| <header class="workspace-header" data-workspace="settings"> | |
| <div><span class="workspace-kicker">CONFIGURE</span><h2>Scientific Settings</h2><p>Experiment parameters with provenance, sensitivity and restart controls</p></div> | |
| <div class="workspace-status-strip"> | |
| <span>Parameters<strong id="settings-parameter-count">0</strong></span> | |
| <span>Sensitive<strong id="settings-sensitive-count">0</strong></span> | |
| <span>Mutable<strong id="settings-mutable-count">0</strong></span> | |
| <span>Pending<strong id="settings-pending-count">0</strong></span> | |
| </div> | |
| </header> | |
| <section class="settings-guardrail-grid"> | |
| <div><span>Experiment mode</span><strong id="settings-mode">operator</strong></div> | |
| <div><span>Active session</span><strong id="settings-session">none</strong></div> | |
| <div><span>Restart required</span><strong id="settings-restart">no</strong></div> | |
| <div><span>Configuration source</span><strong>runtime profile</strong></div> | |
| </section> | |
| <div class="settings-mode-selector" id="settings-mode-selector" aria-label="Experiment mode"> | |
| <span>Execution context</span> | |
| <button type="button" class="active" data-settings-mode="operator">Operator</button> | |
| <button type="button" data-settings-mode="experiment">Experiment</button> | |
| <button type="button" data-settings-mode="debug">Debug</button> | |
| </div> | |
| <div class="settings-domain-filter" id="settings-domain-filter" aria-label="Parameter domain filter"> | |
| <button type="button" class="active" data-settings-filter="">All</button> | |
| <button type="button" data-settings-filter="simulation.">Simulation</button> | |
| <button type="button" data-settings-filter="network.">Network</button> | |
| <button type="button" data-settings-filter="stdp.">Learning</button> | |
| <button type="button" data-settings-filter="homeostasis.">Homeostasis</button> | |
| <button type="button" data-settings-filter="self_organization.">Structure</button> | |
| <button type="button" data-settings-filter="storage.">Storage</button> | |
| </div> | |
| <section class="settings-note" aria-label="Scientific change policy"> | |
| <strong>Scientific change policy</strong> | |
| <span>Changes are staged before apply. Sensitive values retain provenance; fixed values require restart.</span> | |
| </section> | |
| <section class="card parameter-inspector-card" id="parameter-inspector-card"> | |
| <div class="panel-title"> | |
| <div><h2>🔧 Parameter Inspector</h2><p class="panel-subtitle">Current, default and pending parameter values</p></div> | |
| <div class="parameter-inspector__toolbar"> | |
| <input type="search" id="parameter-search" placeholder="Filter parameters…" /> | |
| <button id="parameter-reload" type="button" class="btn-secondary">🔄 Reload</button> | |
| </div> | |
| </div> | |
| <div class="parameter-table-wrap"> | |
| <table class="parameter-table" id="parameter-table"> | |
| <thead> | |
| <tr> | |
| <th>Parameter</th> | |
| <th>Current</th> | |
| <th>Pending</th> | |
| <th>Default</th> | |
| <th>Source</th> | |
| <th>Mutable</th> | |
| <th>Restart</th> | |
| <th>Actions</th> | |
| </tr> | |
| </thead> | |
| <tbody id="parameter-table-body"></tbody> | |
| </table> | |
| </div> | |
| <div class="pending-changes-bar" id="pending-changes-bar"> | |
| <div class="pending-changes-bar__info"> | |
| <strong id="pending-count">0</strong> pending change(s) | |
| <span id="pending-restart-hint" class="pending-hint" style="display:none;">⚠️ At least one change requires restart</span> | |
| </div> | |
| <div class="pending-changes-bar__actions"> | |
| <button id="pending-apply" type="button" class="btn-primary">✓ Apply</button> | |
| <button id="pending-save-profile" type="button" class="btn-success">✓ Apply + Save Profile</button> | |
| <button id="pending-cancel" type="button" class="btn-secondary">✕ Cancel</button> | |
| </div> | |
| </div> | |
| <details class="change-history" id="change-history"> | |
| <summary><h3>Change History</h3></summary> | |
| <div id="change-history-list" class="change-history-list"></div> | |
| </details> | |
| </section> | |
| </section> <!-- /tab-settings --> | |
| <!-- ========================================================== --> | |
| <!-- TAB: EMBODIMENT --> | |
| <!-- ========================================================== --> | |
| <section class="tab-content" id="tab-embodiment"> | |
| <header class="workspace-header" data-workspace="embodiment"> | |
| <div><span class="workspace-kicker">LIVING SYSTEM</span><h2>Brain-5D Embodiment</h2><p>Alle publizierten Quellen und Funktionen als ein lebender Wahrnehmungs-Aktions-Körper</p></div> | |
| <div class="workspace-status-strip"> | |
| <span>Environment<strong id="embodiment-kind">unconfigured</strong></span> | |
| <span>Sensors<strong id="embodiment-sensors">0</strong></span> | |
| <span>Actuators<strong id="embodiment-actuators">0</strong></span> | |
| <span>Episode<strong id="embodiment-episode">0</strong></span> | |
| </div> | |
| </header> | |
| <section class="embodiment-living-map embodiment-anatomy" id="embodiment-living-map" data-system-state="idle" aria-label="Dynamische Embodiment-Anatomie"> | |
| <div class="anatomy-zone anatomy-senses" data-detail-key="senses" tabindex="0" role="button"> | |
| <header><span class="zone-index">01</span><div><span class="zone-kicker">EINGÄNGE</span><h3>Sinne</h3><p>Alles, was die Umwelt meldet</p></div><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="sensor"><span>IN</span></label></header> | |
| <div class="sense-orbit"><i class="sense-node" title="Visuelles Eingangssignal">VIS</i><i class="sense-node" title="Akustisches Eingangssignal">AUD</i><i class="sense-node" title="Textuelles Eingangssignal">TXT</i><i class="sense-node" title="EnvironmentObservation">ENV</i><span class="orbit-line"></span></div> | |
| <dl class="anatomy-stats"><div><dt>verbundene Sinne</dt><dd id="being-sensors">0</dd></div><div><dt>letztes Signal</dt><dd id="embodiment-last-text">—</dd></div><div><dt>Umgebung</dt><dd id="being-environment">unconfigured</dd></div><div><dt>Werte</dt><dd id="embodiment-sensor-detail">not published</dd></div><div><dt>Rückkopplung</dt><dd id="embodiment-feedback-state">not implemented</dd></div></dl> | |
| <strong class="zone-state" id="embodiment-sensor-state">Not connected</strong> | |
| </div> | |
| <figure class="organism-core brain-database" data-detail-key="brain" tabindex="0" role="button" aria-labelledby="organism-caption"> | |
| <div class="organism-field" aria-hidden="true"><i></i><i></i><i></i></div> | |
| <img class="brain5d-being" src="/assets/brain5d-being.svg" alt=""> | |
| <section class="runtime-clock-panel" aria-labelledby="runtime-clock-title"> | |
| <header><div><span class="workspace-kicker">RUNTIME CLOCK</span><h3 id="runtime-clock-title">Simulation Speed</h3></div><strong id="runtime-clock-mode">MAX</strong></header> | |
| <label class="runtime-clock-control" for="runtime-clock-target">Target <output id="runtime-clock-target-value">MAX</output><input id="runtime-clock-target" type="range" min="0" max="5" step="1" value="5" aria-label="Simulation speed target"></label> | |
| <div class="runtime-clock-readout"><span>Achieved <b id="runtime-clock-achieved">—</b></span><span>Simulation <b id="runtime-clock-ratio">—</b></span><span>Tick duration <b id="runtime-clock-latency">—</b></span><span>Max <b id="runtime-clock-max">—</b></span><span>Load <b id="runtime-clock-load">—</b></span><span>Jitter <b id="runtime-clock-jitter">—</b></span><span>Status <b id="runtime-clock-status">—</b></span><span>Top phase <b id="runtime-clock-phase">—</b></span><span>Profile <b id="runtime-clock-phases">—</b></span></div> | |
| </section> | |
| <div class="organism-node-key" aria-label="Sichtbare Pipeline-Elemente"> | |
| <span title="Sensor: Eingang aus einem Adapter">SENSOR</span> | |
| <span title="Encoder: SensorFrame zu neuronalen Strömen">ENCODER</span> | |
| <span title="Brain-5D SNN: neuronaler Zustand">SNN</span> | |
| <span title="Decoder: neuronales Ergebnis zu ActionCommand">DECODER</span> | |
| <span title="Actuator: autorisierter Ausgang">ACTUATOR</span> | |
| <span title="Feedback: EnvironmentObservation nach einer Aktion">FEEDBACK</span> | |
| </div> | |
| <div class="brain-core-mark"><span class="core-pulse"></span><span class="core-label">BRAIN-5D</span><strong>NEURONALE<br>DATENBANK</strong><small id="being-core-state">idle</small><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="snn"><span>AKTIV</span></label></div> | |
| <div class="brain-core-metrics"><span><b id="being-neurons">0</b> Neuronen</span><span><b id="being-synapses">0</b> Synapsen</span><span>Tick <b id="being-tick">0</b></span></div> | |
| <div class="organism-vital"><span class="vital-ring"></span><strong id="being-system-status">IDLE</strong><small id="being-vital-caption">live telemetry</small></div> | |
| <figcaption id="organism-caption"><strong>VERARBEITUNG</strong><span id="embodiment-readiness">No environment adapter is configured.</span></figcaption> | |
| </figure> | |
| <div class="anatomy-zone anatomy-actuators" data-detail-key="actuators" tabindex="0" role="button"> | |
| <header><span class="zone-index">03</span><div><span class="zone-kicker">AUSGÄNGE</span><h3>Extremitäten</h3><p>Alles, was das Wesen verändern kann</p></div><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="actuator"><span>OUT</span></label></header> | |
| <div class="limb-stack"><i title="Bewegungsausgang">MOVE</i><i title="Greifausgang">GRIP</i><i title="Sprachausgang; nur bei vorhandenem Adapter">SPEAK</i><i title="Schreibausgang; nur bei vorhandenem Adapter">WRITE</i></div> | |
| <dl class="anatomy-stats"><div><dt>veränderbare Aktoren</dt><dd id="being-actuators">0</dd></div><div><dt>letzte Aktion</dt><dd id="embodiment-action-detail">—</dd></div><div><dt>Aktionwerte</dt><dd id="embodiment-actuator-detail">not published</dd></div><div><dt>Reward</dt><dd id="embodiment-last-reward">0.000</dd></div></dl> | |
| <strong class="zone-state" id="embodiment-actuator-state">Not connected</strong> | |
| </div> | |
| <section class="anatomy-inner" data-detail-key="inner" tabindex="0" role="button" aria-label="Innere Zustände und Regulation"> | |
| <header><span class="zone-index">02</span><div><span class="zone-kicker">INNERES ERLEBEN</span><h3>Innere Zustände</h3></div><span id="being-homeostasis" class="inner-status">disabled</span><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="feedback"><span>LOOP</span></label></header> | |
| <div class="inner-state-grid"><span><b id="being-energy">0.000</b><small>ENERGIE</small></span><span><b id="being-rate">0.00 Hz</b><small>AKTIVITÄT</small></span><span><b id="being-synchrony">0.000</b><small>SYNCHRONITÄT</small></span><span><b id="being-burst">0.000</b><small>BURST</small></span><span><b id="being-active">0</b><small>AKTIVE NEURONEN</small></span><span><b id="being-stdp">0</b><small>PLASTIZITÄT</small></span></div> | |
| <div class="inner-detail"><span>Rate-Fehler <b id="being-rate-error">0.000 Hz</b></span><span>Schwellenanpassung <b id="being-threshold">0.000</b></span><span>Spikes / Tick <b id="being-spikes">0</b></span><span>Episode Reward <b id="embodiment-episode-reward">0.000</b></span></div> | |
| </section> | |
| </section> | |
| <section class="connection-manager" aria-labelledby="connection-manager-title"> | |
| <header> | |
| <div><span class="workspace-kicker">DYNAMISCHE KÖRPERGRENZE</span><h3 id="connection-manager-title">Verbindungsmanager</h3></div> | |
| <div class="connection-summary"> | |
| <span>Erkannt <strong id="connection-available">0</strong></span> | |
| <span>Autorisiert <strong id="connection-authorized">0</strong></span> | |
| <span>Aktiv <strong id="connection-active">0</strong></span> | |
| </div> | |
| </header> | |
| <div class="connection-graph" id="connection-graph" role="list" aria-live="polite"> | |
| <p class="connection-empty">Verbindungen werden erkannt …</p> | |
| </div> | |
| </section> | |
| <section class="embodiment-system-strip" aria-label="Weitere Systemquellen und Funktionen"> | |
| <article data-detail-key="signal" tabindex="0" role="button"><span>SIGNAL-BRÜCKE</span><strong id="being-signal-frames">0 frames</strong><small id="being-signal-regions">0 Regionen</small></article> | |
| <article data-detail-key="language" tabindex="0" role="button"><span>SPRACHORGAN</span><strong id="being-language-state">disabled</strong><small id="being-language-model">kein Modell</small></article> | |
| <article data-detail-key="knowledge" tabindex="0" role="button"><span>WISSENSAUFNAHME</span><strong id="being-knowledge-items">0 verarbeitet</strong><small id="being-knowledge-sources">0 Quellen</small></article> | |
| <article data-detail-key="structure" tabindex="0" role="button"><span>STRUKTUR</span><strong id="being-structural-changes">0 Änderungen</strong><small id="being-growth-budget">0 / 0 Budget</small></article> | |
| <article data-detail-key="storage" tabindex="0" role="button"><span>SPEICHER</span><strong id="being-storage-state">unavailable</strong><small id="being-storage-detail">—</small></article> | |
| <article data-detail-key="history" tabindex="0" role="button"><span>LOOP-EVIDENZ</span><strong id="embodiment-history-state">unavailable</strong><small><b id="embodiment-history-count">0</b> Samples · Tick <b id="embodiment-history-tick">—</b></small></article> | |
| </section> | |
| <section class="embodiment-loop" data-detail-key="adapter-loop" tabindex="0" role="button" aria-label="Closed perception action loop"> | |
| <div class="embodiment-loop-node" data-loop-node="environment" title="Environment: Quelle der EnvironmentObservation"><span>1</span><strong>Environment</strong><small id="embodiment-loop-environment">unconfigured</small></div> | |
| <i>→</i><div class="embodiment-loop-node" data-loop-node="sensor" title="Sensor: Eingang aus einem realen oder digitalen Adapter"><span>2</span><strong>Sensor</strong><small id="embodiment-loop-sensor">unavailable</small><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="sensor"><span>IN</span></label></div> | |
| <i>→</i><div class="embodiment-loop-node" data-loop-node="encoder" title="Encoder: SensorFrame wird zu neuronalen Strömen"><span>3</span><strong>Encoder</strong><small id="embodiment-loop-encoder">not reported</small><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="encoder"><span>ON</span></label></div> | |
| <i>→</i><div class="embodiment-loop-node" data-loop-node="snn" title="Brain-5D SNN: neuronaler Datenbankzustand verarbeitet den Strom"><span>4</span><strong>Brain-5D SNN</strong><small id="embodiment-loop-snn">idle</small></div> | |
| <i>→</i><div class="embodiment-loop-node" data-loop-node="decoder" title="Decoder: neuronales Ergebnis wird zu ActionCommand"><span>5</span><strong>Decoder</strong><small id="embodiment-loop-decoder">not reported</small><label class="pipeline-toggle"><input type="checkbox" data-pipeline-toggle="decoder"><span>ON</span></label></div> | |
| <i>→</i><div class="embodiment-loop-node" data-loop-node="actuator" title="Actuator: autorisierter Ausgang mit Sicherheitsgrenze"><span>6</span><strong>Actuator</strong><small id="embodiment-loop-actuator">unavailable</small></div> | |
| <i title="Feedback-Schleife: EnvironmentObservation zurück zum System">↻</i> | |
| <p class="embodiment-contract-note" id="embodiment-contract-note">Sensor, actuator and environment detail payloads are intentionally unavailable until adapters publish them.</p> | |
| </section> | |
| <span id="embodiment-last-action" hidden>—</span> | |
| </section> | |
| <div class="embodiment-detail-modal" id="embodiment-detail-modal" hidden> | |
| <div class="embodiment-detail-dialog" role="dialog" aria-modal="true" aria-labelledby="embodiment-detail-title"> | |
| <header><div><span class="workspace-kicker">LIVE DATEN / READ ONLY</span><h2 id="embodiment-detail-title">Elementdetails</h2></div><button type="button" class="modal-close" id="embodiment-detail-close" aria-label="Details schließen">×</button></header> | |
| <p id="embodiment-detail-summary"></p> | |
| <dl id="embodiment-detail-fields" class="embodiment-detail-fields"></dl> | |
| <footer><span id="embodiment-detail-source">Quelle: aktueller Dashboard-Snapshot</span><button type="button" class="btn-secondary" id="embodiment-detail-close-footer">Schließen</button></footer> | |
| </div> | |
| </div> | |
| <!-- ========================================================== --> | |
| <!-- TAB: RESEARCH & DOCS (Unified File Manager) --> | |
| <!-- ========================================================== --> | |
| <section class="tab-content" id="tab-research"> | |
| <header class="workspace-header" data-workspace="research"> | |
| <div><span class="workspace-kicker">EVIDENCE</span><h2>Research Workspace</h2><p>Registry, experiments, generated evidence and project documentation</p></div> | |
| <div class="workspace-status-strip"> | |
| <span>Registry<strong id="research-workspace-registry">0</strong></span> | |
| <span>Experiments<strong id="research-workspace-experiments">0</strong></span> | |
| <span>Generated<strong id="research-workspace-generated">0</strong></span> | |
| <span>Schemas<strong id="research-workspace-schemas">0</strong></span> | |
| </div> | |
| </header> | |
| <nav class="research-lanes" id="research-lanes" aria-label="Research quick access"> | |
| <button type="button" data-research-workflow>Experiment Runner</button> | |
| <button type="button" class="active" data-research-source="research" data-research-query="">All Research</button> | |
| <button type="button" data-research-source="research" data-research-query="EVID">Evidence</button> | |
| <button type="button" data-research-source="research" data-research-query="AIRR">AI Reports</button> | |
| <button type="button" data-research-source="research" data-research-query="EXP">Experiments</button> | |
| <button type="button" data-research-source="research" data-research-query="MATRIX">Matrices</button> | |
| <button type="button" data-research-source="docs" data-research-query="">Documentation</button> | |
| <button type="button" data-research-source="docs" data-research-query="RECURSIVE_CAUSAL_LOOPBACKS">Loopbacks</button> | |
| <button type="button" data-research-source="docs" data-research-query="SELF_MODEL">Self-model</button> | |
| </nav> | |
| <section class="research-focus-rail" aria-label="Current research focus"> | |
| <article><span>ALPHA.8</span><strong>Adaptive body</strong><small>Interoception · Drives · Morphology</small></article> | |
| <article><span>CAUSAL LOOPBACKS</span><strong>Recursive regulation</strong><small>Observation · prediction · feedback</small></article> | |
| <article><span>SELF-MODEL</span><strong>Functional thinking</strong><small>Claims remain evidence-gated</small></article> | |
| </section> | |
| <section class="experiment-workflow" id="experiment-workflow" aria-label="Experiment Runner"> | |
| <header class="experiment-workflow-header"> | |
| <div><span class="workspace-kicker">CONTROLLED RUN</span><h3>Experiment Runner</h3></div> | |
| <output id="workflow-status" data-state="loading" aria-live="polite">Lade Registry</output> | |
| </header> | |
| <ol class="workflow-steps" aria-label="Experiment workflow"> | |
| <li>Forschungsfrage</li><li>Bedingungen</li><li>Experiment</li><li>Ausfuehren</li><li>Bericht</li><li>Ergebnis</li> | |
| </ol> | |
| <div class="workflow-form-grid"> | |
| <label>Protokoll<select id="workflow-protocol"><option value="science_suite_v1">Science PING: Impulsantwort</option><option value="science_all_v1">Science ALL: gesamte Science-Suite</option><option value="science_time_v1">Science TIME: Tick-Leiter</option><option value="science_5d_v1">Science 5D: Dimensionsvergleich</option><option value="runtime_ticks_v1">Runtime-Ticks: kontrollierter Lauf</option><option value="stdp_pair_timing_v1">STDP Pair-Timing: registriert</option><option value="batch_workflow_v1">Experiment-Workflow: mehrere Protokolle</option></select></label> | |
| <label>Forschungsfrage<select id="workflow-question"></select></label> | |
| <label>Hypothese<select id="workflow-hypothesis"></select></label> | |
| <label>Experiment-ID (optional)<input id="workflow-experiment-id" type="text" placeholder="automatisch: EXP-GEN-0001"></label> | |
| <label>Titel<input id="workflow-title" type="text" placeholder="Kurzer, reproduzierbarer Versuchstitel"></label> | |
| <label>Mess-Ticks<input id="workflow-ticks" type="number" min="1" max="1000000" value="8"><small class="workflow-field-hint">PING/5D: Messdauer; TIME: oberste Tick-Stufe</small></label> | |
| <label>Seeds<input id="workflow-seeds" type="text" inputmode="numeric" placeholder="42,43,44"><small class="workflow-field-hint">Kommagetrennt oder Bereich, z.B. 0-29</small></label> | |
| <label>Bedingungsvorlage<select id="workflow-condition-profile"><option value="standard">Standard</option><option value="replication">Replikation</option><option value="sensitivity">Sensitivitaet</option><option value="pilot">Pilot</option><option value="short">Kurzlauf</option></select></label> | |
| <label class="workflow-wide">Bedingungen<textarea id="workflow-conditions" rows="3" placeholder="Seed, Konfiguration, Replikate und Abbruchkriterien"></textarea></label> | |
| <label class="workflow-wide">Beobachtung / Hinweise<textarea id="workflow-notes" rows="2" placeholder="Optionale Beobachtungen; keine KI-Ausgabe wird als Evidenz verwendet"></textarea></label> | |
| </div> | |
| <div class="workflow-progress-row" aria-live="polite"> | |
| <span id="workflow-progress-label">Bereit</span> | |
| <div id="workflow-progress-track" class="workflow-progress-track" role="progressbar" aria-label="Experimentfortschritt" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><b id="workflow-progress-bar"></b></div> | |
| <strong id="workflow-progress-value">0%</strong> | |
| </div> | |
| <div class="workflow-actions"><button id="workflow-run" type="button" class="btn-success">Ausfuehren und Bericht eintragen</button><button id="workflow-batch-open" type="button" class="btn-secondary">Experiment-Workflow</button><pre id="workflow-result" aria-live="polite"></pre></div> | |
| </section> | |
| <dialog id="workflow-batch-dialog" class="workflow-batch-dialog" aria-labelledby="workflow-batch-title"> | |
| <form method="dialog" id="workflow-batch-form"> | |
| <header><div><span class="workspace-kicker">CONTROLLED BATCH</span><h2 id="workflow-batch-title">Experiment-Workflow</h2><p>Protokolle auswählen, Optionen prüfen und den Gesamtbericht erzeugen.</p></div><button value="cancel" type="submit" class="modal-close" aria-label="Workflow schließen">×</button></header> | |
| <label>Workflow-ID (optional)<input id="workflow-batch-id" placeholder="automatisch: EXP-BATCH-…"></label> | |
| <p class="workflow-batch-plan-note">Der Workflow führt die ausgewählten Experimente nacheinander aus und verwendet automatisch die registrierten Seeds/Ticks. Explorative Läufe nutzen die Runtime-Diagnosevorgaben.</p> | |
| <label>Fallback-Ticks<input id="workflow-batch-ticks" type="number" min="1" max="1000000" value="1000"></label> | |
| <label>Fallback-Seeds<input id="workflow-batch-seeds" value="42-44" placeholder="42-44"></label> | |
| <label>Titelpräfix<input id="workflow-batch-title-prefix" value="Experiment workflow"></label> | |
| <fieldset><legend>Protokolle</legend><div id="workflow-batch-protocols" class="workflow-batch-protocols"></div></fieldset> | |
| <p id="workflow-batch-status" class="heatmap-meta" aria-live="polite"></p> | |
| <pre id="workflow-batch-result" class="workflow-batch-result" aria-live="polite"></pre> | |
| <footer><button value="cancel" type="submit" class="btn-secondary">Abbrechen</button><button id="workflow-batch-start" type="button" class="btn-success">Auswahl starten</button></footer> | |
| </form> | |
| </dialog> | |
| <!-- Source selector toolbar --> | |
| <div class="fm-toolbar"> | |
| <div class="fm-source-selector"> | |
| <button class="fm-source-btn active" data-source="research">🔬 Research</button> | |
| <button class="fm-source-btn" data-source="docs">📄 Docs</button> | |
| </div> | |
| <label class="fm-experiment-sort" for="fm-experiment-sort">Experimente | |
| <select id="fm-experiment-sort"> | |
| <option value="newest">Neueste zuerst</option> | |
| <option value="oldest">Aelteste zuerst</option> | |
| </select> | |
| </label> | |
| <div class="fm-search-bar"> | |
| <input type="text" id="fm-search" placeholder="Search files…" /> | |
| <button id="fm-search-btn" title="Search">🔍</button> | |
| </div> | |
| <div id="fm-stats" class="fm-stats">—</div> | |
| <button id="fm-open-os" class="fm-os-btn" title="Open folder in file explorer">📂</button> | |
| <button id="fm-refresh" class="fm-refresh-btn" title="Refresh tree">🔄</button> | |
| </div> | |
| <!-- Breadcrumb navigation --> | |
| <div class="fm-breadcrumb" id="fm-breadcrumb"> | |
| <span class="fm-bc-item fm-bc-root" data-path="">📁 <span class="fm-bc-source-label">research/</span></span> | |
| </div> | |
| <!-- File-type filter chips --> | |
| <div class="fm-filters" id="fm-filters"> | |
| <button class="fm-filter-chip active" data-ext="all">All</button> | |
| <button class="fm-filter-chip" data-ext=".md">Markdown</button> | |
| <button class="fm-filter-chip" data-ext=".py">Python</button> | |
| <button class="fm-filter-chip" data-ext=".json">JSON</button> | |
| <button class="fm-filter-chip" data-ext=".yaml,.yml">YAML</button> | |
| <button class="fm-filter-chip" data-ext=".csv">CSV</button> | |
| <button class="fm-filter-chip" data-ext=".txt">Text</button> | |
| <button class="fm-filter-chip" data-ext=".bib">BibTeX</button> | |
| <button class="fm-filter-chip" data-ext=".patch">Patch</button> | |
| <button class="fm-filter-chip" data-ext=".toml,.cfg,.ini">Config</button> | |
| <button class="fm-filter-chip" data-ext=".png,.jpg,.svg,.webp">Images</button> | |
| <button class="fm-filter-chip" data-ext=".pdf,.docx,.xlsx">Office</button> | |
| </div> | |
| <!-- Main split layout --> | |
| <div class="fm-layout"> | |
| <!-- Sidebar: file tree + recent files --> | |
| <div class="fm-sidebar"> | |
| <div class="fm-sidebar-header"> | |
| <span class="fm-sidebar-title" id="fm-sidebar-title">📁 Files</span> | |
| <div class="fm-sidebar-actions"> | |
| <button id="fm-toggle-recent" class="fm-sidebar-action-btn" title="Recent files">🕐</button> | |
| </div> | |
| </div> | |
| <div id="fm-tree" class="fm-tree"> | |
| <span class="fm-loading">Loading directory tree…</span> | |
| </div> | |
| <!-- Recent files panel (collapsible) --> | |
| <div class="fm-recent" id="fm-recent" style="display:none;"> | |
| <div class="fm-recent-header"> | |
| <span>🕐 Recent</span> | |
| <button id="fm-clear-recent" class="fm-sidebar-action-btn" title="Clear recent">✕</button> | |
| </div> | |
| <div id="fm-recent-list" class="fm-recent-list"></div> | |
| </div> | |
| </div> | |
| <!-- Viewer: Overlay panel that opens on top of sidebar when a file is clicked --> | |
| <div class="fm-viewer fm-viewer-hidden" id="fm-viewer"> | |
| <div class="fm-placeholder"> | |
| <p>Select a file from the tree to preview.</p> | |
| <p class="fm-hint">Supported: Markdown, Text, JSON, CSV, YAML, Python, Images, Videos, DOCX, XLSX, PDF</p> | |
| </div> | |
| </div> | |
| </div> | |
| </section> <!-- /tab-research --> | |
| <!-- ========================================================== --> | |
| <!-- TAB: RELEASE --> | |
| <!-- ========================================================== --> | |
| <section class="tab-content" id="tab-gate"> | |
| <header class="workspace-header" data-workspace="release"> | |
| <div><span class="workspace-kicker">VERIFY</span><h2>Release Workspace</h2><p>Source freeze, scientific evidence, CI and release decision</p></div> | |
| <div class="workspace-status-strip"> | |
| <span>Scientific<strong id="release-workspace-scientific">unknown</strong></span> | |
| <span>CI<strong id="release-workspace-ci">unknown</strong></span> | |
| <span>Readiness<strong id="release-workspace-readiness">not_ready</strong></span> | |
| <span>Blockers<strong id="release-workspace-blockers">0</strong></span> | |
| </div> | |
| </header> | |
| <nav class="workspace-view-tabs" data-workspace-views="release" aria-label="Release views"> | |
| <button type="button" class="active" data-workspace-view="gate">Gate</button> | |
| <button type="button" data-workspace-view="releases">Releases 0.1 bis jetzt</button> | |
| <button type="button" data-workspace-view="preview">Aktuelle Vorschau</button> | |
| <button type="button" data-workspace-view="timeline">Timeline chronologisch</button> | |
| <button type="button" data-workspace-view="documents">TODO / CHANGELOG / ROADMAP</button> | |
| </nav> | |
| <div class="release-board"> | |
| <section class="release-view-panel" data-release-view="releases" data-workspace-panel hidden> | |
| <div class="release-header"> | |
| <h2>Releases <span id="release-range">0.1 bis aktuell</span></h2> | |
| <p class="release-subtitle">Registrierte Releases vom frühesten verfügbaren Versionsstand bis zum aktuellen Entwicklungsstand.</p> | |
| </div> | |
| <div class="release-tree" id="release-tree"></div> | |
| </section> | |
| <section class="release-view-panel release-preview-panel" data-release-view="preview" data-workspace-panel hidden aria-labelledby="release-preview-title"> | |
| <div class="release-header"> | |
| <span class="workspace-kicker">CURRENT RELEASE</span> | |
| <h2 id="release-preview-title">Aktuelle Release-Vorschau</h2> | |
| <p class="release-subtitle">Der offene Release-Knoten mit Scope, Hinweis und nächstem Abschlusskriterium.</p> | |
| </div> | |
| <div id="release-preview" class="release-preview-content"><p class="release-timeline-empty">Loading...</p></div> | |
| </section> | |
| <section class="release-view-panel release-timeline-panel" data-release-view="timeline" data-workspace-panel hidden aria-labelledby="release-timeline-title"> | |
| <div class="release-timeline-header"> | |
| <div> | |
| <span class="workspace-kicker">PROJECT RECORD</span> | |
| <h2 id="release-timeline-title">Product Timeline</h2> | |
| <p class="release-subtitle">Chronologisch vom frühesten dokumentierten Release bis zum aktuellen Stand und offenen Backlog.</p> | |
| </div> | |
| <span class="release-timeline-count" id="release-timeline-count">Loading...</span> | |
| </div> | |
| <div class="release-timeline-sources" id="release-timeline-sources" aria-label="Timeline sources"></div> | |
| <div class="release-timeline-list" id="release-timeline-list" aria-live="polite"></div> | |
| </section> | |
| <section class="release-view-panel release-documents-panel" data-release-view="documents" data-workspace-panel hidden aria-labelledby="release-documents-title"> | |
| <div class="release-header"> | |
| <span class="workspace-kicker">PROJECT SOURCES</span> | |
| <h2 id="release-documents-title">TODO, CHANGELOG und ROADMAP</h2> | |
| <p class="release-subtitle">Die Release-Ansicht bleibt mit den kanonischen Quelldokumenten verknüpft.</p> | |
| </div> | |
| <div class="release-documents-grid"> | |
| <article class="release-document-card"><header><h3>TODO</h3><button type="button" data-release-document="08-roadmap/TODO.md">Im File Viewer öffnen</button></header><p>Offene Arbeit und aktueller Backlog.</p></article> | |
| <article class="release-document-card"><header><h3>CHANGELOG</h3><button type="button" data-release-document="07-changelog/CHANGELOG.md">Im File Viewer öffnen</button></header><p>Historische Änderungen und Release-Einträge.</p></article> | |
| <article class="release-document-card"><header><h3>ROADMAP</h3><button type="button" data-release-document="08-roadmap/ROADMAP.md">Im File Viewer öffnen</button></header><p>Geplante Entwicklung und nächste Schritte.</p></article> | |
| </div> | |
| </section> | |
| <section class="release-view-panel release-gate-panel" data-release-view="gate" data-workspace-panel aria-labelledby="release-gate-title"> | |
| <div class="gate-board" id="release-gate-title"> | |
| <div class="gate-header"> | |
| <h2>Current Gate</h2> | |
| <p class="gate-subtitle">Scientific evidence, source-freeze CI and release readiness are evaluated independently.</p> | |
| <p class="gate-legend"><strong>Live</strong> = current runtime config state · <strong>Maturity</strong> = IMPLEMENTED → INTEGRATED → VERIFIED → EVIDENCED · <strong>Gate</strong> = release verification result. Runtime disabled ≠ gate failed. Runtime disabled ≠ gate passed.</p> | |
| <button id="gate-refresh" type="button" class="btn-secondary">Re-check</button> | |
| </div> | |
| <div class="gate-overall-grid" aria-label="Gate overview"> | |
| <div class="gate-overall-row"><strong>Scientific Gate</strong><span class="gate-badge pending" id="gate-scientific">pending</span></div> | |
| <div class="gate-overall-row"><strong>Continuous Integration</strong><span class="gate-badge pending" id="gate-ci">unknown</span></div> | |
| <div class="gate-overall-row"><strong>Release Readiness</strong><span class="gate-badge pending" id="gate-overall">not_ready</span></div> | |
| </div> | |
| <div class="gate-section gate-section-live" data-gate-section="summary"><h3>Live Runtime Profile <span class="gate-section-hint">current config</span></h3><div id="gate-live-list" class="gate-live-grid"></div></div> | |
| <div class="gate-sections-grid"> | |
| <section class="gate-section" data-gate-section="gate-a"><h3>Gate A <span class="gate-section-hint">Technical Integration</span></h3><div id="gate-a-list" class="gate-criteria-table"></div></section> | |
| <section class="gate-section" data-gate-section="gate-b"><h3>Gate B <span class="gate-section-hint">Verification</span></h3><div id="gate-b-list" class="gate-criteria-table"></div></section> | |
| <section class="gate-section" data-gate-section="gate-c"><h3>Gate C <span class="gate-section-hint">Scientific Baseline</span></h3><div id="gate-c-list" class="gate-criteria-table"></div></section> | |
| </div> | |
| </div> | |
| </section> | |
| </div> | |
| </section> <!-- /tab-gate --> | |
| <dialog id="gate-detail-dialog" class="gate-detail-dialog" aria-labelledby="gate-detail-title"> | |
| <div class="gate-detail-header"> | |
| <div><span class="workspace-kicker">RELEASE GATE</span><h2 id="gate-detail-title">Criterion details</h2></div> | |
| <button id="gate-detail-close" class="modal-close" type="button" aria-label="Close">×</button> | |
| </div> | |
| <div id="gate-detail-body" class="gate-detail-body"></div> | |
| </dialog> | |
| </main> | |
| <!-- Health / Problems Drawer (Operator Workbench) --> | |
| <aside id="health-drawer" class="health-drawer"> | |
| <div class="health-drawer__header"> | |
| <h3>Health & Problems</h3> | |
| <button class="health-drawer__close" id="health-drawer-close" aria-label="Close">×</button> | |
| </div> | |
| <div class="health-drawer__counts" id="health-counts"></div> | |
| <div class="health-drawer__section"> | |
| <h4>Problems</h4> | |
| <div class="health-problem-list" id="health-problem-list"></div> | |
| </div> | |
| <div class="health-drawer__section"> | |
| <h4>Components</h4> | |
| <div class="health-component-list" id="health-component-list"></div> | |
| </div> | |
| </aside> | |
| <!-- Integration Status Modal --> | |
| <div id="integration-modal" class="modal-overlay" style="display:none;"> | |
| <div class="modal-content"> | |
| <div class="modal-header"><h2>Integration Status – Alle Versionen</h2><button class="modal-close" id="modal-close-btn" aria-label="Close">×</button></div> | |
| <div class="modal-body" id="integration-modal-body"><div class="modal-loading">Lade Integrationsdaten...</div></div> | |
| <div class="modal-footer"><button class="btn-secondary" id="modal-refresh-btn">Aktualisieren</button><button class="btn-primary" id="modal-close-btn2">Schließen</button></div> | |
| </div> | |
| </div> | |
| <dialog id="context-help" class="context-help"> | |
| <div class="context-help-header"><strong id="context-help-title">Help</strong><button id="context-help-close" class="icon-btn" aria-label="Hilfe schließen">×</button></div> | |
| <p id="context-help-text"></p> | |
| </dialog> | |
| <!-- Footer --> | |
| <footer class="site-footer"> | |
| <div class="footer-segment footer-product"> | |
| <strong>Brain-5D</strong><span>v<span id="footer-version">loading</span></span> | |
| </div> | |
| <div class="footer-segment footer-runtime"> | |
| <div class="footer-runtime-copy"> | |
| <span>Runtime</span><strong class="status-pill" id="system-status">offline</strong> | |
| <small>Tick <span id="footer-runtime-tick">—</span></small> | |
| </div> | |
| <div class="footer-runtime-actions" aria-label="Runtime-Steuerung"> | |
| <button id="footer-runtime-start" type="button" title="Runtime starten" aria-label="Runtime starten">▶</button> | |
| <button id="footer-runtime-pause" type="button" title="Runtime pausieren" aria-label="Runtime pausieren">Ⅱ</button> | |
| <button id="footer-runtime-stop" type="button" title="Runtime stoppen" aria-label="Runtime stoppen">■</button> | |
| </div> | |
| <small class="footer-command-feedback" id="footer-command-feedback" aria-live="polite">bereit</small> | |
| </div> | |
| <div class="footer-vitals" aria-label="Live Aktivität und Ressourcen"> | |
| <div class="footer-vital"><span>Aktivität</span><strong id="footer-activity-value">—</strong><i><b id="footer-activity-bar"></b></i></div> | |
| <div class="footer-vital"><span>Spikes</span><strong id="footer-spikes-value">—</strong><i><b id="footer-spikes-bar"></b></i></div> | |
| <div class="footer-vital"><span>Ressourcendruck</span><strong id="footer-pressure-value">—</strong><i><b id="footer-pressure-bar"></b></i></div> | |
| </div> | |
| <div class="footer-io" aria-label="Runtime Input und Output" aria-live="polite"> | |
| <span class="footer-io-label">I/O</span> | |
| <span><small>IN</small><strong id="footer-input-value">—</strong></span> | |
| <span><small>OUT</small><strong id="footer-output-value">—</strong></span> | |
| <em id="footer-io-state">warte auf Signal</em> | |
| </div> | |
| <div class="footer-segment footer-experiment" id="footer-experiment" data-active="false"> | |
| <span class="footer-experiment-dot"></span> | |
| <div><small>Experiment</small><strong id="footer-experiment-state">inactive</strong><small id="footer-experiment-progress">kein Lauf</small></div> | |
| <span id="footer-experiment-id">no session</span> | |
| </div> | |
| <div class="footer-segment footer-mode"> | |
| <span>Mode</span> | |
| <div class="experiment-mode-switcher" id="experiment-mode-switcher" title="Experiment mode"> | |
| <button class="mode-btn active" data-mode="operator" title="Operator mode">🎮</button> | |
| <button class="mode-btn" data-mode="experiment" title="Experiment mode">🔬</button> | |
| <button class="mode-btn" data-mode="debug" title="Debug mode">🐛</button> | |
| </div> | |
| </div> | |
| <div class="footer-segment footer-health" id="footer-status"> | |
| <!-- Health bar is rendered here by health-drawer.js --> | |
| </div> | |
| </footer> | |
| <section class="research-chat-modal" id="research-chat" hidden aria-label="Research AI chat" role="dialog" aria-modal="true" aria-labelledby="research-chat-title"> | |
| <div class="research-chat-dialog"> | |
| <aside class="chat-rooms"> | |
| <div class="chat-rooms-header"><span>CHAT ROOMS</span><div><button id="chat-room-archived" class="icon-btn" type="button" title="Archiv anzeigen" aria-label="Archiv anzeigen">▣</button><button id="chat-room-child" class="icon-btn" type="button" title="Unterchat erstellen" aria-label="Unterchat erstellen">↳</button><button id="chat-room-new" class="icon-btn" type="button" title="Neuen Chatraum erstellen" aria-label="Neuen Chatraum erstellen">+</button></div></div> | |
| <div id="chat-room-list" class="chat-room-list"></div> | |
| </aside> | |
| <div class="research-chat-panel"> | |
| <header class="research-chat-header"><div><span class="workspace-kicker">SELF-KNOWLEDGE</span><h2 id="research-chat-title">Research Assistant</h2><p>Research, Docs und Systemstatus als lesender Kontext</p></div><div class="chat-header-actions"><span class="ai-badge">AI GENERATED</span><button id="chat-settings-toggle" class="icon-btn" type="button" title="Chat-Einstellungen anzeigen" aria-label="Chat-Einstellungen anzeigen">⚙</button><button id="chat-close" class="modal-close" type="button" title="Chat schließen" aria-label="Chat schließen">×</button></div></header> | |
| <section class="chat-settings" id="chat-settings" hidden aria-label="Chat settings"><div class="chat-settings-heading"><strong>Chat settings</strong><div><span id="chat-provider-health" class="provider-health"><i></i> unknown</span><button id="chat-settings-refresh" class="btn-small" type="button">Refresh</button></div></div><div class="chat-settings-grid"><label>Provider<select id="chat-setting-provider"><option value="ollama">Ollama</option><option value="microsoft-copilot" disabled>Microsoft Copilot (OAuth erforderlich)</option></select></label><label>Model<select id="chat-setting-model"></select></label><label>Endpoint<input id="chat-setting-endpoint"></label><label>Temperature<input id="chat-setting-temperature" type="number" min="0" max="2" step="0.1"></label><label>Top P<input id="chat-setting-top-p" type="number" min="0" max="1" step="0.05"></label><label>Max tokens<input id="chat-setting-max-tokens" type="number" min="128" max="16384" step="128"></label><label>Context chars<input id="chat-setting-context" type="number" min="4000" max="120000" step="1000"></label><label><input id="chat-setting-vision" type="checkbox"> Vision aktivieren</label><label><input id="chat-setting-tools" type="checkbox"> Tools aktivieren</label><label class="chat-settings-wide">System prompt<textarea id="chat-setting-prompt" rows="3" maxlength="8000"></textarea></label><label class="chat-settings-wide">Übergabeprompt<textarea id="chat-setting-handoff" rows="3" maxlength="8000"></textarea></label></div><div class="chat-settings-actions"><button id="chat-prompt-generate" class="btn-small" type="button">Profi-Prompt einsetzen</button><button id="chat-settings-reset" class="btn-small" type="button">Standardwerte</button><button id="chat-copilot-login" class="btn-small" type="button">Microsoft anmelden</button><button id="chat-settings-save" class="btn-primary" type="button">Settings speichern</button></div><p>Der Assistent darf lesen und erklären. Ausführung und Änderungen benötigen weiterhin die expliziten System-Workflows.</p></section> | |
| <div class="research-chat-log" id="research-chat-log" aria-live="polite"></div> | |
| <form class="research-chat-form" id="research-chat-form"><label for="research-chat-input">Frage</label><textarea id="research-chat-input" rows="2" maxlength="4000" placeholder="Was ist der aktuelle Evidenzstatus von EXP-EMB-0001?"></textarea><div class="chat-form-actions"><label class="chat-mode">Antwort <select id="chat-response-mode"><option value="short">Kurz</option><option value="detailed" selected>Ausführlich</option><option value="scientific">Wissenschaftlich</option></select></label><label class="chat-web-toggle"><input id="chat-web-search" type="checkbox"> Internetquellen</label><label class="chat-web-toggle"><input id="chat-image-input" type="file" accept="image/png,image/jpeg,image/webp" multiple> Vision</label><button id="chat-speech-input" type="button" class="icon-btn" title="Spracheingabe" aria-label="Spracheingabe">●</button><button id="chat-speech-output" type="button" class="icon-btn" title="Letzte Antwort vorlesen" aria-label="Letzte Antwort vorlesen">◖</button><button type="submit" class="btn-primary">Frage senden</button></div></form> | |
| <p class="research-chat-note">Der Chat liest Research und Docs. Experimente werden nur über einen bestätigten, strukturierten Workflow ausgeführt.</p> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Scripts --> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/mammoth/1.4.21/mammoth.browser.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.8.5/d3.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/d3-graphviz/5.0.2/d3-graphviz.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/plantuml-encoder@1.4.0/dist/plantuml-encoder.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
| <script type="module" src="/formula-renderer.js"></script> | |
| <script type="module" src="/app.js"></script> | |
| </body> | |
| </html> | |