🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件实测报告 citrusli2026/dsh-verified-plugins

DeepSeek Harness
citrusli202630 天前有提交已提供中文文档扫描:含敏感能力

装上跑一遍,用可复现证据验证插件真实表现

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add citrusli2026/dsh-verified-plugins
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · market
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 77 处,展示前 43 条)
  • 写入本地文件
    packages/cli/src/main.ts:122
    mkdirSync(dirname(out), { recursive: true });
  • 写入本地文件
    packages/cli/src/main.ts:123
    writeFileSync(out, text);
  • 读取本地文件
    packages/cli/src/main.ts:149
    parsed = JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    packages/cli/src/main.ts:181
    if (!existsSync(join(dir, 'index.json'))) {
  • 读取本地文件
    packages/cli/src/main.ts:186
    const index = JSON.parse(readFileSync(join(dir, 'index.json'), 'utf8')) as {
  • 读取本地文件
    packages/cli/src/main.ts:193
    if (!existsSync(file)) continue;
  • 读取本地文件
    packages/cli/src/main.ts:194
    const report = JSON.parse(readFileSync(file, 'utf8')) as Record<string, any>;
  • 写入本地文件
    packages/cli/src/main.ts:207
    mkdirSync(dirname(out), { recursive: true });
  • 写入本地文件
    packages/cli/src/main.ts:208
    writeFileSync(out, `${JSON.stringify(report, null, 2)}\n`);
  • 读取本地文件
    packages/cli/src/main.ts:235
    const next = JSON.parse(readFileSync(nextPath, 'utf8')) as Record<string, any>;
  • 写入本地文件
    packages/cli/src/main.ts:259
    mkdirSync(dirname(out), { recursive: true });
  • 写入本地文件
    packages/cli/src/main.ts:260
    writeFileSync(out, text);
  • 发起网络请求
    packages/collector/src/registry.ts:72
    const response = await fetch(url, { headers: { accept: 'application/json' } });
  • 发起网络请求
    packages/collector/src/registry.ts:143
    response = await fetch(subject.tarball, { signal: AbortSignal.timeout(budget.timeoutMs) });
  • 发起网络请求
    packages/collector/src/staleness.ts:55
    const response = await fetch(url, {
  • 发起网络请求
    packages/collector/src/survey.ts:71
    const response = await fetch(url);
  • 发起网络请求
    packages/collector/src/survey.ts:177
    const response = await fetch(url, {
  • 读取本地文件
    packages/report/src/orchestration-failure.ts:63
    JSON.parse(readFileSync(staticPath, 'utf8')),
  • 写入本地文件
    packages/report/src/orchestration-failure.ts:69
    writeFileSync(outPath, `${JSON.stringify(report, null, 2)}\n`);
  • 写入本地文件
    packages/report/src/site.ts:351
    mkdirSync(join(out, 'badge'), { recursive: true });
  • 写入本地文件
    packages/report/src/site.ts:353
    writeFileSync(join(out, 'index.html'), renderIndexPage(input.index, input.staleness));
  • 写入本地文件
    packages/report/src/site.ts:355
    writeFileSync(join(out, 'staleness.json'), `${JSON.stringify(input.staleness, null, 2)}\n`);
  • 写入本地文件
    packages/report/src/site.ts:357
    writeFileSync(join(out, 'index.json'), `${JSON.stringify(input.index, null, 2)}\n`);
  • 写入本地文件
    packages/report/src/site.ts:361
    writeFileSync(join(out, `${slug}.html`), renderReportPage(report, slug, input.staleness));
  • 写入本地文件
    packages/report/src/site.ts:362
    writeFileSync(join(out, `${slug}.json`), `${JSON.stringify(report, null, 2)}\n`);
  • 读取本地文件
    packages/report/src/validate.ts:53
    return JSON.parse(readFileSync(schemaPath, 'utf8')) as Record<string, unknown>;
  • 写入本地文件
    packages/runner/src/browser-probe.mjs:40
    writeFileSync(OUT, `${JSON.stringify(result, null, 2)}\n`);
  • 执行外部命令固定命令
    packages/runner/src/browser-probe.mjs:98
    server = spawn('dsh', ['--profile', 'web', '--no-open', '--port', String(PORT)], {
  • 发起网络请求
    packages/runner/src/browser-probe.mjs:116
    if (response.status() >= 400) httpErrors.push(`${response.status()} ${response.request().method()} ${safeUrl(response.url())}`);
  • 执行外部命令来自配置/变量
    packages/runner/src/execution-probe.ts:71
    const result = spawnSync(executable, args, {
  • 读取本地文件
    packages/runner/src/execution-probe.ts:109
    if (!existsSync(file)) return null;
  • 读取本地文件
    packages/runner/src/execution-probe.ts:111
    return JSON.parse(readFileSync(file, 'utf8')) as Record<string, any>;
  • 读取本地文件
    packages/runner/src/execution-probe.ts:492
    if (!existsSync(profileDir)) {
  • 读取本地文件
    packages/runner/src/execution-probe.ts:504
    if (existsSync(nodeModules) && existsSync(join(nodeModules, subjectName))) {
  • 执行外部命令固定命令
    packages/runner/src/execution-probe.ts:574
    spawnSync('dsh', ['--profile', profile], {
  • 读取本地文件
    packages/runner/src/execution-probe.ts:589
    if (!existsSync(file)) {
  • 读取本地文件
    packages/runner/src/execution-probe.ts:595
    parsed = JSON.parse(readFileSync(file, 'utf8')) as { samples?: Array<Record<string, number>> };
  • 写入本地文件
    packages/runner/src/execution-probe.ts:691
    mkdirSync(DSH_HOME, { recursive: true });
  • 写入本地文件
    packages/runner/src/execution-probe.ts:694
    mkdirSync(OUT_DIR, { recursive: true });
  • 写入本地文件
    packages/runner/src/execution-probe.ts:902
    writeFileSync(join(OUT_DIR, 'execution.json'), text);
  • 读取本地文件
    packages/runner/src/host-sampler.mjs:44
    return readdirSync('/proc/self/fd').length;
  • 写入本地文件
    packages/runner/src/host-sampler.mjs:158
    writeFileSync(OUT, `${JSON.stringify(payload, null, 2)}\n`);
  • 删除本地文件
    packages/runner/src/host-sampler.mjs:163
    unlinkSync(LOCK);
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 安装加载运行测量
  • 证据可溯可复现

面向 DeepSeek Harness 的执行验证插件报告——安装、加载、运行、测量,证据可溯、可复现,不是又一份 star 清单。

README

由 DeepSeek 最新模型翻译生成
dsh-verified-plugins DeepSeek Harness 插件的执行验证报告 —— 安装它、加载它、运行它、测量它。 证据可追溯、可复现,不是又一份 star 列表。 站点 · 方法 · 报告 schema · 安全 · 申诉 · 目录 状态:V0–V6 已完成。 七个维度全部端到端跑通,支持批量,报告已发布,新鲜度也在跟踪 ——浏览站点。 24 份报告:19 份 verified,4 份 partial,1 份 not-installable,1 份现已 stale。 会话跑在回放转录上,绝不使用凭据。对报告有异议,走 docs/appeals.md。先读 docs/security.md。 为什么做这个 插件目录会告诉你某个插件存在、大概有多流行、作者怎么描述它。这些都不是测量。DSH 插件不是沙箱里的装饰品:它的 Host 代码在进程内运行,位于工作区沙箱之外,它触发的依赖构建脚本带着你的权限运行。所以「相信作者」是一个有真实后果的真实决定,而 star 数不是证据。 一句话说清区别:别人读代码;这个项目把它装上、跑起来,把证据留在仓库里。 一份报告回答什么 七个维度,每个维度一个问题。没跑的维度记为 skip —— 绝不省略,绝不推断。 | | 问题 | 需要容器吗? | | L0 资格 | 这真的是可安装的 bundle 吗?
展开完整文档(README 剩余 1 节)
dsh-verified-plugins

DeepSeek Harness 插件的执行验证报告 —— 安装它、加载它、运行它、测量它。
证据可追溯、可复现,不是又一份 star 列表。

站点 · 方法 · 报告 schema · 安全 · 申诉 · 目录

状态:V0–V6 已完成。 七个维度全部端到端跑通,支持批量,报告已发布,新鲜度也在跟踪 ——浏览站点。
24 份报告:19 份 verified,4 份 partial,1 份 not-installable,1 份现已 stale。
会话跑在回放转录上,绝不使用凭据。对报告有异议,走 docs/appeals.md。先读 docs/security.md。

为什么做这个

插件目录会告诉你某个插件存在、大概有多流行、作者怎么描述它。这些都不是测量。DSH 插件不是沙箱里的装饰品:它的 Host 代码在进程内运行,位于工作区沙箱之外,它触发的依赖构建脚本带着你的权限运行。所以「相信作者」是一个有真实后果的真实决定,而 star 数不是证据。

一句话说清区别:别人读代码;这个项目把它装上、跑起来,把证据留在仓库里。

一份报告回答什么

七个维度,每个维度一个问题。没跑的维度记为 skip —— 绝不省略,绝不推断。

| | 问题 | 需要容器吗? |
| L0 资格 | 这真的是可安装的 bundle 吗? | 否 |
| L1 安装 | 它能装进干净的 DSH_HOME 吗?装不进去是为什么? | 是 |
| L2 加载 | Host 和 Client 两半真的能起来吗? | 是 |
| L3 运行 | 最小会话能不用凭据跑完吗? | 在容器内,走官方回放适配器 |
| L4 能力 | 它能伸手够到什么:运行时补丁、子进程、端口、密钥环境变量、钩子、工作区外写入? | 否 |
| L5 开销 | 代价是多少,相对基线做差分测量? | 是 —— 没有一项越过门槛时报告 no-significant-delta |
| L6 卸载 | 移除之后,还留下什么吗? | 是 |

结论阶梯

L0 = fail -> not-installable
all seven = pass -> verified
some pass, not all -> partial
none pass -> inconclusive

结论由各维度推导得出,如果声明的结论与维度不符,校验器会拒绝。一个维度被卡住,就足以丢掉 verified。这里没有评分,也没有排名 —— 这正是重点。

发布什么

catalog/ 里每个已验证对象一份 JSON 报告,外加一份生成的 index.json:

catalog/
├── index.json # generated, never hand-edited; CI fails if it is stale
└── npm/ # one dsh.plugin.report.v1 per verified subject

index.json 保存当前计数,以及每个 subject 的维度状态。
撰写本文时:19 个 verified,4 个 partial,1 个 not-installable。

布局说明:契约原本提议用 catalog/<owner>/<repo>.json。
但 subject 是 npm 包,不是 git 仓库——一个仓库可以发布多个包——所以路径按 registry 和包名来索引。包声明了仓库 URL 时,报告会带上它。

复现一份报告

git clone https://github.com/citrusli2026/dsh-verified-plugins && cd dsh-verified-plugins
node packages/cli/src/main.ts static dsh-find-plugin@0.4.0 # re-run one subject
node packages/cli/src/main.ts catalog --check # validate + index freshness

不同次运行的数字可能不同——报告是快照。结论不能变。 这就是本项目对自身要求的可复现标准。

命令行

node packages/cli/src/main.ts static <spec> [--out <file>] # L0 + L4; runs no plugin code
node packages/cli/src/main.ts validate <report.json> [...] # schema + verdict rules
node packages/cli/src/main.ts catalog [--check] # rebuild / check index freshness

spec 必须精确:name@1.2.3,或者只写包名(解析为最新版)。纯静态运行不执行任何插件代码,所以在哪里跑都安全——也正因如此,它的结论最高只能到 partial。

P0 — 安全策略

是强制执行的,不是写在纸上的愿景。完整细节见 docs/security.md。

1. 零密钥。 不使用仓库密钥、环境密钥或 Dependabot 密钥,永远不用。
bash tools/audit/no-secrets.sh # expect: 5 checks passed, zero secrets

2. 第三方插件代码绝不在有凭据的地方运行。 执行只发生在一次性容器里,由维护者控制的触发器发起。
3. 不允许 PR 触发执行。 凡是运行 pnpm add、dsh plugin、docker run 或 runner 包的工作流,只能由 workflow_dispatch、schedule 或 workflow_call 触发——绝不能由任何人都能开的 pull request 触发。pull_request_target 和 workflow_run 一律禁用。
4. 硬性资源上限。 超出上限得到的是 timeout,不是失败。
5. 验证不等于背书。 每份报告都原样带上这句话,CI 会拒绝缺少这句话的报告。

ci.yml 在 pull_request 上运行,严格静态:不构建容器,不执行插件。verify.yml 是执行层,只由维护者触发。

本地门禁

node --test packages/report/test/.test.ts packages/collector/test/.test.ts
node packages/cli/src/main.ts catalog --check
node tools/policy/check-workflows.mjs
node tools/check-hygiene.mjs
bash tools/audit/no-secrets.sh

这些都不依赖外部包,且都在 CI 中运行。TypeScript 由 Node 24 的类型剥离直接执行:没有构建步骤,没有打包器,没有运行时依赖。

贡献

参见 CONTRIBUTING.md。智能体应阅读 AGENTS.md —— 其中写有强制性的停止条件。

徽章

dsh verified

四种状态 —— verified、partial、inconclusive、not-installable —— 并且没有评分。状态说明的是跑了多少,而不是插件有多好。每个徽章都链接到报告,报告里每条结论都链接到它背后的证据。

一批要花多少成本

实测,不是估算:每个对象约 94 秒,而且分布很平,因为成本来自固定的准备工作(L5 要采样启动六次,L3 要一个无头配置档和两次安装),与对象本身无关。20 个对象的一批大约要 31 分钟 CI。verify_specs 接收逗号分隔的列表。

对象普查

docs/survey/ 回答了一个报告回答不了的问题:有多少包自称是 DSH 插件,而实际真是。npm dsh-plugin 关键词下的前 250 个包里,240 个声明了可安装的 bundle,但只有 130 个与固定版本的运行时 peer 兼容 —— 也就是说 110 个会在安装时被拒。只查注册表元数据;不用容器,不用凭据,26 秒。

时效与更正

报告是快照。catalog/staleness.json 记录了哪些对象此后重新发布过,站点会标出来 —— 过期的报告不是错的报告,它描述的是已不再是最新的那个版本。

更正是增量的,并且有机械化的把关:supersedes 加上一条 changelog 记录,其描述由两份报告共同计算得出,所以更正无法错误描述自己,而删掉证据的修订会被拒绝。参见 docs/appeals.md。

这个验证器实际遇到过的每一次失败,都按事件列在 docs/method.md § 6 —— 八次误报、四次漏报、三次误通过,其中两次已修复。

已知限制

engines.dsh 是声明式的,不强制执行,而 @deepseek-ai/dsh* 上的 peerDependencies 是强制执行的,不兼容的安装会被拒绝。用裸名解析插件不安全 —— 官方 replay 适配器的 latest 标签指向一个不可用的版本。静态分析无法证明意图,也看不到动态构造的代码,bundle 归属只能尽力而为。完整列表在 docs/method.md § 5。

许可证

MIT。许可证覆盖本仓库的方法、工具和报告。它不授予任何第三方插件的权利,这里的报告也不构成背书、认证或担保。DSH 本身是 DeepSeek 的另一个项目;本仓库独立,与其无关联。
预览分享卡片长什么样 ↓citrusli2026/dsh-verified-plugins
分享 · DeepSeek Harness Hub
citrusli2026/dsh-verified-plugins

装上跑一遍,用可复现证据验证插件真实表现

这是你的仓库?认领条目

回到顶部