← 返回更新日志

OpenClaw v1.3.0

2025-12-02 · GitHub 原文
warelay 1.3.0 (2025-12-02) ### 重点特性 - **可插拔的AI引擎(Claude、Pi、Codex、Opencode):** 新增的`inbound.reply.agent`配置块可为每条命令回复选择指定的命令行界面(CLI)和解析器;每个AI引擎的参数构建器可自动注入正确的标志/身份标识/提示处理,并解析NDJSON数据流,从而实现无需修改模板即可切换Pi/Codex等引擎。 - **AI引擎安全终止词:** 当接收的消息内容恰好为`stop`、`esc`、`abort`、`wait`或`exit`时,warelay会立即回复“AI引擎已终止”,结束正在运行的AI任务,并标记当前会话,使下一次提示前自动添加前次运行已终止的提醒前缀。 - **AI引擎会话可靠性增强:** 目前仅Claude会返回`session_id`并由warelay持久化;其他引擎(Gemini、Opencode、Codex、Pi)不会生成稳定的会话标识符,因此多次对话的连续性在切换运行时可能会重置。 ### 问题修复 - **空结果字段处理:** 修复了当Claude CLI返回`result: ""`(空字符串)时,原始JSON数据被错误发送至WhatsApp而非作为有效空输出处理的问题。已在`command-reply.ts`中将简单的真值判断改为显式类型检查。 - **心跳回复响应前缀:** 修复了`responsePrefix`(例如`🦞`)未应用于心跳提醒消息的问题。此前该前缀仅应用于常规消息处理器,未在`runReplyHeartbeat`中生效。 - **用户可见错误信息:** 命令执行失败(非零退出、进程被终止、异常)现在会向WhatsApp返回用户友好的错误信息,而非静默失败并返回空响应。 - **测试会话隔离:** 通过在所有测试文件中模拟会话持久化,修复了测试过程污染生产环境`session.json`文件的问题。 - **防止Signal会话损坏:** 新增进程间通信(IPC)机制,使`warelay send`和`warelay heartbeat`命令在转发服务运行时复用现有WhatsApp连接,避免创建新的Baileys套接字。此前在转发服务运行时使用这些命令,两个连接会同时写入相同的认证状态,可能导致Signal会话的棘轮机制损坏,进而导致转发服务后续发送消息静默失败。 - **网页端发送媒体类型支持:** `sendMessageWeb`方法现在通过WhatsApp网页版发送媒体时会正确识别类型:音频作为PTT(按键通话)并携带正确的opus MIME类型,视频作为视频,图片作为图片,其他类型作为文档并附带文件名。此前所有媒体均作为图片发送,导致音频/视频/文档发送失败。 ### 功能变更 - **转发服务IPC服务器:** 网页转发服务现在会在`~/.warelay/relay.sock`启动一个Unix套接字服务器。诸如`warelay send --provider web`的命令在转发服务运行时将自动通过IPC连接,否则回退至直连模式。 - **带时间戳的批量入站消息:** 当多条WhatsApp消息排队时,它们会被合并为一个批次发送给AI引擎,每行均带有统一的时间戳,以保持顺序和上下文。 - **IPC发送后显示输入状态:** 通过IPC(例如`warelay send`)发送消息后,转发服务现在会自动显示“正在输入”状态,提示可能有更多消息即将到来。 - **WhatsApp会话卡顿自动恢复:** 新增看门狗定时器,可检测WhatsApp事件发射器何时停止触发(例如在出现“Bad MAC”解密错误后),并在连续30分钟无消息活动时自动重启连接。心跳日志现在会包含`minutesSinceLastMessage`,并在超过30分钟无消息时发出警告。30分钟的超时设置特意长于常规的`heartbeatMinutes`配置,以避免误判。 - **提前的allowFrom过滤:** 未经授权的发送者现在会在`inbound.ts`中、在尝试加密/解密之前就被拦截,防止“Bad MAC”错误损坏会话状态。此前,来自未授权发送者的消息会触发解密失败,可能导致事件发射器静默终止。 - **测试隔离性改进:** 在所有测试文件中模拟`loadConfig()`,防止在测试期间加载真实的用户配置(含表情符号/前缀)。默认测试配置现在不含前缀/时间戳,便于更清晰的断言。 - **同号码模式(自我对话):** warelay现在支持在与自己发送消息的相同手机号码上运行。这使用户可以通过与自己对话来控制AI助手。同号码模式(发送方号码等于接收方号码`from === to`)始终被允许,即使未配置`allowFrom`。防回声检测通过跟踪最近发送的文本内容,在收到匹配的传入消息时跳过自动回复,从而防止无限循环。 - **防回声检测:** 针对同号码设置,有意移除了`inbound.ts`中的`fromMe`过滤;转而通过在`auto-reply.ts`中使用一个有界集合(最多100条记录)跟踪已发送消息,并在发现匹配时跳过处理,实现基于文本的回声检测。 - **同号码检测日志:** 启用详细模式后,当检测到`from === to`时会记录`📱 检测到同号码模式`。 - **可配置的同号码消息标记:** 新增`inbound.samePhoneMarker`配置项,用于自定义在同号码模式下添加到消息前的文本前缀(默认为`[same-phone]`)。可将其设置为类似`[🦞 同号码]`的友好标识,便于区分机器人回复。 ### 贡献者 - @RealSid08 (Sidhaarth Krishnan) ### 测试情况 - pnpm lint (代码检查通过) - pnpm test (单元测试通过) - pnpm build (构建通过)