卸载 dsh plugin 会连带删掉什么?DeepSeek Harness 会话、设置与数据的保留范围
卸载 dsh plugin 会连带删掉什么?答案取决于这份数据归谁:依赖与加载层由 dsh plugin remove 清掉,插件的设置卡片随命名空间消失,而你的会话记录完全不受影响。 真正容易踩坑的是三类「半走半留」的东西——插件自己写的文件、你手写的配置覆盖块、其他插件对它的依赖。照着本文的三级归属表查一遍,卸之前就知道会失去什么。
卸载 dsh plugin 后三类东西的去留
把数据按归属分三层,卸载影响面立刻清楚:DSH 根目录层、profile 层、插件自身层(来源)。 对照如下:
| 数据 | 住在哪 | 卸载后 |
|---|---|---|
| 会话记录 | $DSH_HOME/sessions | 保留,与 profile 无关 |
| 全局设置、凭据 | $DSH_HOME/settings.yaml、.credentials.yaml | 保留 |
| 依赖与加载层 | profile 的 package.json(dependencies + dsh.profile.bundles) | 被 remove 清掉 |
| 设置页卡片 | 插件的设置命名空间 | 随插件消失(无人再注册该命名空间) |
| 你手写的配置覆盖块 | profile 的 cordis.patch.yml | 保留,需手动清理 |
| 插件自己写的数据 | 由插件作者决定 | 视位置而定,见下 |
关于最后一行的判断办法:卸载前先看插件文档或源码有没有指明数据目录;卸载后到 $DSH_HOME 下找有没有以插件名命名的目录。有,说明它的数据独立于包存在,重装后通常还能读到;没有,说明数据写在包目录内,已经随包删除。
会连带失效的引用:dsh plugin 命令、快捷键、看板挂件与配置层
卸载 dsh plugin 之后失效的,远不止「设置页少一项」——凡是它注册出去的东西都会一起消失,而依赖它的东西则可能直接报错。 分两类:
随插件一起消失(正常,无需处理):
- 它注册的命令与快捷键;
- 它加到侧边栏、看板、状态栏的挂件与入口;
- 它提供的工具——模型不再能调用这些工具;
- 设置页里它的卡片(命名空间不再被注册)。
不会自己消失(需要你处理):
cordis.patch.yml里引用该插件的行:那层覆盖不受 pnpm 与组合包清单管理,remove不会替你清;留着它启动时可能报找不到模块(来源)。- 其他插件对它的依赖:如果还有插件依赖它,pnpm 可能拒绝移除,或留下一个引用了缺失包的上层插件——前者会报错,后者会在启动时才暴露。处理办法见 卸载失败怎么办。
- profile 里的残留配置:插件写入过、又不属于上面两类的数据,按 卸载后残留清理 逐层核对。
卸错了怎么从 DSH Plugin Hub 重装恢复
恢复的第一步不是重装,而是判断「丢的是哪一层」:清单层丢了可以重建,包内数据丢了就找不回来。 按顺序做:
- 确认影响面:跑
dsh plugin --profile <名字> list与dsh --profile <名字> --dump-config,看还少了哪一层;再ls "$DSH_HOME"找有没有以插件名命名的数据目录。 - 重装同一版本:打开「设置 → 插件市场」即 DSH Plugin Hub,在已安装插件列表里重新安装(或按原安装命令重跑一次)。重装会重建依赖与加载层,设置卡片与工具也随之回来。
- 补回你的覆盖块:如果当初手写过
cordis.patch.yml的config:块,重装不会替你恢复,要按备份重写一遍。 - 验证:重启 dsh,确认卡片、工具、命令都回来了,再跑一次
--dump-config核对层序。
能不能找回数据,答案在第 1 步就定了一半:数据住在 $DSH_HOME 下独立目录的,重装后通常能重新读到;数据写在包目录内的,已经随包删掉了。所以真正稳妥的做法是卸载前先备份——至少拷走 profile 的 package.json 与 cordis.patch.yml,条件允许就直接备份整个 $DSH_HOME,做法见 dsh 怎么重置。
DSH plugin 卸载影响面的注意事项
一句话记住:remove 只管清单与加载层,别的东西要么不受影响,要么得你自己收尾。
- 会话不会被插件卸载带走:它们在
$DSH_HOME/sessions,只清会话是另一件事,见 怎么删除会话。 - 设置卡片消失 ≠ 配置被删:命名空间随插件消失,你手写的
config:块还留在cordis.patch.yml里。 - 卸载前先备份两份清单:
package.json与cordis.patch.yml,出问题时可整体还原。 - 先查有没有别的插件依赖它:有依赖关系时先卸上层,否则会被 pnpm 拒绝移除。
- 别指望重装能找回包内数据:数据位置由插件作者决定,卸载前先确认。
- 只想临时停用就别卸载:用禁用可保留全部数据与配置,区别见 关闭插件与卸载的区别。
- profile 路径按平台确认:
$DSH_HOME各平台默认位置见 DSH 配置文件在哪。

