@lobehub/chat 1.103.1 → 1.104.0

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 (135) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/apps/desktop/build/icon-beta.ico +0 -0
  3. package/apps/desktop/build/icon-dev.ico +0 -0
  4. package/apps/desktop/build/icon-nightly.ico +0 -0
  5. package/apps/desktop/build/icon.ico +0 -0
  6. package/apps/desktop/electron.vite.config.ts +4 -2
  7. package/apps/desktop/package.json +1 -0
  8. package/apps/desktop/src/main/appBrowsers.ts +2 -2
  9. package/apps/desktop/src/main/const/env.ts +5 -4
  10. package/apps/desktop/src/main/const/store.ts +1 -0
  11. package/apps/desktop/src/main/const/theme.ts +11 -0
  12. package/apps/desktop/src/main/controllers/BrowserWindowsCtr.ts +1 -1
  13. package/apps/desktop/src/main/controllers/NotificationCtr.ts +2 -4
  14. package/apps/desktop/src/main/controllers/ShortcutCtr.ts +9 -1
  15. package/apps/desktop/src/main/controllers/SystemCtr.ts +4 -0
  16. package/apps/desktop/src/main/controllers/TrayMenuCtr.ts +5 -9
  17. package/apps/desktop/src/main/controllers/__tests__/ShortcutCtr.test.ts +14 -11
  18. package/apps/desktop/src/main/controllers/index.ts +1 -1
  19. package/apps/desktop/src/main/core/App.ts +9 -10
  20. package/apps/desktop/src/main/core/{Browser.ts → browser/Browser.ts} +129 -88
  21. package/apps/desktop/src/main/core/{BrowserManager.ts → browser/BrowserManager.ts} +13 -3
  22. package/apps/desktop/src/main/core/{StaticFileServerManager.ts → infrastructure/StaticFileServerManager.ts} +13 -7
  23. package/apps/desktop/src/main/core/{StoreManager.ts → infrastructure/StoreManager.ts} +1 -1
  24. package/apps/desktop/src/main/core/{UpdaterManager.ts → infrastructure/UpdaterManager.ts} +1 -1
  25. package/apps/desktop/src/main/core/{MenuManager.ts → ui/MenuManager.ts} +2 -2
  26. package/apps/desktop/src/main/core/{ShortcutManager.ts → ui/ShortcutManager.ts} +78 -6
  27. package/apps/desktop/src/main/core/{Tray.ts → ui/Tray.ts} +61 -59
  28. package/apps/desktop/src/main/core/{TrayManager.ts → ui/TrayManager.ts} +5 -5
  29. package/apps/desktop/src/main/shortcuts/config.ts +4 -2
  30. package/apps/desktop/src/main/types/store.ts +1 -0
  31. package/changelog/v1.json +21 -0
  32. package/docs/development/basic/add-new-image-model.mdx +162 -0
  33. package/docs/development/basic/add-new-image-model.zh-CN.mdx +162 -0
  34. package/docs/usage/providers/fal.mdx +1 -1
  35. package/docs/usage/providers/fal.zh-CN.mdx +1 -1
  36. package/locales/ar/hotkey.json +10 -4
  37. package/locales/ar/setting.json +12 -1
  38. package/locales/bg-BG/hotkey.json +10 -4
  39. package/locales/bg-BG/setting.json +12 -1
  40. package/locales/de-DE/hotkey.json +10 -4
  41. package/locales/de-DE/setting.json +12 -1
  42. package/locales/en-US/hotkey.json +10 -4
  43. package/locales/en-US/setting.json +12 -1
  44. package/locales/es-ES/hotkey.json +10 -4
  45. package/locales/es-ES/setting.json +12 -1
  46. package/locales/fa-IR/hotkey.json +10 -4
  47. package/locales/fa-IR/setting.json +12 -1
  48. package/locales/fr-FR/hotkey.json +10 -4
  49. package/locales/fr-FR/setting.json +12 -1
  50. package/locales/it-IT/hotkey.json +10 -4
  51. package/locales/it-IT/setting.json +12 -1
  52. package/locales/ja-JP/hotkey.json +10 -4
  53. package/locales/ja-JP/setting.json +12 -1
  54. package/locales/ko-KR/hotkey.json +10 -4
  55. package/locales/ko-KR/setting.json +12 -1
  56. package/locales/nl-NL/hotkey.json +10 -4
  57. package/locales/nl-NL/setting.json +12 -1
  58. package/locales/pl-PL/hotkey.json +10 -4
  59. package/locales/pl-PL/setting.json +12 -1
  60. package/locales/pt-BR/hotkey.json +10 -4
  61. package/locales/pt-BR/setting.json +12 -1
  62. package/locales/ru-RU/hotkey.json +10 -4
  63. package/locales/ru-RU/setting.json +12 -1
  64. package/locales/tr-TR/hotkey.json +10 -4
  65. package/locales/tr-TR/setting.json +12 -1
  66. package/locales/vi-VN/hotkey.json +10 -4
  67. package/locales/vi-VN/setting.json +12 -1
  68. package/locales/zh-CN/hotkey.json +10 -4
  69. package/locales/zh-CN/setting.json +12 -1
  70. package/locales/zh-TW/hotkey.json +10 -4
  71. package/locales/zh-TW/setting.json +12 -1
  72. package/package.json +66 -66
  73. package/packages/electron-client-ipc/src/events/shortcut.ts +3 -1
  74. package/packages/electron-client-ipc/src/types/shortcut.ts +11 -0
  75. package/src/app/[variants]/(main)/chat/(workspace)/_layout/Desktop/Portal.tsx +3 -1
  76. package/src/app/[variants]/(main)/chat/(workspace)/features/AgentSettings/index.tsx +4 -2
  77. package/src/app/[variants]/(main)/image/@menu/components/SeedNumberInput/index.tsx +1 -1
  78. package/src/app/[variants]/(main)/image/features/GenerationFeed/BatchItem.tsx +39 -3
  79. package/src/app/[variants]/(main)/image/features/GenerationFeed/ReferenceImages.tsx +122 -0
  80. package/src/app/[variants]/(main)/settings/hotkey/features/Conversation.tsx +3 -11
  81. package/src/app/[variants]/(main)/settings/hotkey/features/Desktop.tsx +92 -0
  82. package/src/app/[variants]/(main)/settings/hotkey/features/Essential.tsx +3 -11
  83. package/src/app/[variants]/(main)/settings/hotkey/page.tsx +3 -0
  84. package/src/config/aiModels/fal.ts +31 -7
  85. package/src/config/aiModels/openai.ts +10 -1
  86. package/src/const/desktop.ts +9 -0
  87. package/src/const/hotkeys.ts +20 -16
  88. package/src/features/ElectronTitlebar/WinControl/index.tsx +85 -90
  89. package/src/features/ElectronTitlebar/hooks/useWatchThemeUpdate.ts +10 -5
  90. package/src/features/ImageTopicPanel/index.tsx +0 -1
  91. package/src/features/PluginDevModal/index.tsx +3 -1
  92. package/src/features/User/UserPanel/useMenu.tsx +2 -2
  93. package/src/features/User/__tests__/UserAvatar.test.tsx +5 -4
  94. package/src/libs/model-runtime/fal/index.ts +1 -1
  95. package/src/libs/model-runtime/types/image.ts +1 -1
  96. package/src/libs/model-runtime/utils/openaiCompatibleFactory/index.ts +1 -1
  97. package/src/libs/model-runtime/utils/response.ts +2 -0
  98. package/src/libs/model-runtime/utils/streams/google-ai.test.ts +46 -0
  99. package/src/libs/model-runtime/utils/streams/google-ai.ts +4 -4
  100. package/src/libs/model-runtime/utils/streams/vertex-ai.ts +6 -8
  101. package/src/libs/standard-parameters/{meta-schema.test.ts → index.test.ts} +1 -1
  102. package/src/libs/standard-parameters/index.ts +152 -1
  103. package/src/locales/default/hotkey.ts +13 -5
  104. package/src/locales/default/setting.ts +11 -0
  105. package/src/server/ld.test.ts +4 -3
  106. package/src/server/routers/async/image.ts +1 -1
  107. package/src/services/__tests__/chat.test.ts +3 -4
  108. package/src/services/electron/settings.ts +19 -1
  109. package/src/store/chat/slices/message/selectors.test.ts +2 -3
  110. package/src/store/chat/slices/plugin/action.test.ts +2 -1
  111. package/src/store/electron/actions/settings.ts +42 -1
  112. package/src/store/electron/initialState.ts +9 -1
  113. package/src/store/electron/selectors/__tests__/desktopState.test.ts +6 -17
  114. package/src/store/electron/selectors/hotkey.ts +11 -0
  115. package/src/store/electron/selectors/index.ts +1 -0
  116. package/src/store/image/slices/generationConfig/action.test.ts +2 -2
  117. package/src/store/image/slices/generationConfig/action.ts +1 -1
  118. package/src/store/image/slices/generationConfig/hooks.test.ts +2 -2
  119. package/src/store/image/slices/generationConfig/hooks.ts +1 -4
  120. package/src/store/image/slices/generationConfig/initialState.ts +2 -2
  121. package/src/store/image/slices/generationConfig/selectors.test.ts +2 -2
  122. package/src/store/image/slices/generationConfig/selectors.ts +1 -1
  123. package/src/store/user/slices/auth/selectors.test.ts +3 -2
  124. package/src/types/generation/index.ts +1 -0
  125. package/src/types/hotkey.ts +18 -4
  126. package/docs/development/basic/add-new-ai-image-model.mdx +0 -36
  127. package/docs/development/basic/add-new-ai-image-model.zh-CN.mdx +0 -0
  128. package/src/config/paramsSchemas/fal/flux-kontext-dev.ts +0 -8
  129. package/src/config/paramsSchemas/fal/flux-pro-kontext.ts +0 -11
  130. package/src/config/paramsSchemas/fal/flux-schnell.ts +0 -9
  131. package/src/config/paramsSchemas/fal/imagen4.ts +0 -10
  132. package/src/config/paramsSchemas/openai/gpt-image-1.ts +0 -10
  133. package/src/libs/standard-parameters/meta-schema.ts +0 -147
  134. /package/apps/desktop/src/main/core/{I18nManager.ts → infrastructure/I18nManager.ts} +0 -0
  135. /package/apps/desktop/src/main/core/{IoCContainer.ts → infrastructure/IoCContainer.ts} +0 -0
