OpenClaw 微信插件 v2.0.1 → v2.1.8 对比分析报告
> 生成时间:2026-04-12
> 包名:@tencent-weixin/openclaw-weixin
> 对比版本:v2.0.1 → v2.1.8(跨 7 个小版本)
📊 版本概览
| 项目 | v2.0.1 | v2.1.8 |
|---|---|---|
| 发布时间 | 2026-03-22 | 2026-04-07+ |
| 包体积 | 52.1 kB | 56.2 kB (+7.9%) |
| 解压体积 | 182.5 kB | 196.9 kB (+7.9%) |
| 文件数 | 42 | 42(2 删 2 增) |
| peerDependencies | 有 (openclaw >=2026.3.22) | **移除** |
| 新增字段 | - | `ilink_appid: "bot"` |
🆕 新功能
1. StreamingMarkdownFilter — Markdown 从零支持到部分支持 ⭐⭐⭐
最大亮点。 v2.0.1 中外发文本使用 markdownToPlainText 整段剥离所有 Markdown 语法,导致 AI 回复中的加粗、代码块、表格等格式全部丢失,用户收到纯文本。
v2.1.3 引入了全新的 StreamingMarkdownFilter(~180 行状态机),支持:
| 语法 | 处理方式 | ||
|---|---|---|---|
| 代码块 (\`\`\`) | ✅ 原样保留 | ||
| 行内代码 (\`) | ✅ 原样保留 | ||
| 表格 (\ | ...\ | ) | ✅ 原样保留 |
| 水平线 (---, ***, ___) | ✅ 原样保留 | ||
| 粗体 (**) | ✅ 原样保留 | ||
| 斜体包裹非CJK内容 | ✅ 原样保留 | ||
| 斜体/粗体包裹CJK内容 | ⚠️ 剥离标记,保留文字 | ||
| H5/H6 标题 | ⚠️ 剥离标记 | ||
| 图片 () | ❌ 完全移除 | ||
| 删除线 (~~) | ⚠️ 剥离标记 |
采用流式设计(feed / flush),最小缓冲区,适合逐块 deliver 场景。
2. iLink 协议头 — 新增 App-ID 和 Client-Version
v2.1.x 在 API 请求头中新增了:
iLink-App-Id:从package.json的ilink_appid字段读取iLink-App-ClientVersion:版本号编码为 uint32(0x00MMNNPP格式)
这意味着腾讯后端现在通过这些头识别客户端类型和版本,可能为后续不同渠道(公众号/小程序/企微)的差异化处理做准备。
3. 扫码登录 IDC 重定向
新增 scaned_but_redirect 状态和 currentApiBaseUrl 字段,支持扫码后服务器端 IDC 切换。QR 码请求改用固定 baseUrl https://ilinkai.weixin.qq.com,不再依赖配置中的动态路由。
4. CDN 上传支持 upload_full_url
上传接口新增 upload_full_url 字段,与原有的 upload_param 并存。当服务端返回完整 URL 时可直接使用,提升上传兼容性。
🔧 Bug 修复
1. 插件注册重入问题(v2.1.7)⭐⭐
严重问题修复。 v2.0.1 中 channel.ts 在模块顶层 import 了 monitorWeixinProvider,这会在插件注册阶段拉起 monitor → process-message → command-auth 依赖链,导致 plugin/provider registry 重入。
v2.1.7 改为在 startAccount 内部 await import(...) 懒加载,彻底消除注册阶段副作用。
同理,process-message.ts 中的 resolveSenderCommandAuthorizationWithRuntime 和 resolveDirectDmAuthorizationOutcome 也改为懒加载。
2. dangerous code pattern 警告(v2.1.2)
在 OpenClaw 2026.3.31+ 上安装插件时不再触发危险代码模式提示。
3. 媒体下载兼容性增强
media-download.ts 新增 full_url 备选路径:当 encrypt_query_param 为空但 full_url 存在时,仍可下载媒体文件。这修复了某些场景下图片/文件/语音无法下载的问题。
🔄 架构变化
1. 移除 peerDependencies
v2.1.x 不再声明 peerDependencies: { openclaw: ">=2026.3.22" }。兼容性检查改由 compat.ts 运行时判断。好处:减少 npm 安装时的依赖冲突警告。
2. 移除 CLI 子命令
v2.0.1 有独立的 openclaw-weixin CLI 子命令(src/log-upload.ts),v2.1.2 完全移除,统一使用宿主的 openclaw plugins uninstall 流程。
3. 配置刷新机制重写
v2.0.1:登录后写入空 accounts: {} 占位符触发配置重载。
v2.1.2:改为写入 channelConfigUpdatedAt(ISO 8601 时间戳),每次登录更新,让网关从磁盘重新加载配置。
4. 块流式输出策略变化
process-message.ts 中 disableBlockStreaming 从 false 改为 true。这意味着微信渠道禁用了 OpenClaw 的块流式输出,可能是为了配合 StreamingMarkdownFilter 的逐块处理。
5. MEDIA 指令新约束
system prompt 新增规则:MEDIA: 标签必须独占一行,不能与其它文本同行。
📁 文件变更汇总
| 变更 | 文件 |
|---|---|
| **新增** | `src/messaging/markdown-filter.ts` |
| **删除** | `src/log-upload.ts` |
| **重大修改** | `src/channel.ts`, `src/api/api.ts`, `src/messaging/process-message.ts`, `src/auth/accounts.ts`, `src/auth/login-qr.ts` |
| **中等修改** | `src/media/media-download.ts`, `src/cdn/upload.ts`, `src/cdn/cdn-upload.ts`, `src/cdn/pic-decrypt.ts`, `src/config/config-schema.ts` |
| **轻微修改** | `src/compat.ts`, `index.ts`, `openclaw.plugin.json`, `package.json` |
⚠️ Breaking Changes
1. CLI 子命令移除:openclaw openclaw-weixin logs-upload 不再可用,需迁移到宿主命令
2. 配置格式变化:logUploadUrl 字段被 channelConfigUpdatedAt 替代
3. 块流式输出禁用:回复行为从流式变为非流式
🏆 综合评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 功能增量 | ⭐⭐⭐⭐ | Markdown 部分支持是质的飞跃 |
| 稳定性 | ⭐⭐⭐⭐⭐ | 重入问题修复、媒体下载兼容性提升 |
| 架构质量 | ⭐⭐⭐⭐ | 懒加载、协议头规范、CLI 去耦 |
| 向后兼容 | ⭐⭐⭐ | 有 3 个 Breaking Change,但影响面小 |
| **总评** | **⭐⭐⭐⭐ (8/10)** | **扎实的迭代版本,Markdown 支持是杀手级改进** |
🔗 原始链接
- npm 包:https://www.npmjs.com/package/@tencent-weixin/openclaw-weixin
- v2.0.1 分析报告:https://temp.jaylab.io/openclaw-weixin-plugin-2.0.1-upgrade
- GitHub(推测):https://github.com/Tencent-Weixin/openclaw-weixin
💡 升级建议
1. 强烈建议升级。Markdown 部分支持显著改善用户体验,插件注册重入是严重 bug。
2. 如果使用了 openclaw openclaw-weixin logs-upload 命令,需要迁移替代方案。
3. 注意 disableBlockStreaming: true 可能影响回复速度感知(用户可能感觉回复变慢)。
4. 建议在升级前备份 openclaw.json。