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。

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

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

小夜