fix(diagnostic): Status-Meldung unten rechts immer wegklickbar

Das X war absichtlich versteckt, sobald ein Dienst einen Fehler meldete — es
erschien nur, wenn alles gruen war. Gerade eine Fehlermeldung blieb also
stehen. Jetzt ist das X immer da; Wegklicken vergisst Fehler- und
Fertig-Meldungen (sonst kaemen sie mit der naechsten Statusmeldung eines
anderen Dienstes wieder hoch), ein laufender Ladevorgang darf wiederkommen.

Dazu: httpx haengt an jeden Fehler "For more information check: <Mozilla-
Link>" — raus, in der Anzeige und im llm-adapter an der Quelle. Bei nur einer
Meldung stand das ❌ doppelt (grosses Symbol + Zeile) — jetzt einmal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-18 16:46:25 +02:00
co-authored by Claude Opus 5.5
parent ae79d9e8f6
commit a1aa90177d
2 changed files with 26 additions and 11 deletions
+23 -10
View File
@@ -168,7 +168,7 @@
<div style="display:flex;align-items:flex-start;gap:8px;">
<span id="service-status-icon" style="font-size:18px;line-height:1;">&#x23F3;</span>
<div id="service-status-list" style="flex:1;display:flex;flex-direction:column;gap:6px;"></div>
<button id="service-status-close" onclick="document.getElementById('service-status-banner').style.display='none'" style="background:none;border:none;color:#666680;font-size:16px;cursor:pointer;padding:0;line-height:1;display:none;">&times;</button>
<button id="service-status-close" onclick="dismissServiceStatus()" title="Schließen" style="background:none;border:none;color:#8888AA;font-size:18px;cursor:pointer;padding:0 2px;line-height:1;">&times;</button>
</div>
</div>
@@ -3829,13 +3829,19 @@
text = `${labels[s] || s}: bereit${info.model ? ' ' + info.model : ''}${sec}${downloadedHint}`;
} else if (info.state === 'error') {
dot = '❌'; color = '#FF3B30'; anyError = true;
text = `${labels[s] || s}: Fehler ${info.error || ''}`;
// httpx haengt an jeden Fehler "For more information check: <mozilla-Link>"
// — kostet den halben Platz und erklaert nichts.
const err = String(info.error || '').replace(/\s*For more information check:\s*\S+/gi, '').trim();
text = `${labels[s] || s}: Fehler ${escapeHtml(err)}`;
} else {
text = `${labels[s] || s}: ${info.state}`;
}
row.innerHTML = `<span style="color:${color}">${dot}</span><span>${text}</span>`;
row.innerHTML = `<span class="svc-dot" style="color:${color}">${dot}</span><span>${text}</span>`;
list.appendChild(row);
}
// Nur eine Meldung: das grosse Symbol links sagt schon alles — sonst
// stuende z.B. das ❌ doppelt da.
if (list.children.length === 1) list.querySelector('.svc-dot').style.display = 'none';
// Icon spiegelt Gesamt-Status
if (anyError) icon.innerHTML = '&#x274C;';
@@ -3844,20 +3850,27 @@
banner.style.display = 'block';
// Wenn alles ready (kein Loading, kein Error): X-Button anzeigen
// + nach 8s automatisch wegfaden
// X immer da — auch (gerade) bei Fehlern. Alles ready → nach 8 s von selbst weg.
closeBtn.style.display = 'block';
clearTimeout(_serviceFadeTimer);
if (!anyLoading && !anyError) {
closeBtn.style.display = 'block';
clearTimeout(_serviceFadeTimer);
_serviceFadeTimer = setTimeout(() => {
banner.style.display = 'none';
}, 8000);
} else {
closeBtn.style.display = 'none';
clearTimeout(_serviceFadeTimer);
}
}
// Wegklicken: Fehler und Fertig-Meldungen vergessen, sonst kaemen sie mit
// der naechsten Statusmeldung eines anderen Dienstes gleich wieder hoch.
// Was noch laedt, bleibt gemerkt und zeigt sich beim naechsten Update.
function dismissServiceStatus() {
for (const [k, v] of Object.entries(_serviceState)) {
if (v.state !== 'loading') delete _serviceState[k];
}
clearTimeout(_serviceFadeTimer);
document.getElementById('service-status-banner').style.display = 'none';
}
function updateThinkingIndicator(msg) {
// Gedanken-Stream fuettern — JEDES Event (auch idle als ✓ fertig)
pushThought(msg.activity || '', msg.tool || '');