Skip to content

Konfigurationsübersicht: AppConfig/ProxyConfig, Persistenzort und Hot-Reload-Semantik ​

Du hast auth_mode geändert, aber der Client meldet weiterhin 401; du hast allow_lan_access aktiviert, aber Geräte im selben Netzwerk können sich nicht verbinden; du möchtest die Konfiguration auf einen neuen Computer übertragen, weiß aber nicht, welche Dateien kopiert werden sollen.

Diese Lektion erklärt das Konfigurationssystem von Antigravity Tools vollständig: Wo die Konfiguration gespeichert wird, was die Standardwerte sind, welche Einstellungen per Hot-Reload aktualisiert werden können und welche einen Neustart des Reverse-Proxys erfordern.

Was sind AppConfig/ProxyConfig? ​

AppConfig/ProxyConfig sind die Konfigurationsdatenmodelle von Antigravity Tools: AppConfig verwaltet die allgemeinen Einstellungen der Desktop-Anwendung (Sprache, Thema, Aufwärmen, Kontingentschutz usw.), während ProxyConfig die Laufzeitparameter des lokalen Reverse-Proxys verwaltet (Port, Authentifizierung, Modellmapping, Upstream-Proxy usw.). Beide werden schließlich in dieselbe Datei gui_config.json serialisiert, und der Proxy liest beim Start den ProxyConfig daraus.

Was du nach dieser Lektion kannst ​

  • Die tatsächliche Speicherort der Konfigurationsdatei gui_config.json finden und Backups/Migrationen erstellen
  • Die Kernfelder und Standardwerte von AppConfig/ProxyConfig verstehen (basierend auf dem Quellcode)
  • Klar unterscheiden, welche Konfigurationen nach dem Speichern per Hot-Reload aktualisiert werden und welche einen Neustart des Reverse-Proxys erfordern
  • Die Bedingungen für eine "Konfigurationsmigration" verstehen (alte Felder werden automatisch zusammengeführt/gelöscht)

Deine aktuelle Situation ​

  • Du hast Konfigurationen geändert, aber sie "greifen nicht" – du weißt nicht, ob nicht gespeichert, kein Hot-Reload oder ein Neustart erforderlich ist
  • Du möchtest nur die "Proxy-Konfiguration" auf einen neuen Computer übertragen, hast aber Angst, Kontodaten mit zu übertragen
  • Nach einem Upgrade erscheinen alte Felder, und du befürchtest, dass das Format der Konfigurationsdatei "beschädigt" ist

Wann du dies benötigst ​

  • Du möchtest den Proxy von "nur lokal" auf "im lokalen Netzwerk erreichbar" umstellen
  • Du möchtest die Authentifizierungsrichtlinie ändern (auth_mode/api_key) und sofort die Wirksamkeit überprüfen
  • Du musst Modellmappings, Upstream-Proxys oder z.ai-Konfigurationen massenweise pflegen

🎒 Vorbereitungen vor dem Start ​

Vorab eine Grenze

Diese Lektion bringt dir das Lesen/Sichern/Migrieren von gui_config.json bei, aber es wird nicht empfohlen, es als "langfristig manuell gewartete Konfigurationsdatei" zu behandeln. Da das Backend beim Speichern der Konfiguration gemäß der Rust-Struktur AppConfig neu serialisiert, werden unbekannte Felder, die manuell hinzugefügt wurden, beim nächsten Speichern wahrscheinlich automatisch verworfen.

Kernkonzept ​

Bei Konfigurationen solltest du drei Sätze im Hinterkopf behalten:

  1. AppConfig ist das Root-Objekt für persistente Konfigurationen, gespeichert in gui_config.json.
  2. ProxyConfig ist das Unterobjekt von AppConfig.proxy – sowohl der Start als auch der Hot-Reload des Proxys drehen sich darum.
  3. Hot-Reload bedeutet "nur den Speicherstatus aktualisieren": Was per Hot-Reload aktualisiert werden kann, bedeutet nicht, dass man den Port oder die Listenadresse ändern kann.

