Commit Graph
60 Commits
Author SHA1 Message Date
song 60afc7f3ed fix: 恢复 thinking block 处理逻辑
- 修复合并冲突导致的逻辑错误
- Gemini 模型使用 dummy signature
- Claude 模型跳过无 signature 的 thinking block
- 删除未使用的 isValidThoughtSignature 函数
2026-01-04 15:59:21 +08:00
song 1dd3521190 fix(antigravity): 优化 token 刷新错误处理
- 不可重试错误(invalid_grant等)直接标记 error,不重试
- 其他错误仅记录日志,不标记 error(可能是临时网络问题)
- 仅影响 Antigravity 账户,其他平台保持原有逻辑
2026-01-04 15:59:21 +08:00
song 44785a9a8c feat(ci): 支持通过 repository variable 控制 SIMPLE_RELEASE 2026-01-04 15:59:21 +08:00
song e91fba82a8 fix(ci): simple release 也构建前端 2026-01-04 15:59:21 +08:00
song 84d6480b4e fix(ci): simple release 不嵌入前端 2026-01-04 15:59:21 +08:00
song c0e296f4a9 feat(ci): 增加 SIMPLE_RELEASE 参数支持简化发布 2026-01-04 15:59:21 +08:00
song 0dc4b113d8 fix(antigravity): 统一转发日志格式,添加 session_id 追踪 2026-01-04 15:59:21 +08:00
song c8e55ab2ac fix: 移除 antigravity 模块中的 [Debug] 日志
这些调试日志不应在生产环境中输出。
2026-01-04 15:59:21 +08:00
song fb9930004c ci: DockerHub 配置可选,未配置时自动跳过 2026-01-04 15:59:21 +08:00
song d2aaf0b491 refactor(service): 将 AccountUsageService 的包级缓存改为依赖注入 2026-01-03 13:10:43 +08:00
song 0452f32003 feat(antigravity): 支持 Gemini cachedContentTokenCount 映射到 Claude cache_read_input_tokens
- 在 GeminiUsageMetadata 添加 CachedContentTokenCount 字段
- 修正 token 映射:Gemini promptTokenCount 包含缓存,Claude input_tokens 不包含
- 流式和非流式响应均已支持
2026-01-03 01:26:18 +08:00
song 9ed823fdbd fix: 移除 antigravity 模块中的 [Debug] 日志
这些调试日志不应在生产环境中输出。
2026-01-03 00:36:48 +08:00
song 45e28dd9c1 fix(lint): 修复 gofmt 格式问题 2026-01-03 00:32:54 +08:00
song 2e60a5964e docs(i18n): 更新 Antigravity 混合调度选项的文案
- 显示名称改为「在 /v1/messages 中使用」
- 添加更醒目的警告提示,强调 Antigravity 和 Anthropic 账号不能混用
2026-01-03 00:22:35 +08:00
song ec03f82fb9 revert(antigravity): 恢复 Claude 模型 thinking 功能
还原 b6d1e7a 中错误禁用 Claude thinking 的逻辑:
- 移除 isThinkingEnabled 对 allowDummyThought 的依赖
- 移除非 Gemini 模型时清除 Thinking 配置的代码
- 恢复 buildParts 中 thinking block 的原始处理逻辑
- 移除不再使用的 isValidThoughtSignature 函数
2026-01-03 00:08:00 +08:00
song 4543a6f043 refactor(antigravity): 统一额度刷新机制与 Claude 一致
将 Antigravity 的额度刷新从后台定时刷新改为按需获取模式,与 Claude 统一:

- 删除 AntigravityQuotaRefresher 后台服务
- 新增 QuotaFetcher 接口和 AntigravityQuotaFetcher 实现
- 前端改为调用 usage API 获取额度,支持 loading/error 状态
- 统一使用内存缓存(10 分钟 TTL)
2026-01-02 22:41:55 +08:00
song 8a50ca592a test: 更新 haiku 模型映射测试用例 2026-01-02 17:50:39 +08:00
song 7f5ec28488 docs: 添加 Simple Mode 说明和 Antigravity 已知问题 2026-01-02 17:46:39 +08:00
song 991c3ea68b refactor(antigravity): haiku 模型映射到 sonnet 2026-01-02 17:46:39 +08:00
song b2b842bf7a refactor(antigravity): countTokens 端点直接返回空值
- Gemini 端点 countTokens 直接返回 {"totalTokens": 0}
- Claude 端点 countTokens 返回 {"input_tokens": 0}
- 移除透传上游和本地估算逻辑
2026-01-02 17:46:39 +08:00
song f1fdb5d38f refactor: /antigravity/v1/models 使用专用 handler
不再复用 Models(),避免内部 ForcePlatform 判断
2026-01-02 10:32:20 +08:00
song 6cc7f9978c merge: 合并 upstream/main 2026-01-02 10:22:29 +08:00
song 95d09f60f8 feat(antigravity): 添加 models 端点支持
- /antigravity/models: 返回全部模型(Claude + Gemini)
- /antigravity/v1/models: 返回全部模型(Claude API 格式)
- /antigravity/v1beta/models: 仅返回 Gemini 模型(v1beta 格式)

