【微信openclaw修复】使用新版本openclaw,对openclaw-weixin在openclaw2026.3.23-2版本的修复
- 内容介绍
- 文章标签
- 相关推荐
openclaw新版本的升级,重构了plugin sdk:
openclaw/plugin-sdk/channel-config-schemaopenclaw/plugin-sdk/account-idopenclaw/plugin-sdk/infra-runtimeopenclaw/plugin-sdk/channel-runtimeopenclaw/plugin-sdk/command-authopenclaw/plugin-sdk/text-runtimeopenclaw/plugin-sdk/config-runtime
查看插件入口 index.ts,发现它一上来就导入:
import { buildChannelConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
再查看宿主 openclaw 的 package exports,确认当前运行环境下并没有正确暴露这个子路径。
修复提示词
为了方便,直接交给AI修改
# 修复提示词:OpenClaw 微信插件 `openclaw-weixin` Plugin SDK 兼容性修复
你现在是在一台安装了 OpenClaw 的 Linux 机器上,目标是修复微信插件 `@tencent-weixin/openclaw-weixin`,使其能够:
1. 正常加载
2. 扫码登录成功
3. 启动微信入站监听
4. 正常接收并回复微信消息
5. 日志写入 OpenClaw 新版本兼容的主日志文件,能通过 `openclaw logs --follow` 查看
---
## 一、背景与问题特征
这类机器上常见的现象是:
- `openclaw-weixin` 已安装、已启用
- `openclaw status --deep` 里看起来 channel 存在
- 微信扫码登录似乎成功
- 但插件启动时报一串类似错误:
```text
Cannot find module 'openclaw/plugin-sdk/channel-config-schema'
Cannot find module 'openclaw/plugin-sdk/account-id'
Cannot find module 'openclaw/plugin-sdk/infra-runtime'
Cannot find module 'openclaw/plugin-sdk/channel-runtime'
Cannot find module 'openclaw/plugin-sdk/command-auth'
Cannot find module 'openclaw/plugin-sdk/text-runtime'
Cannot find module 'openclaw/plugin-sdk/config-runtime'
```
注意:
- 宿主 `openclaw` 版本可能已经是最新
- 问题不是“版本太旧”
- 而是 **插件源码 import 的多个 `openclaw/plugin-sdk/*` 子路径,在当前宿主插件加载链中无法被正确解析**
- 宿主包内部可能存在对应 dist 文件,但插件直接按包子路径 import 会失败
---
## 二、修复原则
### 目标
不是简单降级插件,而是做一组**本地兼容补丁**,使插件在当前宿主上正常运行。
### 原则
1. **优先复用宿主真实实现**
- 例如宿主 `dist/plugin-sdk/infra-runtime.js`
- 例如宿主 `dist/plugin-sdk/config-runtime.js`
2. **如果宿主真实实现无法直接调用,再 fallback 本地兼容实现**
3. **路径、日志、配置写回、文件锁** 尽量对齐 OpenClaw 新版本行为
4. **高风险 SDK 子路径**(如 command-auth / text-runtime / account-id)允许保留本地兼容实现,避免再次把插件搞挂
---
## 三、需要修改的文件
默认插件路径通常是:
```bash
~/.openclaw/extensions/openclaw-weixin
```
你需要检查并修改这些文件:
### 已修改/需要修改的文件
- `index.ts`
- `src/channel.ts`
- `src/auth/accounts.ts`
- `src/auth/pairing.ts`
- `src/util/logger.ts`
- `src/messaging/process-message.ts`
- `src/messaging/send.ts`
- `src/log-upload.ts`
### 需要新增的兼容文件
- `src/util/account-id-compat.ts`
- `src/util/command-auth-compat.ts`
- `src/util/text-runtime-compat.ts`
- `src/util/openclaw-host-compat.ts`
### 还要检查宿主配置文件
- `~/.openclaw/openclaw.json`
---
## 四、具体修改要求
### 1. 修改 `index.ts`
#### 问题
不要再依赖:
```ts
openclaw/plugin-sdk/channel-config-schema
```
#### 修改要求
删除:
```ts
import { buildChannelConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
```
把:
```ts
configSchema: buildChannelConfigSchema(WeixinConfigSchema)
```
改成:
```ts
configSchema: WeixinConfigSchema
```
---
### 2. 新增 `src/util/account-id-compat.ts`
添加一个本地账号 ID 兼容函数:
```ts
export function normalizeAccountId(value: string): string {
return value.trim().replace(/@/g, "-").replace(/\./g, "-");
}
```
#### 用途
替代:
```ts
openclaw/plugin-sdk/account-id
```
---
### 3. 新增 `src/util/command-auth-compat.ts`
实现一个最小可用版本,至少提供:
- `resolveSenderCommandAuthorizationWithRuntime`
- `resolveDirectDmAuthorizationOutcome`
核心逻辑要求:
- 读取 `allowFrom`
- 判断 sender 是否授权
- 只有 `/命令` 才视为 commandAuthorized
- `dmPolicy = pairing` 且未授权时返回 `unauthorized`
示意逻辑:
```ts
type DmPolicy = "allow" | "pairing" | "disabled" | string;
export async function resolveSenderCommandAuthorizationWithRuntime(...) {
...
}
export function resolveDirectDmAuthorizationOutcome(...) {
...
}
```
---
### 4. 新增 `src/util/text-runtime-compat.ts`
实现一个轻量 `stripMarkdown(text: string)`,至少能去掉:
- 行内代码
- 标题符号
- 粗体/斜体
- 引用
- 列表符号
用于替代:
```ts
openclaw/plugin-sdk/text-runtime
```
---
### 5. 新增 `src/util/openclaw-host-compat.ts`
这是关键文件。
这个文件要负责提供:
#### (1) `resolvePreferredOpenClawTmpDirCompat()`
要求:
- 尽量按宿主 OpenClaw `tmp-openclaw-dir` 真实逻辑实现
- 优先 `/tmp/openclaw`
- 如果不安全或不可写,再 fallback 到 `tmpdir()/openclaw[-uid]`
- 权限尽量使用 0700
- 行为尽量对齐宿主 `resolvePreferredOpenClawTmpDir`
#### (2) `withFileLockCompat(filePath, options, fn)`
要求:
- 优先动态 import 宿主真实实现:
```ts
dist/plugin-sdk/infra-runtime.js
```
- 调用宿主的 `withFileLock`
- 如果加载失败,再直接执行 `fn()`
#### (3) `loadConfigCompat()` / `writeConfigFileCompat()`
要求:
- 优先动态 import 宿主真实实现:
```ts
dist/plugin-sdk/config-runtime.js
```
- 调用宿主:
- `loadConfig`
- `writeConfigFile`
- 如果失败,再 fallback 读写:
```bash
~/.openclaw/openclaw.json
```
#### 技术要求
建议用:
```ts
createRequire(import.meta.url)
pathToFileURL(...)
```
来定位宿主 `openclaw/package.json`,再拼出 dist 文件路径。
---
### 6. 修改 `src/channel.ts`
#### 修改要求
1. 不再使用:
```ts
openclaw/plugin-sdk/account-id
```
改成:
```ts
./util/account-id-compat.js
```
2. 不再使用:
```ts
openclaw/plugin-sdk/infra-runtime
```
媒体临时目录改成:
```ts
path.join(resolvePreferredOpenClawTmpDirCompat(), "weixin/media/outbound-temp")
```
---
### 7. 修改 `src/messaging/process-message.ts`
#### 修改要求
1. 不再使用:
```ts
openclaw/plugin-sdk/channel-runtime
```
如果只用到 `createTypingCallbacks`,就在本地实现一个简化版
2. 不再使用:
```ts
openclaw/plugin-sdk/command-auth
```
改为:
```ts
../util/command-auth-compat.js
```
3. 不再使用:
```ts
openclaw/plugin-sdk/infra-runtime
```
媒体临时目录改成:
```ts
path.join(resolvePreferredOpenClawTmpDirCompat(), "weixin/media/outbound-temp")
```
---
### 8. 修改 `src/messaging/send.ts`
#### 修改要求
不再使用:
```ts
openclaw/plugin-sdk/text-runtime
```
改为:
```ts
../util/text-runtime-compat.js
```
保持 `markdownToPlainText()` 逻辑不变,只替换 `stripMarkdown` 来源。
---
### 9. 修改 `src/util/logger.ts`
#### 目标
让插件日志写入 **OpenClaw 新版本兼容主日志文件**,使其能通过:
```bash
openclaw logs --follow
```
查看。
#### 修改要求
1. 日志目录用:
```ts
resolvePreferredOpenClawTmpDirCompat()
```
2. 日志文件名使用固定文件:
```ts
openclaw.log
```
不要再使用按天命名:
```ts
openclaw-YYYY-MM-DD.log
```
#### 目标效果
插件日志最终写入类似:
```bash
/tmp/openclaw/openclaw.log
```
并与 OpenClaw 新版本主日志规则一致。
---
### 10. 修改 `src/log-upload.ts`
#### 修改要求
1. 日志目录改成:
```ts
resolvePreferredOpenClawTmpDirCompat()
```
2. 默认日志文件名改成:
```ts
openclaw.log
```
3. `uninstall` 子命令里不要再直接 import:
```ts
openclaw/plugin-sdk/config-runtime
```
改用:
- `loadConfigCompat()`
- `writeConfigFileCompat()`
4. 保留兼容:
- 如果用户传 `YYYYMMDD`
- 或 `YYYYMMDDHH`
- 也可以映射到 `openclaw.log`
---
### 11. 修改 `src/auth/pairing.ts`
#### 修改要求
1. 不再直接 import:
```ts
openclaw/plugin-sdk/infra-runtime
```
2. 改为使用:
```ts
withFileLockCompat(...)
```
3. 保留 allowFrom 文件逻辑,写入:
- `openclaw-weixin-<accountId>-allowFrom.json`
4. 如果宿主真实 `withFileLock` 加载成功,则优先使用宿主实现
5. 只有加载失败时才 fallback 到无锁直接写
---
### 12. 修改 `src/auth/accounts.ts`
这是关键。
#### 修改要求
1. 账号 ID 规范化改用:
```ts
../util/account-id-compat.js
```
2. 登录成功后的 `triggerWeixinChannelReload()`:
- 不要再直接依赖:
```ts
openclaw/plugin-sdk/config-runtime
```
- 改成使用:
- `loadConfigCompat()`
- `writeConfigFileCompat()`
#### 必须保证
扫码登录成功后,如果 `channels.openclaw-weixin` 缺失,就自动写回:
```json
"channels": {
"openclaw-weixin": {
"enabled": true,
"accounts": {}
}
}
```
否则即使 token 保存成功,gateway 也不会真正启动微信监听。
---
### 13. 检查 `~/.openclaw/openclaw.json`
确认这些配置存在:
#### 插件已启用
```json
"plugins": {
"entries": {
"openclaw-weixin": {
"enabled": true
}
}
}
```
#### channels 里有 openclaw-weixin
```json
"channels": {
"openclaw-weixin": {
"enabled": true,
"accounts": {}
}
}
```
如果缺失,需要补上。
---
## 五、修复后的验证步骤
修改完成后,按这个顺序验证。
### 1. 重启 gateway
```bash
openclaw gateway restart
```
### 2. 看深度状态
```bash
openclaw status --deep
```
确认:
- `openclaw-weixin` 存在
- `accounts 1/1` 或相应账号数
- 没有新的插件加载错误
### 3. 查看日志
```bash
openclaw logs --follow
```
### 4. 微信发测试消息
发:
```text
你好
```
### 5. 预期日志
应看到类似:
```text
starting weixin webhook
waiting for Weixin runtime...
Weixin runtime acquired
Monitor started
inbound message
outbound: text sent OK
```
---
## 六、判断修复成功的标准
满足以下全部条件即视为修复成功:
1. 插件不再报 `Cannot find module 'openclaw/plugin-sdk/...'`
2. `openclaw status --deep` 中微信 channel 正常
3. `openclaw logs --follow` 能看到微信插件日志
4. 微信入站消息可被 OpenClaw 收到
5. OpenClaw 可以正常回复微信消息
---
## 七、注意事项
1. 不要为了省事直接把所有逻辑都改成 `/tmp`
- 路径、日志、配置写回、文件锁应尽量对齐宿主真实实现
2. 不要优先降级插件,除非确认本地补丁不可控
- 这里优先做源码兼容修复
3. 保留本地 compat 文件是合理的
- 尤其是:
- `account-id-compat`
- `command-auth-compat`
- `text-runtime-compat`
4. 如果插件更新/重装,这些改动可能会丢失
- 建议后续导出 patch
---
## 八、最终目标
修复后,插件应实现:
- 正常加载
- 正常扫码登录
- 自动写回 channel 配置
- gateway 自动拉起监听
- 正常轮询微信消息
- 正常回复
- 日志进入 OpenClaw 主日志文件,可被 `openclaw logs --follow` 直接查看
---
如果你是 AI coding agent,请直接:
1. 读取上述文件
2. 对照是否存在相关 import
3. 执行最小必要改动
4. 完成后列出修改的文件与关键 diff
5. 指导用户执行:
```bash
openclaw gateway restart
openclaw status --deep
openclaw logs --follow
```
结果验证
image430×909 94.4 KB
网友解答:--【壹】--:
佬友牛逼,感谢
--【贰】--:
感谢佬 nb
--【叁】--:
非常好用
--【肆】--:
微信插件那边卸载了重新安装新版本似乎也可以了
--【伍】--:
牛逼 我说咋一直报错呢
--【陆】--:
感谢佬!
--【柒】--:
正需要,谢谢佬友
--【捌】--:
牛逼,解决了
--【玖】--:
666感谢佬
--【拾】--:
昨天亲测有效
npm -g install openclaw@2026.3.13
--【拾壹】--:
emmm重新安装插件现在应该也能解决了。。。
openclaw新版本的升级,重构了plugin sdk:
openclaw/plugin-sdk/channel-config-schemaopenclaw/plugin-sdk/account-idopenclaw/plugin-sdk/infra-runtimeopenclaw/plugin-sdk/channel-runtimeopenclaw/plugin-sdk/command-authopenclaw/plugin-sdk/text-runtimeopenclaw/plugin-sdk/config-runtime
查看插件入口 index.ts,发现它一上来就导入:
import { buildChannelConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
再查看宿主 openclaw 的 package exports,确认当前运行环境下并没有正确暴露这个子路径。
修复提示词
为了方便,直接交给AI修改
# 修复提示词:OpenClaw 微信插件 `openclaw-weixin` Plugin SDK 兼容性修复
你现在是在一台安装了 OpenClaw 的 Linux 机器上,目标是修复微信插件 `@tencent-weixin/openclaw-weixin`,使其能够:
1. 正常加载
2. 扫码登录成功
3. 启动微信入站监听
4. 正常接收并回复微信消息
5. 日志写入 OpenClaw 新版本兼容的主日志文件,能通过 `openclaw logs --follow` 查看
---
## 一、背景与问题特征
这类机器上常见的现象是:
- `openclaw-weixin` 已安装、已启用
- `openclaw status --deep` 里看起来 channel 存在
- 微信扫码登录似乎成功
- 但插件启动时报一串类似错误:
```text
Cannot find module 'openclaw/plugin-sdk/channel-config-schema'
Cannot find module 'openclaw/plugin-sdk/account-id'
Cannot find module 'openclaw/plugin-sdk/infra-runtime'
Cannot find module 'openclaw/plugin-sdk/channel-runtime'
Cannot find module 'openclaw/plugin-sdk/command-auth'
Cannot find module 'openclaw/plugin-sdk/text-runtime'
Cannot find module 'openclaw/plugin-sdk/config-runtime'
```
注意:
- 宿主 `openclaw` 版本可能已经是最新
- 问题不是“版本太旧”
- 而是 **插件源码 import 的多个 `openclaw/plugin-sdk/*` 子路径,在当前宿主插件加载链中无法被正确解析**
- 宿主包内部可能存在对应 dist 文件,但插件直接按包子路径 import 会失败
---
## 二、修复原则
### 目标
不是简单降级插件,而是做一组**本地兼容补丁**,使插件在当前宿主上正常运行。
### 原则
1. **优先复用宿主真实实现**
- 例如宿主 `dist/plugin-sdk/infra-runtime.js`
- 例如宿主 `dist/plugin-sdk/config-runtime.js`
2. **如果宿主真实实现无法直接调用,再 fallback 本地兼容实现**
3. **路径、日志、配置写回、文件锁** 尽量对齐 OpenClaw 新版本行为
4. **高风险 SDK 子路径**(如 command-auth / text-runtime / account-id)允许保留本地兼容实现,避免再次把插件搞挂
---
## 三、需要修改的文件
默认插件路径通常是:
```bash
~/.openclaw/extensions/openclaw-weixin
```
你需要检查并修改这些文件:
### 已修改/需要修改的文件
- `index.ts`
- `src/channel.ts`
- `src/auth/accounts.ts`
- `src/auth/pairing.ts`
- `src/util/logger.ts`
- `src/messaging/process-message.ts`
- `src/messaging/send.ts`
- `src/log-upload.ts`
### 需要新增的兼容文件
- `src/util/account-id-compat.ts`
- `src/util/command-auth-compat.ts`
- `src/util/text-runtime-compat.ts`
- `src/util/openclaw-host-compat.ts`
### 还要检查宿主配置文件
- `~/.openclaw/openclaw.json`
---
## 四、具体修改要求
### 1. 修改 `index.ts`
#### 问题
不要再依赖:
```ts
openclaw/plugin-sdk/channel-config-schema
```
#### 修改要求
删除:
```ts
import { buildChannelConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
```
把:
```ts
configSchema: buildChannelConfigSchema(WeixinConfigSchema)
```
改成:
```ts
configSchema: WeixinConfigSchema
```
---
### 2. 新增 `src/util/account-id-compat.ts`
添加一个本地账号 ID 兼容函数:
```ts
export function normalizeAccountId(value: string): string {
return value.trim().replace(/@/g, "-").replace(/\./g, "-");
}
```
#### 用途
替代:
```ts
openclaw/plugin-sdk/account-id
```
---
### 3. 新增 `src/util/command-auth-compat.ts`
实现一个最小可用版本,至少提供:
- `resolveSenderCommandAuthorizationWithRuntime`
- `resolveDirectDmAuthorizationOutcome`
核心逻辑要求:
- 读取 `allowFrom`
- 判断 sender 是否授权
- 只有 `/命令` 才视为 commandAuthorized
- `dmPolicy = pairing` 且未授权时返回 `unauthorized`
示意逻辑:
```ts
type DmPolicy = "allow" | "pairing" | "disabled" | string;
export async function resolveSenderCommandAuthorizationWithRuntime(...) {
...
}
export function resolveDirectDmAuthorizationOutcome(...) {
...
}
```
---
### 4. 新增 `src/util/text-runtime-compat.ts`
实现一个轻量 `stripMarkdown(text: string)`,至少能去掉:
- 行内代码
- 标题符号
- 粗体/斜体
- 引用
- 列表符号
用于替代:
```ts
openclaw/plugin-sdk/text-runtime
```
---
### 5. 新增 `src/util/openclaw-host-compat.ts`
这是关键文件。
这个文件要负责提供:
#### (1) `resolvePreferredOpenClawTmpDirCompat()`
要求:
- 尽量按宿主 OpenClaw `tmp-openclaw-dir` 真实逻辑实现
- 优先 `/tmp/openclaw`
- 如果不安全或不可写,再 fallback 到 `tmpdir()/openclaw[-uid]`
- 权限尽量使用 0700
- 行为尽量对齐宿主 `resolvePreferredOpenClawTmpDir`
#### (2) `withFileLockCompat(filePath, options, fn)`
要求:
- 优先动态 import 宿主真实实现:
```ts
dist/plugin-sdk/infra-runtime.js
```
- 调用宿主的 `withFileLock`
- 如果加载失败,再直接执行 `fn()`
#### (3) `loadConfigCompat()` / `writeConfigFileCompat()`
要求:
- 优先动态 import 宿主真实实现:
```ts
dist/plugin-sdk/config-runtime.js
```
- 调用宿主:
- `loadConfig`
- `writeConfigFile`
- 如果失败,再 fallback 读写:
```bash
~/.openclaw/openclaw.json
```
#### 技术要求
建议用:
```ts
createRequire(import.meta.url)
pathToFileURL(...)
```
来定位宿主 `openclaw/package.json`,再拼出 dist 文件路径。
---
### 6. 修改 `src/channel.ts`
#### 修改要求
1. 不再使用:
```ts
openclaw/plugin-sdk/account-id
```
改成:
```ts
./util/account-id-compat.js
```
2. 不再使用:
```ts
openclaw/plugin-sdk/infra-runtime
```
媒体临时目录改成:
```ts
path.join(resolvePreferredOpenClawTmpDirCompat(), "weixin/media/outbound-temp")
```
---
### 7. 修改 `src/messaging/process-message.ts`
#### 修改要求
1. 不再使用:
```ts
openclaw/plugin-sdk/channel-runtime
```
如果只用到 `createTypingCallbacks`,就在本地实现一个简化版
2. 不再使用:
```ts
openclaw/plugin-sdk/command-auth
```
改为:
```ts
../util/command-auth-compat.js
```
3. 不再使用:
```ts
openclaw/plugin-sdk/infra-runtime
```
媒体临时目录改成:
```ts
path.join(resolvePreferredOpenClawTmpDirCompat(), "weixin/media/outbound-temp")
```
---
### 8. 修改 `src/messaging/send.ts`
#### 修改要求
不再使用:
```ts
openclaw/plugin-sdk/text-runtime
```
改为:
```ts
../util/text-runtime-compat.js
```
保持 `markdownToPlainText()` 逻辑不变,只替换 `stripMarkdown` 来源。
---
### 9. 修改 `src/util/logger.ts`
#### 目标
让插件日志写入 **OpenClaw 新版本兼容主日志文件**,使其能通过:
```bash
openclaw logs --follow
```
查看。
#### 修改要求
1. 日志目录用:
```ts
resolvePreferredOpenClawTmpDirCompat()
```
2. 日志文件名使用固定文件:
```ts
openclaw.log
```
不要再使用按天命名:
```ts
openclaw-YYYY-MM-DD.log
```
#### 目标效果
插件日志最终写入类似:
```bash
/tmp/openclaw/openclaw.log
```
并与 OpenClaw 新版本主日志规则一致。
---
### 10. 修改 `src/log-upload.ts`
#### 修改要求
1. 日志目录改成:
```ts
resolvePreferredOpenClawTmpDirCompat()
```
2. 默认日志文件名改成:
```ts
openclaw.log
```
3. `uninstall` 子命令里不要再直接 import:
```ts
openclaw/plugin-sdk/config-runtime
```
改用:
- `loadConfigCompat()`
- `writeConfigFileCompat()`
4. 保留兼容:
- 如果用户传 `YYYYMMDD`
- 或 `YYYYMMDDHH`
- 也可以映射到 `openclaw.log`
---
### 11. 修改 `src/auth/pairing.ts`
#### 修改要求
1. 不再直接 import:
```ts
openclaw/plugin-sdk/infra-runtime
```
2. 改为使用:
```ts
withFileLockCompat(...)
```
3. 保留 allowFrom 文件逻辑,写入:
- `openclaw-weixin-<accountId>-allowFrom.json`
4. 如果宿主真实 `withFileLock` 加载成功,则优先使用宿主实现
5. 只有加载失败时才 fallback 到无锁直接写
---
### 12. 修改 `src/auth/accounts.ts`
这是关键。
#### 修改要求
1. 账号 ID 规范化改用:
```ts
../util/account-id-compat.js
```
2. 登录成功后的 `triggerWeixinChannelReload()`:
- 不要再直接依赖:
```ts
openclaw/plugin-sdk/config-runtime
```
- 改成使用:
- `loadConfigCompat()`
- `writeConfigFileCompat()`
#### 必须保证
扫码登录成功后,如果 `channels.openclaw-weixin` 缺失,就自动写回:
```json
"channels": {
"openclaw-weixin": {
"enabled": true,
"accounts": {}
}
}
```
否则即使 token 保存成功,gateway 也不会真正启动微信监听。
---
### 13. 检查 `~/.openclaw/openclaw.json`
确认这些配置存在:
#### 插件已启用
```json
"plugins": {
"entries": {
"openclaw-weixin": {
"enabled": true
}
}
}
```
#### channels 里有 openclaw-weixin
```json
"channels": {
"openclaw-weixin": {
"enabled": true,
"accounts": {}
}
}
```
如果缺失,需要补上。
---
## 五、修复后的验证步骤
修改完成后,按这个顺序验证。
### 1. 重启 gateway
```bash
openclaw gateway restart
```
### 2. 看深度状态
```bash
openclaw status --deep
```
确认:
- `openclaw-weixin` 存在
- `accounts 1/1` 或相应账号数
- 没有新的插件加载错误
### 3. 查看日志
```bash
openclaw logs --follow
```
### 4. 微信发测试消息
发:
```text
你好
```
### 5. 预期日志
应看到类似:
```text
starting weixin webhook
waiting for Weixin runtime...
Weixin runtime acquired
Monitor started
inbound message
outbound: text sent OK
```
---
## 六、判断修复成功的标准
满足以下全部条件即视为修复成功:
1. 插件不再报 `Cannot find module 'openclaw/plugin-sdk/...'`
2. `openclaw status --deep` 中微信 channel 正常
3. `openclaw logs --follow` 能看到微信插件日志
4. 微信入站消息可被 OpenClaw 收到
5. OpenClaw 可以正常回复微信消息
---
## 七、注意事项
1. 不要为了省事直接把所有逻辑都改成 `/tmp`
- 路径、日志、配置写回、文件锁应尽量对齐宿主真实实现
2. 不要优先降级插件,除非确认本地补丁不可控
- 这里优先做源码兼容修复
3. 保留本地 compat 文件是合理的
- 尤其是:
- `account-id-compat`
- `command-auth-compat`
- `text-runtime-compat`
4. 如果插件更新/重装,这些改动可能会丢失
- 建议后续导出 patch
---
## 八、最终目标
修复后,插件应实现:
- 正常加载
- 正常扫码登录
- 自动写回 channel 配置
- gateway 自动拉起监听
- 正常轮询微信消息
- 正常回复
- 日志进入 OpenClaw 主日志文件,可被 `openclaw logs --follow` 直接查看
---
如果你是 AI coding agent,请直接:
1. 读取上述文件
2. 对照是否存在相关 import
3. 执行最小必要改动
4. 完成后列出修改的文件与关键 diff
5. 指导用户执行:
```bash
openclaw gateway restart
openclaw status --deep
openclaw logs --follow
```
结果验证
image430×909 94.4 KB
网友解答:--【壹】--:
佬友牛逼,感谢
--【贰】--:
感谢佬 nb
--【叁】--:
非常好用
--【肆】--:
微信插件那边卸载了重新安装新版本似乎也可以了
--【伍】--:
牛逼 我说咋一直报错呢
--【陆】--:
感谢佬!
--【柒】--:
正需要,谢谢佬友
--【捌】--:
牛逼,解决了
--【玖】--:
666感谢佬
--【拾】--:
昨天亲测有效
npm -g install openclaw@2026.3.13
--【拾壹】--:
emmm重新安装插件现在应该也能解决了。。。

