Wesley Liddick
|
a632cb0050
|
Merge pull request #3569 from xueshiji/main
feat(group): 订阅分组新增可选的高峰时段倍率,以支持智谱等coding plan的高峰时段
|
2026-07-02 14:55:34 +08:00 |
|
infinityf4p
|
df59b8b966
|
fix: persist OpenAI subscription expiration
|
2026-07-02 14:38:08 +08:00 |
|
infinityf4p
|
dfb36e45f1
|
show reset credit expiration
|
2026-07-02 13:27:58 +08:00 |
|
alfadb
|
7869b7fe38
|
fix(anthropic): 支持 API Key Bearer 认证方式
|
2026-07-02 10:43:08 +08:00 |
|
deqiying
|
b26dcc3da2
|
feat(subscription): 支持恢复已撤销订阅
|
2026-07-01 22:19:21 +08:00 |
|
DaydreamCoding
|
0ff93aca7a
|
feat: add usage IP geolocation lookup
|
2026-07-01 21:49:49 +08:00 |
|
shaw
|
60da9ba178
|
fix(frontend): refine grok icon, palette and i18n
|
2026-07-01 18:49:33 +08:00 |
|
xueshiji
|
5e99561d6e
|
Merge branch 'Wei-Shaw:main' into main
|
2026-07-01 17:48:42 +08:00 |
|
xueshiji
|
1034f576d7
|
fix: 高峰倍率全链路透传、计费术语修正与边界处理
- 高峰倍率信息透传至可用渠道、支付计划、结算信息等 API,前端
GroupBadge / GroupOptionItem / SubscriptionPlanCard / PaymentView /
SubscriptionsView 统一展示高峰时段与倍率标签
- 修正计费术语:"文本倍率" → "token 倍率",明确高峰倍率同时作用于
token 计费的图片 token,图片按次计费不受高峰影响
- 允许高峰倍率 multiplier=0,支持高峰时段免费策略
- 切换分组类型为 standard 时自动清除高峰倍率配置
- 长上下文计费与标准计费路径改用内部实现,移除冗余中间调用
- 前端高峰倍率相关控件文案改为 i18n
- 新增多组高峰倍率相关单元测试
|
2026-07-01 17:46:12 +08:00 |
|
shaw
|
8c2d9b9a12
|
chore(openai): remove gpt-5.3-codex from OpenAI default model list
移除 OpenAI OAuth 账号默认模型列表中的 gpt-5.3-codex(后端 DefaultModels、前端 openai 白名单及 UseKeyModal 目录),保留 gpt-5.3-codex-spark 与计费/别名/messages-dispatch 相关逻辑不变。
|
2026-07-01 15:54:34 +08:00 |
|
Wesley Liddick
|
0a9146c3d1
|
Merge pull request #3586 from deqiying/codex/fix-subscription-revoke-soft-delete
修复订阅撤销操作实际上是软删除的bug
|
2026-07-01 15:38:45 +08:00 |
|
xueshiji
|
8b46994dc2
|
Merge branch 'Wei-Shaw:main' into main
|
2026-07-01 14:01:03 +08:00 |
|
Wesley Liddick
|
9817d5d5bf
|
Merge pull request #3598 from DaydreamCoding/feat/openai-spark-shadow-account
feat(spark-shadow): OpenAI Spark 链接型影子账号
|
2026-07-01 14:00:52 +08:00 |
|
xueshiji
|
5e9529bb88
|
Merge branch 'Wei-Shaw:main' into main
|
2026-07-01 14:00:51 +08:00 |
|
shaw
|
96c9166b0e
|
fix(usage): 用户使用记录默认显示推理强度列
|
2026-07-01 14:00:27 +08:00 |
|
 DaydreamCodingandClaude Sonnet 5