@@ -0,0 +1,162 @@
1
+ # 添加新的图像模型
2
+
3
+ > 了解更多关于 AI 绘画模态的设计,请参考 [AI 绘画模态设计讨论](https://github.com/lobehub/lobe-chat/discussions/7442)
4
+
5
+ ## 参数标准化
6
+
7
+ 所有图像生成模型都必须使用 `src/libs/standard-parameters/index.ts` 中定义的标准参数。这确保了不同 Provider 之间的参数一致性,让用户体验更加统一。
8
+
9
+ **支持的标准参数**:
10
+
11
+ - `prompt` (必需):生成图像的提示词
12
+ - `aspectRatio`:宽高比(如 "16:9", "1:1")
13
+ - `width` / `height`:图像宽高
14
+ - `size`:预设尺寸(如 "1024x1024")
15
+ - `seed`:随机种子
16
+ - `steps`:生成步数
17
+ - `cfg`:引导缩放
18
+ - 其他参数请查看源文件
19
+
20
+ ## 兼容 OpenAI 请求格式的模型
21
+
22
+ 指的是可以使用 openai SDK 进行请求,并且请求参数和和返回值和 dall-e 以及 gpt-image-x 系列一致。
23
+
24
+ 以智谱的 CogView-4 为例,它是一个兼容 openai 请求格式的模型。你只需要在对应的 ai models 文件 `src/config/aiModels/zhipu.ts` 中,添加模型配置,例如:
25
+
26
+ ```ts
27
+ const zhipuImageModels: AIImageModelCard[] = [
28
+ // 添加模型配置
29
+ // https://bigmodel.cn/dev/howuse/image-generation-model/cogview-4
30
+ {
31
+ description:
32
+ 'CogView-4 是智谱首个支持生成汉字的开源文生图模型,在语义理解、图像生成质量、中英文字生成能力等方面全面提升,支持任意长度的中英双语输入,能够生成在给定范围内的任意分辨率图像。',
33
+ displayName: 'CogView-4',
34
+ enabled: true,
35
+ id: 'cogview-4',
36
+ parameters: {
37
+ prompt: {
38
+ default: '',
39
+ },
40
+ size: {
41
+ default: '1024x1024',
42
+ enum: ['1024x1024', '768x1344', '864x1152', '1344x768', '1152x864', '1440x720', '720x1440'],
43
+ },
44
+ },
45
+ releasedAt: '2025-03-04',
46
+ type: 'image',
47
+ },
48
+ ];
49
+ ```
50
+
51
+ ## 不兼容 OpenAI 请求格式的模型
52
+
53
+ 对于不兼容 OpenAI 格式的图像生成模型,需要实现自定义的 `createImage` 方法。有两种主要实现方式:
54
+
55
+ ### 方式一:使用 OpenAI Compatible Factory
56
+
57
+ 大部分 Provider 都使用 `openaiCompatibleFactory` 来兼容 OpenAI,可以通过传入自定义的 `createImage` 函数(参考 [PR #8534](https://github.com/lobehub/lobe-chat/pull/8534))。
58
+
59
+ **实现步骤**:
60
+
61
+ 1. **阅读 Provider 官方文档和标准参数定义**
62
+ - 查看 Provider 的图像生成 API 文档,了解请求格式和响应格式
63
+ - 阅读 `src/libs/standard-parameters/index.ts`,了解支持的参数
64
+ - 在对应的 ai models 文件中增加 image model 配置
65
+
66
+ 2. **实现自定义的 createImage 方法**
67
+ - 创建独立的图像生成函数,接受标准生图参数
68
+ - 将标准参数转换为 Provider 特定的格式
69
+ - 调用 Provider 的生图接口
70
+ - 返回统一格式的响应(imageUrl 和可选的宽高)
71
+
72
+ 3. **补充测试**
73
+ - 编写单元测试覆盖成功场景
74
+ - 测试各种错误情况和边界条件
75
+
76
+ **代码示例**:
77
+
78
+ ```ts
79
+ // src/libs/model-runtime/provider-name/createImage.ts
80
+ export const createProviderImage = async (
81
+ payload: ImageGenerationPayload,
82
+ options: any,
83
+ ): Promise<ImageGenerationResponse> => {
84
+ const { model, prompt, ...params } = payload;
85
+
86
+ // 调用 Provider 的原生 API
87
+ const result = await callProviderAPI({
88
+ model,
89
+ prompt,
90
+ // 转换参数格式
91
+ custom_param: params.width,
92
+ // ...
93
+ });
94
+
95
+ // 返回统一格式
96
+ return {
97
+ created: Date.now(),
98
+ data: [{ url: result.imageUrl }],
99
+ };
100
+ };
101
+ ```
102
+
103
+ ```ts
104
+ // src/libs/model-runtime/provider-name/index.ts
105
+ export const LobeProviderAI = openaiCompatibleFactory({
106
+ constructorOptions: {
107
+ // ... 其他配置
108
+ },
109
+ createImage: createProviderImage, // 传入自定义实现
110
+ provider: ModelProvider.ProviderName,
111
+ });
112
+ ```
113
+
114
+ ### 方式二:在 Provider 类中直接实现
115
+
116
+ 如果你的 Provider 有独立的类实现,可以直接在类中添加 `createImage` 方法(参考 [PR #8503](https://github.com/lobehub/lobe-chat/pull/8503))。
117
+
118
+ **实现步骤**:
119
+
120
+ 1. **阅读 Provider 官方文档和标准参数定义**
121
+ - 查看 Provider 的图像生成 API 文档
122
+ - 阅读 `src/libs/standard-parameters/index.ts`
123
+ - 在对应的 ai models 文件中增加 image model 配置
124
+
125
+ 2. **在 Provider 类中实现 createImage 方法**
126
+ - 直接在类中添加 `createImage` 方法
127
+ - 处理参数转换和 API 调用
128
+ - 返回统一格式的响应
129
+
130
+ 3. **补充测试**
131
+ - 为新方法编写完整的测试用例
132
+
133
+ **代码示例**:
134
+
135
+ ```ts
136
+ // src/libs/model-runtime/provider-name/index.ts
137
+ export class LobeProviderAI {
138
+ async createImage(
139
+ payload: ImageGenerationPayload,
140
+ options?: ChatStreamCallbacks,
141
+ ): Promise<ImageGenerationResponse> {
142
+ const { model, prompt, ...params } = payload;
143
+
144
+ // 调用原生 API 并处理响应
145
+ const result = await this.client.generateImage({
146
+ model,
147
+ prompt,
148
+ // 参数转换
149
+ });
150
+
151
+ return {
152
+ created: Date.now(),
153
+ data: [{ url: result.url }],
154
+ };
155
+ }
156
+ }
157
+ ```
158
+
159
+ ### 重要注意事项
160
+
161
+ - **测试要求**:为自定义实现添加完整的单元测试,确保覆盖成功场景和各种错误情况
162
+ - **错误处理**:统一使用 `AgentRuntimeError` 进行错误封装,保持错误信息的一致性
@@ -56,7 +56,7 @@ tags:
56
56
  <Image alt={'Enter API Key'} inStep src={'https://hub-apac-1.lobeobjects.space/docs/fa056feecba0133c76abe1ad12706c05.png'} />
57
57
 
58
58
  - Paste the API key you obtained.
59
- - Choose a Fal model (e.g. `fal-ai/flux-pro`, `fal-ai/kling-video`, `fal-ai/hidream-i1-fast`) for image or video generation.
59
+ - Choose a Fal model (e.g. `Flux.1 Schnell`, `Flux.1 Kontext Dev`) for image or video generation.
60
60
 
61
61
  <Image alt={'Select Fal model for media generation'} inStep src={'https://hub-apac-1.lobeobjects.space/docs/7560502f31b8500032922103fc22e69b.png'} />
62
62
 
@@ -56,7 +56,7 @@ tags:
56
56
  <Image alt={'填入 API 密钥'} inStep src={'https://hub-apac-1.lobeobjects.space/docs/fa056feecba0133c76abe1ad12706c05.png'} />
57
57
 
58
58
  - 粘贴获取到的 API Key;
59
- - 选择一个 Fal 模型(如 `fal-ai/flux-pro`、`fal-ai/kling-video`、`fal-ai/hidream-i1-fast`)用于图像或视频生成。
59
+ - 选择一个 Fal 模型(如 `Flux.1 Schnell`、`Flux.1 Kontext Dev`)用于图像或视频生成。
60
60
 
61
61
  <Image alt={'选择 Fal 模型进行媒体生成'} inStep src={'https://hub-apac-1.lobeobjects.space/docs/7560502f31b8500032922103fc22e69b.png'} />
62
62
 
@@ -7,6 +7,16 @@
7
7
  "desc": "مسح الرسائل والملفات المرفوعة في المحادثة الحالية",
8
8
  "title": "مسح رسائل المحادثة"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "افتح صفحة إعدادات التطبيق",
13
+ "title": "إعدادات التطبيق"
14
+ },
15
+ "showApp": {
16
+ "desc": "مفتاح اختصار عام لإظهار أو إخفاء النافذة الرئيسية",
17
+ "title": "إظهار/إخفاء النافذة الرئيسية"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "الدخول إلى وضع التحرير عن طريق الضغط على مفتاح Alt والنقر المزدوج على الرسالة",
12
22
  "title": "تحرير الرسالة"
@@ -19,10 +29,6 @@
19
29
  "desc": "عرض جميع تعليمات استخدام الاختصارات",
20
30
  "title": "فتح مساعدة الاختصارات"
21
31
  },
22
- "openSettings": {
23
- "desc": "فتح صفحة إعدادات التطبيق",
24
- "title": "إعدادات التطبيق"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "إعادة توليد آخر رسالة",
28
34
  "title": "إعادة توليد الرسالة"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "يتعارض مع اختصارات لوحة المفاتيح الحالية",
48
+ "errors": {
49
+ "CONFLICT": "تعارض في اختصار لوحة المفاتيح: هذا الاختصار مستخدم بالفعل من قبل وظيفة أخرى",
50
+ "INVALID_FORMAT": "تنسيق اختصار لوحة المفاتيح غير صالح: يرجى استخدام التنسيق الصحيح (مثل CommandOrControl+E)",
51
+ "INVALID_ID": "معرف اختصار لوحة المفاتيح غير صالح",
52
+ "NO_MODIFIER": "يجب أن يحتوي اختصار لوحة المفاتيح على مفتاح تعديل (Ctrl، Alt، Shift، إلخ)",
53
+ "SYSTEM_OCCUPIED": "اختصار لوحة المفاتيح مستخدم من قبل النظام أو تطبيقات أخرى",
54
+ "UNKNOWN": "فشل التحديث: خطأ غير معروف"
55
+ },
48
56
  "group": {
49
57
  "conversation": "المحادثة",
58
+ "desktop": "سطح المكتب",
50
59
  "essential": "أساسي"
51
60
  },
52
61
  "invalidCombination": "يجب أن تحتوي اختصارات لوحة المفاتيح على مفتاح تعديل واحد على الأقل (Ctrl، Alt، Shift) ومفتاح عادي واحد",
53
62
  "record": "اضغط على المفتاح لتسجيل اختصار لوحة المفاتيح",
54
63
  "reset": "إعادة تعيين إلى اختصارات لوحة المفاتيح الافتراضية",
55
- "title": "اختصارات لوحة المفاتيح"
64
+ "title": "اختصارات لوحة المفاتيح",
65
+ "updateError": "فشل تحديث اختصار لوحة المفاتيح: خطأ في الشبكة أو النظام",
66
+ "updateSuccess": "تم تحديث اختصار لوحة المفاتيح بنجاح"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "سيتم استخدام خوارزمية التشفير <1>AES-GCM</1> لتشفير مفتاحك وعنوان الوكيل",
@@ -7,6 +7,16 @@
7
7
  "desc": "Изтриване на текущите съобщения и качените файлове в сесията",
8
8
  "title": "Изтриване на съобщенията в сесията"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "Отворете страницата с настройки на приложението",
13
+ "title": "Настройки на приложението"
14
+ },
15
+ "showApp": {
16
+ "desc": "Глобална клавишна комбинация за показване или скриване на главния прозорец",
17
+ "title": "Показване/скриване на главния прозорец"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "Влезте в режим на редактиране, като задържите Alt и два пъти кликнете върху съобщението",
12
22
  "title": "Редактиране на съобщение"
@@ -19,10 +29,6 @@
19
29
  "desc": "Прегледайте инструкциите за използване на всички клавишни комбинации",
20
30
  "title": "Отворете помощта за клавишни комбинации"
21
31
  },
22
- "openSettings": {
23
- "desc": "Отворете страницата с настройки на приложението",
24
- "title": "Настройки на приложението"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "Прегенерирайте последното съобщение",
28
34
  "title": "Прегенериране на съобщение"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "Конфликт с текущите клавишни комбинации",
48
+ "errors": {
49
+ "CONFLICT": "Конфликт на клавишната комбинация: тази комбинация вече е заета от друга функция",
50
+ "INVALID_FORMAT": "Невалиден формат на клавишната комбинация: моля, използвайте правилния формат (например CommandOrControl+E)",
51
+ "INVALID_ID": "Невалиден идентификатор на клавишната комбинация",
52
+ "NO_MODIFIER": "Клавишната комбинация трябва да съдържа модификатор (Ctrl, Alt, Shift и др.)",
53
+ "SYSTEM_OCCUPIED": "Клавишната комбинация е заета от системата или друго приложение",
54
+ "UNKNOWN": "Актуализацията не бе успешна: неизвестна грешка"
55
+ },
48
56
  "group": {
49
57
  "conversation": "Разговор",
58
+ "desktop": "Настолен",
50
59
  "essential": "Основен"
51
60
  },
52
61
  "invalidCombination": "Клавишната комбинация трябва да съдържа поне един модификатор (Ctrl, Alt, Shift) и един обикновен клавиш",
53
62
  "record": "Натиснете клавиш, за да запишете клавишна комбинация",
54
63
  "reset": "Нулиране до подразбиращите се клавишни комбинации",
55
- "title": "Бързи клавиши"
64
+ "title": "Бързи клавиши",
65
+ "updateError": "Актуализацията на клавишната комбинация не бе успешна: мрежова или системна грешка",
66
+ "updateSuccess": "Актуализацията на клавишната комбинация бе успешна"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "Вашият ключ и адрес на агента ще бъдат криптирани с алгоритъма за криптиране <1>AES-GCM</1>",
@@ -7,6 +7,16 @@
7
7
  "desc": "Aktuelle Nachrichten und hochgeladene Dateien im Gespräch löschen",
8
8
  "title": "Gesprächsnachrichten löschen"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "Öffnet die Anwendungseinstellungsseite",
13
+ "title": "Anwendungseinstellungen"
14
+ },
15
+ "showApp": {
16
+ "desc": "Globale Tastenkombination zum Anzeigen oder Verbergen des Hauptfensters",
17
+ "title": "Hauptfenster anzeigen/verbergen"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "Treten Sie in den Bearbeitungsmodus, indem Sie die Alt-Taste gedrückt halten und auf die Nachricht doppelklicken",
12
22
  "title": "Nachricht bearbeiten"
@@ -19,10 +29,6 @@
19
29
  "desc": "Anleitung zur Verwendung aller Tastenkombinationen anzeigen",
20
30
  "title": "Tastenkombinationshilfe öffnen"
21
31
  },
22
- "openSettings": {
23
- "desc": "Öffnen Sie die Anwendungseinstellungen",
24
- "title": "Anwendungseinstellungen"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "Die letzte Nachricht neu generieren",
28
34
  "title": "Nachricht neu generieren"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "Konflikte mit bestehenden Tastenkombinationen",
48
+ "errors": {
49
+ "CONFLICT": "Tastenkonflikt: Diese Tastenkombination wird bereits von einer anderen Funktion verwendet",
50
+ "INVALID_FORMAT": "Ungültiges Tastenkürzel-Format: Bitte verwenden Sie das korrekte Format (z. B. CommandOrControl+E)",
51
+ "INVALID_ID": "Ungültige Tastenkürzel-ID",
52
+ "NO_MODIFIER": "Das Tastenkürzel muss einen Modifikatortaste enthalten (Strg, Alt, Shift usw.)",
53
+ "SYSTEM_OCCUPIED": "Das Tastenkürzel wird vom System oder einer anderen Anwendung verwendet",
54
+ "UNKNOWN": "Aktualisierung fehlgeschlagen: Unbekannter Fehler"
55
+ },
48
56
  "group": {
49
57
  "conversation": "Gespräch",
58
+ "desktop": "Desktop",
50
59
  "essential": "Grundlegend"
51
60
  },
52
61
  "invalidCombination": "Die Tastenkombination muss mindestens einen Modifikatortaste (Strg, Alt, Umschalt) und eine normale Taste enthalten",
53
62
  "record": "Drücken Sie eine Taste, um die Tastenkombination aufzuzeichnen",
54
63
  "reset": "Auf die Standard-Tastenkombination zurücksetzen",
55
- "title": "Tastenkombinationen"
64
+ "title": "Tastenkombinationen",
65
+ "updateError": "Tastenkürzel-Aktualisierung fehlgeschlagen: Netzwerk- oder Systemfehler",
66
+ "updateSuccess": "Tastenkürzel erfolgreich aktualisiert"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "Ihr Schlüssel und Ihre Proxy-Adresse werden mit dem <1>AES-GCM</1> Verschlüsselungsalgorithmus verschlüsselt.",
@@ -7,6 +7,16 @@
7
7
  "desc": "Clear the messages and uploaded files from the current conversation",
8
8
  "title": "Clear Conversation Messages"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "Open the application settings page",
13
+ "title": "Application Settings"
14
+ },
15
+ "showApp": {
16
+ "desc": "Toggle the main window visibility with a global shortcut",
17
+ "title": "Show/Hide Main Window"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "Enter edit mode by holding Alt and double-clicking the message",
12
22
  "title": "Edit Message"
@@ -19,10 +29,6 @@
19
29
  "desc": "View instructions for all keyboard shortcuts",
20
30
  "title": "Open Hotkey Help"
21
31
  },
22
- "openSettings": {
23
- "desc": "Open the application settings page",
24
- "title": "Application Settings"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "Regenerate the last message",
28
34
  "title": "Regenerate Message"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "Conflicts with existing hotkeys",
48
+ "errors": {
49
+ "CONFLICT": "Hotkey conflict: This hotkey is already assigned to another function",
50
+ "INVALID_FORMAT": "Invalid hotkey format: Please use the correct format (e.g., CommandOrControl+E)",
51
+ "INVALID_ID": "Invalid hotkey ID",
52
+ "NO_MODIFIER": "Hotkey must include a modifier key (Ctrl, Alt, Shift, etc.)",
53
+ "SYSTEM_OCCUPIED": "Hotkey is occupied by the system or another application",
54
+ "UNKNOWN": "Update failed: Unknown error"
55
+ },
48
56
  "group": {
49
57
  "conversation": "Conversation",
58
+ "desktop": "Desktop",
50
59
  "essential": "Essential"
51
60
  },
52
61
  "invalidCombination": "The hotkey must include at least one modifier key (Ctrl, Alt, Shift) and one regular key",
53
62
  "record": "Press a key to record the hotkey",
54
63
  "reset": "Reset to default hotkeys",
55
- "title": "Hotkeys"
64
+ "title": "Hotkeys",
65
+ "updateError": "Failed to update hotkey: Network or system error",
66
+ "updateSuccess": "Hotkey updated successfully"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "Your keys and proxy address will be encrypted using the <1>AES-GCM</1> encryption algorithm",
@@ -7,6 +7,16 @@
7
7
  "desc": "Eliminar los mensajes y archivos subidos de la conversación actual",
8
8
  "title": "Eliminar mensajes de la conversación"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "Abrir la página de configuración de la aplicación",
13
+ "title": "Configuración de la aplicación"
14
+ },
15
+ "showApp": {
16
+ "desc": "Mostrar u ocultar la ventana principal mediante un atajo global",
17
+ "title": "Mostrar/Ocultar ventana principal"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "Entrar en modo de edición manteniendo presionada la tecla Alt y haciendo doble clic en el mensaje",
12
22
  "title": "Editar mensaje"
@@ -19,10 +29,6 @@
19
29
  "desc": "Ver las instrucciones de uso de todos los atajos de teclado",
20
30
  "title": "Abrir ayuda de atajos de teclado"
21
31
  },
22
- "openSettings": {
23
- "desc": "Abrir la página de configuración de la aplicación",
24
- "title": "Configuración de la aplicación"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "Regenerar el último mensaje",
28
34
  "title": "Regenerar mensaje"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "Conflicto con las teclas de acceso rápido existentes",
48
+ "errors": {
49
+ "CONFLICT": "Conflicto de atajo: este atajo ya está asignado a otra función",
50
+ "INVALID_FORMAT": "Formato de atajo inválido: por favor use el formato correcto (por ejemplo, CommandOrControl+E)",
51
+ "INVALID_ID": "ID de atajo inválido",
52
+ "NO_MODIFIER": "El atajo debe incluir una tecla modificadora (Ctrl, Alt, Shift, etc.)",
53
+ "SYSTEM_OCCUPIED": "El atajo está ocupado por el sistema u otra aplicación",
54
+ "UNKNOWN": "Error al actualizar: error desconocido"
55
+ },
48
56
  "group": {
49
57
  "conversation": "Conversación",
58
+ "desktop": "Escritorio",
50
59
  "essential": "Esencial"
51
60
  },
52
61
  "invalidCombination": "La combinación de teclas de acceso rápido debe incluir al menos una tecla modificadora (Ctrl, Alt, Shift) y una tecla normal",
53
62
  "record": "Presiona una tecla para grabar la tecla de acceso rápido",
54
63
  "reset": "Restablecer a las teclas de acceso rápido predeterminadas",
55
- "title": "Atajos de teclado"
64
+ "title": "Atajos de teclado",
65
+ "updateError": "Error al actualizar el atajo: problema de red o del sistema",
66
+ "updateSuccess": "Atajo actualizado con éxito"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "Su clave y dirección del agente se cifrarán utilizando el algoritmo de cifrado <1>AES-GCM</1>",
@@ -7,6 +7,16 @@
7
7
  "desc": "حذف پیام‌ها و فایل‌های بارگذاری شده در جلسه جاری",
8
8
  "title": "حذف پیام‌های جلسه"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "باز کردن صفحه تنظیمات برنامه",
13
+ "title": "تنظیمات برنامه"
14
+ },
15
+ "showApp": {
16
+ "desc": "نمایش یا پنهان کردن پنجره اصلی با کلید میانبر جهانی",
17
+ "title": "نمایش/پنهان کردن پنجره اصلی"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "با نگه داشتن کلید Alt و دوبار کلیک بر روی پیام وارد حالت ویرایش شوید",
12
22
  "title": "ویرایش پیام"
@@ -19,10 +29,6 @@
19
29
  "desc": "مشاهده تمام توضیحات استفاده از کلیدهای میانبر",
20
30
  "title": "باز کردن راهنمای کلیدهای میانبر"
21
31
  },
22
- "openSettings": {
23
- "desc": "صفحه تنظیمات برنامه را باز کنید",
24
- "title": "تنظیمات برنامه"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "آخرین پیام را دوباره تولید کنید",
28
34
  "title": "تولید مجدد پیام"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "تداخل با کلیدهای میانبر موجود",
48
+ "errors": {
49
+ "CONFLICT": "تداخل کلید میانبر: این کلید میانبر قبلاً توسط عملکرد دیگری استفاده شده است",
50
+ "INVALID_FORMAT": "فرمت کلید میانبر نامعتبر است: لطفاً از فرمت صحیح استفاده کنید (مانند CommandOrControl+E)",
51
+ "INVALID_ID": "شناسه کلید میانبر نامعتبر است",
52
+ "NO_MODIFIER": "کلید میانبر باید شامل کلیدهای تغییر دهنده (Ctrl، Alt، Shift و غیره) باشد",
53
+ "SYSTEM_OCCUPIED": "کلید میانبر توسط سیستم یا برنامه‌های دیگر اشغال شده است",
54
+ "UNKNOWN": "به‌روزرسانی ناموفق بود: خطای ناشناخته"
55
+ },
48
56
  "group": {
49
57
  "conversation": "گفتگو",
58
+ "desktop": "نسخه دسکتاپ",
50
59
  "essential": "اساسی"
51
60
  },
52
61
  "invalidCombination": "کلیدهای میانبر باید حداقل شامل یک کلید اصلاحی (Ctrl, Alt, Shift) و یک کلید معمولی باشند",
53
62
  "record": "برای ضبط کلید میانبر، کلید را فشار دهید",
54
63
  "reset": "بازنشانی به کلیدهای میانبر پیش‌فرض",
55
- "title": "کلیدهای میانبر"
64
+ "title": "کلیدهای میانبر",
65
+ "updateError": "به‌روزرسانی کلید میانبر ناموفق بود: خطای شبکه یا سیستم",
66
+ "updateSuccess": "کلید میانبر با موفقیت به‌روزرسانی شد"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "کلید و آدرس پروکسی شما با استفاده از الگوریتم رمزنگاری <1>AES-GCM</1> رمزگذاری خواهد شد",
@@ -7,6 +7,16 @@
7
7
  "desc": "Effacer les messages de la session actuelle et les fichiers téléchargés",
8
8
  "title": "Effacer les messages de la session"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "Ouvrir la page des paramètres de l'application",
13
+ "title": "Paramètres de l'application"
14
+ },
15
+ "showApp": {
16
+ "desc": "Afficher ou masquer la fenêtre principale via un raccourci global",
17
+ "title": "Afficher/Masquer la fenêtre principale"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "Entrez en mode édition en maintenant la touche Alt enfoncée et en double-cliquant sur le message",
12
22
  "title": "Éditer le message"
@@ -19,10 +29,6 @@
19
29
  "desc": "Voir les instructions d'utilisation de tous les raccourcis",
20
30
  "title": "Ouvrir l'aide des raccourcis"
21
31
  },
22
- "openSettings": {
23
- "desc": "Ouvrir la page des paramètres de l'application",
24
- "title": "Paramètres de l'application"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "Régénérer le dernier message",
28
34
  "title": "Régénérer le message"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "Conflit avec les raccourcis existants",
48
+ "errors": {
49
+ "CONFLICT": "Conflit de raccourci : ce raccourci est déjà utilisé par une autre fonction",
50
+ "INVALID_FORMAT": "Format de raccourci invalide : veuillez utiliser le format correct (par exemple CommandOrControl+E)",
51
+ "INVALID_ID": "ID de raccourci invalide",
52
+ "NO_MODIFIER": "Le raccourci doit inclure une touche modificateur (Ctrl, Alt, Shift, etc.)",
53
+ "SYSTEM_OCCUPIED": "Le raccourci est déjà utilisé par le système ou une autre application",
54
+ "UNKNOWN": "Échec de la mise à jour : erreur inconnue"
55
+ },
48
56
  "group": {
49
57
  "conversation": "Conversation",
58
+ "desktop": "Bureau",
50
59
  "essential": "Essentiel"
51
60
  },
52
61
  "invalidCombination": "Le raccourci doit contenir au moins une touche de modification (Ctrl, Alt, Shift) et une touche normale",
53
62
  "record": "Appuyez sur une touche pour enregistrer le raccourci",
54
63
  "reset": "Réinitialiser aux raccourcis par défaut",
55
- "title": "Raccourcis clavier"
64
+ "title": "Raccourcis clavier",
65
+ "updateError": "Échec de la mise à jour du raccourci : erreur réseau ou système",
66
+ "updateSuccess": "Mise à jour du raccourci réussie"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "Votre clé, votre adresse de proxy, etc. seront cryptées à l'aide de l'algorithme de chiffrement <1>AES-GCM</1>",
@@ -7,6 +7,16 @@
7
7
  "desc": "Cancella i messaggi e i file caricati della conversazione attuale",
8
8
  "title": "Cancella messaggi della conversazione"
9
9
  },
10
+ "desktop": {
11
+ "openSettings": {
12
+ "desc": "Apri la pagina delle impostazioni dell'app",
13
+ "title": "Impostazioni dell'app"
14
+ },
15
+ "showApp": {
16
+ "desc": "Mostra o nascondi la finestra principale con una scorciatoia globale",
17
+ "title": "Mostra/Nascondi finestra principale"
18
+ }
19
+ },
10
20
  "editMessage": {
11
21
  "desc": "Entra in modalità di modifica tenendo premuto Alt e facendo doppio clic sul messaggio",
12
22
  "title": "Modifica messaggio"
@@ -19,10 +29,6 @@
19
29
  "desc": "Visualizza le istruzioni per l'uso di tutte le scorciatoie da tastiera",
20
30
  "title": "Apri aiuto scorciatoie"
21
31
  },
22
- "openSettings": {
23
- "desc": "Apri la pagina delle impostazioni dell'app",
24
- "title": "Impostazioni dell'app"
25
- },
26
32
  "regenerateMessage": {
27
33
  "desc": "Rigenera l'ultimo messaggio",
28
34
  "title": "Rigenera messaggio"
@@ -45,14 +45,25 @@
45
45
  },
46
46
  "hotkey": {
47
47
  "conflicts": "In conflitto con i tasti di scelta rapida esistenti",
48
+ "errors": {
49
+ "CONFLICT": "Conflitto di tasti rapidi: questo tasto è già assegnato ad un'altra funzione",
50
+ "INVALID_FORMAT": "Formato del tasto rapido non valido: utilizzare un formato corretto (es. CommandOrControl+E)",
51
+ "INVALID_ID": "ID del tasto rapido non valido",
52
+ "NO_MODIFIER": "Il tasto rapido deve includere un modificatore (Ctrl, Alt, Shift, ecc.)",
53
+ "SYSTEM_OCCUPIED": "Il tasto rapido è già occupato dal sistema o da un'altra applicazione",
54
+ "UNKNOWN": "Aggiornamento fallito: errore sconosciuto"
55
+ },
48
56
  "group": {
49
57
  "conversation": "Conversazione",
58
+ "desktop": "Desktop",
50
59
  "essential": "Essenziale"
51
60
  },
52
61
  "invalidCombination": "La combinazione di tasti deve contenere almeno un tasto modificatore (Ctrl, Alt, Shift) e un tasto normale",
53
62
  "record": "Premi un tasto per registrare la scorciatoia",
54
63
  "reset": "Ripristina le scorciatoie predefinite",
55
- "title": "Scorciatoie"
64
+ "title": "Scorciatoie",
65
+ "updateError": "Aggiornamento del tasto rapido fallito: errore di rete o di sistema",
66
+ "updateSuccess": "Aggiornamento del tasto rapido riuscito"
56
67
  },
57
68
  "llm": {
58
69
  "aesGcm": "La tua chiave e l'indirizzo dell'agente saranno crittografati utilizzando l'algoritmo di crittografia <1>AES-GCM</1>",