插件 SDK 概览
插件 SDK 是插件与核心之间的类型化契约。本页是关于应导入什么以及你可以注册什么的参考。导入约定
始终从具体的子路径导入:openclaw/plugin-sdk/channel-core;将 openclaw/plugin-sdk/core 保留给更广泛的总括性接口和共享辅助工具,例如 buildChannelConfigSchema。
不要添加或依赖带有提供商名称的便捷接口层,例如 openclaw/plugin-sdk/slack、openclaw/plugin-sdk/discord、openclaw/plugin-sdk/signal、openclaw/plugin-sdk/whatsapp,或带有渠道品牌的辅助接口层。内置插件应在其自己的 api.ts 或 runtime-api.ts barrel 中组合通用 SDK 子路径,而核心在确实属于跨渠道需求时,应使用这些插件本地 barrel,或添加一个更窄的通用 SDK 契约。
生成的导出映射中仍然包含一小组内置插件辅助接口层,例如 plugin-sdk/feishu、plugin-sdk/feishu-setup、plugin-sdk/zalo、plugin-sdk/zalo-setup 和 plugin-sdk/matrix*。这些子路径仅用于内置插件维护和兼容性;它们有意未出现在下面的常用表格中,也不是新第三方插件的推荐导入路径。
子路径参考
最常用的子路径,按用途分组。包含 200+ 个子路径的生成完整列表位于scripts/lib/plugin-sdk-entrypoints.json。
保留的内置插件辅助子路径仍会出现在该生成列表中。除非某个文档页面明确将其标记为公共接口,否则应将它们视为实现细节/兼容性接口。
插件入口点
| 子路径 | 关键导出项 |
|---|---|
plugin-sdk/plugin-entry | definePluginEntry |
plugin-sdk/core | defineChannelPluginEntry, createChatChannelPlugin, createChannelPluginBase, defineSetupPluginEntry, buildChannelConfigSchema |
plugin-sdk/config-schema | OpenClawSchema |
plugin-sdk/provider-entry | defineSingleProviderPluginEntry |
渠道子路径
渠道子路径
提供商子路径
提供商子路径
鉴权与安全子路径
鉴权与安全子路径
| 子路径 | 关键导出项 |
|---|---|
plugin-sdk/command-auth | resolveControlCommandGate、命令注册表辅助工具、发送者授权辅助工具 |
plugin-sdk/approval-auth-runtime | 审批者解析和同聊天操作鉴权辅助工具 |
plugin-sdk/approval-client-runtime | 原生 exec 审批配置文件/过滤辅助工具 |
plugin-sdk/approval-delivery-runtime | 原生审批能力/投递适配器 |
plugin-sdk/approval-gateway-runtime | 共享审批 Gateway 网关解析辅助工具 |
plugin-sdk/approval-handler-adapter-runtime | 用于高频渠道入口点的轻量级原生审批适配器加载辅助工具 |
plugin-sdk/approval-handler-runtime | 更广泛的审批处理器运行时辅助工具;如果更窄的 adapter/gateway 接口已足够,应优先使用它们 |
plugin-sdk/approval-native-runtime | 原生审批目标 + 账户绑定辅助工具 |
plugin-sdk/approval-reply-runtime | exec/插件审批回复负载辅助工具 |
plugin-sdk/command-auth-native | 原生命令鉴权 + 原生会话目标辅助工具 |
plugin-sdk/command-detection | 共享命令检测辅助工具 |
plugin-sdk/command-surface | 命令体规范化和命令接口辅助工具 |
plugin-sdk/allow-from | formatAllowFromLowercase |
plugin-sdk/channel-secret-runtime | 用于渠道/插件密钥接口的更窄密钥契约收集辅助工具 |
plugin-sdk/secret-ref-runtime | 更窄的 coerceSecretRef 和 SecretRef 类型辅助工具,用于密钥契约/config 解析 |
plugin-sdk/security-runtime | 共享信任、私信门控、外部内容和密钥收集辅助工具 |
plugin-sdk/ssrf-policy | 主机允许列表和私有网络 SSRF 策略辅助工具 |
plugin-sdk/ssrf-runtime | pinned-dispatcher、受 SSRF 保护的 fetch,以及 SSRF 策略辅助工具 |
plugin-sdk/secret-input | 密钥输入解析辅助工具 |
plugin-sdk/webhook-ingress | Webhook 请求/目标辅助工具 |
plugin-sdk/webhook-request-guards | 请求体大小/超时辅助工具 |
运行时与存储子路径
运行时与存储子路径
能力与测试子路径
能力与测试子路径
| 子路径 | 关键导出项 |
|---|---|
plugin-sdk/media-runtime | 共享媒体获取/转换/存储辅助工具,以及媒体负载构建器 |
plugin-sdk/media-generation-runtime | 共享媒体生成功能的故障转移辅助工具、候选项选择和缺失模型提示信息 |
plugin-sdk/media-understanding | 媒体理解提供商类型,以及面向提供商的图像/音频辅助导出项 |
plugin-sdk/text-runtime | 共享文本/Markdown/日志辅助工具,例如去除对助手可见文本、Markdown 渲染/分块/表格辅助工具、脱敏辅助工具、directive-tag 辅助工具和安全文本工具 |
plugin-sdk/text-chunking | 出站文本分块辅助工具 |
plugin-sdk/speech | 语音提供商类型,以及面向提供商的 directive、注册表和校验辅助工具 |
plugin-sdk/speech-core | 共享语音提供商类型、注册表、directive 和规范化辅助工具 |
plugin-sdk/realtime-transcription | 实时转写提供商类型和注册表辅助工具 |
plugin-sdk/realtime-voice | 实时语音提供商类型和注册表辅助工具 |
plugin-sdk/image-generation | 图像生成提供商类型 |
plugin-sdk/image-generation-core | 共享图像生成类型、故障转移、鉴权和注册表辅助工具 |
plugin-sdk/music-generation | 音乐生成提供商/请求/结果类型 |
plugin-sdk/music-generation-core | 共享音乐生成类型、故障转移辅助工具、提供商查找和 model-ref 解析 |
plugin-sdk/video-generation | 视频生成提供商/请求/结果类型 |
plugin-sdk/video-generation-core | 共享视频生成类型、故障转移辅助工具、提供商查找和 model-ref 解析 |
plugin-sdk/webhook-targets | Webhook 目标注册表和路由安装辅助工具 |
plugin-sdk/webhook-path | Webhook 路径规范化辅助工具 |
plugin-sdk/web-media | 共享远程/本地媒体加载辅助工具 |
plugin-sdk/zod | 面向插件 SDK 使用者重新导出的 zod |
plugin-sdk/testing | installCommonResolveTargetErrorCases, shouldAckReaction |
Memory 子路径
Memory 子路径
| 子路径 | 关键导出项 |
|---|---|
plugin-sdk/memory-core | 内置 memory-core 辅助接口,用于管理器/config/文件/CLI 辅助工具 |
plugin-sdk/memory-core-engine-runtime | Memory 索引/搜索运行时门面 |
plugin-sdk/memory-core-host-engine-foundation | Memory host foundation engine 导出项 |
plugin-sdk/memory-core-host-engine-embeddings | Memory host embedding engine 导出项 |
plugin-sdk/memory-core-host-engine-qmd | Memory host QMD engine 导出项 |
plugin-sdk/memory-core-host-engine-storage | Memory host storage engine 导出项 |
plugin-sdk/memory-core-host-multimodal | Memory host multimodal 辅助工具 |
plugin-sdk/memory-core-host-query | Memory host query 辅助工具 |
plugin-sdk/memory-core-host-secret | Memory host secret 辅助工具 |
plugin-sdk/memory-core-host-events | Memory host 事件日志辅助工具 |
plugin-sdk/memory-core-host-status | Memory host 状态辅助工具 |
plugin-sdk/memory-core-host-runtime-cli | Memory host CLI 运行时辅助工具 |
plugin-sdk/memory-core-host-runtime-core | Memory host 核心运行时辅助工具 |
plugin-sdk/memory-core-host-runtime-files | Memory host 文件/运行时辅助工具 |
plugin-sdk/memory-host-core | 面向供应商中立的 Memory host 核心运行时辅助工具别名 |
plugin-sdk/memory-host-events | 面向供应商中立的 Memory host 事件日志辅助工具别名 |
plugin-sdk/memory-host-files | 面向供应商中立的 Memory host 文件/运行时辅助工具别名 |
plugin-sdk/memory-host-markdown | 面向 Memory 邻近插件的共享托管 Markdown 辅助工具 |
plugin-sdk/memory-host-search | 用于访问搜索管理器的活动 Memory 运行时门面 |
plugin-sdk/memory-host-status | 面向供应商中立的 Memory host 状态辅助工具别名 |
plugin-sdk/memory-lancedb | 内置 memory-lancedb 辅助接口 |
保留的内置辅助子路径
保留的内置辅助子路径
注册 API
register(api) 回调会收到一个 OpenClawPluginApi 对象,其中包含以下方法:
能力注册
| 方法 | 注册内容 |
|---|---|
api.registerProvider(...) | 文本推理(LLM) |
api.registerCliBackend(...) | 本地 CLI 推理后端 |
api.registerChannel(...) | 消息渠道 |
api.registerSpeechProvider(...) | 文本转语音 / STT 合成 |
api.registerRealtimeTranscriptionProvider(...) | 流式实时转写 |
api.registerRealtimeVoiceProvider(...) | 双向实时语音会话 |
api.registerMediaUnderstandingProvider(...) | 图像/音频/视频分析 |
api.registerImageGenerationProvider(...) | 图像生成 |
api.registerMusicGenerationProvider(...) | 音乐生成 |
api.registerVideoGenerationProvider(...) | 视频生成 |
api.registerWebFetchProvider(...) | Web 获取 / 抓取提供商 |
api.registerWebSearchProvider(...) | Web 搜索 |
工具与命令
| 方法 | 注册内容 |
|---|---|
api.registerTool(tool, opts?) | 智能体工具(必需或 { optional: true }) |
api.registerCommand(def) | 自定义命令(绕过 LLM) |
基础设施
| 方法 | 注册内容 |
|---|---|
api.registerHook(events, handler, opts?) | 事件 hook |
api.registerHttpRoute(params) | Gateway 网关 HTTP 端点 |
api.registerGatewayMethod(name, handler) | Gateway 网关 RPC 方法 |
api.registerCli(registrar, opts?) | CLI 子命令 |
api.registerService(service) | 后台服务 |
api.registerInteractiveHandler(registration) | 交互式处理器 |
api.registerMemoryPromptSupplement(builder) | 附加型 Memory 邻近提示区段 |
api.registerMemoryCorpusSupplement(adapter) | 附加型 Memory 搜索/读取语料库 |
config.*、exec.approvals.*、wizard.*、update.*)始终保持为 operator.admin,即使插件尝试分配更窄的 Gateway 网关方法作用域也是如此。对于插件自有方法,优先使用插件专用前缀。
CLI 注册元数据
api.registerCli(registrar, opts?) 接受两类顶层元数据:
commands:由注册器拥有的显式命令根descriptors:用于根 CLI 帮助、路由和延迟插件 CLI 注册的解析期命令描述符
descriptors。
commands。这种急切兼容路径仍受支持,但它不会安装由描述符支持的占位符以实现解析期延迟加载。
CLI 后端注册
api.registerCliBackend(...) 允许插件拥有本地 AI CLI 后端(如 codex-cli)的默认 config。
- 后端
id会成为模型引用中的提供商前缀,例如codex-cli/gpt-5。 - 后端
config使用与agents.defaults.cliBackends.<id>相同的结构。 - 用户 config 仍然优先生效。OpenClaw 会在运行 CLI 之前,将
agents.defaults.cliBackends.<id>合并到插件默认值之上。 - 当某个后端在合并后需要兼容性重写时,请使用
normalizeConfig(例如规范化旧版 flag 结构)。
独占槽位
| 方法 | 注册内容 |
|---|---|
api.registerContextEngine(id, factory) | 上下文引擎(同一时间仅一个处于活动状态)。assemble() 回调会收到 availableTools 和 citationsMode,以便引擎定制提示补充内容。 |
api.registerMemoryCapability(capability) | 统一的 Memory 能力 |
api.registerMemoryPromptSection(builder) | Memory 提示区段构建器 |
api.registerMemoryFlushPlan(resolver) | Memory flush plan 解析器 |
api.registerMemoryRuntime(runtime) | Memory 运行时适配器 |
Memory embedding 适配器
| 方法 | 注册内容 |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | 活动插件的 Memory embedding 适配器 |
registerMemoryCapability是首选的独占 Memory 插件 API。registerMemoryCapability也可以暴露publicArtifacts.listArtifacts(...),这样配套插件就可以通过openclaw/plugin-sdk/memory-host-core使用导出的 Memory artifact,而不是深入某个特定 Memory 插件的私有布局。registerMemoryPromptSection、registerMemoryFlushPlan和registerMemoryRuntime是兼容旧版的独占 Memory 插件 API。registerMemoryEmbeddingProvider允许活动 Memory 插件注册一个或多个 embedding 适配器 ID(例如openai、gemini或自定义的插件定义 ID)。- 用户 config,例如
agents.defaults.memorySearch.provider和agents.defaults.memorySearch.fallback,会根据这些已注册的适配器 ID 进行解析。
事件与生命周期
| 方法 | 作用 |
|---|---|
api.on(hookName, handler, opts?) | 类型化生命周期 hook |
api.onConversationBindingResolved(handler) | 会话绑定回调 |
Hook 决策语义
before_tool_call:返回{ block: true }为终局决定。一旦任一处理器设置它,将跳过更低优先级的处理器。before_tool_call:返回{ block: false }视为未作决定(与省略block相同),而不是覆盖。before_install:返回{ block: true }为终局决定。一旦任一处理器设置它,将跳过更低优先级的处理器。before_install:返回{ block: false }视为未作决定(与省略block相同),而不是覆盖。reply_dispatch:返回{ handled: true, ... }为终局决定。一旦任一处理器声明已分发,将跳过更低优先级的处理器和默认模型分发路径。message_sending:返回{ cancel: true }为终局决定。一旦任一处理器设置它,将跳过更低优先级的处理器。message_sending:返回{ cancel: false }视为未作决定(与省略cancel相同),而不是覆盖。
API 对象字段
| 字段 | 类型 | 说明 |
|---|---|---|
api.id | string | 插件 ID |
api.name | string | 显示名称 |
api.version | string? | 插件版本(可选) |
api.description | string? | 插件描述(可选) |
api.source | string | 插件源路径 |
api.rootDir | string? | 插件根目录(可选) |
api.config | OpenClawConfig | 当前配置快照(可用时为活动的内存中运行时快照) |
api.pluginConfig | Record<string, unknown> | 来自 plugins.entries.<id>.config 的插件专用配置 |
api.runtime | PluginRuntime | 运行时辅助工具 |
api.logger | PluginLogger | 有作用域的 logger(debug、info、warn、error) |
api.registrationMode | PluginRegistrationMode | 当前加载模式;"setup-runtime" 是轻量级的完整入口启动前/设置阶段窗口 |
api.resolvePath(input) | (string) => string | 解析相对于插件根目录的路径 |
内部模块约定
在你的插件内部,请使用本地 barrel 文件进行内部导入:api.ts、runtime-api.ts、index.ts、setup-entry.ts 以及类似的公共入口文件)现在在 OpenClaw 已运行时会优先使用活动运行时配置快照。如果运行时快照尚不存在,它们会回退到磁盘上解析得到的配置文件。
当某个辅助工具本质上是提供商专用、且尚不适合放入通用 SDK 子路径时,提供商插件也可以暴露一个更窄的插件本地契约 barrel。当前内置示例:Anthropic 提供商将其 Claude 流辅助工具保留在自己的公共 api.ts / contract-api.ts 接口中,而不是将 Anthropic beta-header 和 service_tier 逻辑提升到通用 plugin-sdk/* 契约中。
其他当前内置示例:
@openclaw/openai-provider:api.ts导出提供商构建器、默认模型辅助工具和实时提供商构建器@openclaw/openrouter-provider:api.ts导出提供商构建器以及新手引导/config 辅助工具