song
23eef9ecc3
test(openai): restore image model regression coverage
2026-09-11 16:44:56 +08:00
song
1067e89fab
fix(openai): address image route review findings
2026-09-11 16:30:32 +08:00
song
04c45e9dc2
test: remove incompatible upstream image model assertions
2026-09-11 15:57:49 +08:00
song
5ee436d8a2
fix(pricing): set image cache fallback rate
2026-09-11 15:57:49 +08:00
song
e5e04de137
fix: sync upstream config and model tests
2026-09-11 15:57:49 +08:00
song
fa565eafb1
fix(pricing): add image cache pricing field
2026-09-11 15:57:38 +08:00
song
eacff0a629
fix: retain upstream config and image pricing updates
2026-09-11 15:57:38 +08:00
song
c0d5119375
feat(openai): route OAuth image requests through native Codex Images
...
Use shared model routing for image forwarding and account tests, retain Luna orchestration for legacy models, and add Image 2.5 pricing and usage accounting.
2026-09-11 15:57:09 +08:00
song
db6fbdbf29
fix(openai): satisfy Live CI checks
2026-07-25 12:51:20 +08:00
song
988d4b577e
feat(openai): add macOS Live attestation
2026-07-25 12:50:46 +08:00
song
ec23716ee4
fix(openai): align Live request metadata
2026-07-25 12:50:46 +08:00
song
e6eb23eaac
feat(openai): add Live gateway support
2026-07-25 12:50:46 +08:00
song
959af1c8f6
fix(openai): preserve codex tool call ids
2026-04-24 19:31:49 +08:00
song
b161312183
test(antigravity): 更新单URL策略下的重试断言
2026-02-10 14:36:09 +08:00
song
1f647b120a
feat(antigravity): 转发与测试支持daily/prod单URL切换
2026-02-10 13:51:29 +08:00
song
0707f3d963
chore: gofmt
2026-02-03 17:03:54 +08:00
song
976d6fb03f
chore: update antigravity example url
2026-02-03 17:00:46 +08:00
song
f1aafbc06f
chore: gofmt
2026-02-03 16:55:13 +08:00
song
7cb5444dbb
fix: update tests for group fallback
2026-02-03 16:48:52 +08:00
song
3bede6e65f
merge upstream main
2026-02-03 16:21:58 +08:00
song
2220fd18ca
merge upstream main
2026-02-03 15:36:17 +08:00
song
11ff73b578
fix: align migration checksum and import formatTime
2026-02-03 14:04:11 +08:00
song
3ecadf4aad
chore: apply stashed changes
2026-02-02 22:20:08 +08:00
song
0170d19fa7
merge upstream main
2026-02-02 22:13:50 +08:00
song
7ade9baa15
fix(gateway): 过滤 Gemini 请求中 parts 为空的消息
...
Gemini API 不接受 contents 数组中 parts 为空的消息,会返回 400 INVALID_ARGUMENT 错误。
添加 filterEmptyPartsFromGeminiRequest 函数在转发前过滤这类消息。
影响范围:ForwardGemini (antigravity) 和 ForwardNative (gemini)
2026-01-29 21:09:33 +08:00
song
5b787334c8
antigravity: 转发优先 daily
2026-01-28 11:17:39 +08:00
song
f761afb1ef
antigravity: 区分切换后重试次数
2026-01-28 00:01:03 +08:00
song
877c17251d
feat(group): 添加 MCP XML 注入开关
...
- Group 新增 mcp_xml_inject 字段,控制 Antigravity 平台的 MCP XML 协议注入
- 默认启用,可在分组设置中关闭
- 修复 GetByKeyForAuth 遗漏查询 mcp_xml_inject 字段导致认证缓存值始终为 false 的问题
2026-01-27 13:09:56 +08:00
song
66f49b67d6
feat(accounts): 账号列表显示 Antigravity scope 级别限流状态
...
- 后端 DTO 新增 scope_rate_limits 字段,从 extra 提取限流信息
- 前端状态列显示 scope 级限流徽章(Claude/Gemini/Image)
- 清除速率限制时同时清除账号级和 scope 级限流(已有实现)
2026-01-27 11:04:41 +08:00
song
08d6dc5227
feat(ops): 运维界面展示 Antigravity 账号 scope 级别限流统计
...
在运维监控的并发/排队卡片中,为 Antigravity 平台账号显示各 scope
(claude/gemini_text/gemini_image) 的限流数量统计,便于管理员了解
哪些 scope 正在被限流。
2026-01-27 09:34:10 +08:00
song
7cea6b6fc9
feat(gemini): 为 Gemini 原生平台添加图片计费支持
...
对齐 Antigravity 平台的图片计费逻辑:
- 添加 extractImageSize() 方法提取图片尺寸
- Forward() 和 ForwardNative() 返回 ImageCount/ImageSize
- 支持分组自定义图片价格和倍率
2026-01-27 00:33:48 +08:00
song
4b57e80e6a
fix: jsonb_set 嵌套路径无法创建多层 key 的问题
...
PostgreSQL jsonb_set 在 create_if_missing=true 时无法一次性创建多层嵌套路径。
例如设置 {antigravity_quota_scopes,gemini_image} 时,如果 antigravity_quota_scopes 不存在,
jsonb_set 不会自动创建外层 key,导致更新静默失败(affected=1 但数据未变)。
修复方案:嵌套两次 jsonb_set,先确保外层 key 存在,再设置内层值。
影响范围:
- SetAntigravityQuotaScopeLimit: Antigravity 平台按模型 scope 限流
- SetModelRateLimit: Anthropic 平台 Sonnet 模型限流
2026-01-26 23:40:48 +08:00
song
0059a232a6
feat(gemini): 为 Gemini 原生平台添加图片计费支持
...
对齐 Antigravity 平台的图片计费逻辑:
- 添加 extractImageSize() 方法提取图片尺寸
- Forward() 和 ForwardNative() 返回 ImageCount/ImageSize
- 支持分组自定义图片价格和倍率
2026-01-26 20:51:40 +08:00
song
e316a923d4
fix(ops): count failover kinds with suffix
2026-01-24 01:14:44 +08:00
song
fd0370c07a
Add invalid-request fallback routing
2026-01-23 22:24:46 +08:00
song
316f2fee21
feat(ops): add account switch metrics and trend
2026-01-23 19:39:48 +08:00
song
3002c7a17f
Clamp Claude maxOutputTokens to 64000
2026-01-23 10:44:21 +08:00
song
207e09500a
feat(antigravity): 支持按模型类型配置重试次数
...
新增环境变量:
- GATEWAY_ANTIGRAVITY_MAX_RETRIES_CLAUDE
- GATEWAY_ANTIGRAVITY_MAX_RETRIES_GEMINI_TEXT
- GATEWAY_ANTIGRAVITY_MAX_RETRIES_GEMINI_IMAGE
未设置时回退到平台级 GATEWAY_ANTIGRAVITY_MAX_RETRIES
2026-01-21 20:48:36 +08:00
song
52c745bc62
feat: 为 Antigravity 平台启用拦截预热请求功能
2026-01-21 20:40:45 +08:00
song
3a31fa4768
fix: 429 限流时更新账号 last_used_at
...
在设置限流标记时同时更新 last_used_at,使得刚触发 429 的账号
在后续调度中优先级降低,让其他账号有更多被选中的机会。
2026-01-21 11:50:38 +08:00
song
549c134bb8
chore: gofmt antigravity gateway service
2026-01-20 19:16:43 +08:00
song
d206721fc1
feat: make antigravity max retries configurable
2026-01-20 19:12:19 +08:00
song
64795a03e3
新增账号凭证邮箱查询接口
2026-01-20 14:17:10 +08:00
song
86d63f919d
feat(antigravity): 支持秒级 fallback 冷却时间
2026-01-20 11:38:40 +08:00
song
c43aa22cdb
feat(antigravity): 支持按映射模型计费
2026-01-20 11:02:08 +08:00
song
d1a6303e49
fix(antigravity): 修复 Claude 非流式响应丢失
2026-01-20 00:52:27 +08:00
song
c115c9e048
fix: address lint errors
2026-01-18 01:22:40 +08:00
song
6941315432
feat: add antigravity web search support
2026-01-18 01:09:40 +08:00
song
8b071cc665
fix(antigravity): restore signature retry and base order
2026-01-17 22:50:50 +08:00
song
959f6c538a
fix(antigravity): remove thinking sanitation
2026-01-17 22:21:48 +08:00
song
217b3b59c0
fix(antigravity): drop MarkUnavailable
2026-01-17 21:59:32 +08:00
song
ec916a3197
fix(antigravity): remove signature retry
2026-01-17 21:56:57 +08:00
song
22eb72e0f9
fix(antigravity): restore url fallback behavior
2026-01-17 21:50:09 +08:00
song
07ba64c666
fix(antigravity): handle url-level 429 without failover
2026-01-17 21:37:32 +08:00
song
f22bc59fe3
fix(antigravity): route signature retry through url fallback
2026-01-17 21:15:33 +08:00
song
0ce8666cc0
Revert "Revert "fix(antigravity): Claude 模型透传 tool_use 的 signature""
...
This reverts commit 5427a9e422 .
2026-01-17 21:09:59 +08:00
song
5427a9e422
Revert "fix(antigravity): Claude 模型透传 tool_use 的 signature"
...
This reverts commit 81b865b89d .
2026-01-17 20:41:06 +08:00
song
5e9f5efbe3
chore: log antigravity signature retry 429
2026-01-17 18:22:53 +08:00
song
a7a0017aa8
chore: gofmt antigravity gateway service
2026-01-17 18:22:43 +08:00
song
9078b17a41
test: add antigravity rate limit coverage
2026-01-17 18:15:45 +08:00
song
14a3694a9a
chore: set antigravity fallback cooldown default to 1
2026-01-17 18:03:45 +08:00
song
b9b4db3df5
Merge upstream/main
2026-01-17 18:00:07 +08:00
song
5a6f60a954
fix(antigravity): 区分 URL 级别和账户配额级别的 429 限流
...
- "Resource has been exhausted" → URL 级别限流,立即切换 URL
- "exhausted your capacity on this model" → 账户配额限流,重试 3 次(指数退避)后标记限流
2026-01-17 11:11:18 +08:00
song
31933c8a60
fix: 删除未使用的字段修复 lint 错误
2026-01-17 10:40:28 +08:00
song
78bccd032d
refactor(antigravity): 提取公共重试循环函数减少重复代码
...
- 新增 antigravityRetryLoop 函数统一处理 Forward 和 ForwardGemini 的重试逻辑
- 429 日志增加 base_url 字段便于调试
- 删除重复的 shouldRetryUpstreamError 方法
2026-01-17 10:28:31 +08:00
song
ac7503d95f
fix(antigravity): 429 时也切换 URL 重试
...
- 429 优先切换到下一个 URL 重试
- 只有所有 URL 都返回 429 时才限流账户并返回错误
- 与 client.go 中的逻辑保持一致
2026-01-17 02:14:57 +08:00
song
69c4b17a9b
feat(antigravity): 动态 URL 排序,最近成功的优先使用
...
- URLAvailability 新增 lastSuccess 字段追踪最近成功的 URL
- GetAvailableURLs 返回列表时优先放置 lastSuccess
- 所有 Antigravity API 调用成功后调用 MarkSuccess 更新优先级
2026-01-17 01:54:14 +08:00
song
cc0fca35ec
feat(antigravity): 同步 Antigravity-Manager 的请求逻辑
...
- System Prompt: 改为简短版,添加 OpenCode 过滤、MCP XML 协议注入、SYSTEM_PROMPT_END 标记
- HTTP Headers: 只保留 Content-Type/Authorization/User-Agent,移除 Accept 和 Host
- User-Agent: 改为 antigravity/1.11.9 windows/amd64
- requestType: 动态判断 (agent/web_search/image_gen)
- BaseURLs: 添加 daily sandbox 备用 URL
- Fallback: 扩展触发条件 (429/408/404/5xx)
2026-01-17 01:49:42 +08:00
song
1be3eacad5
feat(scheduling): 兜底层账户选择策略可配置
...
- gateway.scheduling.fallback_selection_mode: "last_used"(默认) 或 "random"
- last_used: 按最后使用时间排序(轮询效果)
- random: 同优先级内随机选择
2026-01-16 20:47:07 +08:00
song
34d6b0a601
feat(gateway): 账户切换次数和 Antigravity 限流时间可配置
...
- gateway.max_account_switches: 账户切换最大次数,默认 10
- gateway.max_account_switches_gemini: Gemini 账户切换次数,默认 3
- gateway.antigravity_fallback_cooldown_minutes: Antigravity 429 fallback 限流时间,默认 5 分钟
- Antigravity 429 不再重试,直接标记账户限流
2026-01-16 20:18:30 +08:00
song
2055a60bcb
fix(antigravity): 429 重试3次后限流账户
...
- 收到429后重试最多3次(指数退避)
- 3次都失败后调用 handleUpstreamError 限流账户
- 移除无效的 URL fallback 逻辑(当前只有一个URL)
2026-01-16 18:51:07 +08:00
song
cc892744bc
fix(antigravity): 429 fallback 改为 5 分钟并限流整个账户
...
- fallback 时间从 1 分钟改为 5 分钟
- fallback 时直接限流整个账户而非仅限制 quota scope
2026-01-16 18:09:34 +08:00
song
fba3d21a35
fix: 使用 Contains 匹配 missing_project_id 并修复测试 mock
2026-01-16 14:18:12 +08:00
song
455576300c
fix(antigravity): 使用 Contains 匹配 missing_project_id 错误信息
2026-01-16 14:03:25 +08:00
song
821968903c
feat(antigravity): 手动刷新令牌时自动恢复 missing_project_id 错误账户状态
...
- 当手动刷新成功获取到 project_id,且之前错误为 missing_project_id 时,自动清除错误状态
- 后台自动刷新时同样支持状态恢复
2026-01-16 13:18:00 +08:00
song
95fe1e818f
fix: Antigravity 刷新 token 时检测 project_id 缺失
...
- 刷新 token 后调用 LoadCodeAssist 获取 project_id
- 如果获取失败,保留原有 project_id,标记账户为 error
- token 仍会正常更新,不影响凭证刷新
- 错误信息:账户缺少project id,可能无法使用Antigravity
2026-01-16 12:13:54 +08:00
song
a61042bca0
fix: Antigravity project_id 获取优化
...
- API URL 改为只使用 prod 端点
- 刷新 token 时每次调用 LoadCodeAssist 更新 project_id
- 移除随机生成 project_id 的兜底逻辑
2026-01-16 11:57:14 +08:00
song
b4abfae4de
fix: Antigravity 测试连接使用最小 token 消耗
...
- buildGeminiTestRequest: 输入 "." + maxOutputTokens: 1
- buildClaudeTestRequest: 输入 "." + MaxTokens: 1
- buildGenerationConfig: 支持透传 MaxTokens 参数
2026-01-16 10:31:55 +08:00
song
9a22d1a690
refactor: 提取 getOrCreateGeminiParts 减少重复代码
...
将两个 merge 函数中重复的 Gemini 响应结构访问逻辑提取为公共函数。
2026-01-13 13:25:55 +08:00
song
c9d21d53e6
fix: 修复 Antigravity 非流式响应文本丢失问题
...
Gemini 流式响应是增量的,需要累积所有 chunk 的文本内容。
原代码只保留最后一个有 parts 的 chunk,导致实际文本被空
text + thoughtSignature 的最终 chunk 覆盖。
添加 collectedTextParts 收集所有文本片段,返回前合并。
2026-01-13 13:04:03 +08:00
song
e1015c2759
fix: 修复 Antigravity 图片生成响应丢失问题
...
流式转非流式时,图片数据在中间 chunk 返回,最后一个 chunk 只有
finishReason,导致只保留最后 chunk 时图片丢失。
添加 collectedImageParts 收集所有图片 parts,并在返回前合并。
2026-01-13 12:58:05 +08:00
song
f0ece82111
feat: 在 dashboard 右上角添加文档链接
2026-01-12 17:01:57 +08:00
Song Siyu
7d1fe818be
feat: antigravity 配额域限流 + SSE 上限 ( #222 )
...
* fix: 添加 gemini-3-flash 前缀映射支持 gemini-3-flash-preview
* feat(antigravity): 增强请求参数和注入 Antigravity 身份 system prompt
* feat: antigravity 配额域限流
* chore: 调整 SSE 单行上限到 25MB
* chore: 提升 SSE 单行上限到 40MB
2026-01-09 22:00:14 +08:00
song
11bfc807d7
merge upstream/main
2026-01-09 21:37:27 +08:00
song
c2a6ca8d3a
chore: 提升 SSE 单行上限到 40MB
2026-01-09 20:57:06 +08:00
song
7b1cf2c495
chore: 调整 SSE 单行上限到 25MB
2026-01-09 20:47:13 +08:00
song
da1f3d61be
feat: antigravity 配额域限流
2026-01-09 17:35:02 +08:00
song
dc3cd62125
Merge remote-tracking branch 'upstream/main'
2026-01-08 22:52:18 +08:00
song
bc404d4fc1
merge: 合并 upstream/main 使用上游版本解决冲突
2026-01-08 18:01:29 +08:00
song
a4a0c0e2cc
feat(antigravity): 增强请求参数和注入 Antigravity 身份 system prompt
2026-01-08 13:07:20 +08:00
song
c7abfe67b5
Merge remote-tracking branch 'upstream/main'
2026-01-08 12:17:56 +08:00
song
4e3476a669
fix: 添加 gemini-3-flash 前缀映射支持 gemini-3-flash-preview
2026-01-06 15:09:21 +08:00
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