Wesley Liddick
843dcddea3
Merge pull request #3853 from fengshao1227/fix/messages-transport-failover
...
fix(messages): /v1/messages 传输层错误对齐 failover 链路
2026-07-09 16:34:00 +08:00
Wesley Liddick
c842c3166c
Merge pull request #3847 from heathermhuang/codex/grok-45-official-support
...
Add official Grok 4.5 support
2026-07-09 16:07:42 +08:00
Wesley Liddick
c3df469377
Merge pull request #3855 from Wei-Shaw/fix/grok-video-per-second-billing
...
fix: bill Grok video per second and harden video usage logging
2026-07-09 16:07:23 +08:00
Heatherm Huang
243678e166
Fix Grok 4.5 alias test expectations
2026-07-09 15:50:58 +08:00
li
7468427e44
fix(messages): /v1/messages 传输层错误对齐 failover 链路,不再直接 502
...
Fixes #3850 (part 2)
2026-07-09 15:49:10 +08:00
shaw
d4952154ff
fix: bill Grok video per second and harden video usage logging
...
Follow-up fixes for the #3775 audit findings:
- Bill Grok video generation per second of output, matching the xAI rate
card: parse the request duration (1-15s, upstream default 8s) and compute
cost as per-second price x duration x count. The built-in rate card values
were already xAI per-second prices but were previously charged per video,
undercharging up to 15x with a user-controlled duration.
- Group video_price_* fields are now documented and surfaced as per-second
rates (USD/s); admin UI labels, placeholders and hints updated accordingly.
- Persist video_count/video_resolution/video_duration_seconds on usage_logs
(migration 172) so video billing is auditable, and exempt any row with
video_count > 0 from the image_size check constraint: a video billed via a
token-mode channel price produces billing_mode='token' with image_count=1
and no image_size, which the previous constraint rejected, dropping the
whole billing transaction.
- Only refetch the group in apiKeyWithFreshGroupMediaPricing when the group
object actually looks like it is missing media pricing fields (both media
multipliers zero and all prices nil, impossible for a normally loaded
group), removing a per-usage DB query for groups without overrides.
- Frontend: drop the unused admin.groups.mediaPricing locale block, map
cleared price inputs to null (create) / -1 (update, cleared via backend
normalizePrice) instead of sending "" that failed *float64 unmarshalling,
and align video price placeholders with the text-to-video default model
(grok-imagine-video 0.05/0.07, 1080p only on 1.5 at 0.25).
2026-07-09 15:38:59 +08:00
Wesley Liddick
9ba0fb3084
Merge pull request #3775 from heathermhuang/codex/grok-media-pricing-labels
...
fix: add Grok video pricing controls
2026-07-09 15:03:38 +08:00
Wesley Liddick
b6d2df24d8
Merge pull request #3800 from Ge-limin/feat/codex-models-manifest
...
feat: Codex 客户端模型清单(manifest)透传接口
2026-07-09 14:40:23 +08:00
Wesley Liddick
52da41fd6e
Merge pull request #3809 from hongheshan-svg/fix/upstream-anthropic-429-fallback
...
fix(ratelimit): Anthropic 无 reset 头的 429 也进入兜底冷却,避免账号永不冷却导致的 429 循环
2026-07-09 14:40:10 +08:00
Wesley Liddick
dfff28ab05
Merge pull request #3843 from InCerryGit/fix/issue-3540-lenient-json-limit
...
fix(gateway): cap lenient JSON normalization
2026-07-09 14:39:55 +08:00
Wesley Liddick
e2c662e965
Merge pull request #3840 from feitianbubu/fix/crs-sync-frontend-timeout
...
fix(crs-sync): raise frontend sync timeout to 180s
2026-07-09 14:39:39 +08:00
Wesley Liddick
9392d1fc43
Merge pull request #3841 from fengshao1227/fix/html-escape-site-name-and-sanitize-doc-url
...
fix(security): HTML-escape site_name 并对 doc_url 统一应用 sanitizeUrl
2026-07-09 14:39:26 +08:00
Wesley Liddick
9ba6f3c2b0
Merge pull request #3845 from wucm667/feat/groups-quota-used-display
...
feat: 配额操控列表显示已用额度
2026-07-09 14:39:12 +08:00
Wesley Liddick
a57157b9fa
Merge pull request #3822 from wucm667/feat/api-key-last-used-ip
...
feat(api-key): 展示 API Key 最近使用 IP
2026-07-09 14:38:01 +08:00
Wesley Liddick
0118fa3ce2
Merge pull request #3721 from CHOS1N11111/codex/add-response-format-compat
...
Add response_format compatibility mapping
2026-07-09 14:37:46 +08:00
Wesley Liddick
105ac31c37
Merge pull request #3781 from fengshao1227/fix/openai-oauth-empty-mapping-model-guard
...
fix(scheduler): 空 model_mapping 的 OpenAI OAuth 账号不再吸收全部模型
2026-07-09 14:37:33 +08:00
Wesley Liddick
7302be4d13
Merge pull request #3833 from superman2003/fix/security-and-frontend-hardening
...
fix(gateway,frontend): 修复 Gemini 鉴权绕过与前端支付/会话缺陷
2026-07-09 14:37:19 +08:00
Wesley Liddick
636c452535
Merge pull request #3836 from ShuYeJang/main
...
fix(billing): 渠道定价覆盖写穿 fallbackPrices 共享指针导致全局计费污染
2026-07-09 14:37:05 +08:00
Heatherm Huang
cccba9a82e
Add official Grok 4.5 support
2026-07-09 14:26:10 +08:00
Wesley Liddick
554d47d04a
Merge pull request #3846 from Wei-Shaw/chore/go-toolchain-1.26.5
...
chore: Go 工具链升级 1.26.4 → 1.26.5——修复 stdlib 漏洞并补齐 CI 版本引用
2026-07-09 14:16:48 +08:00
shaw
25a7169601
chore: Go 工具链升级 1.26.4 → 1.26.5——修复 stdlib 漏洞并补齐 CI 版本引用
...
- backend/go.mod 工具链 1.26.5:修复 stdlib crypto/tls 漏洞(GO-2026-5856)
- 同步全部构建/校验点的硬编码版本:根 Dockerfile、backend/Dockerfile、
deploy/Dockerfile 基础镜像;backend-ci / release / security-scan 三个
workflow 的 go version 校验
2026-07-09 14:06:57 +08:00
wucm667
54859022aa
feat: show used quota in groups list
2026-07-09 11:45:59 +08:00
InCerry
53a5c45bd8
fix(gateway): cap lenient json normalization
...
Fixes #3540
2026-07-09 11:15:52 +08:00
li
bfb827b879
fix(security): HTML-escape site_name 并对 doc_url 统一应用 sanitizeUrl
...
Refs #3839 (第 8、12 点)
2026-07-09 10:03:49 +08:00
feitianbubu
4e5be8f75e
fix(crs-sync): raise frontend sync timeout to 180s
2026-07-09 09:45:47 +08:00
superman2003 and Cursor
29a5fcd25e
fix(gateway,frontend): 修复鉴权绕过与前端支付/会话缺陷
...
后端:
- Gemini /v1beta 鉴权中间件补齐主中间件的授权校验: API Key 的 IP 白/黑名单、
专属分组授权、运行时过期/配额二次检查, 修复经 Gemini 端点绕过 IP ACL、
越权访问专属分组、以及状态未刷新时的配额/有效期绕过窗口。
- 粘性会话等待计划分支改走 newSelectionResult 以 hydrate 账号凭证, 修复调度
快照中账号凭证被剥离导致等待路径转发鉴权失败。
- SSE 流式转发客户端断开时不再 break 跳过当前事件 usage 合并, 修复少计费。
- Forward 对 nil gin.Context 的防御补齐; 上游错误体读取失败时记录日志避免静默。
前端:
- logout 将本地会话清理移入 finally, 服务端吊销失败也保证本地登出。
- Stripe 弹窗轮询改用正确的 auth_token 键并加防重入; 收到 INIT 后清除兜底
超时定时器, onUnmounted 清理 message 监听器。
- token 刷新请求补充 30s 超时, 避免挂起导致请求队列与 loading 永久卡死。
- 路由守卫在公共设置未加载时先 await fetchPublicSettings, 避免 payment/
risk_control 被误判为未启用而错误拦截。
- 支付状态轮询回调补充防重入与终态守卫。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-09 09:06:56 +08:00
Wesley Liddick
309fda2904
Merge branch 'fix/channel-pricing-pollutes-fallback-tests'
2026-07-08 19:23:55 +00:00
Wesley Liddick
88581912ba
test: add regression tests for fallback pricing pollution
2026-07-08 19:23:38 +00:00
Wesley Liddick
f029945cfc
Merge branch 'fix/channel-pricing-pollutes-fallback'
2026-07-08 18:39:19 +00:00
Wesley Liddick
4a30397623
fix: prevent channel pricing overrides from mutating shared fallback pricing
2026-07-08 18:37:33 +00:00
wucm667
7a11b39d6d
fix(api-key): check usage log rows close
2026-07-08 15:36:12 +08:00
wucm667
e0d149d511
feat(api-key): show last used IP
2026-07-08 15:26:54 +08:00
Heatherm Huang
3b206cc639
test: preserve grok video resolution forwarding
2026-07-08 13:50:49 +08:00
Heatherm Huang
889b657451
test: accept casted video billing constraint
2026-07-08 13:50:49 +08:00
Heatherm Huang
376e03ded1
fix: update Grok media default rate card
2026-07-08 13:50:49 +08:00
Heatherm Huang
4d702e3234
fix: split Grok image and video pricing
2026-07-08 13:50:49 +08:00
Heatherm Huang
890cc2bb98
fix: clarify Grok media pricing controls
2026-07-08 13:44:09 +08:00
Wesley Liddick
6f43986c37
Merge pull request #3811 from jianjianai/hotfix/admin-scheduler-score-opt-in
...
fix(admin): 管理员账号列表默认关闭调度权值计算以降低负载
2026-07-08 10:22:10 +08:00
Wesley Liddick
f407d6a044
Merge pull request #3804 from fengshao1227/fix/compact-body-signal-routing
...
fix(compact): 识别 /v1/responses body 中的 compaction_trigger 信号
2026-07-08 10:12:58 +08:00
shaw
a56eb5b4dc
fix(compact): body-signal 提升上移到 handler 层并对齐 path-based 链路
...
合并 main 解决拆分冲突后,将原先 Forward 内的 body-signal 提升重构到
handler 的 compact 归一化入口之前,修复原方案的四个问题:
- reqStream 未重推导:body-signal 原始请求带 stream:true,Forward 级提升
后 compact 上游返回 JSON(Accept: application/json)却被流式 handler
解析,"stream ended before a terminal event" 会触发最多
max_account_switches 次换号 failover,且每次都白烧一次上游 compact 配额;
handler 级提升让白名单归一化先删除 stream,reqStream 自然为 false。
- requireCompact 调度过滤失效:原方案 path 改写发生在 requireCompact 判定
之后,调度器不会过滤不支持 compact 的账号;现在改写先于该判定。
- passthrough / Grok / chat-completions 桥接分支位于 Forward 检测点之前,
passthrough 账号完全无法命中;handler 级改写对所有分支生效。
- body 归一化口径不一致:body-signal 现在与 path-based 一样走白名单归一化
(prompt_cache_key 等一并删除),而非仅依赖 OAuth 黑名单转换。
检测函数导出为 HasCompactionTriggerInInput 供 handler 使用,保留原 PR 的
7 个单测;新增 6 个 handler 级回归测试(提升、codex 别名路由、尾斜杠、
子路径不误伤、path-based 无双重后缀、普通请求不受影响)。
Refs #3777
2026-07-08 10:04:14 +08:00
shaw
a855317624
Merge remote-tracking branch 'origin/main' into fix/compact-body-signal-routing
...
# Conflicts:
# backend/internal/service/openai_gateway_service.go
2026-07-08 09:57:31 +08:00
Wesley Liddick
f4e8bec54c
Merge pull request #3803 from fengshao1227/fix/sidebar-scroll-position-persist
...
fix(frontend): 路由切换后保持侧边栏滚动位置
2026-07-08 09:53:05 +08:00
Wesley Liddick
6631cbad67
Merge pull request #3812 from Wei-Shaw/refactor/split-bloated-files-r2
...
refactor: 纯移动拆分 8 个后端大文件与 i18n 语言包
2026-07-08 09:03:44 +08:00
shaw
d0bcaa8b09
test(i18n): 新增语言包 spread 组装键冲突守卫测试
2026-07-08 08:49:23 +08:00
shaw
bb5d2e84a1
refactor(handler): 纯移动拆分 setting_handler.go(3957→468行)
2026-07-08 08:49:22 +08:00
shaw
f013bc1141
refactor(service): 纯移动拆分 admin_service.go(4409→642行)
2026-07-08 08:49:22 +08:00
shaw
2a4c28e8f5
refactor(service): 纯移动拆分 antigravity_gateway_service.go(4664→639行)
2026-07-08 08:49:22 +08:00
shaw
d0f669338b
refactor(service): 纯移动拆分 openai_ws_forwarder.go(4675→399行)
2026-07-08 08:49:21 +08:00
shaw
db3bd9971e
refactor(repository): 纯移动拆分 usage_log_repo.go(4701→212行)
2026-07-08 08:49:21 +08:00
shaw
4d23ad4bac
refactor(service): 纯移动拆分 openai_gateway_service.go(4872→1095行)
2026-07-08 08:49:21 +08:00