😈 dsh-verification-meme
🌐 English | 中文
A prank "security verification" plugin for DeepSeek Harness: it intercepts button clicks in the
Harness web UI (including workspace/view switches) and only lets them through after a random
"security verification". Ships with 7 verification types, a prank console, an admin bypass,
runaway settings buttons, ban-on-failures, and more.
UI language: the plugin is bilingual — it follows the language setting of the
Harness GUI automatically (choose Chinese in Harness settings for the Chinese prank UI,
English for the English one; unset falls back to the browser). You can also force a
language in the console (🌐 UI language).
Client-only plugin: all logic runs in the browser. The 20 built-in photo-grid images and
their answers are embedded into lib/client.js (base64) at build time, so nothing external
is downloaded at install/runtime. Configuration persists in browser localStorage. The host
half is a no-op entry point and publishes no services.
Screenshots
Repository layout
.
├── package.json # package name dsh-verification-meme (unscoped, avoids collisions with official @deepseek-ai/* runtime injections)
├── cordis.patch.yml # bundle patch: declares the mount row (applied automatically via dsh.bundle.patch)
├── lib/
│ ├── index.js # host half (no-op entry, so the composition row can mount)
│ ├── client.js # client half (build artifact, embeds the photo data)
│ ├── client.template.js # client source template (with __PHOTOS_JSON__ placeholder)
│ ├── modal.css.txt # modal styles (inlined at build time)
│ └── panel.css.txt # console panel styles (inlined at build time)
├── photo/ # build input: 20 photos, 400×400 (1.jpg ~ 20.jpg)
├── test.txt # build input: photo-grid answers (format documented in the file header)
├── tools/build.ps1 # rebuild script
├── preview/ # screenshots used in the README
├── README.md # English documentation (this file)
└── README.zh.md # 中文说明
The other folders (api/, config-ui/, dsh-plugin/, harness/, userscript/) are
backups from the early development process. The plugin does not depend on them — feel free
to delete them before publishing.
Install
# From a GitHub repo (the market downloads the whole repo tarball via codeload)
dsh plugin --profile web add github:<your-username>/dsh-verification-meme
# From a local directory
dsh plugin --profile web add link:C:/path/to/dsh-verification-meme
# From npm after publishing
dsh plugin --profile web add dsh-verification-meme
Restart DSH afterwards (or wait for the next boot), then open Settings → 😈 安全验证 /
Security. The plugin defaults to enabled: true, mode: chaos (intercepts everything) —
you may want to click 👑 Bypass 15 min before changing settings.
Photos and answers (test.txt)
Nothing is downloaded at runtime — everything is embedded in lib/client.js.
photo/ and test.txt are only the build inputs:
- Replace
photo/1.jpg ~ 20.jpg and edit test.txt (three lines per photo:
(number), the correct tile digits, the object to find; 0 = no correct tiles);
- Run
pwsh tools\build.ps1 from the repo root to regenerate lib/client.js;
- Reinstall (or overwrite
node_modules\dsh-verification-meme\lib\client.js in the
web profile) and restart.
Configuration
| Setting | Default | Notes |
|---|
| Master switch | on | Turns interception off entirely |
| Trigger mode | chaos | chaos/every_click = intercept all; specific_actions = button list; new_topic_only = only new-topic actions |
| Verification types | all 7 | Confirmation / CAPTCHA / human check / landscape slider / puzzle slider / photo grid / animal grid |
| Admin bypass | off | Lets everything through for 5/15/30 minutes |
| Max retries | 3 | Exceeding it marks you as a robot |
| Runaway settings buttons | on | The master switch / trigger mode controls escape 3 times before behaving |
| Ban on failures | off | N failures = N-second ban |
| UI language | follow Harness | auto / 中文 / English |
Publishing to GitHub / npm
- GitHub: push this repo; users install with
dsh plugin --profile web add github:owner/repo. The dsh.bundle.patch declaration in
package.json automatically supplies the mount row on the next boot, so users never edit
cordis.patch.yml by hand.
- npm:
npm publish — the files field only ships lib/, cordis.patch.yml and
README.md; the build inputs (photo/, test.txt) stay out of the npm package.