来源:dsh CLI README、DeepSeek Harness 官方文档 - 打包与安装插件、DSH Plugin Hub。
常见问题
**不会:卸载 dsh plugin 不删会话记录,会话数据存放在 $DSH_HOME/sessions,与 profile 目录是两处。** dsh plugin remove 清的是 profile 里的 pnpm 依赖与加载层,会话仍在原地;真要为腾空间或隐私清聊天记录,那是另一件事,单独删 sessions 目录即可,且删除前要先停掉正在运行的实例。
**会消失,但卸载 dsh plugin 不会带走你手写进 cordis.patch.yml 的配置块。** 设置页里那个插件的卡片来自它注册的设置命名空间,插件不加载了,命名空间也就没人注册,卡片自然不再渲染;而你手动写在该 profile cordis.patch.yml 里、引用这个插件的 config: 块属于你自己的覆盖层,remove 不会代管,要一并清掉。
**卸载 dsh plugin 后,它会连带失效的不只是界面入口,还包括其他插件对它的依赖。** 具体有:它注册的命令与快捷键、它加到侧边栏或看板的挂件、它在配置层里的那一项。更隐蔽的是依赖关系——如果还有别的插件依赖它,pnpm 可能拒绝移除,或留下一个引用了缺失包的上层插件。
**重装 dsh plugin 能不能找回数据,取决于它当初把数据写在哪:写在 profile 之外就可找回,写在包目录内就已随包删除。** 判断办法是卸载前先看插件文档或源码有没有指明数据目录,卸载后到 $DSH_HOME 下找有没有以插件名命名的目录;有,说明数据独立存在,重装后通常能重新读到。
相关术语
- 数据三级归属(three-level data ownership)
- 数据三级归属是判断卸载影响面的框架:属于 DSH 根目录的(会话、全局设置)、属于 profile 的(依赖清单、覆盖层)、属于插件自身的(它自己写的文件)。卸载插件只会动到与它相关的那部分,三层各查一次就不会误判。— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.zh.md
- $DSH_HOME
- $DSH_HOME 是 DeepSeek Harness 的用户级数据根目录,取不到环境变量时默认 ~/.dsh。它装着 settings.yaml、.credentials.yaml、profiles/、sessions/ 与 skills/,卸载插件影响的判断都以这个目录为坐标系。— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.zh.md
- 设置命名空间(settings namespace)
- 设置命名空间是 DSH plugin 暴露配置项的标识,由插件的 Host 半注册、浏览器半认领,设置页据此渲染卡片。插件被卸载后不再有人注册该命名空间,卡片随之消失;但你自己写进 cordis.patch.yml 的覆盖块不会自动清理。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md
- 悬空引用(dangling reference)
- 悬空引用是指清单或配置里仍指向一个已经不在的包:例如 dependencies 清掉了但 dsh.profile.bundles 还留着那一项,或 cordis.patch.yml 里还写着该插件的 config 块。启动时会表现为插件树加载失败或找不到模块。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md
来源
- dsh CLI README($DSH_HOME 数据布局与 profile)· deepseek-ai
- DeepSeek Harness 官方文档 - 打包与安装插件· deepseek-ai
- DSH Plugin Hub(插件市场与已安装插件列表)· dshplugin