@lobehub/lobehub 2.0.0-next.322 → 2.0.0-next.323
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 +55 -0
- package/apps/desktop/src/main/core/infrastructure/UpdaterManager.ts +9 -76
- package/apps/desktop/src/main/core/infrastructure/__tests__/UpdaterManager.test.ts +0 -1
- package/apps/desktop/src/main/modules/updater/configs.ts +0 -4
- package/changelog/v1.json +15 -0
- package/e2e/src/mocks/llm/index.ts +3 -3
- package/locales/ar/common.json +5 -0
- package/locales/ar/error.json +10 -1
- package/locales/bg-BG/common.json +5 -0
- package/locales/bg-BG/error.json +10 -1
- package/locales/de-DE/common.json +5 -0
- package/locales/de-DE/error.json +10 -1
- package/locales/en-US/common.json +5 -0
- package/locales/es-ES/common.json +5 -0
- package/locales/es-ES/error.json +10 -1
- package/locales/fa-IR/common.json +5 -0
- package/locales/fa-IR/error.json +10 -1
- package/locales/fr-FR/common.json +5 -0
- package/locales/fr-FR/error.json +10 -1
- package/locales/it-IT/common.json +5 -0
- package/locales/it-IT/error.json +10 -1
- package/locales/ja-JP/common.json +5 -0
- package/locales/ja-JP/error.json +10 -1
- package/locales/ko-KR/common.json +5 -0
- package/locales/ko-KR/error.json +10 -1
- package/locales/nl-NL/common.json +5 -0
- package/locales/nl-NL/error.json +10 -1
- package/locales/pl-PL/common.json +5 -0
- package/locales/pl-PL/error.json +10 -1
- package/locales/pt-BR/common.json +5 -0
- package/locales/pt-BR/error.json +10 -1
- package/locales/ru-RU/common.json +5 -0
- package/locales/ru-RU/error.json +10 -1
- package/locales/tr-TR/common.json +5 -0
- package/locales/tr-TR/error.json +10 -1
- package/locales/vi-VN/common.json +5 -0
- package/locales/vi-VN/error.json +10 -1
- package/locales/zh-CN/common.json +5 -0
- package/locales/zh-TW/common.json +5 -0
- package/locales/zh-TW/error.json +10 -1
- package/package.json +2 -2
- package/packages/business/const/src/branding.ts +1 -0
- package/packages/business/const/src/llm.ts +2 -1
- package/packages/const/src/settings/llm.ts +2 -1
- package/packages/const/src/settings/systemAgent.ts +12 -7
- package/packages/database/src/models/agent.ts +18 -1
- package/packages/database/src/models/chatGroup.ts +18 -1
- package/packages/database/src/types/chatGroup.ts +1 -0
- package/packages/model-bank/package.json +1 -1
- package/packages/model-bank/src/aiModels/index.ts +2 -2
- package/packages/model-bank/src/aiModels/lobehub/chat/anthropic.ts +256 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/deepseek.ts +45 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/google.ts +267 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/index.ts +26 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/minimax.ts +75 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/moonshot.ts +28 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/openai.ts +345 -0
- package/packages/model-bank/src/aiModels/lobehub/chat/xai.ts +32 -0
- package/packages/model-bank/src/aiModels/lobehub/image.ts +240 -0
- package/packages/model-bank/src/aiModels/lobehub/index.ts +10 -0
- package/packages/model-bank/src/aiModels/lobehub/utils.ts +58 -0
- package/packages/model-bank/src/modelProviders/index.ts +10 -10
- package/packages/model-runtime/src/core/streams/qwen.test.ts +320 -0
- package/packages/model-runtime/src/core/streams/qwen.ts +19 -10
- package/packages/types/package.json +1 -1
- package/packages/types/src/agentGroup/index.ts +2 -0
- package/packages/types/src/discover/assistants.ts +9 -0
- package/packages/types/src/discover/fork.ts +163 -0
- package/packages/types/src/discover/groupAgents.ts +13 -4
- package/packages/types/src/discover/index.ts +9 -0
- package/src/app/[variants]/(auth)/_layout/index.tsx +2 -1
- package/src/app/[variants]/(auth)/auth-error/page.tsx +5 -5
- package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/List/Item/index.tsx +1 -2
- package/src/app/[variants]/(main)/community/(detail)/agent/features/Header.tsx +37 -0
- package/src/app/[variants]/(main)/community/(detail)/agent/features/Sidebar/ActionButton/ForkAndChat.tsx +133 -0
- package/src/app/[variants]/(main)/community/(detail)/agent/features/Sidebar/ActionButton/index.tsx +2 -2
- package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/index.tsx +7 -10
- package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Sidebar/ActionButton/ForkGroupAndChat.tsx +208 -0
- package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Sidebar/ActionButton/index.tsx +2 -2
- package/src/app/[variants]/(main)/community/(detail)/user/features/DetailProvider.tsx +2 -0
- package/src/app/[variants]/(main)/community/(detail)/user/features/UserContent.tsx +7 -0
- package/src/app/[variants]/(main)/community/(detail)/user/features/UserForkedAgentGroups.tsx +63 -0
- package/src/app/[variants]/(main)/community/(detail)/user/features/UserForkedAgents.tsx +61 -0
- package/src/app/[variants]/(main)/community/(detail)/user/index.tsx +3 -1
- package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/List/Item/index.tsx +1 -2
- package/src/app/[variants]/(main)/settings/profile/index.tsx +92 -68
- package/src/app/[variants]/(mobile)/chat/features/Topic/index.tsx +2 -1
- package/src/features/CommandMenu/AskAgentCommands.tsx +105 -0
- package/src/features/CommandMenu/CommandMenuContext.tsx +57 -38
- package/src/features/CommandMenu/components/CommandInput.tsx +43 -9
- package/src/features/CommandMenu/index.tsx +89 -27
- package/src/features/CommandMenu/types.ts +6 -0
- package/src/features/CommandMenu/useCommandMenu.ts +62 -39
- package/src/locales/default/common.ts +5 -0
- package/src/locales/default/discover.ts +371 -0
- package/src/server/globalConfig/parseMemoryExtractionConfig.ts +7 -8
- package/src/server/routers/lambda/agent.ts +14 -0
- package/src/server/routers/lambda/agentGroup.ts +19 -3
- package/src/server/routers/lambda/market/agent.ts +234 -26
- package/src/server/routers/lambda/market/agentGroup.ts +204 -1
- package/src/server/services/discover/index.ts +52 -2
- package/src/services/agent.ts +8 -0
- package/src/services/chatGroup/index.ts +8 -0
- package/src/services/marketApi.ts +78 -0
- package/src/store/user/slices/settings/selectors/__snapshots__/settings.test.ts.snap +12 -12
- package/packages/model-bank/src/aiModels/lobehub.ts +0 -1315
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## [Version 2.0.0-next.323](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.322...v2.0.0-next.323)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2026-01-20**</sup>
|
|
8
|
+
|
|
9
|
+
#### ♻ Code Refactoring
|
|
10
|
+
|
|
11
|
+
- **misc**: Optimize lobehub models and default configuration.
|
|
12
|
+
|
|
13
|
+
#### ✨ Features
|
|
14
|
+
|
|
15
|
+
- **misc**: Add the agents and agents group fork feature.
|
|
16
|
+
|
|
17
|
+
#### 🐛 Bug Fixes
|
|
18
|
+
|
|
19
|
+
- **model-runtime**: Fix Qwen parallel tool calls arguments incorrectly merged.
|
|
20
|
+
- **topic**: Correct topic item href route for agent and group pages.
|
|
21
|
+
- **misc**: Fix Topic component causing stack overflow and freezing the app, simplify updater config logic, slove the nuqs error in commnuity agent group page.
|
|
22
|
+
|
|
23
|
+
#### 💄 Styles
|
|
24
|
+
|
|
25
|
+
- **misc**: Optimize profile settings skeleton screen.
|
|
26
|
+
|
|
27
|
+
<br/>
|
|
28
|
+
|
|
29
|
+
<details>
|
|
30
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
31
|
+
|
|
32
|
+
#### Code refactoring
|
|
33
|
+
|
|
34
|
+
- **misc**: Optimize lobehub models and default configuration, closes [#11621](https://github.com/lobehub/lobe-chat/issues/11621) ([5074fbe](https://github.com/lobehub/lobe-chat/commit/5074fbe))
|
|
35
|
+
|
|
36
|
+
#### What's improved
|
|
37
|
+
|
|
38
|
+
- **misc**: Add the agents and agents group fork feature, closes [#11652](https://github.com/lobehub/lobe-chat/issues/11652) ([b1c3b83](https://github.com/lobehub/lobe-chat/commit/b1c3b83))
|
|
39
|
+
|
|
40
|
+
#### What's fixed
|
|
41
|
+
|
|
42
|
+
- **model-runtime**: Fix Qwen parallel tool calls arguments incorrectly merged, closes [#11649](https://github.com/lobehub/lobe-chat/issues/11649) ([ddbe661](https://github.com/lobehub/lobe-chat/commit/ddbe661))
|
|
43
|
+
- **topic**: Correct topic item href route for agent and group pages, closes [#11607](https://github.com/lobehub/lobe-chat/issues/11607) ([2fffe8b](https://github.com/lobehub/lobe-chat/commit/2fffe8b))
|
|
44
|
+
- **misc**: Fix Topic component causing stack overflow and freezing the app, closes [#11609](https://github.com/lobehub/lobe-chat/issues/11609) ([600cb85](https://github.com/lobehub/lobe-chat/commit/600cb85))
|
|
45
|
+
- **misc**: Simplify updater config logic, closes [#11636](https://github.com/lobehub/lobe-chat/issues/11636) ([5c645f0](https://github.com/lobehub/lobe-chat/commit/5c645f0))
|
|
46
|
+
- **misc**: Slove the nuqs error in commnuity agent group page, closes [#11651](https://github.com/lobehub/lobe-chat/issues/11651) ([1c29bca](https://github.com/lobehub/lobe-chat/commit/1c29bca))
|
|
47
|
+
|
|
48
|
+
#### Styles
|
|
49
|
+
|
|
50
|
+
- **misc**: Optimize profile settings skeleton screen, closes [#11656](https://github.com/lobehub/lobe-chat/issues/11656) ([e61ae85](https://github.com/lobehub/lobe-chat/commit/e61ae85))
|
|
51
|
+
|
|
52
|
+
</details>
|
|
53
|
+
|
|
54
|
+
<div align="right">
|
|
55
|
+
|
|
56
|
+
[](#readme-top)
|
|
57
|
+
|
|
58
|
+
</div>
|
|
59
|
+
|
|
5
60
|
## [Version 2.0.0-next.322](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.321...v2.0.0-next.322)
|
|
6
61
|
|
|
7
62
|
<sup>Released on **2026-01-20**</sup>
|
|
@@ -14,10 +14,8 @@ import { createLogger } from '@/utils/logger';
|
|
|
14
14
|
|
|
15
15
|
import type { App as AppCore } from '../App';
|
|
16
16
|
|
|
17
|
-
// Allow forcing dev update config via env (for testing updates in packaged app)
|
|
18
17
|
const FORCE_DEV_UPDATE_CONFIG = getDesktopEnv().FORCE_DEV_UPDATE_CONFIG;
|
|
19
18
|
|
|
20
|
-
// Create logger
|
|
21
19
|
const logger = createLogger('core:UpdaterManager');
|
|
22
20
|
|
|
23
21
|
export class UpdaterManager {
|
|
@@ -31,11 +29,10 @@ export class UpdaterManager {
|
|
|
31
29
|
constructor(app: AppCore) {
|
|
32
30
|
this.app = app;
|
|
33
31
|
|
|
34
|
-
// 设置日志
|
|
35
32
|
log.transports.file.level = 'info';
|
|
36
33
|
autoUpdater.logger = log;
|
|
37
34
|
|
|
38
|
-
logger.debug(`[Updater] Log file should be at: ${log.transports.file.getFile().path}`);
|
|
35
|
+
logger.debug(`[Updater] Log file should be at: ${log.transports.file.getFile().path}`);
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
get mainWindow() {
|
|
@@ -44,50 +41,36 @@ export class UpdaterManager {
|
|
|
44
41
|
|
|
45
42
|
public initialize = async () => {
|
|
46
43
|
logger.debug('Initializing UpdaterManager');
|
|
47
|
-
|
|
48
|
-
if (!updaterConfig.enableAppUpdate
|
|
44
|
+
|
|
45
|
+
if (!updaterConfig.enableAppUpdate) {
|
|
49
46
|
logger.info('App updates are disabled, skipping updater initialization');
|
|
50
47
|
return;
|
|
51
48
|
}
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
autoUpdater.autoDownload = false; // Set to false, we'll control downloads manually
|
|
50
|
+
autoUpdater.autoDownload = false;
|
|
55
51
|
autoUpdater.autoInstallOnAppQuit = false;
|
|
56
52
|
autoUpdater.allowDowngrade = false;
|
|
57
53
|
|
|
58
|
-
// Enable test mode in development environment or when forced via env
|
|
59
|
-
// IMPORTANT: This must be set BEFORE channel configuration so that
|
|
60
|
-
// dev-app-update.yml takes precedence over programmatic configuration
|
|
61
54
|
const useDevConfig = isDev || FORCE_DEV_UPDATE_CONFIG;
|
|
62
55
|
if (useDevConfig) {
|
|
63
|
-
// In dev mode, use dev-app-update.yml for all configuration including channel
|
|
64
|
-
// Don't set channel here - let dev-app-update.yml control it (defaults to "latest")
|
|
65
56
|
autoUpdater.forceDevUpdateConfig = true;
|
|
66
57
|
logger.info(
|
|
67
58
|
`Using dev update config (isDev=${isDev}, FORCE_DEV_UPDATE_CONFIG=${FORCE_DEV_UPDATE_CONFIG})`,
|
|
68
59
|
);
|
|
69
60
|
logger.info('Dev mode: Using dev-app-update.yml for update configuration');
|
|
70
61
|
} else {
|
|
71
|
-
// Only configure channel and update provider programmatically in production
|
|
72
|
-
// Note: channel is configured in configureUpdateProvider based on provider type
|
|
73
62
|
autoUpdater.allowPrerelease = channel !== 'stable';
|
|
74
63
|
logger.info(`Production mode: channel=${channel}, allowPrerelease=${channel !== 'stable'}`);
|
|
75
64
|
this.configureUpdateProvider();
|
|
76
65
|
}
|
|
77
66
|
|
|
78
|
-
// Register events
|
|
79
67
|
this.registerEvents();
|
|
80
68
|
|
|
81
|
-
// If auto-check for updates is configured, set up periodic checks
|
|
82
69
|
if (updaterConfig.app.autoCheckUpdate) {
|
|
83
|
-
// Delay update check by 1 minute after startup to avoid network instability
|
|
84
70
|
setTimeout(() => this.checkForUpdates(), 60 * 1000);
|
|
85
|
-
|
|
86
|
-
// Set up periodic checks
|
|
87
71
|
setInterval(() => this.checkForUpdates(), updaterConfig.app.checkUpdateInterval);
|
|
88
72
|
}
|
|
89
73
|
|
|
90
|
-
// Log the channel and allowPrerelease values
|
|
91
74
|
logger.debug(
|
|
92
75
|
`Initialized with channel: ${autoUpdater.channel}, allowPrerelease: ${autoUpdater.allowPrerelease}`,
|
|
93
76
|
);
|
|
@@ -105,15 +88,12 @@ export class UpdaterManager {
|
|
|
105
88
|
this.checking = true;
|
|
106
89
|
this.isManualCheck = manual;
|
|
107
90
|
|
|
108
|
-
// Ensure allowPrerelease is correctly set before each check
|
|
109
|
-
// This guards against any internal state reset by electron-updater
|
|
110
91
|
if (!isStableChannel) {
|
|
111
92
|
autoUpdater.allowPrerelease = true;
|
|
112
93
|
}
|
|
113
94
|
|
|
114
95
|
logger.info(`${manual ? 'Manually checking' : 'Auto checking'} for updates...`);
|
|
115
96
|
|
|
116
|
-
// Log detailed updater configuration for debugging
|
|
117
97
|
const inferredChannel =
|
|
118
98
|
autoUpdater.channel ||
|
|
119
99
|
(autoUpdater.currentVersion?.prerelease?.[0]
|
|
@@ -133,7 +113,6 @@ export class UpdaterManager {
|
|
|
133
113
|
logger.info('[Updater Config] usingFallbackProvider:', this.usingFallbackProvider);
|
|
134
114
|
logger.info('[Updater Config] GitHub config:', JSON.stringify(githubConfig));
|
|
135
115
|
|
|
136
|
-
// If manual check, notify renderer process about check start
|
|
137
116
|
if (manual) {
|
|
138
117
|
this.mainWindow.broadcast('manualUpdateCheckStart');
|
|
139
118
|
}
|
|
@@ -143,7 +122,6 @@ export class UpdaterManager {
|
|
|
143
122
|
} catch (error) {
|
|
144
123
|
logger.error('Error checking for updates:', error.message);
|
|
145
124
|
|
|
146
|
-
// If manual check, notify renderer process about check error
|
|
147
125
|
if (manual) {
|
|
148
126
|
this.mainWindow.broadcast('updateError', (error as Error).message);
|
|
149
127
|
}
|
|
@@ -162,7 +140,6 @@ export class UpdaterManager {
|
|
|
162
140
|
this.downloading = true;
|
|
163
141
|
logger.info(`${manual ? 'Manually downloading' : 'Auto downloading'} update...`);
|
|
164
142
|
|
|
165
|
-
// If manual download or manual check, notify renderer process about download start
|
|
166
143
|
if (manual || this.isManualCheck) {
|
|
167
144
|
this.mainWindow.broadcast('updateDownloadStart');
|
|
168
145
|
}
|
|
@@ -173,7 +150,6 @@ export class UpdaterManager {
|
|
|
173
150
|
this.downloading = false;
|
|
174
151
|
logger.error('Error downloading update:', error);
|
|
175
152
|
|
|
176
|
-
// If manual download or manual check, notify renderer process about download error
|
|
177
153
|
if (manual || this.isManualCheck) {
|
|
178
154
|
this.mainWindow.broadcast('updateError', (error as Error).message);
|
|
179
155
|
}
|
|
@@ -186,14 +162,10 @@ export class UpdaterManager {
|
|
|
186
162
|
public installNow = () => {
|
|
187
163
|
logger.info('Installing update now...');
|
|
188
164
|
|
|
189
|
-
// Mark application for exit
|
|
190
165
|
this.app.isQuiting = true;
|
|
191
166
|
|
|
192
|
-
// Close all windows first to ensure clean exit
|
|
193
167
|
logger.info('Closing all windows before update installation...');
|
|
194
168
|
const { BrowserWindow, app } = require('electron');
|
|
195
|
-
// do not close windows and quit first
|
|
196
|
-
// on Windows, window-all-closed -> app.quit()` can terminate the process before the timer fires
|
|
197
169
|
if (!isWindows) {
|
|
198
170
|
const allWindows = BrowserWindow.getAllWindows();
|
|
199
171
|
allWindows.forEach((window) => {
|
|
@@ -203,16 +175,10 @@ export class UpdaterManager {
|
|
|
203
175
|
});
|
|
204
176
|
}
|
|
205
177
|
|
|
206
|
-
// Release single instance lock before quitting
|
|
207
|
-
// This ensures the new instance can acquire the lock
|
|
208
178
|
logger.info('Releasing single instance lock...');
|
|
209
179
|
app.releaseSingleInstanceLock();
|
|
210
180
|
|
|
211
|
-
// Small delay to ensure windows are closed and lock is released
|
|
212
181
|
setTimeout(() => {
|
|
213
|
-
// quitAndInstall parameters:
|
|
214
|
-
// - isSilent: true (don't show installation UI)
|
|
215
|
-
// - isForceRunAfter: true (force start app after installation)
|
|
216
182
|
logger.info('Calling autoUpdater.quitAndInstall...');
|
|
217
183
|
autoUpdater.quitAndInstall(true, true);
|
|
218
184
|
}, 100);
|
|
@@ -224,10 +190,7 @@ export class UpdaterManager {
|
|
|
224
190
|
public installLater = () => {
|
|
225
191
|
logger.info('Update will be installed on next restart');
|
|
226
192
|
|
|
227
|
-
// Mark for installation on next launch, but don't exit application
|
|
228
193
|
autoUpdater.autoInstallOnAppQuit = true;
|
|
229
|
-
|
|
230
|
-
// Notify renderer process that update will be installed on next launch
|
|
231
194
|
this.mainWindow.broadcast('updateWillInstallLater');
|
|
232
195
|
};
|
|
233
196
|
|
|
@@ -241,7 +204,6 @@ export class UpdaterManager {
|
|
|
241
204
|
logger.info('Simulating update available...');
|
|
242
205
|
|
|
243
206
|
const mainWindow = this.mainWindow;
|
|
244
|
-
// Simulate a new version update
|
|
245
207
|
const mockUpdateInfo = {
|
|
246
208
|
releaseDate: new Date().toISOString(),
|
|
247
209
|
releaseNotes: ` #### Version 1.0.0 Release Notes
|
|
@@ -253,14 +215,11 @@ export class UpdaterManager {
|
|
|
253
215
|
version: '1.0.0',
|
|
254
216
|
};
|
|
255
217
|
|
|
256
|
-
// Set update available state
|
|
257
218
|
this.updateAvailable = true;
|
|
258
219
|
|
|
259
|
-
// Notify renderer process
|
|
260
220
|
if (this.isManualCheck) {
|
|
261
221
|
mainWindow.broadcast('manualUpdateAvailable', mockUpdateInfo);
|
|
262
222
|
} else {
|
|
263
|
-
// In auto-check mode, directly simulate download
|
|
264
223
|
this.simulateDownloadProgress();
|
|
265
224
|
}
|
|
266
225
|
};
|
|
@@ -276,7 +235,6 @@ export class UpdaterManager {
|
|
|
276
235
|
|
|
277
236
|
const mainWindow = this.app.browserManager.getMainWindow();
|
|
278
237
|
if (mainWindow) {
|
|
279
|
-
// Simulate a new version update
|
|
280
238
|
const mockUpdateInfo = {
|
|
281
239
|
releaseDate: new Date().toISOString(),
|
|
282
240
|
releaseNotes: ` #### Version 1.0.0 Release Notes
|
|
@@ -288,10 +246,7 @@ export class UpdaterManager {
|
|
|
288
246
|
version: '1.0.0',
|
|
289
247
|
};
|
|
290
248
|
|
|
291
|
-
// Set download state
|
|
292
249
|
this.downloading = false;
|
|
293
|
-
|
|
294
|
-
// Notify renderer process
|
|
295
250
|
mainWindow.broadcast('updateDownloaded', mockUpdateInfo);
|
|
296
251
|
}
|
|
297
252
|
};
|
|
@@ -307,28 +262,22 @@ export class UpdaterManager {
|
|
|
307
262
|
|
|
308
263
|
const mainWindow = this.app.browserManager.getMainWindow();
|
|
309
264
|
|
|
310
|
-
// Set download state
|
|
311
265
|
this.downloading = true;
|
|
312
266
|
|
|
313
|
-
// Only broadcast download start event if manual check
|
|
314
267
|
if (this.isManualCheck) {
|
|
315
268
|
mainWindow.broadcast('updateDownloadStart');
|
|
316
269
|
}
|
|
317
270
|
|
|
318
|
-
// Simulate progress updates
|
|
319
271
|
let progress = 0;
|
|
320
272
|
const interval = setInterval(() => {
|
|
321
273
|
progress += 10;
|
|
322
274
|
|
|
323
|
-
if (
|
|
324
|
-
progress <= 100 && // Only broadcast download progress if manual check
|
|
325
|
-
this.isManualCheck
|
|
326
|
-
) {
|
|
275
|
+
if (progress <= 100 && this.isManualCheck) {
|
|
327
276
|
mainWindow.broadcast('updateDownloadProgress', {
|
|
328
277
|
bytesPerSecond: 1024 * 1024,
|
|
329
|
-
percent: progress,
|
|
330
|
-
total: 1024 * 1024 * 100,
|
|
331
|
-
transferred: 1024 * 1024 * progress,
|
|
278
|
+
percent: progress,
|
|
279
|
+
total: 1024 * 1024 * 100,
|
|
280
|
+
transferred: 1024 * 1024 * progress,
|
|
332
281
|
});
|
|
333
282
|
}
|
|
334
283
|
|
|
@@ -348,8 +297,6 @@ export class UpdaterManager {
|
|
|
348
297
|
*/
|
|
349
298
|
private configureUpdateProvider() {
|
|
350
299
|
if (isStableChannel && UPDATE_SERVER_URL && !this.usingFallbackProvider) {
|
|
351
|
-
// Stable channel uses custom update server (generic HTTP) as primary
|
|
352
|
-
// S3 has stable-mac.yml, so we set channel to 'stable'
|
|
353
300
|
autoUpdater.channel = 'stable';
|
|
354
301
|
logger.info(`Configuring generic provider for stable channel (primary)`);
|
|
355
302
|
logger.info(`Update server URL: ${UPDATE_SERVER_URL}`);
|
|
@@ -360,9 +307,6 @@ export class UpdaterManager {
|
|
|
360
307
|
url: UPDATE_SERVER_URL,
|
|
361
308
|
});
|
|
362
309
|
} else {
|
|
363
|
-
// GitHub provider:
|
|
364
|
-
// - stable: use default latest-mac.yml (GitHub uploads latest* only)
|
|
365
|
-
// - beta/nightly: leave channel unset so prerelease matching uses tag (e.g. next)
|
|
366
310
|
const reason = this.usingFallbackProvider ? '(fallback from S3)' : '';
|
|
367
311
|
logger.info(`Configuring GitHub provider for ${channel} channel ${reason}`);
|
|
368
312
|
if (autoUpdater.channel !== null) {
|
|
@@ -370,7 +314,6 @@ export class UpdaterManager {
|
|
|
370
314
|
}
|
|
371
315
|
logger.info('Channel left unset (defaults to latest-mac.yml for GitHub)');
|
|
372
316
|
|
|
373
|
-
// For beta/nightly channels, we need prerelease versions
|
|
374
317
|
const needPrerelease = channel !== 'stable';
|
|
375
318
|
|
|
376
319
|
autoUpdater.setFeedURL({
|
|
@@ -379,8 +322,6 @@ export class UpdaterManager {
|
|
|
379
322
|
repo: githubConfig.repo,
|
|
380
323
|
});
|
|
381
324
|
|
|
382
|
-
// Ensure allowPrerelease is set correctly after setFeedURL
|
|
383
|
-
// setFeedURL may reset some internal states
|
|
384
325
|
autoUpdater.allowPrerelease = needPrerelease;
|
|
385
326
|
|
|
386
327
|
logger.info(
|
|
@@ -394,7 +335,6 @@ export class UpdaterManager {
|
|
|
394
335
|
* Called when primary provider (S3) fails
|
|
395
336
|
*/
|
|
396
337
|
private switchToFallbackAndRetry = async () => {
|
|
397
|
-
// Only fallback if we're on stable channel with S3 configured and haven't already fallen back
|
|
398
338
|
if (!isStableChannel || !UPDATE_SERVER_URL || this.usingFallbackProvider) {
|
|
399
339
|
return false;
|
|
400
340
|
}
|
|
@@ -403,7 +343,6 @@ export class UpdaterManager {
|
|
|
403
343
|
this.usingFallbackProvider = true;
|
|
404
344
|
this.configureUpdateProvider();
|
|
405
345
|
|
|
406
|
-
// Retry update check with fallback provider
|
|
407
346
|
try {
|
|
408
347
|
await autoUpdater.checkForUpdates();
|
|
409
348
|
return true;
|
|
@@ -437,13 +376,11 @@ export class UpdaterManager {
|
|
|
437
376
|
logger.info(`Update available: ${info.version}`);
|
|
438
377
|
this.updateAvailable = true;
|
|
439
378
|
|
|
440
|
-
// Reset to primary provider for next check cycle
|
|
441
379
|
this.resetToPrimaryProvider();
|
|
442
380
|
|
|
443
381
|
if (this.isManualCheck) {
|
|
444
382
|
this.mainWindow.broadcast('manualUpdateAvailable', info);
|
|
445
383
|
} else {
|
|
446
|
-
// If it's an automatic check, start downloading automatically
|
|
447
384
|
logger.info('Auto check found update, starting download automatically...');
|
|
448
385
|
this.downloadUpdate();
|
|
449
386
|
}
|
|
@@ -452,7 +389,6 @@ export class UpdaterManager {
|
|
|
452
389
|
autoUpdater.on('update-not-available', (info) => {
|
|
453
390
|
logger.info(`Update not available. Current: ${info.version}`);
|
|
454
391
|
|
|
455
|
-
// Reset to primary provider for next check cycle
|
|
456
392
|
this.resetToPrimaryProvider();
|
|
457
393
|
|
|
458
394
|
if (this.isManualCheck) {
|
|
@@ -462,7 +398,6 @@ export class UpdaterManager {
|
|
|
462
398
|
|
|
463
399
|
autoUpdater.on('error', async (err) => {
|
|
464
400
|
logger.error('Error in auto-updater:', err);
|
|
465
|
-
// Log configuration state when error occurs for debugging
|
|
466
401
|
logger.error('[Updater Error Context] Channel:', autoUpdater.channel);
|
|
467
402
|
logger.error('[Updater Error Context] allowPrerelease:', autoUpdater.allowPrerelease);
|
|
468
403
|
logger.error('[Updater Error Context] Build channel from config:', channel);
|
|
@@ -471,12 +406,11 @@ export class UpdaterManager {
|
|
|
471
406
|
logger.error('[Updater Error Context] usingFallbackProvider:', this.usingFallbackProvider);
|
|
472
407
|
logger.error('[Updater Error Context] GitHub config:', JSON.stringify(githubConfig));
|
|
473
408
|
|
|
474
|
-
// Try fallback to GitHub if S3 failed
|
|
475
409
|
if (!this.usingFallbackProvider && isStableChannel && UPDATE_SERVER_URL) {
|
|
476
410
|
logger.info('Attempting fallback to GitHub provider...');
|
|
477
411
|
const fallbackSucceeded = await this.switchToFallbackAndRetry();
|
|
478
412
|
if (fallbackSucceeded) {
|
|
479
|
-
return;
|
|
413
|
+
return;
|
|
480
414
|
}
|
|
481
415
|
}
|
|
482
416
|
|
|
@@ -497,7 +431,6 @@ export class UpdaterManager {
|
|
|
497
431
|
autoUpdater.on('update-downloaded', (info) => {
|
|
498
432
|
logger.info(`Update downloaded: ${info.version}`);
|
|
499
433
|
this.downloading = false;
|
|
500
|
-
// Always notify about downloaded update
|
|
501
434
|
this.mainWindow.broadcast('updateDownloaded', info);
|
|
502
435
|
});
|
|
503
436
|
|
|
@@ -27,10 +27,6 @@ export const updaterConfig = {
|
|
|
27
27
|
// Update check interval (milliseconds)
|
|
28
28
|
checkUpdateInterval: 60 * 60 * 1000, // 1 hour
|
|
29
29
|
},
|
|
30
|
-
|
|
31
30
|
// Whether to enable application updates
|
|
32
31
|
enableAppUpdate: !isDev,
|
|
33
|
-
|
|
34
|
-
// 是否启用渲染层热更新
|
|
35
|
-
enableRenderHotUpdate: !isDev,
|
|
36
32
|
};
|
package/changelog/v1.json
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"children": {
|
|
4
|
+
"improvements": [
|
|
5
|
+
"Optimize profile settings skeleton screen."
|
|
6
|
+
],
|
|
7
|
+
"features": [
|
|
8
|
+
"Add the agents and agents group fork feature."
|
|
9
|
+
],
|
|
10
|
+
"fixes": [
|
|
11
|
+
"Fix Topic component causing stack overflow and freezing the app, simplify updater config logic, slove the nuqs error in commnuity agent group page."
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"date": "2026-01-20",
|
|
15
|
+
"version": "2.0.0-next.323"
|
|
16
|
+
},
|
|
2
17
|
{
|
|
3
18
|
"children": {},
|
|
4
19
|
"date": "2026-01-20",
|
|
@@ -146,12 +146,12 @@ export class LLMMockManager {
|
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
// Intercept
|
|
150
|
-
await page.route('**/webapi/chat
|
|
149
|
+
// Intercept all LLM chat API requests (openai, anthropic, etc.)
|
|
150
|
+
await page.route('**/webapi/chat/**', async (route) => {
|
|
151
151
|
await this.handleChatRequest(route);
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
console.log(' ✓ LLM mocks registered (
|
|
154
|
+
console.log(' ✓ LLM mocks registered (all providers)');
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
/**
|
package/locales/ar/common.json
CHANGED
|
@@ -99,6 +99,8 @@
|
|
|
99
99
|
"cmdk.askAI": "اسأل الوكيل",
|
|
100
100
|
"cmdk.askAIHeading": "استخدم الميزات التالية لـ {{query}}",
|
|
101
101
|
"cmdk.askAIHeadingEmpty": "اختر ميزة ذكاء اصطناعي",
|
|
102
|
+
"cmdk.askAgentHeading": "اسأل الوكيل",
|
|
103
|
+
"cmdk.askAgentPlaceholder": "اسأل {{agent}} عن شيء ما...",
|
|
102
104
|
"cmdk.askLobeAI": "اسأل Lobe AI",
|
|
103
105
|
"cmdk.community": "المجتمع",
|
|
104
106
|
"cmdk.communitySupport": "دعم المجتمع",
|
|
@@ -114,8 +116,10 @@
|
|
|
114
116
|
"cmdk.context.settings": "الإعدادات",
|
|
115
117
|
"cmdk.discover": "استكشاف",
|
|
116
118
|
"cmdk.keyboard.ESC": "ESC",
|
|
119
|
+
"cmdk.keyboard.Enter": "إدخال",
|
|
117
120
|
"cmdk.keyboard.Tab": "Tab",
|
|
118
121
|
"cmdk.memory": "الذاكرة",
|
|
122
|
+
"cmdk.mentionAgent": "اذكر الوكيل",
|
|
119
123
|
"cmdk.navigate": "تنقل",
|
|
120
124
|
"cmdk.newAgent": "إنشاء وكيل جديد",
|
|
121
125
|
"cmdk.newAgentTeam": "إنشاء مجموعة جديدة",
|
|
@@ -151,6 +155,7 @@
|
|
|
151
155
|
"cmdk.search.topic": "موضوع",
|
|
152
156
|
"cmdk.search.topics": "مواضيع",
|
|
153
157
|
"cmdk.searchPlaceholder": "أدخل أمرًا أو ابحث...",
|
|
158
|
+
"cmdk.sendToAgent": "أرسل إلى {{agent}}",
|
|
154
159
|
"cmdk.settings": "الإعدادات",
|
|
155
160
|
"cmdk.starOnGitHub": "قيّمنا على GitHub",
|
|
156
161
|
"cmdk.submitIssue": "إرسال مشكلة",
|
package/locales/ar/error.json
CHANGED
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"import.importConfigFile.title": "فشل الاستيراد",
|
|
13
13
|
"import.incompatible.description": "تم تصدير هذا الملف من إصدار أحدث. يرجى الترقية إلى أحدث إصدار ثم إعادة الاستيراد.",
|
|
14
14
|
"import.incompatible.title": "التطبيق الحالي لا يدعم استيراد هذا الملف",
|
|
15
|
+
"inviteCode.currentEmail": "الحساب الحالي: {{email}}",
|
|
16
|
+
"inviteCode.desc": "مطلوب رمز دعوة للوصول إلى LobeHub. يرجى إدخال رمز دعوة صالح للمتابعة.",
|
|
17
|
+
"inviteCode.friends": "الأصدقاء",
|
|
18
|
+
"inviteCode.getCodeHint": "احصل على رمز دعوة من:",
|
|
19
|
+
"inviteCode.title": "رمز الدعوة مطلوب",
|
|
15
20
|
"loginRequired.desc": "سيتم تحويلك إلى صفحة تسجيل الدخول قريبًا",
|
|
16
21
|
"loginRequired.title": "يرجى تسجيل الدخول لاستخدام هذه الميزة",
|
|
17
22
|
"notFound.backHome": "العودة إلى الصفحة الرئيسية",
|
|
@@ -144,5 +149,9 @@
|
|
|
144
149
|
"upload.networkError": "يرجى التحقق من اتصال الشبكة والتأكد من صحة إعدادات CORS لخدمة تخزين الملفات.",
|
|
145
150
|
"upload.title": "فشل تحميل الملف. يرجى التحقق من الاتصال أو المحاولة لاحقًا.",
|
|
146
151
|
"upload.unknownError": "سبب الخطأ: {{reason}}",
|
|
147
|
-
"upload.uploadFailed": "فشل تحميل الملف."
|
|
152
|
+
"upload.uploadFailed": "فشل تحميل الملف.",
|
|
153
|
+
"waitlist.currentEmail": "الحساب الحالي: {{email}}",
|
|
154
|
+
"waitlist.desc": "حسابك غير موجود في القائمة البيضاء. يرجى التواصل مع المسؤول لطلب الوصول.",
|
|
155
|
+
"waitlist.switchAccount": "تبديل الحساب",
|
|
156
|
+
"waitlist.title": "الوصول مقيد"
|
|
148
157
|
}
|
|
@@ -99,6 +99,8 @@
|
|
|
99
99
|
"cmdk.askAI": "Попитай агент",
|
|
100
100
|
"cmdk.askAIHeading": "Използвайте следните функции за {{query}}",
|
|
101
101
|
"cmdk.askAIHeadingEmpty": "Изберете AI функция",
|
|
102
|
+
"cmdk.askAgentHeading": "Попитай агент",
|
|
103
|
+
"cmdk.askAgentPlaceholder": "Попитай {{agent}} нещо...",
|
|
102
104
|
"cmdk.askLobeAI": "Попитай Lobe AI",
|
|
103
105
|
"cmdk.community": "Общност",
|
|
104
106
|
"cmdk.communitySupport": "Поддръжка от общността",
|
|
@@ -114,8 +116,10 @@
|
|
|
114
116
|
"cmdk.context.settings": "Настройки",
|
|
115
117
|
"cmdk.discover": "Открий",
|
|
116
118
|
"cmdk.keyboard.ESC": "ESC",
|
|
119
|
+
"cmdk.keyboard.Enter": "Enter",
|
|
117
120
|
"cmdk.keyboard.Tab": "Tab",
|
|
118
121
|
"cmdk.memory": "Памет",
|
|
122
|
+
"cmdk.mentionAgent": "Спомени агент",
|
|
119
123
|
"cmdk.navigate": "Навигирай",
|
|
120
124
|
"cmdk.newAgent": "Създай нов агент",
|
|
121
125
|
"cmdk.newAgentTeam": "Създай нова група",
|
|
@@ -151,6 +155,7 @@
|
|
|
151
155
|
"cmdk.search.topic": "Тема",
|
|
152
156
|
"cmdk.search.topics": "Теми",
|
|
153
157
|
"cmdk.searchPlaceholder": "Въведете команда или търсене...",
|
|
158
|
+
"cmdk.sendToAgent": "Изпрати до {{agent}}",
|
|
154
159
|
"cmdk.settings": "Настройки",
|
|
155
160
|
"cmdk.starOnGitHub": "Дайте звезда в GitHub",
|
|
156
161
|
"cmdk.submitIssue": "Изпрати проблем",
|
package/locales/bg-BG/error.json
CHANGED
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"import.importConfigFile.title": "Импортирането не бе успешно",
|
|
13
13
|
"import.incompatible.description": "Този файл е експортиран от по-нова версия. Моля, обновете до последната версия и опитайте отново.",
|
|
14
14
|
"import.incompatible.title": "Текущото приложение не поддържа импортиране на този файл",
|
|
15
|
+
"inviteCode.currentEmail": "Текуща сметка: {{email}}",
|
|
16
|
+
"inviteCode.desc": "Необходим е поканен код за достъп до LobeHub. Моля, въведете валиден поканен код, за да продължите.",
|
|
17
|
+
"inviteCode.friends": "Приятели",
|
|
18
|
+
"inviteCode.getCodeHint": "Получете поканен код от:",
|
|
19
|
+
"inviteCode.title": "Изисква се поканен код",
|
|
15
20
|
"loginRequired.desc": "Ще бъдете пренасочени към страницата за вход след малко",
|
|
16
21
|
"loginRequired.title": "Моля, влезте, за да използвате тази функция",
|
|
17
22
|
"notFound.backHome": "Обратно към началната страница",
|
|
@@ -144,5 +149,9 @@
|
|
|
144
149
|
"upload.networkError": "Проверете мрежовата връзка и конфигурацията за CORS на услугата за съхранение.",
|
|
145
150
|
"upload.title": "Качването на файл не бе успешно. Проверете мрежовата връзка или опитайте отново по-късно.",
|
|
146
151
|
"upload.unknownError": "Причина за грешката: {{reason}}",
|
|
147
|
-
"upload.uploadFailed": "Качването на файл не бе успешно."
|
|
152
|
+
"upload.uploadFailed": "Качването на файл не бе успешно.",
|
|
153
|
+
"waitlist.currentEmail": "Текуща сметка: {{email}}",
|
|
154
|
+
"waitlist.desc": "Вашата сметка не е в белия списък. Моля, свържете се с администратора, за да поискате достъп.",
|
|
155
|
+
"waitlist.switchAccount": "Смени сметката",
|
|
156
|
+
"waitlist.title": "Достъпът е ограничен"
|
|
148
157
|
}
|
|
@@ -99,6 +99,8 @@
|
|
|
99
99
|
"cmdk.askAI": "Agent fragen",
|
|
100
100
|
"cmdk.askAIHeading": "Verwenden Sie die folgenden Funktionen für {{query}}",
|
|
101
101
|
"cmdk.askAIHeadingEmpty": "Wählen Sie eine KI-Funktion",
|
|
102
|
+
"cmdk.askAgentHeading": "Agent fragen",
|
|
103
|
+
"cmdk.askAgentPlaceholder": "Stelle {{agent}} eine Frage...",
|
|
102
104
|
"cmdk.askLobeAI": "Lobe AI fragen",
|
|
103
105
|
"cmdk.community": "Community",
|
|
104
106
|
"cmdk.communitySupport": "Community-Support",
|
|
@@ -114,8 +116,10 @@
|
|
|
114
116
|
"cmdk.context.settings": "Einstellungen",
|
|
115
117
|
"cmdk.discover": "Entdecken",
|
|
116
118
|
"cmdk.keyboard.ESC": "ESC",
|
|
119
|
+
"cmdk.keyboard.Enter": "Eingabe",
|
|
117
120
|
"cmdk.keyboard.Tab": "Tab",
|
|
118
121
|
"cmdk.memory": "Gedächtnis",
|
|
122
|
+
"cmdk.mentionAgent": "Agent erwähnen",
|
|
119
123
|
"cmdk.navigate": "Navigieren",
|
|
120
124
|
"cmdk.newAgent": "Neuen Agenten erstellen",
|
|
121
125
|
"cmdk.newAgentTeam": "Neue Gruppe erstellen",
|
|
@@ -151,6 +155,7 @@
|
|
|
151
155
|
"cmdk.search.topic": "Thema",
|
|
152
156
|
"cmdk.search.topics": "Themen",
|
|
153
157
|
"cmdk.searchPlaceholder": "Befehl eingeben oder suchen...",
|
|
158
|
+
"cmdk.sendToAgent": "An {{agent}} senden",
|
|
154
159
|
"cmdk.settings": "Einstellungen",
|
|
155
160
|
"cmdk.starOnGitHub": "GitHub-Stern vergeben",
|
|
156
161
|
"cmdk.submitIssue": "Problem melden",
|
package/locales/de-DE/error.json
CHANGED
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"import.importConfigFile.title": "Import fehlgeschlagen",
|
|
13
13
|
"import.incompatible.description": "Diese Datei wurde aus einer neueren Version exportiert. Bitte aktualisieren Sie auf die neueste Version und versuchen Sie den Import erneut.",
|
|
14
14
|
"import.incompatible.title": "Aktuelle Anwendung unterstützt den Import dieser Datei nicht",
|
|
15
|
+
"inviteCode.currentEmail": "Aktuelles Konto: {{email}}",
|
|
16
|
+
"inviteCode.desc": "Ein Einladungscode ist erforderlich, um auf LobeHub zuzugreifen. Bitte gib einen gültigen Einladungscode ein, um fortzufahren.",
|
|
17
|
+
"inviteCode.friends": "Freunde",
|
|
18
|
+
"inviteCode.getCodeHint": "Einen Einladungscode erhalten von:",
|
|
19
|
+
"inviteCode.title": "Einladungscode erforderlich",
|
|
15
20
|
"loginRequired.desc": "Sie werden in Kürze zur Anmeldeseite weitergeleitet",
|
|
16
21
|
"loginRequired.title": "Bitte melden Sie sich an, um diese Funktion zu nutzen",
|
|
17
22
|
"notFound.backHome": "Zurück zur Startseite",
|
|
@@ -144,5 +149,9 @@
|
|
|
144
149
|
"upload.networkError": "Bitte überprüfen Sie Ihre Netzwerkverbindung und die CORS-Konfiguration des Speicherdienstes.",
|
|
145
150
|
"upload.title": "Datei-Upload fehlgeschlagen. Bitte Netzwerk prüfen oder später erneut versuchen.",
|
|
146
151
|
"upload.unknownError": "Fehlerursache: {{reason}}",
|
|
147
|
-
"upload.uploadFailed": "Datei-Upload fehlgeschlagen."
|
|
152
|
+
"upload.uploadFailed": "Datei-Upload fehlgeschlagen.",
|
|
153
|
+
"waitlist.currentEmail": "Aktuelles Konto: {{email}}",
|
|
154
|
+
"waitlist.desc": "Dein Konto befindet sich nicht auf der Whitelist. Bitte kontaktiere den Administrator, um Zugriff zu beantragen.",
|
|
155
|
+
"waitlist.switchAccount": "Konto wechseln",
|
|
156
|
+
"waitlist.title": "Zugriff eingeschränkt"
|
|
148
157
|
}
|
|
@@ -99,6 +99,8 @@
|
|
|
99
99
|
"cmdk.askAI": "Ask Agent",
|
|
100
100
|
"cmdk.askAIHeading": "Use the following features for {{query}}",
|
|
101
101
|
"cmdk.askAIHeadingEmpty": "Choose an AI feature",
|
|
102
|
+
"cmdk.askAgentHeading": "Ask Agent",
|
|
103
|
+
"cmdk.askAgentPlaceholder": "Ask {{agent}} something...",
|
|
102
104
|
"cmdk.askLobeAI": "Ask Lobe AI",
|
|
103
105
|
"cmdk.community": "Community",
|
|
104
106
|
"cmdk.communitySupport": "Community Support",
|
|
@@ -114,8 +116,10 @@
|
|
|
114
116
|
"cmdk.context.settings": "Settings",
|
|
115
117
|
"cmdk.discover": "Discover",
|
|
116
118
|
"cmdk.keyboard.ESC": "ESC",
|
|
119
|
+
"cmdk.keyboard.Enter": "Enter",
|
|
117
120
|
"cmdk.keyboard.Tab": "Tab",
|
|
118
121
|
"cmdk.memory": "Memory",
|
|
122
|
+
"cmdk.mentionAgent": "Mention Agent",
|
|
119
123
|
"cmdk.navigate": "Navigate",
|
|
120
124
|
"cmdk.newAgent": "Create New Agent",
|
|
121
125
|
"cmdk.newAgentTeam": "Create New Group",
|
|
@@ -151,6 +155,7 @@
|
|
|
151
155
|
"cmdk.search.topic": "Topic",
|
|
152
156
|
"cmdk.search.topics": "Topics",
|
|
153
157
|
"cmdk.searchPlaceholder": "Enter a command or search...",
|
|
158
|
+
"cmdk.sendToAgent": "Send to {{agent}}",
|
|
154
159
|
"cmdk.settings": "Settings",
|
|
155
160
|
"cmdk.starOnGitHub": "Star us on GitHub",
|
|
156
161
|
"cmdk.submitIssue": "Submit Issue",
|