@lobehub/chat 1.110.1 → 1.110.2

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.
Files changed (113) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/Dockerfile +1 -1
  3. package/apps/desktop/.i18nrc.js +2 -1
  4. package/apps/desktop/package.json +1 -2
  5. package/apps/desktop/resources/locales/ar/menu.json +1 -0
  6. package/apps/desktop/resources/locales/bg-BG/menu.json +1 -0
  7. package/apps/desktop/resources/locales/de-DE/menu.json +1 -0
  8. package/apps/desktop/resources/locales/en-US/menu.json +1 -0
  9. package/apps/desktop/resources/locales/es-ES/menu.json +1 -0
  10. package/apps/desktop/resources/locales/fa-IR/menu.json +1 -0
  11. package/apps/desktop/resources/locales/fr-FR/menu.json +1 -0
  12. package/apps/desktop/resources/locales/it-IT/menu.json +1 -0
  13. package/apps/desktop/resources/locales/ja-JP/menu.json +1 -0
  14. package/apps/desktop/resources/locales/ko-KR/menu.json +1 -0
  15. package/apps/desktop/resources/locales/nl-NL/menu.json +1 -0
  16. package/apps/desktop/resources/locales/pl-PL/menu.json +1 -0
  17. package/apps/desktop/resources/locales/pt-BR/menu.json +1 -0
  18. package/apps/desktop/resources/locales/ru-RU/menu.json +1 -0
  19. package/apps/desktop/resources/locales/tr-TR/menu.json +1 -0
  20. package/apps/desktop/resources/locales/vi-VN/menu.json +1 -0
  21. package/apps/desktop/resources/locales/zh-CN/menu.json +1 -0
  22. package/apps/desktop/resources/locales/zh-TW/menu.json +1 -0
  23. package/apps/desktop/src/main/controllers/MenuCtr.ts +2 -2
  24. package/apps/desktop/src/main/locales/default/menu.ts +1 -0
  25. package/apps/desktop/src/main/menus/impls/linux.ts +9 -24
  26. package/apps/desktop/src/main/menus/impls/macOS.ts +9 -28
  27. package/apps/desktop/src/main/menus/impls/windows.ts +9 -27
  28. package/changelog/v1.json +12 -0
  29. package/locales/ar/modelProvider.json +10 -1
  30. package/locales/ar/models.json +19 -1
  31. package/locales/bg-BG/modelProvider.json +10 -1
  32. package/locales/bg-BG/models.json +19 -1
  33. package/locales/de-DE/modelProvider.json +10 -1
  34. package/locales/de-DE/models.json +19 -1
  35. package/locales/en-US/modelProvider.json +10 -1
  36. package/locales/en-US/models.json +19 -1
  37. package/locales/es-ES/modelProvider.json +10 -1
  38. package/locales/es-ES/models.json +19 -1
  39. package/locales/fa-IR/modelProvider.json +10 -1
  40. package/locales/fa-IR/models.json +19 -1
  41. package/locales/fr-FR/modelProvider.json +10 -1
  42. package/locales/fr-FR/models.json +19 -1
  43. package/locales/it-IT/modelProvider.json +10 -1
  44. package/locales/it-IT/models.json +19 -1
  45. package/locales/ja-JP/modelProvider.json +10 -1
  46. package/locales/ja-JP/models.json +19 -1
  47. package/locales/ko-KR/modelProvider.json +10 -1
  48. package/locales/ko-KR/models.json +19 -1
  49. package/locales/nl-NL/modelProvider.json +10 -1
  50. package/locales/nl-NL/models.json +19 -1
  51. package/locales/pl-PL/modelProvider.json +10 -1
  52. package/locales/pl-PL/models.json +19 -1
  53. package/locales/pt-BR/modelProvider.json +10 -1
  54. package/locales/pt-BR/models.json +19 -1
  55. package/locales/ru-RU/modelProvider.json +10 -1
  56. package/locales/ru-RU/models.json +19 -1
  57. package/locales/tr-TR/modelProvider.json +10 -1
  58. package/locales/tr-TR/models.json +19 -1
  59. package/locales/vi-VN/modelProvider.json +10 -1
  60. package/locales/vi-VN/models.json +19 -1
  61. package/locales/zh-CN/modelProvider.json +10 -1
  62. package/locales/zh-CN/models.json +19 -1
  63. package/locales/zh-TW/modelProvider.json +10 -1
  64. package/locales/zh-TW/models.json +19 -1
  65. package/package.json +1 -1
  66. package/packages/electron-client-ipc/src/events/menu.ts +1 -1
  67. package/packages/types/package.json +3 -0
  68. package/packages/types/src/agent/chatConfig.ts +1 -1
  69. package/packages/types/src/agent/index.ts +3 -4
  70. package/packages/types/src/discover/assistants.ts +3 -3
  71. package/packages/types/src/message/chat.ts +4 -4
  72. package/src/app/(backend)/_deprecated/createBizOpenAI/auth.ts +2 -1
  73. package/src/app/(backend)/_deprecated/createBizOpenAI/createAzureOpenai.ts +1 -1
  74. package/src/app/(backend)/_deprecated/createBizOpenAI/createOpenai.ts +1 -1
  75. package/src/app/(backend)/_deprecated/createBizOpenAI/index.ts +1 -1
  76. package/src/app/(backend)/middleware/auth/index.test.ts +1 -1
  77. package/src/app/(backend)/middleware/auth/index.ts +1 -1
  78. package/src/app/(backend)/middleware/auth/utils.ts +1 -1
  79. package/src/app/(backend)/webapi/chat/[provider]/route.test.ts +1 -1
  80. package/src/app/(backend)/webapi/chat/[provider]/route.ts +2 -1
  81. package/src/app/(backend)/webapi/models/[provider]/pull/route.ts +2 -1
  82. package/src/app/(backend)/webapi/models/[provider]/route.ts +1 -1
  83. package/src/app/(backend)/webapi/plugin/gateway/route.ts +1 -1
  84. package/src/app/(backend)/webapi/text-to-image/[provider]/route.ts +1 -1
  85. package/src/app/[variants]/(main)/settings/provider/features/ModelList/DisabledModels.tsx +15 -5
  86. package/src/app/[variants]/(main)/settings/provider/features/ModelList/EnabledModelList/index.tsx +22 -4
  87. package/src/app/[variants]/(main)/settings/provider/features/ModelList/index.tsx +99 -3
  88. package/src/config/modelProviders/ai302.ts +1 -0
  89. package/src/config/modelProviders/openai.ts +1 -0
  90. package/src/features/ChatInput/Desktop/InputArea/index.tsx +14 -0
  91. package/src/features/Conversation/Error/index.tsx +1 -1
  92. package/src/features/Conversation/components/ChatItem/index.tsx +18 -1
  93. package/src/features/Portal/Artifacts/Header.tsx +1 -1
  94. package/src/libs/model-runtime/RouterRuntime/createRuntime.ts +2 -2
  95. package/src/locales/default/modelProvider.ts +9 -0
  96. package/src/services/__tests__/chat.test.ts +1 -1
  97. package/src/services/chat.ts +1 -1
  98. package/src/services/electron/system.ts +3 -1
  99. package/src/store/chat/slices/message/action.ts +1 -1
  100. package/src/store/chat/slices/plugin/action.ts +1 -1
  101. package/src/utils/errorResponse.test.ts +1 -1
  102. package/src/utils/errorResponse.ts +2 -1
  103. package/src/utils/fetch/__tests__/parseError.test.ts +1 -2
  104. package/src/utils/fetch/fetchSSE.ts +2 -1
  105. package/src/utils/fetch/parseError.ts +1 -1
  106. package/tsconfig.json +1 -1
  107. package/.dockerignore +0 -9
  108. package/packages/file-loaders/src/loaders/docx/fixtures/test.docx +0 -0
  109. package/packages/file-loaders/src/loaders/excel/fixtures/test.xlsx +0 -0
  110. package/packages/file-loaders/src/loaders/pptx/fixtures/test.pptx +0 -0
  111. package/packages/file-loaders/test/fixtures/test.docx +0 -0
  112. package/packages/file-loaders/test/fixtures/test.pptx +0 -0
  113. /package/{packages/types/src → src/types}/next.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.110.2](https://github.com/lobehub/lobe-chat/compare/v1.110.1...v1.110.2)
6
+
7
+ <sup>Released on **2025-08-06**</sup>
8
+
9
+ #### 🐛 Bug Fixes
10
+
11
+ - **misc**: Fix fail to fetch aihubmix model on client mode.
12
+
13
+ #### 💄 Styles
14
+
15
+ - **misc**: Add context menu for desktop, support different model tabs.
16
+
17
+ <br/>
18
+
19
+ <details>
20
+ <summary><kbd>Improvements and Fixes</kbd></summary>
21
+
22
+ #### What's fixed
23
+
24
+ - **misc**: Fix fail to fetch aihubmix model on client mode, closes [#8689](https://github.com/lobehub/lobe-chat/issues/8689) ([3dcc5da](https://github.com/lobehub/lobe-chat/commit/3dcc5da))
25
+
26
+ #### Styles
27
+
28
+ - **misc**: Add context menu for desktop, closes [#8691](https://github.com/lobehub/lobe-chat/issues/8691) ([0b30d05](https://github.com/lobehub/lobe-chat/commit/0b30d05))
29
+ - **misc**: Support different model tabs, closes [#8693](https://github.com/lobehub/lobe-chat/issues/8693) ([6d531d7](https://github.com/lobehub/lobe-chat/commit/6d531d7))
30
+
31
+ </details>
32
+
33
+ <div align="right">
34
+
35
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
36
+
37
+ </div>
38
+
5
39
  ### [Version 1.110.1](https://github.com/lobehub/lobe-chat/compare/v1.110.0...v1.110.1)
6
40
 
7
41
  <sup>Released on **2025-08-06**</sup>
package/Dockerfile CHANGED
@@ -247,7 +247,7 @@ ENV \
247
247
  # Tencent Cloud
248
248
  TENCENT_CLOUD_API_KEY="" TENCENT_CLOUD_MODEL_LIST="" \
249
249
  # Infini-AI
250
- INFINIAI_API_KEY="" INFINIAI_MODEL_LIST=""
250
+ INFINIAI_API_KEY="" INFINIAI_MODEL_LIST="" \
251
251
  # 302.AI
252
252
  AI302_API_KEY="" AI302_MODEL_LIST=""
253
253
 
@@ -23,8 +23,9 @@ module.exports = defineConfig({
23
23
  'vi-VN',
24
24
  'fa-IR',
25
25
  ],
26
+ saveImmediately: true,
26
27
  temperature: 0,
27
- modelName: 'gpt-4o-mini',
28
+ modelName: 'gpt-4.1-mini',
28
29
  experimental: {
29
30
  jsonMode: true,
30
31
  },
@@ -20,11 +20,10 @@
20
20
  "electron:dev": "electron-vite dev",
21
21
  "electron:run-unpack": "electron .",
22
22
  "format": "prettier --write ",
23
- "i18n": "bun run scripts/i18nWorkflow/index.ts && lobe-i18n",
23
+ "i18n": "tsx scripts/i18nWorkflow/index.ts && lobe-i18n",
24
24
  "postinstall": "electron-builder install-app-deps",
25
25
  "install-isolated": "pnpm install",
26
26
  "lint": "eslint --cache ",
27
- "pg-server": "bun run scripts/pglite-server.ts",
28
27
  "start": "electron-vite preview",
29
28
  "test": "vitest --run",
30
29
  "typecheck": "tsgo --noEmit -p tsconfig.json"
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "نسخ",
16
16
  "cut": "قص",
17
+ "delete": "حذف",
17
18
  "paste": "لصق",
18
19
  "redo": "إعادة",
19
20
  "selectAll": "تحديد الكل",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Копиране",
16
16
  "cut": "Изрязване",
17
+ "delete": "Изтрий",
17
18
  "paste": "Поставяне",
18
19
  "redo": "Повторно",
19
20
  "selectAll": "Избери всичко",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Kopieren",
16
16
  "cut": "Ausschneiden",
17
+ "delete": "Löschen",
17
18
  "paste": "Einfügen",
18
19
  "redo": "Wiederherstellen",
19
20
  "selectAll": "Alles auswählen",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Copy",
16
16
  "cut": "Cut",
17
+ "delete": "Delete",
17
18
  "paste": "Paste",
18
19
  "redo": "Redo",
19
20
  "selectAll": "Select All",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Copiar",
16
16
  "cut": "Cortar",
17
+ "delete": "Eliminar",
17
18
  "paste": "Pegar",
18
19
  "redo": "Rehacer",
19
20
  "selectAll": "Seleccionar todo",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "کپی",
16
16
  "cut": "برش",
17
+ "delete": "حذف",
17
18
  "paste": "چسباندن",
18
19
  "redo": "انجام مجدد",
19
20
  "selectAll": "انتخاب همه",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Copier",
16
16
  "cut": "Couper",
17
+ "delete": "Supprimer",
17
18
  "paste": "Coller",
18
19
  "redo": "Rétablir",
19
20
  "selectAll": "Tout sélectionner",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Copia",
16
16
  "cut": "Taglia",
17
+ "delete": "Elimina",
17
18
  "paste": "Incolla",
18
19
  "redo": "Ripeti",
19
20
  "selectAll": "Seleziona tutto",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "コピー",
16
16
  "cut": "切り取り",
17
+ "delete": "削除",
17
18
  "paste": "貼り付け",
18
19
  "redo": "やり直し",
19
20
  "selectAll": "すべて選択",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "복사",
16
16
  "cut": "잘라내기",
17
+ "delete": "삭제",
17
18
  "paste": "붙여넣기",
18
19
  "redo": "다시 실행",
19
20
  "selectAll": "모두 선택",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Kopiëren",
16
16
  "cut": "Knippen",
17
+ "delete": "Verwijderen",
17
18
  "paste": "Plakken",
18
19
  "redo": "Opnieuw doen",
19
20
  "selectAll": "Alles selecteren",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Kopiuj",
16
16
  "cut": "Wytnij",
17
+ "delete": "Usuń",
17
18
  "paste": "Wklej",
18
19
  "redo": "Ponów",
19
20
  "selectAll": "Zaznacz wszystko",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Copiar",
16
16
  "cut": "Cortar",
17
+ "delete": "Excluir",
17
18
  "paste": "Colar",
18
19
  "redo": "Refazer",
19
20
  "selectAll": "Selecionar Tudo",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Копировать",
16
16
  "cut": "Вырезать",
17
+ "delete": "Удалить",
17
18
  "paste": "Вставить",
18
19
  "redo": "Повторить",
19
20
  "selectAll": "Выбрать все",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Kopyala",
16
16
  "cut": "Kes",
17
+ "delete": "Sil",
17
18
  "paste": "Yapıştır",
18
19
  "redo": "Yinele",
19
20
  "selectAll": "Tümünü Seç",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "Sao chép",
16
16
  "cut": "Cắt",
17
+ "delete": "Xóa",
17
18
  "paste": "Dán",
18
19
  "redo": "Làm lại",
19
20
  "selectAll": "Chọn tất cả",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "复制",
16
16
  "cut": "剪切",
17
+ "delete": "删除",
17
18
  "paste": "粘贴",
18
19
  "redo": "重做",
19
20
  "selectAll": "全选",
@@ -14,6 +14,7 @@
14
14
  "edit": {
15
15
  "copy": "複製",
16
16
  "cut": "剪下",
17
+ "delete": "刪除",
17
18
  "paste": "貼上",
18
19
  "redo": "重做",
19
20
  "selectAll": "全選",
@@ -14,8 +14,8 @@ export default class MenuController extends ControllerModule {
14
14
  * 显示上下文菜单
15
15
  */
16
16
  @ipcClientEvent('showContextMenu')
17
- showContextMenu(type: string, data?: any) {
18
- return this.app.menuManager.showContextMenu(type, data);
17
+ showContextMenu(params: { data?: any; type: string }) {
18
+ return this.app.menuManager.showContextMenu(params.type, params.data);
19
19
  }
20
20
 
21
21
  /**
@@ -14,6 +14,7 @@ const menu = {
14
14
  edit: {
15
15
  copy: '复制',
16
16
  cut: '剪切',
17
+ delete: '删除',
17
18
  paste: '粘贴',
18
19
  redo: '重做',
19
20
  selectAll: '全选',
@@ -181,29 +181,15 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
181
181
  }
182
182
 
183
183
  private getChatContextMenuTemplate(data?: any): MenuItemConstructorOptions[] {
184
+ console.log(data);
184
185
  const t = this.app.i18n.ns('menu');
185
- const commonT = this.app.i18n.ns('common');
186
186
 
187
- const items: MenuItemConstructorOptions[] = [
188
- { label: t('edit.copy'), role: 'copy' },
189
- { label: t('edit.paste'), role: 'paste' },
187
+ return [
188
+ { accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
189
+ { accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
190
190
  { type: 'separator' },
191
191
  { label: t('edit.selectAll'), role: 'selectAll' },
192
192
  ];
193
-
194
- if (data?.messageId) {
195
- items.push(
196
- { type: 'separator' },
197
- {
198
- click: () => {
199
- console.log('尝试删除消息:', data.messageId);
200
- },
201
- label: commonT('actions.delete'),
202
- },
203
- );
204
- }
205
-
206
- return items;
207
193
  }
208
194
 
209
195
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -211,14 +197,13 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
211
197
  const t = this.app.i18n.ns('menu');
212
198
 
213
199
  return [
214
- { label: t('edit.cut'), role: 'cut' },
215
- { label: t('edit.copy'), role: 'copy' },
216
- { label: t('edit.paste'), role: 'paste' },
200
+ { accelerator: 'Ctrl+X', label: t('edit.cut'), role: 'cut' },
201
+ { accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
202
+ { accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
217
203
  { type: 'separator' },
218
- { label: t('edit.undo'), role: 'undo' },
219
- { label: t('edit.redo'), role: 'redo' },
204
+ { accelerator: 'Ctrl+A', label: t('edit.selectAll'), role: 'selectAll' },
220
205
  { type: 'separator' },
221
- { label: t('edit.selectAll'), role: 'selectAll' },
206
+ { label: t('edit.delete'), role: 'delete' },
222
207
  ];
223
208
  }
224
209
 
@@ -301,48 +301,29 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
301
301
  }
302
302
 
303
303
  private getChatContextMenuTemplate(data?: any): MenuItemConstructorOptions[] {
304
+ console.log(data);
304
305
  const t = this.app.i18n.ns('menu');
305
- const commonT = this.app.i18n.ns('common');
306
306
 
307
- const items: MenuItemConstructorOptions[] = [
308
- { label: t('edit.cut'), role: 'cut' },
309
- { label: t('edit.copy'), role: 'copy' },
310
- { label: t('edit.paste'), role: 'paste' },
307
+ return [
308
+ { accelerator: 'Command+C', label: t('edit.copy'), role: 'copy' },
309
+ { accelerator: 'Command+V', label: t('edit.paste'), role: 'paste' },
311
310
  { type: 'separator' },
312
311
  { label: t('edit.selectAll'), role: 'selectAll' },
313
312
  ];
314
-
315
- if (data?.messageId) {
316
- items.push(
317
- { type: 'separator' },
318
- {
319
- click: () => {
320
- console.log('尝试删除消息:', data.messageId);
321
- // 调用 MessageService (假设存在)
322
- // const messageService = this.app.getService(MessageService);
323
- // messageService?.deleteMessage(data.messageId);
324
- },
325
- label: commonT('actions.delete'),
326
- },
327
- );
328
- }
329
- return items;
330
313
  }
331
314
 
332
315
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
333
316
  private getEditorContextMenuTemplate(_data?: any): MenuItemConstructorOptions[] {
334
317
  const t = this.app.i18n.ns('menu');
335
318
 
336
- // 编辑器特定的上下文菜单
337
319
  return [
338
- { label: t('edit.cut'), role: 'cut' },
339
- { label: t('edit.copy'), role: 'copy' },
340
- { label: t('edit.paste'), role: 'paste' },
320
+ { accelerator: 'Command+X', label: t('edit.cut'), role: 'cut' },
321
+ { accelerator: 'Command+C', label: t('edit.copy'), role: 'copy' },
322
+ { accelerator: 'Command+V', label: t('edit.paste'), role: 'paste' },
341
323
  { type: 'separator' },
342
- { label: t('edit.undo'), role: 'undo' },
343
- { label: t('edit.redo'), role: 'redo' },
324
+ { accelerator: 'Command+A', label: t('edit.selectAll'), role: 'selectAll' },
344
325
  { type: 'separator' },
345
- { label: t('edit.selectAll'), role: 'selectAll' },
326
+ { label: t('edit.delete'), role: 'delete' },
346
327
  ];
347
328
  }
348
329
 
@@ -161,32 +161,15 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
161
161
  }
162
162
 
163
163
  private getChatContextMenuTemplate(data?: any): MenuItemConstructorOptions[] {
164
+ console.log(data);
164
165
  const t = this.app.i18n.ns('menu');
165
- const commonT = this.app.i18n.ns('common');
166
166
 
167
- const items: MenuItemConstructorOptions[] = [
168
- { label: t('edit.copy'), role: 'copy' },
169
- { label: t('edit.paste'), role: 'paste' },
167
+ return [
168
+ { accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
169
+ { accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
170
170
  { type: 'separator' },
171
171
  { label: t('edit.selectAll'), role: 'selectAll' },
172
172
  ];
173
-
174
- if (data?.messageId) {
175
- items.push(
176
- { type: 'separator' },
177
- {
178
- click: () => {
179
- console.log('尝试删除消息:', data.messageId);
180
- // 调用 MessageService (假设存在)
181
- // const messageService = this.app.getService(MessageService);
182
- // messageService?.deleteMessage(data.messageId);
183
- },
184
- label: commonT('actions.delete'),
185
- },
186
- );
187
- }
188
-
189
- return items;
190
173
  }
191
174
 
192
175
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -194,14 +177,13 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
194
177
  const t = this.app.i18n.ns('menu');
195
178
 
196
179
  return [
197
- { label: t('edit.cut'), role: 'cut' },
198
- { label: t('edit.copy'), role: 'copy' },
199
- { label: t('edit.paste'), role: 'paste' },
180
+ { accelerator: 'Ctrl+X', label: t('edit.cut'), role: 'cut' },
181
+ { accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
182
+ { accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
200
183
  { type: 'separator' },
201
- { label: t('edit.undo'), role: 'undo' },
202
- { label: t('edit.redo'), role: 'redo' },
184
+ { accelerator: 'Ctrl+A', label: t('edit.selectAll'), role: 'selectAll' },
203
185
  { type: 'separator' },
204
- { label: t('edit.selectAll'), role: 'selectAll' },
186
+ { label: t('edit.delete'), role: 'delete' },
205
187
  ];
206
188
  }
207
189
 
package/changelog/v1.json CHANGED
@@ -1,4 +1,16 @@
1
1
  [
2
+ {
3
+ "children": {
4
+ "fixes": [
5
+ "Fix fail to fetch aihubmix model on client mode."
6
+ ],
7
+ "improvements": [
8
+ "Add context menu for desktop, support different model tabs."
9
+ ]
10
+ },
11
+ "date": "2025-08-06",
12
+ "version": "1.110.2"
13
+ },
2
14
  {
3
15
  "children": {
4
16
  "fixes": [
@@ -306,6 +306,7 @@
306
306
  "latestTime": "آخر تحديث: {{time}}",
307
307
  "noLatestTime": "لم يتم الحصول على القائمة بعد"
308
308
  },
309
+ "noModelsInCategory": "لا توجد نماذج مفعلة في هذا التصنيف",
309
310
  "resetAll": {
310
311
  "conform": "هل أنت متأكد من إعادة تعيين جميع التعديلات على النموذج الحالي؟ بعد إعادة التعيين، ستعود قائمة النماذج الحالية إلى الحالة الافتراضية",
311
312
  "success": "تمت إعادة التعيين بنجاح",
@@ -316,7 +317,15 @@
316
317
  "title": "قائمة النماذج",
317
318
  "total": "إجمالي {{count}} نموذج متاح"
318
319
  },
319
- "searchNotFound": "لم يتم العثور على نتائج البحث"
320
+ "searchNotFound": "لم يتم العثور على نتائج البحث",
321
+ "tabs": {
322
+ "all": "الكل",
323
+ "chat": "الدردشة",
324
+ "embedding": "التضمين",
325
+ "image": "صورة",
326
+ "stt": "تحويل الكلام إلى نص",
327
+ "tts": "تحويل النص إلى كلام"
328
+ }
320
329
  },
321
330
  "sortModal": {
322
331
  "success": "تم تحديث الترتيب بنجاح",
@@ -74,6 +74,9 @@
74
74
  "DeepSeek-V3": {
75
75
  "description": "DeepSeek-V3 هو نموذج MoE تم تطويره ذاتيًا بواسطة شركة DeepSeek. حقق DeepSeek-V3 نتائج تقييم تفوقت على نماذج مفتوحة المصدر الأخرى مثل Qwen2.5-72B و Llama-3.1-405B، وفي الأداء ينافس النماذج المغلقة الرائدة عالميًا مثل GPT-4o و Claude-3.5-Sonnet."
76
76
  },
77
+ "DeepSeek-V3-Fast": {
78
+ "description": "مزود النموذج: منصة sophnet. DeepSeek V3 Fast هو النسخة السريعة عالية TPS من إصدار DeepSeek V3 0324، غير مكوّن بالكامل، يتمتع بقدرات برمجية ورياضية أقوى واستجابة أسرع!"
79
+ },
77
80
  "Doubao-lite-128k": {
78
81
  "description": "Doubao-lite يتميز بسرعة استجابة فائقة وقيمة أفضل مقابل المال، ويوفر خيارات أكثر مرونة للعملاء في سيناريوهات مختلفة. يدعم الاستدلال والتخصيص مع نافذة سياق 128k."
79
82
  },
@@ -608,6 +611,9 @@
608
611
  "aya:35b": {
609
612
  "description": "Aya 23 هو نموذج متعدد اللغات أطلقته Cohere، يدعم 23 لغة، مما يسهل التطبيقات اللغوية المتنوعة."
610
613
  },
614
+ "azure-DeepSeek-R1-0528": {
615
+ "description": "مقدم من مايكروسوفت؛ تم ترقية نموذج DeepSeek R1 بإصدار فرعي، الإصدار الحالي هو DeepSeek-R1-0528. في التحديث الأخير، حسّن DeepSeek R1 بشكل كبير عمق الاستدلال وقدرات التنبؤ من خلال زيادة موارد الحوسبة وإدخال آليات تحسين الخوارزميات في مرحلة ما بعد التدريب. النموذج يحقق أداءً ممتازًا في اختبارات معيارية متعددة مثل الرياضيات والبرمجة والمنطق العام، وأداؤه الكلي يقترب من النماذج الرائدة مثل O3 و Gemini 2.5 Pro."
616
+ },
611
617
  "baichuan/baichuan2-13b-chat": {
612
618
  "description": "Baichuan-13B هو نموذج لغوي كبير مفتوح المصدر قابل للاستخدام التجاري تم تطويره بواسطة Baichuan Intelligence، ويحتوي على 13 مليار معلمة، وقد حقق أفضل النتائج في المعايير الصينية والإنجليزية."
613
619
  },
@@ -668,6 +674,9 @@
668
674
  "claude-3-sonnet-20240229": {
669
675
  "description": "Claude 3 Sonnet يوفر توازنًا مثاليًا بين الذكاء والسرعة لحمولات العمل المؤسسية. يقدم أقصى فائدة بسعر أقل، موثوق ومناسب للنشر على نطاق واسع."
670
676
  },
677
+ "claude-opus-4-1-20250805": {
678
+ "description": "Claude Opus 4.1 هو أحدث وأقوى نموذج من Anthropic لمعالجة المهام المعقدة للغاية. يتميز بأداء ذكي وسلس وفهم عميق."
679
+ },
671
680
  "claude-opus-4-20250514": {
672
681
  "description": "Claude Opus 4 هو أقوى نموذج من Anthropic لمعالجة المهام المعقدة للغاية. إنه يتفوق في الأداء والذكاء والسلاسة والفهم."
673
682
  },
@@ -2123,6 +2132,12 @@
2123
2132
  "openai/gpt-4o-mini": {
2124
2133
  "description": "GPT-4o mini هو أحدث نموذج من OpenAI تم إطلاقه بعد GPT-4 Omni، ويدعم إدخال النصوص والصور وإخراج النصوص. كأحد نماذجهم المتقدمة الصغيرة، فهو أرخص بكثير من النماذج الرائدة الأخرى في الآونة الأخيرة، وأرخص بأكثر من 60% من GPT-3.5 Turbo. يحتفظ بذكاء متقدم مع قيمة ممتازة. حصل GPT-4o mini على 82% في اختبار MMLU، وهو حاليًا يتفوق على GPT-4 في تفضيلات الدردشة."
2125
2134
  },
2135
+ "openai/gpt-oss-120b": {
2136
+ "description": "OpenAI GPT-OSS 120B هو نموذج لغوي رائد يحتوي على 120 مليار معلمة، مزود بميزات تصفح الإنترنت وتنفيذ الأكواد، ويتميز بقدرات استدلالية."
2137
+ },
2138
+ "openai/gpt-oss-20b": {
2139
+ "description": "OpenAI GPT-OSS 20B هو نموذج لغوي رائد يحتوي على 20 مليار معلمة، مزود بميزات تصفح الإنترنت وتنفيذ الأكواد، ويتميز بقدرات استدلالية."
2140
+ },
2126
2141
  "openai/o1": {
2127
2142
  "description": "o1 هو نموذج الاستدلال الجديد من OpenAI، يدعم إدخال الصور والنصوص ويخرج نصًا، مناسب للمهام المعقدة التي تتطلب معرفة عامة واسعة. يتميز هذا النموذج بسياق يصل إلى 200 ألف كلمة وتاريخ معرفة حتى أكتوبر 2023."
2128
2143
  },
@@ -2411,8 +2426,11 @@
2411
2426
  "qwen3-coder-480b-a35b-instruct": {
2412
2427
  "description": "نسخة مفتوحة المصدر من نموذج كود Tongyi Qianwen. أحدث نموذج qwen3-coder-480b-a35b-instruct مبني على Qwen3 لتوليد الكود، يتمتع بقدرات قوية كوكيل برمجي، بارع في استدعاء الأدوات والتفاعل مع البيئة، قادر على البرمجة الذاتية مع أداء برمجي ممتاز وقدرات عامة."
2413
2428
  },
2429
+ "qwen3-coder-flash": {
2430
+ "description": "نموذج كود Tongyi Qianwen. أحدث سلسلة نماذج Qwen3-Coder مبنية على Qwen3 لتوليد الأكواد، تتمتع بقدرات وكيل ترميز قوية، بارعة في استدعاء الأدوات والتفاعل مع البيئة، قادرة على البرمجة الذاتية، وتجمع بين مهارات برمجية ممتازة وقدرات عامة."
2431
+ },
2414
2432
  "qwen3-coder-plus": {
2415
- "description": "نموذج كود Tongyi Qianwen. أحدث سلسلة Qwen3-Coder-Plus مبنية على Qwen3 لتوليد الكود، تتمتع بقدرات قوية كوكيل برمجي، بارعة في استدعاء الأدوات والتفاعل مع البيئة، قادرة على البرمجة الذاتية مع أداء برمجي ممتاز وقدرات عامة."
2433
+ "description": "نموذج كود Tongyi Qianwen. أحدث سلسلة نماذج Qwen3-Coder مبنية على Qwen3 لتوليد الأكواد، تتمتع بقدرات وكيل ترميز قوية، بارعة في استدعاء الأدوات والتفاعل مع البيئة، قادرة على البرمجة الذاتية، وتجمع بين مهارات برمجية ممتازة وقدرات عامة."
2416
2434
  },
2417
2435
  "qwq": {
2418
2436
  "description": "QwQ هو نموذج بحث تجريبي يركز على تحسين قدرات الاستدلال للذكاء الاصطناعي."
@@ -306,6 +306,7 @@
306
306
  "latestTime": "Последно обновление: {{time}}",
307
307
  "noLatestTime": "Все още не е получен списък"
308
308
  },
309
+ "noModelsInCategory": "В тази категория няма активирани модели",
309
310
  "resetAll": {
310
311
  "conform": "Потвърдете ли, че искате да нулирате всички промени в текущия модел? След нулирането списъкът с текущи модели ще се върне в първоначалното си състояние",
311
312
  "success": "Успешно нулирано",
@@ -316,7 +317,15 @@
316
317
  "title": "Списък с модели",
317
318
  "total": "Общо {{count}} налични модела"
318
319
  },
319
- "searchNotFound": "Не са намерени резултати от търсенето"
320
+ "searchNotFound": "Не са намерени резултати от търсенето",
321
+ "tabs": {
322
+ "all": "Всички",
323
+ "chat": "Чат",
324
+ "embedding": "Векторизация",
325
+ "image": "Изображение",
326
+ "stt": "ASR",
327
+ "tts": "TTS"
328
+ }
320
329
  },
321
330
  "sortModal": {
322
331
  "success": "Сортирането е успешно обновено",
@@ -74,6 +74,9 @@
74
74
  "DeepSeek-V3": {
75
75
  "description": "DeepSeek-V3 е MoE модел, разработен от компанията DeepSeek. DeepSeek-V3 постига резултати в множество оценки, които надминават други отворени модели като Qwen2.5-72B и Llama-3.1-405B, като по отношение на производителност е наравно с водещите затворени модели в света като GPT-4o и Claude-3.5-Sonnet."
76
76
  },
77
+ "DeepSeek-V3-Fast": {
78
+ "description": "Доставчик на модела: платформа sophnet. DeepSeek V3 Fast е високоскоростната версия с висока TPS на DeepSeek V3 0324, с пълна точност без квантизация, с по-силни кодови и математически възможности и по-бърз отговор!"
79
+ },
77
80
  "Doubao-lite-128k": {
78
81
  "description": "Doubao-lite предлага изключително бърза реакция и по-добро съотношение цена-качество, осигурявайки по-гъвкави опции за различни сценарии на клиентите. Поддържа разсъждения и финна настройка с контекстен прозорец от 128k."
79
82
  },
@@ -608,6 +611,9 @@
608
611
  "aya:35b": {
609
612
  "description": "Aya 23 е многозначен модел, представен от Cohere, поддържащ 23 езика, предоставяйки удобство за многоезични приложения."
610
613
  },
614
+ "azure-DeepSeek-R1-0528": {
615
+ "description": "Доставен от Microsoft; моделът DeepSeek R1 е получил малка версия ъпгрейд, текущата версия е DeepSeek-R1-0528. В най-новата актуализация DeepSeek R1 значително подобрява дълбочината на разсъждение и способността за извод чрез увеличаване на изчислителните ресурси и въвеждане на алгоритмична оптимизация в следтренировъчния етап. Този модел се представя отлично в множество бенчмаркове като математика, програмиране и обща логика, като общата му производителност вече е близка до водещи модели като O3 и Gemini 2.5 Pro."
616
+ },
611
617
  "baichuan/baichuan2-13b-chat": {
612
618
  "description": "Baichuan-13B е отворен, комерсиален голям езиков модел, разработен от Baichuan Intelligence, с 13 милиарда параметри, който постига най-добрите резултати в своя размер на авторитетни бенчмаркове на китайски и английски."
613
619
  },
@@ -668,6 +674,9 @@
668
674
  "claude-3-sonnet-20240229": {
669
675
  "description": "Claude 3 Sonnet предлага идеален баланс между интелигентност и скорост за корпоративни работни натоварвания. Той предлага максимална полезност на по-ниска цена, надежден и подходящ за мащабно внедряване."
670
676
  },
677
+ "claude-opus-4-1-20250805": {
678
+ "description": "Claude Opus 4.1 е най-новият и най-мощен модел на Anthropic за справяне с изключително сложни задачи. Той се отличава с изключителна производителност, интелигентност, плавност и разбиране."
679
+ },
671
680
  "claude-opus-4-20250514": {
672
681
  "description": "Claude Opus 4 е най-мощният модел на Anthropic, предназначен за обработка на изключително сложни задачи. Той се отличава с изключителна производителност, интелигентност, плавност и разбиране."
673
682
  },
@@ -2123,6 +2132,12 @@
2123
2132
  "openai/gpt-4o-mini": {
2124
2133
  "description": "GPT-4o mini е най-новият модел на OpenAI, пуснат след GPT-4 Omni, който поддържа вход и изход на текст и изображения. Като най-напредналият им малък модел, той е значително по-евтин от другите нови модели и е с над 60% по-евтин от GPT-3.5 Turbo. Запазва най-съвременната интелигентност, като предлага значителна стойност за парите. GPT-4o mini получи 82% на теста MMLU и в момента е с по-висок рейтинг от GPT-4 в предпочитанията за чат."
2125
2134
  },
2135
+ "openai/gpt-oss-120b": {
2136
+ "description": "OpenAI GPT-OSS 120B е водещ езиков модел с 120 милиарда параметри, вграден браузър за търсене и изпълнение на код, както и способности за разсъждение."
2137
+ },
2138
+ "openai/gpt-oss-20b": {
2139
+ "description": "OpenAI GPT-OSS 20B е водещ езиков модел с 20 милиарда параметри, вграден браузър за търсене и изпълнение на код, както и способности за разсъждение."
2140
+ },
2126
2141
  "openai/o1": {
2127
2142
  "description": "o1 е новият модел за разсъждение на OpenAI, който поддържа вход с изображения и текст и генерира текст, подходящ за сложни задачи, изискващи широкообхватни общи знания. Моделът разполага с контекст от 200K и дата на знание до октомври 2023 г."
2128
2143
  },
@@ -2411,8 +2426,11 @@
2411
2426
  "qwen3-coder-480b-a35b-instruct": {
2412
2427
  "description": "Отворена версия на кодовия модел Tongyi Qianwen. Най-новият qwen3-coder-480b-a35b-instruct е кодов модел, базиран на Qwen3, с мощни Coding Agent способности, умения за използване на инструменти и взаимодействие с околната среда, способен на автономно програмиране с отлични кодови и общи умения."
2413
2428
  },
2429
+ "qwen3-coder-flash": {
2430
+ "description": "Кодиращ модел на Tongyi Qianwen. Най-новата серия модели Qwen3-Coder е базирана на Qwen3 и е модел за генериране на код с мощни възможности на Coding Agent, умеещ да използва инструменти и да взаимодейства с околната среда, способен на автономно програмиране, с изключителни кодови умения и същевременно общи способности."
2431
+ },
2414
2432
  "qwen3-coder-plus": {
2415
- "description": "Кодов модел Tongyi Qianwen. Най-новата серия Qwen3-Coder-Plus е базирана на Qwen3, с мощни Coding Agent способности, умения за използване на инструменти и взаимодействие с околната среда, способна на автономно програмиране с отлични кодови и общи умения."
2433
+ "description": "Кодиращ модел на Tongyi Qianwen. Най-новата серия модели Qwen3-Coder е базирана на Qwen3 и е модел за генериране на код с мощни възможности на Coding Agent, умеещ да използва инструменти и да взаимодейства с околната среда, способен на автономно програмиране, с изключителни кодови умения и същевременно общи способности."
2416
2434
  },
2417
2435
  "qwq": {
2418
2436
  "description": "QwQ е експериментален изследователски модел, който се фокусира върху подобряване на AI разсъдъчните способности."