ACEMaravilla
dsh-plugin-market
Model-facing plugin marketplace for DeepSeek Harness: discover, vet, report, and install community plugins (plugin_search / plugin_vet / plugin_report / plugin_install)
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-plugin-market
English | 中文
Model-facing plugin marketplace for DeepSeek Harness: plugin_search, plugin_vet, plugin_report, and plugin_install — the discover → vet → report → install flow for community plugins.
- plugin_search — finds candidates on the official platforms (GitHub
dsh-plugintopic, npm registry, awesome-list READMEs), ranks them by term-based relevance (0-100), and enriches the top 2-3 with README-derived functional summaries and install hints. - plugin_vet — static security-risk assessment per candidate: install-time remote code, obfuscation, arbitrary code execution, credential reads, exfiltration, unsafe filesystem access, and supply-chain signals. Returns risk level (
low/medium/high/unknown), safety score (0-100), and the findings. - plugin_report — deterministic comparison report (function, install flow, relevance score, security) plus a user-questions-based choice when a provider is registered.
- plugin_install — runs
dsh plugin --profile <name> add <spec>through the shell seam after strict specifier validation, and returns the activation row for the profile composition.
All network access goes through the ctx.web capability seam; installation uses the optional shell seam and the interactive choice uses the optional user-questions seam. Both degrade gracefully when absent.
Install
dsh plugin --profile <your-profile> add @ace-xu/dsh-plugin-market
Then add the activation row to the profile's composition (the profile's cordis.yml / patch layer):
- id: plugin-market
name: '@ace-xu/dsh-plugin-market'
config:
maxCandidates: 3
Verify with dsh --profile <your-profile> --dump-config.
Usage (as an agent)
Say to your agent: "I want a plugin that ". The marketplace flow then runs plugin_search → plugin_vet → plugin_report (which asks you to choose) → plugin_install.
Configuration
| Key | Default | Meaning |
|---|---|---|
search / vet / report / install | true | Register the corresponding tool. |
maxCandidates | 3 | Cap on candidates returned by one plugin_search. |
searchTimeoutMs / vetTimeoutMs | 60000 | Cooperative tool-call budget per tool. |
installTimeoutMs | 300000 | Budget for one dsh plugin add run. |
perRequestTimeoutMs | 15000 | Per-request deadline for marketplace API fetches. |
maxVetFiles / maxVetFileBytes | 40 / 100000 | Bounds on the per-candidate source scan. |
maxVetCandidates | 5 | Cap on candidates per plugin_vet call. |
defaultProfile | "web" | Profile name used by install commands when none is given. |
installOutputMaxBytes | 100000 | Cap on captured installer output. |
Security assessment design
The vetting is a bounded static heuristic, not a security guarantee — every report and prompt section states that. Scan rules (in severity order): install-time remote code (critical), obfuscation (critical), code execution primitives (high), credential reads (high), exfiltration destinations (high), unsafe filesystem access (medium), environment reads (medium), and supply-chain signals (medium/info). The safety score starts at 100 and deducts severity-weighted penalties; any critical finding forces high risk, and failed gathering returns an honest unknown.
Known Limitations and Deferred Work
- Static vetting detects patterns, not intent; a clean report does not prove safety, and rules can produce false positives.
- GitHub API access is unauthenticated and rate-limited; busy deployments should expect
platformErrorsdegradation. - The npm vetting path scans registry metadata and unpkg file listings instead of unpacking the published tarball.
- Relevance scoring is term-based; popularity is a ranking tiebreaker only.
plugin_installinstalls the package but never edits profile composition files — activation is deliberately manual.
Discoverability
This package is published under the dsh-plugin GitHub topic, the official discovery channel for DeepSeek Harness community plugins. This package is published under the @ace-xu npm scope. If you publish a fork under another scope (@you/dsh-plugin-market), keep the topic so other agents can find it through plugin_search.
Development
The canonical implementation lives in the DeepSeek Harness monorepo under packages/plugin-market/plugin-market (see the feature/plugin-market PR branch). Run node scripts/sync-from-monorepo.mjs <path-to-monorepo> to pull the latest sources into this standalone repo; the only divergences are this README, the standalone package.json/tsconfig.json, and test imports rewritten from package names to ../src paths.
pnpm install
pnpm run typecheck
pnpm test