欢迎光临
我们一直在努力

OpenClaw 六条发布线的依赖账本:79 个包里有 66 个版本各不相同,回补线发一次、主线就整体退一档

如果你只用 npm install -g openclaw,你装到的永远只有 latest 那一条线。而 npm 上真实存在的是六条同时在维护的线——latest、beta、extended-stable、以及 8 月、7 月、6 月三条 LTS 回补线。

这六条线的依赖表差异有多大?我们把 npm registry 的全量元数据拉下来,逐条做了集合比对,结论是:六条线一共涉及 79 个直接依赖,其中 66 个在不同线上的锁定版本互不相同,只有 47 个包在全部六条线上都存在,而每条线依赖总数从 54 到 68 不等。

本文所有数字来自 2026-10-19 15:0x(Asia/Shanghai)对 GET https://registry.npmjs.org/openclaw 的全量解析(响应体 20,058,783 字节,versions 字段 280 条)以及对 6 个被锁依赖的上游包 registry(openai、@anthropic-ai/sdk、@google/genai、ws、@agentclientprotocol/sdk、@openclaw/fs-safe)的发布时间核对。口径不外推到 registry 之外,registry 里没有的信息一律标注 UNKNOWN。

一、先把六条线的位置摆清楚

OpenClaw 当前的 dist-tags 只有三个,但实际在维护的线是六条。多出来的三条是 LTS 回补线,它们不带 tag,只能靠版本号前缀识别:

线 代表版本 发布日期 直接依赖数
latest 2026.10.5 2026-10-18 66
beta 2026.10.10-beta.2 2026-10-19 68
extended-stable 2026.9.33 2026-10-15 66
LTS 8 月线 2026.8.35 2026-10-02 66
LTS 7 月线 2026.7.35 2026-09-21 56
LTS 6 月线 2026.6.35 2026-09-10 54

注意依赖总数这个梯度:66 → 68 → 66 → 66 → 56 → 54。8 月线还有 66 个依赖,7 月线只剩 56 个,6 月线 54 个。这不是巧合,而是回补线各自停在不同功能分叉点留下的痕迹——6 月线甚至还没有 @openclaw/ai 这个依赖(它最早出现在 2026-07-11 的 2026.7.1-beta.4,全库共 48 个版本引用它)。

下面这张截图是 latest 线代表版本 2026.10.5 在 unpkg 上的 package.json 原文,dependencies 区块就在页面中部:

unpkg 上 openclaw@2026.10.5 的 package.json,dependencies 区块为 66 条精确版本依赖

而这是 6 月回补线 2026.6.35 的同一区块,只有 54 条:

unpkg 上 openclaw@2026.6.35 的 package.json,dependencies 区块仅 54 条

关于 npm 里 dependencies 字段的语义(安装期会被解析的运行时依赖)与 devDependencies 的区别,可以对照 npm 官方文档 package.json 文档;而上面这个对比里出现的两个版本号,都可以在 unpkg 上的 openclaw@2026.10.5 原始文件 与 openclaw@2026.6.35 原始文件 里逐行核对。

二、差异最剧烈的包:79 个里有 66 个版本不同

把六条线的依赖表并成一张表,逐格比对。分歧最大的这些包,任何两条线装出来的运行时都不是同一个:

依赖包 latest beta ext-stable LTS 8 月 LTS 7 月 LTS 6 月
@openclaw/ai 2026.10.5 2026.10.10-beta.2 2026.9.33 2026.8.35 2026.7.35 无
@openclaw/fs-safe 0.25.0 0.26.5 0.21.1 0.5.6 0.4.1 0.3.0
openai 7.27.0 7.28.0 7.20.0 7.5.0 6.45.0 6.39.1
@earendil-works/pi-tui 1.0.0 1.0.3 0.86.1 0.84.2 0.80.3 0.78.0
@anthropic-ai/sdk 0.131.0 0.131.0 0.127.0 0.120.0 0.109.1 0.100.1
typebox 1.3.34 1.3.35 1.3.34 1.3.17 1.3.3 1.1.39
@trycua/cua-driver 0.32.0 0.33.4 0.28.2 0.21.0 无 无
@google/genai 2.27.0 2.27.0 2.23.0 2.18.0 2.10.0 2.7.0
@modelcontextprotocol/sdk 1.32.0 1.32.1 1.31.0 1.30.0 1.29.0 1.29.0
playwright-core 1.63.0 1.63.0 1.63.0 1.62.1 1.61.1 1.60.0
@clack/prompts 1.8.1 1.8.1 1.8.1 1.7.0 1.6.0 1.4.0
@openclaw/proxyline 0.4.0 0.4.0 0.3.12 0.3.7 0.3.3 0.3.3
@agentclientprotocol/sdk 1.7.0 1.7.0 1.4.0 1.4.0 1.1.0 0.22.1

