前言¶
在 DSH 里从市场或 dsh-plugin 装 bundle 时,常见两类问题:装完才发现两个插件在 profile 里声明了同名 tool 或同一 provided service;安装过程只有「转圈」,看不到 pnpm 真实输出。目录侧的 market-lens 负责只读雷达与 spec,不负责装前能力冲突扫描,也不包装官方安装引擎。
下面介绍维护者 wodaimnd 发布的工作流插件 market-verdict(npm 包名 @local/market-verdict,版本 0.1.0)。它在 pluginManager.installBundle 之前做静态判定与缓存成本提示,安装过程中流式回放 .plugin-manager/logs/<op>/pnpm.log 里的真实进度。这是功能插件,不做人工审核,也不替代目录源的安全或编辑推荐。
这是什么¶
market-verdict 是 DSH 市场层的判定闸门加安装进度包装层。与 market-lens、dsh-plugin 一样注入同一个 pluginManager,因此无论从市场 UI 还是从 dsh-plugin 发起安装,都会经过同一套判定逻辑。
接线关系可以概括为:
market-lens(雷达,只读)
│ installSpecFor(row) → spec
▼
market-verdict(判定 + 进度)
│ approve / warn / veto
▼
pluginManager.installBundle(官方安装引擎)
│
▼
.ui-market(资产仓,独立泳道,不经本插件)
GitHub 仓库:https://github.com/wodaimnd/market-verdict
社区目录页:https://www.skillhub.cn/plugins/wodaimnd/market-verdict(独立社区站点,与 DeepSeek / 幻方无官方从属关系)
核心功能¶
装前判定¶
扫描当前 profile 里已装插件的源码,收集:
- tool id(认
defineTool({ name: 'x' })这类字面量声明); - provided service(认
.provide('x')字面量)。
与候选 bundle 的同类声明比对,找出能力级冲突。报告措辞是「声明于源码」,不是「运行期已注册」;动态拼接的名字(例如 defineTool({ name: dynName }))不在扫描视野内。
顺带估算缓存成本:统计工具与服务「说明书」段数,超过配置阈值才提示。
本插件明确不做 slot 冲突判定——DSH 允许多个插件向同一 slot 注入不同 id,用 slot 名作冲突键在本机实测会产生假阳性。也不做版本四态权威性判定、来源可信度或写 patch 文件(详见 README 中的「它明确不做什么」表)。
安装进度¶
包装 pluginManager.installBundle,读取对应 op 目录下 pnpm 日志,把真实输出与进度推给 UI。进度数值优先解析 pnpm Progress: 行(规则与 dsh-plugin 一致,MIT);解析不到时用时间单调兜底,封顶 90,只有 installBundle 成功返回才置 100。
模型工具与 HTTP¶
Cordis 暴露工具:
plugin_install_verdict { spec }
返回 decision、findings、cost。
Host 侧 HTTP(cordis.patch.yml 默认 route: /api/market-verdict)只接受回环地址且为 POST:
| op | 作用 |
|---|---|
active |
全部未终态安装任务 |
status + id |
单个任务快照 |
verdict + spec |
手动判定一个候选目标 |
设置页 UI¶
在设置中新增「安装判定」一节(settings.section,order 61,排在 dsh-plugin 的 60 之后):可输入候选 spec 做判定,下方显示进行中的安装进度条与 pnpm 原始输出。
配置¶
cordis.patch.yml 中常用项:
| 键 | 默认 | 说明 |
|---|---|---|
mode |
warn |
off 只报告;warn 报告并放行;veto 在 critical 时硬拦 |
costWarnSections |
8 |
工具+服务说明书段数超过此值才提示缓存成本 |
route |
/api/market-verdict |
host 侧 HTTP 端点 |
minPollMs |
150 |
进度轮询最小间隔 |
安装与启用¶
包要求 DSH 引擎 >=0.2.1-rc.3 <0.3.0,peer 依赖 @deepseek-ai/cordis(optional)。许可证 MIT。
已抓取资料与目录页均未给出固定的 shell 安装命令;在 DSH 中安装社区插件时,可按 SkillHub 目录页「发送给 DeepSeek Harness 安装」的说明,让宿主读取插件来源后走官方 bundle 安装流程。安装完成后包会以 @local/market-verdict 出现在 profile 中。
卸载示例(来自 README,路径需按本机 DSH 安装位置替换):
$env:ELECTRON_RUN_AS_NODE='1'
& 'D:\work tools\AI\DSH\DSH\DeepSeek Harness.exe' --expose-internals `
'D:\work tools\AI\DSH\DSH\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js' `
plugin --profile desktop remove '@local/market-verdict'
也可从 .plugin-manager\backups\verdict-<ts>\ 恢复 package.json 与 cordis.patch.yml。
注意: 插件以当前 DSH 进程权限运行,安装前应自行审阅 GitHub 源码与 MIT 许可证;本插件不提供安全评级或人工审核。
典型用法与验证¶
设置页手动判定¶
在「安装判定」输入候选 spec,查看 decision 与冲突 findings;若继续安装,同一界面可观察 pnpm 流式输出。
维护者提供的语法检查¶
$node = 'D:\tools conection\node\node.exe'
& $node --check index.js
& $node --check lib/progress.js
& $node --check lib/collide.js
& $node --check client.js
期望四个文件均为 exit 0。
本机 profile 扫描自检¶
& $node (Join-Path $env:TEMP 'mv-collide-test2.mjs')
README 记载的一次实测输出为:scannedPackages: 106, tools: 3, provides: 1, collisions: 3,其中 3 条冲突为真阳性(purge_status / purge_apply / purge_revert 被 Xsdsh-purge 与 Xsdsh-purge-next 同时声明)。
适用场景与边界¶
适合: 经常从市场或 CLI 批量试装插件、希望在装前看到 tool/service 声明冲突与缓存成本提示,并在安装时看到真实 pnpm 进度的 DSH 用户。
不适合当作: 版本是否「过期」的权威结论、slot 互斥检查、恶意代码或来源可信度裁决——这些要么被插件明确弃权,要么属于 market-lens 等目录层职责。
依赖边界: 本包不 import dsh-plugin,避免未安装 dsh-plugin 时连带崩溃;与 dsh-plugin 并行存在时共享同一 pluginManager 包装。
结尾¶
market-verdict 把装前的能力冲突扫描、缓存成本提示与装中的真实 pnpm 进度接到官方 installBundle 上,并用 warn / veto 模式让使用者决定是否硬拦。细节与「不做什么」的完整说明见仓库 README。