插件 SDK + 运行时重构计划

目标:每个消息连接器都是使用统一稳定 API 的插件(捆绑或外部)。插件不直接从 src/** 导入。所有依赖都通过 SDK 或运行时。

为什么现在做

当前连接器混合多种模式:直接核心导入、仅 dist 的桥接、自定义辅助。这让升级脆弱,阻碍了干净的外部插件表面。

目标架构(两层)

1) 插件 SDK(编译时,稳定,可发布)

范围:类型、辅助和配置工具。无运行时状态,无副作用。内容包括类型定义、配置辅助、配对辅助、引导辅助、工具参数辅助、文档链接辅助。作为 openclaw/plugin-sdk 发布,semver 加显式稳定性保证。

2) 插件运行时(执行表面,注入)

范围:涉及核心运行时行为的所有内容。通过 OpenClawPluginApi.runtime 访问。包括频道文本处理、回复 dispatch、路由、配对、媒体、mention、群组策略、防抖、命令授权、日志和状态等子表面。

运行时是访问核心行为的唯一方式。SDK 有意小而稳定。每个运行时方法映射到现有的核心实现(无重复)。

迁移计划(分阶段,安全)

  • 阶段 0:脚手架 — 引入 SDK,添加 api.runtime
  • 阶段 1:桥接清理 — 用 api.runtime 替换每扩展的 core-bridge.ts
  • 阶段 2:轻量直接导入插件 — 迁移 Matrix
  • 阶段 3:重量直接导入插件 — 迁移 MS Teams
  • 阶段 4:iMessage 插件化
  • 阶段 5:强制 — 添加 lint 规则禁止 extensions/**src/** 导入

成功标准

  • 所有频道连接器都是使用 SDK + 运行时的插件
  • extensions/** 没有从 src/** 的导入
  • 新连接器模板只依赖 SDK + 运行时
  • 外部插件可以在无核心源码访问的情况下开发和更新