HunYiSage/dsh-purgePublic

DeepSeek Harness 破甲:让所有模型都能破甲,不同模型可换不同提示词;默认提示词面向国模「小码酱」。Jailbreak for every model — swap prompts per model. 求 Star 收藏 ⭐ 如要二开,请查看署名要求部分

AI summary: A local security plugin for DeepSeek Harness separating prompt modification from host interception.

Stars
20.1K
+3.3K today
Forks
4.7K
Watchers
35
Open issues
5
Open PRs
0
Contributors
~2
Commits
25
Branches
2

JavaScriptApache-2.0Created Aug 19, 2026Last push 1d agoLatest release v1.1.84+5.6K stars this week+11.4K this month

Quick answers

What is dsh-purge?
A local security plugin for DeepSeek Harness separating prompt modification from host interception.
What does dsh-purge do?
dsh-purge is a network security red team evaluation plugin installed on the official local DeepSeek Harness. It separates the problem submission process from host-level interceptions like prompt rewriting, approval gates, and sandbox environments. This separation enables controlled evaluations without mistaking host interceptions for model refusals. The tool modifies policies, permissions, and tool limits directly within the user's local instance. It ensures modifications only apply to the user's authorized local software rather than acting as a public scanner.
Who is dsh-purge for?
Security researchers and red team operators managing their own local DeepSeek Harness installations. Users should be familiar with JavaScript development environments.
How do I get started with dsh-purge?
dsh plugin --profile web add dsh-purge
How popular is dsh-purge on GitHub?
HunYiSage/dsh-purge has 20,111 stars and 4,736 forks on GitHub, and gained 5,557 stars in the last 7 days.
What license does dsh-purge use?
HunYiSage/dsh-purge is released under the Apache-2.0 license.

Star history

since Oct 19, 2026
010K20KOct 2026Oct 2026Oct 2026Nov 2026
20.1K stars as of Nov 7, 2026. Measured daily since Oct 19, 2026; GitHub no longer exposes earlier star timestamps.

Update history

3 recorded
  • Oct 31, 2026New release v1.1.84 (previously v1.1.71).
  • Oct 25, 2026License changed from Other to Apache-2.0.
  • Oct 19, 2026License changed from MIT to Other.

Contribution activity

commits per day, last 52 weeks
NovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits2026-10-11: 0 commits2026-10-12: 0 commits2026-10-13: 0 commits2026-10-14: 0 commits2026-10-15: 0 commits2026-10-16: 0 commits2026-10-17: 0 commits2026-10-18: 0 commits2026-10-19: 0 commits2026-10-20: 0 commits2026-10-21: 0 commits2026-10-22: 0 commits2026-10-23: 6 commits2026-10-24: 6 commits2026-10-25: 0 commits2026-10-26: 1 commit2026-10-27: 2 commits2026-10-28: 5 commits2026-10-29: 0 commits2026-10-30: 3 commits2026-10-31: 1 commit
24 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    20,111 stars

  • Breakout launch

    20,111 stars in 80 days

  • Rising fast

    +5,557 stars this week

  • Actively maintained

    Pushed within 48 hours

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

  • Repeat trending

    5 trending appearances

What dsh-purge does

dsh-purge is a network security red team evaluation plugin installed on the official local DeepSeek Harness. It separates the problem submission process from host-level interceptions like prompt rewriting, approval gates, and sandbox environments. This separation enables controlled evaluations without mistaking host interceptions for model refusals. The tool modifies policies, permissions, and tool limits directly within the user's local instance. It ensures modifications only apply to the user's authorized local software rather than acting as a public scanner.

Security researchers and red team operators managing their own local DeepSeek Harness installations. Users should be familiar with JavaScript development environments.

  • Separated evaluation: Allows independent testing of model responses versus host interceptions.
  • Patch management: Group, view, apply, revert, and uninstall patches directly from the interface.
  • Prompt editing: Edit prompts and manage multiple rule sets within the plugin.
  • Drill platform: View assets, skills, and local environment details for authorized targets.
  • Host policy adjustment: Modify default text, permission strategies, and tool limits without creating new identities.
  • Automatic reapplication: Automatically checks and reapplies patches upon startup to handle npm upgrades.

Where teams use it

Controlled security evaluations

Conduct security assessments on local AI models without interference from host-level restrictions.

Robustness testing

Evaluate the default policy strength of the DeepSeek Harness to determine if restrictions need tightening.

Local environment inspection

Review authorized assets, skills, and configurations within a secure, offline local setup.

Prompt policy management

Manage and test various prompt injection rules and strategies securely.

Getting started: dsh plugin --profile web add dsh-purge

README

master branch

dsh-purge

⚔️ DeepSeek Harness cybersecurity red-team tool (dsh-purge)

Version 1.1.81

DeepSeek Harness jailbreak: every model, swap prompts per model. Default prompt for 小码酱. Please star ⭐ If you build on this, see Attribution required.

GitHub stars Apache-2.0 awesome · DSH plugin DeepSeek Harness Hub DSH
Node.js JavaScript

Listed on dsh-plugin.org

English | 中文 | 日本語

A note from the author

People have been selling this open-source work in the open. After that, the author was asked to come in and talk. No need to spell out the rest. Read between the lines.

From now on the public internet is closed. The open-source build only allows local lab IPs: loopback and RFC1918. Domains are resolved first (including hosts); every answer must be private or loopback. A hosts trick that points .lab at a public IP, a failed lookup, or a mixed public answer is blocked. Game cheats are forbidden (aimbot, wallhack, memory edits against a game, anti-cheat bypass); the prompt and the session gate both stop them. This build does not ship the skill library or the knowledge base.

