1. 11 Feb, 2026 1 commit
  2. 10 Feb, 2026 2 commits
  3. 08 Feb, 2026 8 commits
  4. 07 Feb, 2026 20 commits
  5. 06 Feb, 2026 9 commits
    • 🔔 feat: Add subscription-aware quota notifications and update UI copy · 673ea758
      Routes quota alerts through a subscription-specific check when billing from subscriptions, preventing wallet-based thresholds from triggering false warnings.
      Updates the notification settings description and localization keys to clarify that both wallet and subscription balances are monitored.
      t0ng7u committed
    • 🛠️ fix: billing session error handling for subscription-first fallback. · 743b9278
      Aligns the error variable types in the subscription-first path so that quota fallback checks use the correct NewAPIError.
      This prevents build failures and preserves the intended wallet fallback when subscription pre-consume returns an insufficient quota error.
      t0ng7u committed
    • chore: Improve subscription billing fallback and UI states · 4fd8d033
      Add a lightweight active-subscription check to skip subscription pre-consume when none exist, reducing unnecessary transactions and locks. In the subscription UI, disable subscription-first options when no active plan is available, show the effective fallback to wallet with a clear notice, and distinguish “invalidated” from “expired” states. Update i18n strings across supported locales to reflect the new messages and status labels.
      t0ng7u committed
    • Merge pull request #2877 from QuantumNous/refactor/billing-session · e8177efe
      refactor: 抽象统一计费会话 BillingSession
      Calcium-Ion committed
    • Merge pull request #2878 from QuantumNous/feat/hide-subscription-card-when-no-plans · 88038a01
       refactor(wallet): Top-up layout to embed subscription plans into the recharge card tabs
      Calcium-Ion committed
    • refactor(wallet): Top-up layout to embed subscription plans into the recharge card tabs · 9942045b
      - Defaulting to subscriptions when available and avoiding initial flash when no plans exist.
      - Adjust the wide-screen layout to place wallet and invite sections side by side, simplify the subscription header and controls, and add padding to prevent card borders from clipping.
      - Update related i18n strings by adding the new tab label and removing the obsolete subscription blurb.
      t0ng7u committed
    • fix: 修复 BillingSession 多个边界问题 · 0a805528
      - Settle 部分失败保护:新增 fundingSettled 标记,资金来源提交后
        令牌调整失败不再导致 Refund 误退已结算的资金
      - 订阅多扣费修复:trySubscription 传 subConsume 而非 preConsumedQuota
        给 preConsume,保证三者(amount/preConsume/FinalPreConsumedQuota)一致
      - 令牌回滚错误记录:preConsume 中 funding 失败时令牌回滚错误不再丢弃
      - 移除钱包路径死代码:用户额度不足的 strings.Contains 匹配不可能命中
      - WalletFunding.Refund 不重试:IncreaseUserQuota 非幂等,重试会多退
      CaIon committed
    • refactor: 抽象统一计费会话 BillingSession · 116004fd
      将散落在多个文件中的预扣费/结算/退款逻辑抽象为统一的 BillingSession 生命周期管理:
      
      - 新增 BillingSettler 接口 (relay/common/billing.go) 避免循环引用
      - 新增 FundingSource 接口 + WalletFunding / SubscriptionFunding 实现 (service/funding_source.go)
      - 新增 BillingSession 封装预扣/结算/退款原子操作 (service/billing_session.go)
      - 新增 SettleBilling 统一结算辅助函数,替换各 handler 中的 quotaDelta 模式
      - 重写 PreConsumeBilling 为 BillingSession 工厂入口
      - controller/relay.go 退款守卫改用 BillingSession.Refund()
      
      修复的 Bug:
      - 令牌额度泄漏:PreConsumeTokenQuota 成功但 DecreaseUserQuota 失败时未回滚
      - 订阅退款遗漏:FinalPreConsumedQuota=0 但 SubscriptionPreConsumed>0 时跳过退款
      - 订阅多扣费:subConsume 强制为 1 但 FinalPreConsumedQuota 不同步
      - 退款路径不统一:钱包/订阅退款逻辑现统一由 FundingSource.Refund 分派
      CaIon committed
    • Merge pull request #2876 from seefs001/fix/json_schema · 35760367
      fix: /v1/chat/completions -> /v1/responses json_schema
      Calcium-Ion committed