DeepSeek Harness plugin

dsh-multi-pet

Multi-pet compat for DSH Web: isolates the built-in pet service so it coexists with third-party pets (whale-girl). 多桌宠兼容:隔离内置桌宠服务,使其与第三方桌宠同时运行。

Jump to install

Source facts

Repository
YiYan129600/dsh-multi-pet
Latest update
Aug 14, 2026
Category
Just for Fun
GitHub stars
1
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/YiYan129600/dsh-multi-pet
Plugin: dsh-multi-pet
Author: YiYan129600

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

dsh-multi-pet

English | 中文

Multi-pet compat for DSH Web: lets the built-in pet and third-party pets (such as whale-girl) run in the same profile at the same time.

Problem

Two pet plugins register the same Cordis service pet on the root context:

  • @linxin666/dsh-pet (shipped inside @linxin666/dsh-web-ui-all)
  • whale-girl (third-party, installed standalone)

With both enabled, DSH fails to boot with service "pet" has been registered. The usual workaround is to disable one of them.

Solution

This package is a patch-only DSH Web bundle. Its cordis.patch.yml applies an id-targeted patch to the built-in pet entry:

- id: pet
  name: '@linxin666/dsh-pet'
  isolate:
    pet: true

The loader (cordis-plugin-loader) gives the pet entry an entry-local isolate realm: its pet service registers under a symbol owned by that entry only (pet#pet), while third-party providers keep the root pet. Both coexist, each resolving its own implementation. Neither plugin is modified.

Why true and not a label: isolate: { pet: some-label } joins all entries that use the same label into one realm, which would re-trigger the duplicate-service conflict. Entry-local (true) is the correct setting.

Install

dsh plugin --profile <name> add @linxin666/dsh-multi-pet

Or link a local checkout:

dsh plugin --profile <name> add link:/path/to/dsh-multi-pet

The bundle patch applies after every bundle layer, so as long as the package is listed after the bundle that inserts the pet row (the dsh plugin add flow appends to dsh.profile.bundles, which satisfies this), the patch wins. If dsh-pet is not installed the patch matches nothing, warns, and is skipped.

Verify the composition:

dsh --profile <name> --dump-config

Enabling, disabling, switching

Pets are ordinary plugins: toggle an entry in your own profile patch (cordis.patch.yml) or add/remove the bundle from dsh.profile.bundles. Switching never uninstalls dependencies and never hand-edits generated files. Whether a toggle applies live or requires a restart is disclosed in the release notes of the verified version.

General recipe — two third-party pets that both register the root pet: add an id-targeted patch in your own profile patch that isolates one of them, e.g.

- id: <other-pet-entry-id>
  isolate:
    pet: true

Provider conventions for future pets

  • Unique loader entry id per pet.
  • isolate: { pet: true } (entry-local), or a unique label per provider —

never a shared label with another pet.

  • Namespaced HTTP routes per pet (/api/pet/*, /whale-girl/*, ...).
  • Namespaced storage keys (data dirs and browser localStorage).
  • Separate DOM roots and explicit z-index allocation (both pets default to

the bottom-right corner with the same z-index; the later-mounted one renders on top).

  • Clear visible / enabled semantics in settings.

Known limitations

  • Two third-party pets that both register the root pet remain mutually

exclusive unless one of them is isolated (see recipe above); this package fixes the built-in pet + third-party case out of the box.

  • In simultaneous mode both pets sit at the bottom-right with the same

z-index; the later-mounted one renders on top.

Development

pnpm install
pnpm test

Tests (node --test):

  • patch.test.mjs — the shipped patch is a single id-targeted entry-local

isolate.

  • compose.test.mjs — the patch composes through the real DSH patch algorithm

(applyEntryPatches), only touching the built-in pet row, warning (not failing) when the row is absent or the name guard mismatches.

  • isolate-mechanism.test.mjs — with the real cordis + cordis-plugin-loader,

two pet providers collide without isolation and coexist with it.

License

MIT