1. 31 Jul, 2025 13 commits
    • feat(ui): enhance tag input · 8ffa48ab
      1. EditModelModal quality-of-life
         • Added comma parsing to `Form.TagInput`; users can now paste
           `tag1, tag2 , tag3` to bulk-create tags.
         • Updated placeholder copy to reflect the new capability.
      
      All files pass linting; no runtime changes outside the intended UI updates.
      t0ng7u committed
    • 🎨 style(sidebar): unify highlight color & assign unique icon for Models · e3d98a3f
      • Removed obsolete `sidebarIconColors` map and `getItemColor` util from
        SiderBar/render; all selected states now use the single CSS variable
        `--semi-color-primary` for both text and icons.
      • Simplified `getLucideIcon`:
        – Added `Package` to Lucide imports.
        – Switched “models” case to `<Package />`, avoiding duplication with
          the Layers glyph.
        – Replaced per-key color logic with `iconColor` derived from the new
          uniform highlight color.
      • Stripped any unused imports / dead code paths after the refactor.
      • Lint passes; sidebar hover/focus behavior unchanged while visual
        consistency is improved.
      t0ng7u committed
    • ️ refactor(hooks/models): deduplicate `useModelsData` and optimize vendor-tab counts · 1f35f668
      Highlights
      ──────────
      1. Removed code duplication
         • Introduced `extractItems` helper to safely unwrap API payloads.
         • Simplified `getFormValues` to a single-line fallback expression.
         • Replaced repeated list-extraction code in `loadModels`, `searchModels`,
           and `refreshVendorCounts` with the new helper.
      
      2. Vendor tab accuracy & performance
         • Added `refreshVendorCounts` to recalc counts via a single lightweight
           request; invoked only when必要 (current tab ≠ "all“) to avoid redundancy.
         • `loadModels` still updates counts instantly when viewing "all", ensuring
           accurate numbers on initial load and page changes.
      
      3. Misc clean-ups
         • Streamlined conditional URL building and state updates.
         • Confirmed all async branches include error handling with i18n messages.
         • Ran linter → zero issues.
      
      Result: leaner, easier-to-maintain hook with correct, real-time vendor counts
      and no repeated logic.
      t0ng7u committed
    • 🐛 fix(model): preserve created_time on Model update and streamline field maintenance · b0fe7291
      The update operation for Model previously overwrote `created_time` with zero
      because GORM included every struct field in the UPDATE statement.
      This commit adjusts `Model.Update()` to:
      
      * Call `Omit("created_time")` so the creation timestamp is never modified.
      * Refresh `UpdatedTime` with `common.GetTimestamp()` before persisting.
      * Delegate the remainder of the struct to GORM, eliminating the need to
        maintain an explicit allow-list whenever new fields are introduced.
      
      No API contract is changed; existing CRUD endpoints continue to work
      normally while data integrity for historical records is now guaranteed.
      t0ng7u committed
    • 🔄 fix: improve vendor-tab filtering & counts, resolve SQL ambiguity, and reload data correctly · ad4de7aa
      Backend
      • model/model_meta.go
        – Import strconv
        – SearchModels: support numeric vendor ID filter vs. fuzzy name search
        – Explicitly order by `models.id` to avoid “ambiguous column name: id” error
      
      Frontend
      • hooks/useModelsData.js
        – Change vendor-filter API to pass vendor ID
        – Automatically reload models when `activeVendorKey` changes
        – Update vendor counts only when viewing “All” to preserve other tab totals
      • Add missing effect in EditModelModal to refresh vendor list only when modal visible
      • Other minor updates to keep lints clean
      
      Result
      Tabs now:
      1. Trigger API requests on click
      2. Show accurate per-vendor totals
      3. Filter models without resetting other counts
      Backend search handles both vendor IDs and names without SQL errors.
      t0ng7u committed
    • 🚀 feat: Introduce full Model & Vendor Management suite (backend + frontend) and UI refinements · 1baad070
      Backend
      • Add `model/model_meta.go` and `model/vendor_meta.go` defining Model & Vendor entities with CRUD helpers, soft-delete and time stamps
      • Create corresponding controllers `controller/model_meta.go`, `controller/vendor_meta.go` and register routes in `router/api-router.go`
      • Auto-migrate new tables in DB startup logic
      
      Frontend
      • Build complete “Model Management” module under `/console/models`
        - New pages, tables, filters, actions, hooks (`useModelsData`) and dynamic vendor tabs
        - Modals `EditModelModal.jsx` & unified `EditVendorModal.jsx`; latter now uses default confirm/cancel footer and mobile-friendly modal sizing (`full-width` / `small`) via `useIsMobile`
      • Update sidebar (`SiderBar.js`) and routing (`App.js`) to surface the feature
      • Add helper updates (`render.js`) incl. `stringToColor`, dynamic LobeHub icon retrieval, and tag color palettes
      
      Table UX improvements
      • Replace separate status column with inline Enable / Disable buttons in operation column (matching channel table style)
      • Limit visible tags to max 3; overflow represented as “+x” tag with padded `Popover` showing remaining tags
      • Color all tags deterministically using `stringToColor` for consistent theming
      • Change vendor column tag color to white for better contrast
      
      Misc
      • Minor layout tweaks, compact-mode toggle relocation, lint fixes and TypeScript/ESLint clean-up
      
      These changes collectively deliver end-to-end model & vendor administration while unifying visual language across management tables.
      t0ng7u committed
    • Merge pull request #1445 from seefs001/feature/claude-code · 7eccf425
      feat: add Claude Code channel support with OAuth integration
      Calcium-Ion committed
    • fix: handle authorization code format in ExchangeCode function and update… · 2bc8de39
      fix: handle authorization code format in ExchangeCode function and update placeholder in EditChannelModal
      Seefs committed
    • Merge branch 'alpha' into feature/claude-code · c45676e3
      # Conflicts:
      #	web/src/components/table/channels/modals/EditChannelModal.jsx
      Seefs committed
  2. 30 Jul, 2025 14 commits
  3. 29 Jul, 2025 3 commits
  4. 27 Jul, 2025 8 commits
  5. 26 Jul, 2025 2 commits
    • 🔍 fix: select search filter · 90cf9efd
      Summary
      • Introduced a unified `selectFilter` helper that matches both `option.value` and `option.label`, ensuring all `<Select>` components support intuitive search (fixes channel “type” dropdown not filtering).
      • Replaced all usages of the old `modelSelectFilter` with `selectFilter` in:
        • `EditChannelModal.jsx`
        • `SettingsPanel.js`
        • `EditTokenModal.jsx`
        • `EditTagModal.jsx`
      • Removed the deprecated `modelSelectFilter` export from `utils.js` (no backward-compat alias).
      • Updated documentation comments accordingly.
      
      Why
      The old filter only inspected `option.value`, causing searches to fail when `label` carried the meaningful text (e.g., numeric IDs for channel types). The new helper searches both fields, covering all scenarios and unifying the API across the codebase.
      
      Notes
      No functional regressions expected; all components have been migrated.
      t0ng7u committed