表里有三处值得单独拎出来:

第一,@openclaw/fs-safe 在 8 月线上是 0.5.6,而主线只有 0.25.0。 按常规语义,0.5.6 应该是更新的版本,但 8 月线锁的恰恰是它。这条线的版本号从 2026-09-19 的 2026.9.5 开始出现了一次归零式的重新编号(从 0.8.5 突然跳到 0.13.1、0.18.1、0.21.1、0.23.0、0.24.2、0.25.0、0.26.5),而 8 月线仍停留在重新编号之前的旧号段 0.5.6。两个号段不是同一条线上的先后关系——registry 里 @openclaw/fs-safe 共 73 个版本,0.25.0 发布于 2026-10-08,0.5.6 发布于 2026-08-14,两者并存。

第二,@agentclientprotocol/sdk 在 6 月线上是 0.22.1,主线已经是 1.7.0。 中间横跨了整个 1.x 大版本。这个包目前共 57 个版本,0.22.1 发布于 2026-05-18,1.7.0 发布于 2026-10-02。

第三,typebox 在 6 月线是 1.1.39,在主线是 1.3.34。 同一个 minor 大版本内也是两个完全不同的次版本。

这三处合起来说明一件事:latest 和 LTS 线的差异不是「同一条线的新旧两代」,而是已经分叉。用 8 月线不等于「用稍微旧一点的 latest」。

三、把六条线按时间轴摆开,漂移是可以量化的

只看一张表不容易判断”哪条线更新”。我们把每条线的每个锁定版本,回到上游 registry 查出它自身的发布时间,再和 OpenClaw 该版本的发布时间相减,得到”这条线在安装时,这个依赖已经发布多少天了”:

线(代表版本) openai @anthropic-ai/sdk @google/genai @agentclientprotocol/sdk ws
latest(2026.10.5) 16 天 17 天 16 天 16 天 22 天
beta(2026.10.10-beta.2) 14 天 18 天 16 天 16 天 22 天
extended-stable(2026.9.33) 25 天 26 天 28 天 55 天 68 天
LTS 8 月(2026.8.35) 45 天 43 天 43 天 42 天 55 天
LTS 7 月(2026.7.35) 88 天 81 天 89 天 83 天 44 天
LTS 6 月(2026.6.35) 104 天 104 天 104 天 114 天 110 天

这张表的信息量比上一张更大:

  • latest 线的滞后稳定在 14~22 天——这是一个正常的”跟随上游但不追最新”的节奏。
  • extended-stable 的 ws 滞后 68 天,@agentclientprotocol/sdk 滞后 55 天——比同一条线上的其他依赖(25~28 天)明显更旧。这不是整条线都旧,而是线内个别包被有意按住了。
  • 三条 LTS 线的滞后整体在 42~114 天之间,且越老的线越旧。6 月线的四个 AI 相关包全部滞后 104 天以上。

反过来也要说清楚:滞后不等于落后。 LTS 线的意义就是”不再追新”,所以 6 月线装到 104 天前的 openai@6.39.1 是设计意图,不是缺陷。这张表只能用来说明”你选了哪条线,就意味着接受多旧的依赖”,不能用来判断哪条线更好。

四、回补线发一次,主流线的依赖就整体回退一次

这是本次全量比对里最反直觉的一个发现。

观察 2026 年 9 月之后”上一个发布”和”这一个发布”之间的依赖变动方向:

日期 新发布 上一个发布 依赖降级数 依赖升级数
09-10 2026.6.35(LTS 6 月) 2026.9.3(主线) 29 0
09-11 2026.9.4(主线) 2026.6.35 0 29
09-18 2026.7.33(LTS 7 月) 2026.9.4 28 0
09-19 2026.9.5(主线) 2026.7.33 0 30
09-20 2026.7.34(LTS 7 月) 2026.9.5 30 0
09-28 2026.8.33(LTS 8 月) 2026.9.6 26 0
10-01 2026.8.34(LTS 8 月) 2026.9.7 28 0
10-08 2026.9.9(主线) 2026.10.1-beta.2 10 1
10-12 2026.10.2(主线稳定) 2026.10.5-beta.1 16 0
10-13 2026.10.3(主线稳定) 2026.10.5-beta.3 17 0
10-15 2026.9.33(ext-stable) 2026.10.5-beta.4 19 0
10-15 2026.10.4(主线稳定) 2026.10.10-beta.1 18 0
10-18 2026.10.5(主线稳定) 2026.10.4 0 17

