dsh-plugin
DayuanJiang/next-ai-draw-iodsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
按职业/角色推荐 DSH 插件:询问用户是做什么的(程序员、设计师、写作、研究、运维、学生…),推荐适合的插件,并对每个插件做本地静态安全审计(危险代码模式 + 0-100 风险分)与口碑检查(npm 下载量 / GitHub 星数)。
安装后第一次打开会自动弹出对话框,问你是做什么的(可多选,比如「程序员 + 学生」)——只问这一次。之后只有你对 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,或删掉那个文件后重启。
推荐结果分三层,避免推荐「自带/内置」的东西浪费名额:
deepseek-harness-wallet(余额监控 + 用量记账 + token 账本)——不管什么职业都先装它,随时看到余额心里有数。web_search 工具,模型可直接搜网页)、插件市场(dshmarket)是 DSH 自带功能。备注:「上下文压缩」「自动备份」目前 DSH 生态里没有查到独立插件,暂不推荐(不编造不存在的插件)。替代做法:上下文由 DSH 平台自动管理;备份 = 定期复制
C:\Users\曲\.dsh\sessions\文件夹(所有会话记录都在那里)。等插件市场可访问后,如果出现真实插件会补进目录。
每次推荐后,模型会对你推荐出的每个插件调用 audit_plugin,输出一份审计报告:
eval / new Function 动态执行、shell 命令执行、启动子进程、Base64 混淆、
网络请求/监听、文件写入删除、读取环境变量、压缩混淆代码、安装脚本
(preinstall/install/postinstall,安装时会自动执行,最需警惕)。
扫描前会先剔除注释和正则字面量,避免「扫描器扫描到自己」的误报。⚠️ 重要声明:这是启发式静态检查,不是杀毒软件。它能提示「可疑信号」, 但无法证明插件绝对安全。判断一个插件是否可信,最终仍要综合:来源与维护者、 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 会帮你:
C:\Users\曲\.dsh\profiles\desktop\node_modules;package.json 里有 dsh.bundle.patch,自动把它加入 dsh.profile.bundles 列表。所以不需要手动改任何配置文件。装好后在设置里能看到「插件推荐助手」的 loader 条目。
重启后第一次打开会话,注意两点:
第一次使用(重启桌面端后,首次打开会话):
屏幕中央弹出「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 包名)、title、summary、tags、install、why(推荐前请确认该插件真实存在);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) |
https://awesome-dsh-plugin.com/plugins.json 拉取社区插件列表,本插件以后可以做成「内置精选 + 在线全量」两级推荐,让推荐目录不再是写死的;