1. 24 May, 2026 6 commits
    • 🛠️ fix: v1 interface feedback regressions · b302be30
      Resolve verified V1 frontend feedback by improving channel workflows, auth behavior, API key interactions, user filtering, layout persistence, subscription quota handling, i18n text, pricing metadata, and stale frontend cache recovery.
      
      - Add a global frontend cache version cleanup to prevent old frontend localStorage from causing page errors after upgrades.
      - Fix channel copy refresh, model mapping input focus loss, create-channel fetch-model title state, upstream model update confirmation, and batch test toast behavior.
      - Respect password login settings and improve Turnstile, forgot-password, registration, and invite-link flows.
      - Make user role/status filtering server-side and preserve table page size in URLs.
      - Improve API key edit validation feedback and prefetch real keys for reliable copy actions.
      - Fix rankings access fail-open behavior, double scrollbars, subscription received amount conversion/display, token i18n wording, model deletion confirmation grammar, and Claude pricing context inference.
      - Add clearer Playground model/group loading errors.
      
      Validation:
      - bun run typecheck
      - bun run i18n:sync
      - gofmt on modified Go files
      - go test ./controller ./model -run '^$'
      t0ng7u committed
    • ️ chore(deps): Upgrade default frontend dependencies · 88437a18
      Upgrade all web/default dependencies to their latest versions and refresh the Bun lockfile. Add dependency overrides for vulnerable transitive packages so bun audit reports no known vulnerabilities.
      
      Update TypeScript configuration for TypeScript 6 by removing deprecated baseUrl usage and explicitly enabling Node types where needed. Adapt the calendar component to react-day-picker v10 by replacing the removed table class key with month_grid.
      
      Validation:
      - bun outdated: no outdated dependencies
      - bun audit: no vulnerabilities found
      - bun run typecheck: passed
      - bun run build: passed
      t0ng7u committed
    • refactor: system settings UI for consistent, compact layouts · b08febaa
      Redesign the system settings interface to align with the rest of the console experience by using fixed header actions, removing redundant subtitles, respecting global content width, and standardizing responsive form layouts.
      
      Introduce reusable settings layout primitives for forms, switch rows, grouped controls, nested control sections, title status indicators, and page action portals. Replace duplicated card-style switch markup with explicit compact components, improve nested switch readability, and reduce visual noise across authentication, billing, content, integrations, maintenance, models, and request-limit settings.
      
      Also complete missing i18n translations, remove obsolete subtitle translation keys, refine i18n sync reporting, fix sidebar truncation for long labels, and verify the frontend with type checking and lint diagnostics.
      t0ng7u committed
    • refactor(web/default): adopt drill-in sidebar pattern for System Settings · 92a09594
      Replace the ad-hoc "workspace" abstraction with a focused, URL-driven
      "sidebar view" registry that implements the modern Vercel / Cloudflare
      drill-in pattern: clicking a top-level entry (e.g. System Settings)
      swaps the sidebar to a contextual workspace, with a `← Back to
      Dashboard` affordance, instead of stacking sub-navigation in the root.
      
      Architecture
      ------------
      - types.ts
          + SidebarView           — declarative nested view config
                                    (id, pathPattern, parent, getNavGroups)
          + SidebarViewParent     — back-navigation descriptor
          + ResolvedSidebarView   — { key, view, navGroups } returned by hook
          + SidebarData           — slimmed to { navGroups } only
          - Workspace             — removed (logo/plan never rendered)
      
      - lib/sidebar-view-registry.ts (new, replaces workspace-registry.ts)
          + SIDEBAR_VIEWS array — single source of truth for nested views
          + resolveSidebarView(pathname)
          + getNavGroupsForPath(pathname, t) — back-compat helper for the
            command palette
      
      - config/system-settings.config.ts
          Refactored to export a single SYSTEM_SETTINGS_VIEW (SidebarView)
          with parent `/dashboard/overview` + label `Back to Dashboard`.
      
      - components/sidebar-view-header.tsx (new)
          Renders only the back affordance (chevron + label). Uses the
          default SidebarMenuButton size so its typography matches the
          nav items below; collapses gracefully into icon mode via the
          existing tooltip behavior. The redundant "title + icon" row was
          removed — workspace context is already carried by the nav groups.
      
      - hooks/use-sidebar-view.ts (new)
          Encapsulates view resolution and root-nav filtering:
            · matched view  → returns its nav groups verbatim (route-level
                              beforeLoad guards already enforce access);
            · no match      → returns root nav groups, narrowed by user
                              role (admin gate) and useSidebarConfig
                              (admin × user sidebar_modules overlay).
      
      - components/app-sidebar.tsx
          Now a thin presentation layer: reads { key, view, navGroups }
          from useSidebarView() and orchestrates the view transition via
          AnimatePresence + MOTION_VARIANTS.sidebarSlide (respects
          prefers-reduced-motion). No logic, no role checks, no path
          matching — those live in the hook.
      
      - components/command-menu.tsx
          Switched to the new getNavGroupsForPath() API; behavior preserved.
      
      Cleanup
      -------
      - Deleted layout/context/workspace-context.tsx (zero consumers).
      - Deleted layout/lib/workspace-registry.ts and its
        workspace-registry.example.ts companion (over-abstracted: name/id
        metadata, isInWorkspace / getAllWorkspaces / WORKSPACE_IDS were
        registered but never read).
      - Removed `workspaces` field from useSidebarData (never consumed
        after the top-switcher was dropped).
      - Dropped WorkspaceProvider from authenticated-layout.tsx.
      - Trimmed dead `Manage and configure` translation key from all six
        locale files and from static-keys.ts.
      
      i18n
      ----
      Added the `Back to Dashboard` key to en, zh, fr, ja, ru, vi, and
      registered it in static-keys.ts under "Sidebar views".
      
      Verification
      ------------
      - bun run typecheck: passes
      - Lint: no new warnings/errors on the touched files
      - Adding a new drill-in workspace now only requires registering a
        SidebarView in SIDEBAR_VIEWS — no changes to AppSidebar required.
      t0ng7u committed
  2. 23 May, 2026 1 commit
    • 🐛 fix(channel): evict auto-disabled multi-key channels from cache (#4983) · ebbe3155
      * 🐛 fix(channel): evict auto-disabled multi-key channels from cache
      
      Ensure multi-key channels are removed from the in-memory routing cache when all keys become auto-disabled, preventing subsequent requests from repeatedly selecting channels with no available keys.
      
      Also make multi-key status updates more robust by handling missing key matches, checking actual enabled key availability, and restoring the channel status when a key is re-enabled. Add regression coverage for disabled cached channels and multi-key cache eviction.
      同語 committed
  3. 22 May, 2026 7 commits
  4. 21 May, 2026 3 commits
  5. 20 May, 2026 1 commit
  6. 19 May, 2026 15 commits
  7. 17 May, 2026 4 commits
    • fix: 修复新 UI 语言与文案显示问题 (#4876) · f69ceb69
      * chore(dev): add local setup state reset target
      
      - add a reset-setup make target to clear setup records, root users, and related options.
      - support both docker dev PostgreSQL and local SQLite development databases.
      - restart the docker dev backend so setup status is recalculated after reset.
      
      * fix(chat): prevent preset menu text overflow
      
      - add truncation layout for chat preset names to keep long labels inside the sidebar menu.
      - prevent loading and external-link icons from shrinking in constrained menu rows.
      
      * fix(i18n): translate dashboard granularity options
      
      - call t() for granularity option labels in dashboard system settings.
      - keep localized text consistent between the select trigger and dropdown items.
      
      * chore(dev): add backend dev service rebuild target
      
      - add a dev-api-rebuild make target to rebuild and start the docker backend service.
      - reuse DEV_COMPOSE_FILE and DEV_BACKEND_SERVICE variables to avoid repeated compose config literals.
      
      * fix(i18n): align interface language option labels
      
      - add shared interface language options to keep display names consistent.
      - reuse the shared options in the header switcher and profile preferences.
      - normalize language codes so zh-CN and zh_CN resolve to Simplified Chinese.
      
      * fix(i18n): add missing frontend translation keys
      
      - route channel key prompts, form validation messages, and channel fallback text through i18n.
      - add missing translations across six locales for channels, rankings, billing, and logs.
      - update i18n sync reports so literal t() keys are present in the base locale.
      QuentinHsu committed
    • feat: support request_header key source (#4903) · 68830e60
      * feat: support request_header key source in backend and settings UI
      
      * feat: support request_header channel affinity source
      Seefs committed
  8. 16 May, 2026 3 commits