@lobehub/lobehub 2.0.0-next.284 → 2.0.0-next.285
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 +25 -0
- package/changelog/v1.json +9 -0
- package/locales/en-US/setting.json +1 -0
- package/locales/en-US/subscription.json +2 -0
- package/locales/zh-CN/setting.json +1 -0
- package/locales/zh-CN/subscription.json +2 -0
- package/package.json +1 -1
- package/packages/builtin-tool-agent-builder/src/ExecutionRuntime/index.ts +79 -2
- package/packages/builtin-tool-agent-builder/src/client/Intervention/InstallPlugin.tsx +66 -5
- package/packages/builtin-tool-agent-builder/src/client/Render/InstallPlugin.tsx +12 -4
- package/packages/builtin-tool-agent-builder/src/manifest.ts +3 -2
- package/packages/builtin-tool-agent-builder/src/systemRole.ts +8 -8
- package/packages/builtin-tool-agent-builder/src/types.ts +7 -3
- package/packages/context-engine/src/providers/AgentBuilderContextInjector.ts +20 -4
- package/packages/context-engine/src/providers/GroupAgentBuilderContextInjector.ts +18 -2
- package/packages/model-bank/src/aiModels/lobehub.ts +20 -1
- package/packages/model-runtime/src/providers/fal/index.test.ts +176 -1
- package/packages/model-runtime/src/providers/fal/index.ts +3 -1
- package/src/app/[variants]/(main)/agent/features/Conversation/MainChatInput/MessageFromUrl.tsx +57 -9
- package/src/app/[variants]/(main)/agent/profile/features/Header/AgentPublishButton/PublishButton.tsx +5 -8
- package/src/app/[variants]/(main)/agent/profile/features/Header/index.tsx +0 -2
- package/src/app/[variants]/(main)/agent/profile/features/ProfileEditor/index.tsx +2 -0
- package/src/app/[variants]/(main)/group/features/Conversation/MainChatInput/MessageFromUrl.tsx +24 -10
- package/src/features/ProfileEditor/AgentTool.tsx +68 -12
- package/src/features/ProfileEditor/PluginTag.tsx +56 -3
- package/src/locales/default/setting.ts +1 -0
- package/src/locales/default/subscription.ts +2 -0
- package/src/services/chat/index.ts +24 -1
- package/src/services/chat/mecha/contextEngineering.ts +28 -2
- package/src/store/chat/slices/plugin/actions/pluginTypes.ts +11 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## [Version 2.0.0-next.285](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.284...v2.0.0-next.285)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2026-01-14**</sup>
|
|
8
|
+
|
|
9
|
+
#### ✨ Features
|
|
10
|
+
|
|
11
|
+
- **misc**: Update the agent profiles tools check & agentbuilder tools & publish to market button.
|
|
12
|
+
|
|
13
|
+
<br/>
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
17
|
+
|
|
18
|
+
#### What's improved
|
|
19
|
+
|
|
20
|
+
- **misc**: Update the agent profiles tools check & agentbuilder tools & publish to market button, closes [#11501](https://github.com/lobehub/lobe-chat/issues/11501) ([85277fa](https://github.com/lobehub/lobe-chat/commit/85277fa))
|
|
21
|
+
|
|
22
|
+
</details>
|
|
23
|
+
|
|
24
|
+
<div align="right">
|
|
25
|
+
|
|
26
|
+
[](#readme-top)
|
|
27
|
+
|
|
28
|
+
</div>
|
|
29
|
+
|
|
5
30
|
## [Version 2.0.0-next.284](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.283...v2.0.0-next.284)
|
|
6
31
|
|
|
7
32
|
<sup>Released on **2026-01-14**</sup>
|
package/changelog/v1.json
CHANGED
|
@@ -265,6 +265,7 @@
|
|
|
265
265
|
"plugin.settings.title": "{{id}} Skill Configuration",
|
|
266
266
|
"plugin.settings.tooltip": "Skill Configuration",
|
|
267
267
|
"plugin.store": "Skill Store",
|
|
268
|
+
"publishToCommunity": "Publish to Community",
|
|
268
269
|
"settingAgent.avatar.sizeExceeded": "Image size exceeds 1MB limit, please choose a smaller image",
|
|
269
270
|
"settingAgent.avatar.title": "Avatar",
|
|
270
271
|
"settingAgent.backgroundColor.title": "Background Color",
|
|
@@ -57,6 +57,8 @@
|
|
|
57
57
|
"funds.packages.noPackages": "No credit packages",
|
|
58
58
|
"funds.packages.purchaseFirst": "Purchase your first credit package",
|
|
59
59
|
"funds.packages.purchasedOn": "Purchased on {{date}}",
|
|
60
|
+
"funds.packages.gift": "Gift",
|
|
61
|
+
"funds.packages.giftedOn": "Gifted on {{date}}",
|
|
60
62
|
"funds.packages.sort.amountAsc": "Amount: Low to High",
|
|
61
63
|
"funds.packages.sort.amountDesc": "Amount: High to Low",
|
|
62
64
|
"funds.packages.sort.balanceAsc": "Balance: Low to High",
|
|
@@ -265,6 +265,7 @@
|
|
|
265
265
|
"plugin.settings.title": "{{id}} 技能配置",
|
|
266
266
|
"plugin.settings.tooltip": "技能配置",
|
|
267
267
|
"plugin.store": "技能商店",
|
|
268
|
+
"publishToCommunity": "发布到社区",
|
|
268
269
|
"settingAgent.avatar.sizeExceeded": "图片大小超过 1MB 限制,请选择更小的图片",
|
|
269
270
|
"settingAgent.avatar.title": "助理头像",
|
|
270
271
|
"settingAgent.backgroundColor.title": "头像背景色",
|
|
@@ -57,6 +57,8 @@
|
|
|
57
57
|
"funds.packages.noPackages": "暂无积分包",
|
|
58
58
|
"funds.packages.purchaseFirst": "购买您的第一个积分包",
|
|
59
59
|
"funds.packages.purchasedOn": "购买于 {{date}}",
|
|
60
|
+
"funds.packages.gift": "赠送",
|
|
61
|
+
"funds.packages.giftedOn": "赠送于 {{date}}",
|
|
60
62
|
"funds.packages.sort.amountAsc": "金额:从低到高",
|
|
61
63
|
"funds.packages.sort.amountDesc": "金额:从高到低",
|
|
62
64
|
"funds.packages.sort.balanceAsc": "余额:从低到高",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/lobehub",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.285",
|
|
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",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KLAVIS_SERVER_TYPES } from '@lobechat/const';
|
|
1
|
+
import { KLAVIS_SERVER_TYPES, LOBEHUB_SKILL_PROVIDERS } from '@lobechat/const';
|
|
2
2
|
import { marketToolsResultsPrompt, modelsResultsPrompt } from '@lobechat/prompts';
|
|
3
3
|
import { BuiltinServerRuntimeOutput } from '@lobechat/types';
|
|
4
4
|
|
|
@@ -10,9 +10,11 @@ import { getToolStoreState } from '@/store/tool';
|
|
|
10
10
|
import {
|
|
11
11
|
builtinToolSelectors,
|
|
12
12
|
klavisStoreSelectors,
|
|
13
|
+
lobehubSkillStoreSelectors,
|
|
13
14
|
pluginSelectors,
|
|
14
15
|
} from '@/store/tool/selectors';
|
|
15
16
|
import { KlavisServerStatus } from '@/store/tool/slices/klavisStore/types';
|
|
17
|
+
import { LobehubSkillStatus } from '@/store/tool/slices/lobehubSkillStore/types';
|
|
16
18
|
import { getUserStoreState } from '@/store/user';
|
|
17
19
|
import { userProfileSelectors } from '@/store/user/selectors';
|
|
18
20
|
|
|
@@ -732,7 +734,82 @@ export class AgentBuilderExecutionRuntime {
|
|
|
732
734
|
}
|
|
733
735
|
}
|
|
734
736
|
|
|
735
|
-
//
|
|
737
|
+
// Check if it's a LobehubSkill provider
|
|
738
|
+
const isLobehubSkillEnabled =
|
|
739
|
+
typeof window !== 'undefined' &&
|
|
740
|
+
window.global_serverConfigStore?.getState()?.serverConfig?.enableLobehubSkill;
|
|
741
|
+
|
|
742
|
+
if (isLobehubSkillEnabled) {
|
|
743
|
+
// Check if this is a LobehubSkill provider
|
|
744
|
+
const lobehubSkillServer = lobehubSkillStoreSelectors
|
|
745
|
+
.getServers(toolState)
|
|
746
|
+
.find((s) => s.identifier === identifier);
|
|
747
|
+
|
|
748
|
+
// Find LobehubSkill provider info from LOBEHUB_SKILL_PROVIDERS
|
|
749
|
+
const lobehubSkillProviderInfo = LOBEHUB_SKILL_PROVIDERS.find((p) => p.id === identifier);
|
|
750
|
+
|
|
751
|
+
if (lobehubSkillProviderInfo) {
|
|
752
|
+
// This is a LobehubSkill provider
|
|
753
|
+
if (lobehubSkillServer) {
|
|
754
|
+
// Server exists
|
|
755
|
+
if (lobehubSkillServer.status === LobehubSkillStatus.CONNECTED) {
|
|
756
|
+
// Already connected, just enable the plugin
|
|
757
|
+
const agentState = getAgentStoreState();
|
|
758
|
+
const currentPlugins =
|
|
759
|
+
agentSelectors.getAgentConfigById(agentId)(agentState).plugins || [];
|
|
760
|
+
|
|
761
|
+
if (!currentPlugins.includes(identifier)) {
|
|
762
|
+
await getAgentStoreState().optimisticUpdateAgentConfig(agentId, {
|
|
763
|
+
plugins: [...currentPlugins, identifier],
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
return {
|
|
768
|
+
content: `Successfully enabled LobehubSkill provider: ${lobehubSkillProviderInfo.label}`,
|
|
769
|
+
state: {
|
|
770
|
+
installed: true,
|
|
771
|
+
isLobehubSkill: true,
|
|
772
|
+
pluginId: identifier,
|
|
773
|
+
pluginName: lobehubSkillProviderInfo.label,
|
|
774
|
+
serverStatus: 'connected',
|
|
775
|
+
success: true,
|
|
776
|
+
} as InstallPluginState,
|
|
777
|
+
success: true,
|
|
778
|
+
};
|
|
779
|
+
} else {
|
|
780
|
+
// Server exists but not connected - need to reconnect
|
|
781
|
+
return {
|
|
782
|
+
content: `LobehubSkill provider "${lobehubSkillProviderInfo.label}" is not connected. Please reconnect it from the tools settings.`,
|
|
783
|
+
state: {
|
|
784
|
+
installed: false,
|
|
785
|
+
isLobehubSkill: true,
|
|
786
|
+
pluginId: identifier,
|
|
787
|
+
pluginName: lobehubSkillProviderInfo.label,
|
|
788
|
+
serverStatus: lobehubSkillServer.status,
|
|
789
|
+
success: false,
|
|
790
|
+
} as InstallPluginState,
|
|
791
|
+
success: false,
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
} else {
|
|
795
|
+
// Server doesn't exist - need to connect first
|
|
796
|
+
return {
|
|
797
|
+
content: `LobehubSkill provider "${lobehubSkillProviderInfo.label}" is not connected. Please connect it from the tools settings first.`,
|
|
798
|
+
state: {
|
|
799
|
+
installed: false,
|
|
800
|
+
isLobehubSkill: true,
|
|
801
|
+
pluginId: identifier,
|
|
802
|
+
pluginName: lobehubSkillProviderInfo.label,
|
|
803
|
+
serverStatus: 'not_connected',
|
|
804
|
+
success: false,
|
|
805
|
+
} as InstallPluginState,
|
|
806
|
+
success: false,
|
|
807
|
+
};
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
// Not a Klavis or LobehubSkill tool, check if it's a builtin tool
|
|
736
813
|
const builtinTools = builtinToolSelectors.metaList(toolState);
|
|
737
814
|
const builtinTool = builtinTools.find((t) => t.identifier === identifier);
|
|
738
815
|
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { KLAVIS_SERVER_TYPES } from '@lobechat/const';
|
|
3
|
+
import { KLAVIS_SERVER_TYPES, LOBEHUB_SKILL_PROVIDERS } from '@lobechat/const';
|
|
4
4
|
import { BuiltinInterventionProps } from '@lobechat/types';
|
|
5
|
-
import { Avatar
|
|
5
|
+
import { Avatar, Flexbox } from '@lobehub/ui';
|
|
6
6
|
import { CheckCircle } from 'lucide-react';
|
|
7
7
|
import Image from 'next/image';
|
|
8
8
|
import { memo } from 'react';
|
|
9
9
|
import { useTranslation } from 'react-i18next';
|
|
10
10
|
|
|
11
11
|
import { useToolStore } from '@/store/tool';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
klavisStoreSelectors,
|
|
14
|
+
lobehubSkillStoreSelectors,
|
|
15
|
+
pluginSelectors,
|
|
16
|
+
} from '@/store/tool/selectors';
|
|
13
17
|
import { KlavisServerStatus } from '@/store/tool/slices/klavisStore/types';
|
|
18
|
+
import { LobehubSkillStatus } from '@/store/tool/slices/lobehubSkillStore/types';
|
|
14
19
|
|
|
15
20
|
import type { InstallPluginParams } from '../../types';
|
|
16
21
|
|
|
@@ -34,10 +39,19 @@ const InstallPluginIntervention = memo<BuiltinInterventionProps<InstallPluginPar
|
|
|
34
39
|
klavisStoreSelectors.getServers(s).find((srv) => srv.identifier === identifier),
|
|
35
40
|
);
|
|
36
41
|
|
|
42
|
+
// Get LobehubSkill server state
|
|
43
|
+
const lobehubSkillServer = useToolStore((s) =>
|
|
44
|
+
lobehubSkillStoreSelectors.getServers(s).find((srv) => srv.identifier === identifier),
|
|
45
|
+
);
|
|
46
|
+
|
|
37
47
|
// Check if it's a Klavis tool
|
|
38
48
|
const klavisTypeInfo = KLAVIS_SERVER_TYPES.find((t) => t.identifier === identifier);
|
|
39
49
|
const isKlavis = source === 'official' && !!klavisTypeInfo;
|
|
40
50
|
|
|
51
|
+
// Check if it's a LobehubSkill provider
|
|
52
|
+
const lobehubSkillProviderInfo = LOBEHUB_SKILL_PROVIDERS.find((p) => p.id === identifier);
|
|
53
|
+
const isLobehubSkill = source === 'official' && !!lobehubSkillProviderInfo;
|
|
54
|
+
|
|
41
55
|
// Render success state (already installed)
|
|
42
56
|
if (isPluginInstalled) {
|
|
43
57
|
return (
|
|
@@ -54,12 +68,12 @@ const InstallPluginIntervention = memo<BuiltinInterventionProps<InstallPluginPar
|
|
|
54
68
|
<CheckCircle size={20} style={{ color: 'var(--lobe-success-6)' }} />
|
|
55
69
|
<Flexbox gap={4}>
|
|
56
70
|
<span style={{ fontWeight: 600 }}>
|
|
57
|
-
{isKlavis
|
|
71
|
+
{isKlavis || isLobehubSkill
|
|
58
72
|
? t('agentBuilder.installPlugin.connectedAndEnabled')
|
|
59
73
|
: t('agentBuilder.installPlugin.installedAndEnabled')}
|
|
60
74
|
</span>
|
|
61
75
|
<span style={{ color: 'var(--lobe-text-secondary)', fontSize: 12 }}>
|
|
62
|
-
{klavisTypeInfo?.label || identifier}
|
|
76
|
+
{klavisTypeInfo?.label || lobehubSkillProviderInfo?.label || identifier}
|
|
63
77
|
</span>
|
|
64
78
|
</Flexbox>
|
|
65
79
|
</Flexbox>
|
|
@@ -105,6 +119,53 @@ const InstallPluginIntervention = memo<BuiltinInterventionProps<InstallPluginPar
|
|
|
105
119
|
);
|
|
106
120
|
}
|
|
107
121
|
|
|
122
|
+
// Render LobehubSkill provider
|
|
123
|
+
if (isLobehubSkill) {
|
|
124
|
+
const icon =
|
|
125
|
+
typeof lobehubSkillProviderInfo?.icon === 'string'
|
|
126
|
+
? lobehubSkillProviderInfo.icon
|
|
127
|
+
: undefined;
|
|
128
|
+
const isNotConnected =
|
|
129
|
+
!lobehubSkillServer || lobehubSkillServer.status !== LobehubSkillStatus.CONNECTED;
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<Flexbox
|
|
133
|
+
gap={12}
|
|
134
|
+
style={{ background: 'var(--lobe-fill-tertiary)', borderRadius: 8, padding: 16 }}
|
|
135
|
+
>
|
|
136
|
+
<Flexbox align="center" gap={12} horizontal>
|
|
137
|
+
{icon ? (
|
|
138
|
+
<Image
|
|
139
|
+
alt={lobehubSkillProviderInfo?.label || identifier}
|
|
140
|
+
height={40}
|
|
141
|
+
src={icon}
|
|
142
|
+
style={{ borderRadius: 8 }}
|
|
143
|
+
unoptimized
|
|
144
|
+
width={40}
|
|
145
|
+
/>
|
|
146
|
+
) : (
|
|
147
|
+
<Avatar avatar="🔗" size={40} style={{ borderRadius: 8 }} />
|
|
148
|
+
)}
|
|
149
|
+
<Flexbox flex={1} gap={4}>
|
|
150
|
+
<Flexbox align="center" gap={8} horizontal>
|
|
151
|
+
<span style={{ fontWeight: 600 }}>
|
|
152
|
+
{lobehubSkillProviderInfo?.label || identifier}
|
|
153
|
+
</span>
|
|
154
|
+
<span style={{ color: 'var(--lobe-text-tertiary)', fontSize: 12 }}>
|
|
155
|
+
LobeHub Skill
|
|
156
|
+
</span>
|
|
157
|
+
</Flexbox>
|
|
158
|
+
<span style={{ color: 'var(--lobe-text-secondary)', fontSize: 12 }}>
|
|
159
|
+
{isNotConnected
|
|
160
|
+
? t('agentBuilder.installPlugin.requiresAuth')
|
|
161
|
+
: t('agentBuilder.installPlugin.clickApproveToConnect')}
|
|
162
|
+
</span>
|
|
163
|
+
</Flexbox>
|
|
164
|
+
</Flexbox>
|
|
165
|
+
</Flexbox>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
108
169
|
// Render MCP marketplace plugin
|
|
109
170
|
// Note: The actual installation happens in ExecutionRuntime after user approves
|
|
110
171
|
return (
|
|
@@ -9,8 +9,16 @@ import type { InstallPluginParams, InstallPluginState } from '../../types';
|
|
|
9
9
|
|
|
10
10
|
const InstallPlugin = memo<BuiltinRenderProps<InstallPluginParams, InstallPluginState>>(
|
|
11
11
|
({ pluginState }) => {
|
|
12
|
-
const {
|
|
13
|
-
|
|
12
|
+
const {
|
|
13
|
+
pluginId,
|
|
14
|
+
pluginName,
|
|
15
|
+
installed,
|
|
16
|
+
awaitingApproval,
|
|
17
|
+
isKlavis,
|
|
18
|
+
isLobehubSkill,
|
|
19
|
+
serverStatus,
|
|
20
|
+
error,
|
|
21
|
+
} = pluginState || {};
|
|
14
22
|
|
|
15
23
|
if (!pluginId) return null;
|
|
16
24
|
|
|
@@ -43,7 +51,7 @@ const InstallPlugin = memo<BuiltinRenderProps<InstallPluginParams, InstallPlugin
|
|
|
43
51
|
<Flexbox align={'center'} gap={8} horizontal style={{ fontSize: 13 }}>
|
|
44
52
|
<Clock size={14} style={{ color: 'var(--lobe-warning-6)' }} />
|
|
45
53
|
<span style={{ fontWeight: 500 }}>
|
|
46
|
-
{isKlavis ? (
|
|
54
|
+
{isKlavis || isLobehubSkill ? (
|
|
47
55
|
<>
|
|
48
56
|
Waiting for authorization:{' '}
|
|
49
57
|
<code
|
|
@@ -90,7 +98,7 @@ const InstallPlugin = memo<BuiltinRenderProps<InstallPluginParams, InstallPlugin
|
|
|
90
98
|
<Flexbox align={'center'} gap={8} horizontal style={{ fontSize: 13 }}>
|
|
91
99
|
<CheckCircle size={14} style={{ color: 'var(--lobe-success-6)' }} />
|
|
92
100
|
<span style={{ fontWeight: 500 }}>
|
|
93
|
-
{isKlavis ? 'Connected and enabled' : 'Installed and enabled'}:{' '}
|
|
101
|
+
{isKlavis || isLobehubSkill ? 'Connected and enabled' : 'Installed and enabled'}:{' '}
|
|
94
102
|
<code
|
|
95
103
|
style={{
|
|
96
104
|
background: 'var(--lobe-fill-tertiary)',
|
|
@@ -27,6 +27,7 @@ export const AgentBuilderManifest: BuiltinToolManifest = {
|
|
|
27
27
|
{
|
|
28
28
|
description:
|
|
29
29
|
'Search for tools (MCP plugins) in the marketplace. Users can browse and install tools directly from the search results. Use this when users want to find new tools or capabilities.',
|
|
30
|
+
humanIntervention: 'always',
|
|
30
31
|
name: AgentBuilderApiName.searchMarketTools,
|
|
31
32
|
parameters: {
|
|
32
33
|
properties: {
|
|
@@ -55,7 +56,7 @@ export const AgentBuilderManifest: BuiltinToolManifest = {
|
|
|
55
56
|
// ==================== Write Operations ====================
|
|
56
57
|
{
|
|
57
58
|
description:
|
|
58
|
-
'Install a plugin for the agent. This tool ALWAYS REQUIRES user approval before installation, even in auto-run mode. For MCP marketplace plugins, it will install and enable the plugin. For Klavis tools that need OAuth, it will initiate the connection flow and wait for user to complete authorization.',
|
|
59
|
+
'Install a plugin for the agent. This tool ALWAYS REQUIRES user approval before installation, even in auto-run mode. For MCP marketplace plugins, it will install and enable the plugin. For Klavis tools and LobehubSkill providers that need OAuth, it will initiate the connection flow and wait for user to complete authorization.',
|
|
59
60
|
humanIntervention: 'always',
|
|
60
61
|
name: AgentBuilderApiName.installPlugin,
|
|
61
62
|
parameters: {
|
|
@@ -67,7 +68,7 @@ export const AgentBuilderManifest: BuiltinToolManifest = {
|
|
|
67
68
|
},
|
|
68
69
|
source: {
|
|
69
70
|
description:
|
|
70
|
-
'Plugin source type: "market" for MCP marketplace plugins, "official" for builtin/Klavis tools',
|
|
71
|
+
'Plugin source type: "market" for MCP marketplace plugins, "official" for builtin/Klavis/LobehubSkill tools',
|
|
71
72
|
enum: ['market', 'official'],
|
|
72
73
|
type: 'string',
|
|
73
74
|
},
|
|
@@ -12,7 +12,7 @@ export const systemPrompt = `You are an Agent Configuration Assistant integrated
|
|
|
12
12
|
The injected context includes:
|
|
13
13
|
- **agent_meta**: title, description, avatar, backgroundColor, tags
|
|
14
14
|
- **agent_config**: model, provider, plugins, systemRole (preview), and other advanced settings
|
|
15
|
-
- **official_tools**: List of available official tools including built-in tools and
|
|
15
|
+
- **official_tools**: List of available official tools including built-in tools, Klavis MCP servers, and LobehubSkill providers (Linear, Outlook Calendar, Twitter, etc.) with their enabled/installed status
|
|
16
16
|
|
|
17
17
|
You should use this context to understand the current state of the agent and available tools before making any modifications.
|
|
18
18
|
</context_awareness>
|
|
@@ -24,7 +24,7 @@ You have access to tools that can modify agent configurations:
|
|
|
24
24
|
- **getAvailableModels**: Get all available AI models and providers that can be used. Optionally filter by provider ID.
|
|
25
25
|
- **searchMarketTools**: Search for tools (MCP plugins) in the marketplace. Shows results with install buttons for users to install directly.
|
|
26
26
|
|
|
27
|
-
Note: Official tools (built-in tools and
|
|
27
|
+
Note: Official tools (built-in tools, Klavis MCP servers, and LobehubSkill providers) are automatically available in the \`<current_agent_context>\` - no need to search for them.
|
|
28
28
|
|
|
29
29
|
**Write Operations:**
|
|
30
30
|
- **updateConfig**: Update agent configuration fields (model, provider, plugins, and advanced settings). Use this for all config changes.
|
|
@@ -180,16 +180,16 @@ User: "What tools are available in the marketplace?"
|
|
|
180
180
|
Action: Use searchMarketTools without query to browse all available tools. Display the list with descriptions and install options.
|
|
181
181
|
|
|
182
182
|
User: "帮我找一下有什么插件可以用"
|
|
183
|
-
Action: Reference the \`<official_tools>\` from the injected context to show available built-in tools and
|
|
183
|
+
Action: Reference the \`<official_tools>\` from the injected context to show available built-in tools, Klavis MCP servers, and LobehubSkill providers. This allows the user to enable tools directly or connect to services.
|
|
184
184
|
|
|
185
|
-
User: "I want to connect my
|
|
186
|
-
Action: Check the \`<official_tools>\` in the context for
|
|
185
|
+
User: "I want to connect my Linear"
|
|
186
|
+
Action: Check the \`<official_tools>\` in the context for Linear LobehubSkill provider. If found, use installPlugin with source "official" to connect it.
|
|
187
187
|
|
|
188
|
-
User: "
|
|
189
|
-
Action: Check the \`<official_tools>\` in the context for
|
|
188
|
+
User: "帮我连接 Twitter"
|
|
189
|
+
Action: Check the \`<official_tools>\` in the context for Twitter (X) LobehubSkill provider. If found, use installPlugin with source "official" to connect it.
|
|
190
190
|
|
|
191
191
|
User: "What official integrations are available?"
|
|
192
|
-
Action: Reference the \`<official_tools>\` from the injected context to list all available
|
|
192
|
+
Action: Reference the \`<official_tools>\` from the injected context to list all available integrations including built-in tools, Klavis MCP servers, and LobehubSkill providers (Linear, Outlook Calendar, Twitter, etc.).
|
|
193
193
|
|
|
194
194
|
User: "帮我设置开场白" / "Set an opening message for this agent"
|
|
195
195
|
Action: Use updateConfig with { config: { openingMessage: "Hello! I'm your AI assistant. How can I help you today?" } }
|
|
@@ -164,7 +164,7 @@ export interface InstallPluginParams {
|
|
|
164
164
|
*/
|
|
165
165
|
identifier: string;
|
|
166
166
|
/**
|
|
167
|
-
* Plugin source type: 'market' for MCP marketplace, 'official' for builtin/klavis tools
|
|
167
|
+
* Plugin source type: 'market' for MCP marketplace, 'official' for builtin/klavis/lobehubSkill tools
|
|
168
168
|
*/
|
|
169
169
|
source: 'market' | 'official';
|
|
170
170
|
}
|
|
@@ -187,6 +187,10 @@ export interface InstallPluginState {
|
|
|
187
187
|
* Whether the plugin is a Klavis tool that needs OAuth connection
|
|
188
188
|
*/
|
|
189
189
|
isKlavis?: boolean;
|
|
190
|
+
/**
|
|
191
|
+
* Whether the plugin is a LobehubSkill provider that needs OAuth connection
|
|
192
|
+
*/
|
|
193
|
+
isLobehubSkill?: boolean;
|
|
190
194
|
/**
|
|
191
195
|
* Klavis OAuth URL if authorization is needed
|
|
192
196
|
*/
|
|
@@ -204,9 +208,9 @@ export interface InstallPluginState {
|
|
|
204
208
|
*/
|
|
205
209
|
serverName?: string;
|
|
206
210
|
/**
|
|
207
|
-
* Klavis
|
|
211
|
+
* Server status (for Klavis tools and LobehubSkill providers)
|
|
208
212
|
*/
|
|
209
|
-
serverStatus?: 'connected' | 'pending_auth' | 'error';
|
|
213
|
+
serverStatus?: 'connected' | 'pending_auth' | 'error' | 'not_connected';
|
|
210
214
|
/**
|
|
211
215
|
* Whether the operation was successful
|
|
212
216
|
*/
|
|
@@ -31,8 +31,8 @@ export interface OfficialToolItem {
|
|
|
31
31
|
installed?: boolean;
|
|
32
32
|
/** Tool display name */
|
|
33
33
|
name: string;
|
|
34
|
-
/** Tool type: 'builtin' for built-in tools, 'klavis' for LobeHub Mcp servers */
|
|
35
|
-
type: 'builtin' | 'klavis';
|
|
34
|
+
/** Tool type: 'builtin' for built-in tools, 'klavis' for LobeHub Mcp servers, 'lobehub-skill' for LobeHub Skill providers */
|
|
35
|
+
type: 'builtin' | 'klavis' | 'lobehub-skill';
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/**
|
|
@@ -58,7 +58,7 @@ export interface AgentBuilderContext {
|
|
|
58
58
|
tags?: string[];
|
|
59
59
|
title?: string;
|
|
60
60
|
};
|
|
61
|
-
/** Available official tools (builtin tools and
|
|
61
|
+
/** Available official tools (builtin tools, Klavis integrations, and LobehubSkill providers) */
|
|
62
62
|
officialTools?: OfficialToolItem[];
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -136,6 +136,7 @@ const defaultFormatAgentContext = (context: AgentBuilderContext): string => {
|
|
|
136
136
|
if (context.officialTools && context.officialTools.length > 0) {
|
|
137
137
|
const builtinTools = context.officialTools.filter((t) => t.type === 'builtin');
|
|
138
138
|
const klavisTools = context.officialTools.filter((t) => t.type === 'klavis');
|
|
139
|
+
const lobehubSkillTools = context.officialTools.filter((t) => t.type === 'lobehub-skill');
|
|
139
140
|
|
|
140
141
|
const toolsSections: string[] = [];
|
|
141
142
|
|
|
@@ -167,6 +168,21 @@ const defaultFormatAgentContext = (context: AgentBuilderContext): string => {
|
|
|
167
168
|
toolsSections.push(` <klavis_tools>\n${klavisItems}\n </klavis_tools>`);
|
|
168
169
|
}
|
|
169
170
|
|
|
171
|
+
if (lobehubSkillTools.length > 0) {
|
|
172
|
+
const lobehubSkillItems = lobehubSkillTools
|
|
173
|
+
.map((t) => {
|
|
174
|
+
const attrs = [
|
|
175
|
+
`id="${t.identifier}"`,
|
|
176
|
+
`installed="${t.installed ? 'true' : 'false'}"`,
|
|
177
|
+
`enabled="${t.enabled ? 'true' : 'false'}"`,
|
|
178
|
+
].join(' ');
|
|
179
|
+
const desc = t.description ? ` - ${escapeXml(t.description)}` : '';
|
|
180
|
+
return ` <tool ${attrs}>${escapeXml(t.name)}${desc}</tool>`;
|
|
181
|
+
})
|
|
182
|
+
.join('\n');
|
|
183
|
+
toolsSections.push(` <lobehub_skill_tools>\n${lobehubSkillItems}\n </lobehub_skill_tools>`);
|
|
184
|
+
}
|
|
185
|
+
|
|
170
186
|
if (toolsSections.length > 0) {
|
|
171
187
|
parts.push(
|
|
172
188
|
`<available_official_tools>\n${toolsSections.join('\n')}\n</available_official_tools>`,
|
|
@@ -179,7 +195,7 @@ const defaultFormatAgentContext = (context: AgentBuilderContext): string => {
|
|
|
179
195
|
}
|
|
180
196
|
|
|
181
197
|
return `<current_agent_context>
|
|
182
|
-
<instruction>This is the current agent's configuration context. Use this information when the user asks about or wants to modify agent settings. Use togglePlugin to enable/disable tools, or installPlugin to install new tools.</instruction>
|
|
198
|
+
<instruction>This is the current agent's configuration context. Use this information when the user asks about or wants to modify agent settings. Use togglePlugin to enable/disable tools, or installPlugin to install new tools (including builtin tools, Klavis servers, and LobehubSkill providers).</instruction>
|
|
183
199
|
${parts.join('\n')}
|
|
184
200
|
</current_agent_context>`;
|
|
185
201
|
};
|
|
@@ -47,8 +47,8 @@ export interface GroupOfficialToolItem {
|
|
|
47
47
|
installed?: boolean;
|
|
48
48
|
/** Tool display name */
|
|
49
49
|
name: string;
|
|
50
|
-
/** Tool type: 'builtin' for built-in tools, 'klavis' for LobeHub Mcp servers */
|
|
51
|
-
type: 'builtin' | 'klavis';
|
|
50
|
+
/** Tool type: 'builtin' for built-in tools, 'klavis' for LobeHub Mcp servers, 'lobehub-skill' for LobeHub Skill providers */
|
|
51
|
+
type: 'builtin' | 'klavis' | 'lobehub-skill';
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -195,6 +195,7 @@ const defaultFormatGroupContext = (context: GroupAgentBuilderContext): string =>
|
|
|
195
195
|
if (context.officialTools && context.officialTools.length > 0) {
|
|
196
196
|
const builtinTools = context.officialTools.filter((t) => t.type === 'builtin');
|
|
197
197
|
const klavisTools = context.officialTools.filter((t) => t.type === 'klavis');
|
|
198
|
+
const lobehubSkillTools = context.officialTools.filter((t) => t.type === 'lobehub-skill');
|
|
198
199
|
|
|
199
200
|
const toolsSections: string[] = [];
|
|
200
201
|
|
|
@@ -226,6 +227,21 @@ const defaultFormatGroupContext = (context: GroupAgentBuilderContext): string =>
|
|
|
226
227
|
toolsSections.push(` <klavis_tools>\n${klavisItems}\n </klavis_tools>`);
|
|
227
228
|
}
|
|
228
229
|
|
|
230
|
+
if (lobehubSkillTools.length > 0) {
|
|
231
|
+
const lobehubSkillItems = lobehubSkillTools
|
|
232
|
+
.map((t) => {
|
|
233
|
+
const attrs = [
|
|
234
|
+
`id="${t.identifier}"`,
|
|
235
|
+
`installed="${t.installed ? 'true' : 'false'}"`,
|
|
236
|
+
`enabled="${t.enabled ? 'true' : 'false'}"`,
|
|
237
|
+
].join(' ');
|
|
238
|
+
const desc = t.description ? ` - ${escapeXml(t.description)}` : '';
|
|
239
|
+
return ` <tool ${attrs}>${escapeXml(t.name)}${desc}</tool>`;
|
|
240
|
+
})
|
|
241
|
+
.join('\n');
|
|
242
|
+
toolsSections.push(` <lobehub_skill_tools>\n${lobehubSkillItems}\n </lobehub_skill_tools>`);
|
|
243
|
+
}
|
|
244
|
+
|
|
229
245
|
if (toolsSections.length > 0) {
|
|
230
246
|
parts.push(
|
|
231
247
|
`<available_official_tools>\n${toolsSections.join('\n')}\n</available_official_tools>`,
|
|
@@ -1226,11 +1226,30 @@ const lobehubImageModels: AIImageModelCard[] = [
|
|
|
1226
1226
|
},
|
|
1227
1227
|
type: 'image',
|
|
1228
1228
|
},
|
|
1229
|
+
{
|
|
1230
|
+
description:
|
|
1231
|
+
'Seedream 4.5, built by ByteDance Seed team, supports multi-image editing and composition. Features enhanced subject consistency, precise instruction following, spatial logic understanding, aesthetic expression, poster layout and logo design with high-precision text-image rendering.',
|
|
1232
|
+
displayName: 'Seedream 4.5',
|
|
1233
|
+
enabled: true,
|
|
1234
|
+
id: 'fal-ai/bytedance/seedream/v4.5',
|
|
1235
|
+
parameters: {
|
|
1236
|
+
height: { default: 2048, max: 4096, min: 1920, step: 1 },
|
|
1237
|
+
imageUrls: { default: [], maxCount: 10, maxFileSize: 10 * 1024 * 1024 },
|
|
1238
|
+
prompt: { default: '' },
|
|
1239
|
+
seed: { default: null },
|
|
1240
|
+
width: { default: 2048, max: 4096, min: 1920, step: 1 },
|
|
1241
|
+
},
|
|
1242
|
+
pricing: {
|
|
1243
|
+
units: [{ name: 'imageGeneration', rate: 0.04, strategy: 'fixed', unit: 'image' }],
|
|
1244
|
+
},
|
|
1245
|
+
releasedAt: '2025-12-04',
|
|
1246
|
+
type: 'image',
|
|
1247
|
+
},
|
|
1229
1248
|
{
|
|
1230
1249
|
description:
|
|
1231
1250
|
'Seedream 4.0, built by ByteDance Seed, supports text and image inputs for highly controllable, high-quality image generation from prompts.',
|
|
1232
1251
|
displayName: 'Seedream 4.0',
|
|
1233
|
-
enabled:
|
|
1252
|
+
enabled: false,
|
|
1234
1253
|
id: 'fal-ai/bytedance/seedream/v4',
|
|
1235
1254
|
parameters: {
|
|
1236
1255
|
height: { default: 1024, max: 4096, min: 1024, step: 1 },
|