feat(diagnostic): warnt, wenn der Proxy mit veralteten Patches laeuft

Der Proxy kopiert proxy-patches/*.js beim START ueber den npm-Code. Wer nach
einem git pull nur `restart` macht — oder neu startet, BEVOR der Pull durch ist
— laeuft still mit der alten Fassung weiter. Nichts deutet darauf hin: der
Container ist "Up", die Oberflaeche sieht normal aus, die Aenderung wirkt
einfach nicht.

Das hat heute zweimal Zeit gekostet: einmal wirkte ein Proxy-Fix nicht, einmal
blieb die Modell-Liste alt, obwohl der Code laengst gepullt war (Proxy
gestartet 08:51, Patches gepullt 09:28).

Die Einstellungen vergleichen jetzt die Zeitstempel der Quelldateien mit den
eingespielten und zeigen einen Hinweis samt fertigem Befehl — inklusive der
Angabe, welche Datei wann geaendert und wann eingespielt wurde. Toleranz 5s,
weil Quelle und Kopie beim Start kurz nacheinander entstehen. Ein Fehler beim
Pruefen loest bewusst KEINEN Alarm aus, sonst stuende dort eine Warnung, die
nichts ueber die Patches aussagt.

Dazu: der Datenschutz-Block sagt jetzt ausdruecklich, dass KEIN Neustart noetig
ist — die CLI liest ~/.claude/settings.json bei jedem Aufruf neu. Nur ein
gerade laufender Turn nutzt noch die alte Einstellung.

4 Pruefungen gegen den echten Container, in beide Richtungen: schweigt nach
frischem Start, erkennt eine veraltete Kopie samt Zeitstempeln, schweigt nach
Wiederherstellung.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-03 11:38:04 +02:00
co-authored by Claude Opus 5
parent 988b074478
commit e67659b78a
2 changed files with 92 additions and 2 deletions
+46 -2
View File
@@ -602,6 +602,24 @@
selbst (Skills + skill_create Meta-Tool). Es gibt keine granulare
Permission-Maske, Brain weiss zur Laufzeit welche Tools es hat. -->
<!-- Warnung: Proxy laeuft mit veralteten Patches.
Der Proxy kopiert proxy-patches/ beim START in den npm-Code. Wer nach
einem git pull nur neu startet statt force-recreate — oder vor dem
Pull neu startet — laeuft weiter mit der alten Fassung, ohne dass es
irgendwo auffaellt. Das hat schon zweimal Zeit gekostet: einmal wirkte
ein Fix nicht, einmal blieb die Modell-Liste alt. -->
<div id="proxy-patch-warning" style="display:none;margin-bottom:16px;padding:12px 14px;
background:#2A1A08;border:1px solid #FF9F0A;border-radius:8px;">
<div style="color:#FF9F0A;font-size:13px;font-weight:600;margin-bottom:6px;">
⚠ Der Proxy läuft mit veralteten Patches
</div>
<div id="proxy-patch-detail" style="color:#C8A878;font-size:11px;line-height:1.6;"></div>
<div style="margin-top:8px;">
<code style="background:#12121E;padding:4px 8px;border-radius:4px;color:#E0E0F0;font-size:11px;display:inline-block;">
docker compose up -d --force-recreate proxy</code>
</div>
</div>
<!-- Brain-Model-Einstellung -->
<div class="settings-section">
<h2>Sprachmodell (Brain)</h2>
@@ -659,8 +677,13 @@
<div class="card" style="max-width:620px;">
<div style="font-size:11px;color:#8888AA;margin-bottom:12px;line-height:1.55;">
Drei Kanäle, über die Claude Code <strong>zusätzlich</strong> zur eigentlichen
Anfrage Daten verschickt. Gesetzt wird in <code>~/.claude/settings.json</code> —
greift bei jeder neuen Anfrage, <strong>kein Neustart nötig</strong>.
Anfrage Daten verschickt.
<br><br>
<span style="color:#3FFF9F;">✓ Kein Neustart nötig.</span>
Gesetzt wird in <code>~/.claude/settings.json</code>, und die Claude-CLI liest
die Datei bei <em>jedem</em> Aufruf neu. Speichern genügt — die nächste Anfrage
nutzt die neue Einstellung. Nur ein <em>gerade laufender</em> Turn arbeitet noch
mit der alten, weil sein Prozess schon gestartet ist.
<br><br>
Davon unabhängig ist, ob Anthropic mit deinen Unterhaltungen Modelle
trainiert — das steht in deinem Konto unter
@@ -2748,6 +2771,26 @@
return;
}
if (msg.type === 'proxy_patch_state') {
const box = document.getElementById('proxy-patch-warning');
const det = document.getElementById('proxy-patch-detail');
if (box) {
const stale = msg.stale || [];
box.style.display = stale.length ? 'block' : 'none';
if (stale.length && det) {
const fmt = (ms) => new Date(ms).toLocaleString('de-DE',
{ day: '2-digit', month: '2-digit', hour: '2-digit', minute: '2-digit' });
det.innerHTML =
'Diese Dateien wurden nach dem letzten Proxy-Start geändert — der Proxy '
+ 'arbeitet noch mit der alten Fassung:<br>'
+ stale.map(s => '• <code>' + escapeHtml(s.file) + '</code> — geändert '
+ fmt(s.srcAt) + ', eingespielt ' + fmt(s.activeAt)).join('<br>')
+ '<br><br>Der Proxy kopiert die Patches nur beim <strong>Start</strong>. '
+ 'Ein <code>--build</code> reicht nicht:';
}
}
return;
}
if (msg.type === 'privacy_flags') { renderPrivacyFlags(msg); return; }
if (msg.type === 'privacy_flags_saved') {
const st = document.getElementById('privacy-flags-status');
@@ -4754,6 +4797,7 @@
refreshVoiceIdStatus();
send({ action: 'get_attachment_limit' });
send({ action: 'get_privacy_flags' });
send({ action: 'check_proxy_patches' });
} else if (tab === 'brain') {
loadBrainStatus();
loadBrainMemoryList();