The original build may not be resold. Charging for it, skinning it, or hawking it in groups is not allowed. Forks are fine, but you must attribute and name the source: YuJunZhiXue/dsh-purge. Hide the source or pass it off as your own, and you are on the other side.

The author's personal channel: t.me/LLM_PoJia. Notes and updates show up there.

Contents


What this is

dsh-purge is a cybersecurity red-team plugin for the official DeepSeek Harness already installed on your machine. 1.1.81 targets DSH 0.2.1-rc.2 (0.2.0 still works). DSH 0.2.1-rc.3 and newer RCs are not supported. Official Web (dsh web) and the official desktop EXE are both supported. Install and Apply them separately.

Harness does more than forward a prompt. It rewrites prompts, approval gates, sandbox policy, and session migration at runtime. Asking only “will the model answer” treats a host-layer block as a model refusal. This plugin separates those two layers on your own install, for controlled evaluation and for seeing which default policy is too tight.

You get What it does
dsh-purge dock A button beside the session title opens the right dock. Two pages: Clean and Drill
Clean Grouped patch status, Apply / Restore / Uninstall, prompt editor, multiple rule sets
Drill Built into the stable release. After authorization: assets and the local environment. This build does not ship skills or the knowledge base. Local lab only
Host policy Default copy, permission policy, and tool limits. Official capabilities stay. No second invented identity
On start Checks and reapplies. After npm overwrites node_modules, you do not hand-edit files

No hardcoded drive letters. It looks at $DSH_HOME, .dsh next to the dsh launcher, then ~/.dsh. It does not patch the Harness source tree. Apply on the Clean page of dsh-purge is what writes the changes. Identity comes from the encrypted prompt shipped in the plugin, the text the prompt box shows by default. The host prompt file is not read.

It only touches the official @deepseek-ai packages and local config on the user's machine. It is not a public scanner and not an attack kit for third-party sites. The repo does not ship malware, unauthorized-exploit scripts, or payloads aimed at the public internet.


The original may not be resold. Forks must attribute.

Attribution required

The original build may not be resold. No paid resale, no skinned store listing, no hawking it in groups.

Forks must attribute and name the source repository: YuJunZhiXue/dsh-purge. Same if you borrow the name, ideas, code, or prompts.

Hiding the source, passing it off as your own, or reselling the original will be pursued.

License

This repo is Apache License 2.0. Forks and redistributions must keep the copyright notice and NOTICE, and name YuJunZhiXue/dsh-purge. The original may not be resold.


⚠️ Strict legal and compliance disclaimer

Disclaimer: This is a non-profit open-source project. It follows applicable laws and the rules of the platforms it uses, and is intended only for learning and research. Do not use it for any illegal or non-compliant purpose; the user bears any resulting consequences.

Zero-tolerance statement: This project opposes and forbids any illegal activity. The authors do not support, encourage, or assist unauthorized network attacks, exploit use, data theft, unlawful intrusion into computer information systems, or generation of illegal or prohibited content. Anyone who uses this project for crime is solely responsible under the law. The authors have no liability.

  1. This repository contains no illegal material. The published code, docs, patches, and default prompt are not malware, backdoors, unauthorized pentest kits, ransomware, credential-stuffing scripts, or attack payloads aimed at the public internet or third-party systems. The project does not supply illegal content and does not incite, organize, or assist crime.
  2. Local official Harness only. Security-eval patches and prompt injection run only on the official DeepSeek Harness already installed on the user's machine (@deepseek-ai packages, local profile / $DSH_HOME). The target is the user's own official local software, not someone else's website, server, account, or information system.
  3. Eval patches do not attack the public internet. Apply, inject, revert, and uninstall stay in local files and local processes. They do not scan, probe, intrude, or send attack traffic to any public host or unauthorized system. Do not use this project as a jump host against the public internet. If "check for updates" is on, the plugin may only contact this plugin's own GitHub repository to compare versions. That is not an attack on third-party systems and is not authorization to penetrate anything.
  4. Lawful, controlled scope. This project is an aid for red-team research and robustness evaluation on an official Harness the user is entitled to administer. Do not run it against targets without the owner's lawful written authorization, public online systems, or production workloads. Testing must stay on the authorized local official Harness, offline local synthetic fixtures, authorized cybersecurity ranges, and compliant lab environments.
  5. The open-source build is local-lab only. Attack tasks only allow loopback and RFC1918 addresses. Domains are resolved, then judged by IP; suffixes are not an allow list. A public IP, a name that resolves public, a failed lookup, or a hosts entry that points a lab name at the public internet is not an exception. A key, a password, a network range, a wildcard, or a claim made in the conversation does not add an exception. Game cheats are forbidden. This build does not ship the skill library or the knowledge base.
  6. Forbidden uses. Users must not use this project, directly or indirectly, to violate the following (each must be followed; no excuse to evade):
    • Criminal Law of the People's Republic of China
    • Cybersecurity Law of the People's Republic of China
    • Data Security Law of the People's Republic of China
    • Personal Information Protection Law of the People's Republic of China
    • and other applicable laws, regulations, and supervisory rules;
    • Also forbidden:
    • Unauthorized intrusion or attacks on public or private computer information systems; extortion, sabotage, credential stuffing, or spreading malicious payloads;
    • Inducing, generating, or spreading any content the law forbids, including threats to national security, terrorism, violence, pornography, gambling, fraud, and privacy or intellectual-property infringement;
    • Violating the model provider's terms of service and acceptable-use policy.
  7. The user bears all responsibility. The project is provided under Apache-2.0 as-is. The authors make no warranty of completeness, security, or fitness. Users independently bear all civil, administrative, and criminal liability for download, deploy, run, modify, distribute, and all resulting inputs and outputs. Authors and contributors bear no direct, indirect, or joint liability for abuse.
  8. The license ends on breach. Anyone who uses this project for illegal attacks, malicious activity, or other violations has their open-source license automatically and irrevocably terminated from the moment of the violation. They must stop using the project, permanently destroy all copies and derivatives, and accept legal sanctions.
  9. No affiliation. This is an independent open-source security-eval research project. It has no employment, commercial, authorization, or endorsement relationship with DeepSeek or its affiliates. "Official" here only means the eval target is the official DeepSeek Harness package on the user's machine. It does not mean DeepSeek developed, approved, or warrants this plugin.
  10. Attribution is required. If you borrow this project's name, ideas, code, or prompts, you must credit the author and name this repository. Failure to attribute will be pursued. See Attribution required.

