常见问题与排障

August 15, 2026 · View on GitHub

本页记录 DSH-Code 安装、启动和插件加载时最常见的问题。开始排查前,请确认 Node.js 版本符合 ^22.19 || >=24,并使用 dsh --profile cli 启动。

Linux:Failed to load native module: pty.node

现象

启动时出现类似错误:

Failed to load native module: pty.node
Cannot find module './prebuilds/linux-x64/pty.node'

这类错误最外层常表现为插件树加载失败;真正的根因是 node-pty 找不到自己的原生二进制 pty.node

原因

DSH 的本地子进程插件依赖 node-pty@1.1.0。在 Linux x64、Node 24 等没有匹配预构建二进制的环境中,它本应回退到 node-gyp 源码编译;但全局安装链路可能在编译失败后仍显示安装成功,留下缺失的 pty.node。这与 DeepSeek Harness 已报告的问题一致。上游讨论 #1219

Node v24.19.0 本身仍处于 DSH 当前声明的 Node 支持范围内,不必先为了此问题降级 Node。上游讨论 #649

解决

先安装构建环境。Ubuntu/Debian:

sudo apt update
sudo apt install -y build-essential python3 make g++

node-pty 官方将 Linux 编译前提列为 make、Python 与 build-essential;上面的命令显式安装了这些工具。node-pty 构建说明

然后进入当前全局 DSH 安装所使用的 node-pty,手动重新构建:

cd "$(npm root -g)/@deepseek-ai/dsh/node_modules/node-pty"
npx node-gyp rebuild

成功时输出末尾应出现 gyp info ok。确认构建产物已生成:

ls -lh build/Release/pty.node

最后重新启动 DSH:

dsh --profile cli --help

也可以使用 dsh web 验证 Web UI。只要 build/Release/pty.node 存在且命令可启动,即表示原生模块已可加载。

若最初的安装日志明确提示安装脚本被拦截,请先按 npm 输出的 --allow-scripts 提示重新安装 DSH,再执行上面的手动构建。授权脚本是允许自动构建的前提,但在此故障中不能替代手动 node-gyp rebuild

如果 npx node-gyp rebuild 仍失败,请保留从 gyp info using node-gyp 到最后一条 gyp ERR! 的完整输出;其中的 Python not foundmake not foundg++ not found 或 Node 头文件下载失败,分别对应不同的环境修复路径。

GitHub 源码安装:pnpm 要求 allowBuilds

现象

执行:

dsh plugin --profile cli add github:unlinearity/dsh-code

pnpm 报告 Git 依赖的 prepare 脚本未获许可,或要求在 pnpm-workspace.yaml 中配置 allowBuilds

原因

GitHub 安装使用仓库源码,不包含发布包中的 lib/ 构建产物。DSH-Code 会在 Git 包的 prepare 阶段构建它;pnpm 需要对此构建步骤显式授权。

解决

将 pnpm 输出的 完整 allowBuilds 条目复制到 profile 的配置文件,然后重新执行同一条安装命令:

~/.dsh/profiles/cli/pnpm-workspace.yaml

该键会包含 Git URL 和 commit,例如:

allowBuilds:
  dsh-code@git+https://github.com/unlinearity/dsh-code.git#<commit>: true

不要将它简化成 dsh-code: true;pnpm 校验的是带来源与版本的完整键。Windows 上对应的文件位于 %USERPROFILE%\\.dsh\\profiles\\cli\\pnpm-workspace.yaml

验证:

dsh --profile cli --dump-config

输出中应能看到 dsh-code/startup

GitHub 安装出现 ERR_PNPM_ENOENT 或临时目录错误

现象

pnpm 在 dsh-code_tmp_* 目录中报 ENOENT,例如无法扫描 node_modules

原因

这通常是 Git 包的准备阶段未完成:旧版本的源码包没有在安装时构建 lib/,或者 pnpm 因未授予 allowBuilds 而跳过了构建。

解决

  1. 先按上一节授予 pnpm 输出的完整 allowBuilds 条目。
  2. 确认使用的是包含 Git 安装修复的 DSH-Code 提交。
  3. 重新执行 GitHub 安装命令。

若只是使用 DSH-Code,而非参与源码开发,推荐改用 npm 发布包:

dsh plugin --profile cli add dsh-code

发布包已包含运行所需的构建产物,不需要 Git 包的准备阶段。

找不到 pnpm

现象

DSH 启动时显示:

dsh: pnpm not found on PATH — install pnpm to manage profile plugins

解决

npm install -g pnpm
pnpm --version

重新打开终端后再执行 DSH。若 pnpm --version 仍不可用,请检查 npm 的全局 bin 目录是否已加入 PATH

插件安装后仍无法启动

先检查 profile 是否已加载 DSH-Code:

dsh --profile cli --dump-config

再检查基础 CLI 和插件版本:

dsh --version
pnpm --version

如仍无法定位,请附上完整的安装输出、dsh --profile cli --dump-config 输出,以及系统、架构和 Node.js 版本信息后提交 Issue。不要只截取最后一行错误;原生模块和 pnpm 问题通常需要前面的安装日志来判断原因。