2.1 XpertPlugin
XpertPlugin 是插件的核心入口接口,定义了插件的元信息(meta)、配置(config)、生命周期方法和模块注册逻辑。
- meta:插件的基本元信息,包括
name、version、category、icon、description等。 - config:定义插件所需的配置 Schema(基于
zod),支持默认值与 UI 表单渲染。 - register:返回
DynamicModule,用于将插件挂载到主应用(可选择设为全局)。
2.2 插件生命周期(PluginLifecycle)
插件系统为每个插件提供完整的生命周期钩子,方便开发者在不同阶段执行初始化或清理逻辑。- onInit:适合做资源初始化(如加载配置、注册资源池)。
- onStart:适合启动后台任务、开启服务监听。
- onStop:适合清理资源、关闭连接、释放缓存。
2.3 插件健康检查(PluginHealth)
插件可实现checkHealth 方法,用于报告自身的运行状态,便于宿主系统进行统一的健康监控。
- status:运行状态(
up或down) - details:可选的依赖检查详情,如 API 连通性、数据库状态
2.4 插件上下文(PluginContext)
PluginContext 提供了插件在运行时访问宿主系统的能力,包括应用上下文、日志服务和配置。
- app:NestJS 的
INestApplicationContext,允许访问依赖注入容器。 - logger:统一日志接口,支持
debug、log、warn、error。 - config:经过 zod 校验和合并默认值后的最终配置对象。
- resolve:从 NestJS 容器中获取其他 Provider。
2.5 插件配置(PluginConfigSpec)
每个插件可定义一份配置规范,用于约束和校验配置参数,通常通过zod Schema 实现:
- 支持 类型安全(zod 类型推导)
- 支持 默认值 与 安全输入(如 API Key 的密钥输入)
- 宿主系统会根据该 Schema 自动渲染配置 UI
2.6 XpertServerPlugin 装饰器
@XpertServerPlugin 是一个增强的 Nestjs Module 类装饰器,用于将插件注册为 NestJS 模块,并为其附加插件元数据。
- 实际上基于 NestJS 的
@Module装饰器扩展而来 - 支持注册子模块、服务、控制器、实体等
- 插件因此成为一个完整的 NestJS 动态模块
2.7 增强出口点(Enhancement Points)
增强出口点是插件扩展宿主系统的关键机制。宿主系统会定义一系列策略接口(Strategy),插件通过实现这些接口并打上装饰器,就能被系统自动发现并注册。IntegrationStrategy(系统集成策略)
用于对接外部系统或 API 服务,例如 Firecrawl、OpenAI 等。- meta:集成提供者的元信息(名称、描述、icon 等)
- execute:执行具体的集成逻辑(例如调用外部 API)
DocumentSourceStrategy(文档数据源策略)
用于接入新的数据源,例如网页爬虫、文件解析、数据库。插件只需实现对应接口,即可让智能体/BI 使用该数据源。2.8 策略注册中心
所有策略类(Integration、DocumentSource 等)通过 装饰器 + NestJS 依赖注入 的方式注册到 策略注册中心(Registry)。 以 IntegrationStrategy 为例:IntegrationStrategyRegistry会自动发现打上@IntegrationStrategyKey的类- 插件无需手动注册策略,只要实现接口并装饰即可被系统识别
📌 小结:
XpertPlugin定义了插件的元信息、配置与生命周期XpertServerPlugin将插件注册为 NestJS 模块- 增强出口点(Strategy) 是插件扩展宿主系统功能的核心
- 所有插件都通过 生命周期 + 策略接口 + 配置 Schema 形成可扩展、可维护的模块