dsh-plugin-marketplaceDeepSeek Harness plugin
Out-of-tree installable plugin marketplace bundle for DeepSeek Harness
- Stars
- 15
- Forks
- 0
- License
- MIT
- Last commit
- Aug 27, 2026
Overview
Out-of-tree installable plugin marketplace bundle for DeepSeek Harness
Original README
Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.
DSH Plugin Marketplace
The plugin marketplace for DeepSeek Harness (DSH): browse, review, and install DSH plugins from inside DSH's own Settings UI — with evidence-based install safety, consent-gated install scripts, curated solution packs, and zero telemetry.
中文文档:README.zh-CN.md(界面语言跟随 DSH 自动切换)
What is DSH Plugin Marketplace?
DSH Plugin Marketplace is an out-of-tree, installable DSH bundle that adds a full plugin marketplace to DeepSeek Harness. It is not part of the official DSH repository, requires no changes to DSH source code, and is not a standalone web product. Once installed into the web profile, DSH's Host Loader mounts the marketplace Host plugin, and the package's declared dsh.client browser entry registers itself under Settings → Plugins → Marketplace. The UI is bilingual and follows DSH's display language automatically (中文 / English).
At a glance:
- 2,200+ plugins discovered by a daily scan of every GitHub repository carrying the
dsh-plugintopic — no GitHub account or token needed to browse. - Evidence-based install eligibility: the scanner proves which install targets exist at each plugin's pinned commit, so "one-click" means proven installable, not probably fine.
- Consent-gated scripts: install scripts are shown verbatim and run only after explicit, per-install consent — never persisted, never bulk-approved.
- Curated solution packs that install a coherent capability baseline in one reviewed action.
- No telemetry, no install counts, no server — the catalog is static JSON on GitHub Pages.

Install into your DSH
From npm:
powershelldsh plugin --profile web add @w2112515/dsh-plugin-marketplace
Or pin an immutable commit from GitHub (this repository commits its built lib/, so no prepare runs on your machine):
powershelldsh plugin --profile web add github:w2112515/dsh-plugin-marketplace#<40-char-commit>
Regular users need no GitHub token. Automatic installs require the Host to run pnpm 11 (the plugin also tries corepack pnpm); consent-gated script installs require pnpm ≥ 11.7. When no package manager exists, the WebUI keeps browsing and shows a recovery hint instead of a fake success. Uninstall: dsh plugin --profile web remove @w2112515/dsh-plugin-marketplace.
The default catalog is served from this repository's GitHub Pages. During development you can override it:
powershell$env:DSH_PLUGIN_MARKETPLACE_CATALOG_URL = 'https://w2112515.github.io/dsh-plugin-marketplace/plugin-marketplace/catalog-v1.json' dsh plugin --profile web add D:\Work\dsh-plugin-marketplace dsh --profile web --dump-config dsh web
Install safety
Automatic installs pin an immutable 40-character commit and always go through capability preflight → short-lived review plan → confirmed execution, with rollback of the profile manifest, lockfile, and workspace config on failure. Eligibility is decided by evidence at the pinned commit:
| Catalog entry | What the scanner proved | What happens on install |
|---|---|---|
| Automatic install | Every install target (entry files, patch) exists in the pinned commit's git tree | pnpm add --ignore-scripts — third-party lifecycle scripts never run |
| Needs script review | Targets are absent (build output not shipped), but the package declares lifecycle scripts | Scripts are shown verbatim in the review step; after your explicit consent, the Host installs once with --allow-build=<name> instead of --ignore-scripts, scoping script execution to exactly the reviewed package within that single invocation. Nothing is written to allowBuilds; consent is never persisted |
| Manual install | Neither of the above | Repository link only; the marketplace never runs anything |

Solution packs
A pack is a curated list of plugin repositories — nothing more. A repository becomes a pack by carrying both the dsh-plugin and dsh-plugin-pack topics plus a dsh.pack.json manifest:
json{ "schemaVersion": 1, "name": "My Essentials", "description": "A curated starter set", "items": ["owner/plugin-a", "owner/plugin-b"] }
itemsholds 1–50owner/repostrings; resolution to stable repository ids happens at scan time against the catalog itself, so renames never rewrite identity silently.- The marketplace shows every item's explicit status — will auto-install, needs script review, manual install, not in catalog, already installed — and an honest
install N of Mcount. Pack cards also disclose the install composition up front (7 one-click · 1 script-review · 1 manual), computed from catalog truth at scan time. - Installing a pack runs the normal single-plugin plan→execute path serially, stops at the first failure, rolls nothing back, and reports each item's outcome.
- Packs grant no privilege: script-gated items still require their own per-plugin review and consent; manual items stay manual.
- Packs are never ranked by stars. Star ranking would reward stuffing a pack with the most-starred plugins — a star-sorted category view in disguise, not curation. Order is editorial first (packs reviewed by the marketplace maintainers for coherence and honesty, listed in
FEATURED_MARKETPLACE_PACKS), then freshness. Curation follows 宁缺毋滥 (quality over quantity): a missing capability slot stays empty rather than being filled with an unproven plugin.
If you use Codex, Claude Code, or Cursor to author a pack, install the portable dsh-marketplace-publish Skill. This page and the scanner remain the admission rules.


