OpenClaw发布超小更新包,主要修了飞书、LINE、Telegram等聊天的连接问题,让控制界面更流畅,插件更新不掉链子,网关状态更清楚。全是小修小补,没啥大动作。
这次更新就跟修水管似的。你家水龙头没坏你不会找水电工对吧?OpenClaw这次就是那种“没出大事但小毛病烦死人”的修修补补。飞书聊天串话题了?修了。LINE机器人收不到消息?修了。Telegram显示消息重复?修了。Discord命令没人理?修了。控制界面卡成PPT?修了。插件更新后找不到SDK?修了。网关重启后状态混乱?修了。
简单说就是:没加新功能,没改大架构,就是把用户反馈的三十多个小毛病挨个拍死了。像极了你周末在家对着清单修WiFi断流、修蓝牙连不上、修电视遥控器失灵的样子。
有人说这么小的更新有啥好写的?我告诉你,机器人跑在生产环境里,这些小毛病就跟鞋里的沙子一样,不疼但能把你逼疯。所以别看它小,每个修复背后都有人对着屏幕骂过娘。
好,现在咱们从头捋,按逻辑顺序告诉你这次到底修了啥。第一件事:聊天平台的话题和会话为啥老串台。
飞书和会话路由先保证第一句话和回复在同一个房间
你有没有过这种经历:你在群里问了机器人一个问题,它回复了,然后你追问一句,结果机器人好像失忆了一样,回了个完全不相关的东西?这就是话题串了。
飞书那边有个坑:机器人收到第一条消息时,平台没给一个明确的话题ID,OpenClaw自己也不知道该把这条消息归到哪个会话里。等到你发第二条消息,它又当成新会话处理了。结果就是你跟机器人聊天像跟金鱼聊天——每句话都是第一次见面。
这次修复就是在消息进来之前,先给飞书的消息补充一个原生的话题起始ID,这样会话路由就知道“哦,这俩消息是一伙的”,让第一句和后续追问待在同一个话题会话里。简单说就是给每个聊天会话贴了个门牌号,不会走错门。
对应的GitHub issue是#78262,一个叫@joeyzenghuan的哥们提的。感谢他。
接下来是LINE机器人。这货更坑,它有个“坑你自己”的设置。
LINE的开放策略别让消息假成功真丢失
LINE平台有个配置叫dmPolicy,你可以设置成"open",意思是“谁都能给机器人发私信”。但问题来了:这个设置下还有个隐藏坑,你得同时配一个allowFrom白名单,不然Webhook收到的私信会先通过验证,然后在你完全没察觉的情况下被悄悄丢掉。
这就好比你家大门上贴了“欢迎光临”,结果客人进来后你从猫眼里看一眼,觉得不认识,然后门也不开就在门后把人打发走了,客人还以为你不在家。
修复方案很粗暴:如果你dmPolicy设成"open"但没配allowFrom通配符,直接拒绝这次配置,让它在验证阶段就失败,而不是假装成功再偷偷拦截。这样你在配置阶段就能发现问题,而不是等到用户发了消息石沉大海才发现。
Issue #78316,修了。
搞定了LINE,咱们看Telegram。这货的问题更逗,消息重复显示。
Telegram保持工具进度草稿可见不重复显示
Telegram那边用的是Codex模型,有时候机器人会调用工具,比如“正在计算……”、“正在搜索……”。之前有个bug:这些工具进度提示会重复显示,同一个工具进度出现两次,就跟复读机一样。
修复后每个工具只显示一次进度,而且保证这些“消息工具专用”的进度草稿始终可见。就像你下载文件时那个进度条,它只出现一次,不会闪两下消失再出现。
Issue #75641和#77949。
说完消息显示,咱们进更底层的模型调用问题。xAI的Grok模型脾气挺大。
别再给Grok模型发它不认的思考控制参数
OpenClaw之前给所有模型统一发一套“思考深度控制”参数,这招对OpenAI的模型管用,但xAI的Grok原生模型不认这些参数。结果就是一跑就报错“Invalid reasoning effort”,意思是“你给的思考控制参数无效”。
修复分两步:第一,彻底停止给xAI的Grok模型发送OpenAI那套思考控制参数。第二,把xAI自带的思考配置强行关掉,确保网关运行时不会发出Grok不支持的思考级别。
这就好比你去中餐馆点了一份左宗棠鸡,然后用法语跟服务员说“请少放味精”,服务员听不懂法语,你的菜就一直做不出来。修复后直接说中文“别放味精”,或者干脆别说。
接下来是Matrix聊天平台的审批流程。这货的问题是审批消息发着发着就丢了。
Matrix审批消息最多重试三次防止迷路
Matrix上的机器人有时候需要人类审批才能执行某些操作,比如删除文件、发大群消息。之前的bug是审批请求发出去后,如果Matrix网络抖动一下,这条审批就彻底丢了,像石沉大海,机器人在那边干等着。
修复方案:审批消息发送失败后最多重试3次,每次等待时间逐渐加长,就像你打电话没人接,等几秒再打,再没人接再多等几秒再打。三次都失败才放弃。
Issue #78179,感谢@Patrick-Erichsen。
聊天平台的事说差不多了,咱们转向Discord。这货有两个经典bug。
Discord心跳延迟别误判假断连
Discord长连接有个心跳机制,就是客户端每隔几秒给服务器发个“我还活着”的信号,服务器回一个“收到”。之前的bug是:客户端从发送心跳那一刻开始计时,如果没及时收到回复就判定连接断了,然后重新连接。但问题是,第一次连接时还没完全准备好,心跳发晚了,结果被误判为断连,然后就陷入“连上-误判-重连-又误判”的死循环。
修复后改成从真实发送心跳的那一刻才开始计时,不是从之前随便一个时间点开始。就像你等人,你说“我从他出门开始计时”,而不是“我从早上八点开始计时”——他可能九点才出门。
Issue #77668和#78087,感谢@bryce-d-greybeard和@NikolaFC。
另一个Discord问题是:你发个“/steer”这样的控制命令,结果没人理。
Discord普通文字命令走正常授权通道不被静默丢弃
Discord上你可以用斜杠命令控制机器人,比如“/steer”让机器人换个方向。之前有个bug:某些普通文本形式的控制命令在还没到达机器人会话之前就被静默丢弃了,就像你对着空气说话,连回音都没有。
修复后这些命令强制走正常的授权和提及通道,确保机器人会话能看到它们。
Issue #78080,感谢@ramitrkar-hash。
聊完平台,咱们看控制界面。这玩意儿之前卡得让人想砸键盘。
控制界面的会话压缩数简化显示不卡顿
OpenClaw有个控制网页界面,里面有个“会话压缩”功能,就是机器人把长对话历史压缩成摘要,节省记忆。之前这个压缩数的显示方式很蠢,会把每个检查点都详细列出来,导致界面渲染慢得像老牛拉车。
修复后压缩数简化成一个简洁的“N个检查点”,会话详情用现代化的卡片布局显示,表格也不卡了。感谢@BunsDev,这个哥们修了好几个界面问题。
下一个性能问题更普遍:聊天和历史数据加载慢。
聊天和频道标签页保持响应不因历史数据卡死
之前你打开聊天界面,如果这个会话历史消息很多,或者频道检测很慢,整个标签页就会冻住,你点什么都没反应,只能干等。
修复方案:历史数据慢慢加载,界面该响应还是响应。加载慢的时候显示“部分频道状态”的标签,如果渲染特别慢就把耗时记录到事件日志里,方便排查。
还是感谢@BunsDev。
下一个会话管理问题:新建会话的钩子函数被乱触发。
新建会话命令只在手动创建时触发避免污染父会话
OpenClaw有个“/new”命令,让你新建一个会话。之前有个bug:这个命令和相关的生命周期钩子会在不该触发的时候被触发,比如SDK创建父会话时也被触发了,导致会话记忆和自定义钩子乱套。
修复后只在控制界面手动创建会话时才触发这个命令,不影响SDK正常创建父会话。
Issue #76957,还是感谢@BunsDev。
控制界面的事差不多了,咱们看文件审批。Windows用户哭出声。
审批文件写入失败时用保护性拷贝防止丢数据
Windows系统有个臭名昭著的问题:你试图重命名覆盖一个文件时,如果文件被占用或者权限不对,就直接失败。OpenClaw的审批文件exec-approvals.json之前就因为这个挂过,导致审批记录丢失。
修复方案:如果重命名覆盖失败,就改用保护性拷贝——先把内容写到一个临时文件,再把临时文件拷贝到目标位置,同时保留符号链接、硬链接和所有者权限的防护。这就好比你想换掉桌子上的一本书,如果拿不起来,就先在旁边放一本新书,再把旧书挪走。
Issue #77785和#77907,感谢@Alex-Alaniz和@MilleniumGenAI。
下一个是Slack。这货的错误信息之前跟天书一样。
Slack保留完整错误上下文启动失败时不只报“未知错误”
Slack的Socket Mode之前出错时,日志只会显示一个光秃秃的“unknown error”,你根本不知道哪挂了。修复后保留完整的SDK错误上下文和Slack API结构字段,启动失败时你能看到具体原因,比如“token过期”还是“网络超时”。
代码层面的事差不多了,咱们看微信级别的——哦不对,是iOS配对。
iOS配对允许局域网私有地址用ws不加密连接
iOS设备和OpenClaw网关配对时,以前强制用wss加密连接。但你在家里局域网内配对时,根本不需要加密,wss反而因为证书问题连不上。
修复后局域网和.local域名允许用普通的ws连接,而Tailscale或公网路由仍然用wss。同时配对时优先用明确配置的网关密码,不用过期的启动令牌。
这就好比你回家开门用钥匙,但进小区门禁刷脸就行——不同场景不同安全级别。
Issue #47887和#65185,感谢@draix和再次感谢@BunsDev。
接下来是最让开发者头疼的插件问题。
插件诊断时报的TypeScript错误明确说是发布者打包问题
你装了一个插件,结果报错“TypeScript源文件找不到”。之前你以为是自己的问题,疯狂重装。实际上这是插件发布者打包时没把编译后的文件放进去。
修复后错误提示变得很友好:“这是插件发布者的打包问题,请尝试更新/重装插件,或者禁用它/卸载它”。就像你买了个玩具发现缺零件,说明书告诉你“这是工厂少装了零件,去找商家退换”。
Issue #77835,感谢@googlerest。
控制界面的聊天历史还有个消失bug。
会话重载后助手文字不再消失
你和一个机器人聊天,它生成了一个很长的回复,里面包含了工具调用。然后你发下一条消息,刷新聊天历史,发现之前那个长回复不见了,凭空消失。
原因:代码把工具调用元数据和回复文本分开存储,重载时只加载了元数据忘了加载文本。
修复后两者一起加载,回复文字永远可见。
Issue #77374,感谢@BunsDev。
TUI终端界面也有毛病,之前启动时老卡住。
TUI退格不复活心跳会话退出时干净利落不残留进程
TUI是终端里的文字界面。之前的bug:你退出TUI时,它会生成一个残留的子进程,下次启动时又把这个残留进程的心跳会话当成当前会话,导致历史混乱。
修复后:TUI启动时不通过通用CLI包装器重跑,终端丢失时干净退出,拒绝把心跳恢复会话当成记住的聊天会话。简单说就是死了就死了,不诈尸。
感谢@vincentkoc,这哥们也修了好多。
还有个诊断修复工具的问题。
doctor修复心跳毒化的会话自动转移坏数据
如果你的某个会话因为心跳机制出问题了,整个会话存储就坏了,OpenClaw启动不了。修复工具doctor --fix之前不知道怎么处理这种情况。
修复后:把被心跳毒化的主会话存储条目移到恢复区,清除过期的TUI恢复指针,这样doctor能修好这些卡住的实例。
依然感谢@vincentkoc。
接下来是上下文引擎的隐身消息问题。
上下文引擎不把运行时隐藏消息塞给插件
OpenClaw内部有一些隐藏的运行时消息,用户看不到,只有系统知道。之前这些隐藏消息会被塞给插件,插件处理时一脸懵逼,因为那些消息根本不是用户的真实对话。
修复后:把这些隐藏消息排除在上下文引擎的组装、后处理和注入钩子之外,插件只看到真实的对话消息。
还是感谢@vincentkoc。
网关关机也有毛病,有时候关了还在后台跑。
网关关机时取消延迟任务防止后台幽灵定时器
你执行关闭网关命令,它说要等一会儿做个维护任务再关。但有时候你等不及又快速重启,结果之前的维护任务和新的启动任务打架,后台留下幽灵定时器。
修复后:关闭时立即取消延迟的后维护任务,快速重启后也不启动维护和定时任务。
感谢@vincentkoc。
生成媒体文件的重复发布问题。
附件式工具消息标记为已完成防止重复发送
机器人生成了一个图片或视频,然后通过“附件”形式发送。之前有个bug:发送成功后,系统又以为没发成功,又发了一遍,导致用户收到重复文件。
修复后:把这种附件式的工具消息标记为“已完成聊天发送”,阻止二次发布。
控制界面里会话的运行时显示。
会话表显示代理运行时支持按运行时标签筛选
之前控制界面的会话列表里,你不知道每个会话用的是哪个AI模型运行时。修复后显示每个会话的代理运行时,还能按运行时标签筛选,跟代理面板的用词统一。
Discord的流式显示问题。
Discord流式显示思考草稿不是光秃秃状态行
Discord上机器人生成长回复时,如果涉及推理思考过程,之前只显示一行“Reasoning”状态,你完全不知道它在想什么。
修复后实时显示思考过程的文字草稿,你能看到机器人“正在推理……哦这个问题的答案是……”。
网关的健康检查别再一惊一乍。
网关状态不因短时间CPU高负载就报退化成事件循环
网关有健康检查,看事件循环有没有卡住。之前只要CPU高一点,检查就报警说“事件循环退化”。但短时间高负载很正常,比如你突然开了个大任务。
修复后:采样足够长的时间窗口才报警,短时间波动忽略。
感谢@shakkernerd。
插件更新时保持官方插件同步。
插件更新时官方ClawHub插件保持同步即使被禁用
你更新OpenClaw时,我们希望官方插件比如Codex、Discord、WhatsApp也跟着更新,就算你禁用了它们,也要更新到最新版本,因为你下次启用时用的就是新版。但第三方插件如果被精确固定了版本就不动。
修复后做到了这点,再次感谢@vincentkoc。
诊断功能还得多报一个令牌冲突警告。
doctor检测网关令牌与环境变量冲突
如果你环境变量OPENCLAW_GATEWAY_TOKEN和配置文件里gateway.auth.token指向不同来源但值相同,之前不会报警,但其实容易混淆。
修复后:当它们指向不同来源时会警告,避免你误以为用的是环境变量实际用的是配置文件。
Issue #74271,感谢@yelog。
网关HTTP请求里媒体处理器的加载优化。
不相关请求不加载图片媒体处理器
网关有一些请求根本不涉及图片处理,比如你只是问天气。之前也会慢慢加载媒体处理器,导致响应慢。
修复后:不相关的请求直接返回404,不等媒体处理器启动。
再次感谢@vincentkoc。
OpenAI兼容接口的实现问题。
流式聊天一开始就发送角色防止空响应超时
OpenClaw实现了OpenAI兼容的聊天接口。之前的bug:客户端发起流式请求后,服务器要等代理完全准备好才开始发送数据,这段时间长达几秒甚至十几秒,客户端以为自己连上了但没数据,最后超时断开。
修复后:一收到请求就立即发送assistant角色的SSE数据块,告诉客户端“我收到了,正在处理”,让客户端知道连接活着。
代理媒体文件完成前的重复消息问题。
延迟媒体完成标记防止重复原始消息
机器人生成音视频时,如果还没完全生成完毕就提前标记为完成,会导致重复发送原始媒体消息。
修复后:等代理运行彻底完成再标记完成。
Issue #77754。
WebChat的Codex图片路径访问错误。
Codex生成图片存入托管媒体避免本地路径错误
WebChat界面上,Codex模型生成本地图片后,图片路径指向本地文件系统,但WebChat访问时权限不够,报错LocalMediaAccessError。
修复后:把这些图片先存入网关的托管媒体管理里,然后再显示,路径就对了。
感谢@frankekn。
TUI会话选择器的性能问题。
TUI会话选择器只加载最近记录不加载几周前的旧数据
如果你有很多历史会话,TUI启动时会全部加载,导致卡死几分钟才能操作。
修复后:只加载最近的行,活动会话用精确查找刷新,几周前的旧数据不加载。
再次感谢@vincentkoc。
诊断工具报告重启信息。
doctor --deep报告最近的监管重启交接
如果网关被系统服务管理工具重启过,之前诊断工具看不到这个信息。
修复后:openclaw doctor --deep和openclaw gateway status --deep都报告最近的监管重启交接细节。
感谢@shakkernerd。
Fireworks平台的模型兼容。
Fireworks的Kimi模型不发送不支持的思考参数
Fireworks平台上有些模型比如Kimi不接受思考控制参数,之前会失败。
修复后:对这些模型强制关闭思考参数,手动切换模型也不发送被拒绝的参数。
Issue #74289,感谢@frankekn。
WhatsApp的响应问题。
只中断过期的本地TUI客户端不拖慢WhatsApp
WhatsApp机器人响应慢,是因为本地过期的TUI客户端拖慢了整个事件循环。
修复后:只关掉那些过期的TUI客户端,不影响正常响应。
感谢@vincentkoc。
插件安装时的依赖修复。
插件安装前修复过期的npm包版本
你装了一个官方插件,但之前的npm包锁文件版本过旧,会把插件降级到老版本。
修复后:在装插件之前先修复过期的OpenClaw核心包,防止降级。
感谢@vincentkoc。
插件安装后SDK链接修复。
变更插件后重新确认SDK链接防止其他插件找不到
你装了一个插件,然后改了它,结果另一个依赖SDK的插件就找不到路径了。
修复后:每次安装、更新、卸载插件后,重新确认所有插件的OpenClaw SDK链接。
会话记忆文件重名问题。
同一分钟内多次新建会话不会覆盖记忆文件
你用/new命令一分钟内新建了两次会话,第一次的记忆文件会被第二次覆盖。
修复后:给文件名加冲突后缀,不覆盖。
感谢@vincentkoc。
代理配置路径清理。
移除模糊的主代理目录辅助函数
代码里有一些历史遗留的路径辅助函数,含义模糊,容易用错。
修复后:移除这些模糊函数,统一用代理列表和作用域辅助函数解析路径。
CLI状态显示运行时。
终端CLI状态每行显示代理运行时
openclaw status命令的输出里,每个会话行显示所用的代理运行时,跟/status命令统一。
CLI清理过期的会话文件。
CLI清理冗余的会话文件防止无限堆积
网关崩溃重启后,会留下很多孤立的会话记录文件。
修复后:正常的会话清理流程会删除这些未被引用的文件。
Issue #77608,感谢@slideshow-dingo。
Codex路由修复。
修复老的Codex路由到规范OpenAI路由
之前有很多地方硬编码了openai-codex/*这种老路由。
修复后:全部改到openai/*,只在Codex插件安装、启用、有OAuth时才选择codex运行时,否则选pi运行时。
感谢@vincentkoc。
视频生成参数兼容。
视频生成接受分辨率提示归一化720P到768P
不同视频生成模型接受的分辨率格式不同,比如MiniMax只认768P,你传720P就失败。
修复后:把720P自动归一化到768P,区分不同提供商的参数,Gemini的视频请求不发送音频参数。
再次感谢@vincentkoc。