Skip to content

Полное описание конфигурации: AppConfig/ProxyConfig, место сохранения на диск и семантика горячего обновления ​

Вы изменили auth_mode, но клиент всё равно получает 401; вы открыли allow_lan_access, но устройства в том же сегменте сети не могут подключиться; вы хотите мигрировать конфигурацию на новую машину, но не знаете, какие файлы нужно скопировать.

В этом уроке полностью объясняется система конфигурации Antigravity Tools: где хранятся настройки, каковы значения по умолчанию, какие из них поддерживают горячее обновление, а какие требуют перезапуска обратного прокси.

Что такое AppConfig/ProxyConfig? ​

AppConfig/ProxyConfig — это модели конфигурационных данных Antigravity Tools: AppConfig управляет общими настройками десктопного приложения (язык, тема, разогрев, защита квот и т. д.), ProxyConfig управляет параметрами запуска локальной службы обратного прокси (порт, аутентификация, маппинг моделей, вышестоящий прокси и т. д.). В конечном итоге они все сериализуются в один и тот же файл gui_config.json, который считывается обратным прокси при запуске, используя ProxyConfig.

Что вы сможете сделать после изучения ​

  • Найти реальное место сохранения файла конфигурации gui_config.json и создать резервную копию/выполнить миграцию
  • Понять основные поля и значения по умолчанию AppConfig/ProxyConfig (на основе исходного кода)
  • Определить, какие настройки поддерживают горячее обновление после сохранения, а какие требуют перезапуска обратного прокси для вступления в силу
  • Понять условия возникновения «миграции конфигурации» (старые поля автоматически объединяются/удаляются)

Ваша текущая проблема ​

  • Вы изменили конфигурацию, но она «не применяется»: вы не знаете, не сохранилась ли она, не обновилась ли горячим образом, или требуется перезапуск
  • Вы хотите перенести только «конфигурацию обратного прокси» на новую машину, но боитесь, что вместе с ней перенесете данные аккаунтов
  • После обновления появляются старые поля, вы беспокоитесь, что формат файла конфигурации «поврежден»

Когда использовать этот подход ​

  • Вы собираетесь переключить обратный прокси с режима «только локальный» в режим «доступ из локальной сети»
  • Вы собираетесь изменить стратегию аутентификации (auth_mode/api_key) и хотите сразу подтвердить вступление в силу
  • Вам нужно массово обслуживать маппинг моделей/вышестоящий прокси/конфигурацию z.ai

🎒 Подготовка перед началом ​

Сначала о границах

В этом уроке вас научат читать/создавать резервные копии/мигрировать gui_config.json, но не рекомендуется рассматривать его как «файл конфигурации для долгосрочного ручного обслуживания». Поскольку при сохранении конфигурации на стороне бэкенда он перерериализуется в соответствии со структурой Rust AppConfig, неизвестные поля, вручную вставленные в него, скорее всего, будут автоматически удалены при следующем сохранении.

Основная идея ​

В вопросе конфигурации запомните три фразы:

  1. AppConfig — это корневой объект персистентной конфигурации, который сохраняется в gui_config.json.
  2. ProxyConfig — это дочерний объект AppConfig.proxy, вокруг которого вращается запуск и горячее обновление обратного прокси.
  3. Горячее обновление — это «только обновление состояния в памяти»: способность обновляться в горячем режиме не означает возможность изменения прослушивающего порта/адреса прослушивания.

Следуйте за мной ​

Шаг 1: Найдите gui_config.json (единственный источник правды конфигурации) ​

Почему Все ваши последующие действия по «резервному копированию/миграции/устранению неполадок» должны основываться на этом файле.

Каталог данных бэкенда — это .antigravity_tools в вашей домашней директории (будет автоматически создан, если не существует), имя файла конфигурации фиксировано как gui_config.json.

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

Вы должны увидеть:

  • Если вы еще не запускали обратный прокси, этот файл может не существовать (бэкенд будет использовать конфигурацию по умолчанию напрямую).
  • При запуске службы обратного прокси или сохранении настроек он будет автоматически создан и заполнен JSON.

Шаг 2: Сначала создайте резервную копию (защита от случайных действий + удобство отката) ​

Почему В конфигурации могут содержаться чувствительные поля, такие как proxy.api_key, api_key z.ai и т. д. При миграции/сравнении резервная копия надежнее, чем «память».

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")

Вы должны увидеть: в каталоге резервных копий появился JSON-файл с временной меткой.

Шаг 3: Разберитесь со значениями по умолчанию (не полагайтесь на догадки) ​

Почему Многие проблемы «не могу правильно настроить» на самом деле вызваны неправильными ожиданиями относительно значений по умолчанию.

