@lobehub/lobehub 2.0.0-next.307 → 2.0.0-next.308

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 (200) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/changelog/v1.json +12 -0
  3. package/locales/ar/agentGroup.json +5 -0
  4. package/locales/ar/chat.json +26 -0
  5. package/locales/ar/models.json +43 -5
  6. package/locales/ar/plugin.json +4 -5
  7. package/locales/ar/setting.json +11 -0
  8. package/locales/ar/subscription.json +2 -0
  9. package/locales/ar/tool.json +2 -0
  10. package/locales/bg-BG/agentGroup.json +5 -0
  11. package/locales/bg-BG/chat.json +26 -0
  12. package/locales/bg-BG/models.json +49 -3
  13. package/locales/bg-BG/plugin.json +4 -5
  14. package/locales/bg-BG/setting.json +11 -0
  15. package/locales/bg-BG/subscription.json +2 -0
  16. package/locales/bg-BG/tool.json +2 -0
  17. package/locales/de-DE/agentGroup.json +5 -0
  18. package/locales/de-DE/chat.json +26 -0
  19. package/locales/de-DE/models.json +48 -5
  20. package/locales/de-DE/plugin.json +4 -5
  21. package/locales/de-DE/setting.json +11 -0
  22. package/locales/de-DE/subscription.json +2 -0
  23. package/locales/de-DE/tool.json +2 -0
  24. package/locales/en-US/models.json +8 -6
  25. package/locales/en-US/plugin.json +2 -4
  26. package/locales/en-US/setting.json +10 -11
  27. package/locales/en-US/tool.json +2 -0
  28. package/locales/es-ES/agentGroup.json +5 -0
  29. package/locales/es-ES/chat.json +26 -0
  30. package/locales/es-ES/models.json +43 -5
  31. package/locales/es-ES/plugin.json +4 -5
  32. package/locales/es-ES/setting.json +11 -0
  33. package/locales/es-ES/subscription.json +2 -0
  34. package/locales/es-ES/tool.json +2 -0
  35. package/locales/fa-IR/agentGroup.json +5 -0
  36. package/locales/fa-IR/chat.json +26 -0
  37. package/locales/fa-IR/models.json +42 -5
  38. package/locales/fa-IR/plugin.json +4 -5
  39. package/locales/fa-IR/setting.json +11 -0
  40. package/locales/fa-IR/subscription.json +2 -0
  41. package/locales/fa-IR/tool.json +2 -0
  42. package/locales/fr-FR/agentGroup.json +5 -0
  43. package/locales/fr-FR/chat.json +26 -0
  44. package/locales/fr-FR/models.json +5 -5
  45. package/locales/fr-FR/plugin.json +4 -5
  46. package/locales/fr-FR/setting.json +11 -0
  47. package/locales/fr-FR/subscription.json +2 -0
  48. package/locales/fr-FR/tool.json +2 -0
  49. package/locales/it-IT/agentGroup.json +5 -0
  50. package/locales/it-IT/chat.json +26 -0
  51. package/locales/it-IT/models.json +1 -3
  52. package/locales/it-IT/plugin.json +4 -5
  53. package/locales/it-IT/setting.json +11 -0
  54. package/locales/it-IT/subscription.json +2 -0
  55. package/locales/it-IT/tool.json +2 -0
  56. package/locales/ja-JP/agentGroup.json +5 -0
  57. package/locales/ja-JP/chat.json +26 -0
  58. package/locales/ja-JP/models.json +1 -5
  59. package/locales/ja-JP/plugin.json +4 -5
  60. package/locales/ja-JP/setting.json +11 -0
  61. package/locales/ja-JP/subscription.json +2 -0
  62. package/locales/ja-JP/tool.json +2 -0
  63. package/locales/ko-KR/agentGroup.json +5 -0
  64. package/locales/ko-KR/chat.json +26 -0
  65. package/locales/ko-KR/models.json +1 -3
  66. package/locales/ko-KR/plugin.json +4 -5
  67. package/locales/ko-KR/setting.json +11 -0
  68. package/locales/ko-KR/subscription.json +2 -0
  69. package/locales/ko-KR/tool.json +2 -0
  70. package/locales/nl-NL/agentGroup.json +5 -0
  71. package/locales/nl-NL/chat.json +26 -0
  72. package/locales/nl-NL/models.json +35 -3
  73. package/locales/nl-NL/plugin.json +4 -5
  74. package/locales/nl-NL/setting.json +11 -0
  75. package/locales/nl-NL/subscription.json +2 -0
  76. package/locales/nl-NL/tool.json +2 -0
  77. package/locales/pl-PL/agentGroup.json +5 -0
  78. package/locales/pl-PL/chat.json +26 -0
  79. package/locales/pl-PL/models.json +1 -3
  80. package/locales/pl-PL/plugin.json +4 -5
  81. package/locales/pl-PL/setting.json +11 -0
  82. package/locales/pl-PL/subscription.json +2 -0
  83. package/locales/pl-PL/tool.json +2 -0
  84. package/locales/pt-BR/agentGroup.json +5 -0
  85. package/locales/pt-BR/chat.json +26 -0
  86. package/locales/pt-BR/models.json +50 -5
  87. package/locales/pt-BR/plugin.json +4 -5
  88. package/locales/pt-BR/setting.json +11 -0
  89. package/locales/pt-BR/subscription.json +2 -0
  90. package/locales/pt-BR/tool.json +2 -0
  91. package/locales/ru-RU/agentGroup.json +5 -0
  92. package/locales/ru-RU/chat.json +26 -0
  93. package/locales/ru-RU/models.json +22 -3
  94. package/locales/ru-RU/plugin.json +4 -5
  95. package/locales/ru-RU/setting.json +11 -0
  96. package/locales/ru-RU/subscription.json +2 -0
  97. package/locales/ru-RU/tool.json +2 -0
  98. package/locales/tr-TR/agentGroup.json +5 -0
  99. package/locales/tr-TR/chat.json +26 -0
  100. package/locales/tr-TR/models.json +36 -3
  101. package/locales/tr-TR/plugin.json +4 -5
  102. package/locales/tr-TR/setting.json +11 -0
  103. package/locales/tr-TR/subscription.json +2 -0
  104. package/locales/tr-TR/tool.json +2 -0
  105. package/locales/vi-VN/agentGroup.json +5 -0
  106. package/locales/vi-VN/chat.json +26 -0
  107. package/locales/vi-VN/models.json +1 -1
  108. package/locales/vi-VN/plugin.json +4 -5
  109. package/locales/vi-VN/setting.json +11 -0
  110. package/locales/vi-VN/subscription.json +2 -0
  111. package/locales/vi-VN/tool.json +2 -0
  112. package/locales/zh-CN/models.json +52 -5
  113. package/locales/zh-CN/plugin.json +5 -7
  114. package/locales/zh-CN/setting.json +10 -11
  115. package/locales/zh-CN/tool.json +2 -2
  116. package/locales/zh-TW/agentGroup.json +5 -0
  117. package/locales/zh-TW/chat.json +26 -0
  118. package/locales/zh-TW/models.json +54 -5
  119. package/locales/zh-TW/plugin.json +4 -5
  120. package/locales/zh-TW/setting.json +11 -0
  121. package/locales/zh-TW/subscription.json +2 -0
  122. package/locales/zh-TW/tool.json +2 -0
  123. package/package.json +1 -1
  124. package/packages/builtin-tool-group-management/src/client/Inspector/ExecuteAgentTask/index.tsx +52 -8
  125. package/packages/builtin-tool-group-management/src/client/Render/ExecuteTask/index.tsx +2 -21
  126. package/packages/builtin-tool-group-management/src/executor.test.ts +6 -4
  127. package/packages/builtin-tool-group-management/src/manifest.ts +5 -1
  128. package/packages/builtin-tool-group-management/src/types.ts +2 -0
  129. package/packages/builtin-tool-local-system/src/client/Render/WriteFile/index.tsx +48 -5
  130. package/packages/builtin-tool-local-system/src/client/Streaming/WriteFile/index.tsx +39 -0
  131. package/packages/builtin-tool-local-system/src/client/Streaming/index.ts +2 -0
  132. package/packages/model-bank/src/aiModels/qiniu.ts +24 -0
  133. package/src/app/[variants]/(auth)/_layout/index.tsx +0 -2
  134. package/src/app/[variants]/(auth)/layout.tsx +0 -2
  135. package/src/app/[variants]/(auth)/login/[[...login]]/page.tsx +1 -3
  136. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -3
  137. package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/index.tsx +0 -2
  138. package/src/app/[variants]/(main)/_layout/index.tsx +0 -2
  139. package/src/app/[variants]/(main)/agent/_layout/index.tsx +0 -2
  140. package/src/app/[variants]/(main)/agent/features/Portal/index.tsx +0 -2
  141. package/src/app/[variants]/(main)/community/(list)/_layout/index.tsx +0 -2
  142. package/src/app/[variants]/(main)/community/(list)/assistant/_layout/index.tsx +0 -2
  143. package/src/app/[variants]/(main)/community/(list)/mcp/_layout/index.tsx +0 -2
  144. package/src/app/[variants]/(main)/community/(list)/model/_layout/index.tsx +0 -2
  145. package/src/app/[variants]/(main)/community/_layout/index.tsx +0 -2
  146. package/src/app/[variants]/(main)/group/_layout/index.tsx +0 -2
  147. package/src/app/[variants]/(main)/group/features/Conversation/Header/index.tsx +4 -2
  148. package/src/app/[variants]/(main)/group/features/Portal/index.tsx +0 -2
  149. package/src/app/[variants]/(main)/home/_layout/index.tsx +0 -2
  150. package/src/app/[variants]/(main)/home/index.tsx +0 -2
  151. package/src/app/[variants]/(main)/image/_layout/Topics/TopicUrlSync.tsx +0 -2
  152. package/src/app/[variants]/(main)/image/_layout/index.tsx +0 -2
  153. package/src/app/[variants]/(main)/memory/_layout/index.tsx +0 -2
  154. package/src/app/[variants]/(main)/page/_layout/index.tsx +0 -2
  155. package/src/app/[variants]/(main)/resource/(home)/_layout/index.tsx +0 -2
  156. package/src/app/[variants]/(main)/resource/_layout/index.tsx +0 -2
  157. package/src/app/[variants]/(main)/resource/library/_layout/index.tsx +0 -2
  158. package/src/app/[variants]/(main)/resource/library/features/Container.tsx +0 -2
  159. package/src/app/[variants]/(main)/settings/_layout/index.tsx +0 -2
  160. package/src/app/[variants]/(main)/settings/about/index.tsx +0 -2
  161. package/src/app/[variants]/(main)/settings/agent/index.tsx +0 -2
  162. package/src/app/[variants]/(main)/settings/apikey/index.tsx +0 -2
  163. package/src/app/[variants]/(main)/settings/chat-appearance/index.tsx +0 -2
  164. package/src/app/[variants]/(main)/settings/common/index.tsx +0 -2
  165. package/src/app/[variants]/(main)/settings/hotkey/index.tsx +0 -2
  166. package/src/app/[variants]/(main)/settings/image/index.tsx +0 -2
  167. package/src/app/[variants]/(main)/settings/memory/index.tsx +0 -2
  168. package/src/app/[variants]/(main)/settings/provider/(list)/index.tsx +0 -2
  169. package/src/app/[variants]/(main)/settings/proxy/index.tsx +0 -2
  170. package/src/app/[variants]/(main)/settings/security/index.tsx +1 -3
  171. package/src/app/[variants]/(main)/settings/storage/index.tsx +0 -2
  172. package/src/app/[variants]/(main)/settings/tts/index.tsx +0 -2
  173. package/src/app/[variants]/(mobile)/(home)/_layout/index.tsx +0 -2
  174. package/src/app/[variants]/(mobile)/_layout/index.tsx +1 -3
  175. package/src/app/[variants]/(mobile)/chat/_layout/index.tsx +0 -2
  176. package/src/app/[variants]/(mobile)/chat/settings/_layout/index.tsx +0 -2
  177. package/src/app/[variants]/(mobile)/community/(detail)/_layout/index.tsx +0 -2
  178. package/src/app/[variants]/(mobile)/community/(list)/_layout/index.tsx +0 -2
  179. package/src/app/[variants]/(mobile)/community/_layout/index.tsx +0 -2
  180. package/src/app/[variants]/(mobile)/router/MobileClientRouter.tsx +0 -2
  181. package/src/app/[variants]/(mobile)/settings/index.tsx +0 -2
  182. package/src/app/[variants]/onboarding/_layout/index.tsx +0 -2
  183. package/src/app/[variants]/router/DesktopClientRouter.tsx +0 -2
  184. package/src/components/ModelSelect/index.tsx +6 -56
  185. package/src/components/server/MobileNavLayout.tsx +0 -2
  186. package/src/components/server/ServerLayout.tsx +0 -2
  187. package/src/features/ModelSwitchPanel/components/Footer.tsx +0 -2
  188. package/src/features/ModelSwitchPanel/components/List/MultipleProvidersModelItem.tsx +0 -1
  189. package/src/features/ModelSwitchPanel/components/List/SingleProviderModelItem.tsx +0 -1
  190. package/src/features/ModelSwitchPanel/components/List/VirtualItemRenderer.tsx +0 -1
  191. package/src/features/ModelSwitchPanel/components/List/index.tsx +15 -13
  192. package/src/features/ModelSwitchPanel/components/PanelContent.tsx +0 -2
  193. package/src/features/ModelSwitchPanel/index.tsx +21 -23
  194. package/src/features/ResourceManager/components/Explorer/MasonryView/index.tsx +0 -2
  195. package/src/features/User/UserAvatar.tsx +0 -2
  196. package/src/locales/default/plugin.ts +2 -1
  197. package/src/store/chat/agents/GroupOrchestration/__tests__/call-supervisor.test.ts +305 -0
  198. package/src/store/chat/agents/GroupOrchestration/createGroupOrchestrationExecutors.ts +2 -1
  199. package/src/store/chat/slices/plugin/actions/exector.ts +92 -0
  200. package/src/store/chat/slices/plugin/actions/pluginTypes.ts +82 -177
