🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Bun 运行时兼容补丁 MonshinYu/dsh-bun-compat-patch

DeepSeek Harness
MonshinYu62 天前有提交已提供中文文档扫描:含敏感能力

让 DSH 在 Bun 上直接跑起来,无需 Node 桥接

29.8/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MonshinYu/dsh-bun-compat-patch
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · other
装得上吗
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 62 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-bun-compat-patch(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 ^0.1.1-rc.2 · 最新 0.2.1-rc.2 兼容
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 06:18:59

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
  • 删除本地文件递归
    build.ts:6
    rmSync(outdir, { recursive: true, force: true });
  • 写入本地文件
    build.ts:7
    mkdirSync(outdir, { recursive: true });
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 提供NodeAPI兼容层

为 Bundle 1.3.14 上运行 DeepSeek Harness 提供 Node API 兼容层

README

由 DeepSeek 最新模型翻译生成
DSH Bun 兼容补丁 让 DeepSeek Harness (DSH) 能在 Bun 1.3.14+ 上运行的兼容层,无需任何 Node 进程桥接。 启动时,本补丁会原地修改用户已安装的 DSH 包内的两个文件: - node_modules/@deepseek-ai/dsh-code-runtime-worker-thread/lib/index.js:把 node:module 的 import 改指向本兼容层。 - node_modules/@deepseek-ai/dsh/lib/profile-boot-.js:给 Cordis 服务端 HMR 循环加上守卫(该循环依赖 Node 内部 ESM loader hook,Bun 未提供)。 退出时所有修改会被还原,因此正常退出后用户的 node_modules 保持原样。 解决的问题 DSH 依赖若干 Node API。Bun 1.3.14 已经原生覆盖了绝大多数,但与 DSH code runtime 直接相关的缺失接口只剩一项: - node:module.stripTypeScriptTypes:Bun 的 node:module shim 没有导出该函数。
展开完整文档(README 剩余 1 节)
DSH Bun 兼容补丁

让 DeepSeek Harness (DSH) 能在 Bun 1.3.14+ 上运行的兼容层,无需任何 Node 进程桥接。

启动时,本补丁会原地修改用户已安装的 DSH 包内的两个文件:

- node_modules/@deepseek-ai/dsh-code-runtime-worker-thread/lib/index.js:把 node:module 的 import 改指向本兼容层。
- node_modules/@deepseek-ai/dsh/lib/profile-boot-.js:给 Cordis 服务端 HMR 循环加上守卫(该循环依赖 Node 内部 ESM loader hook,Bun 未提供)。

退出时所有修改会被还原,因此正常退出后用户的 node_modules 保持原样。

解决的问题

DSH 依赖若干 Node API。Bun 1.3.14 已经原生覆盖了绝大多数,但与 DSH code runtime 直接相关的缺失接口只剩一项:

- node:module.stripTypeScriptTypes:Bun 的 node:module shim 没有导出该函数。本兼容层基于 Bun.Transpiler({ loader: "ts" }).transformSync 重新实现,语义等价且同步,符合 DSH 通过 workerData 传入 TS 源码时对同步性的要求。

DSH 用到的其他 API 都由 Bun 原生覆盖:

- node:worker_threads:完全支持(Worker、workerData、parentPort、resourceLimits、stdout / stderr、eventLoopUtilization)。
- Cordis 服务端 HMR:通过环境变量守卫整体禁用,因为 Bun 缺少 Cordis 依赖的 Node 内部 ESM loader hook。

不 fork Node 进程,不要求 PATH 上有 node,不创建影子目录。

环境要求

- Bun >= 1.3.14(推荐 >= 1.4.0)。
- @deepseek-ai/dsh ^0.1.1-rc.2。

检查你的运行时:

bun --version

本补丁是针对 DSH 0.1.1-rc.2 的构建产物编写的。升级 Bun 或 DSH 后,请重新验证补丁逻辑是否仍然适用。

安装

在同一个项目里与 DSH 一起安装:

bun add -d dsh-bun-compat-patch
bun add @deepseek-ai/dsh
bun run build

bun run build 会在 ./lib/ 下产出 {preload,node-module}.js(以及对应的 .map source map)。

使用方式

通过 Bun 加载兼容层启动 DSH:

bun --preload ./lib/preload.js ./node_modules/@deepseek-ai/dsh/lib/bin.js web --port 39881

preload 会识别 DSH 入口文件、原地打补丁、把 DSH 作为 Bun 子进程拉起、转发 SIGINT / SIGTERM,最后在退出前还原所有改动。

环境变量

| 变量 | 设置方 | 作用 |
| DSH_BUN_COMPAT_CHILD | preload | 标记被 spawn 出的子进程,使 preload 在子进程中变为 no-op,避免递归打补丁。 |
| DSH_BUN_COMPAT_DISABLE_HMR | preload | 让被 patch 的 profile-boot-.js 跳过 Cordis HMR 循环。 |
| DSH_BUN_COMPAT_LIB | preload(可选) | 覆盖 lib/node-module.js 所在目录的路径。preload 默认从 import.meta.dir 向上搜索。 |
| DSH_BUN_COMPAT_DEBUG | 用户 | 设置后会把任何未捕获错误(包括 cause 和聚合的 errors[])以缩进树形结构打到 stderr。 |

原地补丁的工作机制

1. prepareInPlacePatch 读取 dsh-code-runtime-worker-thread/lib/index.js,把原始字节备份到 $TMPDIR/dsh-bun-compat-patch-backup-/index.js.bak,然后把 from "node:module" 重写为 from "/node-module.js"(通过 file:// URL)。文件首部加上一行标记注释,第二次启动可以识别出该文件已被打过补丁,跳过重复打补丁。
2. patchHmrGuards 遍历所有 dsh/lib/profile-boot-.js,把现成的 if (!signalShutdown.signal.aborted && ctx.fiber.state === 2 && ctx.get("loader") !== void 0) try { 守卫前面加上 !process.env.DSH_BUN_COMPAT_DISABLE_HMR &&,使 HMR 循环在 Bun 下短路。
3. 无论正常退出、信号触发还是 process.exit,restorePatch 都会遍历所有备份,把原字节写回,然后删除备份目录。

如果父进程在清理前被杀掉(kill -9、断电等),下一次启动会看到 DSH 文件上的标记注释,但本次没有对应备份 → 跳过重打补丁,文件保持已 patch 状态。这种情况下用户需要重装 DSH(或手动还原文件)。把任何对父进程的 kill -9 都视为让 DSH 处于脏状态。

项目结构

src/
preload.ts # Bun --preload 入口;负责协调打补丁 + spawn 子进程 node-module.ts # 基于 Bun.Transpiler 的 stripTypeScriptTypes 实现 shadow.ts # 原地 patch / 还原 / HMR 守卫辅助函数 diagnostic.ts # 可选的未捕获错误树打印(受环境变量开关) build.ts # 打包 preload 并把 node-module.js 输出到 ./lib tsconfig.json # 严格模式 TS,noEmit,noUnusedLocals / noUnusedParameters

构建仅向 ./lib/ 输出两个文件:

- preload.js:与 shadow.ts、diagnostic.ts 一起内联打包。
- node-module.js:独立文件,被 patch 后的 DSH 入口通过 file:// URL 引用。

脚本

| 脚本 | 作用 |
| bun run build | 从 ./src 构建 ./lib。 |
| bun run typecheck | tsc --noEmit,按严格 tsconfig 检查类型。 |
| bun run pack | bun pm pack,生成 npm tarball。 |

许可证

MIT。
预览分享卡片长什么样 ↓MonshinYu/dsh-bun-compat-patch
分享 · DeepSeek Harness Hub
MonshinYu/dsh-bun-compat-patch

让 DSH 在 Bun 上直接跑起来,无需 Node 桥接

这是你的仓库?认领条目

回到顶部