Frontend refactored to ES6 modules (no bundler): js/main.js — entry point, wires all modules js/auth.js — OIDC login, token management js/ws.js — /ws, /ws/test, /ws/trace connections + HUD handler js/chat.js — messages, send, streaming js/graph.js — Cytoscape visualization + animation js/trace.js — trace panel js/dashboard.js — workspace controls rendering js/awareness.js — state panel, sensors, meters js/tests.js — test status display js/util.js — shared utilities New 2-row layout: Top: test status | connection status Middle: Workspace | Node Details | Graph Bottom: Chat | Awareness | Trace PA routing: routes ALL tool requests to expert (DB, UI, buttons, machines) Dashboard integration test: 15/15 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
/** Trace panel: HUD event display. */
|
|
|
|
import { esc, scroll } from './util.js';
|
|
|
|
let traceEl;
|
|
|
|
export function initTrace() {
|
|
traceEl = document.getElementById('trace');
|
|
}
|
|
|
|
export function addTrace(node, event, text, cls, detail) {
|
|
if (!traceEl) return;
|
|
const line = document.createElement('div');
|
|
line.className = 'trace-line' + (detail ? ' expandable' : '');
|
|
|
|
const ts = new Date().toLocaleTimeString('de-DE', {
|
|
hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit',
|
|
fractionalSecondDigits: 1,
|
|
});
|
|
|
|
line.innerHTML =
|
|
'<span class="trace-ts">' + ts + '</span>' +
|
|
'<span class="trace-node ' + esc(node) + '">' + esc(node) + '</span>' +
|
|
'<span class="trace-event">' + esc(event) + '</span>' +
|
|
'<span class="trace-data' + (cls ? ' ' + cls : '') + '">' + esc(text) + '</span>';
|
|
|
|
traceEl.appendChild(line);
|
|
|
|
if (detail) {
|
|
const detailEl = document.createElement('div');
|
|
detailEl.className = 'trace-detail';
|
|
detailEl.textContent = detail;
|
|
traceEl.appendChild(detailEl);
|
|
line.addEventListener('click', () => detailEl.classList.toggle('open'));
|
|
}
|
|
|
|
scroll(traceEl);
|
|
}
|
|
|
|
export function clearTrace() {
|
|
if (traceEl) traceEl.innerHTML = '';
|
|
}
|