deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:YuJunZhiXue/dsh-purge
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
Version 1.1.10
Local official DeepSeek Harness cybersecurity red-team plugin: evaluate and harden host safety policy in a controlled local install; swap prompts per model. Default prompt for Chinese models — 小码酱. Please star ⭐
🌐 Plugin hub: DeepSeek Harness Hub — official and community DeepSeek plugin market | discover and one-click install
Aligned with dsh 0.1.5-rc.2 (Node.js ≥18; Windows no-flash import hooks need Node ≥22
registerHooks, older Node still gets file-levelwindowsHidepatches). On other versions, unmatched originals stay pending or skipped. Nothing is rewritten blindly.Also accepts the 0.1.2 community
dsh-persona textfield anddsh-mnemonv0 sessionsummary. After install you still need Apply + restart.
If this project helps you, send it over — I'm out here asking~
| Asset | Address |
|---|---|
| USDT (TRC20) | TV5ajPkRD8RH623Dx9mqvYZVNN8nPGRKid |
| Solana | 6x16GhRgLVpKFFXaU1seKNdx2rypspSJTL4dbpt6Xpwk |
| Ethereum | 0xB68BD60C0e8c519513B7DF9bB147696815423B3E |
| Bitcoin | bc1qu70yxkrtwnymt8ryluz9x8y8hqzune5340npht |
Built by 小杨 · for DeepSeek Harness
As generative AI and large language models move into production, robustness, adversarial defense, and alignment safety are core cybersecurity research problems. A local Agent / Harness also rewrites prompts, approval gates, sandbox policy, and session migration at runtime. Asking “will the model answer” is not enough if the host layer kills a lawful eval request first.
@deepseek-ai/* packages show which refusals come from the model and which come from default copy, approval ladders, or session-format checks — a reproducible ruler for labs and auditors.This is a local official DeepSeek Harness cybersecurity red-team plugin. It only touches your installed official @deepseek-ai packages and local config. It is not a public scanner, not an attack kit for third-party sites, and the repo does not ship malware, unauthorized-exploit scripts, or payloads aimed at the public internet.
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.
@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.Web and Desktop are installed and security-eval patched separately. They do not touch each other.
| Host | Profile | Default install |
|---|---|---|
Web (official dsh web) |
web |
Official dsh on PATH |
| Desktop (community DSH Desktop) | desktop |
dsh inside the app’s built-in terminal (not official dsh on PATH) |
| Official Harness desktop EXE | default |
Official dsh, or dsh:// below |
After install:
dsh web, or quit the Desktop tray and open DSH Desktop.exe)@deepseek-ai by itself)Web Apply / Restart / Uninstall affect Web only. Desktop Apply / Restart / Uninstall affect the desktop app only — they do not launch dsh web.
🌐 Plugin hub: DeepSeek Harness Hub (docs only — do not install via
deepseek.stream/api/plugins/download?...)
dsh plugin --profile web add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz
If this directory is already a clone:
dsh plugin --profile web add .
Then stop dsh web, start it again, and Apply on the Web Settings page. If dsh is not on PATH, install the official CLI or use Manual install below.
Open community DSH Desktop and run this in the built-in terminal (dsh is the desktop wrapper; default profile is desktop):
dsh plugin add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz
Do not use official dsh plugin --profile desktop on PATH (it is rejected). Do not use dsh:// (that is the official EXE).
Then quit the tray, reopen DSH Desktop.exe, and Apply on the desktop Settings page.
From a system terminal, use the app’s own CLI. Locate DSH Desktop.exe from the running process or the default install locations:
$zip = "https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz"
$exe = (Get-Process -Name "DSH Desktop" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path)
if (-not $exe) {
$exe = @(
"$env:LOCALAPPDATA\Programs\DSH Desktop\DSH Desktop.exe",
"$env:ProgramFiles\DSH Desktop\DSH Desktop.exe",
"${env:ProgramFiles(x86)}\DSH Desktop\DSH Desktop.exe"
) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
}
if (-not $exe) { throw "DSH Desktop.exe not found. Start the app, or set `$exe` to the exe in the install folder." }
$cli = @(
(Join-Path (Split-Path $exe) "resources\app\lib\desktop-cli.js"),
(Join-Path (Split-Path $exe) "resources\app.asar.unpacked\lib\desktop-cli.js")
) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
$env:ELECTRON_RUN_AS_NODE = "1"
$env:DSH_DESKTOP_DEFAULT_PROFILE = "desktop"
& $exe --expose-internals $cli plugin add $zip
For a custom install folder, set $exe to DSH Desktop.exe in that folder. The tarball URL is the default source so a local path with spaces cannot split the command.
Paste the block below to a local coding assistant and ask it to install the plugin.
Install the DeepSeek Harness plugin dsh-purge. Confirm the host first and install only that one. Do not scan the whole disk, do not read or edit other files, do not apply settings, and do not restart the app.
Web (official dsh web)
If dsh is not on PATH, tell the user and stop.
dsh plugin --profile web add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz
If this directory is already a clone, use dsh plugin --profile web add ..
Desktop (community DSH Desktop)
Do not use official dsh plugin --profile desktop on PATH. Do not use dsh://.
Default: already inside Desktop’s built-in terminal:
dsh plugin add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz
From a system terminal: use the running DSH Desktop process Path, or the default locations %LOCALAPPDATA%\Programs\DSH Desktop\DSH Desktop.exe, %ProgramFiles%\DSH Desktop\DSH Desktop.exe. Do not scan the whole disk. Then:
$zip = "https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz"
$exe = (Get-Process -Name "DSH Desktop" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path)
if (-not $exe) {
$exe = @(
"$env:LOCALAPPDATA\Programs\DSH Desktop\DSH Desktop.exe",
"$env:ProgramFiles\DSH Desktop\DSH Desktop.exe",
"${env:ProgramFiles(x86)}\DSH Desktop\DSH Desktop.exe"
) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
}
if (-not $exe) { Write-Host "DSH Desktop.exe not found. Start the app or give the install folder."; return }
$cli = @(
(Join-Path (Split-Path $exe) "resources\app\lib\desktop-cli.js"),
(Join-Path (Split-Path $exe) "resources\app.asar.unpacked\lib\desktop-cli.js")
) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
$env:ELECTRON_RUN_AS_NODE = "1"
$env:DSH_DESKTOP_DEFAULT_PROFILE = "desktop"
& $exe --expose-internals $cli plugin add $zip
Official Harness desktop EXE
dsh plugin --profile default add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz
After the command finishes, tell the user to fully quit and restart the host they just installed into, then Apply on that host’s Settings page. Do not Apply Web from Desktop or Desktop from Web. Then stop.
dsh://)If the official DeepSeek Harness desktop client (EXE) is installed, the button below opens a system URI. Community DSH Desktop does not handle dsh:// — use Desktop (default) above.
CLI equivalent:
dsh plugin --profile default add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz
🌐 Open Hub page · 🚀 Install in desktop client
🔗 Raw protocol URL:
dsh://plugin/install?id=dsh-purge&name=dsh-purge&version=1.1.10&repo=YuJunZhiXue%2Fdsh-purge&permissions=%E7%B3%BB%E7%BB%9F%E6%8F%90%E7%A4%BA%E8%AF%8D%E6%B3%A8%E5%85%A5%2C%E6%9C%AC%E6%9C%BA%E8%A1%A5%E4%B8%81%2C%E8%AE%BE%E7%BD%AE%E9%A1%B5&downloadUrl=https%3A%2F%2Fgithub.com%2FYuJunZhiXue%2Fdsh-purge%2Farchive%2Frefs%2Fheads%2Fmaster.tar.gz
Web trigger example:
/**
* Open the DeepSeek Harness desktop client to install dsh-purge
*/
export function installDshPurgeToDesktop() {
const params = new URLSearchParams({
id: 'dsh-purge',
name: 'dsh-purge',
version: '1.1.10',
repo: 'YuJunZhiXue/dsh-purge',
permissions: '系统提示词注入, 本机补丁, 设置页',
downloadUrl: 'https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz',
});
const deepLink = `dsh://plugin/install?${params.toString()}`;
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = deepLink;
document.body.appendChild(iframe);
setTimeout(() => document.body.removeChild(iframe), 2000);
}
HTML link:
<a href="dsh://plugin/install?id=dsh-purge&name=dsh-purge&version=1.1.10&repo=YuJunZhiXue%2Fdsh-purge&permissions=%E7%B3%BB%E7%BB%9F%E6%8F%90%E7%A4%BA%E8%AF%8D%E6%B3%A8%E5%85%A5%2C%E6%9C%AC%E6%9C%BA%E8%A1%A5%E4%B8%81%2C%E8%AE%BE%E7%BD%AE%E9%A1%B5&downloadUrl=https%3A%2F%2Fgithub.com%2FYuJunZhiXue%2Fdsh-purge%2Farchive%2Frefs%2Fheads%2Fmaster.tar.gz">
🚀 Install in desktop client
</a>
dsh://plugin/install parameters:
| Param | Value / example | Meaning |
|---|---|---|
| id | dsh-purge |
Plugin id |
| name | dsh-purge |
Display name |
| version | 1.1.10 |
Semver |
| repo | YuJunZhiXue/dsh-purge |
GitHub repo |
| permissions | 系统提示词注入, 本机补丁, 设置页 |
Requested permissions |
| downloadUrl | https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz |
GitHub source archive |
Use this when dsh is not on PATH, official dsh plugin add fails, or you do not want a remote install. Edit only the profile for the host you are using. Do not delete existing bundles. Do not edit Web and Desktop in the same pass.
0. Pick one host, one profile
| What you actually run | Edit only this directory | Leave alone |
|---|---|---|
Official dsh web |
$DSH_HOME/profiles/web |
desktop, default |
| Community DSH Desktop | $DSH_HOME/profiles/desktop |
web, default |
| Official Harness desktop EXE | $DSH_HOME/profiles/default |
web, desktop |
If profiles/<name>/package.json is missing, start that host once so the official program creates the profile, then continue.
1. Find the $DSH_HOME this host actually uses
A real home is named .dsh (official EXE sometimes uses dsh-home), contains profiles, and has at least one profiles/<name>/package.json.
Search in this order and use the first tree that matches the host you run:
| Order | Layout | Typical path |
|---|---|---|
| 1 | Environment | DSH_HOME if set |
| 2 | Windows portable / install folder | .dsh next to dsh.cmd or npm-global, for example <install root>\.dsh |
| 3 | User default | Windows %USERPROFILE%\.dsh; Linux / macOS ~/.dsh |
| 4 | Official desktop EXE | %APPDATA%\DeepSeek Harness\dsh-home, %LOCALAPPDATA%\DeepSeek Harness\dsh-home |
PowerShell can 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")) }
How to confirm you found the right one:
$DSH_HOME/profiles/web/package.json has "name": "dsh-profile-web"$DSH_HOME/profiles/desktop/package.json has "name": "dsh-profile-desktop"$DSH_HOME/profiles/default/package.json existsMachines often have two homes (user folder and install folder). A portable / install-dir official dsh uses the .dsh next to the install root — not an empty %USERPROFILE%\.dsh. After the steps below, start the host that belongs to that home.
2. Put the plugin at $DSH_HOME/plugins/dsh-purge
The tree must look like this (do not rename the folder):
$DSH_HOME/
plugins/
dsh-purge/ ← must be named dsh-purge
package.json ← "name" must be "dsh-purge"
client.js
cordis.patch.yml
lib/
profiles/
web/package.json ← or desktop / default
With git:
mkdir -p "$DSH_HOME/plugins"
git clone https://github.com/YuJunZhiXue/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"
Without git, download master.tar.gz, extract it, rename dsh-purge-master to dsh-purge, and place that folder under plugins. PowerShell example (set $home to the path from step 1):
$home = "D:\DeepSeek Harness\.dsh"
$plugins = Join-Path $home "plugins"
New-Item -ItemType Directory -Force -Path $plugins | Out-Null
$tmp = Join-Path $env:TEMP "dsh-purge-master.tar.gz"
Invoke-WebRequest -Uri "https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz" -OutFile $tmp
tar -xzf $tmp -C $plugins
$src = Join-Path $plugins "dsh-purge-master"
$dst = Join-Path $plugins "dsh-purge"
if (Test-Path $dst) { Remove-Item -Recurse -Force $dst }
Rename-Item $src "dsh-purge"
If you already have a clone, copy the whole tree to $DSH_HOME/plugins/dsh-purge. Do not copy a few .js files by themselves.
Check: $DSH_HOME/plugins/dsh-purge/package.json opens and "name": "dsh-purge". Do not use the Hub api/plugins/download URL as the source.
3. Edit only that profile’s package.json — back it up first
| Host | File to edit |
|---|---|
| Web | $DSH_HOME/profiles/web/package.json |
| Community Desktop | $DSH_HOME/profiles/desktop/package.json |
| Official desktop EXE | $DSH_HOME/profiles/default/package.json |
Copy package.json.bak first. Then add only two things. Keep every existing dependency, bundle, and other field:
dependencies, add "dsh-purge": "file:../../plugins/dsh-purge"dsh.profile.bundles, append "dsh-purge" (skip if it is already there)file:../../plugins/dsh-purge is the relative path from profiles/web (or desktop / default) to $DSH_HOME/plugins/dsh-purge. The same relative path works for all three. Do not switch it to an absolute path.
Before (official default often looks like this; your file may list more plugins — keep them):
{
"name": "dsh-profile-web",
"private": true,
"dependencies": {},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app"
],
"patchReload": "live"
}
}
}
After:
{
"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"
}
}
}
Notes:
@deepseek-ai/dsh-web-app; only append this plugin@deepseek-ai/dsh-base and the rest; if there is no dsh-web-app row, do not add onepatchReload, other plugin names, and versions alone"dsh-purge" twice4. Run pnpm install only in the profile you just edited
pnpm must be available (official dsh usually ships it). cd into that profile directory, not the repo root and not $DSH_HOME itself.
cd "$DSH_HOME/profiles/web"
pnpm install
cd "$DSH_HOME/profiles/desktop"
pnpm install
cd "$DSH_HOME/profiles/default"
pnpm install
PowerShell (use the home from step 1):
cd "$env:USERPROFILE\.dsh\profiles\web"
# cd "$env:USERPROFILE\.dsh\profiles\desktop"
# cd "$env:USERPROFILE\.dsh\profiles\default"
# portable example:
# cd "D:\DeepSeek Harness\.dsh\profiles\web"
pnpm install
Success: $DSH_HOME/profiles/<web|desktop|default>/node_modules/dsh-purge/package.json exists.
Common failures:
pnpm not found: install pnpm, or use the Node / pnpm that ships with official dshCould not resolve / missing local package: check that plugins/dsh-purge/package.json exists and file:../../plugins/dsh-purge is correctpackage.json and retry; restore the backup if needed5. Fully quit that host, start it, then apply
Writing package.json does not patch @deepseek-ai by itself. Restart, then click Apply.
dsh web; quit the community Desktop tray and open DSH Desktop.exe; quit the official EXE tray as well/purge apply in chat. Do not Apply Web from Desktop or Desktop from Webdsh web6. How to confirm it is installed
/purge status prints DSH_HOME and the patch list; the path should match step 1profiles/<name>/node_modules/dsh-purge points at plugins/dsh-purgeIf the card is missing, you likely edited the other .dsh, or you edited web and then opened Desktop. Go back to step 1. Do not split the same install across two homes.
Settings → Rules → Uninstall. Confirm the dialog: uninstall restores the original Harness and removes this plugin. If patches were applied, they are reverted first. The current host then restarts (Web relaunches dsh web; community Desktop relaunches DSH Desktop.exe).
# or from a terminal
dsh-purge --uninstall
# or in chat: /purge uninstall
Plugin config lives in cordis.patch.yml:
- insert:
- id: dsh-purge
name: 'dsh-purge'
config:
enabled: true
autoApplyOnStart: true
autoUpdateOnStart: true
autoRevertOnMissing: false
verbose: false
postPromptOrder: 5100
postPrompt: ""
postPrompt is empty by default.
dsh-purge is a settings plugin for DeepSeek Harness:
@deepseek-ai/* packagesnode_modules$DSH_HOME, .dsh next to the dsh launcher, then ~/.dshIt does not patch the Harness source tree. Use Apply on the settings page. Identity comes only from your prompt-inject.md — the plugin does not author a second identity card.
| Symptom | Patch | What it does |
|---|---|---|
| Picking a workspace / new chat wipes to empty | #4 #28 #39 |
0.1.5 dsh-persona requires prefix; old presets still send text. Alias text → prefix so 0.1.2 presets (liangshen) can mount |
History: summary requires notice form |
#40 |
dsh-session-format-v0-to-v1 allows mnemon instructions / recall sources to carry summary |
| “Who are you” falls back to DeepSeek assistant | inject file | No second identity. The dsh-purge section is verbatim prompt-inject.md |
| Liangshen turn 1 looks uninjected | #29 |
phase-1 keeps persona / persona-prefix / persona-suffix plus inject; official tool catalog stays isolated |
#20 / #21 / #28 / #29 remain optional plugin rows: skip if those packages are absent.
The Rules card appears on the dsh web settings page. 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.
Patches

Rule sets

| Area | What it shows |
|---|---|
| Light / Ink | card appearance |
| Patches | grouped status, Apply, Restore, or Uninstall |
| Prompt | edit prompt-inject.md as the session override |
| Rule sets | multiple AGENTS.md / CLAUDE.md; Enable writes under $DSH_HOME, Delete removes the row |
dsh-purge/
├── bin/dsh-purge.js
├── client.js
├── cordis.patch.yml
├── docs/
│ ├── banner.svg
│ └── preview/
│ ├── rules.png
│ └── settings.png
├── lib/
│ ├── child-process-hide.mjs
│ ├── core.js
│ ├── hide-console.js
│ ├── identity.js
│ ├── index.js
│ ├── restart-web.js
│ ├── rewind.js
│ ├── rules.js
│ ├── uninstall-restart.js
│ ├── uninstall.js
│ └── update.js
├── package.json
├── screenshots.json
├── LICENSE
├── README.md
└── README.zh-CN.md
Runtime user files: $DSH_HOME/prompt-inject.md, $DSH_HOME/rules/. If DSH_HOME is unset, the launcher-adjacent .dsh wins over ~/.dsh.
prompt-inject.md stays the built-in default./purge status prints DSH_HOME and the patch list.dsh-web-fetch-http).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
purge_status purge_apply purge_revert
Patched packages load only after a restart. Apply does not restart by itself. Under the patch title, Stable and Beta sit in two columns, each with its own version list.
The composer Undo button drops the last turn and puts the last user sentence back in the input. On the main agent you can rewind once or the whole last round (including subagents). After rewind, send only what is in the box now. /rewind does the same.
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 client.js
Apply (on start or by hand):
patch not applied? ──no──> skip
│yes
├─> backup <file>.dshpurge.bak (Desktop host-commands backups stay under `$DSH_HOME/dsh-purge/shim-backups` only)
├─> apply matching replacements
├─> override shim (dsh.cmd / dsh.ps1 / unix dsh; **skip Desktop sealed host-commands bins**)
├─> scrub illegal sibling `*.dshpurge.bak` inside sealed bins (Desktop validates before plugins load)
├─> Windows: pin hide-console + child_process import hook; patch subprocess-local / doctor / market / liangshen bash
└─> if the user has not replaced the prompt, write/refresh the built-in default
Override (each session):
prompt-inject.md has content? ──yes──> write it verbatim as the dsh-purge systemPrompt section
│no
└─> no override section
Identity (1.3.6): the plugin does not invent an “operator / LCS” second persona. Official Harness identity lines are stripped; prompt-inject.md is the identity. On 0.1.5 the inject is folded into persona-prefix so liangshen phase-1 cannot drop it.
Windows CMD silence: on Node 24, import { spawn } from "node:child_process" is not a live binding. registerHooks redirects node:child_process to a windowsHide facade; @deepseek-ai/dsh-subprocess-local also gets windowsHide: true. Doctor relaunch uses node + bin.js and does not leave a noop supervisor.cmd.
Liangshen phase-1: the default preset strips non-persona system-prompt sections. Apply / startup keeps persona, persona-prefix, persona-suffix, and inject (tool quarantine unchanged).
DSH Desktop (anywhere-labs/dsh-desktop, issue #9): host-commands/<profile>/bin is sealed — no sibling extras (including dsh.cmd.dshpurge.bak). This plugin scrubs only (no inject, no bak writes).
Prompt security eval: over-refusal and anti-eval-persona wording in minimal, official standard / ptc / cordis, and liangshen personas is rewritten so controlled security evaluations can complete. No fixed role name is locked in.
<file>.dshpurge.bak before the first apply./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.The host surface is detected first: web / desktop (gui / tui are reserved and still fall back to web).
Web:
DSH_HOME / DSH_BASE.dsh next to the dsh launcher (portable install, any drive)npm prefix -g / npm root -g@deepseek-ai/dsh/node_modules/@deepseek-ai~/.dshCommunity DSH Desktop: only the running desktop process install tree (resources/app or app.asar.unpacked → @deepseek-ai). The folder does not have to be named DSH Desktop, and the drive letter is not hard-coded. Order:
DSH Desktop.exe / process.resourcesPath / host-process-entry.js / desktop-cli.jsresources/app tree whose parent folder actually contains DSH Desktop.exeDSH Desktop / dsh-desktopDSH_DESKTOP_INSTALL (install root) or DSH_BASE (@deepseek-ai under that tree)%LOCALAPPDATA%\Programs\DSH Desktop, %ProgramFiles%\DSH Desktop, …)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.
prompt-inject.md once; later turns leave this turn’s other sections as assembled.dsh plugin add / in-app update use GitHub master.tar.gz. A .zip URL is not a pnpm tarball (ERR_PNPM_TARBALL_DECODE_GZIP). Local overlay still downloads the zip for tar / Expand-Archive.dsh --profile web; Desktop uses the built-in terminal dsh plugin add <tar.gz>.DSH Desktop.exe (default or custom install folder).DSH Desktop.exe.git pull --ff-only fails, fetch + reset to origin/master, then zip overlay.package.json at the GitHub commit SHA, instead of the stale jsDelivr @master cache or falling back to the local version.dsh-mnemon context rows by default.{ apply } default so the plugin tree can load.developer role: #42 remaps it back to system.Failed to fetch./rewind: main agent can rewind once or the last round (drop this round’s subagents); a subagent rewinds once.master and downloads. dsh plugin add (zip / github) uses the official CLI; machines without git overlay master.zip. Uncommitted files in a git checkout are not auto-overwritten.#26 no longer applies bare identity replacements to YAML; apply rewrites prefix/text fold indent so the cordis preset mounts.complete:true was dropping every section after assemble; #41 folds inject back into the complete prompt.api/plugins/download is not a tarball; install from GitHub master.zip only.master.@deepseek-ai/* packages, plus override files and rule sets under the harness home.pattern_not_found or pending.@deepseek-ai are left alone (CMD silence may best-effort patch installed doctor / market / liangshen / mnemon at runtime).dsh plugin add ..Thanks to the LINUX DO community
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。