1. 28 Apr, 2026 2 commits
  2. 27 Apr, 2026 4 commits
  3. 26 Apr, 2026 1 commit
  4. 24 Apr, 2026 10 commits
  5. 23 Apr, 2026 23 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
    • gaoren002's avatar
      5f418997
    • erio's avatar
      Merge remote-tracking branch 'upstream/main' into feat/channel-insights · 5e060b22
      erio authored
      # Conflicts:
      #	backend/cmd/server/wire_gen.go
      5e060b22
    • erio's avatar
    • erio's avatar
      375cce29
    • 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
    • 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
      test(payment): cover ErrOrderNotFound sentinel contract · d5dac84e
      erio authored
      Service layer (payment_fulfillment_order_not_found_test.go):
      - TestHandlePaymentNotification_UnknownOrder_ReturnsSentinel: in-memory
        sqlite ent client, query for a non-existent out_trade_no → errors.Is
        must recognise ErrOrderNotFound (handler relies on this to ack 200).
      - TestHandlePaymentNotification_NonSuccessStatus_Skips: non-success
        notification short-circuits before DB lookup → nil error.
      - TestErrOrderNotFound_DistinctFromOtherErrors: generic errors must not
        match the sentinel (prevents silently swallowing DB failures).
      
      Handler layer (payment_webhook_handler_test.go):
      - TestUnknownOrderWebhookAcksWithSuccess: locks the two ingredients the
        handleNotify ack path depends on — fmt.Errorf %w wrapping preserves
        errors.Is recognition, and writeSuccessResponse(stripe) returns an
        empty 200 body that Stripe treats as acknowledged.
      d5dac84e
    • erio's avatar
      fix(payment): ack unknown-order webhooks with 2xx to stop provider retries · 75e1b40f
      erio authored
      Introduce a sentinel ErrOrderNotFound in the payment service layer so the
      webhook handler can distinguish "the out_trade_no does not exist in our DB"
      from other fulfillment failures, and downgrade the former to a WARN log +
      success response.
      
      Background
      - Providers (Stripe, Alipay, Wxpay, EasyPay, ...) retry webhooks whenever
        we answer non-2xx. When a webhook endpoint is misconfigured (e.g. a
        foreign environment points at us) or our orders table has been wiped,
        we return 500 forever and the provider retries for days, spamming logs.
      - The old code also collapsed "order not found" and "DB query failed" into
        the same branch — a DB blip would be reported as "order not found" and
        swallowed.
      
      Service layer (payment_fulfillment.go)
      - Add `var ErrOrderNotFound = errors.New("payment order not found")`.
      - In HandlePaymentNotification, distinguish the two error paths:
        * dbent.IsNotFound(err) → wrap with ErrOrderNotFound so callers can
          errors.Is(...) it.
        * anything else → wrap the original err with %w so it still bubbles up
          as 500 and the provider retries (DB hiccup should be retried).
      
      Handler layer (payment_webhook_handler.go)
      - Before returning 500, check errors.Is(err, service.ErrOrderNotFound):
        emit a WARN (with provider / outTradeNo / tradeNo for discoverability),
        then call writeSuccessResponse so the provider sees its expected 2xx
        body (Stripe empty body / Wxpay JSON / others "success").
      - Other errors retain the existing 500 behavior.
      
      Monitoring note: because this path now swallows unknown-order webhooks
      silently from the provider's perspective, the WARN log line is the only
      signal. Alert on "unknown order, acking to stop retries" if you want
      visibility into misrouted webhooks or accidental data loss.
      75e1b40f
    • 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
    • erio's avatar
      fix(dto): drop obsolete public settings drift test · 1949425a
      erio authored
      The drift test referenced service.PublicSettingsInjectionPayload, a
      named type introduced by a5b05538 but dropped when we cherry-picked
      that commit into feat/channel-insights (we kept the inline struct from
      HEAD to avoid pulling fork-only helpers from setting_service.go). The
      test therefore could not compile. The 2 new public-settings fields
      (channel_monitor_enabled, available_channels_enabled) are still covered
      by manual wiring in GetPublicSettingsForInjection.
      1949425a
    • github-actions[bot]'s avatar
      0a80ec80
    • shaw's avatar
      chore: fix docker pull version tag in TG notification · a22a5b9e
      shaw authored
      Use ${VERSION} (without v prefix) instead of ${TAG_NAME} to match
      GoReleaser's actual Docker image tags.
      a22a5b9e
    • shaw's avatar
      chore: add model gpt-5.5 · 3fe4fd4c
      shaw authored
      3fe4fd4c
    • Wesley Liddick's avatar
      Merge pull request #1829 from ZHOUKAILIAN/feature/codex-oauth-proxy-message · 827a4498
      Wesley Liddick authored
      fix: 明确 OpenAI OAuth 未配置代理时的错误提示
      827a4498
    • Wesley Liddick's avatar
      Merge pull request #1836 from wucm667/fix/account-daily-weekly-quota-cache-invalidation · 8dbbd942
      Wesley Liddick authored
      fix: 修复账户配额跨越时调度快照入队逻辑
      8dbbd942
    • Wesley Liddick's avatar
      Merge pull request #1815 from james-6-23/feat_rpm · 6b0cf466
      Wesley Liddick authored
      feat(rpm): RPM 限流模块优化
      6b0cf466
    • 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