feat(brain): lokale Modelle bewusst waehlen — pro Chat (🧠) oder "@lokal …"

Bisher gab es nur den Schalter "leichte Fragen lokal / alles lokal". Jetzt
waehlt Stefan selbst, wo ein lokales Modell antwortet:
- Pro Chat: der Modell-Picker (🧠, context-model) bietet zusaetzlich die
  gerade geladenen lokalen Modelle als "local:<modell>" (Gruppe "Lokal").
  Steht ein Chat darauf, laeuft JEDER Turn dort lokal — z.B. ein Pentest-
  Projekt auf einem unzensierten Modell. Claude ist in dem Chat raus.
- Eine Frage: "@lokal …" (geladenes Modell) oder "@lokal:<modell> …".
- Lehnt Claude ab, nennt ARIA beide Wege; sie leitet NICHT selbst weiter.

Lokaler Turn: Identitaet + Hinweis "keine Werkzeuge, nichts behaupten",
Notizzettel + Fenster nach Kontext (local_compact), <think> entfernt,
Metrik. Fehler (Modell nicht geladen …) werden angezeigt, aber nicht als
ARIAs Antwort in den Verlauf geschrieben. Antwort-Quelle "local" mit
Modellname und Grund ("pro-chat" / "einmalig").

Getestet: Erkennung von @lokal (auch mit Modell, nach GPS-Hinweis, nicht
bei "@lokalisierung"). Durchlauf mit echtem Modell noch nicht (Karte im
Gegenlauf belegt, Brain nicht neu gebaut).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-31 19:33:23 +01:00
co-authored by Claude Opus 5.5
parent d289d9404a
commit c8911316d7
3 changed files with 98 additions and 2 deletions
+2 -1
View File
@@ -3605,7 +3605,8 @@
const row = ctxModelRow(focusedContextId);
if (!row) { bar.innerHTML = ''; return; }
const def = prettyModel(diagCtxModels.default) || diagCtxModels.default || '?';
const groups = { tier: 'Automatisch (neueste Version)', main: 'Aktuelle Versionen', overflow: 'Ältere Versionen' };
const groups = { tier: 'Automatisch (neueste Version)', main: 'Aktuelle Versionen', overflow: 'Ältere Versionen',
local: 'Lokal (eigene Hardware, ohne Claude)' };
let opts = `<option value="">Einstellung (${escapeHtml(def)})</option>`;
for (const [sec, label] of Object.entries(groups)) {
const inSec = (diagCtxModels.choices || []).filter(c => (c.section || 'tier') === sec);