Ниже приведены значения по умолчанию из AppConfig::new() и ProxyConfig::default() на стороне бэкенда:

Блок конфигурацииПолеЗначение по умолчанию (исходный код)Что нужно запомнить
AppConfiglanguage"zh"По умолчанию китайский
AppConfigtheme"system"Следовать за системой
AppConfigauto_refreshtrueПо умолчанию будет автоматически обновлять квоты
AppConfigrefresh_interval15Единица: минуты
ProxyConfigenabledfalseПо умолчанию обратный прокси не запускается
ProxyConfigallow_lan_accessfalseПо умолчанию привязывается только к локальной машине (приоритет приватности)
ProxyConfigauth_mode"off"По умолчанию без аутентификации (сценарий только локальной машины)
ProxyConfigport8045Это поле, которое вы чаще всего меняете
ProxyConfigapi_key"sk-<uuid>"По умолчанию генерируется случайный ключ
ProxyConfigrequest_timeout120Единица: секунды (примечание: внутри обратного прокси в текущей реализации он может не использоваться)
ProxyConfigenable_loggingtrueПо умолчанию включен сбор журналов, от которых зависит мониторинг/статистика
StickySessionConfigmodeBalanceСтратегия планирования по умолчанию — сбалансированная
StickySessionConfigmax_wait_seconds60Имеет смысл только в режиме CacheFirst

Как посмотреть полные поля?

Вы можете напрямую открыть gui_config.json и сравнить с исходным кодом: src-tauri/src/models/config.rs (AppConfig) и src-tauri/src/proxy/config.rs (ProxyConfig). В конце урока «Ссылка на исходный код» даны кликабельные ссылки на номера строк.

Шаг 4: Измените конфигурацию, которая «гарантированно обновится в горячем режиме», и сразу подтвердите (на примере аутентификации) ​

Почему Вам нужен замкнутый цикл «изменил — сразу подтвердил», чтобы избежать слепых изменений в UI.

Когда обратный прокси работает, бэкенд save_config будет выполнять горячее обновление в памяти следующего содержания:

  • proxy.custom_mapping
  • proxy.upstream_proxy
  • proxy.auth_mode / proxy.api_key (политики безопасности)
  • proxy.zai
  • proxy.experimental

В качестве примера здесь используется auth_mode:

  1. Откройте страницу API Proxy, убедитесь, что служба обратного прокси находится в состоянии Running.
  2. Установите auth_mode в all_except_health и убедитесь, что вы знаете текущий api_key.
  3. Используйте следующий запрос для подтверждения «пропуск проверки работоспособности, перехват других интерфейсов».
bash
# Запрос /healthz без ключа: должен быть успешным
curl -sS "http://127.0.0.1:8045/healthz" && echo

# Запрос /v1/models без ключа: должен быть 401
curl -sS -i "http://127.0.0.1:8045/v1/models"

# Повторный запрос /v1/models с ключом: должен быть успешным
curl -sS -H "Authorization: Bearer <proxy.api_key>" "http://127.0.0.1:8045/v1/models"
powershell
# Запрос /healthz без ключа: должен быть успешным
Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8045/healthz" | Select-Object -ExpandProperty StatusCode