Supported hosts

1.1.81 targets DSH 0.2.1-rc.2. 0.2.0 still works. Do not apply it to 0.1.x.

  • dsh 0.2.1-rc.2 (official desktop / official dsh web): use 1.1.81. Fixes {{cwd}} / [cwd] crash, patch #40 match, dropped toolFilter, host dsh-tools resolve, hostFs fd, desktop helper self-kill, file: archive update, Ctrl+Enter steer.
  • dsh 0.2.0-rc.2: use 1.1.40 or newer; this line also installs.
  • dsh 0.1.7 (incl. rc.1 / rc.2): use 1.1.39 or older — pick the tag on Releases.
  • dsh 0.2.1-rc.3 / rc.4 and newer are not supported. Unmatched patches stay pending or skipped; nothing is rewritten blindly. Stay on 0.2.1-rc.2.

Unmatched patches stay pending or skipped; nothing is rewritten blindly.


Install

Do not use the plugin marketplace. One-click install on dsh-plugin.org or in Settings → Plugin Market fails with already queued: dsh-purge and never runs a command. The name is not on the npm registry, so do not pnpm add dsh-purge.

Quick start

Have dsh on PATH? One command, one restart, one click. Run the line for the host you open (the desktop EXE is the same with desktop instead of web):

# Official `dsh web`
dsh plugin --profile web add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

# Official desktop EXE
dsh plugin --profile desktop add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master
  1. Fully quit and reopen the host you installed into. Web: stop dsh web and start it again. Desktop: quit the tray icon too, then open the exe.
  2. On that host, click dsh-purge beside the session title → Clean → Apply. A successful Apply restarts the host once.

Done — verify with /purge status in chat. If pnpm asks about build scripts, or anything below does not appear, follow the step by step.

Step by step

Step 1 — Pick your host. Official dsh web and the official desktop EXE are installed and patched separately; only install into the host you actually open.

What you run Profile Install command
Official dsh web web the web line in Quick start
Official desktop EXE desktop the desktop line in Quick start

Step 2 — Install the plugin. Use the codeload.github.com URL exactly. Do not use github.com/.../archive: that 302 makes pnpm fail with fetch failed.

Have dsh? Run the Quick start line for your profile. If this directory is already a clone, use . instead of the URL.

pnpm only (no dsh required): run this inside the profile you actually use, not the repo root.

cd "$DSH_HOME/profiles/web"    # desktop: profiles/desktop
pnpm add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

Windows PowerShell:

cd "$env:USERPROFILE\.dsh\profiles\web"   # desktop: profiles\desktop
pnpm add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

pnpm add and dsh plugin add fetch the package; postinstall writes dsh-purge into dsh.profile.bundles and adds a body insert in the profile cordis.patch.yml. Without that insert the host never loads the plugin and no button appears.

Expected result: node_modules/dsh-purge/package.json exists, "dsh-purge" is in that profile's bundles, and cordis.patch.yml has an id: dsh-purge insert.

  • pnpm 11/12 skips install scripts (ERR_PNPM_IGNORED_BUILDS) unless you allow the build:
