dsh 最核心的设计哲学只有一句话:
一切皆插件(Everything is a Plugin)

什么意思?你用的 Web 界面、命令行模式、文件操作、模型适配、权限审批……全是插件拼出来的。想加新能力?装个插件就行,甚至自己写一个。
这篇文章带你把插件系统从"会用"到"会写"完整过一遍,全程 10 分钟。
01 先搞懂三个关键概念
插件系统看起来复杂,其实只有三个核心概念:
① 插件(Plugin)—— 能力的积木
一个插件就是一段 TypeScript 代码,向外导出一个 函数。框架加载插件时调用它,插件通过传入的 上下文对象向框架注册能力(工具、服务、事件监听……)。applyctx
② 组合包(Bundle)—— 打包好的插件集
单个插件能力太小,所以官方把一组插件打包成 npm 包,这就是 bundle。bundle 的 npm manifest 里会声明自己的补丁文件(),安装后自动贡献一组配置。dsh.bundle.patch
③ 配置档(Profile)—— 你"这台机器"的装配图
Profile 是 下的一个目录( 默认是 )。它回答一个问题:**"我这套配置由哪些 bundle、按什么顺序组成?"**$DSH_HOME/profiles/<名字>$DSH_HOME~/.dsh
每个 profile 包含:
package.json—— 记录了 (有序的 bundle 清单)和额外插件依赖dsh.profile.bundlescordis.patch.yml—— 你自己写的补丁层,可以改配置、加插件
💡 补丁层的叠加顺序是:bundle 自带补丁 → 该 profile 的补丁 →
$DSH_HOME/cordis.patch.yml(机器级偏好)→ 启动时--patch参数。后写的层覆盖先写的层。
02 你其实早就在用插件
别觉得插件是"高级功能"——你上一篇装好的 dsh 本身就是插件拼出来的:
dsh web | base(基础能力)+ (Web 界面)两个官方 bundleweb-app |
dsh --profile headless "任务" | baseheadless(一次性任务)两个官方 bundle |
官方内置了三个 bundle:、、。 和 两个 profile 首次使用时会自动从模板初始化。@deepseek-ai/dsh-base@deepseek-ai/dsh-web-app@deepseek-ai/dsh-headlesswebheadless
03 装一个第三方插件(实战)
现在来点真的:给 dsh 装一个社区插件。dsh 提供了专门的插件管理命令:
# 本质是把命令转发给 pnpm,在 profile 目录里操作
dsh plugin --profile tui add 插件包名
比如安装一个 Claude Code 风格的终端界面插件:
dsh plugin --profile tui add @dsh-tui/dsh-tui
然后直接启动这个 profile:
dsh --profile tui
卸载、查看依赖、更新也都很直观:
dsh plugin --profile tui remove @dsh-tui/dsh-tui
dsh plugin --profile tui why @dsh-tui/dsh-tui
dsh plugin --profile tui update
⚠️ 一个常见的坑:从 Git 地址安装的插件()在安装时会自动构建源码,pnpm 10+ 默认会拦截。第一次 会失败并提示一个 密钥——把提示的密钥写进该 profile 的
pnpm-workspace.yaml,再重新执行add即可。安装官方打包好的 npm 包则没有这个问题。add github:xxx/yyyaddallowBuilds
想先本地试玩,不装进 profile?也可以把插件直接用 挂载到现有 Web UI 上(见下节)。--patch

04 插件市场:把 1700+ 社区插件变成一键安装
插件生态火不火?看数量就知道——GitHub 上带 话题的仓库已经 1700+ 个,还在每天增长。插件一多,新问题来了:怎么找到好用的?dsh-plugin
有人直接做了个插件市场:zat-dsh-engine——类似 Steam 创意工坊风格的可视化市场,装进 dsh 后,浏览、搜索、一键安装社区插件全在界面里完成,不用再记命令行。
安装(一行命令)
# 推荐(GitHub 直装)
dsh plugin --profile web add github:mishibeikejie/zat-dsh-engine
# 国内直连 GitHub 慢的话,用官方镜像源
dsh plugin --profile web add https://gh-proxy.com/https://github.com/mishibeikejie/zat-dsh-engine.git
⚠️ 两个重要提醒:
务必用 dsh plugin add安装,不要手改 patch 文件——市场插件自带挂载配置,手动往 里再写一遍会造成重复挂载,dsh 直接启动失败(作者在 README 里专门警告过)。cordis.patch.yml从 Git 安装首次 可能被 pnpm 的 拦下:把提示的密钥写进该 profile 的 再重跑即可。 addallowBuildspnpm-workspace.yaml
装完重启 dsh,打开 设置 → 插件,就能看到新的「插件市场」标签页。

它有多好用
🛒 全量目录:实时同步 GitHub 上全部 仓库(1700+),中文简介自动翻译 dsh-plugin🤖 AI 找插件:直接在对话里说需求——“找个能让模型看图识图的插件”——AI 自动搜索、推荐,还附安装前体检 + 安全扫描(✅/⚠️/❌,有问题如实说,绝不盲目推荐) ⚡ 一键装/卸/更:带实时进度条,失败自动回滚;已装的插件显示版本对比和更新角标 🩺 一键体检修复:网络/pnpm/入口/OS 问题一键检测,能修的自动修 🌐 网络自适应:自动走你的代理;GitHub 不通时自动切镜像 🎨 12 大分类:主题、工具、浏览器、技能、视觉、网络、Agent、数据...... 
实际效果
本文作者已经装好并验证过(v0.6.1):重启 dsh → 设置 → 插件 → 插件市场,1700+ 插件卡片排成列表,点一下就安装。
而且装好市场之后,之前聊到的主题皮肤直接在市场里搜就能一键装(Catppuccin、dsh-skin 等都在)——命令行都省了。
进阶提示:想自己写插件?官方文档 有完整教程(工具、配置、发布一步步带你写)——从"会用"到"会写",这篇先到"会用",下一篇我们继续。
docs/user/develop/basic/
05 调试神器:查看装配图
装了一堆插件后,怎么知道最终生效的配置长什么样?两个命令直接打印组合配置树,不用启动服务:
dsh --profile web --dump-default-config # 只看官方 bundle 拼出来的
dsh --profile web --patch ./xxx.yml --dump-config # 加上你自己的补丁层
输出会标注每一行配置来自哪个文件、被哪些补丁修改过,排查"插件没生效"特别好用。

06 常见问题速查
add报 提示allowBuilds | 把提示的密钥写进该 profile 的 ,重新pnpm-workspace.yamladd |
检查补丁文件里的插件名拼写;本地插件路径必须是绝对路径(Windows 上还要加 前缀)file:/// | |
发布到 npm,manifest 里声明 ,并给仓库打上 话题便于被发现dsh.bundle.patchdsh-plugin |
写在最后
一句话总结今天的内容:
✅ 插件 = 能力积木,bundle = 打包好的积木组,profile = 你的装配图。装插件一行命令,逛插件市场——1700+ 社区插件一键装。
dsh 的插件生态才刚刚起步,现在动手写插件,就是最早吃到红利的一批人。感兴趣的话,官方文档的 目录有完整的插件开发教程,从工具、配置到发布一步步带你写。docs/user/develop/basic/
夜雨聆风