看清楚这个模式:每次 LTS 回补线发一个版本,紧随其后的主线稳定版就把一大批依赖退回到更旧的版本。 10-12、10-13、10-15 三天里连续三个主线稳定版(2026.10.2 / 2026.10.3 / 2026.10.4)分别把 16、17、18 个依赖降级;等到 10-18 的 2026.10.5 才一次性把 17 个依赖全部升回最新。

我们进一步做了隔离:把”跨线切换导致的降级”(比如从 2026.9.3 的主线切到 2026.6.35 的 LTS 线)单独剔除后,全库 280 个版本里,同一版本线内部真正的降级事件只有 1 个(2026-07-18 的 2026.7.1-1 把 @openclaw/ai 从 2026.7.2-beta.2 退回 2026.7.1-1)。剩下 54 个”同线降级”事件里,53 个的共同特征是:从预发布版晋升为稳定版的那一刻发生的。

也就是说,2026.10.2 / 10.3 / 10.4 这三个稳定版不是”beta 版的自然晋升”,而是从 beta 版的依赖集合退回到一份更保守的依赖集合之后再打上稳定标签。这个模式在 2026-10-18 的 2026.10.5 上被撤销:它一次把 17 个依赖升回 beta 线的水平。

这个发现对使用者的直接影响是:如果你在 10-12 到 10-15 之间用 npm 装过 latest,你装到的是一份比 beta 线旧一档的依赖;而 10-18 之后又换成了新的。 同一个月内三次装 latest,装到的依赖集合可以完全不同。npm 官方对 dependencies 解析规则和版本范围的说明见 package.json 文档。

五、锁定层本身是稳的:^ 浮动范围已经 5 个月零出现

这里要把另一件事说清楚,否则容易被上面”依赖在变”的结论误导。

OpenClaw 从 2026-05-12 17:09 的 2026.5.12-beta.1 开始,把 dependencies 里所有 ^ 浮动范围一次性清空。我们全量核对了 280 个版本:这一天之后发布的 124 个版本里,出现 ^ 的版本数是 0 个。最后一个带 ^ 的版本是 2026-05-11 16:38 的 2026.5.10-beta.5,它在 24.5 小时后被整体替换。

那次替换的具体形态是:2026.5.10-beta.5 → 2026.5.12-beta.1 之间,依赖总数 62 → 62(无新增、无删除),但其中 41 个依赖的版本字符串被改写——绝大多数只是去掉了 ^ 前缀(ws 从 ^8.20.0 变成 8.20.0),少数几个同时升了版本(yaml 从 ^2.8.4 到 2.9.0、playwright-core 从 1.59.1 到 1.60.0、@anthropic-ai/sdk 从 0.95.1 到 0.95.2)。

这次替换的背景(pnpm.overrides 那 25 条补丁如何在 5 月 10 日被拆掉、13 小时的锁定真空)站内已有专门文章:OpenClaw 装过 25 个依赖补丁,5 月 10 日一夜之间全部撤走,本文不复述,只补一个它没覆盖的结论:那次改动之后,^ 归零的机制至今没有被打破,124 个版本、5 个月、零例外。

配套的两项旁证:

  • 最新版本 2026.10.10-beta.2 的 devDependencies 62 条,全部为精确版本,^ 数量为 0。
  • packageManager 字段曾覆盖 2026-01-30 到 2026-07-18 的连续版本(pnpm 10.23.0 一路升到 11.1.0),但在 2026.7.1-2 之后连续 43 个版本都没有这个字段。这一项的机制本文不做推断,见下文 UNKNOWN。

六、给使用者的三条可执行结论

1. 先确认自己在哪条线上,再谈版本新旧。 npm view openclaw dist-tags 只会给你三个 tag,六条线里另外三条不带 tag。在 LTS 线上装出来的东西和 latest 不是同一份依赖,这跟版本号大小无关。

2. 如果在用 LTS 线,重点核对 @openclaw/fs-safe 和 @agentclientprotocol/sdk 这两个包的版本号是否与你的预期一致。 它们是六条线里分歧最大、且号段存在重叠/断层的两个——fs-safe 的 8 月线锁在旧号段 0.5.6 而主线在 0.25.0,@agentclientprotocol/sdk 的 6 月线还在 0.22.1 而主线已到 1.7.0。核对方法是把 package.json 里这两行和你打算对比的那条线逐一比对。