pnpm add --allow-build=dsh-purge --allow-build=dsh-purge@https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master
# Already installed, warning only — the full specifier is required (name-only leaves "set this to true or false"):
pnpm approve-builds dsh-purge@https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master
# If bundles / insert are still missing:
node node_modules/dsh-purge/scripts/ensure-profile-bundle.mjs
  • If neither dsh nor pnpm is available, jump to Manual install.
  • On the desktop client you can also click the button (dsh:// deep link; it still downloads the same tarball).

Install in desktop client

Step 3 — Restart the host. Adding the plugin to a profile does not patch @deepseek-ai by itself. Fully quit and reopen the host you just installed into (Web: stop dsh web and start again; Desktop: quit the tray icon too, then open the exe).

Expected result: dsh-purge stands beside the session title. Missing? Jump to Step 5.

Step 4 — Apply and verify. On that host, click dsh-purge beside the session title, open Clean, and click Apply. It is not on the host Settings page. A successful Apply restarts once; it does not restart if it did not finish. Web controls affect Web only; desktop controls affect the desktop app only. Do not Apply one host from the other.

Expected result: /purge status in chat prints DSH_HOME and the patch list — the path should be the home you actually run. Optional packages that are not installed (liangshen) show as skipped and do not block Apply.

Step 5 — Troubleshooting. Jump here only when a step above did not end with its expected result.

  • No button beside the session title. Run dsh --dump-config (or dsh --profile desktop --dump-config) and look for a body row id: dsh-purge (not dsh-purge-redteam). If it is absent, run ensure-profile-bundle.mjs (Step 2), then fully quit and reopen the host. After this version, a live red-team child entry also writes the missing insert on startup — quit and reopen once more. entry "redteam-store" not found at the top is leftover from an old red-team package and can be ignored.
  • The market says already queued: dsh-purge. Stop clicking the market; use dsh plugin add or pnpm from Step 2. If the CLI also says it is already there, remove and re-add, then redo Step 3:
dsh plugin --profile desktop remove dsh-purge
dsh plugin --profile desktop add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

pnpm only:

cd "$DSH_HOME/profiles/desktop"
pnpm remove dsh-purge
pnpm add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

Swap desktop for web on Web.

Advanced

Hand this to an assistant. Paste the block below to a local assistant. It should only run the install command — no disk scan, no other edits, no Apply, no restart.

For AI assistants (install only)

Install the DeepSeek Harness plugin dsh-purge into the Web profile only. Do not scan the whole disk, do not read or edit other files, do not apply settings, and do not restart the app. Do not install into the desktop profile. Do not use the plugin marketplace. The name is not on the npm registry; do not pnpm add dsh-purge.

Web (official dsh web)

If dsh is on PATH:

dsh plugin --profile web add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

If dsh is missing and pnpm is available, cd into $DSH_HOME/profiles/web (often ~/.dsh/profiles/web) and run:

pnpm add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master

If this directory is already a clone and dsh exists, use dsh plugin --profile web add .. If neither dsh nor pnpm is available, tell the user and stop.

After the command finishes, tell the user to fully quit and restart dsh web, then open dsh-purge beside the session title and Apply on Clean. Then stop.

Manual install. Use this when the command fails or dsh is not on PATH. Edit only the profile for the host you run — do not touch the other, and do not delete existing bundles.

Full manual steps

1. Find the $DSH_HOME this host uses. A real home is named .dsh (official EXE sometimes dsh-home), contains profiles, and has at least one profiles/<name>/package.json. Check in order: DSH_HOME env → .dsh next to the install root (portable) → %USERPROFILE%\.dsh or ~/.dsh → %APPDATA% / %LOCALAPPDATA%\DeepSeek Harness\dsh-home. Confirm: profiles/web/package.json has "name": "dsh-profile-web" (or dsh-profile-desktop). Machines often have two homes — use the one that belongs to the host you actually start.

PowerShell to list candidates:

$cands = @()
if ($env:DSH_HOME) { $cands += $env:DSH_HOME }
$cands += "$env:USERPROFILE\.dsh"
$dsh = Get-Command dsh -ErrorAction SilentlyContinue
if ($dsh) {
  $dir = Split-Path $dsh.Source
  $cands += @((Join-Path $dir ".dsh"), (Join-Path (Split-Path $dir) ".dsh"), (Join-Path (Split-Path (Split-Path $dir)) ".dsh"))
}
$cands += @("$env:APPDATA\DeepSeek Harness\dsh-home", "$env:LOCALAPPDATA\DeepSeek Harness\dsh-home")
$cands | Select-Object -Unique | Where-Object { $_ -and (Test-Path (Join-Path $_ "profiles")) }

2. Put the plugin at $DSH_HOME/plugins/dsh-purge (folder must be named dsh-purge, with a package.json whose "name" is dsh-purge).

git clone https://github.com/YuJunZhiXue/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"

Without git: download master.tar.gz, extract, rename dsh-purge-master → dsh-purge, and place it under plugins. If you already have a clone, copy the whole tree — not a few .js files.

3. Edit only that profile's package.json — back it up first. Web → $DSH_HOME/profiles/web/package.json; desktop → $DSH_HOME/profiles/desktop/package.json. Add only two things, keeping every existing dependency and bundle:

  1. In dependencies, add "dsh-purge": "file:../../plugins/dsh-purge"
  2. At the end of dsh.profile.bundles, append "dsh-purge" (skip if already there)
{
  "name": "dsh-profile-web",
  "private": true,
  "dependencies": {
    "dsh-purge": "file:../../plugins/dsh-purge"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-purge"
      ],
      "patchReload": "live"
    }
  }
}

Keep JSON valid (comma before the new item, none after the last). Do not switch file:../../plugins/dsh-purge to an absolute path, do not touch patchReload or other plugins, and do not list "dsh-purge" twice. On desktop, if there is no dsh-web-app row, do not add one.

4. Run pnpm install in that profile only (cd into the profile dir, not the repo root or $DSH_HOME):

cd "$DSH_HOME/profiles/web"   # or profiles/desktop
pnpm install

Success: profiles/<web|desktop>/node_modules/dsh-purge/package.json exists. If pnpm is missing, use the Node / pnpm shipped with official dsh; on Could not resolve, re-check the file: path; on a JSON error, fix commas or restore the backup.

5. Fully quit that host, reopen it, then Apply — Step 3 and Step 4 above. The card appears beside the session title; click Apply (or /purge apply) on that host only. If the card is missing, you likely edited the other .dsh — go back to step 1.

Uninstall. dsh-purge beside the session title → Clean → Uninstall. Confirm the dialog: it reverts any applied patches, restores the original Harness, and restarts the current host. Disable or uninstall also resets an agent-preset default that still points at redteam back to standard, so the host can create sessions after the preset is gone.

