1. 23 Apr, 2026 7 commits
    • erio's avatar
      revert: remove fork-only changes from release sync · 67518a59
      erio authored
      Revert payment/wechat, sora/claude-max cleanup, fork-only migrations,
      and cosmetic changes that were brought in by the release sync commit.
      Keep only channel-monitor related improvements:
      - PublicSettingsInjectionPayload named struct with drift test
      - ChannelMonitorRunner graceful shutdown in wire
      - image_output_price in SupportedModelChip
      - Simplified buildSelfNavItems in AppSidebar
      - Gateway WARN logs for 503 branches
      67518a59
    • erio's avatar
      chore: remove test files deleted in release · 49787269
      erio authored
      HelpTooltip.spec.ts and PaymentProviderDialog.spec.ts were removed
      in release/custom-0.1.115; commit the deletion.
      49787269
    • erio's avatar
      sync: bring over remaining release/custom-0.1.115 changes · 748a84d8
      erio authored
      - Extract PublicSettingsInjectionPayload named struct with drift test
      - Add channel_monitor_default_interval_seconds to SSR injection
      - Add image_output_price to SupportedModelChip
      - Simplify AppSidebar buildSelfNavItems (admins see available channels)
      - Add gateway WARN logs for 503 no-available-accounts branches
      - Wire ChannelMonitorRunner into provideCleanup for graceful shutdown
      - Add migrations 130/131 (CC template userid fix + mimicry field cleanup)
      - Clean up fork-only features (sora, claude max simulation, client affinity)
      - Remove ~320 obsolete i18n keys
      - Add codexUsage utility, WechatServiceButton, BulkEditAccountModal
      - Tidy go.sum
      748a84d8
    • erio's avatar
      fix(frontend): add available_channels_enabled to PublicSettings type and defaults · 5eedf782
      erio authored
      featureFlags.ts registry uses 'available_channels_enabled' as a
      public-settings key, but the PublicSettings TS type (types/index.ts)
      and the app store default (stores/app.ts) only had
      channel_monitor_enabled. Adds the missing field so pnpm build passes.
      5eedf782
    • shaw's avatar
      chore: add model gpt-5.5 · 3fe4fd4c
      shaw authored
      3fe4fd4c
    • james-6-23's avatar
      feat(rpm): RPM 限流模块优化 · dc5d42ad
      james-6-23 authored
      P0:
      - rpm_override 嵌入 Auth Cache Snapshot,消除每请求 DB 查询 (snapshot v6→v7)
      - 429 RPM 响应返回 Retry-After 头(当前分钟剩余秒数)
      
      P1:
      - ClearAll 按钮直连 DELETE API,带 loading 防重复
      - 新增 GET /admin/users/:id/rpm-status 管理员 RPM 用量查询端点
      
      优化:
      - checkRPM 从级联互斥改为并行取最严,user.rpm_limit 作为全局硬上限始终生效
      - Override/Group 变更后自动失效 auth cache
      - fail-open 语义不变,Redis 故障不阻塞业务
      dc5d42ad
    • zhoukailian's avatar
      fix: clarify OpenAI OAuth proxy errors · 2489ea36
      zhoukailian authored
      2489ea36
  2. 22 Apr, 2026 14 commits
  3. 21 Apr, 2026 15 commits
  4. 22 Apr, 2026 1 commit
    • erio's avatar
      fix(available-channels): description as own column, fixed table layout · 25a50355
      erio authored
      - 描述独立成列:渠道名与描述各占一列,均用 rowspan 纵向合并
      - 渠道名单元格 text-center + align-middle,合并后视觉居中
      - table-fixed:给 name/description/platform 显式宽度,groups 和
        supported_models 在剩余空间均分。支持模型列此前在 table-auto 下
        不会换行导致横向溢出遮挡(反馈截图),加 table-fixed 后天然 flex-wrap
      - i18n 增加 availableChannels.columns.description(zh/en)
      25a50355
  5. 21 Apr, 2026 3 commits
    • erio's avatar
      feat(sidebar+groups): available-channels above channel-status; show rate for subscription groups · 9dae6c7a
      erio authored
      - Sidebar user-side order: /available-channels now sits directly above
        /monitor (渠道状态) for regular users, mirroring the admin section where
        it sits above /admin/channels.
      - GroupBadge gains an alwaysShowRate prop. Subscription groups default to
        a "订阅"/days-remaining label; the new flag swaps that for the rate
        multiplier while keeping the subscription theme color, so the Available
        Channels page can surface rates on every group type.
      9dae6c7a
    • erio's avatar
      feat(channels): themed model popover + group-badge with rate, subscription & exclusivity · ff4ef1b5
      erio authored
      Pricing popover:
      - Teleport to body + fixed-position re-measuring on hover/scroll/resize so it
        escapes the card's overflow-hidden clip that was chopping off the lower
        half of the panel.
      - Header + border adopt the platform theme via platformBorderClass /
        platformBadgeLightClass so each model card reads at a glance.
      
      Accessible groups:
      - Backend AvailableGroupRef / user DTO now expose subscription_type,
        rate_multiplier and is_exclusive. User-specific rates continue to come
        from /groups/rates (same pattern as the API keys page).
      - Table renders groups through the shared GroupBadge, which already deepens
        subscription-type colors and shows default vs custom rate as
        <s>default</s> <b>custom</b>.
      - Exclusive groups are labelled with a purple shield row, public groups
        with a grey globe row so admins and users can tell at a glance which
        groups they got via explicit grant vs. public access.
      
      i18n keys for exclusive / public / their tooltips added to zh + en.
      ff4ef1b5
    • erio's avatar
      fix(settings): inject channel_monitor & available_channels into SSR payload · 84b03efa
      erio authored
      Root cause: GetPublicSettingsForInjection used an inline struct that silently
      drifted from dto.PublicSettings and omitted channel_monitor_enabled /
      available_channels_enabled. On refresh window.__APP_CONFIG__ lacked these
      keys, so cachedPublicSettings.available_channels_enabled resolved to
      undefined and the opt-in sidebar entry (=== true) disappeared.
      
      Backend: extract PublicSettingsInjectionPayload as a named type with all
      feature-flag fields wired, and add a reflect-based drift test in the dto
      package so forgetting a future flag fails CI instead of the browser.
      
      Frontend: introduce utils/featureFlags.ts as the single registry for
      public-settings-driven toggles, with explicit opt-in / opt-out modes that
      encode the pre-load fallback. AppSidebar switches to makeSidebarFlag() so
      adding a new switch only touches the registry.
      84b03efa