@@ -173,8 +173,11 @@
173
173
  "llm.waitingForMoreLinkAriaLabel": "開啟模型服務商接入需求表單",
174
174
  "marketPublish.forkConfirm.by": "由 {{author}}",
175
175
  "marketPublish.forkConfirm.confirm": "確認發佈",
176
+ "marketPublish.forkConfirm.confirmGroup": "確認發佈",
176
177
  "marketPublish.forkConfirm.description": "您即將發佈一個基於社群中現有代理所衍生的版本。您的新代理將作為獨立項目發佈至市集。",
178
+ "marketPublish.forkConfirm.descriptionGroup": "您即將根據社群中現有的群組發佈一個衍生版本。您的新群組將作為獨立項目發佈至市集。",
177
179
  "marketPublish.forkConfirm.title": "發佈衍生代理",
180
+ "marketPublish.forkConfirm.titleGroup": "發佈衍生群組",
178
181
  "marketPublish.modal.changelog.extra": "描述此版本的主要變更與改進",
179
182
  "marketPublish.modal.changelog.label": "變更日誌",
180
183
  "marketPublish.modal.changelog.maxLengthError": "變更日誌不能超過 500 個字元",
@@ -190,22 +193,28 @@
190
193
  "marketPublish.modal.identifier.required": "請輸入助手識別碼",