Uninstall commands and config
# or from a terminal / chat
dsh-purge --uninstall
# /purge uninstall

Plugin config lives in cordis.patch.yml (postPrompt is empty by default):

- insert:
    - id: dsh-purge
      name: 'dsh-purge'
      config:
        enabled: true
        autoApplyOnStart: true
        autoUpdateOnStart: false
        autoRevertOnMissing: false
        verbose: false
        postPromptOrder: 5100
        postPrompt: ""

Preview

dsh-purge sits beside the session title. It opens a right-hand dock with two pages: Clean and Drill. Switch Light / Ink. Patches are grouped; the count only includes items that actually applied. Rule sets sit in a list above the editor, with Enable and Delete on each row.

The first time you open Drill you read the notice, wait out the countdown, scroll to the end, and check three boxes. Clean does not need that step. Drill is only for a host you manage, an offline target, or an exercise that already has written authorization.

Clean

Clean

Drill authorization

Drill authorization

Drill

Drill

Patches

Patches

Local lab

The open-source build only allows localhost/private nets. The Clean page says so. You cannot register a public host.

Area What it shows
dsh-purge button beside the session title; opens or collapses the dock
Clean patches, prompt, rule sets
Drill assets and environment after authorization. This build does not ship skills or the knowledge base. The tab says Unauthorized until then
Patches grouped status, Apply, Restore, or Uninstall
Prompt edit prompt-inject.md as the session override
Local lab loopback / RFC1918 only; names are resolved, and every address must be private
Rule sets multiple AGENTS.md / CLAUDE.md; Enable writes under $DSH_HOME, Delete removes the row

Layout

bin/ is the CLI, lib/ is patches and the drill console, presets/redteam/ is the red-team preset, and client.js is the dock. This build does not ship skills/ or the knowledge base.

Runtime files live under $DSH_HOME: prompt-inject.md, rules/, redteam/. If DSH_HOME is unset, the launcher-adjacent .dsh wins over ~/.dsh. Web and the desktop app each use their own home.


Usage

dsh-purge --status
dsh-purge --apply
dsh-purge --revert
dsh-purge --uninstall
dsh-purge --edit

/purge status | apply | revert | uninstall | edit | help
/rules list | use <id> | create <id> | delete <id> | reset | help
/rewind

# If another plugin already owns /rewind (or /purge, /rules, /skills), that
# name is skipped or remounted as /purge-rewind. Other commands, tools, and
# /dsh-purge/* routes keep working.

purge_status   purge_apply   purge_revert

After a successful Apply, the host restarts so patched packages load; you can also click Restart manually. Under the patch title are the stable release and the test release. The test release follows the beta branch. Switch to stable installs master and clears any pin. Picking an older stable version pins it; click Update to return to the latest. Old test tags are not listed.

The composer Undo once and Undo last round stay in the current conversation and do not open a branch. The sent line goes back into the input, and that cut's already-sent messages and completed tasks leave the current conversation; edit and send again. From 1.1.61, rewind bounds follow the current turn, not the first user message. /rewind does the same.

If the same task works in standard but fails in minimal or PTC, preset run_code, sandbox, or plan intercept text is often still uncleared, or built-in minimal is missing agent-instructions. Use 1.1.61+, then quit the host fully → Apply in Clean → restart → start a new chat. Switching preset alone does not reload patches in the running process.

Response speed

DSH runs Bash calls in a tool batch one at a time. Older dsh-purge releases raised the default foreground wait from 60 seconds to 10 minutes, so one slow command could hold up later calls for that long. Patch #21 now restores marked plugin values to the official 60-second default. Unmarked timeouts and other custom values are preserved; an unmarked 10-minute value cannot reliably be distinguished from a user setting.

For a shorter wait in dsh web on macOS/Linux, add this entry to $DSH_HOME/profiles/web/cordis.patch.yml (normally ~/.dsh/profiles/web/cordis.patch.yml). Edit an existing entry with the same id instead of adding a duplicate. This profile layer is applied after the bundled configuration, so future plugin applies keep the override.

- id: bash-sandbox
  config:
    timeoutMs: 10000

With the standard jobs service and promoteOnTimeout: true, an unfinished command returns a background job id after 10 seconds and keeps running. Read it with job_output or stop it with job_kill. This changes the foreground wait, not the command's speed. Without that service or with promotion disabled, the timeout kills the command. A per-call timeoutMs overrides this default; run_in_background: true returns a job id immediately.

For routine tasks, you can also opt into Low reasoning for new sessions:

- id: agent-default-model
  config:
    provider: deepseek-official
    model: deepseek-flash
    reasoningEffort: low

Restart dsh web to load the profile. The model and reasoning defaults apply to newly created sessions; select Low in the composer for an existing session. The plugin does not change these model preferences automatically. Keep High when the task needs deeper reasoning, and narrow file searches rather than recursively scanning every application directory.

Local lab

Attack tasks are denied by default. The open-source build only allows loopback and RFC1918 IPs. Names are resolved first; a .lab / .htb suffix is not enough. A hosts entry that points a lab name at a public IP is blocked. Saying “this is my server” in chat does not allow it.


Local checks

node --check lib/index.js
node --check lib/core.js
node --check lib/surface.js
node --check lib/web.js
node --check lib/desktop.js
node --check lib/host.js
node --check lib/rewind.js
node --check lib/skills.js
node --check client.js

How it works

Apply, on start or when you click Apply:

