Vai al contenuto principale
M

dsh-plugin-recommender

mimosa776/dsh-plugin-recommender

Role-based plugin recommender for DSH: asks the user's role (developer, designer, writer, researcher, ops, student...), recommends suitable plugins, and audits each with a local static security scan (dangerous code patterns + 0-100 risk score) and a reputation check (npm downloads / GitHub stars).

Installazione

dsh plugin --profile web add github:mimosa776/dsh-plugin-recommender

README

dsh-plugin-recommender · DSH 插件推荐助手

安装后第一次打开会自动弹出对话框,问你是做什么的(可多选,比如「程序员 + 学生」)——只问这一次。之后只有你对 DSH 说「推荐插件」(或 /推荐插件/plugins)才会再次询问并推荐。每次推荐都会附上每个插件的安全审计(本地静态扫描危险代码)和口碑数据(下载量/星数)。

本项目是入门级 DSH 插件,刻意写得小而清楚,方便边学边改。


它是怎么工作的

DSH 的插件是一个 npm 包,安装进 profile($DSH_HOME/profiles/<名字>)后,由 Cordis 运行时加载。本插件有 host 端(Node 侧,负责逻辑)和 client 端(浏览器侧,负责弹窗)两部分:

安装后第一次打开
   │
   ▼
⓪ client 弹窗(lib/client.js,挂在 shell.overlay)
   「你是做什么的?」→ 点角色(或跳过)→ POST 给 host
   │  (弹窗没加载时由 host 兜底:第一条消息自动询问)
   ▼
① 你发一句话(如「你好」)
   host 的 agent/pre-step 钩子:自动注入激活指令(记住的角色)
   │
② 系统提示(systemPrompt.section)
   告诉模型:先问职业 → 推荐 → 逐个安全审计
   │
③ 动态工具(ctx.tools.register + defineTool)
   recommend_plugins(role, need)   → 推荐
   audit_plugin(name)              → 安全审计 + 口碑数据
   │
④ 安全审计(lib/security.js)
   本地静态扫描危险代码 + 尽力拉取 npm 下载量 / GitHub 星数
   │
⑤ 模型把「推荐 + 风险等级 + 口碑」组织成对话回复给你
   (可选安装方式:插件市场一键装 / dsh plugin add)

之后每次想推荐,只要说「推荐插件」或输入 /推荐插件 [职业] / /plugins [职业]

首次引导状态存在 $DSH_HOME/plugin-recommender.json(只弹一次)。想让它重新弹出?运行 /plugins-reset,或删掉那个文件后重启。

推荐结构(必备 + 增强 + 内置提示)

推荐结果分三层,避免推荐「自带/内置」的东西浪费名额:

  1. 【必备 · 所有角色】:目前是 deepseek-harness-wallet(余额监控 + 用量记账 + token 账本)——不管什么职业都先装它,随时看到余额心里有数。
  2. 【按角色增强】:按职业挑的实用插件(程序员 → AgentTeams + ModLens;设计师 → Dream Skin + ModLens;运维 → Pocket + AgentTeams;……)。
  3. 内置能力提示:明确告诉你哪些不需要装插件——网页搜索是 DSH 内置能力(web_search 工具,模型可直接搜网页)、插件市场(dshmarket)是 DSH 自带功能。

备注:「上下文压缩」「自动备份」目前 DSH 生态里没有查到独立插件,暂不推荐(不编造不存在的插件)。替代做法:上下文由 DSH 平台自动管理;备份 = 定期复制 C:\Users\曲\.dsh\sessions\ 文件夹(所有会话记录都在那里)。等插件市场可访问后,如果出现真实插件会补进目录。

安全与信任检查(audit_plugin)

每次推荐后,模型会对你推荐出的每个插件调用 audit_plugin,输出一份审计报告:

  1. 本地静态扫描(无需联网,立即可用):检查插件源码里的危险代码模式—— eval / new Function 动态执行、shell 命令执行、启动子进程、Base64 混淆、 网络请求/监听、文件写入删除、读取环境变量、压缩混淆代码、安装脚本 (preinstall/install/postinstall,安装时会自动执行,最需警惕)。 扫描前会先剔除注释和正则字面量,避免「扫描器扫描到自己」的误报。
  2. 风险评分:0-100 分。≥80 低风险;60-79 中风险;<60 高风险。 报告会列出每个命中信号所在文件与行号,方便你人工核对。
  3. 口碑数据(在线可用时):npm 近月下载量、GitHub 星数、维护者、最近发布时间; 网络不可用时明确标注「离线」,仅展示本地扫描结果。

