Skip to content
MyDSHMy DSH Field Notes
中文
Independently maintained; not affiliated with DeepSeek. No association with mydsh.dev or other MyDSH sites.

Home/Developers & plugin dev/Plugin anatomy & manifest

Dissecting a real manifest: what each of the 11 fields does

Reading someone's plugin package.json, recognising half the fields, unsure which to copy.

VerifiedVersion and environmentChecked 2026-11-14
Sample
packages/core/tools plus the 13 plugins on this site
Checked
2026-11-14

Every field below was read from real packages, not guessed.

FieldSample valueWhat it does
name@deepseek-ai/dsh-toolsPackage name; used by install and by bundles
version0.1.2-alpha.5Same generation as the host; the convention is to track it
typemoduleESM. Plugins must use import/export; CommonJS will not work
mainlib/index.jsEntry point exporting name and apply(ctx)
exports{'.': …, './invariant': …}Subpath exports. Client plugins also export ./client
dsh.bundle.patch./cordis.patch.ymlThe entry point for inserting into the host.Without it an installed plugin does nothing
dsh.client.inject["@deepseek-ai/dsh-…"]Injection targets for client plugins. A host missing them hangs silently
dsh.compatibility(dsh-context only)Compatibility declaration; third parties may define their own subtree
engines.dsh>=0.2.0-rc.2 || …Declares the supported host range. Measured: unsatisfied still installs and composes, unblocked
engines.node^22.19.0 || >=24.0.0The only real gate, and only an npm EBADENGINE warning
peerDependenciescordis / dsh-agent / …Dependencies the host provides rather than the plugin bundling them

The field most easily missed

dsh.bundle.patch. A package with only main and no patch adds nothing to dump-config after install — not broken, just never intended to insert anything (it may exist as a library for others). This field is the fastest way to tell a plugin from a library.

The two engines fields are nothing alike

  • engines.dsh: a declaration only. Measured here, a plugin requiring >=0.2.0-rc.2 installed onto 0.1.2 succeeded, composed fine, and was refused by nothing.
  • engines.node: npm validates it, but only with an EBADENGINE warning that does not block installation.
So do not expect a declared version requirement to protect you. What actually breaks is a package named in dsh.client.inject that the host lacks — that gives no warning at all, just a silent hang. Judge loadability by the inject difference, not by engines.

What counts as working

Check every line. All of them pass or the job is not done.

  • You can say what a missing dsh.bundle.patch causes
  • You know an unsatisfied engines.dsh blocks nothing
  • Loadability is judged by the inject difference, not engines

Where it fails

Symptom, cause, what to do — written in the order it actually happens.

SymptomCauseWhat to do
Copied a manifest and the plugin does nothingThe dsh.bundle.patch section is missingAdd the patch file and point package.json at it
Assumed engines.dsh protects youIt is only a declaration with no implementationCheck the inject difference instead

Sources

Verified means measured here. Compiled means every line carries a source.