概述
OpenClaw 核心开发者向插件系统添加新共享能力的标准流程。适用于需要新增图像生成、视频生成等厂商支持领域时的架构决策和实现步骤。
核心要点
何时创建新能力(三个条件同时满足):
- 多个厂商都可能实现它
- Channel、工具或功能插件应消费它而无需关心厂商
- 核心需要拥有回退、策略、配置或交付行为
标准实现序列(7步):
- 定义类型化核心契约
- 添加该契约的插件注册
- 添加共享运行时助手
- 接入一个真实厂商插件作为验证
- 将功能/Channel 消费者迁移到运行时助手
- 添加契约测试
- 编写面向运维的配置和所有权文档
代码归属原则:
- 核心:请求/响应类型、Provider 注册表+解析、回退行为、配置 schema、运行时助手表面
- 厂商插件:厂商 API 调用、认证处理、厂商特定请求规范化、能力实现注册
- 功能/Channel 插件:调用
api.runtime.*或plugin-sdk/*-runtime助手,绝不直接调用厂商实现
Provider 与 Harness 钩子的区别:
- Provider 钩子:行为属于模型 Provider 契约(请求参数、认证偏好、提示覆盖)
- Agent Harness 钩子:行为属于执行 turn 的运行时(分类成功但不可用的尝试结果)
需要修改的文件清单:
src/<capability>/types.tssrc/<capability>/registry/runtime.tssrc/plugins/types.ts和registry.tssrc/plugin-sdk/<capability>.ts和<capability>-runtime.ts- 一个或多个 bundled 插件包
- 配置、文档、测试
配置/使用
能力模板(最小模式):
// 核心契约
export type VideoGenerationProviderPlugin = {
id: string;
label: string;
generateVideo: (req: VideoGenerationRequest) => Promise<VideoGenerationResult>;
};
// 厂商插件注册
api.registerVideoGenerationProvider({
id: "openai",
label: "OpenAI",
async generateVideo(req) { return await generateOpenAiVideo(req); },
});
// 功能/Channel 插件消费
const clip = await api.runtime.videoGeneration.generate({ prompt: "...", cfg });契约测试模式:
expect(findVideoGenerationProviderIdsForPlugin("openai")).toEqual(["openai"]);相关页面
- concepts/plugin-architecture — 能力模型、所有权、加载流水线
- concepts/plugin-building — 外部插件开发指南
- concepts/plugin-architecture-internals — 内部机制深度参考