⚠️ 重要声明:这是启发式静态检查,不是杀毒软件。它能提示「可疑信号」, 但无法证明插件绝对安全。判断一个插件是否可信,最终仍要综合:来源与维护者、 GitHub 星数与下载量、README 与代码审阅、发布时间线。遇到高风险插件,模型会 明确警告并建议跳过。

目录结构

dsh-plugin-recommender/
├── package.json          # 插件包清单:dsh.bundle.patch(host)+ dsh.client(浏览器半区)
├── cordis.patch.yml      # bundle 补丁:把插件插入 host 组合(id + name + config)
├── lib/
│   ├── index.js          # 插件主体:工具、系统提示、斜杠命令、首次引导钩子、Web 路由
│   ├── client.js         # ★ client 半区:首次使用弹窗(ModuleLoader 格式,无需构建)
│   ├── catalog.js        # ★ 推荐目录 + 角色匹配 + 引导文案(纯函数,零依赖)
│   ├── security.js       # ★ 安全审计:危险模式扫描 + 评分 + 在线口碑数据
│   └── state.js          # ★ 首次引导状态持久化($DSH_HOME/plugin-recommender.json)
├── test/
│   ├── catalog.test.js   # 标准单元测试(node --test)
│   └── verify-inline.mjs # 沙箱友好的内联校验(不 spawn 子进程)
└── README.md

安装(两步)

# 1. 把插件装进你的 profile("desktop" 是当前桌面端 profile 名)
dsh plugin --profile desktop add C:\Users\曲\dsh\plugins\dsh-plugin-recommender

# 2. 完全退出并重新打开 DSH 桌面端(加载新 bundle 必须重启)

dsh plugin add 会帮你:

  1. 用 pnpm 把插件装进 C:\Users\曲\.dsh\profiles\desktop\node_modules
  2. 检测到 package.json 里有 dsh.bundle.patch,自动把它加入 dsh.profile.bundles 列表。

所以不需要手动改任何配置文件。装好后在设置里能看到「插件推荐助手」的 loader 条目。

重启后第一次打开会话,注意两点:

  1. 批准 client 半区:GUI 会出现「是否信任 dsh-plugin-recommender 的界面组件」的确认(DSH 对浏览器端插件的安全机制),点同意即可,只批一次;
  2. 批准后,首次打开会自动弹出「你是做什么的?」对话框(只弹一次)。

使用示例

第一次使用(重启桌面端后,首次打开会话):

屏幕中央弹出「DSH 插件推荐助手 👋」对话框(可以多选,比如「程序员 + 学生」):
  欢迎使用!第一次见面,告诉我你是做什么的(可以多选)…
  [程序员 / 开发者] [设计师 / UI 设计] [写作 / 内容创作]
  [研究 / 数据分析] [运维 / 系统管理] [学生 / 学习] [普通用户 / 其他]
  [确定(已选 2 个)]  [先跳过]

你勾选「程序员 / 开发者」和「学生 / 学习」→ 点「确定」→ 对话框变成「已记录 👌」:
  你的角色:程序员 / 开发者、学生 / 学习。接下来随便发一句话(比如“你好”),
  我就按这些角色帮你推荐插件…

你发:你好
助手:推荐给「程序员 / 开发者」的 DSH 插件:

     ### 必备 · 所有角色
     | 插件 | 一句话介绍 | 安装 |
     | --- | --- | --- |
     | **Harness 钱包**(deepseek-harness-wallet) | 余额/用量监控 | `dsh plugin --profile … add deepseek-harness-wallet` |

     ### 按角色增强
     | 插件 | 一句话介绍 | 安装 |
     | --- | --- | --- |
     | **AgentTeams 多智能体团队**(@nanmicoder/…) | 复杂重构与代码评审 | `dsh plugin … add @nanmicoder/dsh-agent-teams` |
     | **ModLens 视觉桥**(@liustack/modlens) | 截图报错、UI 调试 | `dsh plugin … add @liustack/modlens` |

     提示:网页搜索是 DSH 内置能力,无需安装插件。
     提示:插件市场(dshmarket)是 DSH 自带功能,无需安装。
     (每个插件都附 audit_plugin 的安全审计与口碑数据)

