Skip to content

Миграция аккаунта: настройка на разных устройствах и обновление версий

Чему вы научитесь

  • ✅ Переносить аккаунт с одного устройства на другое
  • ✅ Понимать изменения версий формата хранения (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-файл с информацией об аккаунте.

bash
# macOS/Linux
ls -la ~/.config/opencode/antigravity-accounts.json

# Windows PowerShell
Get-ChildItem "$env:APPDATA\opencode\antigravity-accounts.json"

Ожидаемый результат: файл существует и содержит примерно следующее:

json
{
  "version": 3,
  "accounts": [...],
  "activeIndex": 0
}

Если файл не существует, значит аккаунт ещё не добавлен — сначала выполните opencode auth login.

Шаг 2: Скопируйте файл аккаунта на целевое устройство

Зачем Передать информацию об аккаунте (refresh token и Project ID) на новое устройство.

bash
# Способ 1: через scp (по SSH)
scp ~/.config/opencode/antigravity-accounts.json user@new-machine:/tmp/

# Способ 2: через USB-накопитель
cp ~/.config/opencode/antigravity-accounts.json /Volumes/USB/
powershell
# Способ 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: Установите плагин на целевом устройстве

Зачем Убедиться в совместимости версии плагина на целевом устройстве.

bash
opencode plugin add opencode-antigravity-auth@beta

Ожидаемый результат: сообщение об успешной установке плагина.

Шаг 4: Поместите файл в правильное место

Зачем Плагин ищет файл аккаунта только по фиксированному пути.

bash
# Создайте директорию (если не существует)
mkdir -p ~/.config/opencode

# Скопируйте файл
cp /tmp/antigravity-accounts.json ~/.config/opencode/

# Проверьте права доступа
chmod 600 ~/.config/opencode/antigravity-accounts.json
powershell
# Скопируйте файл (директория создастся автоматически)
Copy-Item "$env:Downloads\antigravity-accounts.json" "$env:APPDATA\opencode\"

# Проверка
Test-Path "$env:APPDATA\opencode\antigravity-accounts.json"

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

Шаг 5: Проверьте результат миграции

Зачем Убедиться, что аккаунт корректно загружен.

bash
# Список аккаунтов (запустит загрузку файла аккаунтов плагином)
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 всё ещё действителен.

bash
# Отправьте тестовый запрос в OpenCode
# Выберите: google/antigravity-gemini-3-flash

Ожидаемый результат: модель отвечает корректно.

Контрольный список ✅

  • [ ] На целевом устройстве отображаются перенесённые аккаунты
  • [ ] Тестовый запрос выполнен успешно (без ошибок аутентификации)
  • [ ] В логах плагина нет сообщений об ошибках

Типичные проблемы

Проблема 1: Ошибка "API key missing"

Симптом: после миграции запрос возвращает ошибку API key missing.

Причина: refresh token мог истечь или быть отозван Google (например, при смене пароля или событии безопасности).

Решение:

bash
# Удалите файл аккаунта и пройдите аутентификацию заново
rm ~/.config/opencode/antigravity-accounts.json  # macOS/Linux
del "%APPDATA%\opencode\antigravity-accounts.json"  # Windows

opencode auth login

Проблема 2: Несовместимость версий плагина

Симптом: после миграции файл аккаунта не загружается, в логах сообщение Unknown storage version.

Причина: версия плагина на целевом устройстве слишком старая и не поддерживает текущий формат хранения.

Решение:

bash
# Обновите до последней версии
opencode plugin add opencode-antigravity-auth@latest

# Повторите тест
opencode auth login

Проблема 3: Потеря данных двойного пула квот

Симптом: после миграции модель Gemini использует только один пул квот, автоматический fallback не работает.

Причина: при миграции был скопирован только antigravity-accounts.json, но файл конфигурации antigravity.json не был перенесён.

Решение:

Скопируйте также файл конфигурации (если включён quota_fallback):

bash
# Скопируйте файл конфигурации
cp ~/.config/opencode/antigravity.json ~/.config/opencode/
powershell
# Скопируйте файл конфигурации
Copy-Item "$env:APPDATA\opencode\antigravity.json" "$env:APPDATA\opencode\"

Проблема 4: Ошибка прав доступа к файлу

Симптом: на macOS/Linux появляется сообщение Permission denied.

Причина: неправильные права доступа к файлу, плагин не может его прочитать.

Решение:

bash
# Исправьте права доступа
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).

Итоги урока

Основные шаги миграции аккаунта:

  1. Найдите файл: на исходном устройстве найдите antigravity-accounts.json
  2. Скопируйте и передайте: безопасно передайте на целевое устройство
  3. Разместите правильно: поместите в директорию конфигурации (~/.config/opencode/ или %APPDATA%\opencode\)
  4. Проверьте: выполните opencode auth login для подтверждения распознавания

Плагин автоматически выполняет миграцию версий, ручное изменение формата файла хранения не требуется. Однако при ошибке invalid_grant потребуется повторная аутентификация.

Анонс следующего урока

В следующем уроке мы изучим Предупреждение о ToS.

Вы узнаете:

  • Какие риски связаны с использованием Antigravity Auth
  • Как избежать блокировки аккаунта
  • Ограничения условий использования Google

Приложение: справочник по исходному коду

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

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

ФункцияПуть к файлуСтроки
Определение формата храненияsrc/plugin/storage.ts128-198
Миграция v1→v2src/plugin/storage.ts366-395
Миграция v2→v3src/plugin/storage.ts397-431
Загрузка аккаунтов (с автомиграцией)src/plugin/storage.ts433-518
Путь к директории конфигурацииsrc/plugin/storage.ts202-213
Логика удаления дубликатовsrc/plugin/storage.ts301-364

Ключевые интерфейсы:

  • AccountStorageV3 (формат хранения v3):

    typescript
    interface AccountStorageV3 {
      version: 3;
      accounts: AccountMetadataV3[];
      activeIndex: number;
      activeIndexByFamily?: { claude?: number; gemini?: number; };
    }
  • AccountMetadataV3 (метаданные аккаунта):

    typescript
    interface 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):

    typescript
    interface 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)