Skip to content

Plugins 插件系统详解 ​

前置知识:本章节面向具备 TypeScript/Node.js 基础、了解模块化系统和事件驱动编程的开发者。 目标读者:希望开发自定义插件扩展 OpenClaw 功能的开发者。 维护状态:本文档基于 OpenClaw v2026.4+ 源码分析。


1. 插件系统架构 ​

1.1 插件在架构中的位置 ​

1.2 核心文件 ​

文件职责
plugins/registry.ts插件注册表
plugins/runtime.ts插件运行时
plugins/loader.ts插件加载器
plugins/bundle-*.ts捆绑插件
plugins/discovery.ts插件发现

2. 插件类型 ​

2.1 插件类型体系 ​

2.2 各类型说明 ​

类型说明示例
Channel通讯平台接入飞书、微信、Telegram
Tool功能扩展exec、browser
Memory记忆存储sqlite-vec、embedding
ProviderAI 模型OpenAI、Anthropic
Hook生命周期拦截自定义钩子

3. 插件注册机制 ​

3.1 插件发现流程 ​

3.2 插件配置 ​

json5
{
  plugins: {
    // 启用/禁用插件
    enabled: ["channel:feishu", "tool:exec"],
    
    // 插件配置
    configs: {
      "channel:feishu": {
        // 通道特定配置
      }
    }
  }
}

4. Channel 插件详解 ​

4.1 通道插件结构 ​

4.2 内置通道 ​

通道源码位置
飞书extensions/openclaw-channel-feishu/
微信extensions/openclaw-channel-wechat/
Telegramextensions/openclaw-channel-telegram/
WhatsAppextensions/openclaw-channel-whatsapp/
Discordextensions/openclaw-channel-discord/

4.3 通道配置示例 ​

json5
{
  channels: {
    feishu: {
      enabled: true,
      connectionMode: "websocket",
      accounts: {
        default: {
          appId: "cli_xxx",
          appSecret: "xxx"
        }
      }
    }
  }
}

5. 插件生命周期 ​

5.1 生命周期状态机 ​

5.2 生命周期钩子 ​

钩子时机用途
onStart启动时初始化连接
onMessage收到消息处理消息
onStop关闭时清理资源
onConfigChange配置变更重新初始化

6. 插件安全 ​

6.1 安全机制 ​

6.2 安全扫描项 ​

  • 敏感权限检查
  • 恶意代码检测
  • 依赖安全审计
  • 签名验证

7. 插件市场 (ClaWHub) ​

7.1 ClaWHub 功能 ​

7.2 使用 ClaWHub ​

bash
# 搜索插件
openclaw plugins search <keyword>

# 安装插件
openclaw plugins install <plugin-name>

# 更新插件
openclaw plugins update

# 卸载插件
openclaw plugins uninstall <plugin-name>

8. 开发自定义插件 ​

8.1 插件项目结构 ​

my-plugin/
├── package.json
├── manifest.json5       # 插件清单
├── channel-entry.ts    # 通道入口 (Channel 插件)
└── src/
    └── index.ts        # 主要逻辑

8.2 manifest.json5 示例 ​

json5
{
  id: "my-plugin",
  name: "My Plugin",
  version: "1.0.0",
  description: "插件描述",
  
  // 插件类型
  capabilities: ["channel", "tool"],
  
  // 入口文件
  entry: "./channel-entry.ts",
  
  // 权限需求
  permissions: ["exec", "file:read"]
}

8.3 插件入口示例 ​

typescript
import type { ChannelPlugin } from 'openclaw';

export const myChannelPlugin: ChannelPlugin = {
  id: 'my-channel',
  name: 'My Channel',
  
  async onStart(runtime) {
    // 初始化连接
    await connectToService();
  },
  
  async onMessage(event) {
    // 处理消息
    return { type: 'text', content: 'response' };
  },
  
  async onStop() {
    // 清理资源
    await disconnect();
  }
};

9. 调试与排错 ​

9.1 常见问题 ​

问题原因解决方案
插件无法加载依赖缺失运行 npm install
通道无法连接凭据错误检查配置文件
插件冲突版本不兼容禁用冲突插件

9.2 调试命令 ​

bash
# 列出已安装插件
openclaw plugins list

# 查看插件状态
openclaw plugins status <plugin-id>

# 启用/禁用插件
openclaw plugins enable <plugin-id>
openclaw plugins disable <plugin-id>

# 查看插件日志
openclaw gateway --verbose | grep <plugin-id>

10. 延伸阅读 ​

为前端工程师打造 · 基于 VitePress 构建