Skip to content

dsh-plugin-market

Verified

@vithrive/dsh-plugin-market · v0.1.2 · MIT · Web UI

DSH web plugin: a plugin marketplace tab in Settings → Plugins, listing installable dsh plugins from the deepseek-harness-plugin.com directory with one-click install.

Install

dsh plugin add @vithrive/dsh-plugin-market

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Readme

@vithrive/dsh-plugin-market

A plugin-marketplace tab for the DeepSeek Harness Web UI, placed in Settings → Plugins, right of the plugin list.

Published as @vithrive/dsh-plugin-market on npm (the bare dsh-plugin-market name is taken by an unrelated package).

Compatibility

Built for dsh 0.2.0-rc.2. Declared peers: @deepseek-ai/dsh-client-locale, @deepseek-ai/dsh-client-ui-primitives and @deepseek-ai/dsh-client-ui-slots at ^0.2.0-rc.2.

dsh 0.2.0 introduced a peerDependency compatibility gate: a plugin whose @deepseek-ai/dsh* peer ranges do not satisfy the running dsh --version is denied at profile startup (skipped silently — no crash, the plugin just disappears). 0.1.1 declared @deepseek-ai/dsh-client-runtime@^0.1.0-rc.6, a package removed in 0.2.0 (its role split into dsh-client-ui-slots / dsh-client-store), so 0.1.2 drops it. The browser half keeps working unchanged: it only requires platform seed modules (react, @deepseek-ai/dsh-client-ui-primitives) and the slots / locale services, whose inject / register / bind signatures are identical in 0.2.0-rc.2.

What it does

  • Adds a Plugin market tab to the Plugins settings section (settings.plugins.tab, id market, order 20 — after the plugin list).
  • Data source: the DeepSeek Harness Plugin Directory — a curated directory of ~287 plugins across 11 categories, updated daily. The browser reads its list pages directly (the site serves access-control-allow-origin: *, so no proxy is needed).
  • Pins the directory's ★ Featured picks on top, then the full catalog, with live search, a category filter, and an installed-only toggle.
  • Marks packages already installed in this deployment (matched by normalized package name against the pluginInventory Remote; a directory slug and the npm/package name sometimes differ, so a miss there is possible).
  • One-click install: every card has an Install button that runs pnpm add <spec> in the web profile through a same-origin host endpoint (POST /plugin-market/api/install, origin-checked and spec-whitelisted) and reconciles dsh.profile.bundles — success shows 已安装, failure shows 安装失败 with the pnpm error. A restart of dsh web is still required for the newly installed plugin to activate.
  • Every card expands to fetch the plugin's install command from the directory detail page, with copy-to-clipboard, the GitHub source link, and the plugin facts (stars / license / language / last push / maintainer). The directory prints dsh plugin add github:owner/repo; since the CLI requires --profile, the copied command is adapted to dsh plugin --profile web add github:owner/repo.

Install

From npm (published as @vithrive/dsh-plugin-market):

dsh plugin --profile web add @vithrive/dsh-plugin-market

From the source directory (this repo lives at ~/.dsh/plugins/dsh-plugin-market):

cd ~/.dsh/plugins/dsh-plugin-market
pnpm pack
dsh plugin --profile web add .\vithrive-dsh-plugin-market-0.1.2.tgz

Then restart the web app:

# stop the running `dsh web` (Ctrl+C or kill the process), then
dsh web

The browser roster (dsh.client scanning) picks the new client bundle up on boot — no web-app rebuild is needed.

Structure

lib/index.js    node half — marker row (the marketplace is browser-side)
lib/client.js   browser half — the Plugin market tab (registered into
                settings.plugins.tab, id "market", order 20)
cordis.patch.yml  dsh.bundle.patch — inserts the plugin-market row
package.json    declares dsh.bundle.patch + dsh.client (platform web)
smoke.mjs       Node smoke test (exports contract, tab registration, pure
                helpers, SSR render) — run `node smoke.mjs`

Development

The client bundle is a plain window.__ModuleLoader__.load({ id, factory }) handoff (the format client-modules serves under /plugins/<id>/client.js); it requires only modules that are already in the web roster (react, @deepseek-ai/dsh-client-ui-primitives).

The HTML parsers (parseListHtml / parseDetailHtml) run in the browser (DOMParser); make-probe.mjs emits a self-contained probe that exercises the data layer against the live directory inside a browser page (CDP), used to verify parser changes against the real site.

On Windows, pnpm cannot symlink local folders without Developer Mode, so the profile installs the package from a tarball. The dev loop is:

# after editing lib/*, re-pack, re-add, then restart dsh web
cd C:\Users\admin\.dsh\plugins\dsh-plugin-market
pnpm pack
dsh plugin --profile web add .\vithrive-dsh-plugin-market-0.1.2.tgz

To point the install command at a different profile, edit PROFILE in lib/client.js.

Notes

  • The directory is fetched directly from the browser; if the machine is offline the tab shows a retryable error, and one-click install reports the failure on the card.
  • One-click install runs pnpm add in the profile directory (ctx.baseUrl); installing a plugin that is already present fails with pnpm's message, and a newly installed plugin only activates after dsh web restarts.