"backend/internal/git@web.lueluesay.top:chenxi/sub2api.git" did not exist on "fbd0a2e3c488720025a3408e9db234407d8aef9b"
  1. 25 Apr, 2026 2 commits
    • shaw's avatar
      feat(openai): port /responses/compact account support flow (PR #1555) · 095f457c
      shaw authored
      将 vansour/sub2api#1555 的 OpenAI compact 能力建模手工移植到当前 main:账号
      级 compact 状态/auto-force_on-force_off 模式、compact-only 模型映射、调度器
      tier 分层(已支持 > 未知 > 已知不支持)、管理后台 compact 主动探测,以及对应
      i18n/状态徽章。普通 /responses 流量行为不变,无数据库迁移。
      095f457c
    • shaw's avatar
      fix(payment): 同时启用易支付和 Stripe 时显示 Stripe 按钮 · 8f28a834
      shaw authored
      VISIBLE_METHOD_ALIASES 漏了 stripe,导致 getVisibleMethods 把后端返回
      的 stripe 过滤掉。点 Stripe 按钮时省略 method 查询参数,让落地页渲染
      完整的 Payment Element。
      8f28a834
  2. 24 Apr, 2026 1 commit
  3. 23 Apr, 2026 9 commits
    • erio's avatar
    • erio's avatar
    • erio's avatar
    • erio's avatar
      feat(monitor): proportion-based overall status + reusable auto-refresh · 0dcc0e05
      erio authored
      - Change overall status logic: >50% failed = UNAVAILABLE, any failed
        or degraded = DEGRADED, all ok = OPERATIONAL
      - Extract useAutoRefresh composable with localStorage persistence
      - Create AutoRefreshButton dropdown component (reusable)
      - Integrate auto-refresh into channel status page via MonitorHero
      0dcc0e05
    • 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
    • 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
  4. 22 Apr, 2026 9 commits
  5. 21 Apr, 2026 10 commits
  6. 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
  7. 21 Apr, 2026 8 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
    • erio's avatar
      feat(channels): aggregate by channel with platform sections + rowspan table · 3cdd5754
      erio authored
      Switch the user-facing 'Available Channels' view from "one row per
      platform" to "one channel row-group with N platform sections".
      
      Backend: userAvailableChannel now holds Platforms []section instead
      of being exploded. buildPlatformSections replaces
      explodeChannelByPlatform with the same per-platform grouping logic.
      
      Frontend: drop the DataTable wrapper for this view and write a
      four-column grid table (渠道名 / 平台 / 分组 / 支持模型) where the
      channel name only renders on the first platform row of each channel —
      visual rowspan without hacking DataTable.
      
      - api/channels.ts: UserChannelPlatformSection + platforms[]
      - AvailableChannelsTable: rewritten as native grid (header + per-
        channel section with hover row highlight)
      - AvailableChannelsView: search now filters platforms sub-array;
        channel-name / description hits still keep the whole channel
      - i18n: add availableChannels.columns.platform (zh/en)
      3cdd5754
    • erio's avatar
      feat(channels): explode available channels by platform + apply platform theme · 800802b8
      erio authored
      Backend: one source channel → N output rows, one per platform that
      has user-visible groups. Each row carries a single platform, so the
      frontend can color/icon an entire row without mixing sources.
      
      - userAvailableChannel: add Platform field
      - new explodeChannelByPlatform helper; drop now-redundant
        collectGroupPlatforms
      
      Frontend: use the row platform to drive theming and stop repeating
      "ANTHROPIC" / "OPENAI" labels on every model chip.
      
      - api/channels.ts: UserAvailableChannel.platform
      - AvailableChannelsTable: name cell — PlatformBadge next to channel
        name (replaces the two-line name/description block; description
        moves to the badge's title tooltip); groups cell — each chip uses
        platformBadgeLightClass + PlatformIcon; model list passes
        show-platform=false + platform-hint to child chips
      - SupportedModelChip: chip bg/border driven by platformBadgeClass,
        leading PlatformIcon; platform-hint fallback when model.platform
        missing
      800802b8
    • IanShaw027's avatar
      17c6348b
    • IanShaw027's avatar
      7309c02f
    • IanShaw027's avatar
      d08757ce