Mach mit ​

Schritt 1: gui_config.json lokalisieren (die Single Source of Truth der Konfiguration) ​

Warum Alle deine späteren "Sicherungen/Migrationen/Fehlerbehebungen" müssen sich an dieser Datei orientieren.

Das Datenverzeichnis des Backends ist .antigravity_tools unter deinem Home-Verzeichnis (es wird automatisch erstellt, wenn es nicht existiert), und der Name der Konfigurationsdatei ist fest auf gui_config.json festgelegt.

bash
CONFIG_FILE="$HOME/.antigravity_tools/gui_config.json"
echo "$CONFIG_FILE"
ls -la "$CONFIG_FILE" || true
powershell
$configFile = Join-Path $HOME ".antigravity_tools\gui_config.json"
$configFile
Get-ChildItem -Force $configFile -ErrorAction SilentlyContinue

Was du sehen solltest:

  • Wenn du den Proxy noch nicht gestartet hast, existiert diese Datei möglicherweise nicht (das Backend verwendet dann direkt die Standardkonfiguration).
  • Beim Starten des Reverse-Proxy-Dienstes oder beim Speichern der Einstellungen wird sie automatisch erstellt und mit JSON gefüllt.

Schritt 2: Zuerst eine Sicherung erstellen (Tippfehler vermeiden + einfaches Rollback) ​

Warum Die Konfiguration kann sensible Felder wie proxy.api_key, api_key von z.ai usw. enthalten. Wenn du migrieren oder vergleichen möchtest, ist eine Sicherung zuverlässiger als "Gedächtnis".

bash
mkdir -p "$HOME/antigravity-config-backup"
cp "$HOME/.antigravity_tools/gui_config.json" "$HOME/antigravity-config-backup/gui_config.$(date +%Y%m%d%H%M%S).json"
powershell
$backupDir = Join-Path $HOME "antigravity-config-backup"
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
$ts = Get-Date -Format "yyyyMMddHHmmss"
Copy-Item (Join-Path $HOME ".antigravity_tools\gui_config.json") (Join-Path $backupDir "gui_config.$ts.json")

Was du sehen solltest: Ein JSON-Datei mit Zeitstempel ist im Sicherungsverzeichnis erschienen.

Schritt 3: Standardwerte klären (nicht raten) ​

Warum Viele "egal wie ich konfiguriere, es klappt nicht"-Probleme liegen daran, dass deine Erwartungen an die Standardwerte nicht stimmen.

Die folgenden Standardwerte stammen aus AppConfig::new() und ProxyConfig::default() im Backend:

KonfigurationsblockFeldStandardwert (Quellcode)Wichtiger Punkt
AppConfiglanguage"zh"Standard ist Chinesisch
AppConfigtheme"system"Folgt dem System
AppConfigauto_refreshtrueKontingente werden standardmäßig automatisch aktualisiert
AppConfigrefresh_interval15Einheit: Minuten
ProxyConfigenabledfalseProxy wird standardmäßig nicht gestartet
ProxyConfigallow_lan_accessfalseStandardmäßig nur an localhost gebunden (Privatsphäre zuerst)
ProxyConfigauth_mode"off"Standardmäßig keine Authentifizierung (nur für lokale Szenarien)
ProxyConfigport8045Dies ist das Feld, das du am häufigsten änderst
ProxyConfigapi_key"sk-<uuid>"Standardmäßig wird ein zufälliger Key generiert
ProxyConfigrequest_timeout120Einheit: Sekunden (Hinweis: Intern im Proxy wird es derzeit möglicherweise nicht verwendet)
ProxyConfigenable_loggingtrueStandardmäßig ist das Logging aktiviert, das von Monitoring/Statistik abhängt
StickySessionConfigmodeBalanceScheduling-Strategie ist standardmäßig ausgeglichen
StickySessionConfigmax_wait_seconds60Nur sinnvoll im CacheFirst-Modus

Wie siehst du alle Felder?