191
194
  "marketPublish.modal.loading.fetchingRemote": "正在載入遠端資料...",
192
195
  "marketPublish.modal.loading.submit": "正在發布助手...",
196
+ "marketPublish.modal.loading.submitGroup": "正在提交群組...",
193
197
  "marketPublish.modal.loading.upload": "正在發布新版本...",
198
+ "marketPublish.modal.loading.uploadGroup": "正在發佈新群組版本...",
194
199
  "marketPublish.modal.messages.createVersionFailed": "版本建立失敗:{{message}}",
195
200
  "marketPublish.modal.messages.fetchRemoteFailed": "取得遠端助手資料失敗",
196
201
  "marketPublish.modal.messages.missingIdentifier": "目前的助手尚未設定社群識別碼",
202
+ "marketPublish.modal.messages.noGroup": "未選擇任何群組",
197
203
  "marketPublish.modal.messages.notAuthenticated": "請先登入社群帳號",
198
204
  "marketPublish.modal.messages.publishFailed": "發布失敗:{{message}}",
199
205
  "marketPublish.modal.submitButton": "發布",
200
206
  "marketPublish.modal.title.submit": "分享到助手社群",
201
207
  "marketPublish.modal.title.upload": "發布新版本",
202
208
  "marketPublish.resultModal.message": "您創作的助手已提交審核,通過後將自動上線。",
209
+ "marketPublish.resultModal.messageGroup": "您的群組已提交審核,審核通過後將自動上線。",
203
210
  "marketPublish.resultModal.title": "提交成功",
204
211
  "marketPublish.resultModal.view": "前往社群查看",
205
212
  "marketPublish.submit.button": "分享到社群",
206
213
  "marketPublish.submit.tooltip": "分享助手到社群",
214
+ "marketPublish.submitGroup.tooltip": "分享此群組至社群",
207
215
  "marketPublish.upload.button": "發布新版本",
208
216
  "marketPublish.upload.tooltip": "發佈新版本到助手社群",
217
+ "marketPublish.uploadGroup.tooltip": "發佈新版本至群組社群",
209
218
  "memory.enabled.desc": "允許 LobeHub 從對話中提取偏好與資訊,並於日後使用。您可隨時檢視、編輯或清除記憶內容。",
210
219
  "memory.enabled.title": "啟用記憶功能",
211
220
  "memory.title": "記憶設定",
@@ -254,6 +263,7 @@
254
263
  "plugin.settings.title": "{{id}} 外掛設定",
255
264
  "plugin.settings.tooltip": "外掛設定",
256
265
  "plugin.store": "外掛商店",
266
+ "publishToCommunity": "發佈至社群",
257
267
  "settingAgent.avatar.sizeExceeded": "圖片大小超過 1MB 限制,請選擇較小的圖片",
258
268
  "settingAgent.avatar.title": "頭像",
259
269
  "settingAgent.backgroundColor.title": "背景色",
@@ -483,6 +493,7 @@
483
493
  "submitAgentModal.placeholder": "請輸入助手的標識符,需要是唯一的,比如 web-development",
484
494
  "submitAgentModal.success": "助手提交成功",
485
495
  "submitAgentModal.tooltips": "分享到助手社群",
496
+ "submitGroupModal.tooltips": "分享至群組社群",
486
497
  "sync.device.deviceName.hint": "添加名稱以便於識別",
487
498
  "sync.device.deviceName.placeholder": "請輸入裝置名稱",
488
499
  "sync.device.deviceName.title": "裝置名稱",
@@ -54,6 +54,8 @@
54
54
  "funds.packages.expiresIn": "{{days}} 天後過期",
55
55
  "funds.packages.expiresToday": "今日過期",
56
56
  "funds.packages.expiringSoon": "即將過期",
57
+ "funds.packages.gift": "禮物",
58
+ "funds.packages.giftedOn": "於 {{date}} 贈送",
57
59
  "funds.packages.noPackages": "尚無點數方案",
58
60
  "funds.packages.purchaseFirst": "購買您的第一個點數方案",
59
61
  "funds.packages.purchasedOn": "購買於 {{date}}",
@@ -15,6 +15,8 @@
15
15
  "agentGroupManagement.executeTask.thread": "Thread ID",
16
16
  "agentGroupManagement.executeTask.timeout": "執行逾時",
17
17
  "agentGroupManagement.executeTask.tokens": "Token 消耗",
18
+ "agentGroupManagement.executeTasks.intervention.instructionPlaceholder": "請輸入代理執行此任務的詳細指示……",
19
+ "agentGroupManagement.executeTasks.intervention.titlePlaceholder": "任務標題……",
18
20
  "codeInterpreter-legacy.error": "執行錯誤",
19
21
  "codeInterpreter-legacy.executing": "執行中...",
20
22
  "codeInterpreter-legacy.files": "檔案:",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.0.0-next.307",
3
+ "version": "2.0.0-next.308",
4
4
  "description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -32,6 +32,7 @@ export const ExecuteAgentTaskInspector = memo<BuiltinInspectorProps<ExecuteTaskP
32
32
  const { t } = useTranslation('plugin');
33
33
 
34
34
  const agentId = args?.agentId || partialArgs?.agentId;
35
+ const taskTitle = args?.title || partialArgs?.title;
35
36
 
36
37
  // Get active group ID and agent from store
37
38
  const activeGroupId = useAgentGroupStore(agentGroupSelectors.activeGroupId);
@@ -42,12 +43,47 @@ export const ExecuteAgentTaskInspector = memo<BuiltinInspectorProps<ExecuteTaskP
42
43
  );
43
44
  const theme = useTheme();
44
45
 
45
- if (isArgumentsStreaming && !agent) {
46
- return (
47
- <div className={cx(styles.root, shinyTextStyles.shinyText)}>
48
- <span>{t('builtins.lobe-group-management.apiName.executeAgentTask')}</span>
49
- </div>
50
- );
46
+ if (isArgumentsStreaming) {
47
+ if (!agent && !taskTitle)
48
+ return (
49
+ <div className={cx(styles.root, shinyTextStyles.shinyText)}>
50
+ <span>{t('builtins.lobe-group-management.apiName.executeAgentTask')}</span>
51
+ </div>
52
+ );
53
+ if (agent) {
54
+ return (
55
+ <Flexbox
56
+ align={'center'}
57
+ className={cx(styles.root, isArgumentsStreaming && shinyTextStyles.shinyText)}
58
+ gap={8}
59
+ horizontal
60
+ >
61
+ <span className={styles.title}>
62
+ {t('builtins.lobe-group-management.inspector.executeAgentTask.assignTo')}
63
+ </span>
64
+ {agent && (
65
+ <>
66
+ <Avatar
67
+ avatar={agent.avatar || DEFAULT_AVATAR}
68
+ background={agent.backgroundColor || theme.colorBgContainer}
69
+ shape={'square'}
70
+ size={24}
71
+ title={agent.title || undefined}
72
+ />
73
+ <span>{agent?.title}</span>
74
+ </>
75
+ )}
76
+ {taskTitle && (
77
+ <>
78
+ <span className={styles.title}>
79
+ {t('builtins.lobe-group-management.inspector.executeAgentTask.task')}
80
+ </span>
81
+ <span className={highlightTextStyles.primary}>{taskTitle}</span>
82
+ </>
83
+ )}
84
+ </Flexbox>
85
+ );
86
+ }
51
87
  }
52
88
 
53
89
  const agentName = agent?.title || agentId;
@@ -60,7 +96,7 @@ export const ExecuteAgentTaskInspector = memo<BuiltinInspectorProps<ExecuteTaskP
60
96
  horizontal
61
97
  >
62
98
  <span className={styles.title}>
63
- {t('builtins.lobe-group-management.inspector.executeAgentTask.title')}
99
+ {t('builtins.lobe-group-management.inspector.executeAgentTask.assignTo')}
64
100
  </span>
65
101
  {agent && (
66
102
  <Avatar
@@ -71,7 +107,15 @@ export const ExecuteAgentTaskInspector = memo<BuiltinInspectorProps<ExecuteTaskP
71
107
  title={agent.title || undefined}
72
108
  />
73
109
  )}
74
- {agentName && <span className={highlightTextStyles.primary}>{agentName}</span>}
110
+ {agentName && <span>{agentName}</span>}
111
+ {taskTitle && (
112
+ <>
113
+ <span className={styles.title}>
114
+ {t('builtins.lobe-group-management.inspector.executeAgentTask.task')}
115
+ </span>
116
+ <span className={highlightTextStyles.primary}>{taskTitle}</span>
117
+ </>
118
+ )}
75
119
  </Flexbox>
76
120
  );
77
121
  },
@@ -1,15 +1,12 @@
1
1
  'use client';
2
2
 
3
3
  import { BuiltinRenderProps } from '@lobechat/types';
4
- import { Avatar, Flexbox, Text } from '@lobehub/ui';
4
+ import { Flexbox, Text } from '@lobehub/ui';
5
5
  import { createStaticStyles } from 'antd-style';
6
6
  import { Clock } from 'lucide-react';
7
7
  import { memo } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
 
10
- import { useAgentGroupStore } from '@/store/agentGroup';
11
- import { agentGroupSelectors } from '@/store/agentGroup/selectors';
12
-
13
10
  import type { ExecuteTaskParams, ExecuteTaskState } from '../../../types';
14
11
 
15
12
  const styles = createStaticStyles(({ css, cssVar }) => ({
@@ -40,14 +37,6 @@ const ExecuteTaskRender = memo<BuiltinRenderProps<ExecuteTaskParams, ExecuteTask
40
37
  ({ args }) => {
41
38
  const { t } = useTranslation('tool');
42
39
 
43
- // Get agent info from store
44
- const activeGroupId = useAgentGroupStore(agentGroupSelectors.activeGroupId);
45
- const agent = useAgentGroupStore((s) =>
46
- args?.agentId && activeGroupId
47
- ? agentGroupSelectors.getAgentByIdFromGroup(activeGroupId, args.agentId)(s)
48
- : undefined,
49
- );
50
-
51
40
  const timeoutMinutes = args?.timeout ? Math.round(args.timeout / 60_000) : 30;
52
41
 
53
42
  return (
@@ -55,15 +44,7 @@ const ExecuteTaskRender = memo<BuiltinRenderProps<ExecuteTaskParams, ExecuteTask
55
44
  {/* Header: Agent info + Timeout */}
56
45
  <Flexbox align={'center'} gap={12} horizontal justify={'space-between'}>
57
46
  <Flexbox align={'center'} flex={1} gap={12} horizontal style={{ minWidth: 0 }}>
58
- <Avatar
59
- avatar={agent?.avatar || '🤖'}
60
- background={agent?.backgroundColor || undefined}
61
- size={24}
62
- style={{ borderRadius: 8, flexShrink: 0 }}
63
- />
64
- <span className={styles.agentTitle}>
65
- {agent?.title || t('agentGroupManagement.executeTask.intervention.unknownAgent')}
66
- </span>
47
+ <span className={styles.agentTitle}>{args?.title}</span>
67
48
  </Flexbox>
68
49
  <Flexbox align="center" className={styles.timeout} gap={4} horizontal>
69
50
  <Clock size={14} />
@@ -280,7 +280,7 @@ describe('GroupManagementExecutor', () => {
280
280
  const ctx = createMockContext();
281
281
 
282
282
  const result = await groupManagementExecutor.executeAgentTask(
283
- { agentId: 'agent-1', task: 'Do something' },
283
+ { agentId: 'agent-1', task: 'Do something', title: 'Test Task' },
284
284
  ctx,
285
285
  );
286
286
 
@@ -291,6 +291,7 @@ describe('GroupManagementExecutor', () => {
291
291
  agentId: 'agent-1',
292
292
  task: 'Do something',
293
293
  timeout: undefined,
294
+ title: 'Test Task',
294
295
  type: 'executeAgentTask',
295
296
  });
296
297
  });
@@ -314,7 +315,7 @@ describe('GroupManagementExecutor', () => {
314
315
  );
315
316
 
316
317
  await groupManagementExecutor.executeAgentTask(
317
- { agentId: 'agent-1', task: 'Do something', timeout: 30000 },
318
+ { agentId: 'agent-1', task: 'Do something', timeout: 30000, title: 'Test Task' },
318
319
  ctx,
319
320
  );
320
321
 
@@ -339,7 +340,7 @@ describe('GroupManagementExecutor', () => {
339
340
  const ctx = createMockContext();
340
341
 
341
342
  const result = await groupManagementExecutor.executeAgentTask(
342
- { agentId: 'agent-1', task: 'Do something' },
343
+ { agentId: 'agent-1', task: 'Do something', title: 'Test Task' },
343
344
  ctx,
344
345
  );
345
346
 
@@ -351,7 +352,7 @@ describe('GroupManagementExecutor', () => {
351
352
  const ctx = createMockContext();
352
353
 
353
354
  const result = await groupManagementExecutor.executeAgentTask(
354
- { agentId: 'agent-1', task: 'Do something', timeout: 60000 },
355
+ { agentId: 'agent-1', task: 'Do something', timeout: 60000, title: 'Test Task' },
355
356
  ctx,
356
357
  );
357
358
 
@@ -360,6 +361,7 @@ describe('GroupManagementExecutor', () => {
360
361
  agentId: 'agent-1',
361
362
  task: 'Do something',
362
363
  timeout: 60000,
364
+ title: 'Test Task',
363
365
  type: 'executeAgentTask',
364
366
  });
365
367
  });
@@ -95,6 +95,10 @@ export const GroupManagementManifest: BuiltinToolManifest = {
95
95
  description: 'The ID of the agent to execute the task.',
96
96
  type: 'string',
97
97
  },
98
+ title: {
99
+ description: 'Brief title describing what this task does (shown in UI).',
100
+ type: 'string',
101
+ },
98
102
  task: {
99
103
  description:
100
104
  'Clear description of the task to perform. Be specific about expected deliverables.',
@@ -113,7 +117,7 @@ export const GroupManagementManifest: BuiltinToolManifest = {
113
117
  type: 'boolean',
114
118
  },
115
119
  },
116
- required: ['agentId', 'task'],
120
+ required: ['agentId', 'title', 'task'],
117
121
  type: 'object',
118
122
  },
119
123
  },
@@ -80,6 +80,8 @@ export interface ExecuteTaskParams {
80
80
  skipCallSupervisor?: boolean;
81
81
  task: string;
82
82
  timeout?: number;
83
+ /** Brief title describing what this task does (shown in UI) */
84
+ title: string;
83
85
  }
84
86
 
85
87
  export interface TaskItem {
@@ -1,22 +1,65 @@
1
1
  import { type WriteLocalFileParams } from '@lobechat/electron-client-ipc';
2
2
  import { type BuiltinRenderProps } from '@lobechat/types';
3
- import { Flexbox, Icon, Skeleton } from '@lobehub/ui';
3
+ import { Flexbox, Highlighter, Icon, Markdown, Skeleton } from '@lobehub/ui';
4
+ import { createStaticStyles } from 'antd-style';
4
5
  import { ChevronRight } from 'lucide-react';
5
6
  import path from 'path-browserify-esm';
6
7
  import { memo } from 'react';
7
8
 
8
9
  import { LocalFile, LocalFolder } from '@/features/LocalFile';
9
10
 
11
+ const styles = createStaticStyles(({ css, cssVar }) => ({
12
+ container: css`
13
+ padding: 8px;
14
+ border-radius: ${cssVar.borderRadiusLG};
15
+ background: ${cssVar.colorFillQuaternary};
16
+ `,
17
+ previewBox: css`
18
+ overflow: hidden;
19
+ border-radius: 8px;
20
+ background: ${cssVar.colorBgContainer};
21
+ `,
22
+ }));
23
+
10
24
  const WriteFile = memo<BuiltinRenderProps<WriteLocalFileParams>>(({ args }) => {
11
25
  if (!args) return <Skeleton active />;
12
26
 
13
27
  const { base, dir } = path.parse(args.path);
28
+ const ext = path.extname(args.path).slice(1).toLowerCase();
29
+
30
+ const renderContent = () => {
31
+ if (!args.content) return null;
32
+
33
+ if (ext === 'md' || ext === 'mdx') {
34
+ return (
35
+ <Markdown style={{ maxHeight: 240, overflow: 'auto', padding: '0 8px' }}>
36
+ {args.content}
37
+ </Markdown>
38
+ );
39
+ }
40
+
41
+ return (
42
+ <Highlighter
43
+ language={ext || 'text'}
44
+ showLanguage={false}
45
+ style={{ maxHeight: 240, overflow: 'auto' }}
46
+ variant={'borderless'}
47
+ wrap
48
+ >
49
+ {args.content}
50
+ </Highlighter>
51
+ );
52
+ };
14
53
 
15
54
  return (
16
- <Flexbox horizontal>
17
- <LocalFolder path={dir} />
18
- <Icon icon={ChevronRight} />
19
- <LocalFile name={base} path={args.path} />
55
+ <Flexbox className={styles.container} gap={12}>
56
+ <Flexbox align={'center'} horizontal>
57
+ <LocalFolder path={dir} />
58
+ <Icon icon={ChevronRight} />
59
+ <LocalFile name={base} path={args.path} />
60
+ </Flexbox>
61
+
62
+ {args.content && <Flexbox className={styles.previewBox}>{renderContent()}</Flexbox>}
20
63
  </Flexbox>
21
64
  );
22
65
  });
@@ -0,0 +1,39 @@
1
+ 'use client';
2
+
3
+ import { type WriteLocalFileParams } from '@lobechat/electron-client-ipc';
4
+ import { type BuiltinStreamingProps } from '@lobechat/types';
5
+ import { Highlighter, Markdown } from '@lobehub/ui';
6
+ import path from 'path-browserify-esm';
7
+ import { memo } from 'react';
8
+
9
+ export const WriteFileStreaming = memo<BuiltinStreamingProps<WriteLocalFileParams>>(({ args }) => {
10
+ const { content, path: filePath } = args || {};
11
+
12
+ // Don't render if no content yet
13
+ if (!content) return null;
14
+
15
+ const ext = path
16
+ .extname(filePath || '')
17
+ .slice(1)
18
+ .toLowerCase();
19
+
20
+ // Use Markdown for .md files, Highlighter for others
21
+ if (ext === 'md' || ext === 'mdx') {
22
+ return <Markdown style={{ overflow: 'auto' }}>{content}</Markdown>;
23
+ }
24
+
25
+ return (
26
+ <Highlighter
27
+ animated
28
+ language={ext || 'text'}
29
+ showLanguage={false}
30
+ style={{ padding: '4px 8px' }}
31
+ variant={'outlined'}
32
+ wrap
33
+ >
34
+ {content}
35
+ </Highlighter>
36
+ );
37
+ });
38
+
39
+ WriteFileStreaming.displayName = 'WriteFileStreaming';
@@ -1,9 +1,11 @@
1
1
  import { LocalSystemApiName } from '../..';
2
2
  import { RunCommandStreaming } from './RunCommand';
3
+ import { WriteFileStreaming } from './WriteFile';
3
4
 
4
5
  /**
5
6
  * Local System Streaming Components Registry
6
7
  */
7
8
  export const LocalSystemStreamings = {
8
9
  [LocalSystemApiName.runCommand]: RunCommandStreaming,
10
+ [LocalSystemApiName.writeLocalFile]: WriteFileStreaming,
9
11
  };
@@ -78,6 +78,30 @@ const qiniuChatModels: AIChatModelCard[] = [
78
78
  },
79
79
  type: 'chat',
80
80
  },
81
+ {
82
+ abilities: {
83
+ reasoning: true,
84
+ },
85
+ contextWindowTokens: 163_840,
86
+ description:
87
+ 'DeepSeek Math V2 is a model that has made significant breakthroughs in mathematical reasoning capabilities. Its core innovation lies in the "self-verification" training mechanism, and it has achieved gold medal levels in several top mathematics competitions.',
88
+ displayName: 'DeepSeek Math V2',
89
+ enabled: true,
90
+ id: 'deepseek/deepseek-math-v2',
91
+ maxOutput: 131_072,
92
+ pricing: {
93
+ currency: 'CNY',
94
+ units: [
95
+ { name: 'textInput', rate: 4.0, strategy: 'fixed', unit: 'millionTokens' },
96
+ { name: 'textOutput', rate: 16.0, strategy: 'fixed', unit: 'millionTokens' },
97
+ ],
98
+ },
99
+ releasedAt: '2025-11-27',
100
+ settings: {
101
+ searchImpl: 'params',
102
+ },
103
+ type: 'chat',
104
+ },
81
105
  {
82
106
  abilities: {
83
107
  functionCall: true,
@@ -49,6 +49,4 @@ const AuthContainer: FC<PropsWithChildren> = ({ children }) => {
49
49
  );
50
50
  };
51
51
 
52
- AuthContainer.displayName = 'AuthContainer';
53
-
54
52
  export default AuthContainer;
@@ -15,6 +15,4 @@ const AuthLayout: FC<PropsWithChildren> = ({ children }) => {
15
15
  );
16
16
  };
17
17
 
18
- AuthLayout.displayName = 'AuthLayout';
19
-
20
18
  export default AuthLayout;
@@ -1,8 +1,8 @@
1
1
  import { SignIn } from '@clerk/nextjs';
2
2
  import { BRANDING_NAME } from '@lobechat/business-const';
3
- import { notFound } from '@/libs/next/navigation';
4
3
 
5
4
  import { enableClerk } from '@/envs/auth';
5
+ import { notFound } from '@/libs/next/navigation';
6
6
  import { metadataModule } from '@/server/metadata';
7
7
  import { translation } from '@/server/translation';
8
8
  import { type DynamicLayoutProps } from '@/types/next';
@@ -24,6 +24,4 @@ const Page = () => {
24
24
  return <SignIn path="/login" />;
25
25
  };
26
26
 
27
- Page.displayName = 'Login';
28
-
29
27
  export default Page;
@@ -1,7 +1,7 @@
1
1
  import { SignUp } from '@clerk/nextjs';
2
- import { notFound } from '@/libs/next/navigation';
3
2
 
4
3
  import { enableBetterAuth, enableClerk } from '@/envs/auth';
4
+ import { notFound } from '@/libs/next/navigation';
5
5
  import { metadataModule } from '@/server/metadata';
6
6
  import { translation } from '@/server/translation';
7
7
  import { type DynamicLayoutProps } from '@/types/next';
@@ -48,6 +48,4 @@ const Page = () => {
48
48
  return notFound();
49
49
  };
50
50
 
51
- Page.displayName = 'SignUp';
52
-
53
51
  export default Page;
@@ -58,6 +58,4 @@ const OnboardingContainer: FC<PropsWithChildren> = ({ children }) => {
58
58
  );
59
59
  };
60
60
 
61
- OnboardingContainer.displayName = 'OnboardingContainer';
62
-
63
61
  export default OnboardingContainer;
@@ -89,6 +89,4 @@ const Layout: FC = () => {
89
89
  );
90
90
  };
91
91
 
92
- Layout.displayName = 'DesktopMainLayout';
93
-
94
92
  export default Layout;
@@ -30,6 +30,4 @@ const Layout: FC = () => {
30
30
  );
31
31
  };
32
32
 
33
- Layout.displayName = 'DesktopChatLayout';
34
-
35
33
  export default Layout;
@@ -15,6 +15,4 @@ const ChatPortal = () => {
15
15
  );
16
16
  };
17
17
 
18
- ChatPortal.displayName = 'ChatPortal';
19
-
20
18
  export default ChatPortal;
@@ -32,6 +32,4 @@ const Layout = () => {
32
32
  );
33
33
  };
34
34
 
35
- Layout.displayName = 'DesktopDiscoverStoreLayout';
36
-
37
35
  export default Layout;
@@ -18,6 +18,4 @@ const Layout = () => {
18
18
  );
19
19
  };
