插件 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 + 运行时
- 外部插件可以在无核心源码访问的情况下开发和更新