3. 生产环境请锁定具体版本号,不要依赖 latest 的语义。 因为本文第四节已经证明:latest 在 2026-10-12 至 10-15 的三天里连续三次更换了依赖集合,而 tag 名始终没变。如果你的部署脚本写的是 npm install -g openclaw@latest,那这三次变更都会直接进到你的环境里。

关于 @openclaw/fs-safe 旧号段(0.3.0 / 0.4.x / 0.5.x)与新号段(0.13.x ~ 0.26.x)并存的原因、typebox 在 6 月线停在 1.1.39 的原因,以及 LTS 线的具体支持周期,站内关于 OpenClaw 版本三轨制与 LTS 编号规则的实测可以看这两篇:OpenClaw 版本三轨制首次同日齐动 和 LTS 线版本号为什么从 7.1 跳到 7.33。


信息来源与采集口径

  • 主数据源:npm registry 官方接口 registry.npmjs.org/openclaw,实测抓取时间 2026-10-19 15:03–15:12(Asia/Shanghai),响应体 20,058,783 字节,versions 字段 280 条,dist-tags = latest 2026.10.5 / extended-stable 2026.9.33 / beta 2026.10.10-beta.2。
  • 上游核对:对 openai、@anthropic-ai/sdk、@google/genai、ws、@agentclientprotocol/sdk、@openclaw/fs-safe 六个包分别取全量 registry,用 time 字段核对每个被锁版本的发布时间。所有被引用的版本号均在上游 registry 中确认存在。
  • 依赖分类口径:本文”依赖”一律指 dependencies 字段的运行时依赖,不含 devDependencies(62 条)、optionalDependencies(最新版本 84 条)、peerDependencies。
  • 降级/升级的判定:仅对两侧都是纯数字版本串的依赖做比较,按前三段数字元组比较大小;跨版本线切换与同线内变化分开统计。无法按此口径判定的条目不计入。
  • 配图 2 张均为 unpkg 上对应版本 package.json 原文页面的实际截图(2026.10.5、2026.6.35),无示意图、无占位图。
  • 本文所有数字均可按上述接口复算。registry 之外的任何信息(GitHub Actions 配置、构建脚本、回补线的内部决策)均未作为论据。

UNKNOWN(registry 元数据无法证实,不做推断)

  • UNKNOWN:@openclaw/fs-safe 的旧号段(0.3.0 ~ 0.5.6)与新号段(0.13.0 ~ 0.26.8)并存的原因——registry 只记录两个号段各自独立发布,无任何字段说明版本号策略是否变更。
  • UNKNOWN:@openclaw/ai 这个依赖为何只在 2026-07-11 之后才出现(共 48 个版本引用)——本文只能确认引入时点,无法确认是代码拆分重构还是打包方式调整。
  • UNKNOWN:2026-10-12 / 10-13 / 10-15 三个主线稳定版为何把依赖退回更旧版本——registry 只能观测到”降级了 16/17/18 个”,没有任何字段记录决策依据。
  • UNKNOWN:packageManager 字段在 2026.7.1-2 之后连续 43 个版本消失的原因——可能是改用其他 CI 方式发布,但 registry 无对应证据。
  • UNKNOWN:三条 LTS 线(6/7/8 月)的官方支持周期、终止日期与回补触发条件——dist-tags 中只有 extended-stable 一个标签指向回补线,另外两条连标签都没有。
  • UNKNOWN:openai 在 6 月线锁 6.39.1、8 月线锁 7.5.0、主线锁 7.27.0,这三条线之间是否经过兼容性验证——registry 无验证记录。
  • UNKNOWN:@agentclientprotocol/sdk 从 0.22.1 跨到 1.x 是否包含破坏性变更,以及 LTS 线是否同步了适配——本文只记录版本号差异,不推断兼容性。
  • UNKNOWN:@trycua/cua-driver、koffi、quickjs-wasi、npm、typescript 等包在各线上的”有/无”差异(例如 6 月线没有 npm、7 月线没有 @trycua/cua-driver)是否对应功能裁剪——registry 无功能映射信息。
赞(0)
未经允许不得转载:时间网 » OpenClaw 六条发布线的依赖账本:79 个包里有 66 个版本各不相同,回补线发一次、主线就整体退一档

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

登录

找回密码

注册