快速了解
它能做什么
通过可 Git 审计的目录浏览和管理 DeepSeek Harness 插件。
本站提供的是中文说明,不代表该项目或 Plugin 自身提供中文界面;语言支持请以上游文档为准。
Web Profile
Not declared in supplied evidence
证据已验证
核对日期 2026/9/6 UTC 13:49
有代码证据的贡献
它为 DSH 增加什么
一个位于 DSH 设置中的网页界面,用于浏览、安装、启用和更新目录中的插件。
机制证据 ↗选择前先看
DSH 插件商店会在 DeepSeek Harness 的设置中添加插件商店页,用于发现、安装、启用和更新 DSH 插件。其 bundle patch 配置了远程目录网关,默认使用项目发布的目录 URL,并在 DSH 主目录下缓存数据。
适合谁
希望通过目录发现和管理 DSH 插件的 DeepSeek Harness 用户。
常见任务
- 在 Harness 设置界面浏览已收录的 DSH 插件。
- 安装或启用从目录中选择的插件。
- 检查已记录的 peer 依赖名称能否在当前 DSH profile 中解析。
- 更新已从目录安装的插件。
权限与数据
插件商店会远程获取目录数据并在本地缓存;安装所选插件可能会赋予该插件较广泛的 DSH 运行时访问权限。
权限- 访问网络以获取配置的或默认的插件目录。
- 在 DSH 主目录下使用本地缓存存储。
- 对所选 DSH profile 执行插件管理操作。
- 可通过 DSH_SHOP_CATALOG_URL 覆盖目录 URL。
- 默认 bundle 配置将缓存存放在 DSH home-path 的 shop 目录中。
- 默认目录:https://LivXue.github.io/dsh-plugin-shop/v1/。
- 提供的证据未声明需要凭据。
局限
- 提供的证据未声明 DeepSeek Harness 版本范围。
- 本次审查未实际执行安装或界面运行。
- 目录的机械过滤不能替代安装前的代码审查。
- README 中的安装示例使用 0.7.4,而固定 manifest 为 0.8.0-beta.0;请有意识地选择版本。
DSHub 已核对
- 固定的主包 manifest 标识 dsh-plugin-shop 版本为 0.8.0-beta.0,许可证为 Apache-2.0。
- 主包具有结构已验证的 DSH bundle patch。
- 已验证不可变 Git 交付路径,且 npm 注册表身份已验证。
DSHub 未核对
- 未在真实 DSH profile 中执行成功安装验证。
- 未测试实际目录内容、远程可用性或运行时依赖解析。
- 未审计已发布 npm 包的内容。
固定版本安装
安装 DSH Plugin Shop
这个Plugin Bundle没有 DSH Plugin 安装操作,请根据源码文档使用真实交付方式。
维护者原文
项目 README
dsh-plugin-shop
The plugin shop for DeepSeek Harness — discover, install, enable and update dsh plugins from a browsable, git-auditable catalog.
English | 中文
</div>📦 Install the shop
Two tracks. They do the same thing; pick the one that matches who is reading.
🧑 For people
Prerequisites: Node.js. Running the harness itself needs no install — the
upstream-documented form is npx -y @deepseek-ai/dsh web. Plugin management
goes through dsh plugin, which spawns both the dsh command and pnpm —
install them once with npm install -g @deepseek-ai/dsh pnpm and verify with
dsh --version and pnpm --version.
# dsh on PATH (global install). Pin the version: pnpm 11 holds back very
# recent releases, so a bare `add dsh-plugin-shop` can hand you an older
# version for a while. This is the current release — refresh it with
# `npm view dsh-plugin-shop version`.
dsh plugin --profile web add dsh-plugin-shop@0.7.4
# or straight through npx, nothing installed:
npx -y @deepseek-ai/dsh plugin --profile web add dsh-plugin-shop@0.7.4
Replace web with your profile if you use another one. Restart dsh once — a newly
added bundle is not applied to a running process — then open
Settings → Plugins → Plugin shop
🤖 For agents
Non-interactive. --profile is mandatory; without it dsh plugin exits with
error: required option '--profile <name>' not specified.
# 1. resolve a profile name ($DSH_HOME defaults to ~/.dsh; node_modules is not a profile)
ls -1 "${DSH_HOME:-$HOME/.dsh}/profiles" | grep -v '^node_modules$'
# 2. install — pin the version: it bypasses pnpm's release cooldown and
# deterministic installs are the point of the agent path
dsh plugin --profile <profile> add dsh-plugin-shop@0.7.4
# 3. verify — a zero exit above only means pnpm resolved the package
dsh plugin --profile <profile> list --depth 0 # dsh-plugin-shop must appear
# 4. restart the profile; a new bundle is not hot-applied
dsh --profile <profile>
The same fact as step 3 lives in $DSH_HOME/profiles/<profile>/package.json under
dsh.profile.bundles, if you would rather read the manifest than parse CLI output.
Per-failure diagnostics are in the
package README.
🖼️ Screenshots
<div align="center"> <img src="docs/images/shelf-light.png" alt="The plugin shop shelf inside dsh Settings" width="860"> </div><table> <tr> <td width="50%"><img src="docs/images/gate-light.png" alt="Installing an unreviewed plugin requires an explicit acknowledgement"></td> <td width="50%"><img src="docs/images/shelf-dark.png" alt="The same shelf in the dark theme"></td> </tr> <tr> <td align="center"><sub>Installing an unreviewed plugin requires an explicit acknowledgement</sub></td> <td align="center"><sub>The same shelf in the dark theme</sub></td> </tr> </table>✨ Highlights
- 🌐 Whole-registry harvest — every npm package keyed
dsh-pluginordeepseek-harness, plus every GitHub repository using them as topics. Nothing is submitted here; there is no queue to join. - 🧹 Hard filtering — every candidate is gated mechanically on every build, and
one that fails becomes a named rejection carrying one of seventeen recorded reasons,
in words its author can read. The
pluginsandfilteredbadges above count both sides, live. - 🔌 Dependency check on your machine — your installation resolves each recorded peer name against your own profile, the question dsh's loader asks at mount, so a card reads Incompatible only when the modules are really missing here.
- 🗓️ Daily rebuild — committed to git, so every change is a reviewable diff. A new plugin lands the next morning; a repository that disappears drops out the same way.
- 🗂️ Seven categories — an author who declares
dsh.catalogpicks their own; the rest are classified for them.
🗺️ How it fits together
In this repository — the daily build. Everything here is registry/.
flowchart TB
subgraph HARVEST["1 · Harvest — the whole public registry, every day"]
direction LR
NPM(["npm packages<br/>keyword dsh-plugin<br/>keyword deepseek-harness"])
GH(["GitHub repositories<br/>the same keywords,<br/>used as topics"])
end
subgraph GATE["2 · Gate — every candidate must clear all five, on every build"]
direction LR
G1["a plugin at all?<br/><br/>a dsh.bundle the<br/>loader can mount"]
G2["auditable?<br/><br/>a license,<br/>a live repository"]
G3["installable?<br/><br/>not deprecated on npm ·<br/>repo listings also need<br/>no build scripts and<br/>no workspace: deps"]
G4["what it claims?<br/><br/>tarball integrity, publish time,<br/>not a near-miss of another name"]
G5["anything to show?<br/><br/>a valid dsh.catalog,<br/>or an npm description"]
end
subgraph SHELVE["3 · Shelve — what the catalog records"]
direction LR
CAT["one of 7 categories"]
PEER["the declared peer NAMES,<br/>never their version ranges"]
end
NPM --> G1
GH --> G1
G1 -.-> REJ
G2 -.-> REJ
G3 -.-> REJ
G4 -.-> REJ
G5 -.-> REJ
REJ[["rejected — one author-readable reason per name"]]
G5 ==>|"all five clear"| CAT
PEER ==> PUB[["4 · Publish — content-addressed JSON, committed to git, then GitHub Pages and npm"]]
On your machine — the npm package. Everything here is packages/dsh-plugin-shop/.
The two halves share no code, only the schema.
flowchart LR
CAT[["the catalog<br/>index.json + plugins.sha256.json"]]
CAT ==> HOST["5 · Host half<br/>races every origin<br/>verifies sha256 · caches"]
HOST ==> DEP{"6 · Dependency check<br/>resolve each recorded peer<br/>against YOUR profile"}
DEP -->|"one or more absent"| BAD["Incompatible<br/>the card names<br/>what is missing"]
DEP -->|"all resolve"| GOOD["installable"]
BAD --> CLIENT["Client half — the Settings tab<br/>nine shop/* methods<br/>no network · no filesystem"]
GOOD --> CLIENT
CLIENT ==>|"dsh plugin add"| PROF[("your dsh profile")]
Two parts are worth naming, because they are the ones people expect to work differently:
- The gate rejects; it never silently drops. Every candidate that fails becomes a named rejection with a reason, attached to the build.
- The dependency check is not a catalog fact. The build records only the peer
names — never their version ranges, because nearly every dsh plugin declares
"*"and the harness's own prereleases do not satisfy ordinary ranges, so checking them would accuse plugins that work. Whether a name resolves is decided by your installation, against your profile.
✅ What it is
| Public and community-run | Publishing to npm with the dsh-plugin or deepseek-harness keyword is all it takes to be discovered. Nothing is submitted to this project. |
| Git-auditable | Every daily catalog change is a reviewable diff, not a row in someone's database. |
| Tiered trust, honestly reported | A review is pinned to the exact version it covered, so an author who passes review once cannot publish a malicious version and inherit the trust. Today registry/verified.yml is empty: no listing has been read by a human, every entry is community-tier, and every install asks for the acknowledgement. The filtering above is mechanical, and it is not a substitute for reading the code you are about to run. |
| Zero-privilege UI | Compromising the browser interface does not compromise the runtime. |
🚫 What it is not
It is not a sandbox. A dsh plugin, once mounted, holds the full
ctx— your filesystem, your shell, and the requests going to the model. Installing one is complete trust. This project does not change that; it tells you the truth before you click.
It also carries no download counts, ratings, or reviews, and it will never offer an
"install from arbitrary URL" button. That capability stays in dsh plugin add, where
enabling build scripts and pinning a commit are decisions you make explicitly.
📚 The catalog
Built daily and published as static JSON, to two places at once: the npm package
dsh-plugin-shop-catalog and GitHub Pages. Your installation races them — the
registry you have configured, npmmirror, npmjs, then Pages — and takes whichever
answers first, because the link to one of them can be far slower than the link to
another from where you sit. All of them carry the same bytes, and the sha256 in the
pointer is checked before any of them is trusted. DSH_SHOP_CATALOG_URL opts out of
the race and reads only what you name.
| Artifact | Purpose |
|---|---|
/v1/index.json |
The pointer — schemaVersion, builtAt, the entry count and rejected totals (the badges above read them live), and the content hash. Small enough to poll. |
/v1/plugins.<sha256>.json |
The data — content-addressed, safe to cache indefinitely. |
/v1/stars.<sha256>.json |
GitHub star counts by package name, when the daily build could fetch them |
Each build's rejection report, carrying an author-readable reason for every rejected package, is attached to the workflow run. Nothing disappears without a reason attached to its name.
The data files are content-addressed, so each build publishes new names and the previous
ones stop existing, while the pointer above them is cached for ten minutes. If you fetch
/v1/ yourself, re-read index.json whenever a data URL answers 404 — or read the same
bytes from the npm package dsh-plugin-shop-catalog, where the pointer and the data it
names always ship in one tarball.
🏷️ Listing a plugin
Add a harvest keyword (dsh-plugin or deepseek-harness) to your package.json and publish to npm; the daily build picks it up. A plugin that never publishes to npm is listed from its GitHub repository instead: add the same keyword as a repo topic and keep a package.json at the root with a name and dsh.bundle — the catalog pins the default-branch commit as the version.
A dsh.catalog section is optional — declare it to control your own category, summary
and capabilities, or omit it and the catalog derives a listing from your npm
description instead.
{
"name": "dsh-hello-plugin",
"keywords": ["dsh-plugin"],
"dsh": {
"bundle": { "patch": "./cordis.patch.yml" },
"catalog": {
"category": "tool",
"summary": { "en": "...", "zh": "..." },
"capabilities": ["fs", "shell"]
}
}
}
Full field reference: docs/schema.md.
Not listed, and why: a package without dsh.bundle is a library rather than an
installable plugin. A package without a license or a repository cannot be audited. A
package with neither a dsh.catalog section nor an npm description has nothing to
show.
🗂️ Repository layout
| Path | What lives there |
|---|---|
registry/ |
The catalog pipeline — a pure core (gate, tier, emit, pipeline) behind an impure shell (npm-client, build) |
registry/verified.yml |
The human review record, pinned per version |
registry/denied.yml |
The denylist; every entry states why |
registry/snapshots/ |
manifest.lock, committed daily |
packages/dsh-plugin-shop/ |
The npm package — Host half and Client half |
docs/design/ |
The specification. It is the authority; code follows it. |
🛠️ Development
pnpm install
pnpm test # vitest
pnpm typecheck
pnpm build:catalog runs the real harvest against npm and GitHub — thousands of live
requests and several minutes. The tests cover every policy decision without a
network, so reach for it only when you have changed the fetching or writing layer.
Status and open work: docs/plans/2026-08-18-remaining-work.md. Specification: docs/design/2026-08-18-dsh-plugin-shop-design.md.
📄 License
Apache-2.0 © LivXue
有意识地管理
安装与管理
前置条件与目标 Profile
目标: Web Profile
交付方式: Git Bundle — LivXue/dsh-plugin-shop#b459540bc8384f533fe7f7145086f4fcb600e03b。
验证、更新与移除
显示生命周期命令
dsh plugin --profile web list兼容性与访问范围
Requires Node.js ^22.19.0 or >=24.0.0; DSH peers declared: Not declared in supplied evidence。
风险事实
Fetches a plugin catalog from a configured or default remote URL and uses a local cache directory.
证据 ↗Installing a listed plugin grants that plugin the DSH runtime context; the catalog states that this can include filesystem, shell, and model-request access.
证据 ↗证据与编辑审查Manifest、Bundle patch、分发与新鲜度
不可变证据
审查状态与源码活动
请使用不可变源码或明确固定的包版本;通过商店安装的每个插件都应被视为需要单独审查的代码。
AI 审查于 2026/9/9 UTC 13:48。GitHub 事实核对日期: 2026/9/9 UTC 13:48。
自当前证据基线以来,没有记录到重要源码变化。