Du kannst gui_config.json direkt öffnen und mit dem Quellcode vergleichen: src-tauri/src/models/config.rs (AppConfig) und src-tauri/src/proxy/config.rs (ProxyConfig). Am Ende dieser Lektion gibt es im Abschnitt "Quellcode-Referenz" klickbare Zeilennummern-Links.

Schritt 4: Eine "sicher per Hot-Reload aktualisierbare" Konfiguration ändern und sofort verifizieren (Authentifizierung als Beispiel) ​

Warum Du brauchst eine geschlossene Schleife aus "ändern und sofort verifizieren", um blindes Ändern in der UI zu vermeiden.

Wenn der Proxy läuft, aktualisiert das Backend save_config diese Inhalte per Hot-Reload im Speicher:

  • proxy.custom_mapping
  • proxy.upstream_proxy
  • proxy.auth_mode / proxy.api_key (Sicherheitsrichtlinie)
  • proxy.zai
  • proxy.experimental

Hier nehmen wir auth_mode als Beispiel:

  1. Öffne die Seite API Proxy und stelle sicher, dass der Proxy-Dienst Running ist.
  2. Setze auth_mode auf all_except_health und bestätige, dass du den aktuellen api_key kennst.
  3. Verifiziere mit der folgenden Anfrage, dass "Health-Check durchgelassen wird, andere Schnittstellen abgelehnt werden".
bash
#Anfrage an /healthz ohne Key: sollte erfolgreich sein
curl -sS "http://127.0.0.1:8045/healthz" && echo

#Anfrage an /v1/models ohne Key: sollte 401 zurückgeben
curl -sS -i "http://127.0.0.1:8045/v1/models"

#Anfrage an /v1/models mit Key: sollte erfolgreich sein
curl -sS -H "Authorization: Bearer <proxy.api_key>" "http://127.0.0.1:8045/v1/models"
powershell
#Anfrage an /healthz ohne Key: sollte erfolgreich sein
Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8045/healthz" | Select-Object -ExpandProperty StatusCode

