Skip to content

Conversation

arvinxx
Copy link
Member

@arvinxx arvinxx commented Jul 24, 2025

💻 变更类型 | Change Type

  • ✨ feat
  • 🐛 fix
  • ♻️ refactor
  • 💄 style
  • 👷 build
  • ⚡️ perf
  • 📝 docs
  • 🔨 chore

🔀 变更说明 | Description of Change

📝 补充信息 | Additional Information

Summary by Sourcery

Add comprehensive support for custom desktop hotkeys, including validation, persistence, IPC integration, and a new UI component for recording and updating hotkeys.

New Features:

  • Implement ShortcutUpdateResult and enhance ShortcutManager to validate, detect conflicts, test system availability, and return structured update results.
  • Expose new IPC events and electron store actions/selectors (updateDesktopHotkey, refreshDesktopHotkeys, useFetchDesktopHotkeys) to manage desktop hotkey configurations.
  • Create a Desktop hotkey settings component and integrate it into the settings page to allow users to record and update custom hotkeys.

Enhancements:

  • Define separate desktop hotkey types and default configurations; refactor HotkeyItem and registration constants accordingly.
  • Extend application state and selectors to include desktopHotkeys and initialization flag.
  • Remove platform-specific filtering from existing hotkey settings and streamline UI mapping logic.
  • Add i18n entries for desktop hotkey titles, descriptions, and detailed error messages.

Tests:

  • Update desktopState selectors tests to reflect the new state structure for desktopHotkeys.

Copy link

vercel bot commented Jul 24, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
lobe-chat-database ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 24, 2025 0:24am
lobe-chat-preview ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 24, 2025 0:24am

Copy link
Contributor

sourcery-ai bot commented Jul 24, 2025

Reviewer's Guide

This PR introduces full support for customizable desktop hotkeys, adding validation and conflict detection in the main process, extending the IPC API, integrating new store actions and selectors, defining desktop hotkey constants and defaults, building a dedicated Desktop hotkey settings UI, and enriching types and locale entries.

Sequence diagram for updating a desktop hotkey

sequenceDiagram
  actor User
  participant DesktopSettingsUI as Desktop Hotkey Settings UI
  participant ElectronStore
  participant DesktopSettingsService
  participant IPC
  participant ShortcutController
  participant ShortcutManager

  User->>DesktopSettingsUI: Change hotkey input
  DesktopSettingsUI->>ElectronStore: updateDesktopHotkey(id, accelerator)
  ElectronStore->>DesktopSettingsService: updateDesktopHotkey(id, accelerator)
  DesktopSettingsService->>IPC: dispatch('updateShortcutConfig', {id, accelerator})
  IPC->>ShortcutController: updateShortcutConfig({id, accelerator})
  ShortcutController->>ShortcutManager: updateShortcutConfig(id, accelerator)
  ShortcutManager-->>ShortcutController: ShortcutUpdateResult
  ShortcutController-->>IPC: ShortcutUpdateResult
  IPC-->>DesktopSettingsService: ShortcutUpdateResult
  DesktopSettingsService-->>ElectronStore: ShortcutUpdateResult
  ElectronStore-->>DesktopSettingsUI: ShortcutUpdateResult
  DesktopSettingsUI-->>User: Show success or error message
Loading

ER diagram for desktop hotkey config and registration

