diff --git a/client/web/src/plugin/PluginStore/index.tsx b/client/web/src/plugin/PluginStore/index.tsx
index b9d7ff90..b946d849 100644
--- a/client/web/src/plugin/PluginStore/index.tsx
+++ b/client/web/src/plugin/PluginStore/index.tsx
@@ -11,6 +11,7 @@ import { builtinPlugins } from '../builtin';
import { pluginManager } from '../manager';
import { PluginStoreItem } from './Item';
import { ManualInstall } from './ManualInstall';
+import _uniqBy from 'lodash/uniqBy';
function usePluginStoreData() {
const { loading: loading1, value: installedPluginList = [] } = useAsync(
@@ -48,14 +49,16 @@ export const PluginStore: React.FC = React.memo(() => {
{t('已安装')}
- {[...builtinPlugins, ...installedPluginList].map((plugin) => (
-
- ))}
+ {_uniqBy([...builtinPlugins, ...installedPluginList], 'name').map(
+ (plugin) => (
+
+ )
+ )}
diff --git a/client/web/src/plugin/manager.ts b/client/web/src/plugin/manager.ts
index 38cdee56..f6f89e21 100644
--- a/client/web/src/plugin/manager.ts
+++ b/client/web/src/plugin/manager.ts
@@ -9,6 +9,7 @@ import _once from 'lodash/once';
import { builtinPlugins } from './builtin';
import { showPluginLoadError } from './showPluginLoadError';
import { injectTailchatGlobalValue } from '@/utils/global-helper';
+import _uniqBy from 'lodash/uniqBy';
class PluginManager {
/**
@@ -20,10 +21,10 @@ class PluginManager {
* 初始化插件
*/
initPlugins = _once(async () => {
- const installedPlugins = [
- ...builtinPlugins,
- ...(await this.getInstalledPlugins()),
- ];
+ const installedPlugins = _uniqBy(
+ [...builtinPlugins, ...(await this.getInstalledPlugins())],
+ 'name'
+ );
const plugins = installedPlugins.map(({ name, url }) => ({
name,