#Anfrage an /v1/models ohne Key: sollte 401 zurückgeben
try { Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8045/v1/models" } catch { $_.Exception.Response.StatusCode.value__ }

#Anfrage an /v1/models mit Key: sollte erfolgreich sein
$headers = @{ Authorization = "Bearer <proxy.api_key>" }
(Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8045/v1/models" -Headers $headers).StatusCode

Was du sehen solltest: /healthz gibt 200 zurück; /v1/models gibt 401 zurück ohne Key und ist erfolgreich mit Key.

Schritt 5: Eine "Proxy-Neustart erforderliche" Konfiguration ändern (Port / Listenadresse) ​

Warum Viele Konfigurationen "greifen nach dem Speichern nicht" – die Ursache ist kein Bug, sondern sie bestimmt, wie der TCP-Listener gebunden wird.

Beim Starten des Proxys berechnet das Backend aus allow_lan_access die Listenadresse (127.0.0.1 oder 0.0.0.0) und bindet den Port mit port; dieser Schritt geschieht nur in start_proxy_service.

Vorgehensweise:

  1. Ändere auf der Seite API Proxy den port auf einen neuen Wert (z.B. 8050) und speichere.
  2. Stoppe den Proxy-Dienst und starte ihn neu.
  3. Verifiziere /healthz mit dem neuen Port.
bash
curl -sS "http://127.0.0.1:8050/healthz" && echo
powershell
Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8050/healthz" | Select-Object -ExpandProperty StatusCode

Was du sehen solltest: Der neue Port ist erreichbar; der alte Port schlägt fehl oder gibt leer zurück.

Über allow_lan_access

Im Quellcode beeinflusst allow_lan_access zwei Dinge gleichzeitig:

  1. Listenadresse: Bestimmt, ob an 127.0.0.1 oder 0.0.0.0 gebunden wird (erfordert Neustart des Proxys, um neu zu binden).
  2. Auto-Authentifizierungsrichtlinie: Wenn auth_mode=auto, wird im LAN-Szenario automatisch zu all_except_health gewechselt (dieser Teil kann per Hot-Reload aktualisiert werden).

Schritt 6: Eine "Konfigurationsmigration" verstehen (alte Felder werden automatisch bereinigt) ​

Warum Nach einem Upgrade siehst du möglicherweise alte Felder in gui_config.json und befürchtest, dass etwas "kaputt" ist. Tatsächlich führt das Backend beim Laden der Konfiguration eine Migration durch: Es führt anthropic_mapping/openai_mapping in custom_mapping zusammen, löscht die alten Felder und speichert dann automatisch einmal.

Du kannst diese Regel zur Selbstprüfung verwenden:

  • Wenn du proxy.anthropic_mapping oder proxy.openai_mapping in der Datei siehst, werden sie beim nächsten Start/Laden der Konfiguration entfernt.
  • Beim Zusammenführen werden Schlüssel, die mit -series enden, übersprungen (diese werden jetzt von der Preset/Builtin-Logik verarbeitet).

Was du sehen solltest: Nach der Migration verbleibt in gui_config.json nur proxy.custom_mapping.

Prüfpunkt ✅ ​

  • Du kannst $HOME/.antigravity_tools/gui_config.json auf deinem lokalen Computer finden
  • Du kannst erklären, warum Konfigurationen wie auth_mode/api_key/custom_mapping per Hot-Reload aktualisiert werden können
  • Du kannst erklären, warum Konfigurationen wie port/allow_lan_access einen Neustart des Proxys erfordern

Fallstricke ​

  1. Der Hot-Reload von save_config deckt nur wenige Felder ab: Er startet den Listener nicht neu und überträgt Konfigurationen wie scheduling auch nicht an den TokenManager.
  2. request_timeout wird in der aktuellen Implementierung des Proxys tatsächlich nicht wirksam: Im start-Parameter von AxumServer ist es _request_timeout, und im Status ist das Timeout fest auf 300 Sekunden eingestellt.
  3. Manuelles Hinzufügen von "benutzerdefinierten Feldern" zu gui_config.json ist unzuverlässig: Beim Speichern serialisiert das Backend es erneut in AppConfig, und unbekannte Felder werden verworfen.

Zusammenfassung dieser Lektion ​

  • Es gibt nur einen Speicherort für Konfigurationen: $HOME/.antigravity_tools/gui_config.json
  • "Kann per Hot-Reload aktualisiert werden" von ProxyConfig bedeutet nicht, dass man den Port oder die Listenadresse ändern kann; alles, was mit Bind zu tun hat, erfordert einen Neustart des Proxys
  • Wenn du alte Mapping-Felder siehst, keine Panik: Beim Laden der Konfiguration werden sie automatisch zu custom_mapping migriert und alte Felder bereinigt

Vorschau auf die nächste Lektion ​

In der nächsten Lektion lernen wir Sicherheit und Privatsphäre: auth_mode, allow_lan_access und das Design "keine Kontoinformationen preisgeben".

Du wirst lernen:

  • Wann die Authentifizierung unbedingt aktiviert werden muss (und warum auto im LAN-Szenario strenger ist)
  • Die Minimalexpositionsstrategie, wenn der lokale Proxy im LAN oder öffentlich im Internet verfügbar gemacht wird
  • Welche Daten an den Upstream gesendet werden und welche nur lokal gespeichert werden

Anhang: Quellcode-Referenz ​

Klicken zum Anzeigen der Quellcodepositionen

Aktualisiert: 2026-01-24

ThemaDateipfadZeilennummern
---------
---------
---------
Konfigurationsdateiname + Migrationslogik (gui_config.json)src-tauri/src/modules/config.rs7-88
Datenverzeichnis ($HOME/.antigravity_tools)src-tauri/src/modules/account.rs16-33
---------
AxumServer: update_mapping/update_proxy/update_security/...src-tauri/src/proxy/server.rs45-117
Auswahl der Listenadresse bei allow_lan_accesssrc-tauri/src/proxy/config.rs81-92
---------
Tatsächliche Regeln bei auth_mode=autosrc-tauri/src/proxy/security.rs3-31
---------
---------