dsh-purge无盘符路径检测实战:跨Web/桌面/官方EXE三种宿主如何精确定位DSH_HOME
【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐项目地址: https://gitcode.com/gh_mirrors/ds/dsh-purge
dsh-purge是 DeepSeek Harness 的本地红队评估插件,它的第一道关卡就是找到 Harness 的数据根目录DSH_HOME:提示词补丁、规则集、Skill 全部落在这个目录下。它不写死任何盘符,而是按固定优先级自动探测,让同一套代码在 Web 宿主、桌面端、官方 EXE 三种形态下都能精确命中。本文带你实战看懂这条检测链。
什么是 DSH_HOME:为什么不能写死路径
DSH 的数据目录因安装方式而异:
- Web/CLI 安装:npm 全局安装后,
.dsh可能紧挨着dsh启动器(绿色目录、自定义 prefix); - 桌面端 / 官方 EXE:数据可能放在 EXE 旁边、
AppData或 macOS 的应用支持目录; - 手动迁移:用户可能通过环境变量
DSH_HOME显式指定。
如果代码里写死C:\Users\...\dsh,换一台机器就全盘失效。因此 dsh-purge 采用"无盘符路径检测"策略:按优先级逐层候选,谁存在用谁,核心入口是 findDshHome。
四级检测链:DSH_HOME 定位的完整顺序
findDshHome的判定顺序只有一条主线:
| 优先级 | 检测项 | 适用宿主 | 源码 |
|---|---|---|---|
| 1 | 环境变量DSH_HOME | 全部 | core.js#L1419-L1420 |
| 2 | 桌面安装目录旁.dsh/dsh-home | 桌面端、官方 EXE | core.js#L1421-L1426 |
| 3 | dsh启动器旁的.dsh(便携目录) | Web / CLI | core.js#L1429-L1432 |
| 4 | ~/.dsh,含 WSL 回退 Windows | 全部兜底 | core.js#L1433-L1437 |
判定一个目录是否"长得像" DSH_HOME,只需看目录名是否为.dsh或dsh-home,见 isDshHomeDir。整个过程不出现任何盘符字面量,Windows、macOS、Linux 通用。
Web/CLI 宿主:启动器旁检测(便携模式)
Web 宿主的检测分两步:
- 找启动器目录findShimDir:从
PATH里定位dsh可执行文件所在目录,Windows 上刻意不调用where.exe(避免闪控制台),非 Windows 走command -v dsh。 - 沿祖先目录找
.dshportableHomeFromLauncher:依次检查启动器目录本身、上一级、上两级(npm prefix 场景),命中.dsh即返回。
这意味着你把整个 Harness 挪到D:\tools\dsh\并把.dsh放在旁边,插件照样能跟着走——这就是"无盘符便携"的关键。npm 覆盖node_modules后,reapply 会在重启时依据同一套检测重新应用补丁,无需手改路径。
桌面端与官方 EXE:进程旁 + AppData + 注册表
桌面形态的识别靠 detectSurface:检查进程名是否为DeepSeek Harness.exe/DSH Desktop、resourcesPath是否落在resources/树内等特征(surface.js#L18-L36),避免把同名 monorepo 仓库误判为桌面安装。
识别为桌面宿主后,desktopHomeCandidates 按序生成候选:
- EXE 所在目录(
findDesktopAppExecutable)及其下一级的.dsh/dsh-home; process.resourcesPath反推的安装树;- listDesktopInstallRoots 汇总的安装根:EXE 旁目录、注册表(
DisplayIcon/UninstallString反查)、Local\Programs\DSH Desktop、Program Files\DeepSeek Harness等常见位置(desktop.js#L253-L275); - 固定猜测目录 desktopDshHomeGuesses:Windows 的
%APPDATA%/DeepSeek Harness/dsh-home、%LOCALAPPDATA%/...,macOS 的~/Library/Application Support/DeepSeek Harness/dsh-home。
官方 EXE 更新场景(official-update.js)在重启时改跑deepseek-harness-<版本>-win-x64.exe安装包,装完再解开 asar 重新打补丁,期间DSH_HOME始终指向旧目录,数据不丢。
WSL 互操作:一个容易漏掉的兜底
在 WSL 里跑 Web 宿主时,~/.dsh并不存在,真正的数据在 Windows 侧。findWslWindowsDshHome 会检测/mnt/c/Users是否存在(或WSL_DISTRO_NAME已设置),逐个用户名目录找.dsh,命中即返回——盘符C:被抽象成了挂载点,代码里依旧没有写死任何字母盘。
验证检测是否生效
- 会话内执行
/status一类命令,输出里会直接打印当前解析到的DSH_HOME(index.js#L113); - 红队相关配置统一读
process.env.DSH_HOME || ~/.dsh,如 redteamRoot,与主检测链保持一致; - 若怀疑宿主误判,可显式导出
DSH_HOME强制命中第一优先级,这是排查问题最快的手段。
常见问题
Q:我改了 Harness 安装目录,补丁会失效吗?不会。Apply 之后宿主重启会走 reapply 复检路径,检测链重新定位新目录即可。
Q:为什么桌面端不借用 Web 启动器旁的.dsh?findDshHome 中桌面宿主只走桌面候选链,避免把 Web 与桌面的数据串在一起——这也是"精确定位"的一部分。
Q:环境变量和自动检测冲突时听谁的?永远听DSH_HOME环境变量,它在第 1 优先级直接短路返回。
小结
dsh-purge 的路径检测设计可以浓缩成一句话:环境变量优先,宿主特征决定候选集,目录名校验兜底,全程零盘符硬编码。理解 findDshHome 这条四级链,你就能在任何安装形态下预判 DSH_HOME 的落点,也为自研跨宿主插件提供了可直接借鉴的路径解析范式。
【免费下载链接】dsh-purgeDeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐项目地址: https://gitcode.com/gh_mirrors/ds/dsh-purge
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考