@lobehub/chat 1.110.5 → 1.110.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.110.6](https://github.com/lobehub/lobe-chat/compare/v1.110.5...v1.110.6)
6
+
7
+ <sup>Released on **2025-08-07**</sup>
8
+
9
+ <br/>
10
+
11
+ <details>
12
+ <summary><kbd>Improvements and Fixes</kbd></summary>
13
+
14
+ </details>
15
+
16
+ <div align="right">
17
+
18
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
19
+
20
+ </div>
21
+
5
22
  ### [Version 1.110.5](https://github.com/lobehub/lobe-chat/compare/v1.110.4...v1.110.5)
6
23
 
7
24
  <sup>Released on **2025-08-07**</sup>
@@ -51,7 +51,7 @@
51
51
  "@typescript/native-preview": "7.0.0-dev.20250711.1",
52
52
  "consola": "^3.1.0",
53
53
  "cookie": "^1.0.2",
54
- "electron": "~37.1.0",
54
+ "electron": "^37.2.0",
55
55
  "electron-builder": "^26.0.12",
56
56
  "electron-is": "^3.0.0",
57
57
  "electron-log": "^5.3.3",
package/changelog/v1.json CHANGED
@@ -1,4 +1,9 @@
1
1
  [
2
+ {
3
+ "children": {},
4
+ "date": "2025-08-07",
5
+ "version": "1.110.6"
6
+ },
2
7
  {
3
8
  "children": {
4
9
  "fixes": [
@@ -183,10 +183,21 @@
183
183
  "title": "معلومات المساعد"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "سريع",
188
+ "desc": "اختر سرعة استجابة حركة التطبيق",
189
+ "disabled": "إيقاف",
190
+ "elegant": "أنيق",
191
+ "title": "حركة الاستجابة"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "تخصيص تدرجات الرمادي ذات الاتجاهات اللونية المختلفة",
188
195
  "title": "لون محايد"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "تعطيل جميع تأثيرات الحركة في التطبيق",
199
+ "title": "وضع بدون حركة"
200
+ },
190
201
  "preview": {
191
202
  "title": "لوحة الألوان"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Информация за агента"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Бързо",
188
+ "desc": "Изберете скоростта на анимацията за отговор на действията в приложението",
189
+ "disabled": "Изключено",
190
+ "elegant": "Елегантно",
191
+ "title": "Анимация на отговор"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Персонализиране на сивата скала с различни цветови нюанси",
188
195
  "title": "Неутрални цветове"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Деактивирайте всички анимационни ефекти в приложението",
199
+ "title": "Режим без анимация"
200
+ },
190
201
  "preview": {
191
202
  "title": "Цветова палитра"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Assistenteninformationen"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Agil",
188
+ "desc": "Wählen Sie die Animationsgeschwindigkeit für die Reaktion der Anwendung",
189
+ "disabled": "Aus",
190
+ "elegant": "Elegant",
191
+ "title": "Reaktionsanimation"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Anpassung der Graustufen mit unterschiedlichen Farbneigungen",
188
195
  "title": "Neutrale Farben"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Deaktivieren Sie alle Animationseffekte in der Anwendung",
199
+ "title": "Kein Animationsmodus"
200
+ },
190
201
  "preview": {
191
202
  "title": "Farbauswahl"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Assistant Information"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Agile",
188
+ "desc": "Select the animation speed for application response actions",
189
+ "disabled": "Off",
190
+ "elegant": "Elegant",
191
+ "title": "Response Animation"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Custom grayscale with different color tendencies",
188
195
  "title": "Neutral Color"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Disable all animation effects in the application",
199
+ "title": "No Animation Mode"
200
+ },
190
201
  "preview": {
191
202
  "title": "Color Palette"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Información del asistente"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Ágil",
188
+ "desc": "Selecciona la velocidad de la animación para las respuestas de la aplicación",
189
+ "disabled": "Desactivado",
190
+ "elegant": "Elegante",
191
+ "title": "Animación de respuesta"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Personalización de escalas de grises con diferentes inclinaciones de color",
188
195
  "title": "Color Neutro"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Desactiva todos los efectos de animación en la aplicación",
199
+ "title": "Modo sin animación"
200
+ },
190
201
  "preview": {
191
202
  "title": "Paleta de Colores"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "اطلاعات دستیار"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "چابک",
188
+ "desc": "سرعت انیمیشن پاسخ عملیات برنامه را انتخاب کنید",
189
+ "disabled": "خاموش",
190
+ "elegant": "ظریف",
191
+ "title": "انیمیشن پاسخ"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "سفارشی‌سازی مقیاس خاکستری با تم‌های رنگی مختلف",
188
195
  "title": "رنگ‌های خنثی"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "تمام جلوه‌های انیمیشنی در برنامه را غیرفعال کنید",
199
+ "title": "حالت بدون انیمیشن"
200
+ },
190
201
  "preview": {
191
202
  "title": "پالت رنگ"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Informations sur l'agent"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Agile",
188
+ "desc": "Choisissez la vitesse d'animation des réponses des actions de l'application",
189
+ "disabled": "Désactivé",
190
+ "elegant": "Élégant",
191
+ "title": "Animation de réponse"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Personnalisation des nuances de gris selon les tendances de couleur",
188
195
  "title": "Couleur neutre"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Désactive toutes les animations dans l'application",
199
+ "title": "Mode sans animation"
200
+ },
190
201
  "preview": {
191
202
  "title": "Palette de couleurs"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Informazioni sull'assistente"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Agile",
188
+ "desc": "Seleziona la velocità dell'animazione per la risposta delle azioni dell'applicazione",
189
+ "disabled": "Disattivato",
190
+ "elegant": "Elegante",
191
+ "title": "Animazione di risposta"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Personalizzazione dei grigi con diverse inclinazioni di colore",
188
195
  "title": "Colore Neutro"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Disabilita tutte le animazioni nell'applicazione",
199
+ "title": "Modalità senza animazioni"
200
+ },
190
201
  "preview": {
191
202
  "title": "Tavolozza"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "アシスタント情報"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "敏捷",
188
+ "desc": "アプリケーションの操作応答のアニメーション速度を選択します",
189
+ "disabled": "オフ",
190
+ "elegant": "エレガント",
191
+ "title": "応答アニメーション"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "異なる色彩傾向のグレースケールカスタマイズ",
188
195
  "title": "ニュートラルカラー"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "アプリ内のすべてのアニメーション効果を無効にします",
199
+ "title": "アニメーションなしモード"
200
+ },
190
201
  "preview": {
191
202
  "title": "カラーパレット"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "도우미 정보"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "민첩함",
188
+ "desc": "애플리케이션의 동작 반응 애니메이션 속도를 선택하세요",
189
+ "disabled": "끄기",
190
+ "elegant": "우아함",
191
+ "title": "반응 애니메이션"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "다양한 색조의 그레이스케일 사용자 정의",
188
195
  "title": "중립 색상"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "애플리케이션 내 모든 애니메이션 효과를 비활성화합니다",
199
+ "title": "애니메이션 없음 모드"
200
+ },
190
201
  "preview": {
191
202
  "title": "팔레트"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Assistentinformatie"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Behendig",
188
+ "desc": "Kies de animatiesnelheid voor de reactietijd van de applicatie",
189
+ "disabled": "Uitgeschakeld",
190
+ "elegant": "Elegant",
191
+ "title": "Reactie-animatie"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Aangepaste grijstinten met verschillende kleurvoorkeuren",
188
195
  "title": "Neutrale kleur"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Schakel alle animatie-effecten in de applicatie uit",
199
+ "title": "Animatie uit modus"
200
+ },
190
201
  "preview": {
191
202
  "title": "Kleurpalet"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Informacje o asystencie"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Zwinny",
188
+ "desc": "Wybierz prędkość animacji reakcji aplikacji",
189
+ "disabled": "Wyłączone",
190
+ "elegant": "Elegancki",
191
+ "title": "Animacja reakcji"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Dostosowanie odcieni szarości w różnych kolorach",
188
195
  "title": "Kolor neutralny"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Wyłącz wszystkie efekty animacji w aplikacji",
199
+ "title": "Tryb bez animacji"
200
+ },
190
201
  "preview": {
191
202
  "title": "Paleta kolorów"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Informações do assistente"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Ágil",
188
+ "desc": "Escolha a velocidade da animação para as respostas das ações do aplicativo",
189
+ "disabled": "Desativado",
190
+ "elegant": "Elegante",
191
+ "title": "Animação de Resposta"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Personalização de escala de cinza com diferentes inclinações de cor",
188
195
  "title": "Cor Neutra"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Desativa todos os efeitos de animação no aplicativo",
199
+ "title": "Modo Sem Animação"
200
+ },
190
201
  "preview": {
191
202
  "title": "Paleta de Cores"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Информация о помощнике"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Быстрый",
188
+ "desc": "Выберите скорость анимации отклика приложения",
189
+ "disabled": "Выключено",
190
+ "elegant": "Элегантный",
191
+ "title": "Анимация отклика"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Настройка градаций серого с различными цветовыми наклонами",
188
195
  "title": "Нейтральный цвет"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Отключить все анимационные эффекты в приложении",
199
+ "title": "Режим без анимации"
200
+ },
190
201
  "preview": {
191
202
  "title": "Палитра"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Asistan Bilgileri"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Çevik",
188
+ "desc": "Uygulamanın işlem yanıt animasyon hızını seçin",
189
+ "disabled": "Kapalı",
190
+ "elegant": "Zarif",
191
+ "title": "Yanıt Animasyonu"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Farklı renk eğilimlerine sahip gri tonları özelleştirme",
188
195
  "title": "Nötr Renk"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Uygulamadaki tüm animasyon efektlerini devre dışı bırak",
199
+ "title": "Animasyonsuz Mod"
200
+ },
190
201
  "preview": {
191
202
  "title": "Renk Paleti"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "Thông tin trợ lý"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "Nhanh nhẹn",
188
+ "desc": "Chọn tốc độ hoạt ảnh phản hồi của ứng dụng",
189
+ "disabled": "Tắt",
190
+ "elegant": "Thanh lịch",
191
+ "title": "Hoạt ảnh phản hồi"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "Tùy chỉnh thang độ xám với các xu hướng màu sắc khác nhau",
188
195
  "title": "Màu trung tính"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "Vô hiệu hóa tất cả hiệu ứng hoạt ảnh trong ứng dụng",
199
+ "title": "Chế độ không hoạt ảnh"
200
+ },
190
201
  "preview": {
191
202
  "title": "Bảng màu"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "助手信息"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "敏捷",
188
+ "desc": "选择应用程序的操作响应的动画速度",
189
+ "disabled": "关闭",
190
+ "elegant": "优雅",
191
+ "title": "响应动画"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "不同色彩倾向的灰阶自定义",
188
195
  "title": "中性色"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "禁用应用程序中的所有动画效果",
199
+ "title": "无动画模式"
200
+ },
190
201
  "preview": {
191
202
  "title": "调色盘"
192
203
  },
@@ -183,10 +183,21 @@
183
183
  "title": "助手資訊"
184
184
  },
185
185
  "settingAppearance": {
186
+ "animationMode": {
187
+ "agile": "敏捷",
188
+ "desc": "選擇應用程式操作回應的動畫速度",
189
+ "disabled": "關閉",
190
+ "elegant": "優雅",
191
+ "title": "回應動畫"
192
+ },
186
193
  "neutralColor": {
187
194
  "desc": "不同色彩傾向的灰階自訂",
188
195
  "title": "中性色"
189
196
  },
197
+ "noAnimation": {
198
+ "desc": "停用應用程式中的所有動畫效果",
199
+ "title": "無動畫模式"
200
+ },
190
201
  "preview": {
191
202
  "title": "調色盤"
192
203
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.110.5",
3
+ "version": "1.110.6",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -122,26 +122,26 @@
122
122
  "@ant-design/icons": "^5.6.1",
123
123
  "@ant-design/pro-components": "^2.8.10",
124
124
  "@anthropic-ai/sdk": "^0.57.0",
125
- "@auth/core": "^0.38.0",
126
- "@aws-sdk/client-bedrock-runtime": "^3.848.0",
127
- "@aws-sdk/client-s3": "^3.850.0",
128
- "@aws-sdk/s3-request-presigner": "^3.850.0",
125
+ "@auth/core": "^0.40.0",
126
+ "@aws-sdk/client-bedrock-runtime": "^3.862.0",
127
+ "@aws-sdk/client-s3": "^3.862.0",
128
+ "@aws-sdk/s3-request-presigner": "^3.862.0",
129
129
  "@azure-rest/ai-inference": "1.0.0-beta.5",
130
130
  "@azure/core-auth": "^1.10.0",
131
131
  "@cfworker/json-schema": "^4.1.1",
132
- "@clerk/localizations": "^3.20.6",
133
- "@clerk/nextjs": "^6.28.1",
134
- "@clerk/themes": "^2.4.4",
132
+ "@clerk/localizations": "^3.20.7",
133
+ "@clerk/nextjs": "^6.29.0",
134
+ "@clerk/themes": "^2.4.5",
135
135
  "@codesandbox/sandpack-react": "^2.20.0",
136
136
  "@cyntler/react-doc-viewer": "^1.17.0",
137
137
  "@electric-sql/pglite": "0.2.17",
138
138
  "@fal-ai/client": "^1.6.1",
139
139
  "@formkit/auto-animate": "^0.8.2",
140
- "@google/genai": "^1.10.0",
140
+ "@google/genai": "^1.13.0",
141
141
  "@huggingface/inference": "^2.8.1",
142
142
  "@icons-pack/react-simple-icons": "9.6.0",
143
143
  "@khmyznikov/pwa-install": "0.3.9",
144
- "@langchain/community": "^0.3.49",
144
+ "@langchain/community": "^0.3.50",
145
145
  "@lobechat/electron-client-ipc": "workspace:*",
146
146
  "@lobechat/electron-server-ipc": "workspace:*",
147
147
  "@lobechat/file-loaders": "workspace:*",
@@ -150,29 +150,29 @@
150
150
  "@lobehub/charts": "^2.0.0",
151
151
  "@lobehub/chat-plugin-sdk": "^1.32.4",
152
152
  "@lobehub/chat-plugins-gateway": "^1.9.0",
153
- "@lobehub/icons": "^2.17.0",
153
+ "@lobehub/icons": "^2.25.0",
154
154
  "@lobehub/market-sdk": "^0.22.7",
155
155
  "@lobehub/tts": "^2.0.1",
156
- "@lobehub/ui": "^2.7.5",
157
- "@modelcontextprotocol/sdk": "^1.16.0",
156
+ "@lobehub/ui": "^2.8.3",
157
+ "@modelcontextprotocol/sdk": "^1.17.1",
158
158
  "@neondatabase/serverless": "^1.0.1",
159
- "@next/third-parties": "^15.4.3",
159
+ "@next/third-parties": "^15.4.6",
160
160
  "@react-spring/web": "^9.7.5",
161
- "@sentry/nextjs": "^7.120.3",
161
+ "@sentry/nextjs": "^7.120.4",
162
162
  "@serwist/next": "^9.1.1",
163
- "@t3-oss/env-nextjs": "^0.12.0",
164
- "@tanstack/react-query": "^5.83.0",
165
- "@trpc/client": "^11.4.3",
166
- "@trpc/next": "^11.4.3",
167
- "@trpc/react-query": "^11.4.3",
168
- "@trpc/server": "^11.4.3",
163
+ "@t3-oss/env-nextjs": "^0.13.8",
164
+ "@tanstack/react-query": "^5.84.1",
165
+ "@trpc/client": "^11.4.4",
166
+ "@trpc/next": "^11.4.4",
167
+ "@trpc/react-query": "^11.4.4",
168
+ "@trpc/server": "^11.4.4",
169
169
  "@vercel/analytics": "^1.5.0",
170
170
  "@vercel/edge-config": "^1.4.0",
171
- "@vercel/functions": "^2.2.4",
171
+ "@vercel/functions": "^2.2.8",
172
172
  "@vercel/speed-insights": "^1.2.0",
173
173
  "@xterm/xterm": "^5.5.0",
174
174
  "ahooks": "^3.9.0",
175
- "antd": "^5.26.6",
175
+ "antd": "^5.26.7",
176
176
  "antd-style": "^3.7.1",
177
177
  "brotli-wasm": "^3.0.1",
178
178
  "chroma-js": "^3.1.2",
@@ -182,16 +182,16 @@
182
182
  "debug": "^4.4.1",
183
183
  "dexie": "^3.2.7",
184
184
  "diff": "^7.0.0",
185
- "drizzle-orm": "^0.44.0",
185
+ "drizzle-orm": "^0.44.4",
186
186
  "drizzle-zod": "^0.5.1",
187
187
  "epub2": "^3.0.2",
188
188
  "fast-deep-equal": "^3.1.3",
189
189
  "file-type": "^20.5.0",
190
- "framer-motion": "^12.23.6",
190
+ "framer-motion": "^12.23.12",
191
191
  "gpt-tokenizer": "^2.9.0",
192
192
  "gray-matter": "^4.0.3",
193
193
  "html-to-text": "^9.0.5",
194
- "i18next": "^24.2.3",
194
+ "i18next": "^25.3.2",
195
195
  "i18next-browser-languagedetector": "^8.2.0",
196
196
  "i18next-resources-to-backend": "^1.2.1",
197
197
  "idb-keyval": "^6.2.2",
@@ -205,7 +205,7 @@
205
205
  "langfuse-core": "^3.38.4",
206
206
  "lodash-es": "^4.17.21",
207
207
  "lucide-react": "^0.536.0",
208
- "mammoth": "^1.9.1",
208
+ "mammoth": "^1.10.0",
209
209
  "markdown-to-txt": "^2.0.1",
210
210
  "mdast-util-to-markdown": "^2.1.2",
211
211
  "modern-screenshot": "^4.6.5",
@@ -227,17 +227,17 @@
227
227
  "pdf-parse": "^1.1.1",
228
228
  "pdfjs-dist": "4.8.69",
229
229
  "pg": "^8.16.3",
230
- "pino": "^9.7.0",
230
+ "pino": "^9.8.0",
231
231
  "plaiceholder": "^3.0.0",
232
232
  "polished": "^4.3.1",
233
- "posthog-js": "^1.257.2",
233
+ "posthog-js": "^1.258.6",
234
234
  "pure-rand": "^7.0.1",
235
- "pwa-install-handler": "^2.6.2",
235
+ "pwa-install-handler": "^2.6.3",
236
236
  "query-string": "^9.2.2",
237
237
  "random-words": "^2.0.1",
238
- "react": "^19.1.0",
238
+ "react": "^19.1.1",
239
239
  "react-confetti": "^6.4.0",
240
- "react-dom": "^19.1.0",
240
+ "react-dom": "^19.1.1",
241
241
  "react-fast-marquee": "^1.6.5",
242
242
  "react-hotkeys-hook": "^5.1.0",
243
243
  "react-i18next": "^15.6.1",
@@ -256,10 +256,10 @@
256
256
  "rtl-detect": "^1.1.2",
257
257
  "semver": "^7.7.2",
258
258
  "sharp": "^0.34.3",
259
- "shiki": "^3.8.1",
259
+ "shiki": "^3.9.2",
260
260
  "stripe": "^17.7.0",
261
261
  "superjson": "^2.2.2",
262
- "svix": "^1.69.0",
262
+ "svix": "^1.70.1",
263
263
  "swr": "^2.3.4",
264
264
  "systemjs": "^6.15.1",
265
265
  "tokenx": "^0.4.1",
@@ -272,7 +272,7 @@
272
272
  "ws": "^8.18.3",
273
273
  "y-protocols": "^1.0.6",
274
274
  "y-webrtc": "^10.3.0",
275
- "yaml": "^2.8.0",
275
+ "yaml": "^2.8.1",
276
276
  "yjs": "^13.6.27",
277
277
  "zod": "^3.25.76",
278
278
  "zustand": "5.0.4",
@@ -287,12 +287,12 @@
287
287
  "@lobehub/lint": "^1.26.2",
288
288
  "@lobehub/market-types": "^1.11.4",
289
289
  "@lobehub/seo-cli": "^1.7.0",
290
- "@next/bundle-analyzer": "^15.4.3",
291
- "@next/eslint-plugin-next": "^15.4.3",
290
+ "@next/bundle-analyzer": "^15.4.6",
291
+ "@next/eslint-plugin-next": "^15.4.6",
292
292
  "@peculiar/webcrypto": "^1.5.0",
293
293
  "@prettier/sync": "^0.6.1",
294
294
  "@semantic-release/exec": "^6.0.3",
295
- "@testing-library/jest-dom": "^6.6.3",
295
+ "@testing-library/jest-dom": "^6.6.4",
296
296
  "@testing-library/react": "^16.3.0",
297
297
  "@testing-library/user-event": "^14.6.1",
298
298
  "@types/chroma-js": "^3.1.1",
@@ -304,12 +304,12 @@
304
304
  "@types/json-schema": "^7.0.15",
305
305
  "@types/lodash": "^4.17.20",
306
306
  "@types/lodash-es": "^4.17.12",
307
- "@types/node": "^22.16.5",
307
+ "@types/node": "^22.17.0",
308
308
  "@types/numeral": "^2.0.5",
309
- "@types/oidc-provider": "^9.1.1",
310
- "@types/pg": "^8.15.4",
311
- "@types/react": "^19.1.8",
312
- "@types/react-dom": "^19.1.6",
309
+ "@types/oidc-provider": "^9.1.2",
310
+ "@types/pg": "^8.15.5",
311
+ "@types/react": "^19.1.9",
312
+ "@types/react-dom": "^19.1.7",
313
313
  "@types/rtl-detect": "^1.0.3",
314
314
  "@types/semver": "^7.7.0",
315
315
  "@types/systemjs": "^6.15.3",
@@ -332,7 +332,7 @@
332
332
  "eslint": "^8.57.1",
333
333
  "eslint-plugin-mdx": "^3.6.2",
334
334
  "fake-indexeddb": "^6.0.1",
335
- "fs-extra": "^11.3.0",
335
+ "fs-extra": "^11.3.1",
336
336
  "glob": "^11.0.3",
337
337
  "happy-dom": "^17.6.3",
338
338
  "husky": "^9.1.7",
@@ -343,7 +343,7 @@
343
343
  "mcp-hello-world": "^1.1.2",
344
344
  "mime": "^4.0.7",
345
345
  "node-fetch": "^3.3.2",
346
- "node-gyp": "^11.2.0",
346
+ "node-gyp": "^11.3.0",
347
347
  "openapi-typescript": "^7.8.0",
348
348
  "p-map": "^7.0.3",
349
349
  "prettier": "^3.6.2",
@@ -354,7 +354,7 @@
354
354
  "semantic-release": "^21.1.2",
355
355
  "serwist": "^9.1.1",
356
356
  "stylelint": "^15.11.0",
357
- "tsx": "~4.19.4",
357
+ "tsx": "^4.20.3",
358
358
  "type-fest": "^4.41.0",
359
359
  "typescript": "^5.9.2",
360
360
  "unified": "^11.0.5",
@@ -2,7 +2,10 @@ import type { HighlighterProps, MermaidProps, NeutralColors, PrimaryColors } fro
2
2
 
3
3
  import { ResponseAnimationStyle } from '@/types/llm';
4
4
 
5
+ export type AnimationMode = 'disabled' | 'agile' | 'elegant';
6
+
5
7
  export interface UserGeneralConfig {
8
+ animationMode?: AnimationMode;
6
9
  fontSize: number;
7
10
  highlighterTheme?: HighlighterProps['theme'];
8
11
  mermaidTheme?: MermaidProps['theme'];
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { Form, type FormGroupItemType, Icon, ImageSelect, InputPassword } from '@lobehub/ui';
4
4
  import { Select } from '@lobehub/ui';
5
- import { Skeleton } from 'antd';
5
+ import { Segmented, Skeleton } from 'antd';
6
6
  import isEqual from 'fast-deep-equal';
7
- import { Loader2Icon, Monitor, Moon, Sun } from 'lucide-react';
7
+ import { Ban, Gauge, Loader2Icon, Monitor, Moon, Sun, Waves } from 'lucide-react';
8
8
  import { memo, useState } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
 
@@ -22,7 +22,7 @@ const Common = memo(() => {
22
22
  const { t } = useTranslation('setting');
23
23
 
24
24
  const showAccessCodeConfig = useServerConfigStore(serverConfigSelectors.enabledAccessCode);
25
- const settings = useUserStore(settingsSelectors.currentSettings, isEqual);
25
+ const general = useUserStore((s) => settingsSelectors.currentSettings(s).general, isEqual);
26
26
  const themeMode = useGlobalStore(systemStatusSelectors.themeMode);
27
27
  const language = useGlobalStore(systemStatusSelectors.language);
28
28
  const [setSettings, isUserStateInit] = useUserStore((s) => [s.setSettings, s.isUserStateInit]);
@@ -81,6 +81,34 @@ const Common = memo(() => {
81
81
  ),
82
82
  label: t('settingCommon.lang.title'),
83
83
  },
84
+ {
85
+ children: (
86
+ <Segmented
87
+ options={[
88
+ {
89
+ icon: <Icon icon={Ban} size={16} />,
90
+ label: t('settingAppearance.animationMode.disabled'),
91
+ value: 'disabled',
92
+ },
93
+ {
94
+ icon: <Icon icon={Gauge} size={16} />,
95
+ label: t('settingAppearance.animationMode.agile'),
96
+ value: 'agile',
97
+ },
98
+ {
99
+ icon: <Icon icon={Waves} size={16} />,
100
+ label: t('settingAppearance.animationMode.elegant'),
101
+ value: 'elegant',
102
+ },
103
+ ]}
104
+ />
105
+ ),
106
+ desc: t('settingAppearance.animationMode.desc'),
107
+ label: t('settingAppearance.animationMode.title'),
108
+ minWidth: undefined,
109
+ name: 'animationMode',
110
+ },
111
+
84
112
  {
85
113
  children: (
86
114
  <InputPassword
@@ -100,12 +128,12 @@ const Common = memo(() => {
100
128
 
101
129
  return (
102
130
  <Form
103
- initialValues={settings.keyVaults}
131
+ initialValues={general}
104
132
  items={[theme]}
105
133
  itemsType={'group'}
106
134
  onValuesChange={async (v) => {
107
135
  setLoading(true);
108
- await setSettings({ keyVaults: v });
136
+ await setSettings({ general: v });
109
137
  setLoading(false);
110
138
  }}
111
139
  variant={'borderless'}
@@ -1,6 +1,7 @@
1
1
  import { UserGeneralConfig } from '@/types/user/settings';
2
2
 
3
3
  export const DEFAULT_COMMON_SETTINGS: UserGeneralConfig = {
4
+ animationMode: 'agile',
4
5
  fontSize: 14,
5
6
  highlighterTheme: 'lobe-theme',
6
7
  mermaidTheme: 'lobe-theme',
@@ -102,14 +102,12 @@ const AppTheme = memo<AppThemeProps>(
102
102
  customFontURL,
103
103
  customFontFamily,
104
104
  }) => {
105
- // console.debug('server:appearance', defaultAppearance);
106
- // console.debug('server:primaryColor', defaultPrimaryColor);
107
- // console.debug('server:neutralColor', defaultNeutralColor);
108
105
  const themeMode = useGlobalStore(systemStatusSelectors.themeMode);
109
106
  const { styles, cx, theme } = useStyles();
110
- const [primaryColor, neutralColor] = useUserStore((s) => [
107
+ const [primaryColor, neutralColor, animationMode] = useUserStore((s) => [
111
108
  userGeneralSettingsSelectors.primaryColor(s),
112
109
  userGeneralSettingsSelectors.neutralColor(s),
110
+ userGeneralSettingsSelectors.animationMode(s),
113
111
  ]);
114
112
 
115
113
  useEffect(() => {
@@ -138,6 +136,8 @@ const AppTheme = memo<AppThemeProps>(
138
136
  cssVar: true,
139
137
  token: {
140
138
  fontFamily: customFontFamily ? `${customFontFamily},${theme.fontFamily}` : undefined,
139
+ motion: animationMode !== 'disabled',
140
+ motionUnit: animationMode === 'agile' ? 0.05 : 0.1,
141
141
  },
142
142
  }}
143
143
  themeMode={themeMode}
@@ -186,10 +186,21 @@ export default {
186
186
  },
187
187
 
188
188
  settingAppearance: {
189
+ animationMode: {
190
+ agile: '敏捷',
191
+ desc: '选择应用程序的操作响应的动画速度',
192
+ disabled: '关闭',
193
+ elegant: '优雅',
194
+ title: '响应动画',
195
+ },
189
196
  neutralColor: {
190
197
  desc: '不同色彩倾向的灰阶自定义',
191
198
  title: '中性色',
192
199
  },
200
+ noAnimation: {
201
+ desc: '禁用应用程序中的所有动画效果',
202
+ title: '无动画模式',
203
+ },
193
204
  preview: {
194
205
  title: '调色盘',
195
206
  },
@@ -93,8 +93,8 @@ export const agentRouter = router({
93
93
  const user = await UserModel.findById(ctx.serverDB, ctx.userId);
94
94
  if (!user) return DEFAULT_AGENT_CONFIG;
95
95
 
96
- const res = await ctx.agentService.createInbox();
97
- pino.info('create inbox session', res);
96
+ await ctx.agentService.createInbox();
97
+ pino.info('create inbox session');
98
98
  }
99
99
  }
100
100
 
@@ -123,9 +123,9 @@ export class UserService {
123
123
  if (!file) {
124
124
  return null;
125
125
  }
126
- const fileBuffer = Buffer.from(file);
127
- return fileBuffer;
126
+ return Buffer.from(file);
128
127
  } catch (error) {
128
+ // @ts-expect-error 这里很奇怪,升级了 pino 就报错,我怀疑是 pino 的问题
129
129
  pino.error('Failed to get user avatar:', error);
130
130
  }
131
131
  };
@@ -16,6 +16,7 @@ describe('settingsSelectors', () => {
16
16
  const result = userGeneralSettingsSelectors.config(s as UserStore);
17
17
 
18
18
  expect(result).toEqual({
19
+ animationMode: 'agile',
19
20
  fontSize: 12,
20
21
  highlighterTheme: 'lobe-theme',
21
22
  mermaidTheme: 'lobe-theme',
@@ -9,8 +9,10 @@ const fontSize = (s: UserStore) => generalConfig(s).fontSize;
9
9
  const highlighterTheme = (s: UserStore) => generalConfig(s).highlighterTheme;
10
10
  const mermaidTheme = (s: UserStore) => generalConfig(s).mermaidTheme;
11
11
  const transitionMode = (s: UserStore) => generalConfig(s).transitionMode;
12
+ const animationMode = (s: UserStore) => generalConfig(s).animationMode;
12
13
 
13
14
  export const userGeneralSettingsSelectors = {
15
+ animationMode,
14
16
  config: generalConfig,
15
17
  fontSize,
16
18
  highlighterTheme,