Albert Coady
0dc6e56aae
fix: harden easypay custom method validation
2026-07-06 15:00:29 +08:00
Albert Coady
bf76168ba5
feat: add custom easypay payment methods
2026-07-06 15:00:29 +08:00
shaw
d56e94b875
feat(payment): 订阅 CNY 换算改为独立汇率配置的显式 opt-in
...
- 新增 SUBSCRIPTION_USD_TO_CNY_RATE 配置(1 USD = X CNY,默认 0=关闭),
替代复用 balance_recharge_multiplier 的隐式换算,促销倍率与订阅定价解耦
- 未配置汇率时订阅保持 price 直付的存量行为,存量部署升级零影响
- 前端确认页/原价/手续费/方式限额与后端换算条件严格镜像(rate>0 且币种为 CNY)
- 管理后台新增汇率配置输入(zh/en 文案),checkout-info 透出 subscription_usd_to_cny_rate
- 单测锁定:汇率未配置时不换算、换算使用汇率而非余额倍率、余额订单不受影响、返利仍按 USD price
2026-07-06 14:34:17 +08:00
shaw
d089c5789c
Merge branch 'pr-3738' into fix/subscription-cny-optin-rate
2026-07-06 14:14:19 +08:00
shaw
0fd2e9216d
fix(scheduler): 修复 OpenAI 高级调度器审计发现的正确性与性能问题
...
针对 #3692 合并后审计发现的问题集中修复:
- previous_response_id 剥离条件改为按 call_id 全覆盖校验,
部分可重建的工具续链不再被误剥离(不受开关门控的行为回归)
- 粘性加权回退路径补分组归属校验并清理失效绑定,杜绝跨分组账号泄漏
- 账号列表页:无 OpenAI 账号时跳过分数计算、过滤池限定 openai 平台、
负载批查合并为账号并集一次查询,消除全表扫描与 Redis N+1
- 订阅优先模式下常规池不可用时回退订阅池等待计划,
busy-but-waitable 的订阅账号不再导致请求硬失败
- TopK/权重 DB 覆盖显式受总开关门控,与兄弟子开关语义一致
- 前端未分组 OpenAI 账号回退展示基础分,不再显示 "-"
- ListAllWithFilters 等能力正式进入 AccountRepository/AdminService 接口,
移除匿名接口断言与静默降级;负载批查失败补 warn 日志
- SelectAccountWithSchedulerForCapability 增加显式 previousResponseCanMove
参数,移除 "previous_response_can_move" 魔法字符串哨兵
- 设置写入路径补"基础权重不得全为零"聚合校验;
运行时设置批量读取失败的降级路径覆盖全部键并留痕
2026-07-06 11:43:16 +08:00
Wesley Liddick
759332aa92
Merge pull request #3692 from linshuboy/codex/openai-advanced-scheduler-controls-squashed
...
[codex] add OpenAI advanced scheduler controls
2026-07-06 10:59:23 +08:00
wucm667
b408edf97b
fix(payment): convert subscription CNY pay amount
2026-07-06 10:56:43 +08:00
Wesley Liddick
f0f1f59a44
Merge pull request #3716 from wucm667/fix/antigravity-refresh-server-invalidated-token
...
fix(antigravity): 401 服务端失效的 token 触发主动刷新,修复 NeedsRefresh 仅看 expires_at 的死循环
2026-07-06 10:18:49 +08:00
Wesley Liddick
ac68d73f0c
Merge pull request #3717 from wucm667/fix/anthropic-models-honor-group-config
...
fix(gateway): Anthropic /v1/models 返回分组 models_list_config 自定义模型列表
2026-07-06 10:18:36 +08:00
linshuboy
f26ca5661e
feat: add OpenAI advanced scheduler controls
...
Related: #1089 , #408 , #123
2026-07-05 17:24:38 +08:00
wucm667
41cdd438d7
fix(gateway): honor Anthropic custom models list
2026-07-05 08:35:34 +08:00
wucm667
b23475ac0c
fix(antigravity): refresh server-invalidated tokens
2026-07-05 08:34:34 +08:00
MoRanHuiShou-pug
e76e0499d7
fix: sanitize payment response NUL bytes
2026-07-05 03:55:40 +08:00
Wesley Liddick
41def4ba03
Merge pull request #3699 from wucm667/fix/responses-billing-use-mapped-model
...
fix(openai): /v1/responses 计费使用映射后模型,修复按原始模型价格误计费
2026-07-04 10:40:53 +08:00
Wesley Liddick
707b87a96f
Merge pull request #3676 from wucm667/fix/codex-import-refresh-token-missing-collision
...
fix(admin): Codex Session 导入 refresh_token 缺失时不再合并同 workspace 不同账号
2026-07-04 10:29:47 +08:00
wucm667
4dd3aee5c2
fix(openai): use mapped billing model for responses
2026-07-04 10:04:42 +08:00
wucm667
6bd248fd1f
fix(admin): avoid merging Codex access-only imports
2026-07-04 09:53:01 +08:00
Wesley Liddick
dfdb838ce4
Merge pull request #3690 from AndersonBY/feature/codex-image-tool-policy
...
feat: add Codex image tool strip policy
2026-07-04 09:27:37 +08:00
Wesley Liddick
be3aee1a4b
Merge pull request #3694 from zhaoteng45/fix/antigravity-gemini31-pro-agent
...
fix: normalize Antigravity Gemini 3.1 Pro routing
2026-07-04 09:23:46 +08:00
Wesley Liddick
588e02b29e
Merge pull request #3673 from heathermhuang/codex/grok-admin-issues-3545-3649
...
fix: preserve configured Grok OAuth concurrency
2026-07-04 09:22:18 +08:00
Wesley Liddick
659086861d
Merge pull request #3670 from weiness/feat/configurable-migration-timeout
...
feat: make setup migration timeout configurable
2026-07-04 09:21:14 +08:00
Wesley Liddick
0c53d4f334
Merge pull request #3661 from jianjianai/fix/group-capacity-batch-hotpath
...
fix: 优化用户组容量汇总批量统计性能
2026-07-04 09:20:02 +08:00
Wesley Liddick
8e07ec55db
Merge pull request #3685 from jianjianai/fix/optimize-slot-cleanup
...
fix: 优化并发槽位定时清理性能
2026-07-04 09:19:34 +08:00
Wesley Liddick
129d05258a
Merge pull request #3696 from jianjianai/codex/token-expired-nonretryable
...
fix:添加 token_expired 刷新不可重试判断
2026-07-04 09:18:43 +08:00
Wesley Liddick
46ef146225
Merge pull request #3689 from DaydreamCoding/feat/usage-error-requests-alignment
...
feat(usage): 错误请求对齐用量明细(UI/排序/筛选/列设置)
2026-07-04 09:18:08 +08:00
shaw
b3f796972e
feat(anthropic): treat 7d_oi (Fable) window 429 as model-level rate limit
...
Anthropic OAuth/setup-token accounts now expose a Fable-only 7d window in
429 responses (anthropic-ratelimit-unified-7d_oi-*). Previously, a 429
triggered solely by this window fell through to the legacy path and marked
the whole account rate limited (picking the sooner 5h/7d reset) even though
5h/7d were still "allowed".
Backend:
- HandleUpstreamError: when only 7d_oi is rejected/exceeded, set a
model-level rate limit (scope "claude-fable-5") and skip account-level
SetRateLimited / session-window rewrite / temp-unsched entirely.
Real 5h/7d exhaustion keeps the exact legacy account-level behavior.
- modelRateLimitKeysForRequest: append the Fable family scope for any
mapped Anthropic model containing "fable", so claude-fable-5[1m] and
other variants are excluded from scheduling together.
- Passive sampling: collect 7d_oi utilization/reset into Extra
(passive_usage_7d_oi_*), including from the 429 response itself so the
usage bar doesn't freeze at a stale value during the limit window;
cleared on 5h window reset like the existing 7d keys.
- Usage API: new seven_day_fable window in UsageInfo. GetPassiveUsage
builds it from passive samples; active queries parse the upstream
seven_day_overage_included field (claim name from the
representative-claim header) and fall back to passive data when the
upstream usage API doesn't return it, so the active-query button keeps
the bar populated. seven_day_sonnet handling is preserved unchanged.
Frontend:
- /admin/accounts usage cell renders a "7d F" (amber) progress bar next to
the existing 5h / 7d / 7d S bars for Anthropic OAuth/setup-token accounts.
2026-07-04 08:28:30 +08:00
jjaw
e5dc1f5972
添加 token_expired 刷新不可重试判断
2026-07-04 04:30:15 +08:00
zhaoteng45
df2cedeead
fix: normalize antigravity gemini 3.1 pro routing
2026-07-03 17:22:49 +00:00
DaydreamCoding
ebbdc70311
feat(usage): 错误请求对齐用量明细(UI/排序/筛选/列设置)
...
错误请求列表(/admin/usage 错误 tab、Ops 弹窗、用户端 /usage 错误 tab)
对齐用量明细的交互与信息密度。Squash of:
- feat(usage): 错误请求全面对齐用量明细(UI/列序/排序/筛选/列设置/新列)
- refactor(usage): 错误表提取共享徽章工具与 IP 批量工具条,后端排序解析归并 SetSort
- feat(usage): /admin/usage 错误请求新增分类过滤
- fix(ops): 错误列表 phase=upstream 过滤生效,守卫豁免改为显式 opt-in
- fix(ops): 错误列表用户列回退显示已删除 KEY 所有者
- fix(usage): 错误请求状态码排序对齐展示/过滤,筛选项改固定常用码
2026-07-03 23:02:27 +08:00
Anderson
f385cdceb7
feat: add Codex image tool strip policy
2026-07-03 22:36:39 +08:00
shaw
a1b2b32e08
fix: prevent silent usage_logs drops under queue overflow ( #3656 )
...
高并发下扣费成功但 usage_logs 被双层异步队列静默丢弃(单用户实测丢失 49%),
导致消费排行与对账缺口。根因是 6a685727 为避免溢出时单行 INSERT 踩踏数据库,
把三处"队列满"改成了立即终态丢弃。
改为有界阻塞背压,兼顾数据不丢与批量写入模式不变:
- CreateBestEffort/createBatched 入队移除 default 立即丢弃分支,
队列满时阻塞等待(受 detached 15s ctx 期限约束)
- writeUsageLogBestEffort 收到 dropped 不再直接放弃,统一走
repo.Create 同步兜底(仍经批处理器;ctx 耗尽时换新 detached 窗口),
重复写入由 ON CONFLICT DO NOTHING 幂等防护
- worker 池默认溢出策略 sample→sync(viper 默认 + 池常量),
溢出时提交方内联执行(提交点在响应写出后,不阻塞客户端),
显式配置 sample/drop 的部署不受影响
- 附带修复 ensure*Batcher 的存量数据竞争:channel nil 检查移入 sync.Once
正常负载零行为变化;突发时短暂等待替代永久丢失;数据库只见批量 INSERT。
2026-07-03 21:02:32 +08:00
jjaw
f3a3a0869d
优化并发槽位清理
2026-07-03 21:02:31 +08:00
jianjian
c620ad6a36
fix: align group capacity SQL with target schema
2026-07-03 08:44:39 +00:00
wucm667
d0a1443a41
fix(antigravity): allow oauth 401 auto recovery
2026-07-03 15:21:53 +08:00
Heatherm Huang
2b462b07de
fix: preserve configured Grok OAuth concurrency
2026-07-03 14:41:18 +08:00
Wesley Liddick
87dfc66132
Merge pull request #3659 from jianjianai/fix/ops-realtime-stats-performance
...
fix: 优化运维实时账号统计接口性能
2026-07-03 10:45:24 +08:00
Wesley Liddick
5d7f213cbf
Merge pull request #3657 from jianjianai/fix/redeem-invitation-bad-request
...
修复邀请码误走普通兑换接口时返回 500
2026-07-03 10:44:22 +08:00
weiness
36d5f4e4ca
feat: make setup migration timeout configurable
2026-07-03 10:29:33 +08:00
shaw
a5638a4e54
fix: match Codex session imports by chatgpt_user_id before shared account id
...
Members of the same ChatGPT team share chatgpt_account_id, so matching
imports by the account key first could overwrite another member's
account credentials. Identity keys are now ordered by strength
(user > email > access > account), and an account-key hit is rejected
when both sides carry different chatgpt_user_id values.
- Keep the account-key fallback when either side lacks a user id, so
legacy accounts without chatgpt_user_id are updated and backfilled
instead of duplicated
- Index all candidate accounts per shared key so a teammate's row can
no longer shadow a legacy account depending on row order
- Apply the same conflict check to in-batch dedup and emit a warning
when a legacy account is claimed via the shared account key
- Scope a 120s timeout to the Codex session import request instead of
raising the global client timeout
2026-07-03 10:13:51 +08:00
jianjian
72ccd1b111
fix: batch group capacity summaries
2026-07-02 20:22:17 +00:00
jianjian
3f2ef60468
fix: optimize ops realtime account stats
2026-07-02 20:04:47 +00:00
jianjian
372436323a
修复邀请码普通兑换错误
2026-07-02 16:38:42 +00:00
Wesley Liddick
9caa3c9c5e
Merge pull request #3635 from JRBaggins/hotfix/openai-oauth-count-tokens-latest
...
fix: handle OpenAI OAuth count_tokens scope errors
2026-07-02 17:41:43 +08:00
Wesley Liddick
3020652fa1
Merge pull request #3565 from zy6p/zy6p/pr-openai-ws-http-bridge
...
feat(openai-ws): 支持 http_bridge ingress 模式
2026-07-02 17:40:32 +08:00
Wesley Liddick
537bd50469
Merge pull request #3638 from infinityf4p/show-reset-credit-expiration
...
feat(openai): show reset credit expiration
2026-07-02 17:39:17 +08:00
Wesley Liddick
6bc6998b0e
Merge pull request #3627 from alfadb/fix/ollama-anthropic-bearer-auth
...
fix(anthropic): 支持 API Key Bearer 认证方式
2026-07-02 17:37:30 +08:00
Wesley Liddick
4e23c77ece
Merge pull request #3626 from DanisJiang/fix/claude-code-stream-keepalive
...
fix: prevent Claude Code stream keepalive stalls
2026-07-02 17:35:48 +08:00
Wesley Liddick
821399ade1
Merge pull request #3622 from deqiying/feat/subscription-revoke-restore
...
支持恢复已撤销订阅
2026-07-02 17:34:20 +08:00
Wesley Liddick
441b8ec2e2
Merge pull request #3614 from heathermhuang/codex/grok-media-group-gate-fix
...
fix: enable Grok media generation groups
2026-07-02 17:34:09 +08:00
Wesley Liddick
fafdd8342f
Merge pull request #3641 from infinityf4p/fix/openai-plan-type-workspace
...
fix(openai): avoid inactive workspace plan type overrides
2026-07-02 17:33:59 +08:00