DSH plugin add 安装 Git 插件失败却提示 allowBuilds?DeepSeek Harness 排查
DSH plugin add 安装 Git 插件失败后提示你改 allowBuilds,但这个提示往往是误报——它只看命令长得像不像 Git 地址,不看你实际死在网络还是构建策略上。 先看 pnpm 的原始报错,再决定要不要动 allowBuilds:网络问题改它没用。
DSH plugin add 报错却提示 allowBuilds:症状与误报原因
典型场景是 dsh plugin --profile <name> add git+https://… 这类 Git 安装:pnpm 还没拉到仓库就失败,DSH 却接着提示「Git 插件通过 prepare 构建,请编辑 allowBuilds」。 有用户实跑遇到(讨论原文),环境为 DSH 0.1.1-rc.2、Node 24、Windows,过程如下:
- 执行
dsh plugin --profile web add git+https://github.com/your-repo.git; - 终端先出现 pnpm 报错
ERR_PNPM_GIT_FETCH_FAILED、Failed to connect to github.com port 443: Timed out; - 紧接着 DSH 提示去编辑 allowBuilds——但仓库根本没下载,prepare 构建一步都没执行。
关键点:pnpm 自己的报错没有被吞掉(安装子进程原样输出 stderr),报错码是判断方向的唯一可靠依据。而 allowBuilds 提示是 DSH CLI 的诊断逻辑选的——它只看命令参数是不是 Git 形状(git+ / github: / .git),既不读退出码也不读 ERR_PNPM_* 码,所以网络失败也会被套上构建策略的提示(plugin.ts 源码)。
DSH 插件安装报错怎么判断:网络失败还是构建策略失败
判断方法只有一个:读 pnpm 原始报错里的错误码。 两类报错码对应两条完全不同的修复路径:
| pnpm 报错码 | 含义 | 改 allowBuilds 有用吗 |
|---|---|---|
ERR_PNPM_GIT_FETCH_FAILED | 仓库没下载成功(网络/超时) | 没用 |
Failed to connect … port 443: Timed out | 连不上 github.com | 没用 |
ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED | Git 依赖的 prepare 脚本被构建策略拦截 | 有用 |
ERR_PNPM_IGNORED_BUILDS | 包带安装脚本被构建策略忽略 | 有用 |
反向情况也值得知道:纯 npm 包因构建策略失败时,反而不提示 allowBuilds。比如某依赖链(pi-ai → genai client → protobufjs)携带安装脚本被 pnpm 拦截,首个报错就是 ERR_PNPM_IGNORED_BUILDS,但因为它不是 Git 形状的命令,提示被抑制——真正需要 allowBuilds 提示的用户反而看不到(讨论回复)。
DSH plugin 安装重试:网络问题修网络,构建策略才动 allowBuilds
网络类失败:先修连接,再重试安装,不要改 allowBuilds。 按步骤排查:
- 确认网络本身可达:终端执行:
curl -I --max-time 10 https://github.com
应返回 HTTP 状态行(200 或 3xx),超时或失败即网络问题;
2. 检查代理:DSH 安装子进程会读取系统代理与 HTTPS_PROXY 环境变量,先确认浏览器能打开 GitHub、系统代理正常,再用环境变量核对代理配置:
env | grep -i proxy
- 网络恢复后重试:再次执行原安装命令,pnpm 报错消失、进入安装流程即成功:
dsh plugin --profile <name> add git+https://github.com/your-repo.git
- 无法直连 github.com 的网络环境,改用 npm 镜像或国内可达的仓库镜像地址,或改装 npm 分发的插件。
构建策略类失败:才需要动 allowBuilds。 只有看到 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS 才按 DSH 提示编辑 allowBuilds(把对应包加入白名单),保存后重跑安装。
allowBuilds 误报修复进度:DeepSeek Harness 补丁等官方合入
这个误报已被社区定位到根因并修好,补丁分支待官方合入。 作者 adoresever 按 ERR_PNPM_* 报错码重写了提示门控(补丁分支):
- 只有 stderr 包含
ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED或ERR_PNPM_IGNORED_BUILDS才提示 allowBuilds; ERR_PNPM_GIT_FETCH_FAILED等网络失败不再提示;- 已通过构建后 CLI 回归测试(Git 网络失败 / Git 构建策略失败 / npm 构建策略失败三种场景 19/19 通过);
- 因上游限制外部 PR 创建,补丁等维护者拉取或 cherry-pick——官方合入前,按本文判断报错码即可绕开误报。
命令行装插件最容易在「源 + 网络」这一步踩坑,误报还会把人带偏去改 allowBuilds。如果不想跟这些报错打交道,DeepSeek Harness 桌面端内置了官方插件中心 DSH Plugin Hub(dsh-plugin.org)——可视化浏览、一键安装/卸载/更新,安装过程有确认弹窗和系统日志,遇到失败能直接看到是哪一步出的错。
注意事项
- 网络失败先修网络,别动 allowBuilds——改了也没用,还可能把安全白名单改宽。
- 判断依据以 pnpm 原始报错码为准,不以上面的 allowBuilds 提示为准。
- 补丁合入前可留意 DeepSeek Harness Release Notes,确认新版本是否包含该修复。
来源:Discussion #4702、apps/cli/src/plugin.ts、补丁分支 fix/plugin-build-policy-diagnostic
常见问题
这是 DSH CLI 的诊断缺陷:提示只看命令参数是不是 Git 形状(git+ / github: / .git),不读 pnpm 实际退出码。网络超时(ERR_PNPM_GIT_FETCH_FAILED)根本没走到构建阶段,也会被误判为需要改 allowBuilds(来源)。
看 pnpm 的原始报错码:ERR_PNPM_GIT_FETCH_FAILED 或 Failed to connect … Timed out 是网络;ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS 才是构建策略。pnpm 报错会原样输出在终端里,改 allowBuilds 只对后者有效。
社区已出补丁分支 fix/plugin-build-policy-diagnostic(来源):只有构建策略报错码才提示 allowBuilds,网络失败不再提示,E2E 19/19 通过,等待官方合入后更新版本即可。
先修网络再重试:curl -I --max-time 10 https://github.com 确认能访问 github.com,env | grep -i proxy 检查系统代理与 HTTPS_PROXY 环境变量,网络恢复后重新执行 dsh plugin add,pnpm 报错消失即成功;无法直连的网络环境改用 npm 镜像或改装 npm 分发的插件。
来源
- deepseek-harness Discussion #4702:plugin: avoid allowBuilds hint for unrelated Git fetch failures· deepseek-ai(GitHub Discussions)
- deepseek-harness apps/cli/src/plugin.ts(DSH plugin add 诊断提示门控)· deepseek-ai
- 补丁分支 fix/plugin-build-policy-diagnostic(按 ERR_PNPM_* 报错码重写提示门控)· adoresever