Wesley Liddick
07f980b99f
Merge pull request #5084 from apple-ouyang/codex/fix-openai-compaction-encrypted-retry
...
fix(openai): recover stale encrypted compaction
2026-07-31 21:48:10 +08:00
Ouyang Xingyuan
fe21725865
fix(openai): recover stale encrypted compaction
...
Reason:
- Responses retries can carry account-bound encrypted compaction items that OpenAI rejects with invalid_encrypted_content.
Changes:
- Drop encrypted compaction and compaction_summary items only during the existing recovery retry.
- Preserve unencrypted compaction items and cover HTTP and WebSocket recovery paths.
2026-07-31 21:21:13 +08:00
Wesley Liddick
d29acc29a5
Merge pull request #5066 from wucm667/fix/issue-5051-subscription-quota-window
...
fix(subscription): align quota windows with subscription term
2026-07-31 20:40:18 +08:00
Wesley Liddick
66998918b6
Merge pull request #5143 from wucm667/fix/issue-5138-codex-instructions
...
fix(openai): default missing passthrough instructions
2026-07-31 20:39:57 +08:00
Wesley Liddick
da6194c1c3
Merge pull request #5112 from chenty2333/fix/openai-stream-capacity-pool-retry
...
fix(openai): retry streamed capacity errors in pool mode
2026-07-31 20:38:15 +08:00
Wesley Liddick
132d446ca9
Merge pull request #5133 from dawnx/fix/payment-visible-method-wipe
...
fix(payment): 保存系统设置时不再清空可见支付方式配置
2026-07-31 20:37:58 +08:00
Wesley Liddick
0eac363e67
Merge pull request #5120 from Vibeone/fix/grok-pool-mode-cooldown-bypass
...
fix(grok): 公共池模式跳过所有默认冷却路径
2026-07-31 20:27:46 +08:00
Wesley Liddick
796313e993
Merge pull request #5131 from wucm667/fix/issue-5125-image-data-url-offload
...
fix(images): decode data URLs during task offload
2026-07-31 20:27:35 +08:00
Wesley Liddick
c772d18666
Merge pull request #5130 from moonfunjohn/codex/fix-epay-method-selector-overflow
...
fix(payment): prevent EasyPay method selector overflow
2026-07-31 20:27:25 +08:00
Wesley Liddick
94df1fffc2
Merge pull request #5124 from wucm667/fix/issue-5105-filter-grok-billing-ping
...
fix(grok): filter billing ping response events
2026-07-31 19:20:16 +08:00
shaw
30967d5d9a
fix(grok): ping 帧统一改写为 SSE 注释并限制过滤缓冲
...
Responses 事件类型对严格客户端是闭合枚举,任何 event: ping 帧都会令
grok CLI / Codex CLI 整轮失败。原实现只精确匹配 inference-cost 标记帧
和 cost=="0" 帧,上游尾帧携带非零 cost 或格式微调即复发 #5105;且对
其它 ping 变体的保守放行同样会炸掉严格解析器。现改为:event: ping 帧
(data 声明的 type 与事件名不冲突时)一律改写为 SSE 注释 ": ping",
所有解析器安全忽略且保留保活效果。
同时把整帧缓冲改为增量状态机:非 ping 帧首行即判定、逐行零拷贝直通,
不再累积;仅 ping 候选帧缓冲,并设 16 行 / 16KB 上限,超限回放原文
转直通,杜绝上游用永不结束的帧撑爆网关内存。
2026-07-31 18:57:43 +08:00
wucm667
dfdbc27709
fix(openai): default missing passthrough instructions
2026-07-31 18:55:15 +08:00
wucm667
77d4df9544
test(grok): check filter body close error
2026-07-31 18:34:11 +08:00
github-actions[bot]
7ceabb3fd5
chore: sync VERSION to 0.1.169 [skip ci]
2026-07-31 09:19:08 +00:00
Wesley Liddick
26d894ef4f
Merge pull request #5137 from Wei-Shaw/fix/upstream-url-path-segment-validation
...
fix(gateway): 收紧上游 URL 路径片段校验
v0.1.169
2026-07-31 16:46:00 +08:00
shaw
017f6bbd5e
fix(gateway): 收紧上游 URL 路径片段校验
...
网关有若干位置会把客户端可控的字符串拼进上游请求的 URL path(Responses
子路径、Gemini 模型名)。此前这些字符串未经校验直接参与拼接,可能改变上游
请求的路径结构,使实际发出的请求与客户端意图不一致。
- 新增 internal/service/upstream_path_guard.go:路径片段闭集允许清单
(\w + `-` + `.`),拒绝空片段、纯点片段、超长片段与过深后缀
- /responses/*subpath 三条路由入口新增守卫,不可转发的子路径直接 404;
service 层同时保证不产出不合规后缀,拼接函数再兜底一层
- Gemini AI Studio 原先 5 处重复的 URL 拼接收敛为唯一构造点
buildGeminiAIStudioModelActionURL(校验模型片段 + action 白名单)
- Gemini native / GetModel handler 增加入口校验;ForwardAIStudioGET 逐片段校验
- Grok video 端点的 request_id 增加片段合规校验
合法子路径(/compact、/compact/detail、/{id}/cancel 形态)与既有模型名行为
不变,通配路由保留。
2026-07-31 16:11:45 +08:00
wucm667
d6467f6eb0
fix(images): decode data URLs during task offload
2026-07-31 15:04:56 +08:00
moonfunjohn
8ed9f754cf
fix(payment): prevent method selector overflow
2026-07-31 14:54:01 +08:00
dawn
3deb2f17d8
fix(payment): 保存系统设置时不再清空可见支付方式配置
...
UpdatePaymentConfig 无条件写入全部设置键,未传的指针字段经
derefStr(nil) / formatBoolOrEmpty(nil) 转成空串后仍会落库。
setting_handler_update.go 构造 UpdatePaymentConfigRequest 时从不填充
VisibleMethod* 四个字段,而 UpdateSettingsWithAuthSourceDefaultsOmitting
先写入正确值、UpdatePaymentConfig 紧接着以空串覆盖,导致管理员每次保存
系统设置都会静默重置支付宝/微信的可见支付方式路由。
改为仅写入调用方显式提供的字段,符合 PATCH 语义。EnabledTypes 传
空切片仍可显式清空。
2026-07-31 14:21:36 +08:00
Wesley Liddick
f9d2791693
Merge pull request #5032 from Ricardo-binZzz/fix/release-pricing-fallback-resource
...
fix(release): include pricing fallback resources
2026-07-31 14:00:07 +08:00
Ricardo-binZzz
105e5c5da3
fix(release): include pricing fallback resources
2026-07-31 13:51:22 +08:00
wucm667
baaae8e121
fix(grok): filter billing ping response events
2026-07-31 12:31:45 +08:00
Wesley Liddick
bf0fc03ab7
Merge pull request #5018 from hongheshan-svg/fix/glm-5.2-fallback-pricing
...
fix(billing): 补上 glm-5.2 兜底价,避免被 glm-5 子串匹配抢走
2026-07-31 12:00:45 +08:00
Wesley Liddick
2be08f3f39
Merge pull request #4913 from jeshica/fix/anthropic-count-tokens-max-tokens
...
fix: strip max_tokens from Anthropic count tokens
2026-07-31 11:58:28 +08:00
hongheshan-svg and Claude Opus 5
493955f7bd
fix(billing): add glm-5.2 fallback pricing to stop glm-5 substring match
...
glm-5.2 has no entry in the fallback table, so getFallbackPricing falls
through to `strings.Contains(modelLower, "glm-5")` and prices it at
GLM-5 rates ($1.00 in / $3.20 out per MTok) instead of the official
z.ai rates ($1.40 / $4.40) — roughly 27% under.
LiteLLM carries no bare `glm-5.2` key either (only provider-prefixed
`cloudflare/@cf/zai-org/glm-5.2` and `fireworks_ai/.../glm-5p2`, which
the lookup candidates never match), so the request always lands on the
fallback path and the discrepancy shows up directly in usage logs.
Add the glm-5.2 entry (same price as glm-5.1 per docs.z.ai) and match it
before the bare `glm-5` branch, with a note that dotted variants must
precede it. The existing regression test asserting the old glm-5 price
is updated accordingly.
Source: https://docs.z.ai/guides/overview/pricing
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-31 11:49:30 +08:00
zhiyu
53aa5cd247
test: align ModelMappingPreservesOtherFields with max_tokens strip
...
The count_tokens path now strips max_tokens; this sibling test also
exercises ForwardCountTokens but still asserted max_tokens preservation.
Flip its assertion to expect the field is filtered, matching
CountTokensFiltersGenerationFields.
2026-07-31 11:47:21 +08:00
Wesley Liddick
0a45be17d8
Merge pull request #5033 from Ricardo-binZzz/fix/sub2api-no-new-privileges
...
fix(deploy): prevent application privilege gains
2026-07-31 11:44:28 +08:00
Wesley Liddick
60f6dc91cf
Merge pull request #5115 from zvensmoluya/codex/update-gpt56-luna-terra-pricing
...
[codex] update GPT-5.6 Luna and Terra pricing
2026-07-31 11:44:21 +08:00
Wesley Liddick
1702ee1362
Merge pull request #5078 from wucm667/fix/issue-5072-subscription-expiry-label
...
fix(frontend): correct subscription expiry labels
2026-07-31 11:44:07 +08:00
Wesley Liddick
c4b461c68c
Merge pull request #5063 from lucas-ward/codex/issue-4211
...
fix(payment): keep subscription plan titles readable
2026-07-31 11:44:00 +08:00
Wesley Liddick
3c387a164d
Merge pull request #5060 from alexj11324/codex/passkey-deployment-guidance
...
fix: clarify passkey deployment guidance
2026-07-31 11:43:53 +08:00
Wesley Liddick
e854132a57
Merge pull request #4953 from spongehah/brn-qwen3guard-auxiliary-fields
...
feat(security-audit): allow Qwen3Guard auxiliary fields
2026-07-31 11:43:47 +08:00
Wesley Liddick
a8cd33eead
Merge pull request #5048 from wucm667/fix/issue-5041-claude-auto-classifier
...
fix(anthropic): recognize auto mode classifier
2026-07-31 11:43:39 +08:00
Wesley Liddick
276d9cbd9b
Merge pull request #4993 from 17Yuns/fix/smtp-message-format
...
fix(email): generate standards-compliant SMTP messages
2026-07-31 11:43:32 +08:00
Wesley Liddick
1f8b3a9c60
Merge pull request #5037 from heathermhuang/codex/fix-composite-available-models
...
fix(channels): show Composite models by platform
2026-07-31 11:43:25 +08:00
Wesley Liddick
c9156c1e7f
Merge pull request #5053 from wucm667/fix/issue-5015-skip-unschedulable-refresh
...
fix(account): skip unschedulable token refresh candidates
2026-07-31 11:43:18 +08:00
Wesley Liddick
91850d36e6
Merge pull request #5030 from Ricardo-binZzz/fix/ops-cleanup-success-log-level
...
fix(logging): record cleanup success at info level
2026-07-31 11:43:11 +08:00
eyre
5c9629ddb7
fix(grok): unify pool mode bypass for all default cooldown paths
...
- Move pool mode check before the status switch so 401/402/403/5xx
all skip tempUnschedule consistently
- Skip rateLimitGrok in updateGrokUsageSnapshot for pool mode
- Expand test coverage to all affected status codes
2026-07-31 03:02:01 +00:00
eyre
4d13925c9e
fix(grok): skip entitlement 403 cooldown for pool mode accounts
2026-07-31 03:02:01 +00:00
Wesley Liddick
6fa784fdd0
Merge pull request #5118 from Wei-Shaw/fix/openai-proxy-stream-circuit-fail-open
...
fix(openai): 代理断流熔断改为 fail-open 偏好,修复共用代理部署下的调度不可用
2026-07-31 10:42:24 +08:00
shaw
da49ce3f29
fix(openai): fail open proxy stream circuit and collapse burst disconnects
...
The proxy stream circuit introduced in v0.1.164 (#4749 ) removes every
account behind a quarantined proxy from scheduling. When all schedulable
accounts share one proxy (a common deployment), two mid-stream
disconnects within a minute zeroed out capacity for 10 minutes and every
request failed with 502. One HTTP/2 connection loss also killed all
multiplexed streams at once, tripping the threshold from a single event.
- Quarantine now degrades to a preference: when the only reason no
account is available is proxy quarantine, selection retries once with
the quarantine bypassed, so capacity can never reach zero.
- Disconnects within 3s per proxy collapse into one failure event.
- Add gateway.openai_proxy_stream_circuit.disabled escape hatch.
- A completed stream still clears the quarantine immediately; TTL,
thresholds and recording guards are unchanged.
2026-07-31 10:30:30 +08:00
Zven
313121f3f7
test(pricing): update requested Terra cost
2026-07-31 10:02:04 +08:00
Zven
488d3b09ec
test(pricing): update Terra billing ratios
2026-07-31 09:55:16 +08:00
Zven
b2d895fb8d
fix(pricing): update GPT-5.6 Luna and Terra rates
2026-07-31 09:42:46 +08:00
diannaaav
7d3bf86e55
fix(openai): retry streamed capacity errors in pool mode
2026-07-31 02:31:35 +08:00
wucm667
fb40211305
fix(frontend): correct subscription expiry labels
2026-07-30 12:47:05 +08:00
wucm667
7b6111f2f7
fix(subscription): align quota windows with subscription term
2026-07-30 02:37:14 +08:00
wucm667
352b21f4e2
fix(claude): relax marker to tolerate category element in classifier output
...
Real claude-cli/2.1.220 samples insert <category>...</category> between
</block> and <reason>, breaking the previous literal marker.
Also fix an unchecked type assertion in the test suite.
2026-07-29 23:25:02 +08:00
BayinForge
0ee9ea5765
fix(payment): keep subscription plan titles readable
2026-07-29 21:23:16 +08:00
Zhixuan Jiang
711056f5b7
fix: clarify passkey deployment guidance
2026-07-29 08:58:33 -04:00