erDiagram
  DESKTOP_HOTKEYS_REGISTRATION {
    string id
    string keys
    boolean nonEditable
  }
  DEFAULT_DESKTOP_HOTKEY_CONFIG {
    string id
    string keys
  }
  DESKTOP_HOTKEYS_REGISTRATION ||--o{ DEFAULT_DESKTOP_HOTKEY_CONFIG : "defines"
Loading

File-Level Changes

Change Details Files
Add comprehensive validation and result reporting for updating shortcuts
  • Return detailed ShortcutUpdateResult instead of boolean
  • Validate ID, format, modifier presence, conflicts, and system occupancy
  • Test registration with globalShortcut.register/unregister
  • Persist and re-register updated config
  • Catch exceptions and map to UNKNOWN error
apps/desktop/src/main/core/ui/ShortcutManager.ts
Extend IPC client and controller to fetch and update desktop hotkeys
  • Define ShortcutUpdateResult in electron-client-ipc types
  • Change updateShortcutConfig event signature to accept params and return result
  • Add getDesktopHotkeys and updateDesktopHotkey methods in DesktopSettingsService
  • Adjust ShortcutController to use new signature
packages/electron-client-ipc/src/types/shortcut.ts
packages/electron-client-ipc/src/events/shortcut.ts
src/services/electron/settings.ts
apps/desktop/src/main/controllers/ShortcutCtr.ts
Implement store support for desktop hotkeys in Electron store
  • Extend initialState with desktopHotkeys and isDesktopHotkeysInit
  • Add refreshDesktopHotkeys, updateDesktopHotkey, useFetchDesktopHotkeys actions
  • Use mutate with ELECTRON_DESKTOP_HOTKEYS_KEY
  • Create desktopHotkeysSelectors for hotkeys and init flag
src/store/electron/initialState.ts
src/store/electron/actions/settings.ts
src/store/electron/selectors/hotkey.ts
Define desktop hotkey constants, types, and default configuration
  • Introduce DESKTOP_HOTKEYS_REGISTRATION and DesktopHotkeyItem type
  • Add DesktopHotkeyEnum and DesktopHotkeyConfig in types/hotkey.ts
  • Generate DEFAULT_DESKTOP_HOTKEY_CONFIG by reducing registration list
src/const/hotkeys.ts
src/types/hotkey.ts
src/const/desktop.ts
Create and integrate Desktop hotkey settings UI
  • Add Desktop.tsx feature component with HotkeyInput handling
  • Integrate Desktop panel into settings page when isDesktop
  • Remove legacy isDesktop filters in Conversation and Essential
  • Show success/error messages based on update result
src/app/[variants]/(main)/settings/hotkey/features/Desktop.tsx
src/app/[variants]/(main)/settings/hotkey/page.tsx
src/app/[variants]/(main)/settings/hotkey/features/Conversation.tsx
src/app/[variants]/(main)/settings/hotkey/features/Essential.tsx
Enrich localization for desktop hotkeys and error messages
  • Add desktop key titles and descriptions in hotkey translations
  • Add error message mappings for each ShortcutUpdateResult type
  • Include desktop group label under setting translations
src/locales/default/hotkey.ts
src/locales/default/setting.ts
Rename and refactor default desktop shortcut actions
  • Rename showMainWindow action to showApp and add openSettings
  • Update DEFAULT_SHORTCUTS_CONFIG with new action keys
  • Adjust TrayMenuCtr and BrowserWindowsCtr decorators to use showApp
  • Update UserPanel hotkey usage to DEFAULT_DESKTOP_HOTKEY_CONFIG
apps/desktop/src/main/shortcuts/config.ts
apps/desktop/src/main/controllers/TrayMenuCtr.ts
apps/desktop/src/main/controllers/BrowserWindowsCtr.ts
src/features/User/UserPanel/useMenu.tsx

Possibly linked issues

  • #0: The PR implements custom hotkey support for the desktop client, enabling users to customize hotkeys including the main window hotkey, directly addressing the issue's request.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@lobehubbot
Copy link
Member

👍 @arvinxx

Thank you for raising your pull request and contributing to our Community
Please make sure you have followed our contributing guidelines. We will review it as soon as possible.
If you encounter any problems, please feel free to connect with us.
非常感谢您提出拉取请求并为我们的社区做出贡献,请确保您已经遵循了我们的贡献指南,我们会尽快审查它。
如果您遇到任何问题,请随时与我们联系。

Copy link
Contributor

gru-agent bot commented Jul 24, 2025

There is too much information in the pull request to test.

@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. 🌠 Feature Request New feature or request | 特性与建议 labels Jul 24, 2025
Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @arvinxx - I've reviewed your changes and they look great!

Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments

### Comment 1
<location> `apps/desktop/src/main/core/ui/ShortcutManager.ts:70` </location>
<code_context>
+        return { errorType: 'INVALID_FORMAT', success: false };
+      }
+
+      const cleanAccelerator = accelerator.trim().toLowerCase();
+
+      // 3. 检查是否包含 + 号(修饰键格式)
+      if (!cleanAccelerator.includes('+')) {
+        logger.error(
+          `Invalid accelerator format: ${cleanAccelerator}. Must contain modifier keys like 'CommandOrControl+E'`,
</code_context>

<issue_to_address>
Lowercasing the accelerator may cause issues with case-sensitive keys.

This change could break shortcuts that depend on case sensitivity, such as distinguishing between 'A' and 'a'. Please verify if lowercasing is suitable for all intended use cases and platforms.
</issue_to_address>

### Comment 2
<location> `apps/desktop/src/main/core/ui/ShortcutManager.ts:81` </location>
<code_context>
+      }
+
+      // 4. 检查是否有基本的修饰键
+      const hasModifier = ['CommandOrControl', 'Command', 'Ctrl', 'Alt', 'Shift'].some((modifier) =>
+        cleanAccelerator.includes(modifier.toLowerCase()),
+      );
+
</code_context>

<issue_to_address>
Modifier check may allow false positives if modifier names are substrings of other keys.

Using includes() may match unintended substrings, such as 'ctrlx' matching 'Ctrl'. Split the accelerator on '+' and check for exact matches to prevent this.
</issue_to_address>

<suggested_fix>
<<<<<<< SEARCH
      // 4. 检查是否有基本的修饰键
      const hasModifier = ['CommandOrControl', 'Command', 'Ctrl', 'Alt', 'Shift'].some((modifier) =>
        cleanAccelerator.includes(modifier.toLowerCase()),
      );
=======
      // 4. 检查是否有基本的修饰键
      const acceleratorParts = cleanAccelerator.split('+').map(part => part.trim().toLowerCase());
      const hasModifier = ['commandorcontrol', 'command', 'ctrl', 'alt', 'shift'].some(
        modifier => acceleratorParts.includes(modifier.toLowerCase())
      );
>>>>>>> REPLACE

</suggested_fix>

### Comment 3
<location> `apps/desktop/src/main/core/ui/ShortcutManager.ts:103` </location>
<code_context>
+      }
+
+      // 6. 尝试注册测试(检查是否被系统占用)
+      const testSuccess = globalShortcut.register(cleanAccelerator, () => {});
+      if (!testSuccess) {
+        logger.error(`Shortcut ${cleanAccelerator} is already registered by system or other app`);
+        return { errorType: 'SYSTEM_OCCUPIED', success: false };
</code_context>

<issue_to_address>
Registering and immediately unregistering the shortcut may have side effects.

This approach may briefly activate the shortcut, introducing a risk of race conditions or unintended callback execution. Please evaluate safer alternatives for checking system occupation, or clearly document this behavior if it cannot be avoided.
</issue_to_address>

<suggested_fix>
<<<<<<< SEARCH
      // 6. 尝试注册测试(检查是否被系统占用)
      const testSuccess = globalShortcut.register(cleanAccelerator, () => {});
      if (!testSuccess) {
        logger.error(`Shortcut ${cleanAccelerator} is already registered by system or other app`);
        return { errorType: 'SYSTEM_OCCUPIED', success: false };
      } else {
        // 测试成功,立即取消注册
        globalShortcut.unregister(cleanAccelerator);
      }
=======
      // 6. 尝试注册测试(检查是否被系统占用)
      // WARNING: Electron does not provide a direct way to check if a shortcut is system-occupied.
      // The following approach registers and immediately unregisters the shortcut to test availability.
      // This may briefly activate the shortcut, introducing a risk of race conditions or unintended callback execution.
      // If Electron adds a safer API in the future, this should be updated.
      const testSuccess = globalShortcut.register(cleanAccelerator, () => {});
      if (!testSuccess) {
        logger.error(`Shortcut ${cleanAccelerator} is already registered by system or other app`);
        return { errorType: 'SYSTEM_OCCUPIED', success: false };
      } else {
        // 测试成功,立即取消注册
        globalShortcut.unregister(cleanAccelerator);
      }
>>>>>>> REPLACE

</suggested_fix>

### Comment 4
<location> `src/app/[variants]/(main)/settings/hotkey/features/Desktop.tsx:29` </location>
<code_context>
+    s.useFetchDesktopHotkeys,
+  ]);
+
+  useFetchDesktopHotkeys();
+
+  const [loading, setLoading] = useState(false);
</code_context>

<issue_to_address>
useFetchDesktopHotkeys called unconditionally on every render.

This may trigger repeated network requests. Move the call inside a useEffect with the correct dependencies to avoid unnecessary fetches.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +70 to +73
const cleanAccelerator = accelerator.trim().toLowerCase();

// 3. 检查是否包含 + 号(修饰键格式)
if (!cleanAccelerator.includes('+')) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Lowercasing the accelerator may cause issues with case-sensitive keys.

This change could break shortcuts that depend on case sensitivity, such as distinguishing between 'A' and 'a'. Please verify if lowercasing is suitable for all intended use cases and platforms.

Comment on lines +80 to +83
// 4. 检查是否有基本的修饰键
const hasModifier = ['CommandOrControl', 'Command', 'Ctrl', 'Alt', 'Shift'].some((modifier) =>
cleanAccelerator.includes(modifier.toLowerCase()),
);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Modifier check may allow false positives if modifier names are substrings of other keys.

Using includes() may match unintended substrings, such as 'ctrlx' matching 'Ctrl'. Split the accelerator on '+' and check for exact matches to prevent this.

Suggested change
// 4. 检查是否有基本的修饰键
const hasModifier = ['CommandOrControl', 'Command', 'Ctrl', 'Alt', 'Shift'].some((modifier) =>
cleanAccelerator.includes(modifier.toLowerCase()),
);
// 4. 检查是否有基本的修饰键
const acceleratorParts = cleanAccelerator.split('+').map(part => part.trim().toLowerCase());
const hasModifier = ['commandorcontrol', 'command', 'ctrl', 'alt', 'shift'].some(
modifier => acceleratorParts.includes(modifier.toLowerCase())
);

Comment on lines +102 to +110
// 6. 尝试注册测试(检查是否被系统占用)
const testSuccess = globalShortcut.register(cleanAccelerator, () => {});
if (!testSuccess) {
logger.error(`Shortcut ${cleanAccelerator} is already registered by system or other app`);
return { errorType: 'SYSTEM_OCCUPIED', success: false };
} else {
// 测试成功,立即取消注册
globalShortcut.unregister(cleanAccelerator);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Registering and immediately unregistering the shortcut may have side effects.

This approach may briefly activate the shortcut, introducing a risk of race conditions or unintended callback execution. Please evaluate safer alternatives for checking system occupation, or clearly document this behavior if it cannot be avoided.

Suggested change
// 6. 尝试注册测试(检查是否被系统占用)
const testSuccess = globalShortcut.register(cleanAccelerator, () => {});
if (!testSuccess) {
logger.error(`Shortcut ${cleanAccelerator} is already registered by system or other app`);
return { errorType: 'SYSTEM_OCCUPIED', success: false };
} else {
// 测试成功,立即取消注册
globalShortcut.unregister(cleanAccelerator);
}
// 6. 尝试注册测试(检查是否被系统占用)
// WARNING: Electron does not provide a direct way to check if a shortcut is system-occupied.
// The following approach registers and immediately unregisters the shortcut to test availability.
// This may briefly activate the shortcut, introducing a risk of race conditions or unintended callback execution.
// If Electron adds a safer API in the future, this should be updated.
const testSuccess = globalShortcut.register(cleanAccelerator, () => {});
if (!testSuccess) {
logger.error(`Shortcut ${cleanAccelerator} is already registered by system or other app`);
return { errorType: 'SYSTEM_OCCUPIED', success: false };
} else {
// 测试成功,立即取消注册
globalShortcut.unregister(cleanAccelerator);
}

s.useFetchDesktopHotkeys,
]);

useFetchDesktopHotkeys();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): useFetchDesktopHotkeys called unconditionally on every render.

This may trigger repeated network requests. Move the call inside a useEffect with the correct dependencies to avoid unnecessary fetches.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot free trial expires on July 29, 2025
Learn more in the Cursor dashboard.

}

// 7. 更新配置
this.shortcutsConfig[id] = cleanAccelerator;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Shortcut Registration Case Sensitivity Issue

The updateShortcutConfig method converts the accelerator string to lowercase for validation and then stores this lowercase value. However, Electron's globalShortcut.register() API requires proper casing (e.g., "CommandOrControl+E"). Consequently, subsequent attempts to register these shortcuts using the stored lowercase accelerators will fail silently. Additionally, the globalShortcut.unregister() call after the test registration lacks error handling, which could leave test shortcuts registered if unregistration fails.

Locations (1)

Fix in CursorFix in Web

Copy link

codecov bot commented Jul 24, 2025

Codecov Report

Attention: Patch coverage is 54.92958% with 32 lines in your changes missing coverage. Please review.

Project coverage is 85.31%. Comparing base (0192140) to head (c4c84da).
Report is 4 commits behind head on main.

Files with missing lines Patch % Lines
src/store/electron/actions/settings.ts 15.62% 27 Missing ⚠️
src/services/electron/settings.ts 42.85% 4 Missing ⚠️
src/features/User/UserPanel/useMenu.tsx 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8559      +/-   ##
==========================================
- Coverage   85.34%   85.31%   -0.04%     
==========================================
  Files         906      907       +1     
  Lines       68831    68883      +52     
  Branches     4469     4702     +233     
==========================================
+ Hits        58747    58768      +21     
- Misses      10084    10115      +31     
Flag Coverage Δ
app 85.31% <54.92%> (-0.04%) ⬇️
server 96.26% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

toggleMainWindow: 'CommandOrControl+Shift+L',
openSettings: 'CommandOrControl+,'
openSettings: 'CommandOrControl+,',
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Mock Mismatch with Updated Method Signature

The mockUpdateShortcutConfig function's signature and return type are mismatched with the updated updateShortcutConfig method. The mock expects (id, accelerator) parameters, but the method now takes a single object { id, accelerator }. Furthermore, the mock returns a boolean, while the method now returns a ShortcutUpdateResult object (e.g., { success: boolean, errorType?: string }). This causes test assertions to fail, as they expect a boolean but receive an object.

Locations (1)

Fix in CursorFix in Web

Copy link

github-actions bot commented Jul 24, 2025

🚀 Desktop App Build Completed!

Version: 0.0.0-nightly.pr8559.2789
Build Time: 2025-07-24T17:57:35.747Z

📦 View All Build Artifacts

Build Artifacts

Platform File Size
macOS LobeHub-Nightly-0.0.0-nightly.pr8559.2789-arm64.dmg 181.24 MB
Windows LobeHub-Nightly-0.0.0-nightly.pr8559.2789-setup.exe 153.81 MB
Linux LobeHub-Nightly-0.0.0-nightly.pr8559.2789.AppImage 235.67 MB

