[Bug] npx @deepseek-ai/dsh web 无限卡死:npm 依赖解析死循环(CPU 100%、零网络流量、换镜像无效) #3786
Replies: 3 comments
|
牛逼,刚刚遇见这个问题上网搜就看见你了 |
|
我也卡死了,问AI然后它和它测试半天,GPT5.6建议我发过来详细情况: 我在 Windows 上复现了这个问题,并做了一组 A/B 对照测试。目前结果强烈指向 npm 的 peer dependency resolution / Arborist idealTree 阶段,而不是网络、npm cache 或 DSH 实际启动阶段。 环境
原始现象执行: 或者单独测试: 均可以复现。 表现为:
已测试并基本排除:
关键 A/B 测试随后保持所有环境完全相同,只增加: 完整测试命令: 结果立即从“无限卡死 + 内存持续上涨”变为正常完成: 也就是说: 由于唯一关键变量是 peer dependency resolution,这似乎可以较强地说明问题发生在 npm Arborist 构造 DSH dependency / peerDependency graph 的过程中。 怀疑方向仓库中此前已经有人报告过内部 package graph 存在 cyclic peer/workspace dependencies,例如 Cordis 相关包之间的环。 因此怀疑当前 @deepseek-ai/dsh@0.1.0-rc.6 发布包中的大量 peerDependencies / cyclic peer graph,在 npm 11 Arborist 下触发了极端 dependency resolution 行为:
建议官方检查建议使用 Windows + Node 24 + npm 11 对发布后的 npm tarball 做 clean-environment smoke test,而不仅仅测试 pnpm workspace。 特别建议测试: 并监控:
目前 |
更新:0.1.1-rc.2 依然卡死,但这次拿到了根因实锤 + 两个已验证可用的规避方案感谢 @i-nekoo 的 A 和 B 对照测试,结论与我的最新复现完全一致。补充今天的新发现: 1. 根因实锤:peer dependencies 回溯是死循环的引擎在 0.1.1-rc.2 上再次复现卡死后,我做了关键对照实验:
跳过 peer 解析就不再卡死——死循环的引擎就是 Arborist 对这棵 peer 依赖树的摆放回溯。 2. 但 --legacy-peer-deps 单用会崩:缺 19 个“纯 peer 包”dsh 生态的子包共声明了 110 个 peerDependencies,其中 19 个只以 peer 形式存在(没有任何包把它们列为常规依赖),跳过 peer 解析后它们不会被安装,启动时直接: 缺失的 19 个包: 这 110 个 peer(多为 3. 为什么症状会“变来变去”(同一个 bug 的三种形态)
清缓存、换镜像对此永远无效——问题在解析算法不在网络。 4. 两个已验证可用的规避方案(Windows 11 + Node 24 + npm 11.17 实测,dsh web 成功启动、127.0.0.1:3080 返回 200)方案 A:pnpm(推荐) pnpm dlx @deepseek-ai/dsh web方案 B:纯 npm——把 dsh + 上述 19 个缺失 peer 显式写成直接依赖,再用 npm install @deepseek-ai/dsh @deepseek-ai/cordis-plugin-group @deepseek-ai/dsh-anonymous-user-id @deepseek-ai/dsh-atomic-write @deepseek-ai/dsh-authorization @deepseek-ai/dsh-bash-local @deepseek-ai/dsh-code-runtime @deepseek-ai/dsh-compaction @deepseek-ai/dsh-fs @deepseek-ai/dsh-invariants @deepseek-ai/dsh-output-retention @deepseek-ai/dsh-sandbox @deepseek-ai/dsh-scope @deepseek-ai/dsh-session-telemetry @deepseek-ai/dsh-session-title-llm @deepseek-ai/dsh-shell @deepseek-ai/dsh-spill @deepseek-ai/dsh-subagent-in-process-driver @deepseek-ai/dsh-timeout @deepseek-ai/dsh-workflow --legacy-peer-deps
node_modules/.bin/dsh web(447 个包约 2 分钟装完,无卡死) 5. 给官方的建议(更新)
|
Uh oh!
There was an error while loading. Please reload this page.
环境
现象
npx @deepseek-ai/dsh web无限卡死:npm install -g @deepseek-ai/dsh走同一套解析器,同样卡死。诊断过程
用
npx --loglevel verbose @deepseek-ai/dsh web复现,观察到:日志最后两行(此后再无输出):
可能的根因
注意上面的版本组合:根包 dsh 解析到 rc.7(latest tag),但它的 ^0.1.0-rc.7 依赖全部解析到了已发布的 rc.8。rc.7 根 + rc.8 子包的混合依赖树,叠加 70+ 个互相以 peer dependency 引用的子包,疑似触发 npm Arborist 解析器的指数级回溯(组合爆炸),导致解析永远无法收敛。
pnpm 解析同一棵树完全没有问题(见下),说明问题出在 npm 解析器与这种依赖结构的组合上。
佐证:pnpm 完全正常
同一台机器上:
512 个包正常解析、下载、安装,dsh 成功启动,http://127.0.0.1:3080 返回 200。
另外:8 月 20 日(rc.8 子包陆续发布前后)npx 还能正常安装运行(本机有成功运行的历史缓存),之后同样命令开始卡死,怀疑是 rc.8 子包发布后依赖树变化引入的回归。
临时规避
建议
All reactions