中文EN

dsh-task-plugin-scout

market已测通过npmMIT

按任务排序本 profile 的插件(已启用 / 已安装但未启用 / 市场可安装),并给出每个候选的确切下一步——启用、安装,或无需操作。

下载量 / Downloads
1,829
依赖体积 / node_modules
0.05 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-task-plugin-scout

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-task-plugin-scout

[English](README.en.md) | 中文

![npm version](https://www.npmjs.com/package/dsh-task-plugin-scout) ![license](LICENSE)

一个 DeepSeek Harness(DSH)插件,只回答一个问题:

动手之前,这个 profile 里已经有哪些插件能让当前任务更省力?

它注册一个模型工具 plugin_scout,外加一段简短的系统提示,提醒智能体在开工前先问一句。给它一行任务描述,

它就把本机的插件——已启用、已安装但未启用、可从已配置的插件市场索引安装——排序,并给出每个候选的

确切下一步:启用、安装,或什么都不用做。

  • 包名:dsh-task-plugin-scout 装载行:dsh-task-plugin-scout
  • Host-only bundle:零依赖、零构建,纯 ESM JavaScript
  • 它自己不改动任何状态:只建议,启用/安装仍走 plugin_manager 并需要用户批准

两半组成

组成 · 名称 · 作用

模型工具 · plugin_scout · 按任务给插件候选排序,并给出各自的下一步

系统提示段落 · plugin-scout:discovery(order 700) · 提醒智能体在非平凡任务开始前先做一次侦察

示例输出(数字为示意值,实际扫描量由每次的 Coverage 报告):

Plugin Scout · task: 把开会录音转成文字纪要 (voice, transcription)
Coverage: 3 of the listed candidates need an action to take effect · 48 bundles · 214 plugin rows · 12 market entries · https://example.com/index.json: 12 of 1234

1. 语音输入 [disabled, score 10] — bundle `@deepseek-ai/dsh-experimental-voice-input-bundle`
   在本机使用 SenseVoice 转写录音,首次使用需安装依赖。
   matched: voice
   next: plugin_manager { action: "set_bundle", target: "@deepseek-ai/dsh-experimental-voice-input-bundle", enabled: true }

state 有三种:

状态 · 含义 · 下一步

active · 本 profile 已在运行 · 无

disabled · 已安装但未启用(含随包提供、默认关闭的实验功能) · set_bundle / set_plugin

available · 未安装,官方目录或市场索引提供 · install_bundle

安装

需要 profile 里有 plugin-manager(官方 profile 默认带),并要求 DSH ≥ 0.2.1-rc.2(见 package.json 的

engines.dsh;本插件在 0.2.1-rc.2 上开发,在 0.2.1-rc.3 上复验通过 —— 见下面的「兼容性记录」)。用 plugin_manager 工具:

// ① 从 npm 安装(推荐)
{ "action": "install_bundle", "target": "dsh-task-plugin-scout" }

// ② 从 Git 安装
{ "action": "install_bundle", "target": "git+https://github.com/crane-you/dsh-task-plugin-scout.git" }

// ③ 从本地目录安装(指向包目录的绝对路径)
{ "action": "install_bundle", "target": "D:\\path\\to\\task-plugin-scout" }

npm 页面:https://www.npmjs.com/package/dsh-task-plugin-scout (也可以 npm i dsh-task-plugin-scout)。

安装成功的判据是返回里的 application: applied;要确认能力真的可用,用 cordis_inspect_query

(Tool.listTools 里应出现 plugin_scout),而不是看日志。

兼容性记录

DSH 版本 · 结论 · 依据

0.2.1-rc.2 · 开发与测试版本 · 全部功能实测

0.2.1-rc.3 · 复验通过,无需改代码 · 见下(2026-10-25)

0.2.1-rc.4 / 0.2.1-rc.5 · 再次复验通过,仍然无需改代码 · 见下(2026-10-31)

0.2.1-rc.5 复验(2026-10-31)

1. API 面:同样这六个宿主包在 rc.3 → rc.4 → rc.5 之间发布 JS 逐字节相同;@deepseek-ai/dsh 的依赖清单

在 rc.3 与 rc.5 都是 86 个包,没有新增或移除任何包(只有版本号引用变化)。

2. 门禁:用 rc.5 自己的 @deepseek-ai/dsh-app-boot(包版本正是 0.2.1-rc.5)判定本包 manifest → compatible。

3. 真实加载:用 rc.5 的 loadProfileDirectory() 组装本机 desktop profile → 本 bundle 正常挂载,8 个外部 bundle 全绿。

4. 实测:宿主升级到 rc.5 并重启后,plugin_scout 工具可用(28 bundles / 211 plugin rows / 60 条市场条目)。

0.2.1-rc.3 复验(2026-10-25)

0.2.1-rc.3 的复验做了三件事:

1. API 面逐字节比对:本插件用到的宿主包 —— @deepseek-ai/dsh-tools、dsh-system-prompt、dsh-plugin-manager、

dsh-plugin-market、dsh-plugin-market-index、dsh-app-boot —— 在 rc.2 与 rc.3 之间的发布 JS 完全相同

(只差 package.json 里的版本号引用)。触点因此没有搬迁:ctx.tools.register、ctx.systemPrompt.section、

pluginManager.listBundles/listPlugins、pluginMarket.listIndexes/search 的字段与签名照旧

(search 仍要求 sort、offset、limit,返回值仍是 entries / total)。

2. 宿主自己的兼容门禁:把本包 manifest 交给 rc.3 的 @deepseek-ai/dsh-app-boot 里真正的

evaluatePluginCompatibility() 判定,结论为 compatible(无未满足的 DSH 要求)。这正是加载 profile bundle 时

会把不兼容的包跳过的那一处。

3. 自带 harness:node test/harness.mjs 全绿。

engines.dsh 由 >=0.2.0 改为 >=0.2.1-rc.2:宿主门禁用 semver.satisfies(…, { includePrerelease: true }),

>=0.2.0 也能被接受;但按 npm 默认的 SemVer 规则,预发布版本只有在范围中出现同一个 [major, minor, patch]

元组且带预发布标签时才可能满足,>=0.2.0 因此在默认规则下匹配不了任何 0.2.1-rc.x 运行时。DSH 目前只有预发布线,

下界写成 >=0.2.1-rc.2 后两种规则都成立,第三方工具(npm 的 engine-strict、各种兼容性面板)不会再误判。

代价是 0.2.0-rc.* 与 0.2.1-rc.1 这些更早的宿主被明确排除 —— 它们本来也不在测试范围内。

工具参数

参数 · 类型 · 默认 · 说明

task · string,必填 · — · 用户要做什么,一到两行。保留用户原话,非中文任务再补一行英文能力关键词,因为插件元数据大多是英文。

limit · integer · 5 · 返回候选条数(1–12)。

useMarket · boolean · true · 是否包含已配置的插件市场索引;设 false 只查本机、不联网。

includeActive · boolean · true · 是否允许列出已启用的插件;设 false 只看需要动作的候选。

排序规则

1. 能力概念表:约 35 组中英对照概念(语音、翻译、表格、图片、并行、定时、通知……)。任务命中某概念、

且候选的名称/标题/描述/关键词也命中同一概念时 +6 分。这是中文任务能找到英文描述插件(以及反过来)的关键。

2. 字面重合:任务分词(英文按词、中文按二字组)落在插件名称 +3、标题 +2、描述或关键词 +1。

3. 同分按状态:disabled → available → active,可执行的候选排前面。

4. 匹配按词边界:英文概念词必须从词边界开始,所以 transcription 不会触发 script、password 不会触发

word;中文概念按子串匹配。

配置(可选)

插件行的 config(在 profile 的 cordis.patch.yml 里覆盖):

字段 · 默认 · 说明

promptHint · true · 是否注册系统提示段落

hintText · 内置文案 · 整体替换提示段落正文

limit · 5 · limit 参数的默认值

useMarket · true · useMarket 参数的默认值

本插件未声明 Config schema,配置对象会被原样读取,字段名写错不会被校验。

已知边界

  • 行级候选(kind: plugin)描述的是 profile patch 层。Agent 预设可能已经自带同一行,此时该能力其实可用;

只要列了未启用的行,工具就会在结果末尾给出这条提醒。bundle 级候选没有这个问题。

  • 市场结果需要先配置索引。市场 bundle 启用后服务即挂载,但默认不带任何索引源;在添加索引之前,工具会报告

market: no index configured 并退回纯本地结果。

  • 市场文本是第三方内容,不是指令;索引本身未签名,最终装什么由安装后的 manifest 决定。
  • 工具不会自行启用或安装任何东西,那些步骤保留各自的用户批准。

隐私

  • 不收集、不上报:插件没有遥测、没有分析上报,不写任何文件,也不在会话之外保存记忆。全部逻辑只在 Host 进程内读内存中的清单。
  • 任务描述不会外发。唯一可能出网的路径是插件市场:Host 会下载你配置的索引文档(一个普通 GET),

而 task 文本只在本地用于过滤已下载的文档——市场服务按 URL 缓存文档、在同一 URL 上并发读取共享一次

请求,查询文字从不进入请求。想完全离线,把 useMarket 设为 false。

  • 会进入会话记录的内容:匹配到的插件名称、标题、描述,以及本地清单的统计数字。它们会随工具结果写入你

自己的会话日志(用于回放/分叉),若把会话分享出去,等于公开了本机的插件清单;includeActive: false

可以只列需要动作的候选,减少暴露面。

  • 市场文本是第三方内容,索引本身未签名;它只作为候选呈现,装什么由安装后的 manifest 决定。

开发

test/harness.mjs 用假 context 和夹具清单挂载本 bundle,覆盖排序、参数处理、异常处理和配置路径,

不需要 DSH 环境:

node test/harness.

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:7,最后更新 2026-10-31

链接

GitHub · Homepage · npm

同类插件