20
20
 
21
- Layout.displayName = 'DesktopDiscoverAssistantsLayout';
22
-
23
21
  export default Layout;
@@ -18,6 +18,4 @@ const Layout = () => {
18
18
  );
19
19
  };
20
20
 
21
- Layout.displayName = 'DesktopDiscoverToolsLayout';
22
-
23
21
  export default Layout;
@@ -18,6 +18,4 @@ const Layout = () => {
18
18
  );
19
19
  };
20
20
 
21
- Layout.displayName = 'DesktopDiscoverModelsLayout';
22
-
23
21
  export default Layout;
@@ -19,6 +19,4 @@ const Layout: FC = () => {
19
19
  );
20
20
  };
21
21
 
22
- Layout.displayName = 'DesktopDiscoverStoreLayout';
23
-
24
22
  export default Layout;
@@ -30,6 +30,4 @@ const Layout: FC = () => {
30
30
  );
31
31
  };
32
32
 
33
- Layout.displayName = 'DesktopChatLayout';
34
-
35
33
  export default Layout;
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Flexbox } from '@lobehub/ui';
4
4
  import { cssVar } from 'antd-style';
5
- import { memo } from 'react';
5
+ import { Suspense, memo } from 'react';
6
6
 
7
7
  import NavHeader from '@/features/NavHeader';
