Системные возможности: Мультиязычность/темы/обновления/автозапуск/HTTP API Server
Вы переключили тему на dark, но интерфейс всё ещё светлый; вы явно закрыли окно, но процесс всё ещё работает в фоне; вы хотите, чтобы внешние инструменты переключали текущую учётную запись, но не хотите открывать обратный прокси в локальную сеть.
В этом уроке фокусируются системные возможности Antigravity Tools: переключение языка и темы интерфейса, проверка и обновление, трей после закрытия окна и автозапуск, а также предоставление HTTP API Server для внешних программ.
Что такое системные возможности?
Системные возможности — это «возможности продукта» Antigravity Tools как десктопного приложения: переключение языка и темы интерфейса, проверка обновлений и обновление, трей после закрытия окна и автозапуск, а также предоставление HTTP API Server, который привязан только к 127.0.0.1 для вызова внешними программами.
Что вы сможете сделать после изучения
- Переключать язык/тему и понимать, какие из них «вступают в силу немедленно»
- Понимать разницу между «закрытием окна» и «выходом из программы», а также что может делать меню трея
- Знать триггерные условия автоматической проверки обновлений, интервал и файл сохранения
- Включить HTTP API Server и выполнить пробное действие с помощью
curlдля проверки работоспособности/переключения учётных записей
🎒 Подготовка перед началом
- Вы знаете, где находится каталог данных (см. Первый запуск: Каталог данных, журналы, трей и автозапуск)
- Вы знаете, что
gui_config.json— это единый источник правды сохранения конфигурации (см. Конфигурация полностью: AppConfig/ProxyConfig, место сохранения на диск и семантика горячего обновления)
Основная идея
Разделите эти возможности на две категории, будет легче запомнить:
- Возможности «приводимые конфигурацией»: язык и тема пишутся в
gui_config.json(фронтенд вызываетsave_config). - Возможности «с независимым сохранением на диск»: настройки обновлений и HTTP API имеют свои собственные файлы JSON; трей и поведение закрытия окна контролируются на стороне Tauri.
Следуйте за мной
Шаг 1: Переключение языка (немедленное вступление в силу + автоматическое сохранение)
Почему Переключение языка проще всего ошибочно понять как «требует перезапуск». В этой реализации интерфейс переключается немедленно, одновременно записывая language обратно в конфигурацию.
Действия: откройте Settings → General, в выпадающем списке языка выберите язык.
Вы почти одновременно увидите две вещи:
- Интерфейс немедленно меняется на новый язык (фронтенд напрямую вызывает
i18n.changeLanguage(newLang)). - Конфигурация сохраняется (фронтенд вызывает
updateLanguage(newLang), внутри вызываетсяsave_config).
Откуда берутся языковые пакеты?
Фронтенд инициализирует ресурсы мультиязычности с помощью i18next, и устанавливает fallbackLng: "en". Это означает: если для какого-то ключа нет перевода, будет использован английский.
Шаг 2: Переключение темы (light/dark/system)
Почему Тема влияет не только на CSS, но и на цвет фона окна Tauri, data-theme DaisyUI и класс dark Tailwind.
Действия: в Settings → General переключите тему на light / dark / system.
Вы должны увидеть:
- Тема немедленно вступает в силу (
ThemeManagerпрочитает конфигурацию и применит кdocument.documentElement). - Когда тема
system, изменения системной темной/светлой синхронизируются в приложении в реальном времени (прослушиваетprefers-color-scheme).
Исключение Linux
ThemeManager попытается вызвать getCurrentWindow().setBackgroundColor(...) для установки цвета фона окна, но на платформе Linux этот шаг пропускается (в исходном коде есть комментарий: прозрачное окно + softbuffer может привести к сбою).
Шаг 3: Автозапуск (и почему с --minimized)
Почему Автозапуск — это не «поле конфигурации», а элемент регистрации системного уровня (плагин autostart Tauri).
Действия: в Settings → General установите «Автоматический запуск при включении компьютера» в состояние «включено/выключено».
Вы должны увидеть:
- При переключении сразу вызывается бэкенд
toggle_auto_launch(enable). - При инициализации страницы вызывается
is_auto_launch_enabled(), отображая реальное состояние (не полагается на локальный кеш).
Дополнительно: при инициализации плагина autostart передаётся параметр --minimized, поэтому «запуск при включении компьютера» обычно будет запущен в минимизированном/фоновом режиме (конкретное поведение зависит от того, как фронтенд обрабатывает этот параметр).
Шаг 4: Поймите разницу между «закрытием окна» и «выходом из программы»
Почему Многие десктопные приложения — это «закрытие = выход», но поведение Antigravity Tools по умолчанию — «закрытие = скрыть в трей».
Вы должны знать:
- После нажатия кнопки закрытия окна Tauri перехватит событие закрытия и
hide(), а не завершит процесс. - В меню трея есть
Show/Quit: чтобы полностью выйти, следует использоватьQuit. - Текст отображения трея следует за
config.language(при создании трея читается конфигурация языка и берётся текст перевода; после обновления конфигурации прослушивается событиеconfig://updatedдля обновления меню трея).
Шаг 5: Проверка обновлений (автоматический триггер + ручная проверка)
Почему Обновления используют две разные вещи одновременно:
- Логика пользовательской «проверки версий»: через GitHub Releases получает последнюю версию, оценивает наличие обновлений.
- Tauri Updater: отвечает за скачивание и установку, затем
relaunch().
Вы можете использовать так:
- Автоматическая проверка: после запуска приложения вызывается
should_check_updates, если требуется проверка, появляетсяUpdateNotification, и немедленно обновляетсяlast_check_time. - Ручная проверка: на странице
Settingsнажмите «Проверить обновления» (вызываетсяcheck_for_updates, в UI отображается результат).
Откуда берётся интервал обновлений?
Бэкенд сохраняет настройки обновлений в файл update_settings.json в каталоге данных, по умолчанию auto_check=true, check_interval_hours=24.
Шаг 6: Включение HTTP API Server (привязывается только к локальной машине)
Почему Если вы хотите, чтобы внешние программы (например, плагин VS Code) «переключали учётные записи/обновляли квоту/читали журналы», HTTP API Server более подходит, чем порт обратного прокси: он жёстко привязан к 127.0.0.1, открыт только для локальной машины.
Действия: в Settings → Advanced в области «HTTP API»:
- Включите переключатель.
- Установите порт и нажмите сохранить.
Вы должны увидеть: UI подскажет «требуется перезапуск» (потому что бэкенд только при запуске читает http_api_settings.json и запускает службу).
Шаг 7: Проверка HTTP API с помощью curl (пробное действие/переключение/журналы)
Почему Вам нужен воспроизводимый замкнутый цикл проверки: можно выполнить пробное действие/переключение/обновление, и понять их асинхронные задачи.
Порт по умолчанию — 19527. Если вы изменили порт, замените 19527 ниже на ваше фактическое значение.
# пробное действие
curl -sS "http://127.0.0.1:19527/health" && echo
# список учётных записей (включая сводку квоты)
curl -sS "http://127.0.0.1:19527/accounts" | head -n 5
# получение текущей учётной записи
curl -sS "http://127.0.0.1:19527/accounts/current" | head -n 5
# переключение учётной записи (обратите внимание: возвращает 202, выполняется асинхронно)
curl -sS -i \
-H 'Content-Type: application/json' \
-d '{"account_id":"<account_id>"}' \
"http://127.0.0.1:19527/accounts/switch"
# обновление всех квот (тоже 202, асинхронно)
curl -sS -i -X POST "http://127.0.0.1:19527/accounts/refresh"
# чтение журналов прокси (limit/offset/filter/errors_only)
curl -sS "http://127.0.0.1:19527/logs?limit=50&offset=0&filter=&errors_only=false" | head -n 5 # пробное действие
Invoke-RestMethod "http://127.0.0.1:19527/health"
# список учётных записей
Invoke-RestMethod "http://127.0.0.1:19527/accounts" | ConvertTo-Json -Depth 5
# получение текущей учётной записи
Invoke-RestMethod "http://127.0.0.1:19527/accounts/current" | ConvertTo-Json -Depth 5
# переключение учётной записи (возвращает 202)
$body = @{ account_id = "<account_id>" } | ConvertTo-Json
Invoke-WebRequest -Method Post -ContentType "application/json" -Body $body "http://127.0.0.1:19527/accounts/switch" | Select-Object -ExpandProperty StatusCode
# обновление всех квот (возвращает 202)
Invoke-WebRequest -Method Post "http://127.0.0.1:19527/accounts/refresh" | Select-Object -ExpandProperty StatusCode
# чтение журналов прокси
Invoke-RestMethod "http://127.0.0.1:19527/logs?limit=50&offset=0&filter=&errors_only=false" | ConvertTo-Json -Depth 5Вы должны увидеть:
/healthвозвращает{"status":"ok","version":"..."}в формате JSON./accounts/switchвозвращает 202 (Accepted), и подсказывает «task started». Настоящее переключение выполняется в фоне.
Контрольная точка ✅
- Вы можете объяснить, почему язык/тема «изменились, сразу вступили в силу», а порт HTTP API требует перезапуска
- Вы можете объяснить, почему закрытие окна не завершает процесс, и где действительно выйти
- Вы можете выполнить
/healthи/accountsс помощьюcurl, и понять, что/accounts/switch— асинхронно
Напоминания о возможных ошибках
- HTTP API Server жёстко привязан к
127.0.0.1, это другое дело, чемproxy.allow_lan_access. - Логика «проверять или нет» автоматической проверки определяется при запуске приложения; после триггирования сначала обновляется
last_check_time, даже если последующая проверка неудаётся, в течение короткого времени повторное всплывающее окно не появится. - «Закрытие окна без выхода» — это задуманное поведение; для освобождения ресурсов процесса используйте
Quitв трее.
Краткое содержание урока
- Язык: немедленное переключение интерфейса + запись обратно в конфигурацию (
i18n.changeLanguage+save_config) - Тема: унифицированно применяется
ThemeManagerкdata-theme, классуdarkи цвету фона окна (Linux — исключение) - Обновления: при запуске приложения по
update_settings.jsonрешается, показывать ли всплывающее окно, установка отвечает Tauri Updater - HTTP API: включён по умолчанию, только локальный доступ, конфигурация сохраняется в
http_api_settings.json, изменение порта требует перезапуска
Предварительный просмотр следующего урока
Следующий урок перейдёт в Развертывание на сервере: Docker noVNC vs Headless Xvfb (advanced-deployment), перенося десктоп на NAS/сервер для запуска.
Приложение: Ссылка на исходный код
Нажмите, чтобы развернуть и просмотреть местоположение исходного кода
Дата обновления: 2026-01-23
| Тема | Путь к файлу | Номер строки |
|---|---|---|
| Инициализация i18n и fallback | src/i18n.ts | 1-67 |
| Settings: язык/тема/автозапуск/обновления/настройки HTTP API | src/pages/Settings.tsx | 16-730 |
| Приложение: синхронизация языка + запуск проверки обновлений | src/App.tsx | 52-124 |
| ThemeManager: применение темы, прослушивание system theme, запись в localStorage | src/components/common/ThemeManager.tsx | 1-82 |
| UpdateNotification: проверка обновлений, автоматическое скачивание/установка и relaunch | src/components/UpdateNotification.tsx | 1-217 |
| Проверка обновлений: GitHub Releases + интервал проверки | src-tauri/src/modules/update_checker.rs | 1-187 |
Трей: генерация меню по языкам + прослушивание config://updated для обновления | src-tauri/src/modules/tray.rs | 1-255 |
Сохранение конфигурации: отправка config://updated + горячее обновление работающего обратного прокси | src-tauri/src/commands/mod.rs | 296-334 |
| Команды автозапуска: toggle/is_enabled (совместимость с Windows disable) | src-tauri/src/commands/autostart.rs | 1-39 |
| Tauri: инициализация autostart/updater + закрытие окна转为 hide + запуск HTTP API | src-tauri/src/lib.rs | 50-160 |
| HTTP API: сохранение настроек + маршруты (health/accounts/switch/refresh/logs) + привязка только к 127.0.0.1 | src-tauri/src/modules/http_api.rs | 1-95 |
| HTTP API: Server bind и регистрация маршрутов | src-tauri/src/modules/http_api.rs | 51-94 |
| Команды HTTP API: get/save | src-tauri/src/commands/mod.rs | 773-789 |