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

插件兼容预检 lcy0121/dsh-plugin-compat-check

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

安装前实测插件能否在你的版本上正常运行

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/04·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 29 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 19 处,展示前 18 条)
  • 执行外部命令来自配置/变量
    lib/debugger.mjs:39
    const child = spawn(
  • 执行外部命令固定命令
    lib/owned-process.mjs:57
    const r = spawnSync("/bin/ps", args, {
  • 执行外部命令来自配置/变量
    lib/probe-runner.mjs:27
    return spawn(command, args, {
  • 写入剪贴板
    lib/workflow-panels.mjs:669
    await navigator.clipboard.writeText(
  • 读取本地文件
    plugin/index.js:705
    existsSync(path.join(c, "lib", "extract.mjs")) &&
  • 读取本地文件
    plugin/index.js:706
    existsSync(path.join(c, "lib", "verdict.mjs"))
  • 读取本地文件
    plugin/index.js:807
    readFileSync(join(dir, "package.json"), "utf8"),
  • 读取本地文件
    plugin/index.js:914
    return existsSync(dir)
  • 读取本地文件
    plugin/index.js:925
    return existsSync(dir)
  • 读取本地文件
    plugin/index.js:1365
    if (!existsSync(file)) continue;
  • 发起网络请求
    plugin/lib/client.js:13
    `)}var React4=__toESM(require("react"),1);var BASELINE_SCHEMA=2,has=(o,k)=>Object.prototype.hasOwnProperty.call(o,k);function snapshotForBaseline(verd
  • 发起网络请求
    plugin/lib/client.js:14
    `],{type:"application/json"}),url=URL.createObjectURL(blob),a=document.createElement("a");a.href=url,a.download=value.kind==="plugin-compat-check/revi
  • 写入剪贴板
    plugin/lib/client.js:14
    `],{type:"application/json"}),url=URL.createObjectURL(blob),a=document.createElement("a");a.href=url,a.download=value.kind==="plugin-compat-check/revi
  • 发起网络请求
    plugin/lib/client.js:15
    `)?original:renderIssueReport(p.data.report,{translate:t,explain:evidenceNote,findingText:builtin})},[shown[0],p.data.issueReport,p.data.report]);retu
  • 写入剪贴板
    plugin/lib/client.js:15
    `)?original:renderIssueReport(p.data.report,{translate:t,explain:evidenceNote,findingText:builtin})},[shown[0],p.data.issueReport,p.data.report]);retu
  • 读取本地文件
    plugin/lib/host-reports.js:300
    if (probePath && existsSync(probePath)) {
  • 读取本地文件
    plugin/lib/host-upgrade.js:21
    readFileSync(new URL("../package.json", import.meta.url), "utf8"),
  • 发起网络请求
    plugin/src/report-store.mjs:73
    const response = await fetch(url, {
扫描于 2026/11/5(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 安装前检测插件可用性
  • 判断插件与版本兼容性

安装前先判断 DSH 插件在你这版 DeepSeek Harness 上是否真的可用

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-compat-check 装之前先花几分钟,判断一个 DSH 社区插件在你这一版 DeepSeek Harness 上到底能不能用。 它解决什么问题 DeepSeek Harness(DSH)是「万物皆插件」的 agent harness:模型、工具、沙箱、界面甚至 agent loop 本身都是插件。社区生态很大,但插件的声明不等于宿主的现实。以下四类误判在本项目中都真实遇到过: | 你可能会以为 | 实际情况 | | peerDependencies 写了支持某版本 → 能用 | 声明可能是错的。有插件声明支持 0.2.0,实测启动即抛 ctx.settings.register is not a function | | DSH 的版本闸门放行了 → 能用 | 闸门只做字符串范围比对,它不验证 API 是否真的存在 | | 启动没报错 → 能用 | 插件普遍用 try/catch、typeof 守卫做降级。API 缺失时它会「激活成功」,但相应功能是死的 | | 启动日志干净 → 客户端也没问题 | 客户端代码跑在浏览器里。实测有插件宿主端完全干净、客户端抛错导致 UI 根本不注册 | 结论:靠读声明和看日志都不够,必须真实启动一次,再把宿主实际的 API 面与插件实际的调用点逐条比对。这就是本工具做的事。
展开完整文档(README 剩余 1 节)
dsh-plugin-compat-check

装之前先花几分钟,判断一个 DSH 社区插件在你这一版 DeepSeek Harness 上到底能不能用。

它解决什么问题

DeepSeek Harness(DSH)是「万物皆插件」的 agent harness:模型、工具、沙箱、界面甚至 agent loop 本身都是插件。社区生态很大,但插件的声明不等于宿主的现实。以下四类误判在本项目中都真实遇到过:

| 你可能会以为 | 实际情况 |
| peerDependencies 写了支持某版本 → 能用 | 声明可能是错的。有插件声明支持 0.2.0,实测启动即抛 ctx.settings.register is not a function |
| DSH 的版本闸门放行了 → 能用 | 闸门只做字符串范围比对,它不验证 API 是否真的存在 |
| 启动没报错 → 能用 | 插件普遍用 try/catch、typeof 守卫做降级。API 缺失时它会「激活成功」,但相应功能是死的 |
| 启动日志干净 → 客户端也没问题 | 客户端代码跑在浏览器里。实测有插件宿主端完全干净、客户端抛错导致 UI 根本不注册 |

结论:靠读声明和看日志都不够,必须真实启动一次,再把宿主实际的 API 面与插件实际的调用点逐条比对。这就是本工具做的事。

前置要求

- DSH CLI:dsh 在 PATH 中(桌面端可在菜单栏 → 「管理 dsh 命令…」安装)
- POSIX shell 环境:macOS 或 Linux。Windows 请在 WSL 或 Git Bash 中运行
- bash、python3、curl、pgrep/pkill

快速开始

git clone https://github.com/<你的用户名>/dsh-plugin-compat-check.git
cd dsh-plugin-compat-check
chmod +x dsh-plugin-compat-check.sh

./dsh-plugin-compat-check.sh <spec> [--keep] [--timeout 秒]

<spec> 与 dsh plugin add 完全一致:

npm 包名
./dsh-plugin-compat-check.sh dsh-keep-awake

GitHub 仓库(生态里大量插件未发布到 npm) ./dsh-plugin-compat-check.sh github:owner/repo

本地开发中的插件 ./dsh-plugin-compat-check.sh file:/path/to/my-plugin

| 选项 | 作用 |
| --keep | 保留临时 profile 与现场,便于人工排查(默认退出时删除) |
| --timeout N | 启动等待秒数,默认 30。插件越重越需要给足 |

输出怎么读

✓ agents: list 均存在 ← 这一项确实能用 ⚠️ settings: 调用了不存在的方法 ['register'] 宿主实际提供: configure, describe, mutate, replace …
❌ 服务缺失: xxx ← 相关功能确定失效 ◻︎ 客户端服务: locale, slots ← 本工具测不到,需界面验证

| 结论 | 含义 |
| API 面完整,启动干净 | 宿主端与比对层面可用;客户端部分仍需界面确认 |
| 部分可用 | 存在 API 缺失 → 相关功能失效或静默降级,其余可用 |
| 不兼容 | 连安装都过不了 DSH 的版本闸门 |

它做四件事

① 身份核对

查 npm registry 上同名包到底属于哪个仓库。

这不是多虑——生态里真实存在撞名。例如 dsh-effort-slider 这个 npm 名属于一个仓库,而你想装的可能是另一个同名仓库的插件;aegis 在 npm 上是个与插件本体无关的包(插件只存在于 GitHub)。装错包比装不上更糟——它会静默地做别的事。

若 npm 元数据未声明 repository,脚本会明确警告。

② 隔离安装

从 web 模板创建一个一次性 profile plugincheck,把目标插件装进去。

失败通常意味着 DSH 自带的版本兼容闸门拒绝了它——这类插件连装都装不上。

全程不碰你的 desktop 等正式 profile。

③ 静态提取插件的实际调用点

从插件源码里找出它真正调用的服务与方法,而不只是看它声明了什么。

这一步只负责「提取」,不负责判定服务属于宿主端还是客户端——那个归属由第 ④ 步的真实探针决定。原因见下方「实现要点」。

④ 真实启动 + API 面比对

启动宿主,用随附探针 dump 出宿主的真实 API 面,与 ③ 的调用点逐条比对。

探针会把原型链上的方法一起枚举出来。这条是踩坑换来的:只枚举自有属性会漏掉原型方法,曾导致「某版本取消了某项能力」的错误结论,而实际只是方法改名了。

两条必须知道的边界

1. 客户端这一层,命令行永远测不到。 插件的客户端代码在浏览器中执行。要确认它,只能看界面上有没有出现该插件自己的 UI 元素(按钮 / 标签页 / 设置卡片)。本工具会列出客户端服务,但不会判定它们——这是刻意的诚实,不是遗漏。

2. 方法级判定是正则启发式。 静态扫描可能把非调用点误认成调用。拿不准时加 --keep,保留现场查看原始数据:

| 路径 | 内容 |
| /tmp/dsh-plugin-compat-check/boot.log | 宿主启动日志(含 did not activate) |
| /tmp/dsh-plugin-compat-check/static.json | 从插件源码提取的服务与调用点 |
| /tmp/dsh-plugin-compat-check/probe-report.json | 宿主真实 API 面 |

产物与清理

脚本退出时通过 trap EXIT 自动收尾:

1. 递归杀掉测试服务进程树
2. 兜底清理 caffeinate 等防休眠辅助进程这一步是安全底线:防休眠类插件若留下辅助进程,会让机器再也无法睡眠
3. 删除临时 profile(--keep 时保留)

目录结构

dsh-plugin-compat-check/
├── dsh-plugin-compat-check.sh # 编排:身份核对 → 安装 → 提取 → 启动 → 比对 ├── probe/ # 诊断探针(以 file: 方式装进临时 profile) │ ├── package.json │ ├── cordis.patch.yml │ └── index.mjs # 原型链枚举 + 作用域上下文探测 ├── README.md ├── README.en.md └── LICENSE

实现要点(改这个工具前值得先读)

- 探针不声明 inject:声明了就会因缺服务而卡在 PENDING,探测能力反而下降。它靠延迟 + try/catch 自行兜底。
- 探针先写 probe-applied.txt 标记再探测:否则「没有报告」无法区分「插件没加载」和「探测中途抛错」。
- 只扫「实际挂载的入口 + 其本地依赖图」,不是整个包。 包里常有不会被加载的伴随模块——实测有插件带一个 lib/invariant.js,主入口既不 import 它、cordis.patch.yml 也没挂载它,其 apply 甚至是个空实现。整包扫描会把这类孤儿模块需要的服务当成真实缺口,把判定压得过低。无法解析入口时才退回整包扫描,并在输出里明确标注这一点。
- 宿主端/客户端的归属由探针判定,不靠文件路径。 这一点试错了两轮才定下来:用「所有引用文件都在客户端目录」判定,会把共用代码里的客户端服务误报成缺失;改成「任一引用文件在客户端目录」,又会把宿主服务误判成客户端——因为客户端设置页本来就会引用宿主服务(例如显示运行中的 agent / job 数量),而共用代码与宿主入口也会提到 locale、slots。两个方向都错。最终规则:探针在宿主里找到了就是宿主服务;找不到、且有客户端线索(已知客户端服务名或在客户端路径出现),才归为「需界面验证」,而不是硬判缺失。
- 编辑 probe/index.mjs 后注意硬链接:插件装进 profile 后是硬链接/副本,若用会替换 inode 的方式写入(部分编辑器如此),node_modules 里的副本不会同步,会出现「改了代码但行为没变」。

已知限制

- 输出文案目前为中文
- 仅覆盖宿主端 API 面;客户端需人工在界面上确认
- 方法级判定为启发式,存在误报可能
- 需要能联网(查 npm registry、安装插件)
- 未在 Windows 原生环境验证

License

MIT
预览分享卡片长什么样 ↓lcy0121/dsh-plugin-compat-check
分享 · DeepSeek Harness Hub
lcy0121/dsh-plugin-compat-check

安装前实测插件能否在你的版本上正常运行

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部