|
bdf7ead157
|
feat(spark-shadow): OpenAI Spark 链接型影子账号
背景:gpt-5.3-codex-spark 使用独立于 codex 全局(5h/7d)的配额窗口(数据源是
/wham/usage 响应体的 codex_bengalfox,而非 codex 全局用的 x-codex-* 响应头),且
只能挂在已完成 OAuth 授权的 OpenAI 账号下复用其登录态,不能作为独立账号单独接入。
为此新增“链接型影子账号”(spark shadow account):影子账号本身不持有任何凭据,
通过 parent_account_id 指向母账号,凭据/token/代理透传自母账号并共享母账号的刷新
周期,仅在配额维度(quota_dimension=spark)和用量窗口上与母账号完全独立调度、互不
连坐。
实现:
- 数据模型:migration 154(+154a)给 accounts 表加 parent_account_id /
quota_dimension 列 + 4 条约束(维度合法 / parent⟺非 global 维度一致 / 禁自指 /
FK)+ 2 个 CONCURRENTLY 索引(母账号索引 + 每母账号至多一个影子的唯一索引)。
- 创建:POST /api/v1/admin/accounts/:id/shadow(CreateShadow)—— 一母一影(唯一
索引兜底并发竞态),继承母账号 proxy/分组/并发/优先级(显式传参可覆盖),默认
model_mapping 恒等映射到 spark(拒绝非 spark 模型),母账号必须是真实的 OpenAI
OAuth 账号(非影子)。
- 凭据透传:resolveCredentialAccount 把影子解析回母账号,GetAccessToken / 请求头
/ WS 三条路径统一走此函数;影子自身 Credentials 恒为空(仅允许写 model_mapping),
凭据写入的汇聚点 persistAccountCredentials 对影子早返 no-op,防止误写。
- 调度:parentHealthyForShadow 只看母账号是否仍是 OpenAI OAuth + 凭据/传输是否
可用(active、token 未过期、未处于 401/刷新失败/传输故障导致的临时不可调度冷却),
刻意不看母账号的 global 限流窗口——两条 429 道互不连坐。
- 用量:影子的 codex_5h/7d 走 OpenAIQuotaService.QueryUsage(/wham/usage 的
codex_bengalfox),与母账号走的 WSv2 探测(/responses 头)完全独立的数据源、
刷新节流与 staleness 判定。
- 备份:ExportData 显式排除影子账号(影子不持凭据,通用凭据型导入强制
credentials 非空、无法表达父子链接),按 skipped_shadows 计数提示前端。
- 前端:账号操作菜单新增“创建 Spark 影子”入口,影子行展示回填的母账号信息
(邮箱 / plan / 隐私模式 / 订阅到期 / chatgpt_account_id),批量操作自动跳过
影子账号。
说明:migrations 目录用完整文件名(而非纯数字前缀)标识迁移,故本次新增的
154_account_spark_shadow.sql / 154a_..._notx.sql 与已有的
154_add_ops_system_logs_api_key_id.sql 按序号共存,与目录里 145/151 已有的
先例一致。
测试:新增约 20 个测试文件,覆盖 handler(CreateShadow 校验 / 母账号信息回填)、
repository(影子 round-trip / 一母一影唯一索引 / 迁移 schema)、service(凭据
透传三路径 / 调度母健康门 / 用量窗口来源与刷新节流 / CRS 母账号不变量 / 各类
早返与 fail-closed 场景)及前端组件(账号列表 / 操作菜单 / 用量重置)。
验证(镜像 CI;golangci-lint 首次全量分析耗时过长被跳过,其余全部实测):
- gofmt -l:干净
- go build ./... / go vet ./...:通过
- go test ./... -count=1:全绿(全部包 ok,含 internal/service、
internal/repository、migrations)
- go test -tags integration ./internal/repository/... ./internal/service/...
(真实 Postgres,testcontainers):全绿,含迁移幂等性
(TestMigrationsRunner_IsIdempotent_AndSchemaIsUpToDate)与影子相关全部用例
- pnpm lint:check / pnpm typecheck / pnpm build(真实 vite 构建)/
pnpm vitest run:全绿(124 文件 760 用例)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
2026-07-01 12:21:45 +08:00 |
|
Wesley Liddick
|
5f62625ae6
|
Merge pull request #3577 from heathermhuang/codex/fix-english-ui-cjk
fix: remove Chinese strings from English UI
|
2026-07-01 11:35:04 +08:00 |
|
shaw
|
db0414233c
|
feat: 适配 sonnet5
|
2026-07-01 11:32:22 +08:00 |
|
shaw
|
59e9356c51
|
feat: 抹除 Anthropic OAuth 请求中客户端 dateline 隐写指纹
对 /v1/messages 转发到 Anthropic OAuth/setup-token 账号的请求做 dateline
归一化,将 system prompt 与 <system-reminder> 块中 "Today's date is …"
语句里的 4 种撇号变体与 "/" 日期分隔符还原为 ASCII 撇号 + "-",抹除某些
客户端在检测到非官方 base URL 时注入的 3 bit 隐写指纹。API Key 账号不受
影响。新增系统设置开关 enable_client_dateline_normalization,默认开启。
|
2026-07-01 10:54:18 +08:00 |
|
deqiying
|
03727ac363
|
fix(subscription): 修复订阅撤销软删除失效
总: 增加明确的订阅撤销接口,修复撤销后的缓存失效和管理端 revoked 展示。
分: 同步失效订阅 L1 与 billing cache,补跨实例失效通知、soft-delete-aware 列表查询、revoked_at DTO 字段和回归测试。
|
2026-07-01 00:37:51 +08:00 |
|
Heatherm Huang
|
1158cf31bc
|
fix: require localized interval validation
|
2026-06-30 22:31:21 +08:00 |
|
Heatherm Huang
|
41bb15d302
|
fix: remove remaining English fallbacks
|
2026-06-30 22:27:37 +08:00 |
|
Heatherm Huang
|
b4f38b092f
|
fix: preserve zh locale in i18n cleanup
|
2026-06-30 22:06:27 +08:00 |
|
Heatherm Huang
|
6e54776509
|
fix: localize English UI strings
|
2026-06-30 20:05:23 +08:00 |
|
Wesley Liddick
|
7cb98e5bdc
|
Merge pull request #2007 from PMExtra/feature/user-usage-admin-parity
feat: align user usage analytics with admin
|
2026-06-30 17:10:09 +08:00 |
|
shaw
|
930326116e
|
fix: 修复订阅支付金额显示错误
|
2026-06-30 16:26:22 +08:00 |
|
PMExtra
|
cafc95c3e2
|
feat: align user usage analytics with admin
|
2026-06-30 15:31:28 +08:00 |
|
xueshiji
|
915c60b150
|
feat(group): 订阅分组新增可选的高峰时段倍率,以支持智谱等coding plan的高峰时段
|
2026-06-30 14:17:05 +08:00 |
|
shaw
|
345d5c6b56
|
chore: update sponsors
|
2026-06-30 14:11:14 +08:00 |
|
Wesley Liddick
|
76e0d90736
|
Merge pull request #3509 from wucm667/fix/refund-pending-not-success
fix(payment): 退款 pending 不再当成最终成功,避免站内账务与网关状态不一致
|
2026-06-30 13:38:04 +08:00 |
|
shaw
|
bf4f006736
|
fix: 修复用户列表使用时间排序冲突
|
2026-06-30 13:36:36 +08:00 |
|
Wesley Liddick
|
efb8b45876
|
Merge pull request #3560 from StarryKira/feat/issue-3557-oauth-email
feat: fix OAuth email completion flow
|
2026-06-30 10:55:00 +08:00 |
|
Wesley Liddick
|
ac6f2e9693
|
Merge pull request #3559 from 315944211/fix/privacy-toast-result
fix: show privacy setting result accurately
|
2026-06-30 10:50:17 +08:00 |
|
zy6p
|
5654321380
|
fix(frontend): enable ws mode editing for openai setup-token accounts
(cherry picked from commit 73031d1ba8079b2f369a11b3de9542f27bd61405)
(cherry picked from commit acdbb9ce0471e5ab1009dc25e171a6497222347c)
|
2026-06-30 10:41:41 +08:00 |
|
Wesley Liddick
|
e70e36e4d2
|
Merge pull request #3484 from bwliangc/feat/risk-control-matched-keyword
feat(risk-control): record matched keyword in keyword-block logs
|
2026-06-30 10:40:30 +08:00 |
|
zy6p
|
901958ba1b
|
feat(openai-ws): add http_bridge ingress mode and account ws selector
(cherry picked from commit 58647ff63d7ff994c7c14c84c4913a8d3ed6be05)
(cherry picked from commit 9f18fb7c24e187fb20e90d1d9e89fcec91c56937)
|
2026-06-30 10:40:05 +08:00 |
|
wucm667
|
93a3bf3077
|
Fix refund pending finalization gaps
|
2026-06-30 10:19:50 +08:00 |
|
wucm667
|
7316d83027
|
fix(payment): 区分退款 pending 并收敛匿名查单
|
2026-06-30 10:00:48 +08:00 |
|
haruka
|
260fda19b3
|
feat: fix OAuth email completion flow
|
2026-06-30 01:11:51 +08:00 |
|
315944211
|
a0a3d0c33e
|
fix: show privacy setting result accurately
|
2026-06-30 00:37:21 +08:00 |
|
Heatherm Huang
|
4a7148e203
|
fix: support grok cli compatibility routes
|
2026-06-29 17:53:19 +08:00 |
|
Wesley Liddick
|
c99112a9e9
|
Merge pull request #3515 from bestony/feat/ops-system-log-key-id
feat(ops): add key id filter to system logs
|
2026-06-29 09:24:40 +08:00 |
|
Wesley Liddick
|
a22b12677f
|
Merge pull request #3517 from bestony/feat/keys-column-settings
feat(keys): add API key column settings
|
2026-06-29 09:24:20 +08:00 |
|
Wesley Liddick
|
b0dbc22fe5
|
Merge pull request #3510 from wucm667/fix/subscription-confirm-show-converted-amount
fix(payment): 订阅订单确认页显示换算后的 CNY 实付金额,而非 USD 套餐价
|
2026-06-29 09:24:01 +08:00 |
|
Wesley Liddick
|
bebafe7697
|
Merge pull request #3437 from imfangwenjie/fix/api-base-fetch
fix(frontend): use configured API base for direct requests
|
2026-06-29 09:23:13 +08:00 |
|
Wesley Liddick
|
38577c6ca0
|
Merge pull request #3533 from Pluviobyte/codex/fix-api-key-unlimited-quota
fix(keys): reactivate exhausted keys set to unlimited
|
2026-06-29 09:19:53 +08:00 |
|
Wesley Liddick
|
47598462f5
|
Merge pull request #3401 from StarryKira/fix/issue-3394-fallback-pricing-log-spam
fix: stop per-request fallback-pricing log spam for unknown models (#3394)
|
2026-06-29 09:19:44 +08:00 |
|
Pluviobyte
|
da810c3b43
|
fix(keys): reactivate exhausted keys set to unlimited
|
2026-06-28 09:05:28 +08:00 |
|
Bestony
|
b244f850e7
|
feat(keys): add column settings
|
2026-06-27 15:14:13 +08:00 |
|
Bestony
|
bad87ff533
|
feat(ops): add api key filter to system logs
|
2026-06-27 14:35:19 +08:00 |
|