按模型切换提示词,重写宿主策略做可控评测
29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/canyexiren/dsh-purge.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 238 处,展示前 118 条)
- 发起网络请求client.js:59
const r = await fetch(apiUrl(p), Object.assign({ cache: "no-store", credentials: "same-origin", signal: ctrl.signal }, init || {})); - 发起网络请求client.js:1564
fetch("/dsh-purge/" + action, { - 发起网络请求client.js:1653
fetch("/dsh-purge/override", { - 发起网络请求client.js:1723
fetch("/", { cache: "no-store", credentials: "same-origin" }) - 发起网络请求client.js:1965
fetch("/dsh-purge/own-servers", { - 发起网络请求client.js:2583
fetch("/dsh-purge/status", { cache: "no-store", credentials: "same-origin" }) - 写入剪贴板client.js:4090
await navigator.clipboard.writeText(value) - 读取本地文件lib/redteam/index.js:55
if (!existsSync(paths.setupScript)) return { action: 'missing', path: target } - 读取本地文件lib/redteam/index.js:58
wanted = readFileSync(paths.setupScript, 'utf8') - 写入本地文件lib/redteam/index.js:63
mkdirSync(redteamDataDir(), { recursive: true }) - 读取本地文件lib/redteam/index.js:64
if (existsSync(target)) { - 读取本地文件lib/redteam/index.js:66
try { current = readFileSync(target, 'utf8') } catch { current = '' } - 写入本地文件lib/redteam/index.js:69
try { chmodSync(target, 0o755) } catch { } - 写入本地文件lib/redteam/index.js:72
writeFileSync(target, wanted, { encoding: 'utf8', mode: 0o755 }) - 写入本地文件lib/redteam/index.js:75
writeFileSync(target, wanted, { encoding: 'utf8', mode: 0o755 }) - 读取本地文件lib/redteam/index.js:137
if (!existsSync(paths.skills)) return { action: 'missing', path: target, copied: 0 } - 写入本地文件lib/redteam/index.js:138
mkdirSync(target, { recursive: true }) - 读取本地文件lib/redteam/index.js:140
for (const file of readdirSync(paths.skills)) { - 写入本地文件lib/redteam/index.js:147
writeFileSync(dest, wanted) - 读取本地文件lib/redteam/store.js:46
const pkg = JSON.parse(readFileSync(new URL(rel, import.meta.url), 'utf8')) - 读取本地文件lib/redteam/ui.js:60
if (!existsSync(raw)) continue - 读取本地文件lib/redteam/ui.js:62
const md = readdirSync(real).filter((f) => f.endsWith('.md')) - 读取本地文件lib/redteam/ui.js:128
const left = existsSync(a) ? realpathSync(a) : resolve(a) - 读取本地文件lib/redteam/ui.js:129
const right = existsSync(b) ? realpathSync(b) : resolve(b) - 读取本地文件lib/redteam/ui.js:161
const cwd = typeof options.cwd === 'string' && options.cwd !== '' && existsSync(options.cwd) ? options.cwd : undefined - 执行外部命令来自配置/变量lib/redteam/ui.js:162
child = spawn(command, args, { - 读取本地文件lib/redteam/ui.js:233
return JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')) - 写入本地文件lib/redteam/ui.js:422
mkdirSync(root, { recursive: true }) - 写入本地文件lib/redteam/ui.js:425
writeFileSync(scriptPath, restartScript(process.pid, port, command, rest, logPath, process.cwd()), { encoding: 'utf8', mode: 0o755 }) - 执行外部命令来自配置/变量lib/redteam/ui.js:426
const child = spawn(process.execPath, [scriptPath], { detached: true, stdio: 'ignore' }) - 读取本地文件lib/redteam/tools.js:72
if (!pkg || !existsSync(pkg)) continue - 读取本地文件lib/redteam/tools.js:481
if (existsSync(envFile)) { - 读取本地文件lib/redteam/tools.js:501
if (existsSync(toolkit)) { - 读取本地文件lib/redteam/tools.js:510
const hasMarker = existsSync(markerFile) - 读取本地文件lib/redteam/tools.js:511
const hasSetupScript = existsSync(setupScript) - 读取本地文件lib/redteam/tools.js:516
const hasVps = existsSync(vpsKey) - 执行外部命令来自配置/变量lib/core.js:116
return execFileSync(bin, args, HIDDEN_EXEC).trim(); - 执行外部命令固定命令lib/core.js:1123
execFileSync("schtasks", ["/Query", "/TN", "DSH Doctor Supervisor"], { - 执行外部命令固定命令lib/core.js:1133
execFileSync("schtasks", ["/Delete", "/F", "/TN", "DSH Doctor Supervisor"], { - 执行外部命令来自配置/变量lib/core.js:7418
const child = spawn(cmd, args, { - 执行外部命令固定命令lib/skills.js:409
const result = spawnSync("tar", ["-tf", archivePath], { - 执行外部命令固定命令lib/skills.js:416
const unzip = spawnSync("unzip", ["-Z1", archivePath], { - 执行外部命令固定命令lib/skills.js:447
const result = spawnSync("tar", ["-xf", archivePath, "-C", dest], { - 执行外部命令固定命令lib/update.js:243
execFileSync("git", ["-C", dir, "rev-parse", "--is-inside-work-tree"], HIDDEN); - 执行外部命令固定命令lib/update.js:256
return execFileSync("git", ["-C", dir, "rev-parse", "HEAD"], HIDDEN).trim(); - 发起网络请求lib/update.js:401
const req = lib.request(parsed, { - 执行外部命令固定命令lib/update.js:797
const out = execFileSync( - 执行外部命令固定命令lib/update.js:821
return execFileSync("git", ["-C", dir, ...args], { - 执行外部命令来自配置/变量lib/update.js:927
run = spawnSync(process.execPath, ["--expose-internals", cli], { - 读取本地文件lib/redteam/role-section.js:96
const id = safeEngagementId(readFileSync(join(root, 'current'), 'utf8')) - 读取本地文件lib/redteam/role-section.js:98
if (!existsSync(join(root, 'engagements', id, 'agents'))) return '' - 读取本地文件lib/redteam/role-section.js:110
if (!existsSync(path)) return '' - 读取本地文件lib/redteam/role-section.js:111
return readFileSync(path, 'utf8').trim() - 读取本地文件lib/drill-grant.js:15
if (!existsSync(file)) return { granted: false, path: file }; - 读取本地文件lib/drill-grant.js:17
const raw = JSON.parse(readFileSync(file, "utf8")); - 写入本地文件lib/drill-grant.js:30
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件lib/drill-grant.js:33
writeFileSync(tmp, `${JSON.stringify({ granted: true, at }, null, 2)}\n`, "utf8"); - 读取本地文件lib/drill-grant.js:35
if (existsSync(file)) unlinkSync(file); - 删除本地文件lib/drill-grant.js:35
if (existsSync(file)) unlinkSync(file); - 写入本地文件lib/drill-grant.js:36
renameSync(tmp, file); - 删除本地文件lib/drill-grant.js:38
try { unlinkSync(tmp); } catch { } - 读取本地文件lib/drill-grant.js:47
if (!existsSync(file)) return false; - 删除本地文件lib/drill-grant.js:48
unlinkSync(file); - 读取本地文件lib/redteam/preset-composition.js:392
return readFileSync(join(dir, name), "utf8"); - 读取本地文件lib/redteam/store-core.js:164
if (!existsSync(path)) return undefined - 读取本地文件lib/redteam/store-core.js:166
for (const line of readFileSync(path, 'utf8').split('\n')) { - 写入本地文件lib/redteam/store-core.js:185
writeFileSync(path, lines.join('\n') + '\n', 'utf8') - 写入本地文件lib/redteam/store-core.js:942
mkdirSync(this.engagementsDir, { recursive: true }) - 读取本地文件lib/redteam/store-core.js:951
const raw = readFileSync(this.currentPath(), 'utf8').trim() - 读取本地文件lib/redteam/store-core.js:952
if (raw && existsSync(this.dbPathOf(raw))) return raw - 读取本地文件lib/redteam/store-core.js:960
if (!id || !existsSync(this.dbPathOf(id))) return false - 写入本地文件lib/redteam/store-core.js:961
mkdirSync(this.root, { recursive: true }) - 写入本地文件lib/redteam/store-core.js:962
writeFileSync(this.currentPath(), String(id), 'utf8') - 读取本地文件lib/redteam/store-core.js:981
if (!existsSync(this.dbPathOf(id))) { - 写入本地文件lib/redteam/store-core.js:983
mkdirSync(this.dirOf(id), { recursive: true }) - 写入本地文件lib/redteam/store-core.js:1008
mkdirSync(this.engagementsDir, { recursive: true }) - 发起网络请求lib/redteam/store-core.js:3995
const res = await fetch(s.url, { method: 'GET', redirect: 'manual', signal: controller.signal }) - 删除本地文件lib/redteam/store-core.js:4348
if (existsSync(p)) rmSync(p, { force: true }) - 删除本地文件递归lib/redteam/store-core.js:4843
rmSync(dir, { recursive: true, force: true }) - 读取本地文件lib/redteam/skill-availability.js:94
try { names = readdirSync(dir) } catch { continue } - 读取本地文件lib/redteam/skill-availability.js:101
try { content = readFileSync(filePath, 'utf8') } catch { content = '' } - 读取本地文件lib/redteam/skill-availability.js:136
try { entries = readdirSync(dir, { withFileTypes: true }) } catch { return [] } - 读取本地文件lib/redteam/skill-availability.js:152
if (seen.has(name) || !existsSync(filePath)) continue - 读取本地文件lib/redteam/skill-availability.js:154
try { content = readFileSync(filePath, 'utf8') } catch { continue } - 读取本地文件lib/redteam/skill-availability.js:198
try { if (existsSync(file)) return { path: file, content: readFileSync(file, 'utf8') } } catch { } - 读取本地文件lib/redteam/settings.js:28
if (!existsSync(settingsPathOf(root))) return {} - 读取本地文件lib/redteam/settings.js:29
const parsed = JSON.parse(readFileSync(settingsPathOf(root), 'utf8')) - 写入本地文件lib/redteam/settings.js:37
mkdirSync(String(root || '.'), { recursive: true }) - 写入本地文件lib/redteam/settings.js:38
writeFileSync(settingsPathOf(root), JSON.stringify(next, null, 2) + '\n', 'utf8') - 读取本地文件lib/redteam/platform-config.js:87
if (!existsSync(file)) return Object.assign({}, base, { path: file, exists: false }) - 读取本地文件lib/redteam/platform-config.js:89
const raw = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件lib/redteam/platform-config.js:121
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/redteam/platform-config.js:148
writeFileSync(file, JSON.stringify(next, null, 2), 'utf8') - 读取本地文件lib/redteam/platform-config.js:162
if (c.nucleiTemplatesDir && existsSync(c.nucleiTemplatesDir)) return resolve(c.nucleiTemplatesDir) - 读取本地文件lib/redteam/platform-config.js:187
if (!dir || !existsSync(dir)) return null - 读取本地文件lib/redteam/platform-config.js:191
if (existsSync(p)) { - 读取本地文件lib/redteam/platform-config.js:193
const st = statSync(p) - 执行外部命令固定命令lib/desktop.js:353
text = execFileSync("powershell.exe", ["-NoProfile", "-Command", REGISTRY_INSTALL_SCRIPT], { - 执行外部命令固定命令lib/desktop.js:458
text = execFileSync("powershell.exe", ["-NoProfile", "-Command", PROCESS_EXE_SCRIPT], { - 执行外部命令固定命令lib/desktop.js:517
text = execFileSync("powershell.exe", ["-NoProfile", "-Command", SHORTCUT_EXE_SCRIPT], { - 执行外部命令来自配置/变量lib/desktop.js:830
const child = spawn(process.execPath, [helper], { - 执行外部命令固定命令lib/desktop.js:1036
const child = spawn( - 执行外部命令固定命令lib/desktop.js:1058
const child = spawn("/bin/sh", [script, asar, exe, lock], { - 执行外部命令来自配置/变量lib/web.js:57
const child = spawn(process.execPath, [helper], { - 执行外部命令来自配置/变量lib/zip-extract.js:103
execFileSync(file, args, { - 发起网络请求lib/redteam/client.js:567
const api = (req) => fetch('/redteam/api', { - 写入剪贴板lib/redteam/client.js:719
await navigator.clipboard.writeText(value) - 执行外部命令固定命令lib/restart-desktop.js:81
const out = execFileSync("tasklist", ["/FI", `IMAGENAME eq ${image}`, "/FO", "CSV", "/NH"], { - 执行外部命令固定命令lib/restart-desktop.js:105
return execFileSync("defaults", ["read", path.join(bundle, "Contents", "Info"), "CFBundleName"], { - 执行外部命令固定命令lib/restart-desktop.js:113
return execFileSync("plutil", ["-extract", "CFBundleName", "raw", infoPlist], { - 执行外部命令固定命令lib/restart-desktop.js:127
out = execFileSync("ps", ["-Ao", "pid=,command="], { - 执行外部命令固定命令lib/restart-desktop.js:163
out = execFileSync("ps", ["-Ao", "pid=,command="], { - 执行外部命令固定命令lib/restart-desktop.js:237
execFileSync( - 执行外部命令固定命令lib/restart-web.js:32
spawnSync("taskkill", ["/PID", String(pid), "/F"], { windowsHide: true, stdio: "ignore" }); - 执行外部命令固定命令lib/restart-web.js:41
spawn("cmd.exe", ["/d", "/s", "/c", "start", "", url], { - 执行外部命令来自配置/变量lib/restart-web.js:49
spawn(opener, [url], { detached: true, stdio: "ignore" }).unref(); - 执行外部命令来自配置/变量lib/restart-web.js:71
const child = spawn(info.execPath, info.argv, { - 执行外部命令来自配置/变量lib/uninstall-restart.js:65
const child = spawn(info.execPath, info.argv, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(135 字)↓
DeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分
README
由 DeepSeek 最新模型翻译生成⚔️ dsh-purge
v1.1.68
DeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。
Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分。
这是什么
dsh-purge 是提示词注入 / 本机补丁插件,装在本机已装好的官方 DeepSeek Harness 上。
它不跟你讲「模型会不会答」,它处理的是宿主层:Harness 在运行时重写系统提示词、审批门、沙箱策略、会话迁移。
把这层和「模型拒答」拆开看,你才能在自己的机器上做可控评测,也能一眼看出哪条默认策略收紧过头了。
- 官方 Web(dsh web)与官方 桌面 EXE(0.2.0-rc.2)都支持,分开安装、分开 Apply。
- 目标只有你本机的官方 @deepseek-ai 包与本地配置;不改 Harness 源码树。
- 默认提示词面向国模「小码酱」,可整体替换;换模型就换一份提示词,规则集可并存多套。
- 启动自检 + 自动重放:npm 把 node_modules 覆盖掉之后,不用手改文件。
展开完整文档(README 剩余 1 节)
⚔️ dsh-purge v1.1.68 DeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。 Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分。 这是什么 dsh-purge 是提示词注入 / 本机补丁插件,装在本机已装好的官方 DeepSeek Harness 上。 它不跟你讲「模型会不会答」,它处理的是宿主层:Harness 在运行时重写系统提示词、审批门、沙箱策略、会话迁移。 把这层和「模型拒答」拆开看,你才能在自己的机器上做可控评测,也能一眼看出哪条默认策略收紧过头了。 - 官方 Web(dsh web)与官方 桌面 EXE(0.2.0-rc.2)都支持,分开安装、分开 Apply。 - 目标只有你本机的官方 @deepseek-ai 包与本地配置;不改 Harness 源码树。 - 默认提示词面向国模「小码酱」,可整体替换;换模型就换一份提示词,规则集可并存多套。 - 启动自检 + 自动重放:npm 把 node_modules 覆盖掉之后,不用手改文件。 能力 | 你会看到 | 它做什么 | | dsh-purge 面板 | 会话标题旁一个按钮,右侧停靠;两页:Clean 与 Drill | | Clean | 分组补丁状态、Apply / Restore / Uninstall、提示词编辑器、多套规则集 | | Drill | 授权后的资产、技能与本机环境视图(仅限你自己管的宿主 / 离线靶标 / 书面授权演练) | | 宿主策略 | 默认文案、权限策略、工具上限;官方能力保留,不另造第二身份 | | 启动时 | 校验并重放补丁,状态落 $DSH_HOME/dsh-purge/ | 支持宿主 | 宿主 | profile | 版本 | | 官方 dsh web | web | dsh 0.2(0.2.0-rc.2) | | 官方 Harness 桌面 EXE | desktop | 0.2.0-rc.2 | 老版本 dsh(0.1.7 及更早)要配对应旧版插件。补丁不匹配时保持 pending / skipped,不会盲改。 安装 先把插件装进 profile,再在界面上 Apply —— 装插件本身不改宿主。 官方 Web dsh plugin --profile web add https://github.com/canyexiren/dsh-purge/archive/refs/heads/main.tar.gz 官方桌面 EXE dsh plugin --profile desktop add https://github.com/canyexiren/dsh-purge/archive/refs/heads/main.tar.gz 已经是本地 clone dsh plugin --profile web add . 装完三步: 1. 完全退出刚装的那个宿主再打开(dsh web 停掉重起;桌面端连托盘一起退)。 2. 在那个宿主里点会话标题旁的 dsh-purge → Clean 页 → Apply。 3. Apply 成功会重启一次让补丁加载;没跑完就不会重启。重启后新开一个会话,注入才进上下文。 Web 与 Desktop 的 Apply / Restart / Uninstall 互不影响,不要跨宿主 Apply。 换提示词 - 改默认提示词:Clean 页的提示词编辑器直接改;落盘在 $DSH_HOME/prompt-inject.md,与插件内密封的默认文本比对后判定「是否用户手改」。 - 换模型就换一份:编辑器里整体替换,或把不同模型的版本各存一份规则集,用时切。 - 规则集:写入 AGENTS.md / CLAUDE.md 目标,不参与 system 注入链(磁盘与 UI/注入保持一致)。 - 插件内置默认提示词:lib/default-prompt-inject.md,构建时由 scripts/embed-default-prompt.mjs 密封进 lib/asset-table.js(AES-256-GCM + deflate),运行时 lib/table-read.js#openSlot() 解封;宿主提示词文件不被读取,身份只来自插件自带那份。 工作原理 1. 定位 DSH 家目录:$DSH_HOME → dsh 启动器旁的 .dsh → ~/.dsh(不写死盘符)。 2. 对官方 @deepseek-ai 包与本机配置打分组补丁,逐条校验命中,不匹配就挂起。 3. 重写提示词装配链:注入进 system,而不是拼在用户消息里。 4. 启动时自检 + 重放;npm 覆盖安装后自动恢复,不用手改。 5. 桌面端 Apply 会解 app.asar、给官方入口加 app/ 回退与 app/runtime 链接。 恢复原状 - Restore:Clean 页还原被改的宿主文件。 - Uninstall:移除插件与补丁,重启宿主。 - 只想看状态:会话里 /purge status,会打印 DSH_HOME 与补丁清单。 目录 lib/ 核心:core.js 补丁引擎、identity.js 注入链、rules.js 规则集、 host.js 宿主探测、reapply.js 重放、update.js 升级、redteam/ Drill bin/ CLI 入口 client.js 构建产物(Web 端 UI,由 scripts/build-client.mjs 生成) presets/ redteam 预设与锚点门 skills/ 随插件分发的技能文档 scripts/ 构建 / 嵌提示词 / 导出报告 / 设仓库地址 docs/ banner、预览图、原作者完整 README(docs/original/) 署名要求 借用本项目的名称、思路、代码或提示词,必须署名作者并注明来源仓库。 - 作者:昔人 - 本仓库:https://github.com/canyexiren/dsh-purge 不署名、隐去来源、改头换面当作原创,会被追究。二次开发请保留 LICENSE 的版权行与本文件说明。 来源与改动记录见 NOTICE.md。 使用边界 本项目是本地安全评测工具:只作用于你本机已装的官方 DeepSeek Harness 与本地配置,不针对任何第三方站点、服务器或账号。 完整合规声明沿用原作者版本,见 docs/original/README.en.md。 商用、付费转售、以及任何违法或灰产用途一律禁止。 MIT License · Copyright (c) 2026 昔人
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
canyexiren/dsh-purge
按模型切换提示词,重写宿主策略做可控评测
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7