8
8
  import WideScreenButton from '@/features/WideScreenContainer/WideScreenButton';
@@ -15,7 +15,9 @@ const Header = memo(() => {
15
15
  right={
16
16
  <Flexbox horizontal style={{ backgroundColor: cssVar.colorBgContainer }}>
17
17
  <WideScreenButton />
18
- <ShareButton />
18
+ <Suspense>
19
+ <ShareButton />
20
+ </Suspense>
19
21
  </Flexbox>
20
22
  }
21
23
  />
@@ -14,6 +14,4 @@ const ChatPortal = () => {
14
14
  );
15
15
  };
16
16
 
17
- ChatPortal.displayName = 'ChatPortal';
18
-
19
17
  export default ChatPortal;
@@ -64,6 +64,4 @@ const Layout: FC<LayoutProps> = ({ children }) => {
64
64
  );
65
65
  };
66
66
 
67
- Layout.displayName = 'DesktopHomeLayout';
68
-
69
67
  export default Layout;
@@ -26,6 +26,4 @@ const Home: FC = () => {
26
26
  );
27
27
  };
28
28
 
29
- Home.displayName = 'Home';
30
-
31
29
  export default Home;
@@ -32,6 +32,4 @@ const TopicUrlSync = () => {
32
32
  return null;
33
33
  };
34
34
 
35
- TopicUrlSync.displayName = 'TopicUrlSync';
36
-
37
35
  export default TopicUrlSync;
@@ -22,6 +22,4 @@ const Layout: FC = () => {
22
22
  );
23
23
  };
24
24
 
25
- Layout.displayName = 'DesktopAiImageLayout';
26
-
27
25
  export default Layout;