dshpkg
Security & health audit CLI for DeepSeek Harness (DSH) plugins — npm audit for the everything-is-a-plugin era.
The DSH plugin wave is the fastest-growing agent ecosystem on GitHub: the harness hit 209,000+ stars in ~3 weeks, and 13,000+ repos already carry the dsh-plugin topic. Plugins are npm packages that inject into host modules (@deepseek-ai/dsh-client-store, dsh-client-ui-conversation, …) and can ship host behavior patches (cordis.patch.yml). That is arbitrary code running inside your agent harness with your session, your keys, and your files.
Meanwhile the ecosystem's own tracker shows 12 high-star plugins failing to install/boot on recent dsh releases, and the community npm catalog has been stalled since 2026-08-26. Nobody is checking what a plugin actually does before you inject it.
dshpkg is the pre-flight check: search the ecosystem, get a plugin's health card, and security-scan its source — before it touches your harness.
$ dshpkg info XieZongChen/dsh-md-notes
dshpkg info — XieZongChen/dsh-md-notes
repo: XieZongChen/dsh-md-notes
stars: 16
open issues: 1
pushed: 2026-09-02
license: MIT
npm: dsh-md-notes
latest release: v0.10.0 (2026-08-31)
inject hooks 5 host module(s):
· @deepseek-ai/dsh-client-ui-renderer
· @deepseek-ai/dsh-client-locale
...
host patches ./cordis.patch.yml
$ dshpkg scan dickpy/dsh-imagegen
dshpkg scan — dickpy/dsh-imagegen (default branch: main)
inject hooks (8):
· @deepseek-ai/dsh-client-store
· @deepseek-ai/dsh-api-session-controller
...
findings: 3
[medium ] child_process exec src/updater.ts
[medium ] env enumeration src/updater.ts
[medium ] base64 blob (obfuscation) scripts/smoke.mjs
GRADE C — medium findings — review before install
Install
pip install dshpkg
Python 3.8+, stdlib-only — no dependencies.
Commands
| Command | What it does |
|---|---|
dshpkg search QUERY |
GitHub search across topic:dsh-plugin (stars, freshness, description) |
dshpkg info OWNER/REPO |
Health card: activity, npm mapping, latest release, inject hooks, host patches, compat warnings from recent issues |
dshpkg scan OWNER/REPO |
Downloads the tarball, extracts it hardened (traversal/symlink/bomb guards), scans for leaked credentials and dangerous code, grades A–F |
dshpkg doctor |
Local environment check: dsh install, node/npm, installed plugins |
Every command accepts --json for scripting. Set GITHUB_TOKEN (or GH_TOKEN) to lift the anonymous API cap from 60 to 5,000 req/hr — search users will hit the wall otherwise.
What scan looks for
- Leaked credentials — OpenAI/Anthropic-style keys, GitHub PATs, AWS keys, Google API keys, Slack/GitLab tokens, private key blocks (any file, including code)
- Dangerous code —
eval/new Function,child_processusage,curl | shinstallers (JS/TS and shell scripts), remote dynamic imports - Exfiltration signals — webhook.site / pastebin / Discord-webhook / Telegram-bot endpoints
- Obfuscation — large base64 blobs
- Manifest risk — npm lifecycle scripts (
postinstall,prepare, …), the fullclient.injecthook list, host patch files
Grades: A clean · B informational · C medium findings · D high findings · F critical (likely leaked credentials) or archive-safety refusal.
Honest limits
scan is a heuristic pre-flight check, not a security guarantee — a crafted plugin can pass pattern scanning. Treat D-grade as "do not inject", A-grade as "nothing obviously wrong." Read the flagged code yourself; --json output gives you file paths to jump to.
For plugin authors
A clean dshpkg scan is a trust signal worth putting in your README. If your plugin gets a D/F for intentional behavior (an updater using child_process, for example), that's expected — the grade asks humans to look, and the finding text shows exactly where.
Compatibility
doctor and info surface compatibility signals (recent install/boot failure issues, dsh version mismatches). The dsh-plugin ecosystem is young and moving fast — pin and verify.
License
MIT — Exaggarate/dshpkg
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dshpkg-0.1.0.tar.gz.
File metadata
- Download URL: dshpkg-0.1.0.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abcdbece4ed05c2a240e7fba974ac755e7ce3d593d281e8c3231ff1914c541ed
|
|
| MD5 |
869ef022f08c357912c63a71e568a2d4
|
|
| BLAKE2b-256 |
0f52c32bb0a6d65e31ba6cd2854f72ea906bd3121c7bbd5d4d71e1f17528f510
|
Provenance
The following attestation bundles were made for dshpkg-0.1.0.tar.gz:
Publisher:
publish.yml on Exaggarate/dshpkg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dshpkg-0.1.0.tar.gz -
Subject digest:
abcdbece4ed05c2a240e7fba974ac755e7ce3d593d281e8c3231ff1914c541ed - Sigstore transparency entry: 2687912551
- Sigstore integration time:
-
Permalink:
Exaggarate/dshpkg@f50c7de8e13d42f1cefa26b426b4cc24058d3142 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Exaggarate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f50c7de8e13d42f1cefa26b426b4cc24058d3142 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file dshpkg-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dshpkg-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
169da747fa893b46be3498b3ecd77c4e781fc2a3efb6b6fbe7596a938aa8051c
|
|
| MD5 |
ca48a0ac989d109c06decc5c2c3e0595
|
|
| BLAKE2b-256 |
e696f29ab9d9e235fff571796414e89538c31da3e366ecd8efc35bc1a1c7e2b7
|
Provenance
The following attestation bundles were made for dshpkg-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Exaggarate/dshpkg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dshpkg-0.1.0-py3-none-any.whl -
Subject digest:
169da747fa893b46be3498b3ecd77c4e781fc2a3efb6b6fbe7596a938aa8051c - Sigstore transparency entry: 2687913070
- Sigstore integration time:
-
Permalink:
Exaggarate/dshpkg@f50c7de8e13d42f1cefa26b426b4cc24058d3142 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Exaggarate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f50c7de8e13d42f1cefa26b426b4cc24058d3142 -
Trigger Event:
workflow_dispatch
-
Statement type: