隔离启动插件,用启动审计判定版本兼容性
29/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/33moren33/dsh-slice-bench.git按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 65 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/6) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-slice-bench(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:16:26
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 57 处,展示前 46 条)
- 读取本地文件skills/dsh-slice-bench/lib/bundles-driver.js:49
const dirs = readdirSync(farm).filter(name => name.startsWith('dsh-')).sort() - 读取本地文件skills/dsh-slice-bench/lib/bundles-driver.js:52
if (!existsSync(file)) continue - 写入本地文件skills/dsh-slice-bench/lib/bundles-driver.js:59
writeFileSync(outPath, `${JSON.stringify(index, null, 2)}\n`) - 读取本地文件skills/dsh-slice-bench/lib/engine.js:21
return statSync(path).isDirectory() - 读取本地文件skills/dsh-slice-bench/lib/engine.js:29
if (!existsSync(manifest)) return undefined - 读取本地文件skills/dsh-slice-bench/lib/engine.js:31
const name = JSON.parse(readFileSync(manifest, 'utf8')).name - 读取本地文件skills/dsh-slice-bench/lib/engine.js:51
for (const child of readdirSync(dir)) { - 读取本地文件skills/dsh-slice-bench/lib/engine.js:68
if (!existsSync(file)) return [] - 读取本地文件skills/dsh-slice-bench/lib/engine.js:71
for (const raw of readFileSync(file, 'utf8').split(/ ? /)) { - 执行外部命令来自配置/变量skills/dsh-slice-bench/lib/exports.js:74
const child = spawn(process.execPath, ['--input-type=module', '-e', READER, '--', name], { - 执行外部命令来自配置/变量skills/dsh-slice-bench/lib/exports.js:99
const run = spawnSync(process.execPath, ['--input-type=module', '-e', READER, '--', name], { - 读取本地文件skills/dsh-slice-bench/lib/official-config.js:44
if (!existsSync(path)) { - 执行外部命令来自配置/变量skills/dsh-slice-bench/lib/official-config.js:45
const built = spawnSync(process.execPath, [join(here, '..', 'bin', 'bundles.js'), '--engine', engineRoot], { encoding: 'utf8' }) - 读取本地文件skills/dsh-slice-bench/lib/official-config.js:52
if (existsSync(path)) { - 读取本地文件skills/dsh-slice-bench/lib/official-config.js:58
return JSON.parse(readFileSync(path, 'utf8')).rows?.[name] - 读取本地文件skills/dsh-slice-bench/lib/patch.js:37
manifest = JSON.parse(readFileSync(resolve(dir, 'package.json'), 'utf8')) - 读取本地文件skills/dsh-slice-bench/lib/patch.js:44
if (!existsSync(path)) return { error: `${name} declares ${declared} but the file is not there` } - 执行外部命令来自配置/变量skills/dsh-slice-bench/lib/patch.js:97
const run = spawnSync(process.execPath, ['--input-type=module', '-e', READER, '--', pathToFileURL(`${appBoot}/lib/index.js`).href, patchPath], { - 读取本地文件skills/dsh-slice-bench/lib/plugin-surface.js:36
entries = readdirSync(dir, { withFileTypes: true }) - 读取本地文件skills/dsh-slice-bench/lib/plugin-surface.js:80
if (statSync(file).size > MAX_FILE_BYTES) continue - 读取本地文件skills/dsh-slice-bench/lib/plugin-surface.js:81
text = readFileSync(file, 'utf8') - 读取本地文件skills/dsh-slice-bench/lib/plugin-surface.js:100
if (existsSync(manifest)) { - 读取本地文件skills/dsh-slice-bench/lib/plugin-surface.js:102
const parsed = JSON.parse(readFileSync(manifest, 'utf8')) - 读取本地文件skills/dsh-slice-bench/lib/services.js:43
children = readdirSync(dir, { withFileTypes: true }) - 读取本地文件skills/dsh-slice-bench/lib/services.js:162
if (statSync(file).size > MAX_FILE_BYTES) continue - 读取本地文件skills/dsh-slice-bench/lib/services.js:163
text = readFileSync(file, 'utf8') - 读取本地文件skills/dsh-slice-bench/lib/services.js:200
if (statSync(file).size > MAX_FILE_BYTES) continue - 读取本地文件skills/dsh-slice-bench/lib/services.js:201
text = readFileSync(file, 'utf8') - 读取本地文件skills/dsh-slice-bench/lib/spec.js:42
if (!existsSync(manifestPath)) return undefined - 读取本地文件skills/dsh-slice-bench/lib/spec.js:45
manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) - 读取本地文件skills/dsh-slice-bench/lib/spec.js:56
if (existsSync(full)) return full - 读取本地文件skills/dsh-slice-bench/lib/spec.js:67
isDirectory = statSync(full).isDirectory() - 写入本地文件skills/dsh-slice-bench/lib/world.js:25
mkdirSync(farm, { recursive: true }) - 写入本地文件skills/dsh-slice-bench/lib/world.js:38
mkdirSync(home, { recursive: true }) - 写入本地文件skills/dsh-slice-bench/lib/world.js:39
mkdirSync(agentsHome, { recursive: true }) - 写入本地文件skills/dsh-slice-bench/lib/world.js:57
mkdirSync(join(target, '..'), { recursive: true }) - 写入本地文件skills/dsh-slice-bench/lib/world.js:58
writeFileSync(target, contents) - 读取本地文件skills/dsh-slice-bench/lib/world.js:89
const stillMissing = () => names.filter(name => !existsSync(join(world.dir, 'node_modules', name, 'package.json'))) - 读取本地文件skills/dsh-slice-bench/lib/world.js:110
if (existsSync(target)) continue - 读取本地文件skills/dsh-slice-bench/lib/world.js:112
if (!existsSync(join(source, 'package.json'))) continue - 写入本地文件skills/dsh-slice-bench/lib/world.js:113
mkdirSync(join(target, '..'), { recursive: true }) - 读取本地文件skills/dsh-slice-bench/lib/world.js:122
if (existsSync(to)) return - 读取本地文件skills/dsh-slice-bench/lib/world.js:128
if (existsSync(join(from, 'node_modules', '@deepseek-ai'))) { - 读取本地文件skills/dsh-slice-bench/lib/world.js:138
for (const entry of readdirSync(store)) { - 删除本地文件skills/dsh-slice-bench/lib/world.js:240
if (lstatSync(path).isSymbolicLink()) unlinkSync(path) - 删除本地文件递归skills/dsh-slice-bench/lib/world.js:246
rmSync(world.dir, { recursive: true, force: true })
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 隔离启动插件
- 启动审计判定兼容性
把插件放进一台真正能跑起来的最小 DSH 机器,让 harness 自己判断它站不站得住 · DSH 插件版本冲突的运行时测试台,结论由 harness 给出,不是我们说了算
README
由 DeepSeek 最新模型翻译生成DSH 插件切片基准测试
DSH 插件的版本兼容检测工具与 agent skill,结论由 DSH 自己的启动审计给出。
DSH(DeepSeek Harness) 是「一切皆插件」的 agent harness。换一个 harness 版本,插件可能就加载不起来。本仓库把插件单独放进一棵最小的 Cordis 树里启动,用启动审计的结论回答「这一版还能不能加载」。
特色
- 不内置「哪些 API 变了」的结论清单 — 那种清单会过期。换一个版本重新运行,得到的就是那一版的结论。仓库里的 baselines/ 是工具运行的结果,为了展示程序效果(不是只能跑特定版本)
- 逐个插件隔离启动 — 每个插件单独放进空的 Cordis 树,缺哪个服务由启动审计点名。不修改源码,不打补丁
- 区分「通过」与「绿但没测全」 — 启动审计只审配置里列出的条目,看不见条目内部用 ctx.inject([...], cb) 建的可选依赖:那段回调可以一直等下去,而整棵树照报通过。本工具把这些等待单独列出并给出退出码 3,因为它正是下一个版本把该依赖变成必需时会崩的地方
- 结论不经过模型判断 — 判定来自启动审计。同一版本连跑两次,全部包的启动状态、依赖集合、服务调用记录逐条比对,零差异
- 零依赖、零密钥 — 只需 Node 20。
展开完整文档(README 剩余 1 节)
DSH 插件切片基准测试 DSH 插件的版本兼容检测工具与 agent skill,结论由 DSH 自己的启动审计给出。 DSH(DeepSeek Harness) 是「一切皆插件」的 agent harness。换一个 harness 版本,插件可能就加载不起来。本仓库把插件单独放进一棵最小的 Cordis 树里启动,用启动审计的结论回答「这一版还能不能加载」。 特色 - 不内置「哪些 API 变了」的结论清单 — 那种清单会过期。换一个版本重新运行,得到的就是那一版的结论。仓库里的 baselines/ 是工具运行的结果,为了展示程序效果(不是只能跑特定版本) - 逐个插件隔离启动 — 每个插件单独放进空的 Cordis 树,缺哪个服务由启动审计点名。不修改源码,不打补丁 - 区分「通过」与「绿但没测全」 — 启动审计只审配置里列出的条目,看不见条目内部用 ctx.inject([...], cb) 建的可选依赖:那段回调可以一直等下去,而整棵树照报通过。本工具把这些等待单独列出并给出退出码 3,因为它正是下一个版本把该依赖变成必需时会崩的地方 - 结论不经过模型判断 — 判定来自启动审计。同一版本连跑两次,全部包的启动状态、依赖集合、服务调用记录逐条比对,零差异 - 零依赖、零密钥 — 只需 Node 20。不读取凭据,不发起网络请求,不修改 ~/.dsh;每次运行使用临时目录,结束即删除 快速开始 目标版本安装到独立目录 mkdir dsh-0.1.2 && cd dsh-0.1.2 && npm init -y npm install @deepseek-ai/dsh@0.1.2-alpha.2 @deepseek-ai/dsh-base@0.1.2-alpha.2 @deepseek-ai/dsh-web-app@0.1.2-alpha.2 cd .. git clone https://github.com/33moren33/dsh-slice-bench.git cd dsh-slice-bench/skills/dsh-slice-bench # 命令在这一层,不在仓库根 一、插件声明的 SDK 包在新版本是否存在(不启动,秒级) node bin/manifest.js --engine ../../../dsh-0.1.2 --plugin ../../../你的插件 二、加载并运行一个回合,新旧版本各一次 node bin/talk.js --engine ../../../dsh-0.1.1 --plugin ../../../你的插件 node bin/talk.js --engine ../../../dsh-0.1.2 --plugin ../../../你的插件 三、插件自带 cordis.patch.yml 时,那棵树必须单独测——上一步测不到它 node bin/slice.js --engine ../../../dsh-0.1.1 --plugin ../../../你的插件 node bin/slice.js --engine ../../../dsh-0.1.2 --plugin ../../../你的插件 四、启动审计说「等某个服务」时,问谁提供它、以及它这一版要哪些服务 node bin/provider.js --engine ../../../dsh-0.1.2 --service node bin/provider.js --engine ../../../dsh-0.1.2 --package 退出码有四档:0 通过/1 被测对象判定为失败/2 没能给出答案(引擎路径错、参数错,或本工具自己出错)/3 跑起来了但结论不完整。3 不是失败也不是通过,屏幕上的绿灯之下还有没测到的部分。 ⭐ 1 和 2 的分工是这套工具的地基:1 才是关于被测插件的结论,2 是本工具没能给出结论。每条命令 --help 会印出这四档的完整措辞。 已发布的插件先装到一个空目录:npm install --legacy-peer-deps --omit=peer(第三方插件用 peerDependencies 声明宿主 SDK,直接装会拖来整棵 SDK 并覆盖被测版本),然后把 node_modules// 交给 --plugin。 ⚠️ --omit=peer 只挡 peer 那一类。插件若把某个 SDK 包写在真 dependencies 里,它照样会被装进来,node_modules/@deepseek-ai/ 仍会出现——这不影响结论,--plugin 会在搭临时环境时剔掉插件自带的这些副本,测的仍是 --engine 指的那一份。 --engine 支持两种形态:npm 安装目录,或包含 pnpm-workspace.yaml 的源码检出。 装成 skill skills CLI(推荐) npx skills add 33moren33/dsh-slice-bench Claude Code /plugin marketplace add 33moren33/dsh-slice-bench /plugin install dsh-slice-bench 本地开发模式: git clone https://github.com/33moren33/dsh-slice-bench.git claude --plugin-dir /path/to/dsh-slice-bench Codex codex plugin add 33moren33/dsh-slice-bench Gemini CLI gemini skills install https://github.com/33moren33/dsh-slice-bench.git --path skills Cursor git clone https://github.com/33moren33/dsh-slice-bench.git cp -r dsh-slice-bench/skills/* .cursor/skills/ DSH 本体把 skills/dsh-slice-bench/ 复制到项目的 .agents/skills/,或让 Skill provider 加载本仓库的 skills/ 目录。该目录是自足的,包含 skill 与它调用的全部命令。 Skill 索引 | Skill | 说明 | 版本覆盖 | | dsh-slice-bench | 三种模式(兼容体检/升级后回归/版本差异)、每步执行什么、输出如何判读、报告格式;细节在 references/ 按需加载 | 任意两个版本之间 | 命令 命令位于 skills/dsh-slice-bench/,相对路径以该目录为工作目录。 | 命令 | 用途 | | bin/manifest.js | 插件声明的 SDK 包(含自带组合补丁里的)在目标版本是否存在 | | bin/talk.js | 加载插件并运行一个对话回合:能否启动、回合是否完成、有无异常 | | bin/provider.js | 某个服务由哪个包提供(声明与运行时确认分开报);某个包在这一版是否还在、官方 bundle 给它的条目 id 与 config、它要求哪些服务 | | bin/flow.js | 单个包隔离启动,记录它对每个服务的属性访问与方法调用 | | bin/survey.js | 逐包隔离启动,统计能否独立激活 | | bin/closure.js | 不动点迭代,求每个包能够启动的最小包集合 | | bin/bundles.js | 从官方 bundle 提取条目与 config,建立索引 | | bin/slice.js | 指定若干包、或直接用插件自带的 cordis.patch.yml 组成一棵树并启动 | | matrix/run.js | 同一份会话产物,新旧版本能否互相读取 | 官方函数 本工具不依赖任何官方插件包(package.json 无 dependencies),运行时从被测版本解析下列接口,逻辑写在本工具内。 | 接口 | 来源 | 用途 | | boot(name, configPath) | @deepseek-ai/dsh-app-boot | 由一份条目清单启动完整的树,不经过 profile 机制 | | assertEntriesActivated / assertEntriesLoaded | 同上 | 判定来源:点名未激活的条目及其等待的服务 | | loadOverlayPatches | 同上 | 解析 bundle 的 cordis.patch.yml | | installFailLoud | 同上 | 使静默失败显式化 | | ctx.registry / ctx.reflect / fiber.state | @deepseek-ai/cordis | 遍历运行实例、读取服务表 | | ctx.reflect.provide(name, value) | 同上 | 记录用的桩服务由它注册 | | isolate | 基座原语,cordis.yml 声明式配置 | 使桩服务优先于真实服务被解析 | 实现思路参考官方文档与源码:教程第 6 章「组合与 HMR」的 diagnose.ts 示例(遍历插件注册表定位 PENDING 实例)、第 3 章「服务」(插件如何提供服务)、同第 6 章的服务隔离声明;以及官方自省工具按 Symbol 枚举服务、官方沙箱包装注入服务的写法。条目与 config 一律取自各 bundle 随包发布的 cordis.patch.yml。 模型适配器:对话用的是一个 22 行的确定性适配器(移植自官方测试夹具),不使用官方 dsh-llm-replay——后者属于 test-support,不在安装集内,基于它的工具无法在用户实际安装的版本上运行。 基线 条目索引存入 skills/dsh-slice-bench/baselines/,下一个版本可直接 diff。逐包服务调用记录体积较大,作为 Release 附件提供。 | 版本 | 形态 | 包数 | 条目索引 | 服务调用记录 | | 0.1.1-rc.2 | npm 安装 | 197 | 仓库内 | Release | | 0.1.2-alpha.1 | 源码检出 | 263 | 仓库内 | — | | 0.1.2-alpha.2 | npm 安装 | 224 | 仓库内 | Release | ⛔ 这三份不能随便互相 diff。源码检出含仓库里全部的包(包括没发布的),npm 安装只含装得到的,两者比「包在不在」两个方向都会错。上面 0.1.1-rc.2 → 0.1.2-alpha.2 那组结论之所以成立,是因为两边同为 npm 安装。⚠️ 0.1.2-alpha.1 没有发布到 npm,所以它只有源码检出这一种形态。工具在做这种比较时会自己把「包在不在」降进「判不了」那一档。 0.1.1-rc.2 → 0.1.2-alpha.2 的运行结果:移除 2 个包;21 处依赖声明变化,其中 17 个包将 sessionProjections 从作用域注入改为条目级 inject(.d.ts 未变化,导出 diff 无法发现);会话日志存储形式变化而格式版本号未变。 适用范围 已在 0.1.1-rc.2、0.1.2-alpha.2(均为 npm 安装)与 0.1.2-alpha.1(源码检出)上运行;测试样本包含 npm 上的 5 个第三方插件。 当前限制:浏览器侧只检查声明的包名,不检查实际加载;服务调用记录覆盖启动阶段;已验证平台为 Windows + Node 24。 目录 skills/dsh-slice-bench/ 自足的 skill,复制这一个目录即可使用 ├── SKILL.md agent 操作规程 ├── references/ 命令详解、方法说明 ├── bin/ 命令 ├── lib/ 引擎识别、临时环境、驱动 ├── workload/ 对话组合、模型适配器、桩服务 ├── matrix/ 跨版本产物检查 └── baselines/ 各版本条目索引参考资源 - 官方仓库 — DSH 本体 - Discussion #5120 — 插件升级 skill 的社区征集 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
33moren33/dsh-slice-bench
隔离启动插件,用启动审计判定版本兼容性
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,288已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这是你的仓库?认领条目