.agents/design/plugin/team-plugin-management.md
mode: design cwd: /Volumes/Code/FastGPT task: 团队安装和管理自己的系统插件 complexity: complex updated_at: 2026-08-03 status: IMPLEMENTED
FastGPT 允许团队管理员从 Marketplace 安装插件,或上传
.pkg / .zip 安装到当前团队。团队插件可以删除和重新安装,系统预装插件继续由
系统管理员统一管理。
本次 PR 只覆盖团队插件安装、删除、列表和运行时授权。以下能力不在本次范围:
SoonOffline 状态。team_installed_plugins 是团队安装授权账本,只记录当前团队安装过的插件。系统预装
插件不写入该表,也不存在团队级 hidden 状态。
type TeamPluginPolicyStatus = 'installed' | 'deleted';
type TeamInstalledPlugin = {
teamId: string;
pluginType: 'tool';
pluginId: string;
version?: string;
etag?: string;
installSource?: 'marketplace' | 'upload';
status?: TeamPluginPolicyStatus;
packageSource?: {
marketplaceToolId?: string;
marketplaceSource?: string;
downloadUrlHash?: string;
uploadedFileName?: string;
};
confirmedPermissions?: string[];
permissionsConfirmedAt?: Date;
installedByTmbId?: string;
installedAt?: Date;
updatedByTmbId?: string;
updatedAt?: Date;
deletedByTmbId?: string;
deletedAt?: Date;
createTime?: Date;
updateTime?: Date;
installed?: boolean;
};
兼容规则:
status 是当前读写依据。status 时,installed === false 视为 deleted,其余视为 installed。{ teamId, pluginId }。团队插件 source 统一使用:
const source = `teamId:${teamId}`;
它与 debug source 的设计一致:
system
teamId:<teamId>
debug:tmbId:<tmbId>
约束:
teamId:<teamId>。team_installed_plugins.status === installed。deleted 时 fail closed。system 处理。统一 helper 位于 packages/global/core/app/tool/utils.ts:
getTeamPluginSource(teamId);
isTeamPluginSource(source);
parseTeamPluginSource(source);
Marketplace 安装和上传安装都写入当前 team source,仅通过 installSource 区分来源:
type TeamPluginInstallSource = 'marketplace' | 'upload';
安装流程:
teamId:<teamId>。installed。删除流程:
installed。teamId:<teamId> 下的插件。deleted。删除按钮必须展示强确认提示,明确已有 workflow / Agent 节点后续会运行失败。
保留接口:
GET /api/core/plugin/team/tool/list
GET /api/core/plugin/team/tool/detail
GET /api/core/plugin/team/tool/versions
POST /api/core/plugin/team/tool/delete
POST /api/core/plugin/team/pkg/upload
POST /api/core/plugin/team/pkg/confirm
POST /api/core/plugin/team/pkg/installWithUrl
删除接口:
POST /api/core/plugin/team/tool/hide
PUT /api/core/plugin/team/tool/tag/update
GET /api/core/plugin/team/tag/list
POST /api/core/plugin/team/tag/create
PUT /api/core/plugin/team/tag/update
PUT /api/core/plugin/team/tag/updateOrder
DELETE /api/core/plugin/team/tag/delete
团队插件列表支持:
type TeamPluginListQuery = {
includeDeleted?: boolean;
includeDebug?: boolean;
source?: 'all' | 'system' | 'team';
};
系统插件始终遵循系统级可见性和状态配置。团队插件仅在 policy 为 installed 时进入普通
列表;管理页可通过 includeDeleted 查看删除记录。
团队插件管理页保留三个 tab:
页面保留上传、安装、删除确认、版本、etag 和安装来源信息。页面移除系统插件隐藏按钮、 已隐藏 tab、标签管理 tab、标签编辑和标签绑定列。
teamId:<teamId> source:要求当前团队 policy 为 installed。enable_team_plugin_upload,控制上传入口、上传 API 和确认 API;旧配置缺少该字段时默认关闭。teamId:<teamId>。system、当前 team source 和活动 debug source。deleted 时不进入普通列表。includeDeleted 返回删除占位项,source 为当前 team source。git diff --check 通过。team。teamId:<teamId> 当作独立 registry source。team source、system hidden policy 和团队标签数据不做线上迁移。installed/deleted。teamId:<teamId> source helper 并迁移安装、列表、详情和运行时。teamId:<teamId> source 的安装、读回、运行和删除。