Skip to content

Releases

1.1.77+upstream.1.1.71 — 审计后修 20 条:崩宿主、写坏宿主、状态谎报

Choose a tag to compare

@usi112 usi112 released this 14 Nov 06:14

数字部分是本分支序号,+upstream.1.1.71 是上游基线,规则见 docs/versioning.md。

适用环境(先核对再装)

与 1.1.76 相同:DSH Go 1.0.16(引擎 r15-dsh0.2.2-rc.1-node24.22.1)。1.0.15 及更早请继续用 1.1.75。
本版没有改任何补丁 needle,也没有改破甲规则文本,只修工具链自身的缺陷。

为什么发这版

这版是一次代码审计后的缺陷修复,来源是三份审计报告(core / redteam / client),
共修 20 条「会真出事」的问题。按影响面分三类:

  • 会崩宿主或写坏宿主:编辑器不存在时崩进程、备份/提示词文件非原子写、文件锁死时回滚后仍报成功。
  • 安全边界:asar 条目名可越界写、备份 manifest 的外部路径可指到任意文件、技能名可读插件目录外的 .md。
  • 状态骗人:strict 补丁没打上也能放行重启、锚点彻底不匹配仍算「已就绪」。

中文

崩溃与写坏

  • 设置页「编辑提示词」:EDITOR 指向不存在的程序时,以前是异步 'error' 事件无人监听 →
    宿主进程直接退出;现在先在 PATH 上解析,找不到就返回错误提示,并兜住异步失败。
  • 补丁备份 .dshpurge.bak(唯一一份宿主原件)与 prompt-inject.md 改为原子写;后者半截会被
    误判成「用户自己改过」从而永不自动修复,现在不会再产出半截文件。
  • 原子写的临时文件加了随机段,写失败时也会清理,不再在宿主目录里堆积 *.tmp。

