Ich bereite gerade einen Workshop vor: „AI-unterstützt coden – weit über den Browser hinaus“ (oder so ähnlich, bald bei Pragtive buchbar). Im Zuge dessen wollte ich auch mal schauen, ob ich – im Sinne von „Souveränität“ – LLMs auf „hosted in Deutschland“ und (wo möglich) Open Source umstellen kann. Kandidat: der IONOS AI Model Hub. Zum Ergebnis dieses Tests gibt’s ein anderes Mal mehr.
Denn mein erster Erfolg war… sagen wir: ein sehr praktisches Debugging-Training.
Der Auslöser: Preise konfigurieren
Mein Tool der Wahl ist Cline. Ich mag das Tool wirklich sehr – gerade weil es, mit dem richtigen LLM, auch gut für komplexe Aufgaben geeignet ist.
Für vorkonfigurierte Modelle (z. B. Claude Sonnet) zeigt Cline ziemlich bequem an, was eine Session kostet. Für andere Backends kann man die Kosten pro 1 Mio Tokens selbst eintragen, damit die Anzeige stimmt und man ein Gefühl hat, was die eigenen Fragen so kosten.
Und weil man das in Deutschland so macht, tippe ich in dieses Preisfeld:
0 … dann , (also: 0,) – CRASH.
Nicht „Fehlermeldung“. Nicht „rotes Feld“. Kein „bitte Punkt statt Komma“. Einfach: Settings-Fenster weg. Und es kam auch nicht wieder.
„Ist halt VS Code abgestürzt“ … oder?
Erster Gedanke: „Ok, VS Code hat sich kurz verschluckt.“ Neustart. Weiter konfigurieren.
Nur: Das Einstellungsfenster des Plugins ließ sich danach gar nicht mehr öffnen.
Und dann kam der Gedanke: „Moment… ich habe gerade ein Komma eingetippt.“ Die Config ist vermutlich nicht nur „kaputt“, sondern so kaputt, dass das UI gar nicht mehr hochkommt.
Wo zur Hölle speichert Cline seine Config?
Ich war fest überzeugt: Das steht irgendwo in den üblichen VS-Code-Settings.
settings.json, User/Workspace-Config – irgendwas, was man kennt und im Zweifel wieder geradebiegt.
Bis zu diesem Tag hatte ich noch nie ein VS-Code-Problem, bei dem ich mich fragen musste, ob es überhaupt noch einen anderen Ort für Einstellungen gibt.
Also: Suche nach Config-Dateien. Suche nach allem, was nach „Plugin-Settings“ aussieht. Wo zur Hölle ist die kaputte config?
Die Antwort war für mich komplett neu (und ich vermute: für viele andere auch):
VS Code speichert Extension-State in einer SQLite-DB
Cline hatte seine Konfiguration nicht in settings.json gespeichert, sondern in der:
state.vscdb
Das ist eine SQLite-Datenbank, in der VS Code Dinge ablegt, die eben nicht in den normalen Settings landen.
Der Aufbau ist ziemlich schlicht. Bei mir war es:
- eine Tabelle:
ItemTable - zwei Spalten:
keyundvalue
Also Key gesucht, Value ausgegeben – und da war der Übeltäter:
..."inputPrice":null,"outputPrice":0,...
Das Komma im Eingabefeld hatte anscheinend dazu geführt, dass inputPrice als null gespeichert wurde.
Und null hat das Plugin dann so zuverlässig aus der Bahn geworfen, dass das Settings-UI nicht mehr rendern konnte.
Der Fix: Datenbank-Chirurgie im Terminal
Zum Glück muss man Tools selten reparieren, indem man per Hand in deren interner Datenbank herumfummelt.
Aber: Wenn das UI nicht mehr aufgeht, bleibt manchmal nur diese Art von „Chirurgie“.
Also, Schritt für Schritt:
- VS Code schließen
- Backup der DB machen
- dann erst den Wert reparieren (
null→0) - VS Code starten
- Cline lebt wieder, Einstellungen lassen sich öffnen
Preise werden jetzt wieder konfiguriert – dieses Mal schreibe ich: „null, Punkt, Zahl“. ;-)
Gelernt:
In der CLAUDE.md des Plugins (die ich auf der Suche nach Config-Dateien gefunden habe) fehlt wohl ein Satz wie:
„Denk an die Validierung der Input-Felder in den Einstellungen – nicht-US-Nutzer könnten auf die Idee kommen, Preise als
x,yystattx.yyeinzugeben.“
Bonus: Spannend ist auch, dass nicht bis zum Ende der Eingabe gewartet wird (oder erst beim Klick auf „Done“ validiert/gespeichert wird), sondern der Absturz sofort beim Tippen des Kommas passiert. Das ist schon… sportlich.
Kurzfassung: Cline-Config reparieren
Cline speichert seine Config nicht in settings.json, sondern in der VS-Code-SQLite-DB state.vscdb.
Wenn das Plugin-UI nach einem kaputten Wert nicht mehr aufgeht, kannst du den Wert dort reparieren.
Annahmen: Linux, Cline, sqlite3 installiert
# VS Code schließen
# Backup erstellen
cp ~/.config/Code/User/globalStorage/state.vscdb{,.bak}
# DB öffnen
sqlite3 ~/.config/Code/User/globalStorage/state.vscdb
# Key finden (Beispiel: Extension-ID)
SELECT key
FROM ItemTable
WHERE key LIKE '%saoudrizwan.claude-dev%';
# Value für Key ausgeben (quote() macht's lesbarer/sicherer)
SELECT key, quote(value) AS raw
FROM ItemTable
WHERE key = 'saoudrizwan.claude-dev';
# Problem identifizieren und Value korrigieren (null -> 0)
UPDATE ItemTable
SET value = replace(value, '"inputPrice":null', '"inputPrice":0')
WHERE key = 'saoudrizwan.claude-dev';
# Nochmal prüfen
SELECT key, quote(value) AS raw
FROM ItemTable
WHERE key = 'saoudrizwan.claude-dev';
# Schließen
.quit