Миграция аккаунта: настройка на разных устройствах и обновление версий
Чему вы научитесь
- ✅ Переносить аккаунт с одного устройства на другое
- ✅ Понимать изменения версий формата хранения (v1/v2/v3)
- ✅ Решать проблемы аутентификации после миграции (ошибка invalid_grant)
- ✅ Использовать один аккаунт на нескольких устройствах
Ваша текущая проблема
Вы купили новый компьютер и хотите продолжить использовать Antigravity Auth для доступа к Claude и Gemini 3, но не хотите заново проходить процесс OAuth-аутентификации. Или после обновления плагина обнаружили, что старые данные аккаунта больше не работают.
Когда это пригодится
- 📦 Новое устройство: миграция со старого компьютера на новый
- 🔄 Синхронизация между устройствами: общий аккаунт для настольного ПК и ноутбука
- 🆙 Обновление версии: изменение формата хранения после обновления плагина
- 💾 Восстановление из резервной копии: регулярное резервное копирование данных аккаунта
Основная идея
Миграция аккаунта — это процесс копирования файла аккаунта (antigravity-accounts.json) с одного устройства на другое. Плагин автоматически обрабатывает обновление версии формата хранения.
Обзор механизма миграции
Формат хранения имеет контроль версий (текущая версия — v3), плагин автоматически выполняет миграцию версий:
| Версия | Основные изменения | Текущий статус |
|---|---|---|
| v1 → v2 | Структурирование состояния ограничения скорости | ✅ Автоматическая миграция |
| v2 → v3 | Поддержка двух пулов квот (gemini-antigravity/gemini-cli) | ✅ Автоматическая миграция |
Расположение файла хранения (кроссплатформенно):
| Платформа | Путь |
|---|---|
| macOS/Linux | ~/.config/opencode/antigravity-accounts.json |
| Windows | %APPDATA%\opencode\antigravity-accounts.json |
Напоминание о безопасности
Файл аккаунта содержит OAuth refresh token, который эквивалентен паролю. При передаче используйте шифрование (например, SFTP, зашифрованный ZIP).
🎒 Подготовка
- [ ] На целевом устройстве установлен OpenCode
- [ ] На целевом устройстве установлен плагин Antigravity Auth:
opencode plugin add opencode-antigravity-auth@beta - [ ] Обеспечена безопасная передача файлов между устройствами (SSH, USB-накопитель и т.д.)
Пошаговая инструкция
Шаг 1: Найдите файл аккаунта на исходном устройстве
Зачем Необходимо найти JSON-файл с информацией об аккаунте.
# macOS/Linux
ls -la ~/.config/opencode/antigravity-accounts.json
# Windows PowerShell
Get-ChildItem "$env:APPDATA\opencode\antigravity-accounts.json"Ожидаемый результат: файл существует и содержит примерно следующее:
{
"version": 3,
"accounts": [...],
"activeIndex": 0
}Если файл не существует, значит аккаунт ещё не добавлен — сначала выполните opencode auth login.
Шаг 2: Скопируйте файл аккаунта на целевое устройство
Зачем Передать информацию об аккаунте (refresh token и Project ID) на новое устройство.
# Способ 1: через scp (по SSH)
scp ~/.config/opencode/antigravity-accounts.json user@new-machine:/tmp/
# Способ 2: через USB-накопитель
cp ~/.config/opencode/antigravity-accounts.json /Volumes/USB/# Способ 1: через PowerShell Copy-Item (по SMB)
Copy-Item "$env:APPDATA\opencode\antigravity-accounts.json" "\\new-machine\c$\Users\user\Downloads\"
# Способ 2: через USB-накопитель
Copy-Item "$env:APPDATA\opencode\antigravity-accounts.json" "E:\"Ожидаемый результат: файл успешно скопирован во временную директорию целевого устройства (например, /tmp/ или Downloads/).
Шаг 3: Установите плагин на целевом устройстве
Зачем Убедиться в совместимости версии плагина на целевом устройстве.
opencode plugin add opencode-antigravity-auth@betaОжидаемый результат: сообщение об успешной установке плагина.
Шаг 4: Поместите файл в правильное место
Зачем Плагин ищет файл аккаунта только по фиксированному пути.
# Создайте директорию (если не существует)
mkdir -p ~/.config/opencode
# Скопируйте файл
cp /tmp/antigravity-accounts.json ~/.config/opencode/
# Проверьте права доступа
chmod 600 ~/.config/opencode/antigravity-accounts.json# Скопируйте файл (директория создастся автоматически)
Copy-Item "$env:Downloads\antigravity-accounts.json" "$env:APPDATA\opencode\"
# Проверка
Test-Path "$env:APPDATA\opencode\antigravity-accounts.json"Ожидаемый результат: файл находится в директории конфигурации.
Шаг 5: Проверьте результат миграции
Зачем Убедиться, что аккаунт корректно загружен.
# Список аккаунтов (запустит загрузку файла аккаунтов плагином)
opencode auth login
# Если аккаунты уже есть, отобразится:
# 2 account(s) saved:
# 1. [email protected]
# 2. [email protected]
# (a)dd new account(s) or (f)resh start? [a/f]:Нажмите Ctrl+C для выхода (добавлять новый аккаунт не нужно).
Ожидаемый результат: плагин успешно распознал список аккаунтов, включая email перенесённых аккаунтов.
Шаг 6: Протестируйте первый запрос
Зачем Проверить, что refresh token всё ещё действителен.
# Отправьте тестовый запрос в OpenCode
# Выберите: google/antigravity-gemini-3-flashОжидаемый результат: модель отвечает корректно.
Контрольный список ✅
- [ ] На целевом устройстве отображаются перенесённые аккаунты
- [ ] Тестовый запрос выполнен успешно (без ошибок аутентификации)
- [ ] В логах плагина нет сообщений об ошибках
Типичные проблемы
Проблема 1: Ошибка "API key missing"
Симптом: после миграции запрос возвращает ошибку API key missing.
Причина: refresh token мог истечь или быть отозван Google (например, при смене пароля или событии безопасности).
Решение:
# Удалите файл аккаунта и пройдите аутентификацию заново
rm ~/.config/opencode/antigravity-accounts.json # macOS/Linux
del "%APPDATA%\opencode\antigravity-accounts.json" # Windows
opencode auth loginПроблема 2: Несовместимость версий плагина
Симптом: после миграции файл аккаунта не загружается, в логах сообщение Unknown storage version.
Причина: версия плагина на целевом устройстве слишком старая и не поддерживает текущий формат хранения.
Решение:
# Обновите до последней версии
opencode plugin add opencode-antigravity-auth@latest
# Повторите тест
opencode auth loginПроблема 3: Потеря данных двойного пула квот
Симптом: после миграции модель Gemini использует только один пул квот, автоматический fallback не работает.
Причина: при миграции был скопирован только antigravity-accounts.json, но файл конфигурации antigravity.json не был перенесён.
Решение:
Скопируйте также файл конфигурации (если включён quota_fallback):
# Скопируйте файл конфигурации
cp ~/.config/opencode/antigravity.json ~/.config/opencode/# Скопируйте файл конфигурации
Copy-Item "$env:APPDATA\opencode\antigravity.json" "$env:APPDATA\opencode\"Проблема 4: Ошибка прав доступа к файлу
Симптом: на macOS/Linux появляется сообщение Permission denied.
Причина: неправильные права доступа к файлу, плагин не может его прочитать.
Решение:
# Исправьте права доступа
chmod 600 ~/.config/opencode/antigravity-accounts.json
chown $USER ~/.config/opencode/antigravity-accounts.jsonПодробности автоматической миграции формата хранения
При загрузке аккаунтов плагин автоматически определяет версию хранения и выполняет миграцию:
v1 (старая версия)
↓ migrateV1ToV2()
v2
↓ migrateV2ToV3()
v3 (текущая версия)Правила миграции:
- v1 → v2: разделение
rateLimitResetTimeна два поляclaudeиgemini - v2 → v3: разделение
geminiнаgemini-antigravityиgemini-cli(поддержка двойного пула квот) - Автоматическая очистка: истёкшие времена сброса ограничения скорости отфильтровываются (
> Date.now())
Автоматическое удаление дубликатов
При загрузке аккаунтов плагин автоматически удаляет дубликаты по email, сохраняя самый новый аккаунт (сортировка по lastUsed и addedAt).
Итоги урока
Основные шаги миграции аккаунта:
- Найдите файл: на исходном устройстве найдите
antigravity-accounts.json - Скопируйте и передайте: безопасно передайте на целевое устройство
- Разместите правильно: поместите в директорию конфигурации (
~/.config/opencode/или%APPDATA%\opencode\) - Проверьте: выполните
opencode auth loginдля подтверждения распознавания
Плагин автоматически выполняет миграцию версий, ручное изменение формата файла хранения не требуется. Однако при ошибке invalid_grant потребуется повторная аутентификация.
Анонс следующего урока
В следующем уроке мы изучим Предупреждение о ToS.
Вы узнаете:
- Какие риски связаны с использованием Antigravity Auth
- Как избежать блокировки аккаунта
- Ограничения условий использования Google
Приложение: справочник по исходному коду
Нажмите, чтобы развернуть расположение исходного кода
Дата обновления: 2026-01-23
| Функция | Путь к файлу | Строки |
|---|---|---|
| Определение формата хранения | src/plugin/storage.ts | 128-198 |
| Миграция v1→v2 | src/plugin/storage.ts | 366-395 |
| Миграция v2→v3 | src/plugin/storage.ts | 397-431 |
| Загрузка аккаунтов (с автомиграцией) | src/plugin/storage.ts | 433-518 |
| Путь к директории конфигурации | src/plugin/storage.ts | 202-213 |
| Логика удаления дубликатов | src/plugin/storage.ts | 301-364 |
Ключевые интерфейсы:
AccountStorageV3(формат хранения v3):typescriptinterface AccountStorageV3 { version: 3; accounts: AccountMetadataV3[]; activeIndex: number; activeIndexByFamily?: { claude?: number; gemini?: number; }; }AccountMetadataV3(метаданные аккаунта):typescriptinterface AccountMetadataV3 { email?: string; // Email аккаунта Google refreshToken: string; // OAuth refresh token (ключевой) projectId?: string; // ID проекта GCP managedProjectId?: string; // ID управляемого проекта addedAt: number; // Временная метка добавления lastUsed: number; // Время последнего использования lastSwitchReason?: "rate-limit" | "initial" | "rotation"; rateLimitResetTimes?: RateLimitStateV3; // Время сброса ограничения скорости (v3 поддерживает двойной пул квот) coolingDownUntil?: number; // Время окончания охлаждения cooldownReason?: CooldownReason; // Причина охлаждения }RateLimitStateV3(состояние ограничения скорости v3):typescriptinterface RateLimitStateV3 { claude?: number; // Время сброса квоты Claude "gemini-antigravity"?: number; // Время сброса квоты Gemini Antigravity "gemini-cli"?: number; // Время сброса квоты Gemini CLI }
Ключевые функции:
loadAccounts(): загрузка файла аккаунтов с автоматическим определением версии и миграцией (storage.ts:433)migrateV1ToV2(): миграция формата v1 в v2 (storage.ts:366)migrateV2ToV3(): миграция формата v2 в v3 (storage.ts:397)deduplicateAccountsByEmail(): удаление дубликатов по email, сохранение самого нового аккаунта (storage.ts:301)getStoragePath(): получение пути к файлу хранения, кроссплатформенная совместимость (storage.ts:215)
Логика миграции:
- Проверка поля
data.version(storage.ts:446) - v1: сначала миграция в v2, затем в v3 (storage.ts:447-457)
- v2: прямая миграция в v3 (storage.ts:458-468)
- v3: миграция не требуется, прямая загрузка (storage.ts:469-470)
- Автоматическая очистка истёкших времён сброса ограничения скорости (storage.ts:404-410)