@lobehub/lobehub 2.0.0-next.264 → 2.0.0-next.266
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/.github/workflows/manual-build-desktop.yml +16 -37
- package/CHANGELOG.md +52 -0
- package/apps/desktop/native-deps.config.mjs +19 -3
- package/apps/desktop/src/main/controllers/__tests__/SystemCtr.test.ts +13 -0
- package/apps/desktop/src/main/utils/permissions.ts +86 -22
- package/changelog/v1.json +18 -0
- package/locales/ar/chat.json +1 -0
- package/locales/ar/modelProvider.json +20 -0
- package/locales/ar/models.json +33 -10
- package/locales/ar/plugin.json +1 -0
- package/locales/ar/providers.json +1 -0
- package/locales/ar/setting.json +2 -0
- package/locales/bg-BG/chat.json +1 -0
- package/locales/bg-BG/modelProvider.json +20 -0
- package/locales/bg-BG/models.json +27 -7
- package/locales/bg-BG/plugin.json +1 -0
- package/locales/bg-BG/providers.json +1 -0
- package/locales/bg-BG/setting.json +2 -0
- package/locales/de-DE/chat.json +1 -0
- package/locales/de-DE/modelProvider.json +20 -0
- package/locales/de-DE/models.json +44 -10
- package/locales/de-DE/plugin.json +1 -0
- package/locales/de-DE/providers.json +1 -0
- package/locales/de-DE/setting.json +2 -0
- package/locales/en-US/chat.json +1 -0
- package/locales/en-US/modelProvider.json +20 -0
- package/locales/en-US/models.json +10 -10
- package/locales/en-US/providers.json +1 -0
- package/locales/en-US/setting.json +2 -1
- package/locales/es-ES/chat.json +1 -0
- package/locales/es-ES/modelProvider.json +20 -0
- package/locales/es-ES/models.json +53 -10
- package/locales/es-ES/plugin.json +1 -0
- package/locales/es-ES/providers.json +1 -0
- package/locales/es-ES/setting.json +2 -0
- package/locales/fa-IR/chat.json +1 -0
- package/locales/fa-IR/modelProvider.json +20 -0
- package/locales/fa-IR/models.json +33 -10
- package/locales/fa-IR/plugin.json +1 -0
- package/locales/fa-IR/providers.json +1 -0
- package/locales/fa-IR/setting.json +2 -0
- package/locales/fr-FR/chat.json +1 -0
- package/locales/fr-FR/modelProvider.json +20 -0
- package/locales/fr-FR/models.json +27 -7
- package/locales/fr-FR/plugin.json +1 -0
- package/locales/fr-FR/providers.json +1 -0
- package/locales/fr-FR/setting.json +2 -0
- package/locales/it-IT/chat.json +1 -0
- package/locales/it-IT/modelProvider.json +20 -0
- package/locales/it-IT/models.json +10 -10
- package/locales/it-IT/plugin.json +1 -0
- package/locales/it-IT/providers.json +1 -0
- package/locales/it-IT/setting.json +2 -0
- package/locales/ja-JP/chat.json +1 -0
- package/locales/ja-JP/modelProvider.json +20 -0
- package/locales/ja-JP/models.json +5 -10
- package/locales/ja-JP/plugin.json +1 -0
- package/locales/ja-JP/providers.json +1 -0
- package/locales/ja-JP/setting.json +2 -0
- package/locales/ko-KR/chat.json +1 -0
- package/locales/ko-KR/modelProvider.json +20 -0
- package/locales/ko-KR/models.json +36 -10
- package/locales/ko-KR/plugin.json +1 -0
- package/locales/ko-KR/providers.json +1 -0
- package/locales/ko-KR/setting.json +2 -0
- package/locales/nl-NL/chat.json +1 -0
- package/locales/nl-NL/modelProvider.json +20 -0
- package/locales/nl-NL/models.json +35 -4
- package/locales/nl-NL/plugin.json +1 -0
- package/locales/nl-NL/providers.json +1 -0
- package/locales/nl-NL/setting.json +2 -0
- package/locales/pl-PL/chat.json +1 -0
- package/locales/pl-PL/modelProvider.json +20 -0
- package/locales/pl-PL/models.json +37 -7
- package/locales/pl-PL/plugin.json +1 -0
- package/locales/pl-PL/providers.json +1 -0
- package/locales/pl-PL/setting.json +2 -0
- package/locales/pt-BR/chat.json +1 -0
- package/locales/pt-BR/modelProvider.json +20 -0
- package/locales/pt-BR/models.json +51 -9
- package/locales/pt-BR/plugin.json +1 -0
- package/locales/pt-BR/providers.json +1 -0
- package/locales/pt-BR/setting.json +2 -0
- package/locales/ru-RU/chat.json +1 -0
- package/locales/ru-RU/modelProvider.json +20 -0
- package/locales/ru-RU/models.json +48 -7
- package/locales/ru-RU/plugin.json +1 -0
- package/locales/ru-RU/providers.json +1 -0
- package/locales/ru-RU/setting.json +2 -0
- package/locales/tr-TR/chat.json +1 -0
- package/locales/tr-TR/modelProvider.json +20 -0
- package/locales/tr-TR/models.json +48 -7
- package/locales/tr-TR/plugin.json +1 -0
- package/locales/tr-TR/providers.json +1 -0
- package/locales/tr-TR/setting.json +2 -0
- package/locales/vi-VN/chat.json +1 -0
- package/locales/vi-VN/modelProvider.json +20 -0
- package/locales/vi-VN/models.json +5 -5
- package/locales/vi-VN/plugin.json +1 -0
- package/locales/vi-VN/providers.json +1 -0
- package/locales/vi-VN/setting.json +2 -0
- package/locales/zh-CN/modelProvider.json +20 -20
- package/locales/zh-CN/models.json +49 -8
- package/locales/zh-CN/providers.json +1 -0
- package/locales/zh-CN/setting.json +2 -1
- package/locales/zh-TW/chat.json +1 -0
- package/locales/zh-TW/modelProvider.json +20 -0
- package/locales/zh-TW/models.json +29 -10
- package/locales/zh-TW/plugin.json +1 -0
- package/locales/zh-TW/providers.json +1 -0
- package/locales/zh-TW/setting.json +2 -0
- package/package.json +2 -2
- package/packages/database/src/models/__tests__/agent.test.ts +165 -4
- package/packages/database/src/models/agent.ts +46 -0
- package/packages/database/src/repositories/agentGroup/index.test.ts +498 -0
- package/packages/database/src/repositories/agentGroup/index.ts +150 -0
- package/packages/database/src/repositories/home/__tests__/index.test.ts +113 -1
- package/packages/database/src/repositories/home/index.ts +48 -67
- package/pnpm-workspace.yaml +1 -0
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Body.tsx +1 -1
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Cron/CronTopicGroup.tsx +84 -0
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/{Topic/CronTopicList → Cron}/CronTopicItem.tsx +1 -1
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/{Topic/CronTopicList → Cron}/index.tsx +23 -33
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/List/Item/Editing.tsx +12 -49
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/List/index.tsx +3 -1
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/TopicListContent/ThreadList/ThreadItem/Editing.tsx +12 -40
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/hooks/useTopicNavigation.ts +5 -1
- package/src/app/[variants]/(main)/agent/features/Conversation/MainChatInput/index.tsx +2 -2
- package/src/app/[variants]/(main)/agent/profile/features/AgentCronJobs/CronJobCards.tsx +1 -1
- package/src/app/[variants]/(main)/agent/profile/features/AgentCronJobs/CronJobForm.tsx +1 -1
- package/src/app/[variants]/(main)/group/_layout/Sidebar/AddGroupMemberModal/AvailableAgentList.tsx +0 -1
- package/src/app/[variants]/(main)/group/_layout/Sidebar/AddGroupMemberModal/index.tsx +5 -1
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentGroupItem/index.tsx +2 -6
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentGroupItem/useDropdownMenu.tsx +100 -0
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentItem/index.tsx +2 -4
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentItem/useDropdownMenu.tsx +149 -0
- package/src/app/[variants]/(main)/home/_layout/hooks/index.ts +0 -1
- package/src/app/[variants]/(main)/home/features/InputArea/index.tsx +1 -1
- package/src/components/InlineRename/index.tsx +121 -0
- package/src/features/ChatInput/InputEditor/index.tsx +1 -0
- package/src/features/EditorCanvas/DiffAllToolbar.tsx +1 -1
- package/src/features/NavPanel/components/NavItem.tsx +1 -1
- package/src/locales/default/setting.ts +2 -0
- package/src/server/routers/lambda/agent.ts +15 -0
- package/src/server/routers/lambda/agentGroup.ts +16 -0
- package/src/services/agent.ts +11 -0
- package/src/services/chatGroup/index.ts +11 -0
- package/src/store/agent/slices/cron/action.ts +108 -0
- package/src/store/agent/slices/cron/index.ts +1 -0
- package/src/store/agent/store.ts +3 -0
- package/src/store/home/slices/sidebarUI/action.test.ts +23 -22
- package/src/store/home/slices/sidebarUI/action.ts +37 -9
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/CronTopicList/CronTopicGroup.tsx +0 -74
- package/src/app/[variants]/(main)/group/features/ChangelogModal.tsx +0 -11
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/Item/useDropdownMenu.tsx +0 -62
- package/src/app/[variants]/(main)/home/_layout/hooks/useSessionItemMenuItems.tsx +0 -238
- package/src/hooks/useFetchCronTopicsWithJobInfo.ts +0 -56
|
@@ -44,28 +44,6 @@ env:
|
|
|
44
44
|
BUN_VERSION: 1.2.23
|
|
45
45
|
|
|
46
46
|
jobs:
|
|
47
|
-
test:
|
|
48
|
-
name: Code quality check
|
|
49
|
-
runs-on: ubuntu-latest
|
|
50
|
-
steps:
|
|
51
|
-
- name: Checkout base
|
|
52
|
-
uses: actions/checkout@v6
|
|
53
|
-
with:
|
|
54
|
-
fetch-depth: 0
|
|
55
|
-
|
|
56
|
-
- name: Setup Node & Bun
|
|
57
|
-
uses: ./.github/actions/setup-node-bun
|
|
58
|
-
with:
|
|
59
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
60
|
-
bun-version: ${{ env.BUN_VERSION }}
|
|
61
|
-
package-manager-cache: 'false'
|
|
62
|
-
|
|
63
|
-
- name: Install deps
|
|
64
|
-
run: bun i
|
|
65
|
-
|
|
66
|
-
- name: Lint
|
|
67
|
-
run: bun run lint
|
|
68
|
-
|
|
69
47
|
version:
|
|
70
48
|
name: Determine version
|
|
71
49
|
runs-on: ubuntu-latest
|
|
@@ -106,7 +84,7 @@ jobs:
|
|
|
106
84
|
echo "🚦 Release Version: ${{ steps.set_version.outputs.version }}"
|
|
107
85
|
|
|
108
86
|
build-macos:
|
|
109
|
-
needs: [version
|
|
87
|
+
needs: [version]
|
|
110
88
|
name: Build Desktop App (macOS)
|
|
111
89
|
if: inputs.build_macos
|
|
112
90
|
runs-on: ${{ matrix.os }}
|
|
@@ -126,10 +104,10 @@ jobs:
|
|
|
126
104
|
|
|
127
105
|
# node-linker=hoisted 模式将可以确保 asar 压缩可用
|
|
128
106
|
- name: Install dependencies
|
|
129
|
-
run:
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
107
|
+
run: |
|
|
108
|
+
pnpm install --node-linker=hoisted &
|
|
109
|
+
npm run install-isolated --prefix=./apps/desktop &
|
|
110
|
+
wait
|
|
133
111
|
|
|
134
112
|
- name: Set package version
|
|
135
113
|
run: npm run workflow:set-desktop-version ${{ needs.version.outputs.version }} ${{ inputs.channel }}
|
|
@@ -187,7 +165,7 @@ jobs:
|
|
|
187
165
|
retention-days: 5
|
|
188
166
|
|
|
189
167
|
build-windows:
|
|
190
|
-
needs: [version
|
|
168
|
+
needs: [version]
|
|
191
169
|
name: Build Desktop App (Windows)
|
|
192
170
|
if: inputs.build_windows
|
|
193
171
|
runs-on: windows-2025
|
|
@@ -203,10 +181,11 @@ jobs:
|
|
|
203
181
|
package-manager-cache: 'false'
|
|
204
182
|
|
|
205
183
|
- name: Install dependencies
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
184
|
+
shell: pwsh
|
|
185
|
+
run: |
|
|
186
|
+
$job1 = Start-Job -ScriptBlock { pnpm install --node-linker=hoisted }
|
|
187
|
+
$job2 = Start-Job -ScriptBlock { npm run install-isolated --prefix=./apps/desktop }
|
|
188
|
+
$job1, $job2 | Wait-Job | Receive-Job
|
|
210
189
|
|
|
211
190
|
- name: Set package version
|
|
212
191
|
run: npm run workflow:set-desktop-version ${{ needs.version.outputs.version }} ${{ inputs.channel }}
|
|
@@ -240,7 +219,7 @@ jobs:
|
|
|
240
219
|
retention-days: 5
|
|
241
220
|
|
|
242
221
|
build-linux:
|
|
243
|
-
needs: [version
|
|
222
|
+
needs: [version]
|
|
244
223
|
name: Build Desktop App (Linux)
|
|
245
224
|
if: inputs.build_linux
|
|
246
225
|
runs-on: ubuntu-latest
|
|
@@ -256,10 +235,10 @@ jobs:
|
|
|
256
235
|
package-manager-cache: 'false'
|
|
257
236
|
|
|
258
237
|
- name: Install dependencies
|
|
259
|
-
run:
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
238
|
+
run: |
|
|
239
|
+
pnpm install --node-linker=hoisted &
|
|
240
|
+
npm run install-isolated --prefix=./apps/desktop &
|
|
241
|
+
wait
|
|
263
242
|
|
|
264
243
|
- name: Set package version
|
|
265
244
|
run: npm run workflow:set-desktop-version ${{ needs.version.outputs.version }} ${{ inputs.channel }}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,58 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## [Version 2.0.0-next.266](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.265...v2.0.0-next.266)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2026-01-11**</sup>
|
|
8
|
+
|
|
9
|
+
#### 💄 Styles
|
|
10
|
+
|
|
11
|
+
- **misc**: Improve cron jobs style.
|
|
12
|
+
|
|
13
|
+
<br/>
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
17
|
+
|
|
18
|
+
#### Styles
|
|
19
|
+
|
|
20
|
+
- **misc**: Improve cron jobs style, closes [#11420](https://github.com/lobehub/lobe-chat/issues/11420) ([d1602f6](https://github.com/lobehub/lobe-chat/commit/d1602f6))
|
|
21
|
+
|
|
22
|
+
</details>
|
|
23
|
+
|
|
24
|
+
<div align="right">
|
|
25
|
+
|
|
26
|
+
[](#readme-top)
|
|
27
|
+
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
## [Version 2.0.0-next.265](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.264...v2.0.0-next.265)
|
|
31
|
+
|
|
32
|
+
<sup>Released on **2026-01-11**</sup>
|
|
33
|
+
|
|
34
|
+
#### 🐛 Bug Fixes
|
|
35
|
+
|
|
36
|
+
- **misc**: Fix duplicate agent and group, Fix Windows desktop build error with macOS native module, force plain text paste in ChatInput editor.
|
|
37
|
+
|
|
38
|
+
<br/>
|
|
39
|
+
|
|
40
|
+
<details>
|
|
41
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
42
|
+
|
|
43
|
+
#### What's fixed
|
|
44
|
+
|
|
45
|
+
- **misc**: Fix duplicate agent and group, closes [#11411](https://github.com/lobehub/lobe-chat/issues/11411) ([bc8aea4](https://github.com/lobehub/lobe-chat/commit/bc8aea4))
|
|
46
|
+
- **misc**: Fix Windows desktop build error with macOS native module, closes [#11417](https://github.com/lobehub/lobe-chat/issues/11417) ([67a8114](https://github.com/lobehub/lobe-chat/commit/67a8114))
|
|
47
|
+
- **misc**: Force plain text paste in ChatInput editor, closes [#11414](https://github.com/lobehub/lobe-chat/issues/11414) ([70daf13](https://github.com/lobehub/lobe-chat/commit/70daf13))
|
|
48
|
+
|
|
49
|
+
</details>
|
|
50
|
+
|
|
51
|
+
<div align="right">
|
|
52
|
+
|
|
53
|
+
[](#readme-top)
|
|
54
|
+
|
|
55
|
+
</div>
|
|
56
|
+
|
|
5
57
|
## [Version 2.0.0-next.264](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.263...v2.0.0-next.264)
|
|
6
58
|
|
|
7
59
|
<sup>Released on **2026-01-11**</sup>
|
|
@@ -8,19 +8,31 @@
|
|
|
8
8
|
*
|
|
9
9
|
* This module automatically resolves the full dependency tree.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
11
|
import fs from 'node:fs';
|
|
12
|
+
import os from 'node:os';
|
|
13
13
|
import path from 'node:path';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
|
|
16
16
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Get the current target platform
|
|
20
|
+
* During build, electron-builder sets npm_config_platform
|
|
21
|
+
* Falls back to os.platform() for development
|
|
22
|
+
*/
|
|
23
|
+
function getTargetPlatform() {
|
|
24
|
+
return process.env.npm_config_platform || os.platform();
|
|
25
|
+
}
|
|
26
|
+
const isDarwin = getTargetPlatform() === 'darwin';
|
|
18
27
|
/**
|
|
19
28
|
* List of native modules that need special handling
|
|
20
29
|
* Only add the top-level native modules here - dependencies are resolved automatically
|
|
30
|
+
*
|
|
31
|
+
* Platform-specific modules are only included when building for their target platform
|
|
21
32
|
*/
|
|
22
33
|
export const nativeModules = [
|
|
23
|
-
|
|
34
|
+
// macOS-only native modules
|
|
35
|
+
...(isDarwin ? ['node-mac-permissions'] : []),
|
|
24
36
|
// Add more native modules here as needed
|
|
25
37
|
// e.g., 'better-sqlite3', 'sharp', etc.
|
|
26
38
|
];
|
|
@@ -32,7 +44,11 @@ export const nativeModules = [
|
|
|
32
44
|
* @param {string} nodeModulesPath - Path to node_modules directory
|
|
33
45
|
* @returns {Set<string>} Set of all dependencies
|
|
34
46
|
*/
|
|
35
|
-
function resolveDependencies(
|
|
47
|
+
function resolveDependencies(
|
|
48
|
+
moduleName,
|
|
49
|
+
visited = new Set(),
|
|
50
|
+
nodeModulesPath = path.join(__dirname, 'node_modules'),
|
|
51
|
+
) {
|
|
36
52
|
if (visited.has(moduleName)) {
|
|
37
53
|
return visited;
|
|
38
54
|
}
|
|
@@ -4,6 +4,10 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
4
4
|
import type { App } from '@/core/App';
|
|
5
5
|
import type { IpcContext } from '@/utils/ipc';
|
|
6
6
|
import { IpcHandler } from '@/utils/ipc/base';
|
|
7
|
+
import {
|
|
8
|
+
__resetMacPermissionsModuleCache,
|
|
9
|
+
__setMacPermissionsModule,
|
|
10
|
+
} from '@/utils/permissions';
|
|
7
11
|
|
|
8
12
|
import SystemController from '../SystemCtr';
|
|
9
13
|
|
|
@@ -131,6 +135,9 @@ describe('SystemController', () => {
|
|
|
131
135
|
ipcHandlers.clear();
|
|
132
136
|
ipcMainHandleMock.mockClear();
|
|
133
137
|
(IpcHandler.getInstance() as any).registeredChannels?.clear();
|
|
138
|
+
// Reset and inject mock permissions module for testing
|
|
139
|
+
__resetMacPermissionsModuleCache();
|
|
140
|
+
__setMacPermissionsModule(permissionsMock as any);
|
|
134
141
|
controller = new SystemController(mockApp);
|
|
135
142
|
});
|
|
136
143
|
|
|
@@ -169,6 +176,8 @@ describe('SystemController', () => {
|
|
|
169
176
|
it('should return true on non-macOS when requesting accessibility access', async () => {
|
|
170
177
|
const { macOS } = await import('electron-is');
|
|
171
178
|
vi.mocked(macOS).mockReturnValue(false);
|
|
179
|
+
// Clear the injected module to simulate non-macOS behavior
|
|
180
|
+
__setMacPermissionsModule(null);
|
|
172
181
|
|
|
173
182
|
const result = await invokeIpc('system.requestAccessibilityAccess');
|
|
174
183
|
|
|
@@ -177,6 +186,7 @@ describe('SystemController', () => {
|
|
|
177
186
|
|
|
178
187
|
// Reset
|
|
179
188
|
vi.mocked(macOS).mockReturnValue(true);
|
|
189
|
+
__setMacPermissionsModule(permissionsMock as any);
|
|
180
190
|
});
|
|
181
191
|
});
|
|
182
192
|
|
|
@@ -226,6 +236,8 @@ describe('SystemController', () => {
|
|
|
226
236
|
const { macOS } = await import('electron-is');
|
|
227
237
|
const { shell } = await import('electron');
|
|
228
238
|
vi.mocked(macOS).mockReturnValue(false);
|
|
239
|
+
// Clear the injected module to simulate non-macOS behavior
|
|
240
|
+
__setMacPermissionsModule(null);
|
|
229
241
|
|
|
230
242
|
const result = await invokeIpc('system.requestMicrophoneAccess');
|
|
231
243
|
|
|
@@ -235,6 +247,7 @@ describe('SystemController', () => {
|
|
|
235
247
|
|
|
236
248
|
// Reset
|
|
237
249
|
vi.mocked(macOS).mockReturnValue(true);
|
|
250
|
+
__setMacPermissionsModule(permissionsMock as any);
|
|
238
251
|
});
|
|
239
252
|
});
|
|
240
253
|
|
|
@@ -1,22 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Unified macOS Permission Management using node-mac-permissions
|
|
3
3
|
* @see https://github.com/codebytere/node-mac-permissions
|
|
4
|
+
*
|
|
5
|
+
* IMPORTANT: node-mac-permissions is a macOS-only native module.
|
|
6
|
+
* It must be dynamically imported to prevent loading errors on Windows/Linux.
|
|
4
7
|
*/
|
|
5
8
|
import { shell } from 'electron';
|
|
6
9
|
import { macOS } from 'electron-is';
|
|
7
|
-
import {
|
|
8
|
-
askForAccessibilityAccess,
|
|
9
|
-
askForCameraAccess,
|
|
10
|
-
askForFullDiskAccess,
|
|
11
|
-
askForMicrophoneAccess,
|
|
12
|
-
askForScreenCaptureAccess,
|
|
13
|
-
getAuthStatus,
|
|
14
|
-
type AuthType,
|
|
15
|
-
type PermissionType,
|
|
16
|
-
} from 'node-mac-permissions';
|
|
17
10
|
|
|
18
11
|
import { createLogger } from './logger';
|
|
19
12
|
|
|
13
|
+
// Type definitions - use module types when available, fallback to local definition
|
|
14
|
+
// Note: We don't import the module statically, so we need local type definitions
|
|
15
|
+
type AuthType =
|
|
16
|
+
| 'accessibility'
|
|
17
|
+
| 'calendar'
|
|
18
|
+
| 'camera'
|
|
19
|
+
| 'contacts'
|
|
20
|
+
| 'full-disk-access'
|
|
21
|
+
| 'input-monitoring'
|
|
22
|
+
| 'location'
|
|
23
|
+
| 'microphone'
|
|
24
|
+
| 'reminders'
|
|
25
|
+
| 'screen'
|
|
26
|
+
| 'speech-recognition';
|
|
27
|
+
|
|
28
|
+
type PermissionType = 'authorized' | 'denied' | 'not determined' | 'restricted';
|
|
29
|
+
|
|
30
|
+
// Lazy-loaded module cache
|
|
31
|
+
let macPermissionsModule: typeof import('node-mac-permissions') | null = null;
|
|
32
|
+
|
|
33
|
+
// Test injection override (set via __setMacPermissionsModule for testing)
|
|
34
|
+
let testModuleOverride: typeof import('node-mac-permissions') | null = null;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Lazily load the node-mac-permissions module (macOS only)
|
|
38
|
+
* Returns null on non-macOS platforms
|
|
39
|
+
*/
|
|
40
|
+
function getMacPermissionsModule(): typeof import('node-mac-permissions') | null {
|
|
41
|
+
// Allow test injection to override the module
|
|
42
|
+
if (testModuleOverride) {
|
|
43
|
+
return testModuleOverride;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!macOS()) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!macPermissionsModule) {
|
|
51
|
+
// Dynamic require to prevent module loading on non-macOS platforms
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
53
|
+
macPermissionsModule = require('node-mac-permissions');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return macPermissionsModule;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Reset the module cache (for testing purposes)
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
export function __resetMacPermissionsModuleCache(): void {
|
|
64
|
+
macPermissionsModule = null;
|
|
65
|
+
testModuleOverride = null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Set the mac permissions module (for testing purposes)
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
export function __setMacPermissionsModule(
|
|
73
|
+
module: typeof import('node-mac-permissions') | null,
|
|
74
|
+
): void {
|
|
75
|
+
testModuleOverride = module;
|
|
76
|
+
}
|
|
77
|
+
|
|
20
78
|
const logger = createLogger('utils:permissions');
|
|
21
79
|
|
|
22
80
|
/**
|
|
@@ -42,12 +100,13 @@ function normalizeStatus(status: PermissionType | 'not determined'): PermissionS
|
|
|
42
100
|
* Get the authorization status for a specific permission type
|
|
43
101
|
*/
|
|
44
102
|
export function getPermissionStatus(type: AuthType): PermissionStatus {
|
|
45
|
-
|
|
103
|
+
const macPermissions = getMacPermissionsModule();
|
|
104
|
+
if (!macPermissions) {
|
|
46
105
|
logger.debug(`[Permission] Not macOS, returning granted for ${type}`);
|
|
47
106
|
return 'granted';
|
|
48
107
|
}
|
|
49
108
|
|
|
50
|
-
const status = getAuthStatus(type);
|
|
109
|
+
const status = macPermissions.getAuthStatus(type);
|
|
51
110
|
const normalized = normalizeStatus(status);
|
|
52
111
|
logger.info(`[Permission] ${type} status: ${normalized}`);
|
|
53
112
|
return normalized;
|
|
@@ -65,13 +124,14 @@ export function getAccessibilityStatus(): PermissionStatus {
|
|
|
65
124
|
* Opens System Preferences to the Accessibility pane
|
|
66
125
|
*/
|
|
67
126
|
export function requestAccessibilityAccess(): boolean {
|
|
68
|
-
|
|
127
|
+
const macPermissions = getMacPermissionsModule();
|
|
128
|
+
if (!macPermissions) {
|
|
69
129
|
logger.info('[Accessibility] Not macOS, returning true');
|
|
70
130
|
return true;
|
|
71
131
|
}
|
|
72
132
|
|
|
73
133
|
logger.info('[Accessibility] Requesting accessibility access...');
|
|
74
|
-
askForAccessibilityAccess();
|
|
134
|
+
macPermissions.askForAccessibilityAccess();
|
|
75
135
|
|
|
76
136
|
// Check the status after requesting
|
|
77
137
|
const status = getPermissionStatus('accessibility');
|
|
@@ -90,7 +150,8 @@ export function getMicrophoneStatus(): PermissionStatus {
|
|
|
90
150
|
* Shows the system permission dialog if not determined
|
|
91
151
|
*/
|
|
92
152
|
export async function requestMicrophoneAccess(): Promise<boolean> {
|
|
93
|
-
|
|
153
|
+
const macPermissions = getMacPermissionsModule();
|
|
154
|
+
if (!macPermissions) {
|
|
94
155
|
logger.info('[Microphone] Not macOS, returning true');
|
|
95
156
|
return true;
|
|
96
157
|
}
|
|
@@ -106,7 +167,7 @@ export async function requestMicrophoneAccess(): Promise<boolean> {
|
|
|
106
167
|
if (currentStatus === 'not-determined') {
|
|
107
168
|
logger.info('[Microphone] Status is not-determined, requesting access...');
|
|
108
169
|
try {
|
|
109
|
-
const result = await askForMicrophoneAccess();
|
|
170
|
+
const result = await macPermissions.askForMicrophoneAccess();
|
|
110
171
|
logger.info(`[Microphone] askForMicrophoneAccess result: ${result}`);
|
|
111
172
|
return result === 'authorized';
|
|
112
173
|
} catch (error) {
|
|
@@ -135,7 +196,8 @@ export function getCameraStatus(): PermissionStatus {
|
|
|
135
196
|
* Shows the system permission dialog if not determined
|
|
136
197
|
*/
|
|
137
198
|
export async function requestCameraAccess(): Promise<boolean> {
|
|
138
|
-
|
|
199
|
+
const macPermissions = getMacPermissionsModule();
|
|
200
|
+
if (!macPermissions) {
|
|
139
201
|
logger.info('[Camera] Not macOS, returning true');
|
|
140
202
|
return true;
|
|
141
203
|
}
|
|
@@ -151,7 +213,7 @@ export async function requestCameraAccess(): Promise<boolean> {
|
|
|
151
213
|
if (currentStatus === 'not-determined') {
|
|
152
214
|
logger.info('[Camera] Status is not-determined, requesting access...');
|
|
153
215
|
try {
|
|
154
|
-
const result = await askForCameraAccess();
|
|
216
|
+
const result = await macPermissions.askForCameraAccess();
|
|
155
217
|
logger.info(`[Camera] askForCameraAccess result: ${result}`);
|
|
156
218
|
return result === 'authorized';
|
|
157
219
|
} catch (error) {
|
|
@@ -181,7 +243,8 @@ export function getScreenCaptureStatus(): PermissionStatus {
|
|
|
181
243
|
* @param openPreferences - Whether to open System Preferences (default: true)
|
|
182
244
|
*/
|
|
183
245
|
export async function requestScreenCaptureAccess(openPreferences = true): Promise<boolean> {
|
|
184
|
-
|
|
246
|
+
const macPermissions = getMacPermissionsModule();
|
|
247
|
+
if (!macPermissions) {
|
|
185
248
|
logger.info('[Screen] Not macOS, returning true');
|
|
186
249
|
return true;
|
|
187
250
|
}
|
|
@@ -196,7 +259,7 @@ export async function requestScreenCaptureAccess(openPreferences = true): Promis
|
|
|
196
259
|
|
|
197
260
|
// Request screen capture access - this will prompt the user or open settings
|
|
198
261
|
logger.info('[Screen] Requesting screen capture access...');
|
|
199
|
-
askForScreenCaptureAccess(openPreferences);
|
|
262
|
+
macPermissions.askForScreenCaptureAccess(openPreferences);
|
|
200
263
|
|
|
201
264
|
// Check the status after requesting
|
|
202
265
|
const newStatus = getPermissionStatus('screen');
|
|
@@ -218,13 +281,14 @@ export function getFullDiskAccessStatus(): PermissionStatus {
|
|
|
218
281
|
* user must manually add the app in System Settings
|
|
219
282
|
*/
|
|
220
283
|
export function requestFullDiskAccess(): void {
|
|
221
|
-
|
|
284
|
+
const macPermissions = getMacPermissionsModule();
|
|
285
|
+
if (!macPermissions) {
|
|
222
286
|
logger.info('[FullDiskAccess] Not macOS, skipping');
|
|
223
287
|
return;
|
|
224
288
|
}
|
|
225
289
|
|
|
226
290
|
logger.info('[FullDiskAccess] Opening Full Disk Access settings...');
|
|
227
|
-
askForFullDiskAccess();
|
|
291
|
+
macPermissions.askForFullDiskAccess();
|
|
228
292
|
}
|
|
229
293
|
|
|
230
294
|
/**
|
package/changelog/v1.json
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"children": {
|
|
4
|
+
"improvements": [
|
|
5
|
+
"Improve cron jobs style."
|
|
6
|
+
]
|
|
7
|
+
},
|
|
8
|
+
"date": "2026-01-11",
|
|
9
|
+
"version": "2.0.0-next.266"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"children": {
|
|
13
|
+
"fixes": [
|
|
14
|
+
"Fix duplicate agent and group, Fix Windows desktop build error with macOS native module, force plain text paste in ChatInput editor."
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"date": "2026-01-11",
|
|
18
|
+
"version": "2.0.0-next.265"
|
|
19
|
+
},
|
|
2
20
|
{
|
|
3
21
|
"children": {
|
|
4
22
|
"fixes": [
|
package/locales/ar/chat.json
CHANGED
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"extendParams.reasoningEffort.title": "شدة التفكير",
|
|
64
64
|
"extendParams.textVerbosity.title": "مستوى تفصيل النص الناتج",
|
|
65
65
|
"extendParams.thinking.title": "مفتاح التفكير العميق",
|
|
66
|
+
"extendParams.thinkingBudget.title": "ميزانية التفكير",
|
|
66
67
|
"extendParams.thinkingLevel.title": "مستوى التفكير",
|
|
67
68
|
"extendParams.title": "ميزات توسيع النموذج",
|
|
68
69
|
"extendParams.urlContext.desc": "عند التفعيل، سيتم تحليل الروابط تلقائيًا لاستخراج محتوى صفحة الويب الفعلي",
|
|
@@ -194,6 +194,26 @@
|
|
|
194
194
|
"providerModels.item.modelConfig.deployName.title": "اسم نشر النموذج",
|
|
195
195
|
"providerModels.item.modelConfig.displayName.placeholder": "يرجى إدخال اسم العرض للنموذج، مثل ChatGPT، GPT-4، إلخ.",
|
|
196
196
|
"providerModels.item.modelConfig.displayName.title": "اسم عرض النموذج",
|
|
197
|
+
"providerModels.item.modelConfig.extendParams.extra": "اختر المعلمات الموسعة التي يدعمها النموذج. مرّر المؤشر فوق خيار لمعاينة عناصر التحكم. قد تؤدي التهيئة غير الصحيحة إلى فشل الطلب.",
|
|
198
|
+
"providerModels.item.modelConfig.extendParams.options.disableContextCaching.hint": "لنماذج Claude؛ يمكن أن يقلل التكلفة ويسرّع الاستجابات.",
|
|
199
|
+
"providerModels.item.modelConfig.extendParams.options.enableReasoning.hint": "لنماذج Claude وDeepSeek وغيرها من نماذج الاستدلال؛ يفعّل التفكير العميق.",
|
|
200
|
+
"providerModels.item.modelConfig.extendParams.options.gpt5ReasoningEffort.hint": "لسلسلة GPT-5؛ يتحكم في شدة الاستدلال.",
|
|
201
|
+
"providerModels.item.modelConfig.extendParams.options.gpt5_1ReasoningEffort.hint": "لسلسلة GPT-5.1؛ يتحكم في شدة الاستدلال.",
|
|
202
|
+
"providerModels.item.modelConfig.extendParams.options.gpt5_2ProReasoningEffort.hint": "لسلسلة GPT-5.2 Pro؛ يتحكم في شدة الاستدلال.",
|
|
203
|
+
"providerModels.item.modelConfig.extendParams.options.gpt5_2ReasoningEffort.hint": "لسلسلة GPT-5.2؛ يتحكم في شدة الاستدلال.",
|
|
204
|
+
"providerModels.item.modelConfig.extendParams.options.imageAspectRatio.hint": "لنماذج توليد الصور من Gemini؛ يتحكم في نسبة العرض إلى الارتفاع للصور المُولدة.",
|
|
205
|
+
"providerModels.item.modelConfig.extendParams.options.imageResolution.hint": "لنماذج توليد الصور من Gemini 3؛ يتحكم في دقة الصور المُولدة.",
|
|
206
|
+
"providerModels.item.modelConfig.extendParams.options.reasoningBudgetToken.hint": "لنماذج Claude وQwen3 وما شابهها؛ يتحكم في ميزانية الرموز المخصصة للاستدلال.",
|
|
207
|
+
"providerModels.item.modelConfig.extendParams.options.reasoningEffort.hint": "لنماذج OpenAI وغيرها من النماذج القادرة على الاستدلال؛ يتحكم في جهد الاستدلال.",
|
|
208
|
+
"providerModels.item.modelConfig.extendParams.options.textVerbosity.hint": "لسلسلة GPT-5+؛ يتحكم في تفصيل النص الناتج.",
|
|
209
|
+
"providerModels.item.modelConfig.extendParams.options.thinking.hint": "لبعض نماذج Doubao؛ يسمح للنموذج بتحديد ما إذا كان يجب التفكير بعمق.",
|
|
210
|
+
"providerModels.item.modelConfig.extendParams.options.thinkingBudget.hint": "لسلسلة Gemini؛ يتحكم في ميزانية التفكير.",
|
|
211
|
+
"providerModels.item.modelConfig.extendParams.options.thinkingLevel.hint": "لنماذج المعاينة السريعة من Gemini 3 Flash؛ يتحكم في عمق التفكير.",
|
|
212
|
+
"providerModels.item.modelConfig.extendParams.options.thinkingLevel2.hint": "لنماذج المعاينة الاحترافية من Gemini 3 Pro؛ يتحكم في عمق التفكير.",
|
|
213
|
+
"providerModels.item.modelConfig.extendParams.options.urlContext.hint": "لسلسلة Gemini؛ يدعم توفير سياق من خلال عنوان URL.",
|
|
214
|
+
"providerModels.item.modelConfig.extendParams.placeholder": "اختر المعلمات الموسعة لتفعيلها",
|
|
215
|
+
"providerModels.item.modelConfig.extendParams.previewFallback": "المعاينة غير متوفرة",
|
|
216
|
+
"providerModels.item.modelConfig.extendParams.title": "المعلمات الموسعة",
|
|
197
217
|
"providerModels.item.modelConfig.files.extra": "تنفيذ رفع الملفات الحالي هو حل مؤقت، مخصص للتجربة الذاتية فقط. يرجى الانتظار حتى تتوفر إمكانيات رفع الملفات الكاملة في المستقبل.",
|
|
198
218
|
"providerModels.item.modelConfig.files.title": "دعم رفع الملفات",
|
|
199
219
|
"providerModels.item.modelConfig.functionCall.extra": "سيمكن هذا الإعداد النموذج من استخدام الأدوات، ولكن قدرة النموذج الفعلية على استخدامها تعتمد عليه بالكامل؛ يرجى الاختبار بنفسك.",
|
package/locales/ar/models.json
CHANGED
|
@@ -271,20 +271,20 @@
|
|
|
271
271
|
"chatgpt-4o-latest.description": "ChatGPT-4o هو نموذج ديناميكي يتم تحديثه في الوقت الفعلي، يجمع بين الفهم العميق والقدرة على التوليد لتلبية احتياجات الاستخدام الواسعة مثل دعم العملاء والتعليم والدعم الفني.",
|
|
272
272
|
"claude-2.0.description": "Claude 2 يقدم تحسينات رئيسية للمؤسسات، بما في ذلك سياق 200 ألف رمز، تقليل الهلوسة، دعم التعليمات النظامية، وميزة جديدة: استدعاء الأدوات.",
|
|
273
273
|
"claude-2.1.description": "Claude 2 يقدم تحسينات رئيسية للمؤسسات، بما في ذلك سياق 200 ألف رمز، تقليل الهلوسة، دعم التعليمات النظامية، وميزة جديدة: استدعاء الأدوات.",
|
|
274
|
-
"claude-3-5-haiku-20241022.description": "Claude 3.5 Haiku هو أسرع نموذج من الجيل التالي من Anthropic
|
|
274
|
+
"claude-3-5-haiku-20241022.description": "Claude 3.5 Haiku هو أسرع نموذج من الجيل التالي من Anthropic، مع تحسينات في المهارات وتفوق على النموذج الرائد السابق Claude 3 Opus في العديد من المعايير.",
|
|
275
275
|
"claude-3-5-haiku-latest.description": "Claude 3.5 Haiku يقدم استجابات سريعة للمهام الخفيفة.",
|
|
276
|
-
"claude-3-7-sonnet-20250219.description": "Claude 3.7
|
|
276
|
+
"claude-3-7-sonnet-20250219.description": "Claude Sonnet 3.7 هو أذكى نموذج من Anthropic وأول نموذج هجيني للاستدلال في السوق، يدعم الاستجابات الفورية أو التفكير المطول مع تحكم دقيق.",
|
|
277
277
|
"claude-3-7-sonnet-latest.description": "Claude 3.7 Sonnet هو أحدث وأقوى نموذج من Anthropic للمهام المعقدة، يتميز بالأداء العالي، الذكاء، الطلاقة، والفهم العميق.",
|
|
278
278
|
"claude-3-haiku-20240307.description": "Claude 3 Haiku هو أسرع وأصغر نموذج من Anthropic، مصمم لتقديم استجابات شبه فورية بأداء سريع ودقيق.",
|
|
279
279
|
"claude-3-opus-20240229.description": "Claude 3 Opus هو أقوى نموذج من Anthropic للمهام المعقدة، يتميز بالأداء العالي، الذكاء، الطلاقة، والفهم.",
|
|
280
280
|
"claude-3-sonnet-20240229.description": "Claude 3 Sonnet يوازن بين الذكاء والسرعة لتلبية احتياجات المؤسسات، ويوفر فائدة عالية بتكلفة أقل ونشر موثوق على نطاق واسع.",
|
|
281
|
-
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 هو أسرع
|
|
281
|
+
"claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 هو أسرع وأكثر نماذج Haiku ذكاءً من Anthropic، يتميز بسرعة فائقة وقدرة على التفكير المطول.",
|
|
282
282
|
"claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking هو إصدار متقدم يمكنه عرض عملية تفكيره.",
|
|
283
283
|
"claude-opus-4-1-20250805.description": "Claude Opus 4.1 هو أحدث وأقوى نموذج من Anthropic للمهام المعقدة، يتميز بالأداء العالي، الذكاء، الطلاقة، والفهم.",
|
|
284
|
-
"claude-opus-4-20250514.description": "Claude Opus 4 هو أقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء العالي،
|
|
284
|
+
"claude-opus-4-20250514.description": "Claude Opus 4 هو أقوى نموذج من Anthropic للمهام المعقدة للغاية، يتميز بالأداء العالي، الذكاء، الطلاقة، والفهم العميق.",
|
|
285
285
|
"claude-opus-4-5-20251101.description": "Claude Opus 4.5 هو النموذج الرائد من Anthropic، يجمع بين الذكاء الاستثنائي والأداء القابل للتوسع، مثالي للمهام المعقدة التي تتطلب استجابات عالية الجودة وتفكير متقدم.",
|
|
286
286
|
"claude-sonnet-4-20250514-thinking.description": "Claude Sonnet 4 Thinking يمكنه تقديم استجابات شبه فورية أو تفكير متسلسل مرئي.",
|
|
287
|
-
"claude-sonnet-4-20250514.description": "Claude Sonnet 4
|
|
287
|
+
"claude-sonnet-4-20250514.description": "Claude Sonnet 4 هو أذكى نموذج من Anthropic حتى الآن، يوفر استجابات شبه فورية أو تفكير متسلسل خطوة بخطوة مع تحكم دقيق لمستخدمي واجهة البرمجة.",
|
|
288
288
|
"claude-sonnet-4-5-20250929.description": "Claude Sonnet 4.5 هو أذكى نموذج من Anthropic حتى الآن.",
|
|
289
289
|
"codegeex-4.description": "CodeGeeX-4 هو مساعد برمجة ذكي يدعم الأسئلة والأجوبة متعددة اللغات وإكمال الشيفرة لزيادة إنتاجية المطورين.",
|
|
290
290
|
"codegeex4-all-9b.description": "CodeGeeX4-ALL-9B هو نموذج توليد شيفرة متعدد اللغات يدعم الإكمال والتوليد، تفسير الشيفرة، البحث عبر الإنترنت، استدعاء الوظائف، وأسئلة وأجوبة على مستوى المستودع، ويغطي مجموعة واسعة من سيناريوهات تطوير البرمجيات. يُعد من أفضل نماذج الشيفرة تحت 10B.",
|
|
@@ -355,7 +355,7 @@
|
|
|
355
355
|
"deepseek-ai/deepseek-v3.1-terminus.description": "DeepSeek V3.1 هو نموذج تفكير من الجيل التالي يتمتع بقدرات أقوى في التفكير المعقد وسلسلة التفكير لمهام التحليل العميق.",
|
|
356
356
|
"deepseek-ai/deepseek-v3.1.description": "DeepSeek V3.1 هو نموذج تفكير من الجيل التالي يتمتع بقدرات أقوى في التفكير المعقد وسلسلة التفكير لمهام التحليل العميق.",
|
|
357
357
|
"deepseek-ai/deepseek-vl2.description": "DeepSeek-VL2 هو نموذج رؤية-لغة MoE يعتمد على DeepSeekMoE-27B مع تنشيط متفرق، ويحقق أداءً قويًا باستخدام 4.5 مليار معلمة نشطة فقط. يتميز في الأسئلة البصرية، وOCR، وفهم المستندات/الجداول/المخططات، والتأريض البصري.",
|
|
358
|
-
"deepseek-chat.description": "
|
|
358
|
+
"deepseek-chat.description": "DeepSeek V3.2 يوازن بين الاستدلال وطول المخرجات لمهام الأسئلة والأجوبة اليومية والمهام الوكيلة. يحقق نتائج مماثلة لـ GPT-5 في المعايير العامة، وهو أول من يدمج التفكير في استخدام الأدوات، مما يجعله رائدًا في تقييمات النماذج مفتوحة المصدر.",
|
|
359
359
|
"deepseek-coder-33B-instruct.description": "DeepSeek Coder 33B هو نموذج لغة برمجية تم تدريبه على 2 تريليون رمز (87٪ كود، 13٪ نص صيني/إنجليزي). يقدم نافذة سياق 16K ومهام الإكمال في المنتصف، ويوفر إكمال كود على مستوى المشاريع وملء مقاطع الكود.",
|
|
360
360
|
"deepseek-coder-v2.description": "DeepSeek Coder V2 هو نموذج كود MoE مفتوح المصدر يتميز بأداء قوي في مهام البرمجة، ويضاهي GPT-4 Turbo.",
|
|
361
361
|
"deepseek-coder-v2:236b.description": "DeepSeek Coder V2 هو نموذج كود MoE مفتوح المصدر يتميز بأداء قوي في مهام البرمجة، ويضاهي GPT-4 Turbo.",
|
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
"deepseek-r1-fast-online.description": "الإصدار الكامل السريع من DeepSeek R1 مع بحث ويب في الوقت الحقيقي، يجمع بين قدرات بحجم 671B واستجابة أسرع.",
|
|
379
379
|
"deepseek-r1-online.description": "الإصدار الكامل من DeepSeek R1 مع 671 مليار معلمة وبحث ويب في الوقت الحقيقي، يوفر فهمًا وتوليدًا أقوى.",
|
|
380
380
|
"deepseek-r1.description": "يستخدم DeepSeek-R1 بيانات البداية الباردة قبل التعلم المعزز ويؤدي أداءً مماثلًا لـ OpenAI-o1 في الرياضيات، والبرمجة، والتفكير.",
|
|
381
|
-
"deepseek-reasoner.description": "
|
|
381
|
+
"deepseek-reasoner.description": "DeepSeek V3.2 Thinking هو نموذج استدلال عميق يولد سلسلة من الأفكار قبل المخرجات لتحقيق دقة أعلى، مع نتائج تنافسية واستدلال يقارن بـ Gemini-3.0-Pro.",
|
|
382
382
|
"deepseek-v2.description": "DeepSeek V2 هو نموذج MoE فعال لمعالجة منخفضة التكلفة.",
|
|
383
383
|
"deepseek-v2:236b.description": "DeepSeek V2 236B هو نموذج DeepSeek الموجه للبرمجة مع قدرات قوية في توليد الكود.",
|
|
384
384
|
"deepseek-v3-0324.description": "DeepSeek-V3-0324 هو نموذج MoE يحتوي على 671 مليار معلمة يتميز بقوة في البرمجة، والقدرات التقنية، وفهم السياق، والتعامل مع النصوص الطويلة.",
|
|
@@ -471,7 +471,7 @@
|
|
|
471
471
|
"ernie-tiny-8k.description": "ERNIE Tiny 8K هو نموذج فائق الخفة للأسئلة البسيطة، والتصنيف، والاستدلال منخفض التكلفة.",
|
|
472
472
|
"ernie-x1-turbo-32k.description": "ERNIE X1 Turbo 32K هو نموذج تفكير سريع بسياق 32K للاستدلال المعقد والدردشة متعددة الأدوار.",
|
|
473
473
|
"ernie-x1.1-preview.description": "معاينة ERNIE X1.1 هو نموذج تفكير مخصص للتقييم والاختبار.",
|
|
474
|
-
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0
|
|
474
|
+
"fal-ai/bytedance/seedream/v4.description": "Seedream 4.0، من تطوير فريق ByteDance Seed، يدعم إدخال النصوص والصور لتوليد صور عالية الجودة وقابلة للتحكم بدرجة كبيرة من خلال الأوامر.",
|
|
475
475
|
"fal-ai/flux-kontext/dev.description": "نموذج FLUX.1 يركز على تحرير الصور، ويدعم إدخال النصوص والصور.",
|
|
476
476
|
"fal-ai/flux-pro/kontext.description": "FLUX.1 Kontext [pro] يقبل النصوص وصور مرجعية كمدخلات، مما يتيح تعديلات محلية مستهدفة وتحولات معقدة في المشهد العام.",
|
|
477
477
|
"fal-ai/flux/krea.description": "Flux Krea [dev] هو نموذج لتوليد الصور يتميز بميول جمالية نحو صور أكثر واقعية وطبيعية.",
|
|
@@ -479,8 +479,8 @@
|
|
|
479
479
|
"fal-ai/hunyuan-image/v3.description": "نموذج قوي لتوليد الصور متعدد الوسائط أصلي.",
|
|
480
480
|
"fal-ai/imagen4/preview.description": "نموذج عالي الجودة لتوليد الصور من Google.",
|
|
481
481
|
"fal-ai/nano-banana.description": "Nano Banana هو أحدث وأسرع وأكثر نماذج Google كفاءةً لتوليد وتحرير الصور من خلال المحادثة.",
|
|
482
|
-
"fal-ai/qwen-image-edit.description": "نموذج تحرير صور احترافي من فريق Qwen يدعم التعديلات الدلالية والمظهرية،
|
|
483
|
-
"fal-ai/qwen-image.description": "نموذج
|
|
482
|
+
"fal-ai/qwen-image-edit.description": "نموذج تحرير صور احترافي من فريق Qwen، يدعم التعديلات الدلالية والمظهرية، تحرير النصوص بدقة باللغتين الصينية والإنجليزية، نقل الأنماط، التدوير، والمزيد.",
|
|
483
|
+
"fal-ai/qwen-image.description": "نموذج قوي لتوليد الصور من فريق Qwen يتميز بعرض نصوص صينية قوية وأنماط بصرية متنوعة.",
|
|
484
484
|
"flux-1-schnell.description": "نموذج تحويل النص إلى صورة يحتوي على 12 مليار معلمة من Black Forest Labs يستخدم تقنيات تقطير الانتشار العدائي الكامن لتوليد صور عالية الجودة في 1-4 خطوات. ينافس البدائل المغلقة ومتاح بموجب ترخيص Apache-2.0 للاستخدام الشخصي والبحثي والتجاري.",
|
|
485
485
|
"flux-dev.description": "FLUX.1 [dev] هو نموذج مفتوح الأوزان ومقطر للاستخدام غير التجاري. يحافظ على جودة صور قريبة من المستوى الاحترافي واتباع التعليمات مع كفاءة تشغيل أعلى مقارنة بالنماذج القياسية من نفس الحجم.",
|
|
486
486
|
"flux-kontext-max.description": "توليد وتحرير صور سياقية متقدمة، تجمع بين النصوص والصور لتحقيق نتائج دقيقة ومتسقة.",
|
|
@@ -540,6 +540,29 @@
|
|
|
540
540
|
"gemma2:2b.description": "Gemma 2 هو نموذج فعال من Google يغطي حالات الاستخدام من التطبيقات الصغيرة إلى معالجة البيانات المعقدة.",
|
|
541
541
|
"generalv3.5.description": "Spark Max هو الإصدار الأكثر تكاملًا، يدعم البحث عبر الإنترنت والعديد من الإضافات المدمجة. قدراته الأساسية المحسّنة، وأدوار النظام، واستدعاء الوظائف توفر أداءً ممتازًا في سيناريوهات التطبيقات المعقدة.",
|
|
542
542
|
"generalv3.description": "Spark Pro هو نموذج لغوي عالي الأداء مُحسّن للمجالات المهنية، يركز على الرياضيات، والبرمجة، والرعاية الصحية، والتعليم، مع دعم البحث عبر الإنترنت والإضافات المدمجة مثل الطقس والتاريخ. يقدم أداءً قويًا وكفاءة في أسئلة المعرفة المعقدة، وفهم اللغة، وإنشاء النصوص المتقدمة، مما يجعله خيارًا مثاليًا للاستخدام المهني.",
|
|
543
|
+
"glm-4-0520.description": "GLM-4-0520 هو أحدث إصدار من النموذج، مصمم للمهام المعقدة والمتنوعة بأداء ممتاز.",
|
|
544
|
+
"glm-4-32b-0414.description": "GLM-4 32B 0414 هو نموذج عام من GLM يدعم توليد النصوص وفهمها عبر مهام متعددة.",
|
|
545
|
+
"glm-4-9b-chat.description": "GLM-4-9B-Chat يتميز بقوة في الدلالات، الرياضيات، الاستدلال، البرمجة، والمعرفة. كما يدعم تصفح الويب، تنفيذ الشيفرات، استدعاء الأدوات المخصصة، والاستدلال على النصوص الطويلة، مع دعم لـ 26 لغة منها اليابانية والكورية والألمانية.",
|
|
546
|
+
"glm-4-air-250414.description": "GLM-4-Air هو خيار عالي القيمة بأداء قريب من GLM-4، سرعة عالية، وتكلفة منخفضة.",
|
|
547
|
+
"glm-4-air.description": "GLM-4-Air هو خيار عالي القيمة بأداء قريب من GLM-4، سرعة عالية، وتكلفة منخفضة.",
|
|
548
|
+
"glm-4-airx.description": "GLM-4-AirX هو إصدار أكثر كفاءة من GLM-4-Air بسرعة استدلال تصل إلى 2.6 ضعف.",
|
|
549
|
+
"glm-4-alltools.description": "GLM-4-AllTools هو نموذج وكيل متعدد الاستخدامات محسن لتخطيط التعليمات المعقدة واستخدام الأدوات مثل تصفح الويب، شرح الشيفرات، وتوليد النصوص، مناسب لتنفيذ المهام المتعددة.",
|
|
550
|
+
"glm-4-flash-250414.description": "GLM-4-Flash مثالي للمهام البسيطة: الأسرع ومجاني.",
|
|
551
|
+
"glm-4-flash.description": "GLM-4-Flash مثالي للمهام البسيطة: الأسرع ومجاني.",
|
|
552
|
+
"glm-4-flashx.description": "GLM-4-FlashX هو إصدار محسّن من Flash مع استدلال فائق السرعة.",
|
|
553
|
+
"glm-4-long.description": "GLM-4-Long يدعم إدخالات طويلة جدًا لمهام الذاكرة ومعالجة المستندات واسعة النطاق.",
|
|
554
|
+
"glm-4-plus.description": "GLM-4-Plus هو نموذج رائد عالي الذكاء يتميز بقدرات قوية في التعامل مع النصوص الطويلة والمهام المعقدة، مع أداء عام مطور.",
|
|
555
|
+
"glm-4.1v-thinking-flash.description": "GLM-4.1V-Thinking هو أقوى نموذج VLM معروف بحجم ~10B، يغطي مهام متقدمة مثل فهم الفيديو، الأسئلة البصرية، حل المسائل، التعرف البصري، قراءة المستندات والمخططات، وكلاء واجهات المستخدم، برمجة الواجهات، والتأريض. يتفوق على Qwen2.5-VL-72B الأكبر بـ8 مرات في العديد من المهام. يستخدم استدلال سلسلة الأفكار لتحسين الدقة والثراء، متفوقًا على النماذج التقليدية غير المفكرة في النتائج والشرح.",
|
|
556
|
+
"glm-4.1v-thinking-flashx.description": "GLM-4.1V-Thinking هو أقوى نموذج VLM معروف بحجم ~10B، يغطي مهام متقدمة مثل فهم الفيديو، الأسئلة البصرية، حل المسائل، التعرف البصري، قراءة المستندات والمخططات، وكلاء واجهات المستخدم، برمجة الواجهات، والتأريض. يتفوق على Qwen2.5-VL-72B الأكبر بـ8 مرات في العديد من المهام. يستخدم استدلال سلسلة الأفكار لتحسين الدقة والثراء، متفوقًا على النماذج التقليدية غير المفكرة في النتائج والشرح.",
|
|
557
|
+
"glm-4.5-air.description": "GLM-4.5 إصدار خفيف يوازن بين الأداء والتكلفة، مع أوضاع تفكير هجينة مرنة.",
|
|
558
|
+
"glm-4.5-airx.description": "GLM-4.5-Air إصدار سريع يوفر استجابات أسرع للاستخدام واسع النطاق وعالي السرعة.",
|
|
559
|
+
"glm-4.5-flash.description": "إصدار مجاني من GLM-4.5 بأداء قوي في الاستدلال، البرمجة، والمهام الوكيلة.",
|
|
560
|
+
"glm-4.5-x.description": "GLM-4.5 إصدار سريع، يقدم أداءً قويًا مع سرعات توليد تصل إلى 100 رمز/ثانية.",
|
|
561
|
+
"glm-4.5.description": "نموذج Zhipu الرائد مع وضع تفكير قابل للتبديل، يقدم أداءً رائدًا مفتوح المصدر وسياق يصل إلى 128K.",
|
|
562
|
+
"glm-4.5v.description": "نموذج الرؤية والاستدلال من الجيل التالي من Zhipu بتقنية MoE، يحتوي على 106 مليار معلمة إجمالية و12 مليار نشطة، يحقق أداءً رائدًا بين النماذج متعددة الوسائط مفتوحة المصدر ذات الحجم المماثل في مهام الصور، الفيديو، فهم المستندات، ومهام واجهات المستخدم.",
|
|
563
|
+
"glm-4.6.description": "GLM-4.6 (355B) هو النموذج الرائد الأحدث من Zhipu، يتفوق على الجيل السابق في الترميز المتقدم، معالجة النصوص الطويلة، الاستدلال، وقدرات الوكلاء، ويتماشى مع Claude Sonnet 4 في قدرات البرمجة، مما يجعله النموذج الأفضل في الصين للبرمجة.",
|
|
564
|
+
"glm-4.7.description": "GLM-4.7 هو النموذج الرائد الأحدث من Zhipu، يعزز قدرات الترميز، تخطيط المهام طويلة المدى، والتكامل مع الأدوات في سيناريوهات الترميز الوكيلة. يحقق أداءً رائدًا بين النماذج مفتوحة المصدر في العديد من المعايير العامة، مع تحسينات في القدرات العامة، استجابات أكثر طبيعية، وكتابة أكثر جاذبية. كما يعزز الالتزام بالتعليمات عند استخدام الأدوات، ويحسن من جمالية الواجهات وكفاءة تنفيذ المهام طويلة المدى.",
|
|
565
|
+
"glm-4.description": "GLM-4 هو النموذج الرائد الأقدم الذي تم إصداره في يناير 2024، وقد تم استبداله الآن بـ GLM-4-0520 الأقوى.",
|
|
543
566
|
"meta.llama3-8b-instruct-v1:0.description": "ميتا لاما 3 هو نموذج لغوي مفتوح المصدر مخصص للمطورين والباحثين والشركات، صُمم لمساعدتهم في بناء أفكار الذكاء الاصطناعي التوليدي، وتجربتها، وتوسيع نطاقها بشكل مسؤول. يُعد جزءًا من البنية التحتية للابتكار المجتمعي العالمي، وهو مناسب للبيئات ذات الموارد المحدودة، والأجهزة الطرفية، وأوقات التدريب الأسرع.",
|
|
544
567
|
"meta/Llama-3.2-11B-Vision-Instruct.description": "قدرات قوية في الاستدلال الصوري على الصور عالية الدقة، مناسب لتطبيقات الفهم البصري.",
|
|
545
568
|
"meta/Llama-3.2-90B-Vision-Instruct.description": "استدلال صوري متقدم لتطبيقات الوكلاء المعتمدين على الفهم البصري.",
|