DeepSeek Harness Plugin

liuwenji007/dsh-muyu

Stars ★ 3 Downloads (30d) 1,271 Category Just for Fun Added 2026-08-20 npm dsh-muyu

Electronic wooden fish in the bottom-right corner of the DSH web UI, a whale-girl sprite by default: tap the head to earn merit; it knocks by itself while the model is busy; per-session merit is stored locally, and the sprite can be swapped for custom art.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-muyu

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:liuwenji007/dsh-muyu

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

中文 | English

Harness is still preview. Capacity feels tight, the API sometimes crawls, and a loop can die mid-turn. Waiting those minutes gets under your skin — so here is a sulky little blue whale in the corner. Knock her once for a merit while you wait. Hope the compute farms catch up and the prices come down. When she is busy she knocks herself; AFK merit, goof off a little.

Wooden-fish overlay in the lower-right of the Web client. Knock the head for merit; while the model is thinking or streaming she knocks on her own. Merit stays in this browser — never the session log, never an extra request. Swap the art if you want.

Manual Auto
tap auto-tap

Play

  • Click the head: +1 merit. Enough knocks in a row and she bumps.
  • Use the lock chip to unlock, drag, then lock again; while unlocked, scroll or use −/+ to scale. Settings can hide the chip.
  • While the current session is busy: auto-knocks also score (about 1 merit per second by default).
  • Switch session: the plaque shows that session's count (0 if unseen); pose resets.
  • Plaque is censer or board (default censer). Exact digits through 9999, then Nk.
  • prefers-reduced-motion skips the hop and the floating +1.

Tune feel and packs in Settings → Wooden fish. Library to import/switch; Edit to align; remote URL for hosted packs.

Community skins: dsh-muyu-skins (import zip → Library → Use).

Install

You need a working dsh web (DeepSeek Harness).

Requires dsh ≥ 0.1.0-rc.8 (recommend 0.1.1-rc.2). dsh-muyu 0.1.5+ needs @deepseek-ai/dsh-client-store in the host module table.

Upgrade in pairs — the market will not block a mismatched bump:

Host This plugin Result
new (has dsh-client-store) ≥ 0.1.5 OK
new ≤ 0.1.4 dsh-client-runtime/client missed the module table
old (only dsh-client-runtime/client) ≤ 0.1.4 OK
old ≥ 0.1.5 dsh-client-store missed the module table
dsh ≥ 0.1.7 ≤ 0.1.8 Knocks, but records no merit and floats no +1

Do not bump only the fish to 0.1.5 on an old dsh — upgrade the host first, then the plugin; or pin dsh-muyu@0.1.4 until you can.

≤ 0.1.8 on dsh ≥ 0.1.7 records no merit and floats no +1. From 0.1.7 the open session is no longer current on the list; the main view holds that row (retainedBy.mainView). 0.1.9 reads that hold (older hosts still use current). Stored merit is left as it is.

Check the host first:

dsh --version
# if too old: npm i -g @deepseek-ai/dsh@latest

From npm (recommended)

dsh plugin --profile web add dsh-muyu
dsh --profile web

Already installed: update from Plugin Market, or dsh plugin --profile web add dsh-muyu@latest, then restart Web. The published tarball already contains lib/, so allowBuilds is usually unnecessary.

From GitHub

dsh plugin --profile web add github:liuwenji007/dsh-muyu
dsh --profile web

pnpm ≥10 may block a git dependency's prepare. After the first failure, add the package key pnpm printed to that profile's pnpm-workspace.yaml:

allowBuilds:
  dsh-muyu: true

Then add again. Prefer pinning a commit: github:liuwenji007/dsh-muyu#<sha>.

Local link (development)

cd /abs/path/to/dsh-muyu
pnpm install
dsh plugin --profile web add link:/abs/path/to/dsh-muyu
dsh --profile web

Verify and remove

  • Working: the fish is in the corner, or dsh --profile web --dump-config lists this package. A page refresh is not enough — restart dsh web / dsh --profile web.
  • Remove: dsh plugin --profile web remove dsh-muyu, then restart. Remove does not wipe browser merit or library packs; reinstall restores them. To erase everything, use Settings → Wooden fish → Data → Clear all wooden-fish data.

Troubleshooting

If Then
dsh-client-runtime/client or dsh-client-store missed the module table Host/plugin mismatch: new host needs ≥ 0.1.5; on an old host upgrade dsh ≥ 0.1.0-rc.8 then the plugin (or pin dsh-muyu@0.1.4); Market update or add dsh-muyu@…, restart Web
Knocking records no merit and floats no +1 (dsh ≥ 0.1.7) The plugin is ≤ 0.1.8. Upgrade to ≥ 0.1.9 and restart Web
two overlays The Web bundle may already ship ui-muyu. In the profile cordis.patch.yml, set - id: ui-muyu / disabled: true
git install hits allowBuilds See “From GitHub” above
prefer a tarball pnpm pack, then dsh plugin add ./dsh-muyu-0.1.0.tgz

Settings

Field Default Meaning
Show overlay on Off hides the sprite; the settings page stays
Plaque censer Censer or wooden board
First auto-knock after busy 1000 ms
Auto-knock interval 1000 ms
Big-bump combo 5 Release at or above this plays big bump, then recover (or small bump if that sprite is missing)
Art source built-in Built-in / workshop / library / URL
Library (empty) Imported zips / packs saved from the workshop; switch, rename, delete
Local workshop (empty) Folder or PNGs to align; export an aligned pack or save into the library
Pack URL (empty) Hosted directory or .zip URL; optional layout.json
Export aligned pack — Under the workshop; bakes pose crops and writes layout.json so others can import and use it

Files in that folder or zip: idle.png, auto-hit.png, manual-hit.png, bump.png, bump-big.png, stick.png, board.png, censer.png, add.png. Optional bump-recover.png and layout.json. Aligned packs bake pose crops into the PNGs; layout.json mainly carries hotzone / stick / float / plaque placement. Changes apply immediately — no reinstall.

Settings → Wooden fish → Export template downloads the official filenames zip; after aligning, use Export aligned pack under the workbench to share. A zip URL needs CORS on the host.

The workshop and library are separate: importing a zip adds a library entry and does not wipe files you are editing.

Bump hold and auto-hit pose length stay matched to the default art — edit ART_TUNABLES in src/config.ts and pnpm run build. Stick hotspot and hotzone are tunable in the workbench / layout.json.

Notes

  • Merit lives in this browser's localStorage (dsh.muyu.merit), capped at the 100 most recently knocked sessions. Workshop drafts and library packs live in IndexedDB (dsh.muyu.art), separate from the URL field. Deleting a chat in the Host does not prune it. Private mode or quota failure only disables persistence on this page. After reinstall, if meaningful old data is found (merit knocked, prefs changed, or a non-empty library), you get a one-time prompt; choosing Keep using stores dsh.muyu.dataPrompt.
  • No dragging, so it does not cover the side panel.
  • You can also replace files under src/client/assets/ and rebuild to ship a new default skin.

This repo

pnpm install
pnpm test
pnpm run build

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.