Warning

Note: This is a temporary build for testing purposes only.

@arvinxx arvinxx merged commit b50f121 into main Jul 24, 2025
24 of 25 checks passed
@arvinxx arvinxx deleted the feat/support-custom-hotkey branch July 24, 2025 17:04
@lobehubbot
Copy link
Member

❤️ Great PR @arvinxx ❤️

The growth of project is inseparable from user feedback and contribution, thanks for your contribution! If you are interesting with the lobehub developer community, please join our discord and then dm @arvinxx or @canisminor1990. They will invite you to our private developer channel. We are talking about the lobe-chat development or sharing ai newsletter around the world.
项目的成长离不开用户反馈和贡献,感谢您的贡献! 如果您对 LobeHub 开发者社区感兴趣,请加入我们的 discord,然后私信 @arvinxx@canisminor1990。他们会邀请您加入我们的私密开发者频道。我们将会讨论关于 Lobe Chat 的开发,分享和讨论全球范围内的 AI 消息。

github-actions bot pushed a commit that referenced this pull request Jul 24, 2025
## [Version&nbsp;1.104.0](v1.103.2...v1.104.0)
<sup>Released on **2025-07-24**</sup>

#### ✨ Features

- **misc**: Support custom hotkey on desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support custom hotkey on desktop, closes [#8559](#8559) ([b50f121](b50f121))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
@lobehubbot
Copy link
Member

🎉 This PR is included in version 1.104.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

liammmliu pushed a commit to Deckers-Ohana/lobe-chat that referenced this pull request Jul 28, 2025
* support custom hotkey

* update tests

* clean

* fix tests
liammmliu pushed a commit to Deckers-Ohana/lobe-chat that referenced this pull request Jul 28, 2025
## [Version&nbsp;1.104.0](lobehub/lobe-chat@v1.103.2...v1.104.0)
<sup>Released on **2025-07-24**</sup>

#### ✨ Features

- **misc**: Support custom hotkey on desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support custom hotkey on desktop, closes [lobehub#8559](lobehub#8559) ([b50f121](lobehub@b50f121))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
liammmliu added a commit to Deckers-Ohana/lobe-chat that referenced this pull request Jul 28, 2025
* 💄 style: Support new Doubao thinking models (lobehub#8174)

* 💄 style: update i18n (lobehub#8400)

* 🔖 chore(release): v1.97.13 [skip ci]

### [Version&nbsp;1.97.13](lobehub/lobe-chat@v1.97.12...v1.97.13)
<sup>Released on **2025-07-12**</sup>

#### 💄 Styles

- **misc**: Support new Doubao thinking models, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Support new Doubao thinking models, closes [lobehub#8174](lobehub#8174) ([637d75c](lobehub@637d75c))
* **misc**: Update i18n, closes [lobehub#8400](lobehub#8400) ([790eeb8](lobehub@790eeb8))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: Revert "💄 style: Open new topic by tap Just Chat again" (lobehub#8402)

This reverts commit 7e2f4ce.

* 💄 style: Add Kimi K2 model (lobehub#8401)

* 🔨 chore: fix lint (lobehub#8407)

* 🔖 chore(release): v1.97.14 [skip ci]

### [Version&nbsp;1.97.14](lobehub/lobe-chat@v1.97.13...v1.97.14)
<sup>Released on **2025-07-12**</sup>

#### 🐛 Bug Fixes

- **misc**: Revert "💄 style: Open new topic by tap Just Chat again".

#### 💄 Styles

- **misc**: Add Kimi K2 model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Revert "💄 style: Open new topic by tap Just Chat again", closes [lobehub#8402](lobehub#8402) ([55462b9](lobehub@55462b9))

#### Styles

* **misc**: Add Kimi K2 model, closes [lobehub#8401](lobehub#8401) ([4cb1a18](lobehub@4cb1a18))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: add vision support to Grok 4 (lobehub#8386)

* ✨ feat: add vision support to Grok 4

* ✨ feat: disable Grok 2 Vision 1212 model

* 🔖 chore(release): v1.97.15 [skip ci]

### [Version&nbsp;1.97.15](lobehub/lobe-chat@v1.97.14...v1.97.15)
<sup>Released on **2025-07-12**</sup>

#### 🐛 Bug Fixes

- **misc**: Add vision support to Grok 4.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Add vision support to Grok 4, closes [lobehub#8386](lobehub#8386) ([8512f5a](lobehub@8512f5a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 💄 style: update i18n (lobehub#8410)

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>

* 🔖 chore(release): v1.97.16 [skip ci]

### [Version&nbsp;1.97.16](lobehub/lobe-chat@v1.97.15...v1.97.16)
<sup>Released on **2025-07-13**</sup>

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Update i18n, closes [lobehub#8410](lobehub#8410) ([2515875](lobehub@2515875))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 💄 style: Support Hunyuan A13B thinking model (lobehub#8278)

* Update novita.ts

* feat: 添加新的混元模型并更新处理负载逻辑

* fix

* free Gemini 2.5 Pro

* 添加 ERNIE 4.5 300B A47B 模型到 siliconcloudChatModels

* novita

* 添加 GLM-4.1V-Thinking 系列模型到 zhipuChatModels,并更新现有模型的上下文窗口和最大输出设置

* 更新 zhipuChatModels,添加视觉能力并启用新模型;修改 ZhiPu 的检查模型 ID

* 移除多个 siliconcloud 废弃模型

* fix

* 移除 groq Qwen QwQ 32B 模型配置

* 更新 siliconcloud 模型

* 更新 novita/qwen 模型

* update siliconcloud model

* add Pangu Pro MoE 72B A16B

* Update novita.ts

* Update novita.ts

* update novita

---------

Co-authored-by: Arvin Xu <arvinx@foxmail.com>

* 🔖 chore(release): v1.97.17 [skip ci]

### [Version&nbsp;1.97.17](lobehub/lobe-chat@v1.97.16...v1.97.17)
<sup>Released on **2025-07-13**</sup>

#### 💄 Styles

- **misc**: Support Hunyuan A13B thinking model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Support Hunyuan A13B thinking model, closes [lobehub#8278](lobehub#8278) ([09ca978](lobehub@09ca978))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✨ feat: add network proxy for desktop (lobehub#7848)

* add network proxy

* update network proxy

* refactor network proxy

* support network proxy

* fix types

* fix lint

* fix lint

* 🔨 chore: fix settings in desktop (lobehub#8414)

* Update dependency lucide-react to ^0.525.0 (lobehub#8413)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency @anthropic-ai/sdk to ^0.56.0 (lobehub#8412)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* 🔖 chore(release): v1.98.0 [skip ci]

## [Version&nbsp;1.98.0](lobehub/lobe-chat@v1.97.17...v1.98.0)
<sup>Released on **2025-07-13**</sup>

#### ✨ Features

- **misc**: Add network proxy for desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add network proxy for desktop, closes [lobehub#7848](lobehub#7848) ([46d2509](lobehub@46d2509))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 💄 style: fix discover translation (lobehub#8423)

* 🔖 chore(release): v1.98.1 [skip ci]

### [Version&nbsp;1.98.1](lobehub/lobe-chat@v1.98.0...v1.98.1)
<sup>Released on **2025-07-14**</sup>

#### 💄 Styles

- **misc**: Fix discover translation.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Fix discover translation, closes [lobehub#8423](lobehub#8423) ([15ae35c](lobehub@15ae35c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 💄 style: update i18n (lobehub#8422)

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>

* 🔖 chore(release): v1.98.2 [skip ci]

### [Version&nbsp;1.98.2](lobehub/lobe-chat@v1.98.1...v1.98.2)
<sup>Released on **2025-07-14**</sup>

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Update i18n, closes [lobehub#8422](lobehub#8422) ([5b89ec8](lobehub@5b89ec8))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✨ feat:  support AI Image (lobehub#8312)

Co-authored-by: canisminor1990 <i@canisminor.cc>

* ✨ feat(plugin): support Streamable HTTP MCP Server Auth (lobehub#8425)

* ✨ feat: support http streamable auth and headers

* ✨ feat: support http streamable auth and headers

* improve

* improve token

* add i18n

* update i18n

* 🔖 chore(release): v1.99.0 [skip ci]

## [Version&nbsp;1.99.0](lobehub/lobe-chat@v1.98.2...v1.99.0)
<sup>Released on **2025-07-14**</sup>

#### ✨ Features

- **plugin**: Support Streamable HTTP MCP Server Auth.
- **misc**:  support AI Image.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **plugin**: Support Streamable HTTP MCP Server Auth, closes [lobehub#8425](lobehub#8425) ([853a09a](lobehub@853a09a))
* **misc**:  support AI Image, closes [lobehub#8312](lobehub#8312) ([095de57](lobehub@095de57))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛  fix: some ai image bugs (lobehub#8432)

* ⚡️ perf: improve  memory usage in desktop (lobehub#8431)

* improve usage of memory

* try to improve

* 🔖 chore(release): v1.99.1 [skip ci]

### [Version&nbsp;1.99.1](lobehub/lobe-chat@v1.99.0...v1.99.1)
<sup>Released on **2025-07-15**</sup>

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: some ai image generation feedback issues (lobehub#8440)

* 🔖 chore(release): v1.99.2 [skip ci]

### [Version&nbsp;1.99.2](lobehub/lobe-chat@v1.99.1...v1.99.2)
<sup>Released on **2025-07-15**</sup>

#### 🐛 Bug Fixes

- **misc**: Some ai image generation feedback issues.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Some ai image generation feedback issues, closes [lobehub#8440](lobehub#8440) ([bc41329](lobehub@bc41329))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✏️ docs: replace all 'Language Model' with 'Al Service Provider' in provider docs (lobehub#8444)

* 🐛 fix: chat model list should not show image model (lobehub#8448)

* 🔖 chore(release): v1.99.3 [skip ci]

### [Version&nbsp;1.99.3](lobehub/lobe-chat@v1.99.2...v1.99.3)
<sup>Released on **2025-07-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Chat model list should not show image model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Chat model list should not show image model, closes [lobehub#8448](lobehub#8448) ([2bb1506](lobehub@2bb1506))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: fix apikey issue on server log (lobehub#8457)

* 🔖 chore(release): v1.99.4 [skip ci]

### [Version&nbsp;1.99.4](lobehub/lobe-chat@v1.99.3...v1.99.4)
<sup>Released on **2025-07-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix apikey issue on server log.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix apikey issue on server log, closes [lobehub#8457](lobehub#8457) ([43be2d1](lobehub@43be2d1))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: fix page error when url is not defined in web search plugin (lobehub#8441)

Co-authored-by: Arvin Xu <arvinx@foxmail.com>

* 🔖 chore(release): v1.99.5 [skip ci]

### [Version&nbsp;1.99.5](lobehub/lobe-chat@v1.99.4...v1.99.5)
<sup>Released on **2025-07-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix page error when url is not defined in web search plugin.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix page error when url is not defined in web search plugin, closes [lobehub#8441](lobehub#8441) ([a55b65b](lobehub@a55b65b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: desktop local db can't upload image (lobehub#8459)

* 🔖 chore(release): v1.99.6 [skip ci]

### [Version&nbsp;1.99.6](lobehub/lobe-chat@v1.99.5...v1.99.6)
<sup>Released on **2025-07-16**</sup>

#### 🐛 Bug Fixes

- **misc**: Desktop local db can't upload image.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Desktop local db can't upload image, closes [lobehub#8459](lobehub#8459) ([25bfc80](lobehub@25bfc80))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✨ feat: refactor desktop oauth and use JWTs token to support remote chat (lobehub#8446)

* refactor the oauth

* refactor the oauth

* refactor the oauth

* improve oauth status

* fix desktop auth

* fix tests

* improve clean handoff

* try to fix handoff public issue

* fix route protection

* refactor anim

* refactor

* update to access token to jwt

* update to access token to jwt

* improve config

* refactor for JWKs token

* fix auto refresh issue

* ✨ feat: support webapi proxy

* wip: 完成新流式接口

* wip: 跑通流式框架

* fix webhooks

* fix network proxy

* try to fix workflow

* fix proxy in remote sync

* fix tests

* fix tests

* fix oauth bypass route

* fix webapi proxy

* 🔨 chore: improve code (lobehub#8469)

* 🔖 chore(release): v1.100.0 [skip ci]

## [Version&nbsp;1.100.0](lobehub/lobe-chat@v1.99.6...v1.100.0)
<sup>Released on **2025-07-17**</sup>

#### ✨ Features

- **misc**: Refactor desktop oauth and use JWTs token to support remote chat.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Refactor desktop oauth and use JWTs token to support remote chat, closes [lobehub#8446](lobehub#8446) ([054ca5f](lobehub@054ca5f))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: use server env config image models (lobehub#8478)

* docs: update fal provider invalid image links

* docs: add FAL model provider environment variables documentation

* 🐛 fix: update model type assignment in parseModels.ts to use dynamic lookup

* 📝 docs: add FAQ for resolving AI image generation timeout issues on Vercel

* ✨ feat: implement getModelPropertyWithFallback utility for dynamic model property retrieval

* 📝 docs: expand testing guide with best practices for mock data strategies, error handling, and module pollution prevention

* 🐛 fix: update model type in LobeOpenAICompatibleFactory tests to 'chat'

* 🔖 chore(release): v1.100.1 [skip ci]

### [Version&nbsp;1.100.1](lobehub/lobe-chat@v1.100.0...v1.100.1)
<sup>Released on **2025-07-17**</sup>

#### 🐛 Bug Fixes

- **misc**: Use server env config image models.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Use server env config image models, closes [lobehub#8478](lobehub#8478) ([768ee2b](lobehub@768ee2b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: fix webapi proxy with clerk (lobehub#8479)

* fix webapi proxy with clerk

* Update jwt.ts

* 🔖 chore(release): v1.100.2 [skip ci]

### [Version&nbsp;1.100.2](lobehub/lobe-chat@v1.100.1...v1.100.2)
<sup>Released on **2025-07-18**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix webapi proxy with clerk.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix webapi proxy with clerk, closes [lobehub#8479](lobehub#8479) ([7dd65f0](lobehub@7dd65f0))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: some ai image bugs (lobehub#8490)

* ✨ feat: add zhipu cogview4 (lobehub#8486)

* 🔖 chore(release): v1.101.0 [skip ci]

## [Version&nbsp;1.101.0](lobehub/lobe-chat@v1.100.2...v1.101.0)
<sup>Released on **2025-07-19**</sup>

#### ✨ Features

- **misc**: Add zhipu cogview4.

#### 🐛 Bug Fixes

- **misc**: Some ai image bugs.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add zhipu cogview4, closes [lobehub#8486](lobehub#8486) ([0b1557d](lobehub@0b1557d))

#### What's fixed

* **misc**: Some ai image bugs, closes [lobehub#8490](lobehub#8490) ([5d852be](lobehub@5d852be))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: Try fix authorization code exchange & pin next-auto to `beta.29` (lobehub#8496)

* 📌 pin: next-auth@beta.29

* 🐛 fix: infinite redirection

* 🔖 chore(release): v1.101.1 [skip ci]

### [Version&nbsp;1.101.1](lobehub/lobe-chat@v1.101.0...v1.101.1)
<sup>Released on **2025-07-19**</sup>

#### 🐛 Bug Fixes

- **misc**: Try fix authorization code exchange & pin next-auto to `beta.29`.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Try fix authorization code exchange & pin next-auto to `beta.29`, closes [lobehub#8496](lobehub#8496) ([27c4881](lobehub@27c4881))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 👷 build: add default `APP_URL` for docker image to avoid building error (lobehub#8507)

* 💄 style: fix lobehub provider `/chat` in desktop (lobehub#8508)

* 🔨 chore: fix model runtime test issue (lobehub#8511)

* 🔖 chore(release): v1.101.2 [skip ci]

### [Version&nbsp;1.101.2](lobehub/lobe-chat@v1.101.1...v1.101.2)
<sup>Released on **2025-07-21**</sup>

#### 💄 Styles

- **misc**: Fix lobehub provider `/chat` in desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Fix lobehub provider `/chat` in desktop, closes [lobehub#8508](lobehub#8508) ([c801f9c](lobehub@c801f9c))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✨ feat: add image generation capabilities using Google AI Imagen API (lobehub#8503)

* 🔖 chore(release): v1.102.0 [skip ci]

## [Version&nbsp;1.102.0](lobehub/lobe-chat@v1.101.2...v1.102.0)
<sup>Released on **2025-07-21**</sup>

#### ✨ Features

- **misc**: Add image generation capabilities using Google AI Imagen API.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add image generation capabilities using Google AI Imagen API, closes [lobehub#8503](lobehub#8503) ([cef8208](lobehub@cef8208))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🔨 chore(typo): fix `redirectUrl` typo (lobehub#8513)

* 💄 style: modal list header sticky style (lobehub#8514)

* 🐛 fix(groq): Enable streaming for tool calls and add Kimi K2 model (lobehub#8510)

* 🔖 chore(release): v1.102.1 [skip ci]

### [Version&nbsp;1.102.1](lobehub/lobe-chat@v1.102.0...v1.102.1)
<sup>Released on **2025-07-21**</sup>

#### 🐛 Bug Fixes

- **groq**: Enable streaming for tool calls and add Kimi K2 model.

#### 💄 Styles

- **misc**: Modal list header sticky style.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **groq**: Enable streaming for tool calls and add Kimi K2 model, closes [lobehub#8510](lobehub#8510) ([60739bc](lobehub@60739bc))

#### Styles

* **misc**: Modal list header sticky style, closes [lobehub#8514](lobehub#8514) ([75273d5](lobehub@75273d5))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 💄 style: add notification for desktop (lobehub#8523)

* add notification for desktop

* update i18n

* fix tests

* 🔖 chore(release): v1.102.2 [skip ci]

### [Version&nbsp;1.102.2](lobehub/lobe-chat@v1.102.1...v1.102.2)
<sup>Released on **2025-07-22**</sup>

#### 💄 Styles

- **misc**: Add notification for desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Add notification for desktop, closes [lobehub#8523](lobehub#8523) ([4917d17](lobehub@4917d17))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 👷 build: add default app url for docker image to avoid building error (lobehub#8526)

* 🐛 fix: remove debug logging from ModelRuntime and async caller (lobehub#8525)

* 🔖 chore(release): v1.102.3 [skip ci]

### [Version&nbsp;1.102.3](lobehub/lobe-chat@v1.102.2...v1.102.3)
<sup>Released on **2025-07-22**</sup>

#### 🐛 Bug Fixes

- **misc**: Remove debug logging from ModelRuntime and async caller.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Remove debug logging from ModelRuntime and async caller, closes [lobehub#8525](lobehub#8525) ([dd1a635](lobehub@dd1a635))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ♻️ refactor: add badge and improve document (lobehub#8528)

* update readme

* 📝 docs: Update readme

* 💄 style: Update PlanIcon

* improve tooltip placement

* improve tray

---------

Co-authored-by: canisminor1990 <i@canisminor.cc>

* 💄 style: Update tray icon (lobehub#8530)

Co-authored-by: canisminor1990 <i@canisminor.cc>

* 🔖 chore(release): v1.102.4 [skip ci]

### [Version&nbsp;1.102.4](lobehub/lobe-chat@v1.102.3...v1.102.4)
<sup>Released on **2025-07-22**</sup>

#### ♻ Code Refactoring

- **misc**: Add badge and improve document.

#### 💄 Styles

- **misc**: Update tray icon.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Add badge and improve document, closes [lobehub#8528](lobehub#8528) ([9fb4b0d](lobehub@9fb4b0d))

#### Styles

* **misc**: Update tray icon, closes [lobehub#8530](lobehub#8530) ([2696de4](lobehub@2696de4))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✨ feat: add Qwen image generation capabilities (lobehub#8534)

* 🔖 chore(release): v1.103.0 [skip ci]

## [Version&nbsp;1.103.0](lobehub/lobe-chat@v1.102.4...v1.103.0)
<sup>Released on **2025-07-22**</sup>

#### ✨ Features

- **misc**: Add Qwen image generation capabilities.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Add Qwen image generation capabilities, closes [lobehub#8534](lobehub#8534) ([7e8e5ef](lobehub@7e8e5ef))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 📝 docs: fix desktop & mcp mdx (lobehub#8541)

* 💄 style: update i18n (lobehub#8537)

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>

* 🔖 chore(release): v1.103.1 [skip ci]

### [Version&nbsp;1.103.1](lobehub/lobe-chat@v1.103.0...v1.103.1)
<sup>Released on **2025-07-23**</sup>

#### 💄 Styles

- **misc**: Update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Update i18n, closes [lobehub#8537](lobehub#8537) ([b16f19b](lobehub@b16f19b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🔨 chore: some ai image optimization (lobehub#8543)

* 🔨 chore: fix an issue where some tests were failing if Branding items were updated (lobehub#8549)

* Update test data for plugin action to use avatar icon path (rather than hard coded)

* Update tests to use BRANDING_NAME constant instead of hardcoded 'LobeChat' and update avatar icon path in chat message tests

* Update tests to replace hardcoded avatar paths with constants for inbox and user avatars

* Update plugin action tests to use DEFAULT_INBOX_AVATAR constant instead of hardcoded path

* 💄 style: Add cached token count to usage of GoogleAI and VertexAI (lobehub#8545)

* 💄 style: fix desktop titlebar style in window (lobehub#8439)

* 💄 style: Fix win electron style

📝 docs: Update readme

💄 style: Update useWatchThemeUpdate

💄 style: Update Tray icon

🔧 chore: Update windows

🔧 chore: Update filetree

🔧 chore: Update core

💄 style: Fix desktop draw style

💄 style: Update style

💄 style: Fix backgroundColor

💄 style: Update titlebar style

* 💄 style: Fix windows icon

* 🔧 chore: Clean

* update theme

* 💄 style: Update broswer

* 💄 style: HandleAppThemeChange

* clean

* fix memory leak

---------

Co-authored-by: arvinxx <arvinx@foxmail.com>

* 💄 style: fix sub topic width in md responsive (lobehub#8443)

* 🐛 fix: fix chat stream in desktop and update shortcut (lobehub#8520)

* disable nginx chunk buffering

* make setting keep alive

* update shortcut

* update shortcut

* fix lint

* 🔖 chore(release): v1.103.2 [skip ci]

### [Version&nbsp;1.103.2](lobehub/lobe-chat@v1.103.1...v1.103.2)
<sup>Released on **2025-07-24**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix chat stream in desktop and update shortcut.

#### 💄 Styles

- **misc**: Add cached token count to usage of GoogleAI and VertexAI, fix desktop titlebar style in window, fix sub topic width in md responsive.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix chat stream in desktop and update shortcut, closes [lobehub#8520](lobehub#8520) ([0192140](lobehub@0192140))

#### Styles

* **misc**: Add cached token count to usage of GoogleAI and VertexAI, closes [lobehub#8545](lobehub#8545) ([66dbb24](lobehub@66dbb24))
* **misc**: Fix desktop titlebar style in window, closes [lobehub#8439](lobehub#8439) ([fd7662c](lobehub@fd7662c))
* **misc**: Fix sub topic width in md responsive, closes [lobehub#8443](lobehub#8443) ([9bae13b](lobehub@9bae13b))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* ✨ feat: support custom hotkey on desktop (lobehub#8559)

* support custom hotkey

* update tests

* clean

* fix tests

* 🔖 chore(release): v1.104.0 [skip ci]

## [Version&nbsp;1.104.0](lobehub/lobe-chat@v1.103.2...v1.104.0)
<sup>Released on **2025-07-24**</sup>

#### ✨ Features

- **misc**: Support custom hotkey on desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support custom hotkey on desktop, closes [lobehub#8559](lobehub#8559) ([b50f121](lobehub@b50f121))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider (lobehub#8557)

* ✨ chore: improve image display quality (lobehub#8571)

* 🔖 chore(release): v1.104.1 [skip ci]

### [Version&nbsp;1.104.1](lobehub/lobe-chat@v1.104.0...v1.104.1)
<sup>Released on **2025-07-25**</sup>

#### 🐛 Bug Fixes

- **misc**: Update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider, closes [lobehub#8557](lobehub#8557) ([d1e4a54](lobehub@d1e4a54))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🐛 fix: fix update hotkey invalid when input mod in desktop (lobehub#8572)

* fix hotkey with mod

* fix invalid hotkeys

* add tests

* 🔖 chore(release): v1.104.2 [skip ci]

### [Version&nbsp;1.104.2](lobehub/lobe-chat@v1.104.1...v1.104.2)
<sup>Released on **2025-07-26**</sup>

#### 🐛 Bug Fixes

- **misc**: Fix update hotkey invalid when input mod in desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **misc**: Fix update hotkey invalid when input mod in desktop, closes [lobehub#8572](lobehub#8572) ([07f3e6a](lobehub@07f3e6a))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 🔨 chore: add react scan debugger and bump deps (lobehub#8576)

* add REACT_SCAN debug

* upgrade lobehub/ui

* clean

* head

* update

* 💄 style: Add Gemini 2.5 Flash-Lite GA model (lobehub#8539)

* 🔖 chore(release): v1.104.3 [skip ci]

### [Version&nbsp;1.104.3](lobehub/lobe-chat@v1.104.2...v1.104.3)
<sup>Released on **2025-07-26**</sup>

#### 💄 Styles

- **misc**: Add Gemini 2.5 Flash-Lite GA model.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Add Gemini 2.5 Flash-Lite GA model, closes [lobehub#8539](lobehub#8539) ([404ac21](lobehub@404ac21))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

* 💄 style: update i18n (lobehub#8579)

Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>

* 💄 style: fix setting window layout size (lobehub#8483)

* 🔖 chore(release): v1.104.4 [skip ci]

### [Version&nbsp;1.104.4](lobehub/lobe-chat@v1.104.3...v1.104.4)
<sup>Released on **2025-07-28**</sup>

#### 💄 Styles

- **misc**: Fix setting window layout size, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Styles

* **misc**: Fix setting window layout size, closes [lobehub#8483](lobehub#8483) ([4902341](lobehub@4902341))
* **misc**: Update i18n, closes [lobehub#8579](lobehub#8579) ([2eccbc7](lobehub@2eccbc7))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>

* 📝 docs(bot): Auto sync agents & plugin to readme

---------

Co-authored-by: sxjeru <sxjeru@gmail.com>
Co-authored-by: LobeHub Bot <i@lobehub.com>
Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
Co-authored-by: Arvin Xu <arvinx@foxmail.com>
Co-authored-by: bbbugg <80089841+bbbugg@users.noreply.github.com>
Co-authored-by: canisminor1990 <17870709+canisminor1990@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: René Wang <52880665+RiverTwilight@users.noreply.github.com>
Co-authored-by: YuTengjing <ytj2713151713@gmail.com>
Co-authored-by: canisminor1990 <i@canisminor.cc>
Co-authored-by: vual <25891219+vual@users.noreply.github.com>
Co-authored-by: Rylan Cai <67412196+cy948@users.noreply.github.com>
Co-authored-by: Innei <tukon479@gmail.com>
Co-authored-by: afon <wengxufeng@gmail.com>
Co-authored-by: LovelyGuYiMeng <76251800+LovelyGuYiMeng@users.noreply.github.com>
Co-authored-by: huangkairan <56213366+huangkairan@users.noreply.github.com>
Co-authored-by: Jamie Stivala <jamiestivala@gmail.com>
Co-authored-by: Shinji-Li <1349021570@qq.com>
github-actions bot pushed a commit to jaworldwideorg/OneJA-Bot that referenced this pull request Jul 28, 2025
## [Version&nbsp;1.104.0](v1.103.3...v1.104.0)
<sup>Released on **2025-07-28**</sup>

#### ✨ Features

- **misc**: Implement API Key management functionality, support custom hotkey on desktop.

#### 🐛 Bug Fixes

- **misc**: Fix update hotkey invalid when input mod in desktop, update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider.

#### 💄 Styles

- **misc**: Add Gemini 2.5 Flash-Lite GA model, fix setting window layout size, fix setting window layout when in desktop was disappear, update i18n.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Implement API Key management functionality, closes [lobehub#8535](https://github.com/jaworldwideorg/OneJA-Bot/issues/8535) ([fdaa725](fdaa725))
* **misc**: Support custom hotkey on desktop, closes [lobehub#8559](https://github.com/jaworldwideorg/OneJA-Bot/issues/8559) ([b50f121](b50f121))

#### What's fixed

* **misc**: Fix update hotkey invalid when input mod in desktop, closes [lobehub#8572](https://github.com/jaworldwideorg/OneJA-Bot/issues/8572) ([07f3e6a](07f3e6a))
* **misc**: Update convertUsage to handle XAI provider and adjust OpenAIStream to pass provider, closes [lobehub#8557](https://github.com/jaworldwideorg/OneJA-Bot/issues/8557) ([d1e4a54](d1e4a54))

#### Styles

* **misc**: Add Gemini 2.5 Flash-Lite GA model, closes [lobehub#8539](https://github.com/jaworldwideorg/OneJA-Bot/issues/8539) ([404ac21](404ac21))
* **misc**: Fix setting window layout size, closes [lobehub#8483](https://github.com/jaworldwideorg/OneJA-Bot/issues/8483) ([4902341](4902341))
* **misc**: Fix setting window layout when in desktop was disappear, closes [lobehub#8585](https://github.com/jaworldwideorg/OneJA-Bot/issues/8585) ([74ab822](74ab822))
* **misc**: Update i18n, closes [lobehub#8579](https://github.com/jaworldwideorg/OneJA-Bot/issues/8579) ([2eccbc7](2eccbc7))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
bbbugg pushed a commit to bbbugg/lobe-chat that referenced this pull request Aug 14, 2025
* support custom hotkey

* update tests

* clean

* fix tests
bbbugg pushed a commit to bbbugg/lobe-chat that referenced this pull request Aug 14, 2025
## [Version&nbsp;1.104.0](lobehub/lobe-chat@v1.103.2...v1.104.0)
<sup>Released on **2025-07-24**</sup>

#### ✨ Features

- **misc**: Support custom hotkey on desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support custom hotkey on desktop, closes [lobehub#8559](lobehub#8559) ([a6d1790](lobehub@a6d1790))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
cy948 pushed a commit to cy948/lobe-chat that referenced this pull request Aug 23, 2025
* support custom hotkey

* update tests

* clean

* fix tests
cy948 pushed a commit to cy948/lobe-chat that referenced this pull request Aug 23, 2025
## [Version&nbsp;1.104.0](lobehub/lobe-chat@v1.103.2...v1.104.0)
<sup>Released on **2025-07-24**</sup>

#### ✨ Features

- **misc**: Support custom hotkey on desktop.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's improved

* **misc**: Support custom hotkey on desktop, closes [lobehub#8559](lobehub#8559) ([b50f121](lobehub@b50f121))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Build Desktop 打上这个 label 后就可以触发 Desktop 构建 🌠 Feature Request New feature or request | 特性与建议 released size:L This PR changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Request] 桌面端支持自定义唤起主窗口快捷键 快捷键占用且无法修改
2 participants