# Запрос /v1/models без ключа: должен быть 401
try { Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8045/v1/models" } catch { $_.Exception.Response.StatusCode.value__ }

# Повторный запрос /v1/models с ключом: должен быть успешным
$headers = @{ Authorization = "Bearer <proxy.api_key>" }
(Invoke-WebRequest -UseBasicParsing "http://127.0.0.1:8045/v1/models" -Headers $headers).StatusCode

Вы должны увидеть: /healthz возвращает 200; /v1/models без ключа возвращает 401, с ключом — успешно.

Шаг 5: Измените конфигурацию, которая «требует перезапуска обратного прокси» (порт / адрес прослушивания) ​

Почему Многие настройки «сохранены, но не применены», корневая причина — не ошибка, а то, что они определяют, как привязывается TCP Listener.

При запуске обратного прокси бэкенд будет вычислять адрес прослушивания (127.0.0.1 или 0.0.0.0) с помощью allow_lan_access и привязывать порт с помощью port; этот шаг происходит только в start_proxy_service.

Рекомендации по действиям:

  1. На странице API Proxy измените port на новое значение (например, 8050) и сохраните.
  2. Остановите службу обратного прокси, затем перезапустите.
  3. Подтвердите /healthz новым портом.
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

Вы должны увидеть: новый порт доступен; старый порт недоступен или возвращает пустой ответ.

О allow_lan_access

В исходном коде allow_lan_access одновременно влияет на две вещи:

  1. Адрес прослушивания: определяет, привязываться к 127.0.0.1 или 0.0.0.0 (требует перезапуска обратного прокси для повторного bind).
  2. Автоматическая стратегия аутентификации: когда auth_mode=auto, в сценарии локальной сети он автоматически переключается на all_except_health (эта часть поддерживает горячее обновление).

Шаг 6: Поймите «миграцию конфигурации» (старые поля будут автоматически очищены) ​

Почему После обновления вы можете увидеть старые поля в gui_config.json и беспокоиться, что «повреждено». На самом деле при загрузке конфигурации бэкенд выполнит миграцию: объединит anthropic_mapping/openai_mapping в custom_mapping и удалит старые поля, затем автоматически сохранит один раз.

Вы можете использовать эту закономерность для самопроверки:

  • Если вы видите в файле proxy.anthropic_mapping или proxy.openai_mapping, после следующего запуска/загрузки конфигурации они будут удалены.
  • При объединении пропускаются ключи, оканчивающиеся на -series (эти теперь обрабатываются логикой preset/builtin).

Вы должны увидеть: после миграции в gui_config.json остается только proxy.custom_mapping.

Контрольная точка ✅ ​

  • Вы можете найти $HOME/.antigravity_tools/gui_config.json на локальной машине
  • Вы можете объяснить, почему такие конфигурации, как auth_mode/api_key/custom_mapping, поддерживают горячее обновление
  • Вы можете объяснить, почему такие конфигурации, как port/allow_lan_access, требуют перезапуска обратного прокси

Напоминания о возможных ошибках ​

  1. Горячее обновление save_config охватывает только небольшое количество полей: оно не поможет вам перезапустить listener и не отправит такие конфигурации, как scheduling, в TokenManager.
  2. request_timeout в текущей реализации обратного прокси не действительно вступает в силу: параметр _request_timeout в start AxumServer, а в состоянии тайм-аут жестко задан как 300 секунд.
  3. Ненадежно вручную добавлять «пользовательские поля» в gui_config.json: при сохранении конфигурации на стороне бэкенда он будет перерериализован в AppConfig, неизвестные поля будут отброшены.

Краткое содержание урока ​

  • Конфигурация сохраняется в одном месте: $HOME/.antigravity_tools/gui_config.json
  • «Способность ProxyConfig поддерживать горячее обновление» не равна «возможности изменения порта/адреса прослушивания»; всё, что связано с bind, требует перезапуска обратного прокси
  • Если вы видите старые поля маппинга, не паникуйте: при загрузке конфигурации они автоматически мигрируют в custom_mapping и старые поля очищаются

Предварительный просмотр следующего урока ​

Следующий урок мы изучим Безопасность и приватность: auth_mode, allow_lan_access и проект «не раскрывать информацию об аккаунтах».

Вы узнаете:

  • Когда обязательно нужно включать аутентификацию (и почему auto в сценарии локальной сети более строгий)
  • Минимальную стратегию раскрытия при открытии локального обратного прокси в локальную сеть/общественную сеть
  • Какие данные отправляются на вышестоящий уровень, а какие хранятся только локально

Приложение: Ссылка на исходный код ​

Нажмите, чтобы развернуть и просмотреть местоположение исходного кода

Дата обновления: 2026-01-24

ТемаПуть к файлуНомер строки
Значения по умолчанию AppConfig (AppConfig::new())src-tauri/src/models/config.rs4-158
Значения по умолчанию ProxyConfig (порт/аутентификация/адрес прослушивания)src-tauri/src/proxy/config.rs74-292
Значения по умолчанию StickySessionConfig (планирование)src-tauri/src/proxy/sticky_config.rs3-36
Имя файла сохранения конфигурации + логика миграции (gui_config.json)src-tauri/src/modules/config.rs7-88
Каталог данных ($HOME/.antigravity_tools)src-tauri/src/modules/account.rs16-33
save_config: сохранение конфигурации + горячее обновление каких полейsrc-tauri/src/commands/mod.rs296-334
AxumServer: update_mapping/update_proxy/update_security/...src-tauri/src/proxy/server.rs45-117
Выбор адреса прослушивания allow_lan_accesssrc-tauri/src/proxy/config.rs81-92
Привязка адреса и порта при запуске Proxy (меняется только после перезапуска)src-tauri/src/commands/proxy.rs42-134
Фактические правила auth_mode=autosrc-tauri/src/proxy/security.rs3-31
Сохранение конфигурации планирования на стороне фронтенда (только сохранение, не отправка в бэкенд рантайма)src/pages/ApiProxy.tsx476-501
Монитор страницы динамическое включение/выключение сбора журналовsrc/components/proxy/ProxyMonitor.tsx174-263