defineChannelPluginEntry
用于将 definePluginEntry 包装为通道特定接线和按模式门控回调的入口辅助函数。属于 插件入口点 参考的一部分。
defineChannelPluginEntry¶
导入: openclaw/plugin-sdk/channel-core
使用通道特定接线包装 definePluginEntry:它会自动调用 api.registerChannel({ plugin }),暴露一个可选的根帮助 CLI 元数据接缝,并根据注册模式门控能力回调和完整运行时回调。
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
export default defineChannelPluginEntry({
id: "my-channel",
name: "My Channel",
description: "Short summary",
plugin: myChannelPlugin,
setRuntime: setMyRuntime,
registerCliMetadata(api) {
api.registerCli(/* ... */);
},
registerFull(api) {
api.registerGatewayMethod(/* ... */);
},
registerCapabilities(api) {
api.registerTranscriptSourceProvider(/* ... */);
},
});
| 字段 | 类型 | 必填 | 默认值 |
|---|---|---|---|
id |
string |
是 | - |
name |
string |
是 | - |
description |
string |
是 | - |
plugin |
ChannelPlugin |
是 | - |
configSchema |
OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema |
否 | 空对象模式 |
setRuntime |
(runtime: PluginRuntime) => void |
否 | - |
registerCliMetadata |
(api: OpenClawPluginApi) => void |
否 | - |
registerFull |
(api: OpenClawPluginApi) => void |
否 | - |
registerCapabilities |
(api: OpenClawPluginApi) => void |
否 | - |
回调会按注册模式运行(完整表格见 注册模式):
setRuntime在除"cli-metadata"和"tool-discovery"之外的所有模式中运行。在此处存储运行时引用,通常通过createPluginRuntimeStore完成。registerCliMetadata在"cli-metadata"、"discovery"和"full"中运行。将其作为通道自有 CLI 描述符的规范位置,以便根帮助保持非激活状态,发现快照包含静态命令元数据,并且常规 CLI 注册与完整插件加载保持兼容。registerFull仅在"full"和"tool-discovery"中运行。对于"tool-discovery",它会 替代 通道注册运行:OpenClaw 会完全跳过registerChannel/setRuntime,并先调用完整运行时回调,再调用能力回调。请将工具注册保留在registerFull中,将能力提供器保留在registerCapabilities中。registerCapabilities在"discovery"、"full"和"tool-discovery"中运行。在此处注册无副作用的已声明提供器,以便只读能力发现能够在不启动套接字、客户端、工作进程或服务的情况下找到它们。- 发现注册是非激活的,但不是免导入的:OpenClaw 可能会评估受信任的插件入口和通道插件模块以构建快照。请保持顶层导入无副作用,并将套接字、客户端、工作进程和服务放在仅
"full"的路径之后。 - 与
definePluginEntry类似,configSchema可以是惰性工厂;OpenClaw 会在首次访问时记忆化已解析的模式。
CLI 注册:
- 对于希望懒加载且不会从根 CLI 解析树中消失的插件自有根 CLI 命令,请使用
api.registerCli(..., { descriptors: [...] })。描述符名称必须匹配字母、数字、连字符和下划线,并且以字母或数字开头;OpenClaw 会拒绝其他形式,并在渲染帮助之前从描述中移除终端控制序列。请覆盖注册器暴露的每个顶层命令根,并在插件清单的cliCommands字段中声明相同的名称、描述和子命令标记,以便根帮助不会导入插件代码。仅使用commands会保留在立即加载兼容路径上。 - 根描述符可以为 JSON、JSONL 或其他并非仅由
--json选择的机器可读 stdout 模式定义同步、纯machineOutput({ argv, stdoutIsTTY })解析器。请使用openclaw/plugin-sdk/cli-argv中的getRootOptionAwareCommandPath解析命令标记。请将描述符保留在轻量级的插件本地模块中,并从cli-metadata.ts和完整注册中复用;不要导入运行时桶来构建元数据。会议运行时外壳通过cli.descriptor接受该描述符。嵌套描述符不暴露machineOutput。 - 对于配对节点功能命令,请使用
api.registerNodeCliFeature(...),以便它们位于openclaw nodes下(等效于registerCli(registrar, { parentPath: ["nodes"], ... }))。 - 对于其他嵌套插件命令,请添加
parentPath,并在传递给注册器的program对象上注册命令;OpenClaw 会在调用插件之前将其解析为父命令。 - 对于通道插件,请从
registerCliMetadata注册 CLI 描述符,并让registerFull专注于仅运行时的工作。 - 如果
registerFull还注册网关 RPC 方法,请让它们使用插件特定前缀。保留的核心管理命名空间(config.*、exec.approvals.*、wizard.*、update.*)始终会强制转换为operator.admin。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw