前言¶
在 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。