@xpert-ai/plugin-sdk 导出。
能力模型
能力键是一个冻结对象,包含稳定 ID、说明和仅用于 TypeScript 推导的 API 类型:get() 和 require() 推导出准确 API 类型,也能让宿主与动态加载的插件通过稳定 ID 对齐同一份契约。
能力注册表提供四个操作:
在智能体中间件中解析能力
智能体中间件可通过context.runtime.capabilities 访问当前执行范围内的能力注册表:
get();只有在插件已确认该能力是当前操作的必要前提时,才使用 require():
在 NestJS 服务提供器中解析能力
NestJS 服务提供器不天然绑定某一次智能体执行,因此必须先区分能力是否依赖当前运行作用域:WorkspaceFilesRuntimeCapability 等涉及数据归属的能力必须优先从 scoped runtime API 获取。未绑定 xpertId 或 projectId 的全局注册表可能会故意不提供工作区文件能力,插件不能通过放宽宿主权限来绕过这个限制。
下面的示例在每次导出操作时创建作用域能力。全局注册表只作为兼容旧宿主的回退,新插件如果不需要兼容旧宿主,可以省略该回退:
createScopedApi() 的 tenantId、organizationId、userId、xpertId、projectId、conversationId、catalog 和 scopeId 必须来自宿主已解析的服务端上下文,不能来自 iframe、表单或 action input 中未经信任的 ID。
应在实际操作附近重新创建 scoped API 并解析能力,以便准确报告可用性。不要跨请求缓存与用户或执行上下文绑定的 API 或能力实例。
运行时包中的能力
继续阅读详细参考:
定义能力与测试消费者
createRuntimeCapability<T>() 可为宿主或插件子系统创建类型化能力键。不要复用现有 platform.* ID 来承载不同契约。如果消费者不应注册实现,请使用只暴露 get() 的只读 RuntimeCapabilityResolver。
DefaultRuntimeCapabilityRegistry 注册类型化模拟实现:
兼容性规则
- 从
@xpert-ai/plugin-sdk导入能力键和 API 类型,不要在插件中复制接口。 - NestJS Provider 消费作用域敏感能力时,必须使用
XPERT_AGENT_MIDDLEWARE_RUNTIME_TOKEN.createScopedApi();不要把未绑定数据所有者的全局注册表作为主要来源。 - 将能力可用性视为运行时条件。插件安装成功,并不代表宿主服务、提供器、绑定或已注册沙箱操作一定就绪。
- 在异步边界传递可移植引用和结构化 DTO,不要通过队列或持久化聊天元数据传递原始文件字节、持有者令牌、宿主路径或实现实例。
- 将能力返回值限制在当前授权范围内;后续任务或回调应重新解析所需资源。