chihao.ou
7b282c4f1d
fix(announcements): ignore superseded fetch results
2026-09-18 16:39:25 +08:00
chihao.ou
d054ee9af3
fix(ccswitch): trim trailing slashes before Antigravity path
2026-09-18 16:38:58 +08:00
chihao.ou
9612a70c77
fix(proxies): label newly expired proxies correctly
2026-09-18 16:38:29 +08:00
chihao.ou
24f4736f64
fix(upload): cancel superseded image reads
2026-09-18 16:37:56 +08:00
chihao.ou
9d5c8d961c
fix(dialog): keep body locked while another dialog is open
2026-09-18 16:37:03 +08:00
wucm667
7b4de8b6ae
fix(moderation): prevent reminder tags from bypassing keyword checks
2026-09-18 14:54:18 +08:00
Long Li and Cursor
bcc73f8d40
fix(openai): pass DeepSeek thinking-mode reasoning_content on chat fallback
...
Codex histories often replay encrypted-only reasoning items. After a
Responses→Chat Completions fallback, a cache miss left assistant
messages without reasoning_content and DeepSeek rejected the turn
with 400. Fill empty assistant fields with a single-space placeholder
for DeepSeek hosts, including openai-platform accounts whose base_url
points at api.deepseek.com. Existing plaintext and cache hits are
left unchanged.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-18 15:42:22 +09:00
Yoga Sakti
4805f069e4
fix(scheduler): keep account RPM config in the scheduler projection
...
`filterSchedulerExtra` 的白名单没有 `base_rpm` / `rpm_strategy` /
`rpm_sticky_buffer`,写进 `sched:meta:<id>` 的精简投影因此丢掉整套 RPM 配置。
候选过滤走 `ListSchedulableAccounts`,缓存命中时读的正是这份投影:
`isAccountSchedulableForRPM` 拿到的账号上 `GetBaseRPM()` 返回 0,`baseRPM <= 0`
直接放行,已配置限流的账号在选号阶段被当作未开启 RPM,单个自然分钟内被超额调度。
缓存未命中时回退数据库读到完整 extra,所以现象是间歇性的。
选中的账号随后由 `hydrateSelectedAccount` 从 `sched:acc:<id>` 重新水合,
RPM 计数与用户消息队列限速读的是完整账号,不受影响;缺的只是选号阶段这道门。
修法沿用投影里既有的处理方式(见 `openai_passthrough` 一组注释):把判定依赖的
键补进白名单,而不是在判定侧另开一条读取完整账号的路径。
回归测试覆盖序列化往返后的三个键:`tiered` 子用例证明缓冲被裁掉时红区会被误判成
黄区,`sticky_exempt` 子用例证明策略被裁掉时会退回三区判定。
Refs #7225
2026-09-18 13:37:58 +07:00
HuntercodeT
cfd2fc779b
fix(codex-models): 非 GPT 模型的 Codex 提示词模板去掉 GPT 身份声明,避免 Antigravity 429
...
模型目录对所有模型都用 openai.CodexBaseInstructionsForModel 填 instructions_template,
gemini / claude 等因此下发 "You are Codex, a coding agent based on GPT-5."。Codex 把它作为
instructions 发出,Antigravity 对「Codex 提示词 + GPT-5 身份」返回 429 RESOURCE_EXHAUSTED,
并让账号进入限流冷却。
OpenAI GPT 模型保持原模板;其他模型族(含 gpt-oss)去掉 "based on GPT-N" /
"You are GPT-N" 身份声明,提示词其余部分不变。
Refs #7307
2026-09-18 14:21:21 +08:00
wucm667
0920e06a42
fix(gateway): restore public response model aliases
2026-09-18 13:31:58 +08:00
little-greenbean
3fdd54ca12
fix(upstream): cancel response attempt before closing body
2026-09-18 13:30:35 +08:00
lizhaoxinlizhaoxin2-lab
cf10d6d01d
fix(responses): emit protocol-correct stream errors once
2026-09-18 12:38:05 +08:00
feeeei
a9c7c6e8bf
ui(header): 手机竖屏顶栏保留模型广场图标入口
...
模型广场入口所有宽度都渲染,<640px 只保留图标,补 title/aria-label
2026-09-18 09:52:40 +08:00
HuntercodeT
c12d0131cb
fix(gateway): list mixed antigravity models for gemini groups
2026-09-18 09:03:41 +08:00
HuntercodeT
0f4d8acaa8
fix(antigravity): Gemini 原生请求的裸模型名按 thinkingConfig 解析到 -low/-medium/-high 变体
...
Antigravity CLI / go-genai 发裸 Gemini 模型名(gemini-3.8-flash)并用
generationConfig.thinkingConfig 表达思考深度,而 Antigravity 上游目录只有
-low/-medium/-high/-tiered 变体。v0.2.5 起 resolveModelMapping 会给 antigravity
账号运行时补 gemini-3.x-flash 裸名自映射,裸名因此被当成显式透传直发上游,
上游回 404 "Requested entity was not found."。
在 ForwardGemini 取映射之前加 resolveGeminiThinkingVariant:
- 仅对 gemini- 前缀且不带后缀的裸名生效;
- 用户在 credentials.model_mapping 亲写的裸名条目一律不介入,运行时注入的
默认自映射不算用户意图;
- thinkingLevel 优先;否则 thinkingBudget <0→high,≤1024→low,≤8192→medium,
其余 high;未携带 thinkingConfig→high;所选变体不存在时按
high→medium→low→tiered 降级;一个变体都没有则回退原逻辑;
- thinkingConfig 仍原样透传,上游按 budget 决定实际思考量。
2026-09-18 09:03:40 +08:00
wucm667
94225b5ed3
fix(admin): align platform quota editor with supported platforms
2026-09-18 08:42:21 +08:00
feeeei
a9ff663387
feat(backup): 支持月度归档与独立保留策略
2026-09-18 06:56:27 +08:00
feeeei
57b7dbdc85
feat(affiliate): 提取记录支持登记线下提现
...
管理员在站外给邀请人打款后,系统里原本无法扣减对应的返利额度,用户仍可把
这部分额度转入余额。现在可在「邀请返利 → 提取记录」点「登记线下提现」,
从该用户的可提取返利额度中扣除已打款金额:
- POST /api/v1/admin/affiliates/users/:user_id/withdraw,请求体只含 amount,
金额按 8 位小数舍入后校验
- 先解冻已到期的冻结额度,再以 aff_quota >= amount 为条件原子扣减,写入
action=withdraw 的流水并带额度快照;额度不足返回 AFFILIATE_QUOTA_INSUFFICIENT
- 不新增字段与迁移:线下提现复用已有 action 列区分,操作人由管理端审计日志记录
- 提取记录同时列出转入余额与线下提现,新增「类型」列
- 弹窗选择用户后展示可提取额度,支持一键填入全部;从未产生返利的用户按 0 处理
返利记录改为 LEFT JOIN 订单与被邀请人,兑换码、管理员充值来源的返利也会出现
在明细中,接口里订单相关字段与被邀请人 ID 可为 null。
2026-09-17 23:42:02 +08:00
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
cyh
e74c690ac4
fix(openai): keep transport heartbeats outside semantic output
2026-09-17 19:15:09 +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
zoutao
0952ce3410
fix(apicompat): include streamed arguments in function_call_arguments.done
...
Gemini/Antigravity delivers tool arguments as one complete object, so this
converter synthesizes the Responses tool-call stream itself and therefore owns
its self-consistency. The done event was built without Arguments, leaving it ""
while the preceding delta carried the entire JSON. Clients that reconcile the
done payload against the accumulated deltas (OpenAI Responses SDK); Qoder's
reconcileToolCall) reject that mismatch as inconsistent_tool_call and abort the
turn non-retryably, so every tool call through the gateway failed.
Emit state.CurrentArgs, which closeCurrentResponsesItem already uses for the
item, restoring sum(deltas) == done.arguments == item.arguments.
Regression test asserts the delta sum equals the done payload and fails closed
when Arguments is dropped.
2026-09-17 16:54:44 +08:00
Cai
d099c06945
fix: resolve Seedance lint and gRPC security checks
2026-09-17 17:51:03 +09:00
Wesley Liddick
aeab57b9b2
Merge pull request #7256 from zhudaguaneren/fix/antigravity-attribution-429
...
fix(antigravity): 过滤 Claude attribution 元数据,修复特定请求的 429
2026-09-17 16:44:09 +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
5050471822
Merge pull request #7239 from Liu8Can/fix/register-promo-code-flicker
...
fix: prevent promo code field flash on registration
2026-09-17 16:41:35 +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
Wesley Liddick
cd1834e0a9
Merge pull request #7262 from ouchihao/codex/bug-refund-balance-warning
...
fix(payment): base refund balance warnings on the requested amount
2026-09-17 16:41:00 +08:00
Wesley Liddick
0932e8ce0a
Merge pull request #7266 from ouchihao/codex/bug-subscription-loading-reset
...
fix(subscriptions): reset loading when clearing state
2026-09-17 16:40:44 +08:00
Wesley Liddick
ffa43607e5
Merge pull request #7236 from ouchihao/codex/bug-payment-amount-input
...
fix(payment): restore accepted text after invalid amount input
2026-09-17 16:40:33 +08:00
Wesley Liddick
57e9f6a4b8
Merge pull request #7238 from ouchihao/codex/bug-model-tag-tab-navigation
...
fix(channels): allow tabbing out of an empty model input
2026-09-17 16:40:23 +08:00
Wesley Liddick
71c0eb5126
Merge pull request #7184 from ouchihao/codex/bug-totp-error-messages
...
fix(totp): display normalized API error messages
2026-09-17 16:40:07 +08:00
Wesley Liddick
10fd1ada28
Merge pull request #7182 from ouchihao/codex/bug-orders-filter-page
...
fix(payment): reset the order page when changing status
2026-09-17 16:39:53 +08:00
Wesley Liddick
53fd5f8351
Merge pull request #7183 from ouchihao/codex/bug-proxy-test-dedup
...
fix(proxies): reuse in-flight test guards during batch testing
2026-09-17 16:39:34 +08:00
Wesley Liddick
55bde0857f
Merge pull request #7185 from ouchihao/codex/bug-announcement-read-results
...
fix(announcements): preserve successful bulk read results
2026-09-17 16:39:16 +08:00
Wesley Liddick
5f75e0d2a7
Merge pull request #7186 from ouchihao/codex/bug-clipboard-fallback-error
...
fix(clipboard): report errors thrown by the copy fallback
2026-09-17 16:38:55 +08:00
Wesley Liddick
efd86c63e6
Merge pull request #7235 from ouchihao/codex/bug-totp-setup-input-sync
...
fix(auth): keep TOTP setup digits in sync with state
2026-09-17 16:38:37 +08:00
Wesley Liddick
ea68c0e82c
Merge pull request #7263 from ouchihao/codex/bug-dialog-title-ids
...
fix(ui): keep dialog title IDs unique across instances
2026-09-17 16:38:16 +08:00
Wesley Liddick
40e7ce7fbf
Merge pull request #7265 from ouchihao/codex/bug-payment-config-await
...
fix(payment): await in-flight configuration requests
2026-09-17 16:37:54 +08:00
Wesley Liddick
d52ab27def
Merge pull request #7173 from HuntercodeT/fix/gemini-native-mixed-model-listing
...
fix(gemini): discover Antigravity mappings in native model lists
2026-09-17 16:37:38 +08:00
Wesley Liddick
7e4164c1cf
Merge pull request #7207 from HuntercodeT/fix/group-usage-summary-seq-scan
...
fix: 分组用量汇总不再全表扫 usage_logs(48.7s → 34ms)
2026-09-17 16:37:21 +08:00
Wesley Liddick
44831bb854
Merge pull request #7261 from HuntercodeT/chore/bump-grpc-1.83.2
...
chore(deps): 升级 google.golang.org/grpc 到 v1.83.2,修复 govulncheck 报告的 GO-2026-6443 / GO-2026-6348
2026-09-17 16:36:57 +08:00
Wesley Liddick
131893e449
Merge pull request #7237 from ouchihao/codex/bug-platform-quota-negative
...
fix(admin): reject negative platform quota limits before saving
2026-09-17 16:36:34 +08:00
Wesley Liddick
4daabc3d84
Merge pull request #7234 from ouchihao/codex/bug-pagination-jump-number
...
fix(pagination): handle numeric jump input
2026-09-17 16:36:23 +08:00
laoxiechuzheng
acc05620cb
fix(deepseek): keep parallel Responses tool outputs contiguous
2026-09-17 15:45:56 +08:00
chihao.ou
406be7c518
fix(subscriptions): reset loading when clearing state
2026-09-17 14:59:43 +08:00
chihao.ou
b51f0759d4
fix(payment): await in-flight configuration requests
2026-09-17 14:58:46 +08:00