安全

  • asar 解包:普通文件分支补上越界校验(以前只有符号链接分支有),条目名带 .. 直接跳过并告警。
  • 备份还原:manifest 里的根外路径(external)现在过白名单(DSH_HOME、profiles/*/node_modules/*、
    启动器名),越界记 unsafe_target 跳过——以前可以照 manifest 写任意绝对路径。
  • 红队控制台 skillRead:技能名禁止 ../路径分隔符,再走共享的根目录校验。

状态与一致性

  • 整批回滚之后,被回滚的补丁行统一标 write_error;以前只标出错的那个文件,其余仍显示「已清洗」。
  • ensureHostClean 不再把 pattern_not_found 从阻断集合里剔掉——strict 补丁没打上就不放行重启。
  • patchStatusReady:旧的 skipped 不再无条件算「已就绪」,只对 optional / 软结算补丁放行;
    7 分类里的 no_needle(锚点找不到)本来就按未完成算,现在两套口径对齐。
  • doctor 的 3 处替换改为逐个判定,部分命中报 partial,不再「命中一处就报已处理」。
  • 外部重锚 needle(purge-reanchor.json)要求 ≥24 字符且像锚点,且命中多处时跳过——防止
    一条短 needle 把宿主文件全文替换。内置补丁的替换语义未改动。

红队子系统

  • 子智能体角色稿改为按「本会话/父会话绑定」取靶标,取不到才回落全局指针;读不到会 warn。
  • 报告里「照着粘」的 curl:cookie 现在按 '\'' 转义;模板填充不再把 $&、$1 当替换语法
    (密码含 $1 时以前会被吞掉或让占位符复活)。
  • settings.json / platform.json / current 三个状态文件改原子写;坏 JSON 先隔离成
    .corrupt-<时间戳> 再从 .bak 恢复,不再「解析失败当空配置、下次写入整份清零」。

构建与脚本

  • scripts/build-client.mjs 以前会把 client.js 里手改过的演练台修复整段换回旧版,还 exit 0。
    现在源码(lib/redteam/client.js)与产物已对齐,构建连跑两次零差异;目标块被手改过则拒绝覆盖
    (DSH_PURGE_FORCE_EMBED=1 可强制)。
  • scripts/redteam-setup.sh 不再恒 exit 0:--check 缺工具退出 3、安装不完整退出 4、冒烟未过退出 5;
    完成标记改叫「安装记录」。
  • package.json 的 files 去掉了不存在的 README.zh-CN.md。

English

A code-audit fix release: 20 items from three audits (core / redteam / client). No patch needles and no
jailbreak text changed — only the tooling around them.

  • Crashes / corrupt writes: editOverride no longer kills the host when $EDITOR is missing;
    .dshpurge.bak and prompt-inject.md are written atomically; temp files get a random suffix and are
    cleaned up when the write fails.
  • Security: asar entries with .. are skipped (previously only the symlink branch was checked);
    backup manifest external targets are whitelisted (DSH_HOME, profiles/*/node_modules/*, launcher names);
    skillRead rejects anything that is not a single skill file name.
  • Honest status: a whole-batch rollback now marks every rolled-back patch row as write_error;
    pattern_not_found no longer slips past ensureHostClean; skipped only counts as ready for
    optional/soft-settle patches; the doctor rewrite reports partial instead of patched.
  • Redteam: subagent role text resolves the engagement from the session binding first; curl in reports
    escapes cookie quotes and stops treating $&/$1 as replacement syntax; settings/config/current are
    written atomically and corrupted JSON is quarantined and recovered from .bak.
  • Build/scripts: build-client.mjs refuses to overwrite a hand-edited drill block (source and artifact
    are now in sync, build is idempotent); redteam-setup.sh exits non-zero when tools are missing.

升级

  • 与 1.1.76 相同的安装方式:dsh plugin --profile web add file:<本仓库打出的 tgz>,或从本仓库 tar 包更新。
  • 本版改的是插件自身代码,装完重启宿主即可;补丁表与重锚覆盖文件不用动。
  • 升级后建议在面板点一次「应用」,让状态按新判据重算一遍(skipped 变「未就绪」的条目会显出来)。

1.1.76+upstream.1.1.71 — 换引擎不用再改生成代码:重锚覆盖层 + 畸形输入加固

Choose a tag to compare

@usi112 usi112 released this 13 Nov 17:06

数字部分是本分支序号,+upstream.1.1.71 是上游基线,规则见 docs/versioning.md。

适用环境(先核对再装)

项 本版针对 怎么核对
DSH Go(App) 1.0.16(versionCode 11131814) 设置 › 关于,或 adb shell dumpsys package io.github.ccch1mneyyy.dsh_app | grep versionName
内置引擎 r15-dsh0.2.2-rc.1-node24.22.1(DSH 0.2.2-rc.1 + dsh-go 1.0.16 的补丁集) 设置 › 诊断,或 ~/.dsh/dsh-app/diagnostics.md 里的「内置运行时」
平台 Android arm64(proot) —
实测机 Redmi 26048RP6AC / Android 16 (SDK 36) —

不是 1.0.16 就别装这一版。 1.0.15 及更早的引擎补丁集和 1.0.16 不同(1.0.15 是 123 条,
1.0.16 是 145 条),本版的 #36 / #87 / #4 等条目是按 1.0.16 的文案重锚的,在 1.0.15 上会大面积 miss,
看起来就是"装上了但什么都没生效"。

  • 还在 1.0.15:请继续用 1.1.75,等升到 1.0.16 再换这一版。
  • 一定要在 1.0.15 上试 1.1.76:不要放本版配套的 purge-reanchor.json。不放时 1.1.76 的行为与 1.1.75
    完全相同(下文「默认行为不变」有实测数据);放了之后那些针是给 1.0.16 写的,只会空转,
    obsolete 列表还会把 1.0.15 上本来能打的补丁藏起来。

为什么发这版

  • 补丁表是从上游导出的生成文件(lib/core.js 里的 84 条)。DSH Go 每换一次引擎,needle 就会漂移;
    以前只能直接改生成文件——改一次,上游一升级就没了,也留不下"这条为什么改"的记录。
  • 给 DSH Go 1.0.16 做适配时还暴露了更严重的问题:判定把「needle 消失」当成「已经打过」。引擎换了文案,
    针自然找不到,状态就显示 applied——面板全绿,实际一条效果都没上。审计时 88 条表报 54 条 applied,
    真正落地的约 51 条,其中还有一条从头到尾没执行、只靠 marker 蒙对的(#88)。
  • 覆盖文件是外部输入,之前没有任何校验:null、类型写错、下标写成字符串,都会让 lib/core.js
    在模块求值期抛异常,整个插件加载失败——从"面板不显示"变成"服务起不来"。

这版解决这三件事:把覆盖做成正式能力、让畸形输入打不穿、默认行为一字不变。

中文

  • 重锚覆盖层:$DSH_HOME/purge-reanchor.json 在加载期覆盖补丁表,不改生成文件。四个字段:
    patterns(按补丁 id + 替换序号换 needle)、drop(丢掉失效条目)、patchReplacements
    (整组替换,用于同一补丁在不同文件要不同新文案)、obsolete(本轮不适用,显示 na)。
    格式、边界与回退行为见 docs/reanchor-overrides.md。
  • 加固:覆盖路径整段 try + 入口类型断言。以下四类畸形输入现在都退回原表,不再中断加载:
    null、{"obsolete":4}(该是数组给了数字)、patterns 写成字符串(会被当"下标→字符"映射,
    单字符 needle 会把引擎文件全文替换)、drop 下标写成字符串(原来静默无效)。
    needle 短于 8 字符、空串、非字符串一律忽略。
  • 默认行为不变:没有覆盖文件时与 1.1.75 完全一致。同一台机器实测:
    有覆盖 applied 60 · na 17 · skipped 7 · pending 0;无覆盖 applied 60 · pending 6 · na 11 · skipped 6 · missing_file 1
    (pending 的 6 条正是本机覆盖里处理掉的那 6 条)。
  • 真实用例:1.0.16 上 #36 的 needle 是"打过一轮后的中间态",干净引擎会 miss——用 patchReplacements
    换成干净引擎原文;#87 的 8 条变体里 4 条在 1.0.16 已不存在——用 drop 剪掉。
    这些改动全部留在 JSON 里,生成文件保持上游导出原样。

English

  • Reanchor override layer: $DSH_HOME/purge-reanchor.json overrides the patch table at load time —
    patterns (needle by patch id + replacement index), drop (remove dead entries), patchReplacements
    (replace a patch's whole edit list, for cases where different files need different new wording),
    obsolete (not applicable this round, shown as na). Format and fallback rules:
    docs/reanchor-overrides.md.
  • Hardened: the whole override path is wrapped in try with entry type assertions. Malformed files
    (null, wrong types, string indices) fall back to the original table instead of breaking module evaluation.
    Needles shorter than 8 chars, empty or non-string are ignored.
  • No default behavior change: without the override file this release behaves exactly like 1.1.75
    (measured: with overrides applied 60 / na 17 / skipped 7 / pending 0; without, applied 60 / pending 6 / na 11 / skipped 6 / missing_file 1).

升级

  • 从本仓库打包安装:dsh plugin --profile web add file:<本仓库打出的 tgz>。
    不要让应用内更新去拉上游 dsh-purge——那会用上游 lib/core.js 覆盖掉这里的覆盖钩子。
  • 覆盖文件在 $DSH_HOME 下,重置运行环境会一起没掉;重装后按 docs/reanchor-overrides.md 放回即可。
  • 改的是引擎文件,装完要重启引擎才生效。

1.1.75+upstream.1.1.71 — 重锚三条一直没生效的补丁、沙箱文案改中性、ask_user 等待封顶

Choose a tag to compare

@usi112 usi112 released this 13 Nov 07:35

1.1.75+upstream.1.1.71

数字部分是本分支序号,+upstream.1.1.71 是上游基线,规则见 docs/versioning.md。

中文

  • 重锚三条一直没生效的补丁 #32 / #53 / #60:DSH 0.2.2-rc.1 把锚点搬了家(网页身份句 → dsh-harness-dev-context,
    run_code 加宽话术 → dsh-tool-executor-ptc),这三条在真机上一直是 no_needle——等于网页面身份、
    「不要另开服务器」、「沙箱加宽自动放行」三处清洗一直没有生效。现在改为指向新包,真机只读 --check
    从「原文不对 7 条」降到 4 条,这三条转为 pending(本机未 apply,这是正确读数)。
  • 新增 #89 SANDBOX_POLICY_BRAND_NEUTRAL:dsh-sandbox-policy 里三处带品牌词的文案改成中性说法,
    允许/拒绝的语义一个字没动(逐字核对过 may / does not restrict 的位置)。
  • 新增 #90 ASK_USER_WAIT_CAPPED:ask_user 的等待上限从 -1(无限)改成 300 秒,
    秒→毫秒换算正确(-1 → 300000ms、30 → 30000ms、未填 → 默认值)。以前在手机上超时值一填 -1
    就是整轮无限等,表现为「一直转圈」。
  • 补丁总数 82 → 84。
  • 顺手修的两处:#60 原来的 forbid 和它自己的针逐字相同,重锚后一命中就被判成「漂移」;#60 也不再登记
    一个在 0.2.2 上完全没有目标文案的文件(会制造假 partial)。
  • 验收:/tmp 副本上六条全部 applied、verifyFailures 为空、回归脚本 PASS(84 条 / 691 文件 / 5.3 秒);
    被打过的 6 个文件 node --check 全过;真引擎 /opt/dsh 零写入(只读 grep 与 --check)。
  • 界面和文档的说法一并改成日常中文(同版本内改动,不另起版本号):面板右侧的
    「可打 / 别管 / 需要人工看」改为「可以再打一次 / 不用管 / 需要你自己确认」;每条补丁的原因重写为
    完整句子,例如「这条补丁要改 3 个文件:其中 1 个找不到原文」;「原因人话」「空转」「半打」「无处落地」
    这类说法从 README、版本说明和两份方案文档里清掉。只改措辞,判定、计数、应用与还原逻辑没动。

English

  • Re-anchored #32 / #53 / #60: DSH 0.2.2-rc.1 moved the anchors (web identity sentence →
    dsh-harness-dev-context, run_code widening copy → dsh-tool-executor-ptc). Those three patches had been
    no_needle on the real host, i.e. the web-surface identity, the "do not start a replacement server" line and
    the sandbox-widening line were never actually patched. They now point at the new packages; a read-only
    --check on the device drops "no needle" from 7 to 4 and turns these three into pending.
  • New #89 SANDBOX_POLICY_BRAND_NEUTRAL: three brand-bearing strings in dsh-sandbox-policy become neutral.
    Allow/deny semantics are untouched, verified character by character.
  • New #90 ASK_USER_WAIT_CAPPED: ask_user's wait cap goes from -1 (unbounded) to 300 s with correct
    second→millisecond conversion (-1 → 300000ms, 30 → 30000ms). On the phone, -1 meant the turn could
    hang forever.
  • Patch count 82 → 84.
  • Also fixed: #60's forbid markers were identical to its own needles (a hit would be reported as drifted
    right after re-anchoring), and #60 no longer lists a file that simply has no target text on 0.2.2
    (it produced a fake partial).
  • Verified on a /tmp copy: all six land as applied, no verification failures, regression script PASS
    (84 patches / 691 files / 5.3 s), the six touched files pass node --check, and the real engine
    /opt/dsh received zero writes.

1.1.74+upstream.1.1.71 — 每条补丁写明原因、应用回执与一键回归

Choose a tag to compare

@usi112 usi112 released this 13 Nov 07:24

1.1.74+upstream.1.1.71

版本规则见 docs/versioning.md:+upstream.1.1.71 是本分支的上游基线,数字部分是本分支自己的发布序号,两者不是一个东西。

中文

  • 每条补丁写明原因和处理建议:patch_rows[].reason / .advice 由 explainPatchRow() 按行上的真实数据拼出
    (counts / files[].kind / strictFiles / softSettle / kind),partial 会带真实数字「要改 N 个,M 个没匹配上」。
    推不出来的信息(比如宿主版本号)不写,也不拿数字凑。兜底文案 7 条,互相不重复。
  • 面板与 CLI 按层分组:身份 / 审批 / 沙箱 / 工具 / 界面 / 其他,由补丁名推导目标包键,认不出落「其他」。
    每层一行「层名 已生效/总数」,层内最多 6 条(副标题是原因、右侧是建议);「复制状态」带全量分层清单。
  • 应用回执 patch_receipt:最近一次 apply 的时间、来源、改动文件(≤20 条 + 总数)、计数、是否回滚、备份目录。
    只从最新 manifest + 现有字节推导;拿不到返回 null 并给原因。
  • 一键回归 scripts/patch-regression.mjs:记哈希 → apply → 记变化 → revert → 逐字节比对(必须 0 差异)→ 再 apply → 幂等比对;
    PASS/FAIL + 失败文件清单;--json;路径含 /opt/ 直接退出 2。实测一次 6.17 秒 PASS。
  • 修 CLI 误报:没定位到插件根时,--check 以前把 82 条全判 na 却打印「所有补丁都已落地」;
    现在明确写「这次什么都没检查」并提示 --host / DSH_BASE,退出码 1。
  • 新增 docs/proposed-patches.md:社区版补丁集对照(LanJinGod 1.1.73 / kingcharleslzy-ai 1.6.97 / NANA7MI0 0.4.1),
    差集、12 条候选、署名建议。结论:先重锚 #32/#53/#60(真机已 no_needle),再考虑 2 条文案/超时类新补丁。
  • 原生界面插件 local-purge-ui 0.2.0 → 0.2.1(分层与原因展示)。

English

  • One plain-language reason and one piece of advice per patch (row.reason / row.advice), built from real row
    data by explainPatchRow(); partial carries the actual numbers. Nothing is guessed.
  • Panels and CLI group by layer (identity / approval / sandbox / tools / UI / other), one applied/total header
    per layer and up to six rows each; "copy status" includes the full grouped listing.
  • Apply receipt patch_receipt: timestamp, origin, touched files (≤20 shown + total), counts, rollback flag and
    backup directory — derived only from the newest manifest plus current bytes; null with a reason otherwise.
  • One-command regression scripts/patch-regression.mjs: hash → apply → snapshot diff → revert → byte-for-byte
    compare → apply again → idempotency compare; PASS/FAIL with failing files; --json; refuses /opt/ paths.
    Measured 6.17 s per run.
  • CLI no longer lies: with no plugin root located, --check used to mark all 82 rows na and still print
    "nothing to do"; it now says nothing was checked, prints the fix, and exits 1.
  • New docs/proposed-patches.md: comparison against the community patch sets (LanJinGod 1.1.73 /
    kingcharleslzy-ai 1.6.97 / NANA7MI0 0.4.1), the diff, 12 candidates and attribution notes.
  • Native plugin local-purge-ui 0.2.0 → 0.2.1.

1.1.73+upstream.1.1.71 — 补丁状态 7 分类与安全备份

Choose a tag to compare

@usi112 usi112 released this 13 Nov 07:24

1.1.73+upstream.1.1.71

中文

  • 补丁状态统一成 7 分类:applied / pending / partial / drifted / no_needle / no_file / no_pkg(外加 na 桶)。
    gatherState 新增 patch_tally / patch_rows / patch_cache;旧的 patches_*、patch_status、
    display_patches 逐字节不变,面板与网页界面不需要跟着改。
  • 检测结果加 30 秒缓存(键含宿主路径与补丁 id 列表),apply / revert / --check 后自动失效,
    面板不再每次冷开都扫一遍宿主。
  • CLI 新增 --check 与 --status --json / --check --json:--check 只读,能动手的排在前面。
  • 备份升级成 manifest:$DSH_HOME/dsh-purge/patch-backup/<时间戳>/{manifest.json, files/, restore.sh},
    记 root / surface / dsh 版本 / 每文件 sha256。revert 优先用最新 manifest,跨宿主还原会被
    rootMismatch 拒绝;没有 manifest 的老机器仍退回 .dshpurge.bak。
  • apply 改成「先算后写」:整批算完 → 一次性快照 → 写 → 复核(sha256 + 锚点消失)。
    任一文件复核失败就整批回滚,并报告 rolledBack / rollbackMissed,不再留半成品。
  • 补丁软判定迁成声明式字段:4/25/26 与 5/11/12 改为 softSettle: true,isSettled() 收敛到
    lib/patch-report.js 一份;#42 的两段结构重写是唯一保留的 id 特判,注释写明了迁移条件。
  • 原生界面:清洗面板顶部加「已生效 / 待应用 / 本机无目标」,未生效明细按分类分组(每组 ≤10 条);
    新增状态条 清洗 n/m · 待 k(零磁盘 IO,点击进面板);修好三个面板「刷新」只回 {refresh:true}
    却读缓存的空转。
  • 新增 docs/optimization-plan.md:后续 13 条候选改动、三列排序、面板草图、不做什么与逐条验收。
  • 实测:apply→revert→apply 字节幂等;故意写坏触发整批回滚;跨宿主备份被拒;全程真引擎零写入。

English

  • One 7-way patch status model (applied / pending / partial / drifted / no_needle / no_file / no_pkg,
    plus an na bucket). gatherState gains patch_tally / patch_rows / patch_cache; every legacy
    field keeps its exact value, so existing UIs keep working.
  • 30 s detection cache keyed by host path + patch id list, invalidated by apply / revert / --check.
  • New CLI modes --check, --status --json, --check --json; --check is read-only and lists
    actionable rows first.
  • Manifest backups: $DSH_HOME/dsh-purge/patch-backup/<stamp>/{manifest.json, files/, restore.sh}
    with root / surface / dsh version / per-file sha256. Revert prefers the newest manifest, refuses a
    foreign host via rootMismatch, and still falls back to .dshpurge.bak.
  • Apply is now compute-then-write: stage every edit, snapshot once, write, verify (sha256 + anchor
    gone). Any failed verification rolls the whole batch back and reports rolledBack / rollbackMissed.
  • Declarative soft-settle: patches 4/25/26 and 5/11/12 use softSettle: true; isSettled() lives in
    lib/patch-report.js. Patch #42 keeps the only remaining id check, with its migration conditions noted.
  • Native UI: the clean panel gained top-level metrics, per-category grouping (≤10 rows each) and a
    status strip; the "refresh" buttons on three panels actually re-read instead of replaying the cache.
  • New docs/optimization-plan.md with 13 candidate changes, scoring, panel sketch and acceptance.

1.1.72+upstream.1.1.71 — DSH Go 手机版适配修复

Choose a tag to compare

@usi112 usi112 released this 13 Nov 04:52

本分支基线:上游 1.1.71。版本写法见 docs/versioning.md(1.1.72+upstream.1.1.71)。

dsh-purge 1.1.72 — 专为 DSH Go 手机版适配的修复分支

衍生自 dsh-purge 1.1.71,原作者 小杨(MIT License)。
原仓库 YuJunZhiXue/dsh-purge 目前不可访问;本分支保留原 LICENSE 与署名。

这个版本解决什么

原版 1.1.71 在 DSH 0.2.2-rc.1 上装上即崩——每轮对话报
unknown prompt variable "{{cwd}}",整轮失败。本版修复 11 个文件:

# 问题 修复
1 往系统提示词写宿主未注册的 {{cwd}}(装上即崩的根因) 5 处改掉
2 postPrompt 段走宿主插值,用户自定义内容也崩 先转义再交宿主
3 转义有花括号边界漏洞({{{cwd}}}) 改为整段判定 + 终局不变量
4 红队预设两行与新版宿主不兼容 → 红队模式从下拉消失 删失效行,改用 maxDepth
5 自愈重复插行 判定兼容转义写法
6 6 条补丁在新宿主上静默失效 重写锚点与 markers
7 版本门禁用 dshTarget 改 engines.dsh
8 卸载留残留 用户内容移到隔离目录,不删
9 还原留 .bak 垃圾 逐字节相同即清理
10 zip 用反斜杠路径,安卓解压摊平 posix 重新打包

未改动任何破甲规则文本(人设、18 组规则、Never Refuse 全部原样)。

📱 DSH Go 手机端专属

  • 全部修复在真实 dsh-go 手机上验证:App 1.0.15 · DSH 0.2.2-rc.1 · Node 24.22.1 · proot Ubuntu 24.04
  • 附带 native-ui/ 两个手机原生界面插件(原版只有网页界面,手机上看不到):
    • local-purge-ui — 「清洗」胶囊 + 面板(真实状态 / 补丁计数 / 逐条明细,应用 / 还原)
    • local-purge-more — 「破甲内容」胶囊 + 提示词 / 规则集 / 技能库 三个面板

下载哪个

文件 用途
dsh-purge-1.1.72.zip 完整包:插件 + 手机界面插件 + install.sh 一键安装
dsh-purge-1.1.72.tgz 只装主体插件用:dsh plugin --profile web add dsh-purge-1.1.72.tgz
SHA256SUMS.txt 校验值

⚠️ 风险提示

这是破甲插件。装上去只启用「提示词注入」;另有 82 条代码级补丁(关审批提示、放开文件写入沙箱)
默认不启用,需手动 dsh-purge --apply,会改写 DSH 源码(有 .bak 备份,--revert 可逐字节还原)。
启用后 DSH 不再在危险操作前征求同意,模型可能静默覆盖未读过的文件。
请只在自己的机器上使用,并自行承担后果。

安装(手机 DSH Go)

# 解压后,让 DSH 里的智能体执行(App 没有终端页)
cd /sdcard/Download/dsh-purge-1.1.72
bash install.sh
md5sum "$DSH_HOME/profiles/web/node_modules/dsh-purge/lib/core.js"
# 期望 66479dbe1716c69ade88ac851331b19a

然后重启引擎。详见 README.md / README.en.md。