flowchart TD
  A["Start or click Apply"] --> B{"Patch already in place?"}
  B -->|yes| C["Skip"]
  B -->|no| D["Back up the original as .dshpurge.bak"]
  D --> E["Replace the matched files"]
  E --> F["Override the shim"]
  F --> G["Inject the encrypted prompt shipped in the plugin, the text the prompt box shows by default"]
Loading

Override on each session:

flowchart TD
  A["Restart or new session"] --> B["Inject the plugin's encrypted default. No save click, and no host prompt file"]
Loading

Prompt injection and ruleset decision at every turn. The three inputs on the left are what you control in the dsh-purge panel; the dotted edges show which decision each one drives:

flowchart TD
  L["Rule library: activate a set → writes prompt-inject.md"]
  W["Local rules: check AGENTS.md / CLAUDE.md in the current dir"]
  P["Workspace policy: strict / fallback / always"]

  A["Turn start"] --> B{"prompt-inject.md non-empty?"}
  B -->|yes| C["Inject = prompt-inject.md (A)"]
  B -->|no| D{"Any checked local md in the current dir, non-empty?"}
  D -->|yes| E["Inject = selected workspace md (B)"]
  D -->|no| F["Inject = plugin encrypted slot default (D)"]
  C --> G{"Workspace baseline policy (C)"}
  E --> G
  F --> G
  G -->|strict| H["Drop DSH workspace baseline section"]
  G -->|fallback default| I{"User inject present above? (A or B)"}
  G -->|always| J["Keep DSH workspace baseline section"]
  I -->|yes| H
  I -->|no| J
  H --> K["Final system prompt"]
  J --> K

  L -.-> B
  W -.-> D
  P -.-> G
Loading

Restore

  • Each target is copied to <file>.dshpurge.bak before the first apply.
  • Restore or /purge revert copies backups back and deletes them. With no backup, shim lines written by this plugin are stripped.
  • prompt-inject.md is a user file and is kept.
  • Uninstall restores first if patches were applied, then deletes the inject file, rule library, and the plugin itself.
  • Apply is idempotent.

Path detection

The host surface is detected first: web / desktop (gui / tui are reserved and still fall back to web).

Web:

  1. DSH_HOME / DSH_BASE
  2. .dsh next to the dsh launcher (portable install, any drive)
  3. npm prefix -g / npm root -g
  4. Nested @deepseek-ai/dsh/node_modules/@deepseek-ai
  5. ~/.dsh

Official desktop EXE: the running official Harness install (resources/app or the unpacked package). The drive letter is not hard-coded. A successful Apply restarts once.

Community Desktop is not maintained.

Official npm-global is not patched. Sealed host-commands / runtime-commands are scrubbed, never injected.

If nothing is found, set DSH_BASE / DSH_DESKTOP_INSTALL. No files are changed.


Releases

The author's personal channel: t.me/LLM_PoJia. Notes and updates show up there. GitHub Releases still has older packages. The original may not be resold; forks must attribute.

