yaxin
9617775f9a
fix(repo): tolerate ErrTxStarted for tx-bound clients and harden test stubs
...
- user_repo.create(): keep the TxFromContext fast path, but restore
tolerance for dbent.ErrTxStarted in the self-owned-transaction branch.
ent's Client.Tx only inspects the driver type, so a repository built
from a tx-bound client (client-injected transactions, e.g. the
integration fixture testEntTx + tx.Client()) hits ErrTxStarted; reuse
that client instead of failing. Fixes the two red integration tests in
allowed_groups_contract_integration_test.go.
- createUserAndClaimInvitation: roll back via defer (matching the OAuth
registration precedent) so a panic inside the transaction cannot leak
the connection.
- settingRepoStub: guard call counters and state with a mutex; the new
concurrency regression test exercises it from multiple goroutines and
the unsynchronized counters were flagged by -race.
2026-08-18 15:02:25 +08:00
IanShaw027
fd42d3722d
fix: hide Grok prepaid and used/limit when they are empty
...
Skip the prepaid chip without a positive balance, and skip used/limit when monthly limit is 0.
2026-08-18 14:55:08 +08:00
Wesley Liddick
1870b58c1d
Merge pull request #5721 from lyy0709/codex/bulk-openai-settings
...
fix(openai): complete bulk account settings
2026-08-18 14:53:55 +08:00
IanShaw027
269fbcac0e
feat: Grok 用量条补齐本站 24h/7d/30d 聚合
...
把已有的本地窗口统计接到 Free 24h 与付费 7d/30d 进度条,避免只显示官方百分比。
2026-08-18 14:50:57 +08:00
hansnow
7e579cb28d
fix(openai): adapt client tools in WS HTTP bridge
2026-08-18 14:42:30 +08:00
Randark
ebcae03afd
fix(lint): 补齐 setting_public.go 与配额 fetcher 测试的 gofmt 对齐
2026-08-18 06:29:43 +00:00
jaxxjj
a9514a68d2
perf(usage): aggregate stats in one scan
...
Reduce filtered admin usage statistics from four scans to one GROUPING SETS query so every breakdown shares the exact same filters. Add concurrent expression indexes for requested and upstream model filters on large usage_logs tables.
2026-08-18 14:26:19 +08:00
Wesley Liddick
938f1868ae
Merge pull request #5714 from wucm667/fix/issue-2733-current-main
...
fix(ops): avoid single-insert fallback after batch failure
2026-08-18 14:11:42 +08:00
Wesley Liddick
4d19836189
Merge pull request #5716 from wucm667/fix/issue-2695-current-main
...
fix: skip expiry reminders without SMTP config
2026-08-18 14:06:32 +08:00
Wesley Liddick
c792b44bb2
Merge pull request #5712 from xiaobo121388/main
...
feat: add Ollama Cloud usage query action
2026-08-18 14:05:27 +08:00
Randark
7376f4a48c
fix(lint): gofmt 对齐 + 移除未使用的 isSupportedProvider
...
- 三个文件补 gofmt 规范对齐(结构体尾部注释、const 块字段对齐)
- isSupportedProvider 在 validateProvider 改用能力集合后无引用,删除
2026-08-18 05:57:41 +00:00
Wesley Liddick
1ea4150bf0
Merge pull request #5581 from wucm667/fix/issue-5574-passthrough-model-discovery
...
fix(gateway): align passthrough model discovery
2026-08-18 13:56:02 +08:00
Wesley Liddick
ed2da82396
Merge pull request #5711 from wucm667/fix/issue-5709-antigravity-tool-config
...
fix(antigravity): preserve mixed Gemini tool config
2026-08-18 13:55:24 +08:00
Wesley Liddick
6259940ef2
Merge pull request #5669 from feeeei/main
...
feat(openai): OpenAI Team 联动熔断
2026-08-18 13:54:32 +08:00
Wesley Liddick
baaf59d417
Merge pull request #5755 from feeeei/feat/gemini
...
fix(gemini): Skipped 错误策略对齐 OpenAI,上游 4xx 不再硬改 500
2026-08-18 13:54:06 +08:00
Wesley Liddick
c0325d24f9
Merge pull request #5759 from o2e/codex/fix-codex-usage-probe-model-clean
...
[codex] 修复部分账号 Codex 额度查询 400
2026-08-18 13:53:49 +08:00
Wesley Liddick
c76ff55997
Merge pull request #2148 from feitianbubu/pr/ops-error-detail-support-custom-time
...
feat: ops 错误详情弹窗支持自定义时间区间
2026-08-18 13:52:34 +08:00
Wesley Liddick
5c12960285
Merge pull request #4005 from feitianbubu/fix/header-role-i18n
...
fix(ui): localize user role label in app header
2026-08-18 13:52:15 +08:00
Wesley Liddick
f6d6613ec6
Merge pull request #4006 from feitianbubu/fix/native-controls-dark-mode
...
fix(ui): adapt native form controls to dark mode via color-scheme
2026-08-18 13:51:57 +08:00
Wesley Liddick
5dfac8bffa
Merge pull request #4049 from feitianbubu/fix/dashboard-token-cache-breakdown
...
fix(dashboard): include cache tokens in token card breakdown
2026-08-18 13:51:42 +08:00
Wesley Liddick
632b4f4faa
Merge pull request #4053 from feitianbubu/fix/announcements-empty-state-copy
...
fix(announcements): use proper empty-state copy instead of error message
2026-08-18 13:51:21 +08:00
Wesley Liddick
3d9a0a71bd
Merge pull request #4057 from feitianbubu/fix/ops-sla-zero-window
...
fix(ops): show neutral SLA card when window has no requests
2026-08-18 13:51:09 +08:00
Wesley Liddick
1a3ecd2b94
Merge pull request #5004 from wucm667/fix/issue-4990-deferred-tool-cache-control
...
fix(claude): strip cache control from deferred tools
2026-08-18 13:50:57 +08:00
Wesley Liddick
8532344745
Merge pull request #5715 from wucm667/fix/issue-3917-current-main
...
fix(frontend): isolate AccountsView helper data loading
2026-08-18 13:50:39 +08:00
Wesley Liddick
cddb03c0f1
Merge pull request #5609 from wucm667/fix/issue-5607-auth-pricing-snapshot
...
fix: preserve group pricing in auth snapshots
2026-08-18 13:50:13 +08:00
Wesley Liddick
a7a321232f
Merge pull request #5567 from wucm667/fix/issue-5563-anthropic-sse-overload
...
fix(gateway): handle Anthropic SSE overload errors
2026-08-18 13:49:59 +08:00
Randark
302a10b886
test(monitor-ui): 配额视图渲染与开关门控用例
...
- 新增 MonitorQuotaView.spec:tier window/label 的 i18n 映射与未知
token 透出、阈值配色(≥90 红/≥75 黄/其余绿)、进度条宽度钳制、
多币种余额与单余额回退、plan_level 徽章、错误截断与失败态不渲染 tiers
- 新增 MonitorCard.quota.spec:latest_quota 受系统开关门控,
无快照或开关关闭时不渲染
- 既有工厂/断言补 check_mode、account_id;provider 网格断言 4→8
2026-08-18 05:10:10 +00:00
Randark
a20e1c00cc
feat(monitor-ui): 配额模式表单、用量快照视图与 8 平台支持
...
管理端:
- MonitorFormDialog:新增检查方式三态分段控件(探活/配额/探活+配额),
provider 网格扩展至 8 平台(+antigravity/kimi/zhipu/deepseek),
国产平台默认 endpoint 预填、antigravity 强制 quota-only;配额模式
显示关联账号选择器(复用 adminAPI.accounts.list 按平台过滤),
隐藏 endpoint/api_key/模型等探活专属字段
- 新建共用 MonitorQuotaView:用量窗口进度条(阈值/样式对齐账号页
CNProviderQuotaCell)、多币种余额、plan_level 徽章与错误态;
window/label 机器 token 走 i18n,未知 token 原样透出(前向兼容)
- 列表主模型单元格内联 latest_quota;运行结果弹窗逐行展示配额;
筛选栏/模板管理/格式化 composable 同步 8 平台(配色对齐
utils/platformColors.ts);ProviderIcon 搬运 4 家官方 SVG
用户端:
- MonitorCard 支持 latest_quota,渲染受 channel_monitor_show_quota
系统开关(isChannelMonitorQuotaVisible)控制,服务端剥离为第一道防线
设置与 i18n:
- 管理设置页新增「向用户展示渠道用量/余额」开关(默认关闭);
zh/en 全量补充 providers/checkMode/quota 文案
2026-08-18 05:09:58 +00:00
o2e
16e4f7ecc3
修复 Codex 额度探针模型兼容性
2026-08-18 13:08:28 +08:00
spongehah
bb6c3b4f6a
fix: unify Codex OAuth outbound identity onto the inference resolver
...
Token exchange, PAT whoami, models, probes, and pre-writes now follow
the same UA/version chain as Codex inference instead of hardcoded
codex-cli/0.91.0 or compile-time constants.
2026-08-18 13:03:22 +08:00
Randark
c51fd7d0b3
test(channel-monitor): adapt checker body test to 3-arg normalizeMonitorPrimaryModel
2026-08-18 04:51:06 +00:00
Randark
7ab6d3db66
test(channel-monitor): quota mode unit/integration/migration coverage
...
- fetcher:海外/CN coding/CN payg 分派、账号缺失、凭据失效标记、
TTL 命中与失败不缓存、UsageInfo→tiers 全窗口归一、状态推导矩阵
- quota mode:RunCheck 三分派(quota 单行 / quota_probe 仅挂主行 /
probe 不变)、配额失败不翻探活状态、校验矩阵、关联账号复核
(quota 报错 probe 自动解绑)、quota→probe 切换强制重填 key、
Duplicate 空明文重加密
- settings:channel_monitor_show_quota 缺省关闭 + 仅 "true" 开启
- 迁移内容断言(仿 176 grok 迁移测试)
- repo 集成测试:check_mode/account_id 往返、quota JSONB 回读、
探活旧行 NULL 兼容(testcontainers PG 实跑迁移 226)
- 修复 Fetch 在 nil receiver 上的 panic(缓存查询先于原 nil 守卫)
2026-08-18 04:51:02 +00:00
Randark
41344c20ff
feat(monitor): wire quota fetcher & expose check_mode in handlers
...
- handler DTO: create/update 接收 check_mode/account_id,provider oneof 扩至 8 家,
endpoint/api_key 改为 omitempty(条件必填下沉 service 校验);
monitor/checkResult/historyItem 响应透传 check_mode/account_id/quota
- 用户端 latest_quota 由 channel_monitor_show_quota 控制,关闭时服务端剥离
- wire: NewChannelMonitorQuotaFetcher 以具体服务类型收参(窄接口包内保留供
stub),ProvideChannelMonitorRunner 注入后 SetQuotaFetcher
2026-08-18 04:14:15 +00:00
Randark
6a6fd304f6
feat(settings): channel_monitor_show_quota public setting (default off)
...
- 新增公开设置 key(迁移 226 已插入默认 false),控制用户端监控页
是否展示配额/余额;管理端不受影响
- 解析 fail-closed:仅字面 "true" 视为开启(对齐 available_channels_enabled
语义,而非 hide_throughput 的 fail-open)
- 全链路贯通:domain key 常量 → setting_public(公开读取 + ChannelMonitorRuntime
.ShowQuota + 注入 payload)→ settings_view/parse/update → handler DTO
(admin/user 响应 + admin 更新请求)→ api_contract_test 两个 wantJSON 块
2026-08-18 04:06:18 +00:00
Randark
c44711ac98
feat(channel-monitor): quota mode service layer (fetcher + dispatch + repo)
...
- 常量:MonitorProvider{Antigravity,Kimi,Zhipu,Deepseek}、MonitorCheckMode 三态、
配额缓存/告警阈值参数;新增 check_mode 相关业务错误
- 校验:monitorProviders(8)/probeCapableProviders(7) 集合替代 adapter 表判定,
validateCheckMode 矩阵(antigravity 仅 quota);quota 模式 primary_model
默认占位 "quota",endpoint/api_key 条件必填
- checker:kimi/deepseek 复用 /v1/chat/completions、zhipu 走
/api/paas/v4/chat/completions;merge 黑名单与 replace 校验同步扩容
- ChannelMonitorQuotaFetcher:窄接口聚合账号侧三个用量服务 + 账号加载,
归一为 domain.MonitorQuotaSnapshot;成功快照 5min TTL 缓存防配额端点风暴;
Fetch 永不返回 error(失败降级 Success=false 快照);状态推导
operational/degraded(≥90% 或余额耗尽/账号未关联)/failed(401/403)/error
- RunCheck 按 check_mode 分派:quota 单行结果、quota_probe 探活+配额挂主行、
probe 不变;Update 组合校验 + 关联账号复核(probe 自动解绑失效账号);
Duplicate 拷贝新字段且 quota 模式空明文重加密(防 runner 误停摆)
- repo:Create/Update/entToServiceMonitor 透传 check_mode/account_id;
InsertHistoryBatch 写 quota;ListLatestForMonitorIDs 裸 SQL 加 quota 列 +
scanMonitorQuota JSONB 解包(NULL 安全);ListHistory 透传 quota
2026-08-18 04:03:13 +00:00
Randark
615e6901ea
feat(channel-monitor): add quota mode schema (migration 226 + ent)
...
- 迁移 226:provider CHECK 扩到 8 平台(monitors + request_templates)、
channel_monitors 加 check_mode/account_id(FK ON DELETE SET NULL)、
channel_monitor_histories 加 quota JSONB、插入公开设置
channel_monitor_show_quota(默认 false)
- ent schema 同步:provider 枚举 +4、endpoint 去 NotEmpty(quota 模式存空串)、
新增 check_mode/account_id 字段、history 加 quota JSON 快照
- domain 新增归一化配额快照类型 MonitorQuotaSnapshot/Tier/Balance
(放 domain 是因为 ent schema 需要引用,service 会造成 import cycle)
2026-08-18 03:50:01 +00:00
feeeei
ab0fcd1a0e
fix(gemini): Skipped 错误策略对齐 OpenAI,上游 4xx 不再硬改 500
...
ErrorPolicySkipped(池模式、或自定义错误码未命中)原来在响应写出上
自成一派:v1beta 原生把上游 4xx 硬改 500 后原文透传,/v1/messages
硬传 500 进映射(客户端拿到 502)。下游网关据此把请求级错误当可重
试的服务端故障反复换号,耗尽后改写成 All available accounts
exhausted(2026-08-17 gemini 生产事故链)。现对齐 OpenAI 路径语义:
- Skipped 只豁免账号状态标记,不豁免换号:可 failover 状态码一律
返回 UpstreamFailoverError(poolModeSkippedFailoverError 泛化为
skippedErrorPolicyFailoverError,同账号重试标记仍仅池模式携带)
- 池模式的不可 failover 4xx 保真:v1beta 原码+原文透传(新
writeGeminiNativeUpstreamError 与 ErrorPolicyNone 共用同一写出,
并补记 ops 事件),/v1/messages 与 chat completions 按真实状态
码映射
- 自定义错误码未命中且不可 failover:三路径统一 500 + "Upstream
gateway error" 固定文案,上游细节仅记 ops 错误日志
- 400 属确定性请求错误:mapped 写出回传脱敏后的上游 message,客户
端可据此定位非法字段
2026-08-18 11:24:39 +08:00
Wesley Liddick
8869775ed3
Merge pull request #5636 from feitianbubu/fix/proxy-status-expired-i18n-key
...
fix(i18n): add missing expired key to account status block used by proxy list
2026-08-18 10:06:56 +08:00
Wesley Liddick
f66a42c40e
Merge pull request #5697 from feitianbubu/fix/ops-error-distribution-legend-labels
...
fix(admin): show category labels in ops error distribution legend
2026-08-18 10:05:39 +08:00
Wesley Liddick
7d633f5fc3
Merge pull request #5742 from heathermhuang/codex/fix-grok-response-model-audit
...
fix: normalize Grok response model audit aliases
2026-08-18 10:03:26 +08:00
Wesley Liddick
b2d1c3859a
Merge pull request #5738 from okbexx/fix/codex-identity-snapshot
...
fix(openai): make Codex convergence identity consistent
2026-08-18 09:57:05 +08:00
Randark
7e45634df9
chore: remove leftover Sora references after platform removal
...
PR #1463 removed the Sora platform, but some references survived:
- README/README_CN/README_JA kept the 'Sora status (temporarily
unavailable)' sections and gateway.sora_* docs that the removal PR
never touched.
- deploy/config.example.yaml still documented ~130 lines of sora_*
gateway keys, the top-level sora: direct-client/storage block, and
token_refresh.sync_linked_sora_accounts - none of which map to any
field in the config structs anymore.
- The OIDC login PR (02a66a01c , branched off pre-removal main and
merged 4 days after #1463 ) re-added the dead
PublicSettings.SoraClientEnabled field, which no code ever sets.
- A release sync (748a84d87 ) re-introduced sora i18n keys that the
later i18n split (d9e514f98 ) faithfully carried into
locales/{zh,en}/admin/{overview,settings}.ts. No component references
any of these keys.
This drops all of the above. Pure deletions, no behavior change.
2026-08-18 00:51:30 +00:00
Wesley Liddick
5253bb72b0
Merge pull request #5737 from lyen1688/feat/channel-time-pricing
...
功能:支持渠道模型分时倍率定价(支持峰谷定价)
2026-08-17 22:38:41 +08:00
shaw
6bf335965a
merge main 并修复与 #5730 的语义冲突
...
main 侧 #5730 新增的 openai_gateway_cn_fixes_test.go 按旧 11 参签名调用
calculateOpenAIRecordUsageCost;本分支为该函数新增了第 12 个参数
pricingAt。文本无冲突但 test build 会失败,此处按本分支对同类测试
调用点的既有处理方式补传 time.Time{}。
2026-08-17 22:27:22 +08:00
Heatherm Huang
c46d07ca07
fix: normalize Grok response model audit aliases
2026-08-17 21:15:12 +08:00
Wesley Liddick
ab28a2d10b
Merge pull request #5730 from Wei-Shaw/fix/cn-provider-group-entry-and-correctness
...
fix: 打通 CN 平台分组入口并修复五项功能缺陷(调度闸门 403/计费误计/断开漏记/count_tokens/403 处置)
2026-08-17 20:29:54 +08:00
Jarl
6793d5ac85
fix(openai): make Codex convergence identity consistent
2026-08-17 20:25:28 +08:00
lyen1688
9f24a55305
功能:支持渠道模型分时倍率定价
2026-08-17 19:45:07 +08:00
lbyxiaolizi
401dd43b4b
fix(apicompat): 链式工具调用回放本轮 reasoning_content
...
codex 0.147.0 真实 resume 历史复现:DeepSeek 每轮只在开头流式产生一次
reasoning,reasoning → call A → output A → call B 的链式调用中 call B 前
没有 reasoning item,其 assistant 消息缺 reasoning_content,DeepSeek
thinking mode 400 整个历史。
buildChatMessagesFromItems 新增 lastTurnReasoning:记录本轮最近一次
reasoning,跨 tool output 存活,仅被 user 侧 item 清除;assistant 消息
(文本或 tool_calls)在 pendingReasoning 为空时回放本轮 reasoning。
2026-08-17 18:51:17 +08:00
shaw
c38c5beef8
fix(i18n): CN 余额单元格误引 grokBalance 键致渲染原始 key
...
CNProviderBalanceCell 无快照占位标签引用 admin.accounts.grokBalance,
但该键实际嵌套在 admin.accounts.usageWindow 下,未命中时 DeepSeek/Kimi
payg 账号的用量窗口列直接显示原始键名。
- cnProviders 块新增自有占位键 balance(zh: '余额 --' / en: 'Balance --'),
单元格改引该键
- 用 esbuild 实际加载模块对 zh/en 全部 admin 语言包做键路径深度比对:
除本处外 CN 相关键(静态 14 个 + 动态拼接 accountMode/apiProtocol 系列)
双语全部对齐;唯一存量漂移是 claudeMaxSimulation 块(zh 嵌套于
modelRouting 下/en 为 groups 直属),全源码零消费方属死键,不在本次
范围内处理
2026-08-17 17:44:33 +08:00