4.5 KiB
4.5 KiB
云端账号管理与智能切换 (Cloud Account Features)
本文档详细介绍了 Antigravity Manager 中实现的云端 AI 账号管理与切换功能。该功能允许用户管理多个 Google 账号,监控 API 配额,并一键无缝切换 IDE 的当前活动账号。
1. 核心功能
1.1 账号池管理
- 添加账号:支持通过 Google OAuth 授权码添加账号。
- 列表展示:展示所有已添加的账号,包括头像、邮箱、最后使用时间。
- 状态监控:实时显示账号状态(Active, Rate Limited, Expired)以及是否为当前活动账号。
- 删除账号:支持从本地数据库中移除账号。
1.2 配额实时监控
- 多模型支持:分别监控
gemini-pro,claude-3-5-sonnet等模型的配额使用情况。 - 可视化展示:通过进度条和颜色(绿/黄/红)直观展示剩余配额百分比。
- 自动/手动刷新:支持手动刷新配额,系统也会在切换前自动检查。
1.4 智能自动切换 (Intelligent Auto-Switching)
- 无限池模式:当检测到当前账号配额不足(<5%)或被限流时,系统会自动寻找最佳备用账号并切换。
- 后台监控:内置
CloudMonitorService, 默认每 5 分钟轮询一次所有账号的 Quota 状态。 - 全局开关:用户可在界面上一键开启或关闭此功能。
2. 技术实现
2.1 数据库设计 (cloud_accounts.db)
使用 SQLite 存储账号信息,独立于 IDE 的本地数据库。
CREATE TABLE accounts (
id TEXT PRIMARY KEY, -- UUID
provider TEXT NOT NULL, -- 'google' | 'anthropic'
email TEXT NOT NULL, -- 邮箱
name TEXT, -- 显示名称
avatar_url TEXT, -- 头像 URL
token_json TEXT NOT NULL, -- OAuth Token (JSON)
quota_json TEXT, -- 配额数据 (JSON)
created_at INTEGER NOT NULL, -- 创建时间戳
last_used INTEGER NOT NULL, -- 最后使用时间戳
status TEXT DEFAULT 'active', -- 账号状态
is_active INTEGER DEFAULT 0 -- 是否为当前 IDE 活动账号
);
-- 全局配置表
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
);
2.2 IPC 接口设计
后端通过 src/ipc/cloud 提供以下 oRPC 接口:
addGoogleAccount(authCode: string): 交换 Token 并保存账号。listCloudAccounts(): 获取账号列表。refreshAccountQuota(accountId: string): 刷新指定账号的配额和 Token。switchCloudAccount(accountId: string): 执行账号切换流程。deleteCloudAccount(accountId: string): 删除账号。getAutoSwitchEnabled()/setAutoSwitchEnabled(enabled): 获取/设置自动切换开关。forcePollCloudMonitor(): 手动触发后台轮询。
2.3 Token 注入原理 (ProtobufUtils)
IDE 将鉴权信息存储在 state.vscdb 的 ItemTable 表中,key 为 jetskiStateSync.agentManagerInitState。
value 是一个 Base64 编码的 Protobuf 二进制数据。
我们实现了 src/utils/protobuf.ts 工具类,能够:
- 解码:解析 Varint 和 Length-Delimited 字段。
- 修改:定位并移除旧的 Field 6 (OAuthTokenInfo)。
- 重构:根据新的 Access Token 和 Refresh Token 构建新的 Field 6 并插入。
2.4 切换流程
- Token 检查:检查目标账号 Token 是否临期,如需刷新则自动刷新。
- 停止进程:优雅关闭 Antigravity 进程。
- 注入 Token:调用
CloudAccountRepo.injectCloudToken修改 IDE 数据库。 - 更新状态:将目标账号标记为
is_active = 1,其他账号设为 0。 - 重启进程:重新启动 IDE,使其加载新的凭证。
2.5 自动切换逻辑 (AutoSwitchService)
- 监控:
CloudMonitorService定时(5分钟)轮询所有账号配额。 - 判断:如果当前活动账号的所有关键模型配额低于 5%,或状态为
rate_limited。 - 择优:从账号池中筛选状态为
active且配额充足的账号,按配额剩余量排序。 - 执行:自动调用
switchCloudAccount完成切换,并通知用户。
2.6 安全加固 (Security Hardening)
- 密钥管理:使用操作系统原生凭据管理器(Windows Credential Manager / macOS Keychain)通过
keytar库安全存储 Master Key(AES-256)。 - 数据加密:所有敏感数据(
token_json,quota_json)在存入 SQLite 数据库前均使用AES-256-GCM算法加密。 - 自动迁移:应用启动时会自动检测并迁移旧的明文数据,确保安全性平滑升级。