HuntercodeT
f79b8bf96c
fix(antigravity): Gemini 原生流对 go-genai / python-genai 客户端不发 SSE 注释心跳
...
Antigravity 账号的 Gemini 原生流式路径在上游空闲超过 gateway.stream_keepalive_interval
(默认 10s)时会向下游写 ":\n\n" 作为心跳。SSE 规范允许注释行,但 Google 官方 SDK 里
go-genai 与 python-genai 都不会忽略它:
- go-genai(Antigravity CLI 在用)api_client.go iterateResponseStream 对任何非 data: 前缀的
事件直接返回 "iterateResponseStream: invalid stream chunk: :",整个流中断;
- python-genai _api_client.py 把非 data: 行当作错误 JSON 拼接后 json.loads,同样抛错。
Google 官方 API 从不下发注释行,这两个 SDK 从未处理过这种输入。js-genai 用规范的
event-stream 解析器,不受影响。
现在按下游 User-Agent / X-Goog-Api-Client 识别这两类 SDK(形如
google-genai-sdk/1.71.0 gl-go/go1.28 …、google-genai-sdk/x gl-python/3.12),命中时该路径
不再发注释心跳;其他客户端(curl、js-genai、Gemini CLI)行为不变。
生产复现:Antigravity CLI 1.2.5 经网关(sub2api 0.2.5)跑长思考请求,上游首个 chunk 超过 10s
时客户端报 "agent executor error: … iterateResponseStream: invalid stream chunk: :"。
2026-09-17 19:41:55 +08:00
Wesley Liddick
efe9aab1e4
Merge pull request #7246 from laoxiechuzheng/fix/deepseek-native-responses-tool-output-media
...
fix(deepseek): lift Responses tool output images
2026-09-17 17:02:43 +08:00
Wesley Liddick
18328aed05
Merge pull request #7212 from wucm667/feat/issue-7203-redemption-pagination
...
feat(redeem): paginate user redemption history
2026-09-17 16:43:06 +08:00
Wesley Liddick
48a86ec926
Merge pull request #7224 from HypoxanthineOvO/codex/upstream-chat-role-compat
...
fix(gateway): normalize developer roles for strict native Chat upstreams
2026-09-17 16:42:31 +08:00
Wesley Liddick
b4e560824a
Merge pull request #7177 from xO-ox-ai/codex/fix-openai-response-binding-context
...
fix(openai): 客户端断开后仍持久化 Responses 续聊绑定
2026-09-17 16:42:12 +08:00
Wesley Liddick
9efc167482
Merge pull request #7195 from bitnom/fix/refresh-paused-oauth-accounts
...
fix(account): keep refreshing OAuth tokens for paused accounts
2026-09-17 16:41:54 +08:00
Wesley Liddick
c84a3d50a3
Merge pull request #7215 from xz-dev/fix/manifest-double-parse
...
fix(openai): parse Codex models manifest envelope once
2026-09-17 16:41:12 +08:00
laoxiechuzheng
881ab1b0c6
fix(deepseek): lift Responses tool output images
...
DeepSeek native Responses rejects Codex view_image results when function_call_output.output contains input_image parts. Move media into a following user message and keep the tool output as a string so call_id pairing remains valid.
2026-09-17 01:22:22 +08:00
HypoxanthineOvO
18bfa4bf20
fix(gateway): normalize developer roles for strict Chat upstreams
2026-09-16 16:11:43 +08:00
Xiangzhe
31f3003ff5
fix(openai): preserve manifest key validation
2026-09-16 06:15:31 +00:00
Xiangzhe
2f16e0984e
fix(openai): avoid duplicate manifest parsing
2026-09-16 06:15:25 +00:00
wucm667
a9ed218989
feat(redeem): paginate user redemption history
2026-09-16 13:19:15 +08:00
bitnom
8e34ca5e31
fix(account): keep refreshing OAuth tokens for paused accounts
...
Paused (schedulable=false) active accounts were excluded from the
background token refresh candidates, so their stored access_token
silently expired. The admin usage-window quota probe uses the stored
token verbatim (no token provider / no refresh), so the probe then gets
HTTP 401 UNAUTHENTICATED and the dashboard reports a false "needs
re-auth" for a perfectly healthy account, while Test Connection and live
traffic (which refresh on demand via the token provider) keep working.
Pause is not permanent rejection: error accounts are already excluded by
the status = 'active' filter, and accounts whose refresh genuinely fails
are rate-limited by the retry-cooldown exclusion (10-minute retry-
exhausted cooldown). Refresh success only persists credentials and never
touches schedulable, so a paused account cannot be silently un-paused.
Drop the schedulable filter and update the SQL-filter test, the
integration pagination test, and the service-level candidate fake.
2026-09-15 10:00:26 -04:00
xO-ox-ai
d7ee1ab6be
fix(openai): persist response affinity after client cancel
2026-09-15 18:44:50 +08:00
HuntercodeT
da74bf13a4
fix(gemini): discover antigravity mappings in native model lists
2026-09-15 16:50:46 +08:00
Wesley Liddick
86f93c28ee
Merge pull request #6977 from alfadb/fix/deepseek-model-name-validation
...
fix(deepseek): 未配置 model_mapping 时按官方模型名单校验,不再透传未知模型名
2026-09-15 16:20:31 +08:00
Wesley Liddick
30ed40a56a
Merge pull request #7074 from Brisbanehuang/codex/fix-codex-quota-windows
...
fix(scheduler): 按规范 5h/7d 窗口读取 Codex 配额与重置时间
2026-09-15 16:17:37 +08:00
Wesley Liddick
b8275209e8
Merge pull request #7162 from HuntercodeT/fix/antigravity-gemini-sse-separator
...
fix(antigravity): gemini 透传 SSE 事件之间不再多写一个空行(Antigravity CLI invalid stream chunk)
2026-09-15 16:17:25 +08:00
Wesley Liddick
25c21aedda
Merge pull request #7129 from kk-418/fix/grok-build-responses-sequence-number
...
fix(responses): 始终在 Responses SSE 中写出 sequence_number 避免反序列化失败
2026-09-15 15:28:33 +08:00
HuntercodeT
8447bdd368
fix(antigravity): gemini 透传 SSE 事件之间不再多写一个空行
...
handleGeminiStreamingResponse 把上游每条 data 行改写成 "data: ...\n\n",
紧接着又把上游的空分隔行原样透传成第三个 "\n",下游看到的事件之间是
"\n\n\n"。google-genai 的 Go SDK(Antigravity CLI 在用)按 "\n\n" 切事件,
多出的 "\n" 粘到下一个事件开头,前缀变成 "\ndata" 而报
"iterateResponseStream: invalid stream chunk",每条流都在第二个事件中断。
空分隔行不再透传(data 分支已经写过 "\n\n"),附回归测试:两个事件
(LF 与 CRLF 各一)经过后输出必须恰好是一个空行分隔,并按 "\n\n" 切帧
逐个校验前缀。
Fixes #7161
2026-09-15 15:10:45 +08:00
alfadb
a939553c87
fix(deepseek): 模型名校验不再默认兜底,未配置映射时按官方名单校验
...
- 未配置 model_mapping 的 DeepSeek 账号不再放行任意模型名,改为官方名单精确匹配
(deepseek-flash / deepseek-v4-pro / deepseek-v4-flash /
deepseek-v4-flash-vision-exp / deepseek-v4-pro-0813)
- 校验前先归一化:剥离 Claude Code 客户端上下文后缀 [1m](含重复形式)并统一小写,
使官方 Claude Code 接入写法 deepseek-flash[1m] 继续可用
- 未知模型名在调度阶段即拒绝,返回 404 model_not_found,避免透传上游后触发
per-(账号,模型) 冷却、并避免上游把不认识的模型名静默兜底成 deepseek-flash
- 出站前剥离泄漏的 [1m] 后缀,仅作用于 DeepSeek 平台
- 配置了 model_mapping 的账号语义不变(映射优先)
2026-09-15 10:42:29 +08:00
Wesley Liddick
2061508ad8
Merge pull request #7072 from Brisbanehuang/codex/fix-scheduler-metrics
...
fix(scheduler): 修复选号耗时返回值和粘性命中率重复计数
2026-09-15 08:58:58 +08:00
Wesley Liddick
fb90414c05
Merge pull request #7126 from xO-ox-ai/codex/fix-responses-lite-namespace
...
fix(openai): 保留 Responses Lite namespace 工具调用
2026-09-15 08:58:25 +08:00
Wesley Liddick
9fade3e8c2
Merge pull request #6769 from alfadb/feature/ollama-rate-limit-reset
...
feat(ollama): 根据用量窗口异步更新限流恢复时间
2026-09-15 08:57:43 +08:00
Wesley Liddick
1920a7d687
Merge pull request #7091 from SavitarC/feat/subscription-bulk-actions
...
feat: 支持订阅管理批量操作
2026-09-15 08:57:27 +08:00
Wesley Liddick
150c52b8de
Merge pull request #6689 from tunsuy/fix/antigravity-codex-web-search-mixed-tools
...
fix(antigravity): drop mixed web_search when client tools present
2026-09-15 08:54:40 +08:00
Wesley Liddick
1e1d15cca5
Merge pull request #7082 from ggllzz04/fix/antigravity-token-cache-isolation
...
fix(antigravity): isolate OAuth token cache key by account ID to prevent 429 collision
2026-09-15 08:53:32 +08:00
Wesley Liddick
f7e959ae5f
Merge pull request #7111 from ouchihao/codex/bug-proxy-clear-credentials
...
fix(proxy): allow explicitly clearing stored credentials
2026-09-15 08:52:58 +08:00
Wesley Liddick
008391f699
Merge pull request #7085 from r266-tech/codex/sub2api-f352188cb784
...
fix(openai): strip internal metadata from OAuth input items
2026-09-15 08:52:30 +08:00
xO-ox-ai
13c1d4cde2
test(openai): 覆盖 Lite 命名空间工具回传
2026-09-14 11:46:41 +08:00
cikenerd and Cursor
087987070b
fix(responses): 为 grok-build 始终写出 sequence_number
...
网关合成/重编的 Responses SSE 因 omitempty 或缺字段丢掉 sequence_number,
grok-build 会整轮反序列化失败。合成失败帧、compact 桥接和转换 wire JSON
一律写出该字段,0 也保留。
Fixes #7128
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-14 11:45:53 +08:00
xO-ox-ai
4bd7132ba9
fix(openai): 保留 Responses Lite namespace 调用
2026-09-14 11:35:03 +08:00
chihao.ou
28a4ea914d
fix(proxy): allow explicitly clearing stored credentials
2026-09-13 17:23:24 +08:00
SavitarC
e3cce574d7
fix: serialize subscription extensions
2026-09-13 12:33:35 +08:00
SavitarC
3d6c207723
feat: 支持订阅管理批量操作
2026-09-13 11:49:03 +08:00
alfadb
a1d5968b24
feat(ollama): async rate-limit reset for Ollama Cloud usage windows
...
Real Ollama Cloud 429s are driven by ollama.com usage windows, not by
response headers that OpenAI/Anthropic/CN rate-limit parsing understands.
Handle them separately: apply a never-shortening temporary cooldown first,
then schedule an async probe that learns the true usage-window reset point
with a controlled, coalesced per-api_key refresh.
- ratelimit_service: route real Ollama Cloud usage accounts to a dedicated
429 path before the CN-provider branch.
- ollama_cloud_usage: add a background probe coordinator (started in Start,
waited by Stop) that fans out model-429 probes to one controlled refresh
per api_key group, reusing the recent group snapshot for coalesced members.
- repository/account_repo: add SetRateLimitedIfUnchanged, a write-back CAS
counterpart to ClearRateLimitIfObserved, so an async reset never overwrites
a newer 429, an admin clear, a re-armed generation, or a key/state change
observed by another writer between read and write.
- wire: inject OllamaCloudUsageService into RateLimitService.
Tests: unit tests for service and repository pass; targeted race tests pass;
build and vet clean; git diff --check clean. The CAS integration test compiles
but is not run (no Docker available).
2026-09-13 10:41:47 +08:00
r266-tech
e5272c130c
test(openai): check input type before metadata assertion
2026-09-13 07:13:31 +08:00
r266-tech
196c15b5cd
fix(openai): strip internal metadata from OAuth input items
2026-09-13 07:00:50 +08:00
郭兰鑫
62635532a6
fix(antigravity): explicitly invalidate legacy project-based token cache
2026-09-13 03:45:12 +08:00
郭兰鑫
bc8da78150
fix(antigravity): isolate OAuth token cache key by account ID to prevent collision
2026-09-13 03:40:47 +08:00
Brisbanehuang
db76cc4e4e
fix(scheduler): 按规范窗口读取 Codex 配额与重置时间
...
优先读取 codex_5h/codex_7d 规范字段,旧快照复用 Normalize 的窗口分类;用量与重置时间按同源窗口配对。重置评分与管理端快照复用规范 5h 重置时间,保留会话列回退,不改变权重与暂停阈值。
2026-09-12 09:06:33 -04:00
Brisbanehuang
d2c2b46c9e
fix(batch-image): 修正批量生图账号优先级排序方向
...
按较小 priority 优先选择账号,保留同优先级 ID 排序及现有资格过滤。补充选择回归,并将定价夹具对齐实际选中的账号,不改变计费公式。
2026-09-12 09:06:33 -04:00
Brisbanehuang
7e152e4279
fix(scheduler): 修复选号耗时返回值和粘性命中率重复计数
...
使用命名返回值传回 defer 中记录的选号耗时;按每次选号累计任意粘性命中,保留两类独立计数。增加成功、失败及双粘性回归,不改变调度策略。
2026-09-12 09:03:52 -04:00
Wesley Liddick
bdb42e22f8
Merge pull request #7064 from xlplbo/codex/openai-ws-v2-pool-capacity
...
fix(openai-ws): 对齐新版 ctx_pool 连接容量计算
2026-09-12 20:13:03 +08:00
Wesley Liddick
9383e0b154
Merge pull request #7057 from Sjeary/codex/issue-7042-max-context-window
...
fix(codex): 保留本地模型目录的最大上下文窗口
2026-09-12 20:11:40 +08:00
Wesley Liddick
a59f0c7fac
Merge pull request #5833 from xuhaihan/fix/openai-fast-missing-tier
...
fix(openai): force priority when fast tier is omitted
2026-09-12 19:31:21 +08:00
Wesley Liddick
3a070ec1bf
Merge pull request #7010 from xpflying/fix/openai-privacy-client-cf-challenge
...
fix(openai): 隐私/账号检查客户端改用 Firefox 指纹,规避 chatgpt.com Cloudflare 质询
2026-09-12 19:28:09 +08:00
Wesley Liddick
749cd7c354
Merge pull request #7062 from wc4440222/fix/channel-monitor-minimax-provider
...
fix(channel-monitor): add missing minimax to provider allowlists
2026-09-12 19:27:46 +08:00
Wesley Liddick
eaa4083e23
Merge pull request #6995 from alfadb/fix/claude-mid-conversation-output-config
...
fix(claude): 修复对话中 output_config 的 beta 兼容问题
2026-09-12 19:27:21 +08:00
Wesley Liddick
3873215908
Merge pull request #7049 from xlplbo/perf/openai-ws-pool-queue-wake
...
perf(openai): WS 连接池排队等待者按账号池变更重选连接
2026-09-12 19:26:56 +08:00