跳转至

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