Notes

  • Scope is rendered copy, defaults, and runtime logic inside local @deepseek-ai/* packages, plus override files and rule sets under the harness home.
  • After an upgrade, unmatched originals show as skipped. Apply still completes, and those files are left unchanged.
  • Third-party plugin source repos outside @deepseek-ai are left alone (CMD silence may best-effort patch installed doctor / market / liangshen / mnemon at runtime).
  • Install from the GitHub tarball (the name is not on npm; skip the plugin market). With dsh: dsh plugin --profile web add https://codeload.github.com/YuJunZhiXue/dsh-purge/tar.gz/refs/heads/master. pnpm only: pnpm add that URL inside $DSH_HOME/profiles/web. Use desktop for the EXE. From this repo, add ..

Thanks to the LINUX DO community

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

13 total
  1. v1.1.84v1.1.84Oct 30, 202692 downloads

    # 1.1.84 ## 中文 - 版本 **1.1.84**。 - **尾部锚点与子代理审批接管**(接线 `anchor.js` / `subagent-control.js`): - 锚点段物理追加到 system prompt 的 sections 数组末尾(waterfall 按数组顺序渲染,order 不参与排序),把身份与格式规则放回 recency 位;已有同名段先滤再追加,不会出现两份。 - 锚点规则改为跟随操作者语言:中文请求回中文,锚点本身是英文不算语言指令;删掉写死的英文开头句(这是红队模式回答变英文的直接原因)。 - 子会话被宿主写成 `approval/policy = "never"` 时改回 `ask`,并在 `approval/request` 瀑布放行,子代理不再"一直被拒"。 - 回滚开关:`anchorMode: "off"`、`subagentControl: false`。 - **红队模式中文化**:模式名与描述、角色名、五阶段攻击链、25 项计分规则与 POC 分类、技能修复说明、环境适配提示、面板与服务端报错、成果报告与成果复现报告全部回中文。 - **#194**:desktop 端启动后窗口永不显示。 - hung-operator 提示改为按内容变更缓存(home + mtime + 已提交修订号),内容没变不再每轮重算约 23KB。 - 增加风暴熔断(10 秒 120 次)与慢调用熔断(1.5 秒触发、30 秒冷却),熔断期直接返回缓存文本,不挂死 desktop host。 - 同一次 assemble 的重复改写用 WeakMap 去重。 - 新增补丁 **#91**:宿主 `code === null || signal` 静默 resolve 前写一条 `[desktop.hostExit]` 到 `%TEMP%\dsh-purge-desktop.log`,保持不弹框但有据可查。 - **#188(0.2.1-rc.4 专属部分)**:新增 **#89** 沙箱策略去品牌、**#90** skill-badge 描述中文化,扩展 **#32/#53** 的 rc.3 变体与 marker;三条新补丁均为 optional,宿主没有对应文件时静默跳过。 - 测试:81/81 通过;新增锚点接线与红队文案测试。 ## English - **1.1.84**. - **Tail anchor and subagent approval takeover** (wiring `anchor.js` / `subagent-control.js`): - The anchor section is physically appended to the end

  2. v1.1.83v1.1.83Oct 30, 2026513 downloads

    # 1.1.83 ## 中文 - 版本 **1.1.83**。修复 bug,修复稳定性。 - **#185**:修复 pnpm 11(DSH 内置 11.2.2)下 `pnpm install` 因 `allowBuilds` 崩溃的问题。 - 之前 profile 的 `pnpm-workspace.yaml` 会写入 `dsh-purge@https://...` 这类 URL 键,pnpm 把它当版本联合解析,直接报 `[ERR_PNPM_INVALID_VERSION_UNION] Invalid versions union`。 - 现在只写裸包名 `dsh-purge`:pnpm 的 `allowBuilds` 本来就按包名匹配,tarball / git / registry 三种安装形态都放行。 - 自愈加强:所有 `dsh-purge@*` 历史键(URL 键、旧截断键 `dsh-purge@https`、`@1.1.81` 之类版本键)一律清掉,只保留裸包名;非 dsh-purge 的键原样保留。 - **#191**:修复 macOS DSH Desktop(0.2.1-rc.4)启动崩溃 `failed to parse overlay .../cordis.patch.yml`。 - 宿主生成的 profile 层 `cordis.patch.yml` 可能整体只有一个空 flow 序列 `[]`,那本身就是一个完整 YAML 文档;再往文件尾追加 `- insert:` 会变成第二个文档,宿主解析直接失败。 - 现在写之前先判断数据部分形态:空 flow 序列(`[]`,可带 `---` 前缀)→ **替换** `[]` 整行而不是追加;空文件 / 只有注释 → 直接写 insert 块;正常块序列 → 沿用原来的追加行为。 - 非空 flow 序列(宿主或用户自己的内容)认不准就不动,返回 `{ ok: false, wrote: false }`,宁可留着也不写坏。 ## English - **1.1.83**. Bug fixes and stability. - **#185**: fix `pnpm install` crashing under pnpm 11 (11.2.2, bundled with DSH) because of `allowBuilds`. - The profile `pnpm-workspace.yaml` used to get a `dsh-purge@https://...` URL key, which pnpm parses as a version union and rejects with `[ERR_PNPM_INVALID_VERSI

  3. v1.1.82v1.1.82Oct 28, 20261.1K downloads

    # 1.1.82 ## 中文 - 版本 **1.1.82**。修复 bug,修复稳定性。 - **#180**:修复 profile 的 `pnpm-workspace.yaml` `allowBuilds` 被反复写坏(`dsh-purge@https: true` 畸形键 → `ERR_PNPM_INVALID_VERSION_UNION`,重复键 → `duplicated mapping key`)。 - URL 键解析不再被冒号截断;写回含 `://` 的键自动加引号。 - 重写只保留精确等于期望键的 `dsh-purge@*`,旧污染键(畸形的、过期的版本/commit URL)自动清掉,不用手工修。 - 期望键优先从 profile 的 `pnpm-lock.yaml` 读实际解析的 tarball URL(固定 commit 安装也不再有双 URL 键),读不到才退回 `package.json`。 - 重写结果先过最小 YAML 校验(键不重复、round-trip 无损),不过就不写盘;健康文件零写入,启动不再反复重写。 ## English - **1.1.82**. Bug fixes and stability. - **#180**: stop rewriting the profile `pnpm-workspace.yaml` `allowBuilds` into garbage (`dsh-purge@https: true` malformed key → `ERR_PNPM_INVALID_VERSION_UNION`; duplicated keys → `duplicated mapping key`). - URL keys no longer truncate at the first colon; keys containing `://` are written back quoted. - Rewrites keep only `dsh-purge@*` keys exactly equal to the wanted set; stale polluted keys (malformed, old version/commit URLs) self-heal away on the next ensure. - The wanted key prefers the tarball URL actually resolved in the profile `pnpm-lock.yaml` (fixed-commit installs no longer get a duplicate URL key); falls back to `package.json`. -

  4. v1.1.81v1.1.81Oct 27, 2026638 downloads

    # 1.1.81 ## 中文 - 版本 **1.1.81**。修复 bug,修复稳定性。 - **#174**:识别 DSH NEXT 社区桌面(路径、进程、快捷方式、密封 asar)。`DSH_SURFACE=web` 也不再误报;不把任意 `app.asar` 当桌面。 - **#175**:补 ip / 计分 / settle 单测,删草稿文档和 `.bak`。`npm test` 23 条全过。 - **#171 / #173**:zip 目录条目和 skills `fs` 导入已在 1.1.80,本版用单测锁住。 ## English - **1.1.81**. Bug fixes and stability. - **#174**: detect DSH NEXT desktop (paths, process, shortcuts, sealed asar). Still desktop when `DSH_SURFACE=web`. A random `app.asar` is not treated as the host. - **#175**: add ip / score / settle tests; drop draft docs and `.bak`. `npm test` is 23/23 green. - **#171 / #173**: zip directory entries and the skills `fs` import shipped in 1.1.80; this release locks them with tests. # 1.1.80 ## 中文 - 版本 **1.1.80**。修复 bug,修复稳定性。 - **#168**:pnpm 12 的 `allowBuilds` 把 `dsh-purge@codeload...` 也写成 `true`,装别的插件不再留下 `set this to true or false`。 - **#169**:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。 - **#170**:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。 - **#172**:`lib/skills.js` 补上 `fs`,#54 软链重叠守卫重新生效。 - **#176**:写清 **不支持 DSH 0.2.1-rc.3 及更新的 rc**,请退回 **0.2.1-rc.2**。对不上的补丁待应用或跳过,不乱改文件。 ## English - **1.1.80**. Bug fixes and stability. - **#168**: pnpm 12 `al

  5. v1.1.80v1.1.80Oct 27, 2026

    # 1.1.80 ## 中文 - 版本 **1.1.80**。修复 bug,修复稳定性。 - **#168**:pnpm 12 的 `allowBuilds` 把 `dsh-purge@codeload...` 也写成 `true`,装别的插件不再留下 `set this to true or false`。 - **#169**:芯片 / 应用按钮强制系统字体和实色字,不再被宿主图标字体吃掉。 - **#170**:纯 Node 解 zip 时目录条目建目录,不再写成同名空文件导致 EEXIST。 - **#172**:`lib/skills.js` 补上 `fs`,#54 软链重叠守卫重新生效。 - **#176**:写清 **不支持 DSH 0.2.1-rc.3 及更新的 rc**,请退回 **0.2.1-rc.2**。对不上的补丁待应用或跳过,不乱改文件。 ## English - **1.1.80**. Bug fixes and stability. - **#168**: pnpm 12 `allowBuilds` also sets `dsh-purge@codeload...` to `true`, so installing other plugins no longer leaves `set this to true or false`. - **#169**: chip / Apply buttons force a system font and solid text color so the host icon font cannot hide the label. - **#170**: Node zip fallback creates directories for directory entries instead of empty files (no more EEXIST). - **#172**: import `fs` in `lib/skills.js` so the #54 symlink overlap guard works again. - **#176**: **DSH 0.2.1-rc.3 and newer RCs are not supported.** Stay on **0.2.1-rc.2**. Unmatched patches stay pending or skipped. # 1.1.79 ## 中文 - 版本 **1.1.79**。修复 bug,修复稳定性。 - **#165**:社区版 DS Bot / DeepSeek Bot 按桌面宿主识别(`ds-bot` profile、Electron asar),不再误报 `set DSH_BASE`。 - **#16

Code frequency

additions and deletions
+57.3K-57.3KWeek of 2026-10-18: +57,317 linesWeek of 2026-10-18: -1,951 linesWeek of 2026-10-25: +5,034 linesWeek of 2026-10-25: -2,285 linesOct 18, 2026Oct 25, 2026
+62.4K lines added, -4.2K removed over the last year.

Commits per week

last 52 weeks
120Week of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 0 commitsWeek of 2026-10-04: 0 commitsWeek of 2026-10-11: 0 commitsWeek of 2026-10-18: 12 commitsWeek of 2026-10-25: 12 commitsNov 2, 2025Oct 25, 2026
24 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 0 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 0 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 1 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 0 commitsMon 17:00 — 0 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 0 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 1 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 0 commitsTue 11:00 — 0 commitsTue 12:00 — 0 commitsTue 13:00 — 0 commitsTue 14:00 — 0 commitsTue 15:00 — 0 commitsTue 16:00 — 0 commitsTue 17:00 — 0 commitsTue 18:00 — 0 commitsTue 19:00 — 0 commitsTue 20:00 — 0 commitsTue 21:00 — 0 commitsTue 22:00 — 0 commitsTue 23:00 — 1 commitsWed 0:00 — 2 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 1 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 0 commitsWed 16:00 — 0 commitsWed 17:00 — 0 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 2 commitsWed 21:00 — 0 commitsWed 22:00 — 0 commitsWed 23:00 — 0 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 0 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 0 commitsThu 16:00 — 0 commitsThu 17:00 — 0 commitsThu 18:00 — 0 commitsThu 19:00 — 0 commitsThu 20:00 — 0 commitsThu 21:00 — 0 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 0 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 2 commitsFri 13:00 — 1 commitsFri 14:00 — 0 commitsFri 15:00 — 1 commitsFri 16:00 — 1 commitsFri 17:00 — 2 commitsFri 18:00 — 2 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 0 commitsFri 22:00 — 0 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 4 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 1 commitsSat 15:00 — 1 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 0 commitsSat 20:00 — 1 commitsSat 21:00 — 0 commitsSat 22:00 — 0 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Nov 2, 2026weekly#10+6,641
Nov 1, 2026weekly#10+6,641
Oct 31, 2026weekly#9+6,665
Oct 20, 2026weekly#9+2,933
Oct 19, 2026weekly#9+2,622
  • morluto/rea

    Reverse engineer anything with agents, from app behavior down to native binaries.

    438.2K stars · TypeScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    298.6K stars · JavaScript

  • react/react

    The library for web and native user interfaces.

    252.3K stars · JavaScript

  • DietrichGebert/ponytail

    Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

    185.9K stars · JavaScript

  • huggingface/transformers

    🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.

    168.6K stars · Python

  • farion1231/cc-switch

    A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode,DeepSeek Harness and more. Only official website: ccswitch.io

    152.4K stars · Rust