market-verdict:DSH 装前判定闸门与安装进度

前言

在 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye