@lobehub/chat 1.110.1 → 1.110.3
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 +59 -0
- package/Dockerfile +1 -1
- package/apps/desktop/.i18nrc.js +2 -1
- package/apps/desktop/package.json +1 -2
- package/apps/desktop/resources/locales/ar/menu.json +1 -0
- package/apps/desktop/resources/locales/bg-BG/menu.json +1 -0
- package/apps/desktop/resources/locales/de-DE/menu.json +1 -0
- package/apps/desktop/resources/locales/en-US/menu.json +1 -0
- package/apps/desktop/resources/locales/es-ES/menu.json +1 -0
- package/apps/desktop/resources/locales/fa-IR/menu.json +1 -0
- package/apps/desktop/resources/locales/fr-FR/menu.json +1 -0
- package/apps/desktop/resources/locales/it-IT/menu.json +1 -0
- package/apps/desktop/resources/locales/ja-JP/menu.json +1 -0
- package/apps/desktop/resources/locales/ko-KR/menu.json +1 -0
- package/apps/desktop/resources/locales/nl-NL/menu.json +1 -0
- package/apps/desktop/resources/locales/pl-PL/menu.json +1 -0
- package/apps/desktop/resources/locales/pt-BR/menu.json +1 -0
- package/apps/desktop/resources/locales/ru-RU/menu.json +1 -0
- package/apps/desktop/resources/locales/tr-TR/menu.json +1 -0
- package/apps/desktop/resources/locales/vi-VN/menu.json +1 -0
- package/apps/desktop/resources/locales/zh-CN/menu.json +1 -0
- package/apps/desktop/resources/locales/zh-TW/menu.json +1 -0
- package/apps/desktop/src/main/controllers/MenuCtr.ts +2 -2
- package/apps/desktop/src/main/controllers/__tests__/MenuCtr.test.ts +13 -13
- package/apps/desktop/src/main/locales/default/menu.ts +1 -0
- package/apps/desktop/src/main/menus/impls/linux.ts +9 -24
- package/apps/desktop/src/main/menus/impls/macOS.ts +9 -28
- package/apps/desktop/src/main/menus/impls/windows.ts +9 -27
- package/changelog/v1.json +21 -0
- package/locales/ar/modelProvider.json +10 -1
- package/locales/ar/models.json +19 -1
- package/locales/bg-BG/modelProvider.json +10 -1
- package/locales/bg-BG/models.json +19 -1
- package/locales/de-DE/modelProvider.json +10 -1
- package/locales/de-DE/models.json +19 -1
- package/locales/en-US/modelProvider.json +10 -1
- package/locales/en-US/models.json +19 -1
- package/locales/es-ES/modelProvider.json +10 -1
- package/locales/es-ES/models.json +19 -1
- package/locales/fa-IR/modelProvider.json +10 -1
- package/locales/fa-IR/models.json +19 -1
- package/locales/fr-FR/modelProvider.json +10 -1
- package/locales/fr-FR/models.json +19 -1
- package/locales/it-IT/modelProvider.json +10 -1
- package/locales/it-IT/models.json +19 -1
- package/locales/ja-JP/modelProvider.json +10 -1
- package/locales/ja-JP/models.json +19 -1
- package/locales/ko-KR/modelProvider.json +10 -1
- package/locales/ko-KR/models.json +19 -1
- package/locales/nl-NL/modelProvider.json +10 -1
- package/locales/nl-NL/models.json +19 -1
- package/locales/pl-PL/modelProvider.json +10 -1
- package/locales/pl-PL/models.json +19 -1
- package/locales/pt-BR/modelProvider.json +10 -1
- package/locales/pt-BR/models.json +19 -1
- package/locales/ru-RU/modelProvider.json +10 -1
- package/locales/ru-RU/models.json +19 -1
- package/locales/tr-TR/modelProvider.json +10 -1
- package/locales/tr-TR/models.json +19 -1
- package/locales/vi-VN/modelProvider.json +10 -1
- package/locales/vi-VN/models.json +19 -1
- package/locales/zh-CN/modelProvider.json +10 -1
- package/locales/zh-CN/models.json +19 -1
- package/locales/zh-TW/modelProvider.json +10 -1
- package/locales/zh-TW/models.json +19 -1
- package/next.config.ts +1 -0
- package/package.json +4 -4
- package/packages/electron-client-ipc/src/events/menu.ts +1 -1
- package/packages/types/package.json +3 -0
- package/packages/types/src/agent/chatConfig.ts +1 -1
- package/packages/types/src/agent/index.ts +3 -4
- package/packages/types/src/discover/assistants.ts +3 -3
- package/packages/types/src/message/chat.ts +4 -4
- package/src/app/(backend)/_deprecated/createBizOpenAI/auth.ts +2 -1
- package/src/app/(backend)/_deprecated/createBizOpenAI/createAzureOpenai.ts +1 -1
- package/src/app/(backend)/_deprecated/createBizOpenAI/createOpenai.ts +1 -1
- package/src/app/(backend)/_deprecated/createBizOpenAI/index.ts +1 -1
- package/src/app/(backend)/middleware/auth/index.test.ts +1 -1
- package/src/app/(backend)/middleware/auth/index.ts +1 -1
- package/src/app/(backend)/middleware/auth/utils.ts +1 -1
- package/src/app/(backend)/webapi/chat/[provider]/route.test.ts +1 -1
- package/src/app/(backend)/webapi/chat/[provider]/route.ts +2 -1
- package/src/app/(backend)/webapi/models/[provider]/pull/route.ts +2 -1
- package/src/app/(backend)/webapi/models/[provider]/route.ts +1 -1
- package/src/app/(backend)/webapi/plugin/gateway/route.ts +1 -1
- package/src/app/(backend)/webapi/text-to-image/[provider]/route.ts +1 -1
- package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +2 -1
- package/src/app/[variants]/(main)/settings/provider/_layout/Desktop/Container.tsx +1 -0
- package/src/app/[variants]/(main)/settings/provider/_layout/Desktop/index.tsx +4 -9
- package/src/app/[variants]/(main)/settings/provider/features/ModelList/DisabledModels.tsx +15 -5
- package/src/app/[variants]/(main)/settings/provider/features/ModelList/EnabledModelList/index.tsx +22 -4
- package/src/app/[variants]/(main)/settings/provider/features/ModelList/index.tsx +99 -3
- package/src/app/[variants]/layout.tsx +2 -1
- package/src/components/InnerLink.tsx +20 -0
- package/src/config/modelProviders/ai302.ts +1 -0
- package/src/config/modelProviders/openai.ts +1 -0
- package/src/features/ChatInput/Desktop/InputArea/index.tsx +14 -0
- package/src/features/Conversation/Error/index.tsx +1 -1
- package/src/features/Conversation/components/ChatItem/index.tsx +18 -1
- package/src/features/ElectronTitlebar/UpdateModal.tsx +15 -3
- package/src/features/Portal/Artifacts/Header.tsx +1 -1
- package/src/hooks/usePlatform.ts +1 -1
- package/src/layout/GlobalProvider/index.tsx +3 -0
- package/src/libs/model-runtime/RouterRuntime/createRuntime.ts +2 -2
- package/src/locales/default/modelProvider.ts +9 -0
- package/src/server/ld.ts +1 -1
- package/src/services/__tests__/chat.test.ts +1 -1
- package/src/services/chat.ts +1 -1
- package/src/services/electron/system.ts +3 -1
- package/src/store/chat/slices/message/action.ts +1 -1
- package/src/store/chat/slices/plugin/action.ts +1 -1
- package/src/store/serverConfig/Provider.tsx +7 -2
- package/src/store/serverConfig/store.ts +2 -0
- package/src/utils/errorResponse.test.ts +1 -1
- package/src/utils/errorResponse.ts +2 -1
- package/src/utils/fetch/__tests__/parseError.test.ts +1 -2
- package/src/utils/fetch/fetchSSE.ts +2 -1
- package/src/utils/fetch/parseError.ts +1 -1
- package/tsconfig.json +1 -1
- package/.dockerignore +0 -9
- package/packages/file-loaders/src/loaders/docx/fixtures/test.docx +0 -0
- package/packages/file-loaders/src/loaders/excel/fixtures/test.xlsx +0 -0
- package/packages/file-loaders/src/loaders/pptx/fixtures/test.pptx +0 -0
- package/packages/file-loaders/test/fixtures/test.docx +0 -0
- package/packages/file-loaders/test/fixtures/test.pptx +0 -0
- /package/{packages/types/src → src/types}/next.ts +0 -0
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,65 @@
|
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
|
5
|
+
### [Version 1.110.3](https://github.com/lobehub/lobe-chat/compare/v1.110.2...v1.110.3)
|
6
|
+
|
7
|
+
<sup>Released on **2025-08-06**</sup>
|
8
|
+
|
9
|
+
#### 💄 Styles
|
10
|
+
|
11
|
+
- **misc**: Fix provider setting page hydration error.
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<details>
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
17
|
+
|
18
|
+
#### Styles
|
19
|
+
|
20
|
+
- **misc**: Fix provider setting page hydration error, closes [#8695](https://github.com/lobehub/lobe-chat/issues/8695) ([88e7d2a](https://github.com/lobehub/lobe-chat/commit/88e7d2a))
|
21
|
+
|
22
|
+
</details>
|
23
|
+
|
24
|
+
<div align="right">
|
25
|
+
|
26
|
+
[](#readme-top)
|
27
|
+
|
28
|
+
</div>
|
29
|
+
|
30
|
+
### [Version 1.110.2](https://github.com/lobehub/lobe-chat/compare/v1.110.1...v1.110.2)
|
31
|
+
|
32
|
+
<sup>Released on **2025-08-06**</sup>
|
33
|
+
|
34
|
+
#### 🐛 Bug Fixes
|
35
|
+
|
36
|
+
- **misc**: Fix fail to fetch aihubmix model on client mode.
|
37
|
+
|
38
|
+
#### 💄 Styles
|
39
|
+
|
40
|
+
- **misc**: Add context menu for desktop, support different model tabs.
|
41
|
+
|
42
|
+
<br/>
|
43
|
+
|
44
|
+
<details>
|
45
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
46
|
+
|
47
|
+
#### What's fixed
|
48
|
+
|
49
|
+
- **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))
|
50
|
+
|
51
|
+
#### Styles
|
52
|
+
|
53
|
+
- **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))
|
54
|
+
- **misc**: Support different model tabs, closes [#8693](https://github.com/lobehub/lobe-chat/issues/8693) ([6d531d7](https://github.com/lobehub/lobe-chat/commit/6d531d7))
|
55
|
+
|
56
|
+
</details>
|
57
|
+
|
58
|
+
<div align="right">
|
59
|
+
|
60
|
+
[](#readme-top)
|
61
|
+
|
62
|
+
</div>
|
63
|
+
|
5
64
|
### [Version 1.110.1](https://github.com/lobehub/lobe-chat/compare/v1.110.0...v1.110.1)
|
6
65
|
|
7
66
|
<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
|
|
package/apps/desktop/.i18nrc.js
CHANGED
@@ -20,11 +20,10 @@
|
|
20
20
|
"electron:dev": "electron-vite dev",
|
21
21
|
"electron:run-unpack": "electron .",
|
22
22
|
"format": "prettier --write ",
|
23
|
-
"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,8 +14,8 @@ export default class MenuController extends ControllerModule {
|
|
14
14
|
* 显示上下文菜单
|
15
15
|
*/
|
16
16
|
@ipcClientEvent('showContextMenu')
|
17
|
-
showContextMenu(
|
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
|
/**
|
@@ -29,9 +29,9 @@ describe('MenuController', () => {
|
|
29
29
|
it('should call menuManager.refreshMenus', () => {
|
30
30
|
// 模拟返回值
|
31
31
|
mockRefreshMenus.mockReturnValueOnce(true);
|
32
|
-
|
32
|
+
|
33
33
|
const result = menuController.refreshAppMenu();
|
34
|
-
|
34
|
+
|
35
35
|
expect(mockRefreshMenus).toHaveBeenCalled();
|
36
36
|
expect(result).toBe(true);
|
37
37
|
});
|
@@ -41,9 +41,9 @@ describe('MenuController', () => {
|
|
41
41
|
it('should call menuManager.showContextMenu with type only', () => {
|
42
42
|
const menuType = 'chat';
|
43
43
|
mockShowContextMenu.mockReturnValueOnce({ shown: true });
|
44
|
-
|
45
|
-
const result = menuController.showContextMenu(menuType);
|
46
|
-
|
44
|
+
|
45
|
+
const result = menuController.showContextMenu({ type: menuType });
|
46
|
+
|
47
47
|
expect(mockShowContextMenu).toHaveBeenCalledWith(menuType, undefined);
|
48
48
|
expect(result).toEqual({ shown: true });
|
49
49
|
});
|
@@ -52,9 +52,9 @@ describe('MenuController', () => {
|
|
52
52
|
const menuType = 'file';
|
53
53
|
const menuData = { fileId: '123', filePath: '/path/to/file.txt' };
|
54
54
|
mockShowContextMenu.mockReturnValueOnce({ shown: true });
|
55
|
-
|
56
|
-
const result = menuController.showContextMenu(menuType, menuData);
|
57
|
-
|
55
|
+
|
56
|
+
const result = menuController.showContextMenu({ type: menuType, data: menuData });
|
57
|
+
|
58
58
|
expect(mockShowContextMenu).toHaveBeenCalledWith(menuType, menuData);
|
59
59
|
expect(result).toEqual({ shown: true });
|
60
60
|
});
|
@@ -63,20 +63,20 @@ describe('MenuController', () => {
|
|
63
63
|
describe('setDevMenuVisibility', () => {
|
64
64
|
it('should call menuManager.rebuildAppMenu with showDevItems true', () => {
|
65
65
|
mockRebuildAppMenu.mockReturnValueOnce(true);
|
66
|
-
|
66
|
+
|
67
67
|
const result = menuController.setDevMenuVisibility(true);
|
68
|
-
|
68
|
+
|
69
69
|
expect(mockRebuildAppMenu).toHaveBeenCalledWith({ showDevItems: true });
|
70
70
|
expect(result).toBe(true);
|
71
71
|
});
|
72
72
|
|
73
73
|
it('should call menuManager.rebuildAppMenu with showDevItems false', () => {
|
74
74
|
mockRebuildAppMenu.mockReturnValueOnce(true);
|
75
|
-
|
75
|
+
|
76
76
|
const result = menuController.setDevMenuVisibility(false);
|
77
|
-
|
77
|
+
|
78
78
|
expect(mockRebuildAppMenu).toHaveBeenCalledWith({ showDevItems: false });
|
79
79
|
expect(result).toBe(true);
|
80
80
|
});
|
81
81
|
});
|
82
|
-
});
|
82
|
+
});
|
@@ -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
|
-
|
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.
|
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.
|
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
|
-
|
308
|
-
{ label: t('edit.
|
309
|
-
{ label: t('edit.
|
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.
|
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.
|
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
|
-
|
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.
|
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.
|
186
|
+
{ label: t('edit.delete'), role: 'delete' },
|
205
187
|
];
|
206
188
|
}
|
207
189
|
|
package/changelog/v1.json
CHANGED
@@ -1,4 +1,25 @@
|
|
1
1
|
[
|
2
|
+
{
|
3
|
+
"children": {
|
4
|
+
"improvements": [
|
5
|
+
"Fix provider setting page hydration error."
|
6
|
+
]
|
7
|
+
},
|
8
|
+
"date": "2025-08-06",
|
9
|
+
"version": "1.110.3"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"children": {
|
13
|
+
"fixes": [
|
14
|
+
"Fix fail to fetch aihubmix model on client mode."
|
15
|
+
],
|
16
|
+
"improvements": [
|
17
|
+
"Add context menu for desktop, support different model tabs."
|
18
|
+
]
|
19
|
+
},
|
20
|
+
"date": "2025-08-06",
|
21
|
+
"version": "1.110.2"
|
22
|
+
},
|
2
23
|
{
|
3
24
|
"children": {
|
4
25
|
"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": "تم تحديث الترتيب بنجاح",
|
package/locales/ar/models.json
CHANGED
@@ -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
|
2433
|
+
"description": "نموذج كود Tongyi Qianwen. أحدث سلسلة نماذج Qwen3-Coder مبنية على Qwen3 لتوليد الأكواد، تتمتع بقدرات وكيل ترميز قوية، بارعة في استدعاء الأدوات والتفاعل مع البيئة، قادرة على البرمجة الذاتية، وتجمع بين مهارات برمجية ممتازة وقدرات عامة."
|
2416
2434
|
},
|
2417
2435
|
"qwq": {
|
2418
2436
|
"description": "QwQ هو نموذج بحث تجريبي يركز على تحسين قدرات الاستدلال للذكاء الاصطناعي."
|