Community ratings
Ratings borrow GitHub's native reactions: every catalog plugin gets a ballot comment under the ratings issue, and a 👍/👎 reaction on it is a vote — one vote per real GitHub account. Detail pages show an overall window plus a trailing 90-day window, and no verdict appears below 10 votes. The client is read-only; voting itself happens entirely on GitHub, so the marketplace never holds your credentials.
For agents
The marketplace is agent-native: the Host plugin registers four tools the DSH agent can call in any session — marketplace_search, marketplace_detail, marketplace_install, and marketplace_manual_guide. Search and detail are read-only. Installs run the same plan→execute pipeline as the WebUI, and every call asks for one-time human approval with the plugin name, pinned commit, and risk signals in the prompt — consent is never persisted and never bulk-granted. Script-gated entries are refused by design (verbatim script review stays in Settings → Plugins → Marketplace); manual entries are never executed by the marketplace — the guide tool fetches the repository's own install instructions for the agent to follow with its ordinary shell tools. Plugins activate after a dsh web restart. Set agentTools: false in the bundle config to disable the agent surface.
An agent can also install the marketplace itself with its ordinary shell tool:
powershelldsh plugin --profile web add github:w2112515/dsh-plugin-marketplace#<40-char-commit> dsh --profile web --dump-config # verify the bundle layer # restart dsh web to activate
Privacy stance
The marketplace is read-only against a static catalog and never phones home: no install counts, no telemetry, no analytics endpoint. There is deliberately no server to collect them — the catalog is plain JSON on GitHub Pages, and every install decision happens on your machine. Popularity signals come from GitHub's own public data (stars), nothing else.
How it works
- Distribution unit: one npm/Git/tarball package declaring
dsh.bundle.patch. - Host: downloads and strictly validates the central static catalog (schema + integrity digest), keeps a last-known-good cache, and owns review and mutation of the current profile.
- Client: a
settings.plugins.tabSlot contribution providing search, category filters, detail pages, risk signals, review confirmation, and solution packs. - Host/Client channel: a package-private, same-origin
/api/plugin-marketplaceJSON API. DSH's static Typert Remote manifest is untouched. - Catalog production: a daily GitHub Actions scan of repositories carrying the
dsh-plugintopic. Only statically validated, non-archived bundles enter the public catalog; rejects are kept in the workflow artifact. Searches that hit GitHub's 1,000-result cap are bisected by creation-date windows. Only the central scanner uses the repository's ownGITHUB_TOKEN. - Categories: plugins are classified into nine categories (theme, memory, usage, skill, security, channel, UI, tool, provider) from an explicit
dsh-category-<slug>topic or conservative whole-word tokens; a plugin with no honest signal stays uncategorized rather than being misfiled.
For plugin authors
To be discoverable, your repository needs the dsh-plugin topic, a package.json declaring dsh.bundle.patch, and a valid cordis.patch.yml. An optional dsh-category-theme|memory|usage|skill|security|channel|ui|tool|provider topic sets your catalog category explicitly.
To qualify for automatic install, the files your bundle loads must exist in the git tree at the pinned commit — commit your built output (e.g. lib/), the way this repository does. If built output is intentionally not committed and your prepare/install scripts produce it, users will see your scripts verbatim and can consent to run them per install; the consent never extends beyond the reviewed commit.
If you use Codex, Claude Code, or Cursor to list a plugin, install the same dsh-marketplace-publish Skill. It does not replace the rules above.
Configuration
The bundle's patch row id is plugin-marketplace. Override the full config in $DSH_HOME/profiles/web/cordis.patch.yml (patch config is replaced wholesale, not deep-merged — write every field):
yaml- id: plugin-marketplace config: catalogUrl: https://w2112515.github.io/dsh-plugin-marketplace/plugin-marketplace/catalog-v1.json maxAgeMs: 172800000 timeoutMs: 60000 maxBytes: 15000000 agentTools: true
The catalog is a daily GitHub Pages snapshot. A plugin that landed on GitHub today appears after the next successful scan. A failed scan leaves the previous snapshot in place.
Repository layout
1dsh-plugin-marketplace/ 2├── package.json 3├── cordis.patch.yml 4├── src/ 5│ ├── index.ts # Host plugin & same-origin API 6│ ├── catalog*.ts # schema, network, LKG cache, queries 7│ ├── profile-operations.ts # plan/confirm/rollback, consent-gated execution 8│ └── client/ # WebUI Slot plugin (zh/en) 9├── scripts/ # GitHub scanner (plugins + packs) 10├── website/public/ # workflow-generated static catalog 11└── .github/workflows/ # CI and the daily Pages publication
Local development
Requires Node.js ^22.19.0 || >=24 and pnpm 11.
powershellcd D:\Work\dsh-plugin-marketplace pnpm install --frozen-lockfile pnpm run build pnpm run check pnpm pack --dry-run
Non-goals
- No code submissions to, or release demands on,
deepseek-ai/deepseek-harness. - No modification of DSH's Web bundle, Settings Slot, API Remote, or CLI sources.
- The browser never talks to the GitHub API directly; users never configure tokens.
- Lifecycle scripts never run without the user's explicit, per-install, per-commit consent.
- No telemetry of any kind — including install counts.
Links
- DeepSeek Harness — the host project
- DSH Category Star Leaders — a solution pack listing each category's highest-starred catalog entry (mechanical, snapshot-dated)
- DSH Marketplace Publish — portable Agent Skill for listing plugins and creating packs
- linux.do — 新的理想型社区(友链)