统一管理 antigravity 模型定义,避免重复代码
2026-01-02 10:21:05 +08:00
song edee46e47f test: 更新 model mapping 测试用例期望值 2026-01-01 02:07:41 +08:00
song 85485f1702 style: fix gofmt formatting 2026-01-01 01:59:25 +08:00
song 7f7bbdf677 refactor(antigravity): 简化模型映射逻辑,支持前缀匹配
- 删除精确映射表 antigravityModelMapping,统一使用前缀映射
- 前缀映射支持模型版本号变化(如 -20251111, -thinking, -preview)
- 简化 IsModelSupported 函数,所有 claude-/gemini- 前缀模型都支持
- 添加跨协议测试用例:Claude 端点调用 Gemini 模型、Gemini 端点调用 Claude 模型
2026-01-01 01:43:20 +08:00
song aa4631640a Merge branch 'main' into fix/antigravity_auth_3 2025-12-31 00:36:43 +08:00
song 4a0008df47 feat(Antigravity): 为不合格账户显示警告图标 2025-12-31 00:34:24 +08:00
song f284ea72fc refactor(Antigravity): 保存完整 API 响应到 extra 字段
- LoadCodeAssist/FetchAvailableModels 返回原始 JSON
- extra 新增 load_code_assist 和 available_models 保存原始响应
- 前端 tier 从 load_code_assist.paidTier.id 提取
- 删除冗余的 updateAccountTier 函数
2025-12-31 00:15:25 +08:00
song 0a4e0edc85 fix(Antigravity): 配额刷新时自动补充缺失的 project_id
旧账户可能没有 project_id,在刷新配额时自动生成并保存。
2025-12-30 23:58:03 +08:00
song fa48cf27eb feat(Antigravity): 为无 project_id 的账户生成随机 project_id
部分账户类型(如 g1-pro-tier)API 不返回 cloudaicompanionProject,
但实际接受任意格式的 project_id,故添加随机生成逻辑作为兜底。
2025-12-30 23:54:33 +08:00
song 1c42403e6d fix(Antigravity): 支持无 project_id 的账户类型
- 移除 project_id 强制检查,部分账户类型 API 不返回此字段
- 重构:提取 antigravity.NewAPIRequest() 统一创建 API 请求
- quota_refresher: 无 project_id 时仍可更新 tier 信息
2025-12-30 23:42:50 +08:00
song 5844ea7e6e fix(Antigravity): 修复账号测试连接认证错误
- 新增 AntigravityGatewayService.TestConnection 方法,支持 Claude/Gemini 双协议测试
- AccountTestService 改用 AntigravityGatewayService 进行测试连接
- GetAvailableModels 为 Antigravity 账号返回 Claude + Gemini 模型列表
2025-12-30 22:42:00 +08:00
song 942c3e1529 Merge branch 'main' into feature/antigravity_auth_image 2025-12-29 21:29:38 +08:00
song caa8c47b68 fix(antigravity): 修复 429 限流处理逻辑
- 只有 5 次重试全部失败后才标记账户限流
- 使用 Gemini 格式解析 429 响应中的重试时间
- Claude 模型无重试时间时默认 1 分钟,Gemini 默认 5 分钟
- 添加生图模型映射 gemini-3-pro-image-preview
2025-12-29 21:28:28 +08:00
song 42e2c5061d fix: gofmt 2025-12-29 18:15:13 +08:00
song 380c43cb03 ci: 排除 antigravity 类型文件的 gofmt 检查 2025-12-29 18:11:51 +08:00
song bc75edd800 style: interface{} → any (gofmt rewrite rule) 2025-12-29 18:05:05 +08:00
song 9774339fef fix: 删除 AntigravityQuotaRefresher 未使用的 oauthSvc 字段 2025-12-29 17:57:14 +08:00
song 026740b5e5 fix: 删除未使用的代码并修复格式
- 删除 client.go 中未使用的 proxyURL 字段
- 删除 AntigravityGatewayService 中未使用的字段和方法
- 修复 gofmt 格式问题
2025-12-29 17:54:38 +08:00
song 21a04332ec fix: 修复 golangci-lint 检查错误
- SA1029: 创建 ctxkey 包定义类型安全的 context key
- ST1005: 错误字符串首字母改小写
- errcheck: 显式忽略 bytes.Buffer.Write 返回值
- 修复单元测试中 GatewayService 缺少 cfg 字段的问题
2025-12-29 17:46:52 +08:00
song eec8b4c91e docs: 添加 Antigravity 使用说明 2025-12-29 17:19:47 +08:00
song 58545efbd7 feat(antigravity): 首页添加 Antigravity 服务商标识 2025-12-29 17:09:48 +08:00
song 2bd288a677 Merge branch 'main' into feature/antigravity_auth 2025-12-29 17:04:40 +08:00
song 234e98f1b3 feat(antigravity): 保存 ineligibleTiers 原因信息 2025-12-29 16:55:17 +08:00
song b31bfd53ab feat(antigravity): 添加专用路由,支持仅使用 antigravity 账户
添加 /antigravity/v1/* 和 /antigravity/v1beta/* 路由:
- 通过 ForcePlatform 中间件强制使用 antigravity 平台
- 跳过混合调度逻辑,仅调度 antigravity 账户
- 支持按分组优先查找,找不到时回退查询全部 antigravity 账户

修复 context key 类型不匹配问题:
- middleware 和 service 统一使用字符串常量 "ctx_force_platform"
- 解决 Go context.Value() 类型+值匹配导致的读取失败

其他改动:
- 嵌入式前端中间件白名单添加 /antigravity/ 路径
- e2e 测试 Gemini 端点 URL 添加 endpointPrefix 支持
2025-12-29 16:52:55 +08:00
song 1ad29032d3 feat(antigravity): 添加混合调度可选功能
- 后端:账户模型添加 IsMixedSchedulingEnabled() 方法,读取 extra.mixed_scheduling
- 后端:gateway_service 和 gemini_messages_compat_service 支持混合调度逻辑
- 后端:分组创建支持指定 platform 参数
- 前端:账户创建/编辑弹窗添加混合调度开关(仅 antigravity 账户显示)
- 前端:混合调度开关添加问号图标和 tooltip 说明
- 前端:GroupSelector 支持根据 mixedScheduling 属性过滤分组
- 前端:分组创建支持选择 platform
- 测试:e2e 测试添加 ENDPOINT_PREFIX 环境变量支持混合/隔离模式测试
- 测试:删除过时的 Claude signature 测试用例
2025-12-29 09:44:39 +08:00
song cf1d0f23cc feat(antigravity): 添加账户类型(tier)显示功能 2025-12-29 01:25:09 +08:00
song 995adaeee4 test: 添加 Claude signature 场景 e2e 测试
- 新增 TestClaudeMessagesWithClaudeSignature 测试
- 验证历史 thinking block 带有 Claude signature 时的处理
- 修复配额刷新服务的次要问题
2025-12-29 00:44:07 +08:00
song 08ce6de4db feat(antigravity): 添加配额窗口显示功能
后端:
- 新增 AntigravityQuotaRefresher 定时刷新配额
- Client 添加 FetchAvailableModels 方法获取模型配额
- 配额数据存入 account.extra.quota 字段

前端:
- AccountUsageCell 支持显示 Antigravity 账户配额
- UsageProgressBar 新增 amber 颜色
- 显示 G3P/G3F/G3I/C4.5 四个配额进度条
2025-12-28 22:29:01 +08:00
song b6b739431c build: e2e 测试添加 build tag 避免 CI 运行
- 添加 //go:build e2e tag,CI 不会自动运行这些测试
- Makefile 添加 test-e2e 目标用于本地手动运行
2025-12-28 21:59:40 +08:00
song ad15d9970c fix(gateway): Antigravity 账户 count_tokens 返回估算值
Antigravity 不支持 count_tokens 转发,直接返回估算值,
与 Antigravity-Manager 和 proxycast 实现保持一致。

修复 count_tokens 请求选择到 Antigravity 账户时导致 401 的问题。
2025-12-28 21:56:52 +08:00
song ff57c860e3 test: 更新 thinking signature 测试用例
将测试从无效signature改为无signature场景:
- 无效 signature 应该被上游拒绝(预期行为)
- Gemini 模型接受没有 signature 的 thinking block
2025-12-28 21:40:35 +08:00
song 635d7e77e1 fix(antigravity): 只有 Gemini 模型支持 dummy thought signature
参考 Antigravity-Manager 的实现:
- 添加 allowDummyThought 参数,只有 gemini-* 模型才启用
- Claude 模型通过 Vertex API 需要有效的 thought signatures
- thinking block 保留原有 signature
- tool_use 只在 Gemini 模型时才使用 dummy signature
2025-12-28 21:36:21 +08:00
song ba9eb684ed fix(antigravity): 与 proxycast 保持一致的 thought_signature 处理
- function_call 无条件添加 dummy thought_signature(与 proxycast 一致)
- thinking block 在 thinking 模式下统一使用 dummy signature 替换历史无效 signature
- 添加测试用例:TestClaudeMessagesWithInvalidThinkingSignature
2025-12-28 21:29:16 +08:00
song 9594c9c83a fix(antigravity): 修复 Gemini 3 thought_signature 和 schema 验证问题
- 添加 dummyThoughtSignature 常量,在 thinking 模式下为无 signature 的 tool_use 自动添加
- 增强 cleanJSONSchema:过滤 required 中不存在的属性,确保 type/properties 字段存在
- 扩展 excludedSchemaKeys:增加 $id, $ref, strict, const, examples 等不支持的字段
- 修复 429 重试逻辑:仅在所有重试失败后才标记账户为 rate_limited
- 添加 e2e 集成测试:TestClaudeMessagesWithThinkingAndTools
2025-12-28 21:25:04 +08:00
song ff06583c5d Merge branch 'main' into feature/antigravity_auth 2025-12-28 18:46:18 +08:00
song b0389ca4d2 feat: 实现 Antigravity Claude → Gemini 协议转换,haiku 映射到 gemini-3-flash 2025-12-28 18:41:55 +08:00
song 1d085d982b feat: 完善 Antigravity 多平台网关支持,修复 Gemini handler 分流逻辑 2025-12-28 17:48:52 +08:00
song 6648e6506c feat: 添加 Antigravity (Cloud AI Companion) OAuth 授权支持 2025-12-28 15:54:42 +08:00