song
|
195e227c04
|
merge: 合并 upstream/main 并保留本地图片计费功能
|
2026-01-06 10:49:26 +08:00 |
|
song
|
6fa704d6fc
|
fix: Antigravity 账户刷新 token 500 错误
AccountHandler.Refresh 方法缺少对 Antigravity 平台的处理分支,
导致刷新时错误地走进 Claude 刷新逻辑。
|
2026-01-05 18:29:37 +08:00 |
|
song
|
0400fcdca4
|
fix: 更新 API 合同测试,添加 image_count 和 image_size 字段
|
2026-01-05 17:31:23 +08:00 |
|
song
|
5b1907fe61
|
fix: 图片计费代码审查问题修复
- isImageGenerationModel 改为精确匹配/前缀匹配,避免误匹配
- 新增 normalizePrice 函数,支持负数清除价格配置
- 更新注释说明 Gemini API 每次请求只生成一张图片
- 添加测试用例验证不会误匹配自定义模型名
|
2026-01-05 17:14:06 +08:00 |
|
song
|
d4c2b723a5
|
feat: 图片生成计费功能
- 新增 Group 图片价格配置(image_price_1k/2k/4k)
- BillingService 新增 CalculateImageCost 方法
- AntigravityGatewayService 支持识别图片生成模型并按次计费
- UsageLog 新增 image_count 和 image_size 字段
- 前端分组管理支持配置图片价格(antigravity 和 gemini 平台)
- 图片计费复用通用计费能力(余额检查、扣费、倍率、订阅限额)
|
2026-01-05 17:07:29 +08:00 |
|
song
|
63453fbfa0
|
style: gofmt
|
2026-01-04 16:58:51 +08:00 |
|
song
|
50f9272850
|
feat(antigravity): gemini-2.5-flash-image 转发到 gemini-3-pro-image
|
2026-01-04 16:53:35 +08:00 |
|
song
|
3932bf0353
|
fix: 转发失败日志添加账户ID信息
|
2026-01-04 16:45:11 +08:00 |
|
song
|
ce2422324c
|
fix(antigravity): 增加流式读取错误日志的账户信息
|
2026-01-04 15:59:21 +08:00 |
|
song
|
0aa216915b
|
fix(antigravity): 减少 API 转发最大重试次数至 3
|
2026-01-04 15:59:21 +08:00 |
|
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 |
|