Repository: lobehub/lobe-chat
Pull request #7421: 💄 style: Allow folding SystemRole box
Author: login: sxjeru
Labels: name: 💄 Design
description: Design and style issues
name: released
name: size:M
description: This PR changes 30-99 lines, ignoring generated files.
Created: 2025-04-15T10:01:58Z | Merged: 2025-04-18T02:44:42Z

… interaction

#### 💻 变更类型 | Change Type

<!-- For change type, change [ ] to [x]. -->

- [ ] ✨ feat
- [ ] 🐛 fix
- [ ] ♻️ refactor
- [x] 💄 style
- [ ] 👷 build
- [ ] ⚡️ perf
- [ ] 📝 docs
- [ ] 🔨 chore

#### 🔀 变更说明 | Description of Change

允许点击顶栏 折叠/展开 自定义助手的角色设定内容。

![image](https://github.com/user-attachments/assets/96e39af2-806f-4bea-8507-e4a5798f4cd9)

![image](https://github.com/user-attachments/assets/5547fa8f-babd-4a8a-977e-c7f00eae01f2)


#### 📝 补充信息 | Additional Information

- close #513


Linked issue #513: [Request] 自定义助手可以隐藏提示词界面模块
### 🥰 需求描述 | Feature Description

跟随便聊聊一样隐藏，显示更多的历史话题空间。

### 🧐 解决方案 | Proposed Solution

如上

### 📝 补充信息 | Additional Information

_No response_
Linked issue comments: user: login: lobehubbot
created_at: 2023-11-26T21:24:14Z
body: 👀 @reece00

Thank you for raising an issue. We will investigate into the matter and get back to you as soon as possible.
Please make sure you have given us as much context as possible.\
非常感谢您提交 issue。我们会尽快调查此事，并尽快回复您。 请确保您已经提供了尽可能多的背景信息。
author_association: MEMBER
user: login: arvinxx
created_at: 2023-11-27T02:14:08Z
body: 这部分会优化，后面会优先呈现消息。
author_association: MEMBER
user: login: lobehubbot
created_at: 2023-11-27T02:14:20Z
body:  
> Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿         
----    
This part will be optimized, and messages will be presented first later.  
      
author_association: MEMBER
user: login: lobehubbot
created_at: 2025-04-18T02:44:51Z
body: ✅ @reece00

This issue is closed, If you have any questions, you can comment and reply.\
此问题已经关闭。如果您有任何问题，可以留言并回复。
author_association: MEMBER
user: login: lobehubbot
created_at: 2025-04-18T05:44:07Z
body: :tada: This issue has been resolved in version 1.81.2 :tada:

The release is available on:
- [npm package (@latest dist-tag)](https://www.npmjs.com/package/@lobehub/chat/v/1.81.2)
- [GitHub release](https://github.com/lobehub/lobe-chat/releases/tag/v1.81.2)

Your **[semantic-release](https://github.com/semantic-release/semantic-release)** bot :package::rocket:
author_association: MEMBER
user: login: github-actions[bot]
created_at: 2025-10-02T07:44:53Z
body: This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.
author_association: CONTRIBUTOR

Diff:
diff --git a/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx b/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx
index 22b0a0bc196..9558d95052f 100644
--- a/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx
+++ b/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx
@@ -4,7 +4,7 @@ import { ActionIcon } from '@lobehub/ui';
 import { EditableMessage } from '@lobehub/ui/chat';
 import { Skeleton } from 'antd';
 import { Edit } from 'lucide-react';
-import { memo, useState } from 'react';
+import { MouseEvent, memo, useState } from 'react';
 import { useTranslation } from 'react-i18next';
 import { Flexbox } from 'react-layout-kit';
 import useMergeState from 'use-merge-value';
@@ -24,11 +24,12 @@ import { useStyles } from './style';
 
 const SystemRole = memo(() => {
   const [editing, setEditing] = useState(false);
-  const { styles } = useStyles();
+  const { styles, cx } = useStyles();
   const openChatSettings = useOpenChatSettings(ChatSettingsTabs.Prompt);
-  const [init, meta] = useSessionStore((s) => [
+  const [init, meta, sessionId] = useSessionStore((s) => [
     sessionSelectors.isSomeSessionActive(s),
     sessionMetaSelectors.currentAgentMeta(s),
+    s.activeId,
   ]);
 
   const [isAgentConfigLoading, systemRole, updateAgentConfig] = useAgentStore((s) => [
@@ -52,8 +53,10 @@ const SystemRole = memo(() => {
 
   const isLoading = !init || isAgentConfigLoading;
 
-  const handleOpenWithEdit = () => {
+  const handleOpenWithEdit = (e: MouseEvent) => {
     if (isLoading) return;
+
+    e.stopPropagation();
     setEditing(true);
     setOpen(true);
   };
@@ -64,20 +67,36 @@ const SystemRole = memo(() => {
     setOpen(true);
   };
 
+  const [expanded, toggleAgentSystemRoleExpand] = useGlobalStore((s) => [
+    systemStatusSelectors.getAgentSystemRoleExpanded(sessionId)(s),
+    s.toggleAgentSystemRoleExpand,
+  ]);
+
+  const toggleExpanded = () => {
+    toggleAgentSystemRoleExpand(sessionId);
+  };
+
   return (
     <Flexbox height={'fit-content'}>
       <SidebarHeader
         actions={
           <ActionIcon icon={Edit} onClick={handleOpenWithEdit} size={'small'} title={t('edit')} />
         }
+        onClick={toggleExpanded}
+        style={{ cursor: 'pointer' }}
         title={t('settingAgent.prompt.title', { ns: 'setting' })}
       />
       <Flexbox
-        className={styles.promptBox}
-        height={200}
+        className={cx(styles.promptBox, styles.animatedContainer)}
+        height={expanded ? 200 : 0}
         onClick={handleOpen}
         onDoubleClick={(e) => {
-          if (e.altKey) handleOpenWithEdit();
+          if (e.altKey) handleOpenWithEdit(e);
+        }}
+        style={{
+          opacity: expanded ? 1 : 0,
+          overflow: 'hidden',
+          transition: 'height 0.3s ease',
         }}
       >
         {isLoading ? (
diff --git a/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/style.ts b/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/style.ts
index 86aec12f93c..f7374afa581 100644
--- a/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/style.ts
+++ b/src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/style.ts
@@ -1,6 +1,11 @@
 import { createStyles } from 'antd-style';
 
 export const useStyles = createStyles(({ css, token }) => ({
+  animatedContainer: css`
+    transition:
+      height 0.3s ease,
+      opacity 0.3s ease;
+  `,
   prompt: css`
     overflow: hidden auto;
 
diff --git a/src/components/SidebarHeader/index.tsx b/src/components/SidebarHeader/index.tsx
index 09cf1d08eb5..29179aa0d9c 100644
--- a/src/components/SidebarHeader/index.tsx
+++ b/src/components/SidebarHeader/index.tsx
@@ -10,11 +10,12 @@ const useStyles = createStyles(({ css }) => ({
 
 interface SidebarHeaderProps {
   actions?: ReactNode;
+  onClick?: () => void;
   style?: CSSProperties;
   title: ReactNode;
 }
 
-const SidebarHeader = memo<SidebarHeaderProps>(({ title, style, actions }) => {
+const SidebarHeader = memo<SidebarHeaderProps>(({ title, style, actions, onClick }) => {
   const { styles } = useStyles();
 
   return (
@@ -23,6 +24,7 @@ const SidebarHeader = memo<SidebarHeaderProps>(({ title, style, actions }) => {
       className={styles.header}
       distribution={'space-between'}
       horizontal
+      onClick={onClick}
       padding={14}
       paddingInline={16}
       style={style}
diff --git a/src/store/global/actions/workspacePane.ts b/src/store/global/actions/workspacePane.ts
index 5e329099a37..5d2eba80ace 100644
--- a/src/store/global/actions/workspacePane.ts
+++ b/src/store/global/actions/workspacePane.ts
@@ -10,6 +10,7 @@ const n = setNamespace('w');
 
 export interface GlobalWorkspacePaneAction {
   switchBackToChat: (sessionId?: string) => void;
+  toggleAgentSystemRoleExpand: (agentId: string, expanded?: boolean) => void;
   toggleChatSideBar: (visible?: boolean) => void;
   toggleExpandSessionGroup: (id: string, expand: boolean) => void;
   toggleMobilePortal: (visible?: boolean) => void;
@@ -28,6 +29,21 @@ export const globalWorkspaceSlice: StateCreator<
     get().router?.push(SESSION_CHAT_URL(sessionId || INBOX_SESSION_ID, get().isMobile));
   },
 
+  toggleAgentSystemRoleExpand: (agentId, expanded) => {
+    const { status } = get();
+    const systemRoleExpandedMap = status.systemRoleExpandedMap || {};
+    const nextExpanded = typeof expanded === 'boolean' ? expanded : !systemRoleExpandedMap[agentId];
+
+    get().updateSystemStatus(
+      {
+        systemRoleExpandedMap: {
+          ...systemRoleExpandedMap,
+          [agentId]: nextExpanded,
+        },
+      },
+      n('toggleAgentSystemRoleExpand', { agentId, expanded: nextExpanded }),
+    );
+  },
   toggleChatSideBar: (newValue) => {
     const showChatSideBar =
       typeof newValue === 'boolean' ? newValue : !get().status.showChatSideBar;
diff --git a/src/store/global/initialState.ts b/src/store/global/initialState.ts
index bb931e524c2..975aa7401ee 100644
--- a/src/store/global/initialState.ts
+++ b/src/store/global/initialState.ts
@@ -66,6 +66,7 @@ export interface SystemStatus {
   showHotkeyHelper?: boolean;
   showSessionPanel?: boolean;
   showSystemRole?: boolean;
+  systemRoleExpandedMap: Record<string, boolean>;
   /**
    * theme mode
    */
@@ -111,6 +112,7 @@ export const INITIAL_STATUS = {
   showHotkeyHelper: false,
   showSessionPanel: true,
   showSystemRole: false,
+  systemRoleExpandedMap: {},
   themeMode: 'auto',
   threadInputHeight: 200,
   zenMode: false,
diff --git a/src/store/global/selectors/systemStatus.ts b/src/store/global/selectors/systemStatus.ts
index 9c8c06e44ff..8087108a841 100644
--- a/src/store/global/selectors/systemStatus.ts
+++ b/src/store/global/selectors/systemStatus.ts
@@ -50,8 +50,16 @@ const isPgliteInited = (s: GlobalState): boolean =>
 // 这个变量控制 clientdb 是否完成初始化，正常来说，只有 pgliteDB 模式下，才会存在变化，其他时候都是 true
 const isDBInited = (s: GlobalState): boolean => (isUsePgliteDB ? isPgliteInited(s) : true);
 
+const getAgentSystemRoleExpanded =
+  (agentId: string) =>
+  (s: GlobalState): boolean => {
+    const map = s.status.systemRoleExpandedMap || {};
+    return map[agentId] !== false; // 角色设定默认为展开状态
+  };
+
 export const systemStatusSelectors = {
   filePanelWidth,
+  getAgentSystemRoleExpanded,
   hidePWAInstaller,
   inZenMode,
   inputHeight,


Reviews:
user: login: arvinxx
body: 我建议这个做成本地持久化的状态，你可以看下 global store 的 systemStatus 这个状态
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-16T02:39:38Z
user: login: arvinxx
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-16T15:20:19Z

Review comments:
diff_hunk: @@ -64,20 +67,36 @@ const SystemRole = memo(() => {
     setOpen(true);
   };
 
+  const [expanded, toggleAgentSystemRoleExpand] = useGlobalStore((s) => [
+    systemStatusSelectors.getAgentSystemRoleExpanded(sessionId)(s),
+    s.toggleAgentSystemRoleExpand,
+  ]);
+
+  const toggleExpanded = () => {
+    toggleAgentSystemRoleExpand(sessionId);
+  };
+
   return (
     <Flexbox height={'fit-content'}>
       <SidebarHeader
         actions={
           <ActionIcon icon={Edit} onClick={handleOpenWithEdit} size={'small'} title={t('edit')} />
         }
+        onClick={toggleExpanded}
+        style={{ cursor: 'pointer' }}
         title={t('settingAgent.prompt.title', { ns: 'setting' })}
       />
       <Flexbox
-        className={styles.promptBox}
-        height={200}
+        className={`${styles.promptBox} ${styles.animatedContainer}`}
path: src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx
user: login: arvinxx
body: 这个可以用 `cx(styles.promptBox,styles.animatedContainer)`, cx 从 useStyles 里引入。

`const { styles, cx } = useStyles()`
created_at: 2025-04-16T15:19:17Z
author_association: MEMBER
diff_hunk: @@ -52,8 +53,10 @@ const SystemRole = memo(() => {
 
   const isLoading = !init || isAgentConfigLoading;
 
-  const handleOpenWithEdit = () => {
+  const handleOpenWithEdit = (e: React.MouseEvent) => {
path: src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx
user: login: arvinxx
body: 不要引入 React，直接引入 MouseEvent 类型
created_at: 2025-04-16T15:19:33Z
author_association: MEMBER

PR comments:
user: login: vercel[bot]
created_at: 2025-04-15T10:02:02Z
body: @sxjeru is attempting to deploy a commit to the **LobeHub** Team on [Vercel](https://vercel.com).

A member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=LobeHub&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%22d04aa9ac830e217ec61a68a9b14c1bb32e8fc23a%22%7D%2C%22id%22%3A%22QmZZTSMG94pu58i8mzU7qBed75Tx9GPifFNYTsmiETLSx6%22%2C%22org%22%3A%22lobehub%22%2C%22prId%22%3A7421%2C%22repo%22%3A%22lobe-chat%22%7D).


author_association: NONE
user: login: lobehubbot
created_at: 2025-04-15T10:02:09Z
body: 👍 @sxjeru

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.\
非常感谢您提出拉取请求并为我们的社区做出贡献，请确保您已经遵循了我们的贡献指南，我们会尽快审查它。
如果您遇到任何问题，请随时与我们联系。
author_association: MEMBER
user: login: gru-agent[bot]
created_at: 2025-04-15T10:02:16Z
body: ## TestGru Assignment

### Summary

| Link | CommitId | Status | Reason |
| ---- | -------- | ------ | ------ |
| [Detail](https://gru.ai/:test/lobehub@github/lobe-chat/80bfc4af-724d-441f-aa80-46f71ede00fb) | d04aa9ac830e217ec61a68a9b14c1bb32e8fc23a | 🚫 Skipped | No files need to be tested {"src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx":"target file(src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/SystemRoleContent.tsx) not in work scope \n include: src/utils,src/server,src/database,src/services,src/store,packages/**/src/** \n exclude: node_modules,**/*.test.ts,**/*.test.tsx,**/*.spec.ts,**/*.spec.tsx,**/*.d.ts,**/*.test.js,**/*.spec.js,src/database/server","src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/style.ts":"target file(src/app/[variants]/(main)/chat/(workspace)/@topic/features/SystemRole/style.ts) not in work scope \n include: src/utils,src/server,src/database,src/services,src/store,packages/**/src/** \n exclude: node_modules,**/*.test.ts,**/*.test.tsx,**/*.spec.ts,**/*.spec.tsx,**/*.d.ts,**/*.test.js,**/*.spec.js,src/database/server","src/components/SidebarHeader/index.tsx":"target file(src/components/SidebarHeader/index.tsx) not in work scope \n… |

> [!TIP]
> You can `@gru-agent` and leave your feedback. TestGru will make adjustments based on your input

author_association: CONTRIBUTOR
user: login: codecov[bot]
created_at: 2025-04-15T10:05:31Z
body: ## [Codecov](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) Report
Attention: Patch coverage is `22.72727%` with `17 lines` in your changes missing coverage. Please review.
> Project coverage is 89.62%. Comparing base [(`9c8597f`)](https://app.codecov.io/gh/lobehub/lobe-chat/commit/9c8597ffc0d33947bcbcdca9ce5e1d653ffcb6a3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) to head [(`9b98cc3`)](https://app.codecov.io/gh/lobehub/lobe-chat/commit/9b98cc38ec0b118360e2d117ee038aa531987842?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub).
> Report is 4 commits behind head on main.

| [Files with missing lines](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) | Patch % | Lines |
|---|---|---|
| [src/store/global/actions/workspacePane.ts](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?src=pr&el=tree&filepath=src%2Fstore%2Fglobal%2Factions%2FworkspacePane.ts&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub#diff-c3JjL3N0b3JlL2dsb2JhbC9hY3Rpb25zL3dvcmtzcGFjZVBhbmUudHM=) | 7.14% | [13 Missing :warning: ](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) |
| [src/store/global/selectors/systemStatus.ts](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?src=pr&el=tree&filepath=src%2Fstore%2Fglobal%2Fselectors%2FsystemStatus.ts&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub#diff-c3JjL3N0b3JlL2dsb2JhbC9zZWxlY3RvcnMvc3lzdGVtU3RhdHVzLnRz) | 42.85% | [4 Missing :warning: ](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) |

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main    #7421      +/-   ##
==========================================
- Coverage   89.65%   89.62%   -0.03%     
==========================================
  Files         763      763              
  Lines       55587    55609      +22     
  Branches     3485     5294    +1809     
==========================================
+ Hits        49834    49840       +6     
- Misses       5753     5769      +16     
```

| [Flag](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) | Coverage Δ | |
|---|---|---|
| [app](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) | `89.62% <22.72%> (-0.03%)` | :arrow_down: |
| [server](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub) | `95.74% <ø> (ø)` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub#carryforward-flags-in-the-pull-request-comment) to find out more.

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/lobehub/lobe-chat/pull/7421?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=lobehub).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
author_association: NONE
user: login: sxjeru
created_at: 2025-04-16T05:55:20Z
body: 测试了一下，应该没有问题，切换助手/刷新网页 折叠状态依旧保持。
author_association: CONTRIBUTOR
user: login: lobehubbot
created_at: 2025-04-16T05:55:32Z
body:  
> Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿         
----    
After testing, there should be no problem. Switch the assistant/refresh the web page and the collapsed state remains.  
      
author_association: MEMBER
user: login: vercel[bot]
created_at: 2025-04-16T15:20:38Z
body: [vc]: #grkJlYNNNcL8ivshJMMYKce+zDh1eJeoPFNiSbIZrLM=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsb2JlLWNoYXQtcHJldmlldyIsInJvb3REaXJlY3RvcnkiOm51bGwsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9sb2JlLWNoYXQtY29tbXVuaXR5L2xvYmUtY2hhdC1wcmV2aWV3L0JBa0NOYW52dkxKN1VtWjdCa3RKNUJIVW9EZ3YiLCJwcmV2aWV3VXJsIjoiIiwibmV4dENvbW1pdFN0YXR1cyI6IkNBTkNFTEVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9fV19
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **lobe-chat-preview** | 🛑 Canceled ([Inspect](https://vercel.com/lobe-chat-community/lobe-chat-preview/BAkCNanvvLJ7UmZ7BktJ5BHUoDgv)) |  |  | Apr 18, 2025 2:42am |


author_association: NONE
user: login: lobehubbot
created_at: 2025-04-18T02:44:53Z
body: ❤️ Great PR @sxjeru ❤️

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](https://discord.com/invite/AYFPHvv2jT) 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](https://discord.com/invite/AYFPHvv2jT)，然后私信 @arvinxx 或 @canisminor1990。他们会邀请您加入我们的私密开发者频道。我们将会讨论关于 Lobe Chat 的开发，分享和讨论全球范围内的 AI 消息。

<!-- Created by actions-cool/pr-welcome. Do not remove. -->
author_association: MEMBER
user: login: lobehubbot
created_at: 2025-04-18T05:44:04Z
body: :tada: This PR is included in version 1.81.2 :tada:

The release is available on:
- [npm package (@latest dist-tag)](https://www.npmjs.com/package/@lobehub/chat/v/1.81.2)
- [GitHub release](https://github.com/lobehub/lobe-chat/releases/tag/v1.81.2)

Your **[semantic-release](https://github.com/semantic-release/semantic-release)** bot :package::rocket:
author_association: MEMBER