之后:想说「推荐插件」/ 输入 /推荐插件 程序员 / /plugins 设计师,随时再问。

一句话安装(不用敲命令)

推荐列表出来后,直接说「帮我安装 XXX」就行,例如:

你:帮我装 AgentTeams
助手:(调用 install_plugin 工具,后台执行 dsh plugin add)
     ✅ 安装命令已执行成功…
     ⏳ 完全重启 DSH 桌面端后生效。

插件内置 install_plugin 工具:模型收到「帮我装/帮我安装 <插件名>」就自动在后台执行安装,不需要敲任何命令行(小白友好)。装完记得重启桌面端。如果安装失败(网络等原因),会提示改用自带插件市场(dshmarket)安装。

想自己加推荐?

全部推荐数据在 lib/catalog.js 顶部:

  • PLUGINS 数组加一条:name(npm 包名)、titlesummarytagsinstallwhy(推荐前请确认该插件真实存在);
  • 必备类:加进 ESSENTIAL_PLUGIN_NAMES(所有角色统一推荐);
  • 按角色类:在 ROLES 数组对应角色的 plugins 里加上该 name
  • 内置能力:在 BUILTIN_NOTES 里加提示,避免推荐「不用装」的东西;
  • 给角色补充 aliases(中英文关键词,匹配更准)。

改完目录后运行 node --test test/catalog.test.js 验证数据自洽(测试会检查每个角色的推荐都指向真实存在的插件,且不包含自带的市场)。

常见问题

现象原因 / 处理
装了之后没反应桌面端需要完全退出重开才能加载新 bundle(托盘图标右键退出,再启动)
首次打开没弹窗① client 半区可能还没批准(重启后在 GUI 里点「同意」);② 弹窗已弹过一次(状态记在 $DSH_HOME/plugin-recommender.json)——运行 /plugins-reset 可重新弹出;③ 没弹窗时 host 会在你发第一条消息时自动询问兜底
弹窗里点完角色没反应点完角色后需要发一句话(如「你好」)才触发推荐;这是 DSH 的消息机制决定的
说「推荐插件」没触发工具换成更明确的说法,如「帮我推荐插件」或输入 /推荐插件;再不行看 DSH 日志(%APPDATA%\DSH Desktop\logs
审计报告全是「离线」本机网络不可用或 npm/GitHub 被墙;此时只有本地静态扫描结果,属于预期降级
某插件被判「中/高风险」认真看命中的文件与行号再决定;可能是合法功能(如调用工具链),也可能确实可疑。高风险建议跳过
扫描器会不会误报/漏报会。启发式扫描不是杀毒软件:注释、正则字面量已剔除以减少误报,但仍可能有漏报(如字符串拼接的隐藏代码)
推荐结果里没有我想要的插件内置目录是精选的离线数据;先用插件市场(dshmarket)搜索,或在 catalog.js 里加条目
改了代码不生效插件是以 npm 包形式被 profile 引用的,改完源码后重启桌面端即可(本地路径安装是符号链接,无需重新 add)

进阶:下一步可以做什么

  • 接入真实插件市场数据:dshmarket 会从 https://awesome-dsh-plugin.com/plugins.json 拉取社区插件列表,本插件以后可以做成「内置精选 + 在线全量」两级推荐,让推荐目录不再是写死的;
  • 扫描结果持久化/缓存:把每个插件的审计结果缓存起来(按版本号),避免每次推荐都重复扫描和请求网络;
  • 弹窗内嵌推荐结果:目前弹窗只问职业,推荐结果在对话里展示;可以改成选完角色后弹窗直接展示推荐卡片(含风险徽标和安装按钮);
  • 多角色记忆:现在只记住一个角色;可以扩展成多角色档案,按需切换。

Plugin correlati