@lobehub/lobehub 2.0.0-next.307 → 2.0.0-next.309
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 +58 -0
- package/changelog/v1.json +21 -0
- package/locales/ar/agentGroup.json +5 -0
- package/locales/ar/chat.json +26 -0
- package/locales/ar/models.json +43 -5
- package/locales/ar/plugin.json +4 -5
- package/locales/ar/setting.json +11 -0
- package/locales/ar/subscription.json +2 -0
- package/locales/ar/tool.json +2 -0
- package/locales/bg-BG/agentGroup.json +5 -0
- package/locales/bg-BG/chat.json +26 -0
- package/locales/bg-BG/models.json +49 -3
- package/locales/bg-BG/plugin.json +4 -5
- package/locales/bg-BG/setting.json +11 -0
- package/locales/bg-BG/subscription.json +2 -0
- package/locales/bg-BG/tool.json +2 -0
- package/locales/de-DE/agentGroup.json +5 -0
- package/locales/de-DE/chat.json +26 -0
- package/locales/de-DE/models.json +48 -5
- package/locales/de-DE/plugin.json +4 -5
- package/locales/de-DE/setting.json +11 -0
- package/locales/de-DE/subscription.json +2 -0
- package/locales/de-DE/tool.json +2 -0
- package/locales/en-US/models.json +8 -6
- package/locales/en-US/plugin.json +3 -4
- package/locales/en-US/setting.json +10 -11
- package/locales/en-US/tool.json +2 -0
- package/locales/es-ES/agentGroup.json +5 -0
- package/locales/es-ES/chat.json +26 -0
- package/locales/es-ES/models.json +43 -5
- package/locales/es-ES/plugin.json +4 -5
- package/locales/es-ES/setting.json +11 -0
- package/locales/es-ES/subscription.json +2 -0
- package/locales/es-ES/tool.json +2 -0
- package/locales/fa-IR/agentGroup.json +5 -0
- package/locales/fa-IR/chat.json +26 -0
- package/locales/fa-IR/models.json +42 -5
- package/locales/fa-IR/plugin.json +4 -5
- package/locales/fa-IR/setting.json +11 -0
- package/locales/fa-IR/subscription.json +2 -0
- package/locales/fa-IR/tool.json +2 -0
- package/locales/fr-FR/agentGroup.json +5 -0
- package/locales/fr-FR/chat.json +26 -0
- package/locales/fr-FR/models.json +5 -5
- package/locales/fr-FR/plugin.json +4 -5
- package/locales/fr-FR/setting.json +11 -0
- package/locales/fr-FR/subscription.json +2 -0
- package/locales/fr-FR/tool.json +2 -0
- package/locales/it-IT/agentGroup.json +5 -0
- package/locales/it-IT/chat.json +26 -0
- package/locales/it-IT/models.json +1 -3
- package/locales/it-IT/plugin.json +4 -5
- package/locales/it-IT/setting.json +11 -0
- package/locales/it-IT/subscription.json +2 -0
- package/locales/it-IT/tool.json +2 -0
- package/locales/ja-JP/agentGroup.json +5 -0
- package/locales/ja-JP/chat.json +26 -0
- package/locales/ja-JP/models.json +1 -5
- package/locales/ja-JP/plugin.json +4 -5
- package/locales/ja-JP/setting.json +11 -0
- package/locales/ja-JP/subscription.json +2 -0
- package/locales/ja-JP/tool.json +2 -0
- package/locales/ko-KR/agentGroup.json +5 -0
- package/locales/ko-KR/chat.json +26 -0
- package/locales/ko-KR/models.json +1 -3
- package/locales/ko-KR/plugin.json +4 -5
- package/locales/ko-KR/setting.json +11 -0
- package/locales/ko-KR/subscription.json +2 -0
- package/locales/ko-KR/tool.json +2 -0
- package/locales/nl-NL/agentGroup.json +5 -0
- package/locales/nl-NL/chat.json +26 -0
- package/locales/nl-NL/models.json +35 -3
- package/locales/nl-NL/plugin.json +4 -5
- package/locales/nl-NL/setting.json +11 -0
- package/locales/nl-NL/subscription.json +2 -0
- package/locales/nl-NL/tool.json +2 -0
- package/locales/pl-PL/agentGroup.json +5 -0
- package/locales/pl-PL/chat.json +26 -0
- package/locales/pl-PL/models.json +1 -3
- package/locales/pl-PL/plugin.json +4 -5
- package/locales/pl-PL/setting.json +11 -0
- package/locales/pl-PL/subscription.json +2 -0
- package/locales/pl-PL/tool.json +2 -0
- package/locales/pt-BR/agentGroup.json +5 -0
- package/locales/pt-BR/chat.json +26 -0
- package/locales/pt-BR/models.json +50 -5
- package/locales/pt-BR/plugin.json +4 -5
- package/locales/pt-BR/setting.json +11 -0
- package/locales/pt-BR/subscription.json +2 -0
- package/locales/pt-BR/tool.json +2 -0
- package/locales/ru-RU/agentGroup.json +5 -0
- package/locales/ru-RU/chat.json +26 -0
- package/locales/ru-RU/models.json +22 -3
- package/locales/ru-RU/plugin.json +4 -5
- package/locales/ru-RU/setting.json +11 -0
- package/locales/ru-RU/subscription.json +2 -0
- package/locales/ru-RU/tool.json +2 -0
- package/locales/tr-TR/agentGroup.json +5 -0
- package/locales/tr-TR/chat.json +26 -0
- package/locales/tr-TR/models.json +36 -3
- package/locales/tr-TR/plugin.json +4 -5
- package/locales/tr-TR/setting.json +11 -0
- package/locales/tr-TR/subscription.json +2 -0
- package/locales/tr-TR/tool.json +2 -0
- package/locales/vi-VN/agentGroup.json +5 -0
- package/locales/vi-VN/chat.json +26 -0
- package/locales/vi-VN/models.json +1 -1
- package/locales/vi-VN/plugin.json +4 -5
- package/locales/vi-VN/setting.json +11 -0
- package/locales/vi-VN/subscription.json +2 -0
- package/locales/vi-VN/tool.json +2 -0
- package/locales/zh-CN/models.json +52 -5
- package/locales/zh-CN/plugin.json +6 -7
- package/locales/zh-CN/setting.json +10 -11
- package/locales/zh-CN/tool.json +2 -2
- package/locales/zh-TW/agentGroup.json +5 -0
- package/locales/zh-TW/chat.json +26 -0
- package/locales/zh-TW/models.json +54 -5
- package/locales/zh-TW/plugin.json +4 -5
- package/locales/zh-TW/setting.json +11 -0
- package/locales/zh-TW/subscription.json +2 -0
- package/locales/zh-TW/tool.json +2 -0
- package/package.json +1 -1
- package/packages/agent-runtime/src/types/state.ts +2 -0
- package/packages/builtin-tool-group-agent-builder/src/client/Inspector/GetAgentInfo/index.tsx +68 -0
- package/packages/builtin-tool-group-agent-builder/src/client/Inspector/index.ts +3 -0
- package/packages/builtin-tool-group-management/src/client/Inspector/ExecuteAgentTask/index.tsx +52 -8
- package/packages/builtin-tool-group-management/src/client/Render/ExecuteTask/index.tsx +2 -21
- package/packages/builtin-tool-group-management/src/executor.test.ts +6 -4
- package/packages/builtin-tool-group-management/src/manifest.ts +5 -1
- package/packages/builtin-tool-group-management/src/types.ts +2 -0
- package/packages/builtin-tool-local-system/src/client/Render/WriteFile/index.tsx +48 -5
- package/packages/builtin-tool-local-system/src/client/Streaming/WriteFile/index.tsx +39 -0
- package/packages/builtin-tool-local-system/src/client/Streaming/index.ts +2 -0
- package/packages/builtin-tool-memory/src/manifest.ts +581 -19
- package/packages/model-bank/src/aiModels/qiniu.ts +24 -0
- package/packages/types/src/topic/thread.ts +2 -2
- package/packages/types/src/userMemory/layers.ts +19 -8
- package/packages/types/src/userMemory/shared.ts +7 -1
- package/src/app/[variants]/(auth)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(auth)/layout.tsx +0 -2
- package/src/app/[variants]/(auth)/login/[[...login]]/page.tsx +1 -3
- package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -3
- package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/agent/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/agent/features/Portal/index.tsx +0 -2
- package/src/app/[variants]/(main)/community/(list)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/community/(list)/assistant/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/community/(list)/mcp/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/community/(list)/model/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/community/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/group/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/group/features/Conversation/Header/index.tsx +4 -2
- package/src/app/[variants]/(main)/group/features/Portal/index.tsx +0 -2
- package/src/app/[variants]/(main)/home/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/home/index.tsx +0 -2
- package/src/app/[variants]/(main)/image/_layout/Topics/TopicUrlSync.tsx +0 -2
- package/src/app/[variants]/(main)/image/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/memory/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/page/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/resource/(home)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/resource/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/resource/library/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/resource/library/features/Container.tsx +0 -2
- package/src/app/[variants]/(main)/settings/_layout/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/about/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/agent/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/apikey/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/chat-appearance/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/common/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/hotkey/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/image/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/memory/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/provider/(list)/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/proxy/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/security/index.tsx +1 -3
- package/src/app/[variants]/(main)/settings/storage/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/tts/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/(home)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/_layout/index.tsx +1 -3
- package/src/app/[variants]/(mobile)/chat/_layout/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/chat/settings/_layout/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/community/(detail)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/community/(list)/_layout/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/community/_layout/index.tsx +0 -2
- package/src/app/[variants]/(mobile)/router/MobileClientRouter.tsx +0 -2
- package/src/app/[variants]/(mobile)/settings/index.tsx +0 -2
- package/src/app/[variants]/onboarding/_layout/index.tsx +0 -2
- package/src/app/[variants]/router/DesktopClientRouter.tsx +0 -2
- package/src/components/ModelSelect/index.tsx +6 -56
- package/src/components/server/MobileNavLayout.tsx +0 -2
- package/src/components/server/ServerLayout.tsx +0 -2
- package/src/features/ModelSwitchPanel/components/Footer.tsx +0 -2
- package/src/features/ModelSwitchPanel/components/List/MultipleProvidersModelItem.tsx +0 -1
- package/src/features/ModelSwitchPanel/components/List/SingleProviderModelItem.tsx +0 -1
- package/src/features/ModelSwitchPanel/components/List/VirtualItemRenderer.tsx +0 -1
- package/src/features/ModelSwitchPanel/components/List/index.tsx +15 -13
- package/src/features/ModelSwitchPanel/components/PanelContent.tsx +0 -2
- package/src/features/ModelSwitchPanel/index.tsx +21 -23
- package/src/features/ResourceManager/components/Explorer/MasonryView/index.tsx +0 -2
- package/src/features/User/UserAvatar.tsx +0 -2
- package/src/locales/default/plugin.ts +3 -1
- package/src/server/modules/AgentRuntime/RuntimeExecutors.ts +11 -3
- package/src/server/modules/Mecha/AgentToolsEngine/index.ts +14 -6
- package/src/server/modules/Mecha/AgentToolsEngine/types.ts +4 -3
- package/src/server/routers/lambda/aiAgent.ts +10 -0
- package/src/server/services/agent/index.test.ts +155 -0
- package/src/server/services/agent/index.ts +25 -0
- package/src/server/services/agentRuntime/AgentRuntimeService.ts +2 -0
- package/src/server/services/agentRuntime/types.ts +1 -0
- package/src/server/services/aiAgent/__tests__/execAgent.threadId.test.ts +29 -9
- package/src/server/services/aiAgent/index.ts +175 -6
- package/src/server/services/lobehubSkill/index.ts +109 -0
- package/src/server/services/toolExecution/builtin.ts +28 -2
- package/src/server/services/toolExecution/types.ts +3 -0
- package/src/store/chat/agents/GroupOrchestration/__tests__/call-supervisor.test.ts +305 -0
- package/src/store/chat/agents/GroupOrchestration/createGroupOrchestrationExecutors.ts +2 -1
- package/src/store/chat/agents/createAgentExecutors.ts +4 -2
- package/src/store/chat/slices/plugin/actions/exector.ts +92 -0
- package/src/store/chat/slices/plugin/actions/pluginTypes.ts +82 -177
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from 'lucide-react';
|
|
15
15
|
import { type ModelAbilities } from 'model-bank';
|
|
16
16
|
import numeral from 'numeral';
|
|
17
|
-
import { CSSProperties, type ComponentProps, type FC, memo
|
|
17
|
+
import { CSSProperties, type ComponentProps, type FC, memo } from 'react';
|
|
18
18
|
import { useTranslation } from 'react-i18next';
|
|
19
19
|
|
|
20
20
|
import { type AiProviderSourceType } from '@/types/aiProvider';
|
|
@@ -65,13 +65,6 @@ interface ModelInfoTagsProps extends ModelAbilities {
|
|
|
65
65
|
isCustom?: boolean;
|
|
66
66
|
placement?: 'top' | 'right';
|
|
67
67
|
style?: CSSProperties;
|
|
68
|
-
/**
|
|
69
|
-
* Whether to render tooltip overlays for each tag.
|
|
70
|
-
* Disable this when rendering a large list (e.g. dropdown menus) to avoid mounting hundreds of Tooltip instances.
|
|
71
|
-
*
|
|
72
|
-
* When `false`, tags are rendered without any tooltip/title fallback by design.
|
|
73
|
-
*/
|
|
74
|
-
withTooltip?: boolean;
|
|
75
68
|
}
|
|
76
69
|
|
|
77
70
|
interface FeatureTagsProps extends Pick<
|
|
@@ -80,7 +73,6 @@ interface FeatureTagsProps extends Pick<
|
|
|
80
73
|
> {
|
|
81
74
|
placement: 'top' | 'right';
|
|
82
75
|
tagClassName: string;
|
|
83
|
-
withTooltip: boolean;
|
|
84
76
|
}
|
|
85
77
|
|
|
86
78
|
interface FeatureTagItemProps {
|
|
@@ -91,11 +83,10 @@ interface FeatureTagItemProps {
|
|
|
91
83
|
placement: 'top' | 'right';
|
|
92
84
|
title: string;
|
|
93
85
|
tooltipStyles?: ComponentProps<typeof Tooltip>['styles'];
|
|
94
|
-
withTooltip: boolean;
|
|
95
86
|
}
|
|
96
87
|
|
|
97
88
|
const FeatureTagItem = memo<FeatureTagItemProps>(
|
|
98
|
-
({ className, color, enabled, icon, placement, title, tooltipStyles
|
|
89
|
+
({ className, color, enabled, icon, placement, title, tooltipStyles }) => {
|
|
99
90
|
if (!enabled) return null;
|
|
100
91
|
|
|
101
92
|
const tag = (
|
|
@@ -104,8 +95,6 @@ const FeatureTagItem = memo<FeatureTagItemProps>(
|
|
|
104
95
|
</Tag>
|
|
105
96
|
);
|
|
106
97
|
|
|
107
|
-
if (!withTooltip) return tag;
|
|
108
|
-
|
|
109
98
|
return (
|
|
110
99
|
<Tooltip placement={placement} styles={tooltipStyles ?? DEFAULT_TOOLTIP_STYLES} title={title}>
|
|
111
100
|
{tag}
|
|
@@ -125,7 +114,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
125
114
|
tagClassName,
|
|
126
115
|
video,
|
|
127
116
|
vision,
|
|
128
|
-
withTooltip,
|
|
129
117
|
}) => {
|
|
130
118
|
const { t } = useTranslation('components');
|
|
131
119
|
|
|
@@ -138,7 +126,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
138
126
|
icon={LucidePaperclip}
|
|
139
127
|
placement={placement}
|
|
140
128
|
title={t('ModelSelect.featureTag.file')}
|
|
141
|
-
withTooltip={withTooltip}
|
|
142
129
|
/>
|
|
143
130
|
<FeatureTagItem
|
|
144
131
|
className={tagClassName}
|
|
@@ -147,7 +134,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
147
134
|
icon={LucideImage}
|
|
148
135
|
placement={placement}
|
|
149
136
|
title={t('ModelSelect.featureTag.imageOutput')}
|
|
150
|
-
withTooltip={withTooltip}
|
|
151
137
|
/>
|
|
152
138
|
<FeatureTagItem
|
|
153
139
|
className={tagClassName}
|
|
@@ -156,7 +142,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
156
142
|
icon={LucideEye}
|
|
157
143
|
placement={placement}
|
|
158
144
|
title={t('ModelSelect.featureTag.vision')}
|
|
159
|
-
withTooltip={withTooltip}
|
|
160
145
|
/>
|
|
161
146
|
<FeatureTagItem
|
|
162
147
|
className={tagClassName}
|
|
@@ -165,7 +150,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
165
150
|
icon={Video}
|
|
166
151
|
placement={placement}
|
|
167
152
|
title={t('ModelSelect.featureTag.video')}
|
|
168
|
-
withTooltip={withTooltip}
|
|
169
153
|
/>
|
|
170
154
|
<FeatureTagItem
|
|
171
155
|
className={tagClassName}
|
|
@@ -175,7 +159,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
175
159
|
placement={placement}
|
|
176
160
|
title={t('ModelSelect.featureTag.functionCall')}
|
|
177
161
|
tooltipStyles={FUNCTION_CALL_TOOLTIP_STYLES}
|
|
178
|
-
withTooltip={withTooltip}
|
|
179
162
|
/>
|
|
180
163
|
<FeatureTagItem
|
|
181
164
|
className={tagClassName}
|
|
@@ -184,7 +167,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
184
167
|
icon={AtomIcon}
|
|
185
168
|
placement={placement}
|
|
186
169
|
title={t('ModelSelect.featureTag.reasoning')}
|
|
187
|
-
withTooltip={withTooltip}
|
|
188
170
|
/>
|
|
189
171
|
<FeatureTagItem
|
|
190
172
|
className={tagClassName}
|
|
@@ -193,7 +175,6 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
193
175
|
icon={LucideGlobe}
|
|
194
176
|
placement={placement}
|
|
195
177
|
title={t('ModelSelect.featureTag.search')}
|
|
196
|
-
withTooltip={withTooltip}
|
|
197
178
|
/>
|
|
198
179
|
</>
|
|
199
180
|
);
|
|
@@ -203,14 +184,12 @@ const FeatureTags = memo<FeatureTagsProps>(
|
|
|
203
184
|
const Context = memo(
|
|
204
185
|
({
|
|
205
186
|
contextWindowTokens,
|
|
206
|
-
withTooltip,
|
|
207
187
|
placement,
|
|
208
188
|
styles,
|
|
209
189
|
}: {
|
|
210
190
|
contextWindowTokens: number;
|
|
211
191
|
placement: 'top' | 'right';
|
|
212
192
|
styles: TooltipStyles;
|
|
213
|
-
withTooltip: boolean;
|
|
214
193
|
}) => {
|
|
215
194
|
const { t } = useTranslation('components');
|
|
216
195
|
const tokensText = contextWindowTokens === 0 ? '∞' : formatTokenNumber(contextWindowTokens);
|
|
@@ -221,8 +200,6 @@ const Context = memo(
|
|
|
221
200
|
</Tag>
|
|
222
201
|
);
|
|
223
202
|
|
|
224
|
-
if (!withTooltip) return tag;
|
|
225
|
-
|
|
226
203
|
return (
|
|
227
204
|
<Tooltip
|
|
228
205
|
placement={placement}
|
|
@@ -238,7 +215,7 @@ const Context = memo(
|
|
|
238
215
|
);
|
|
239
216
|
|
|
240
217
|
export const ModelInfoTags = memo<ModelInfoTagsProps>(
|
|
241
|
-
({ directionReverse, placement = 'top',
|
|
218
|
+
({ directionReverse, placement = 'top', style, ...model }) => {
|
|
242
219
|
return (
|
|
243
220
|
<Flexbox
|
|
244
221
|
className={TAG_CLASSNAME}
|
|
@@ -257,14 +234,12 @@ export const ModelInfoTags = memo<ModelInfoTagsProps>(
|
|
|
257
234
|
tagClassName={styles.tag}
|
|
258
235
|
video={model.video}
|
|
259
236
|
vision={model.vision}
|
|
260
|
-
withTooltip={withTooltip}
|
|
261
237
|
/>
|
|
262
238
|
{typeof model.contextWindowTokens === 'number' && (
|
|
263
239
|
<Context
|
|
264
240
|
contextWindowTokens={model.contextWindowTokens}
|
|
265
241
|
placement={placement}
|
|
266
242
|
styles={styles}
|
|
267
|
-
withTooltip={withTooltip}
|
|
268
243
|
/>
|
|
269
244
|
)}
|
|
270
245
|
</Flexbox>
|
|
@@ -274,15 +249,6 @@ export const ModelInfoTags = memo<ModelInfoTagsProps>(
|
|
|
274
249
|
|
|
275
250
|
interface ModelItemRenderProps extends ChatModelCard, Partial<Omit<FlexboxProps, 'id' | 'title'>> {
|
|
276
251
|
abilities?: ModelAbilities;
|
|
277
|
-
infoTagTooltip?: boolean;
|
|
278
|
-
/**
|
|
279
|
-
* Only mounts Tooltip components while hovering the item, to reduce initial render cost in large dropdown lists.
|
|
280
|
-
*
|
|
281
|
-
* Note: hover is not available on mobile, so this will be ignored on mobile.
|
|
282
|
-
* Also note: since tooltips are mounted lazily, the very first hover may require a tiny pointer movement
|
|
283
|
-
* before the tooltip system detects the hover target (depends on the underlying tooltip implementation).
|
|
284
|
-
*/
|
|
285
|
-
infoTagTooltipOnHover?: boolean;
|
|
286
252
|
newBadgeLabel?: string;
|
|
287
253
|
showInfoTag?: boolean;
|
|
288
254
|
}
|
|
@@ -291,8 +257,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
|
|
|
291
257
|
({
|
|
292
258
|
showInfoTag = true,
|
|
293
259
|
abilities,
|
|
294
|
-
infoTagTooltip = true,
|
|
295
|
-
infoTagTooltipOnHover = false,
|
|
296
260
|
contextWindowTokens,
|
|
297
261
|
files,
|
|
298
262
|
functionCall,
|
|
@@ -308,14 +272,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
|
|
|
308
272
|
...rest
|
|
309
273
|
}) => {
|
|
310
274
|
const { mobile } = useResponsive();
|
|
311
|
-
const [hovered, setHovered] = useState(false);
|
|
312
|
-
|
|
313
|
-
const shouldLazyMountTooltip = infoTagTooltipOnHover && !mobile;
|
|
314
|
-
/**
|
|
315
|
-
* When `infoTagTooltipOnHover` is enabled, we don't mount Tooltip components until the row is hovered.
|
|
316
|
-
* This avoids creating many overlays on dropdown open, while keeping the tooltip UX on demand.
|
|
317
|
-
*/
|
|
318
|
-
const withTooltip = infoTagTooltip && (!shouldLazyMountTooltip || hovered);
|
|
319
275
|
const displayNameOrId = displayName || id;
|
|
320
276
|
|
|
321
277
|
return (
|
|
@@ -324,7 +280,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
|
|
|
324
280
|
gap={32}
|
|
325
281
|
horizontal
|
|
326
282
|
justify={'space-between'}
|
|
327
|
-
onMouseEnter={shouldLazyMountTooltip && !hovered ? () => setHovered(true) : undefined}
|
|
328
283
|
{...rest}
|
|
329
284
|
style={{
|
|
330
285
|
overflow: 'hidden',
|
|
@@ -341,13 +296,9 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
|
|
|
341
296
|
>
|
|
342
297
|
<ModelIcon model={id} size={20} />
|
|
343
298
|
<Text
|
|
344
|
-
ellipsis={
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
tooltip: displayNameOrId,
|
|
348
|
-
}
|
|
349
|
-
: true
|
|
350
|
-
}
|
|
299
|
+
ellipsis={{
|
|
300
|
+
tooltip: displayNameOrId,
|
|
301
|
+
}}
|
|
351
302
|
style={mobile ? { maxWidth: '60vw' } : { minWidth: 0, overflow: 'hidden' }}
|
|
352
303
|
>
|
|
353
304
|
{displayNameOrId}
|
|
@@ -369,7 +320,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
|
|
|
369
320
|
style={{ zoom: 0.9 }}
|
|
370
321
|
video={video ?? abilities?.video}
|
|
371
322
|
vision={vision ?? abilities?.vision}
|
|
372
|
-
withTooltip={withTooltip}
|
|
373
323
|
/>
|
|
374
324
|
)}
|
|
375
325
|
</Flexbox>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Flexbox } from '@lobehub/ui';
|
|
1
|
+
import { Flexbox, TooltipGroup } from '@lobehub/ui';
|
|
2
2
|
import type { FC } from 'react';
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
import { useTranslation } from 'react-i18next';
|
|
@@ -82,18 +82,20 @@ export const List: FC<ListProps> = ({
|
|
|
82
82
|
paddingBlock: groupMode === 'byModel' ? 8 : 0,
|
|
83
83
|
}}
|
|
84
84
|
>
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
item
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
85
|
+
<TooltipGroup>
|
|
86
|
+
{virtualItems
|
|
87
|
+
.slice(0, renderAll ? virtualItems.length : INITIAL_RENDER_COUNT)
|
|
88
|
+
.map((item) => (
|
|
89
|
+
<VirtualItemRenderer
|
|
90
|
+
activeKey={activeKey}
|
|
91
|
+
item={item}
|
|
92
|
+
key={getVirtualItemKey(item)}
|
|
93
|
+
newLabel={newLabel}
|
|
94
|
+
onClose={handleClose}
|
|
95
|
+
onModelChange={handleModelChange}
|
|
96
|
+
/>
|
|
97
|
+
))}
|
|
98
|
+
</TooltipGroup>
|
|
95
99
|
</Flexbox>
|
|
96
100
|
);
|
|
97
101
|
};
|
|
98
|
-
|
|
99
|
-
List.displayName = 'List';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Popover
|
|
1
|
+
import { Popover } from '@lobehub/ui';
|
|
2
2
|
import { memo, useCallback, useState } from 'react';
|
|
3
3
|
|
|
4
4
|
import { PanelContent } from './components/PanelContent';
|
|
@@ -29,28 +29,26 @@ const ModelSwitchPanel = memo<ModelSwitchPanelProps>(
|
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
return (
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
</Popover>
|
|
53
|
-
</TooltipGroup>
|
|
32
|
+
<Popover
|
|
33
|
+
classNames={{
|
|
34
|
+
content: styles.container,
|
|
35
|
+
}}
|
|
36
|
+
content={
|
|
37
|
+
<PanelContent
|
|
38
|
+
isOpen={isOpen}
|
|
39
|
+
model={modelProp}
|
|
40
|
+
onModelChange={onModelChange}
|
|
41
|
+
onOpenChange={handleOpenChange}
|
|
42
|
+
provider={providerProp}
|
|
43
|
+
/>
|
|
44
|
+
}
|
|
45
|
+
nativeButton={false}
|
|
46
|
+
onOpenChange={handleOpenChange}
|
|
47
|
+
open={isOpen}
|
|
48
|
+
placement={placement}
|
|
49
|
+
>
|
|
50
|
+
{children}
|
|
51
|
+
</Popover>
|
|
54
52
|
);
|
|
55
53
|
},
|
|
56
54
|
);
|
|
@@ -40,6 +40,7 @@ export default {
|
|
|
40
40
|
'builtins.lobe-cloud-sandbox.title': 'Cloud Sandbox',
|
|
41
41
|
'builtins.lobe-group-agent-builder.apiName.batchCreateAgents': 'Batch create agents',
|
|
42
42
|
'builtins.lobe-group-agent-builder.apiName.createAgent': 'Create agent',
|
|
43
|
+
'builtins.lobe-group-agent-builder.apiName.getAgentInfo': 'Get member info',
|
|
43
44
|
'builtins.lobe-group-agent-builder.apiName.getAvailableModels': 'Get available models',
|
|
44
45
|
'builtins.lobe-group-agent-builder.apiName.installPlugin': 'Install Skill',
|
|
45
46
|
'builtins.lobe-group-agent-builder.apiName.inviteAgent': 'Invite member',
|
|
@@ -70,7 +71,8 @@ export default {
|
|
|
70
71
|
'builtins.lobe-group-management.apiName.summarize': 'Summarize conversation',
|
|
71
72
|
'builtins.lobe-group-management.apiName.vote': 'Start vote',
|
|
72
73
|
'builtins.lobe-group-management.inspector.broadcast.title': 'Following Agents speak:',
|
|
73
|
-
'builtins.lobe-group-management.inspector.executeAgentTask.
|
|
74
|
+
'builtins.lobe-group-management.inspector.executeAgentTask.assignTo': 'Assign',
|
|
75
|
+
'builtins.lobe-group-management.inspector.executeAgentTask.task': 'task:',
|
|
74
76
|
'builtins.lobe-group-management.inspector.executeAgentTasks.title': 'Assigning tasks to:',
|
|
75
77
|
'builtins.lobe-group-management.inspector.speak.title': 'Designated Agent speaks:',
|
|
76
78
|
'builtins.lobe-group-management.title': 'Group Coordinator',
|
|
@@ -55,6 +55,8 @@ export const createRuntimeExecutors = (
|
|
|
55
55
|
// Fallback to state's modelRuntimeConfig if not in payload
|
|
56
56
|
const model = llmPayload.model || state.modelRuntimeConfig?.model;
|
|
57
57
|
const provider = llmPayload.provider || state.modelRuntimeConfig?.provider;
|
|
58
|
+
// Fallback to state's tools if not in payload
|
|
59
|
+
const tools = llmPayload.tools || state.tools;
|
|
58
60
|
|
|
59
61
|
if (!model || !provider) {
|
|
60
62
|
throw new Error('Model and provider are required for call_llm instruction');
|
|
@@ -128,14 +130,14 @@ export const createRuntimeExecutors = (
|
|
|
128
130
|
const chatPayload = {
|
|
129
131
|
messages: llmPayload.messages,
|
|
130
132
|
model,
|
|
131
|
-
tools
|
|
133
|
+
tools,
|
|
132
134
|
};
|
|
133
135
|
|
|
134
136
|
log(
|
|
135
137
|
`${stagePrefix} calling model-runtime chat (model: %s, messages: %d, tools: %d)`,
|
|
136
138
|
model,
|
|
137
139
|
llmPayload.messages.length,
|
|
138
|
-
|
|
140
|
+
tools?.length ?? 0,
|
|
139
141
|
);
|
|
140
142
|
|
|
141
143
|
// Buffer: accumulate text and reasoning, send every 50ms
|
|
@@ -261,7 +263,12 @@ export const createRuntimeExecutors = (
|
|
|
261
263
|
}
|
|
262
264
|
},
|
|
263
265
|
onToolsCalling: async ({ toolsCalling: raw }) => {
|
|
264
|
-
const
|
|
266
|
+
const resolved = new ToolNameResolver().resolve(raw, state.toolManifestMap);
|
|
267
|
+
// Add source field from toolSourceMap for routing tool execution
|
|
268
|
+
const payload = resolved.map((p) => ({
|
|
269
|
+
...p,
|
|
270
|
+
source: state.toolSourceMap?.[p.identifier],
|
|
271
|
+
}));
|
|
265
272
|
// log(`[${operationLogId}][toolsCalling]`, payload);
|
|
266
273
|
toolsCalling = payload;
|
|
267
274
|
tool_calls = raw;
|
|
@@ -466,6 +473,7 @@ export const createRuntimeExecutors = (
|
|
|
466
473
|
// Execute tool using ToolExecutionService
|
|
467
474
|
log(`[${operationLogId}] Executing tool ${toolName} ...`);
|
|
468
475
|
const executionResult = await toolExecutionService.executeTool(chatToolPayload, {
|
|
476
|
+
serverDB: ctx.serverDB,
|
|
469
477
|
toolManifestMap: state.toolManifestMap,
|
|
470
478
|
userId: ctx.userId,
|
|
471
479
|
});
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
import { KnowledgeBaseManifest } from '@lobechat/builtin-tool-knowledge-base';
|
|
13
13
|
import { LocalSystemManifest } from '@lobechat/builtin-tool-local-system';
|
|
14
14
|
import { WebBrowsingManifest } from '@lobechat/builtin-tool-web-browsing';
|
|
15
|
-
import { ToolsEngine } from '@lobechat/context-engine';
|
|
16
|
-
import type { LobeChatPluginManifest } from '@lobehub/chat-plugin-sdk';
|
|
15
|
+
import { type LobeToolManifest, ToolsEngine } from '@lobechat/context-engine';
|
|
17
16
|
import debug from 'debug';
|
|
18
17
|
|
|
19
18
|
import { builtinTools } from '@/tools';
|
|
@@ -50,11 +49,11 @@ export const createServerToolsEngine = (
|
|
|
50
49
|
|
|
51
50
|
// Get plugin manifests from installed plugins (from database)
|
|
52
51
|
const pluginManifests = context.installedPlugins
|
|
53
|
-
.map((plugin) => plugin.manifest as
|
|
52
|
+
.map((plugin) => plugin.manifest as LobeToolManifest)
|
|
54
53
|
.filter(Boolean);
|
|
55
54
|
|
|
56
55
|
// Get all builtin tool manifests
|
|
57
|
-
const builtinManifests = builtinTools.map((tool) => tool.manifest as
|
|
56
|
+
const builtinManifests = builtinTools.map((tool) => tool.manifest as LobeToolManifest);
|
|
58
57
|
|
|
59
58
|
// Combine all manifests
|
|
60
59
|
const allManifests = [...pluginManifests, ...builtinManifests, ...additionalManifests];
|
|
@@ -87,18 +86,27 @@ export const createServerAgentToolsEngine = (
|
|
|
87
86
|
context: ServerAgentToolsContext,
|
|
88
87
|
params: ServerCreateAgentToolsEngineParams,
|
|
89
88
|
): ToolsEngine => {
|
|
90
|
-
const {
|
|
89
|
+
const {
|
|
90
|
+
additionalManifests,
|
|
91
|
+
agentConfig,
|
|
92
|
+
hasEnabledKnowledgeBases = false,
|
|
93
|
+
model,
|
|
94
|
+
provider,
|
|
95
|
+
} = params;
|
|
91
96
|
const searchMode = agentConfig.chatConfig?.searchMode ?? 'off';
|
|
92
97
|
const isSearchEnabled = searchMode !== 'off';
|
|
93
98
|
|
|
94
99
|
log(
|
|
95
|
-
'Creating agent tools engine for model=%s, provider=%s, searchMode=%s',
|
|
100
|
+
'Creating agent tools engine for model=%s, provider=%s, searchMode=%s, additionalManifests=%d',
|
|
96
101
|
model,
|
|
97
102
|
provider,
|
|
98
103
|
searchMode,
|
|
104
|
+
additionalManifests?.length ?? 0,
|
|
99
105
|
);
|
|
100
106
|
|
|
101
107
|
return createServerToolsEngine(context, {
|
|
108
|
+
// Pass additional manifests (e.g., LobeHub Skills)
|
|
109
|
+
additionalManifests,
|
|
102
110
|
// Add default tools based on configuration
|
|
103
111
|
defaultToolIds: [WebBrowsingManifest.identifier, KnowledgeBaseManifest.identifier],
|
|
104
112
|
// Create search-aware enableChecker for this request
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { PluginEnableChecker } from '@lobechat/context-engine';
|
|
1
|
+
import type { LobeToolManifest, PluginEnableChecker } from '@lobechat/context-engine';
|
|
2
2
|
import type { LobeTool } from '@lobechat/types';
|
|
3
|
-
import type { LobeChatPluginManifest } from '@lobehub/chat-plugin-sdk';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Installed plugin with manifest
|
|
@@ -22,7 +21,7 @@ export interface ServerAgentToolsContext {
|
|
|
22
21
|
*/
|
|
23
22
|
export interface ServerAgentToolsEngineConfig {
|
|
24
23
|
/** Additional manifests to include (e.g., Klavis tools) */
|
|
25
|
-
additionalManifests?:
|
|
24
|
+
additionalManifests?: LobeToolManifest[];
|
|
26
25
|
/** Default tool IDs that will always be added */
|
|
27
26
|
defaultToolIds?: string[];
|
|
28
27
|
/** Custom enable checker for plugins */
|
|
@@ -33,6 +32,8 @@ export interface ServerAgentToolsEngineConfig {
|
|
|
33
32
|
* Parameters for createServerAgentToolsEngine
|
|
34
33
|
*/
|
|
35
34
|
export interface ServerCreateAgentToolsEngineParams {
|
|
35
|
+
/** Additional manifests to include (e.g., LobeHub Skills) */
|
|
36
|
+
additionalManifests?: LobeToolManifest[];
|
|
36
37
|
/** Agent configuration containing plugins array */
|
|
37
38
|
agentConfig: {
|
|
38
39
|
/** Optional agent chat config with searchMode */
|
|
@@ -642,6 +642,16 @@ export const aiAgentRouter = router({
|
|
|
642
642
|
const updatedStatus = updatedThread?.status ?? thread.status;
|
|
643
643
|
const updatedTaskStatus = threadStatusToTaskStatus[updatedStatus] || 'processing';
|
|
644
644
|
|
|
645
|
+
// DEBUG: Log metadata for failed tasks
|
|
646
|
+
if (updatedTaskStatus === 'failed') {
|
|
647
|
+
console.log('[DEBUG] getSubAgentTaskStatus - failed task metadata:', {
|
|
648
|
+
threadId,
|
|
649
|
+
updatedMetadata,
|
|
650
|
+
'updatedMetadata?.error': updatedMetadata?.error,
|
|
651
|
+
updatedStatus,
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
|
|
645
655
|
// 6. Query thread messages for result content or current activity
|
|
646
656
|
const threadMessages = await ctx.messageModel.query({ threadId });
|
|
647
657
|
const sortedMessages = threadMessages.sort(
|