dsh插件市场 卸载后残留什么:配置、缓存、profile 与日志的清理顺序、位置与重装前核对
点完卸载、列表里消失了,很多人以为清理结束——其实市场卸载只做了一半:它摘掉依赖与加载层,配置、缓存、profile 覆盖与日志都还在。 这四处残留不会立刻造成故障,但会在下次重装时冒出来,让你怀疑「怎么装了个旧版本」(2.2.5 索引)。这篇按清理生命周期走:先看卸载边界,再找四处残留,然后按顺序清,最后做重装前核对。卸载入口在 DSH Plugin Hub 的已安装列表。
市场卸载实际删了什么、没删什么:DSH Plugin Hub 的边界
市场卸载删的是「依赖 + 加载清单」,不删「插件写下的数据与你的覆盖层」。 这两类东西的生命周期不同,混在一起就会误判。
| 卸载会处理的 | 卸载不会处理的 |
|---|---|
| profile 的依赖清单 | 插件写下的配置项 |
| profile 的加载清单 | pnpm 缓存与 node_modules 残留 |
| 当前环境的插件条目 | 手写的 cordis.patch.yml 覆盖 |
| 已安装列表里的记录 | 系统日志里的历史记录 |
- 在已安装列表找到目标插件,点行尾的「卸载」。
- 读卸载确认弹窗,确认插件名与来源仓库无误后再确认。
- 卸载完成后刷新列表,确认条目确实消失。
- 不要在这一步就手动删目录,先去做下一节的四处核对。
卸载确认弹窗只保证「移除的是你以为的那个插件」,它不负责清理数据。把这一步当成「摘清单」,后面的清理才不会漏。
四处残留怎么找:DSH plugin 的配置、缓存、profile 与日志
四处残留的位置不同,找法也不同:配置看 profile 与配置层,缓存看 pnpm 存储,profile 看覆盖文件,日志看系统日志页的存放位置。 先定位,再决定删不删。
- 配置:先看插件说明里写的配置项名称,再到 profile 目录与自己的配置层里搜同名键;不确定就先备份,不要整段删。
- 缓存:pnpm 的内容寻址存储在全局 store,profile 里的
node_modules是链接结果;缓存可以回收,但不要手删正在被引用的包。 - profile:重点看
cordis.patch.yml这类手写覆盖层,里面可能有指向已卸载插件的引用。 - 日志:在「设置 → 插件市场 → 系统日志」里看日志存放位置,需要长期保留就先导出,再决定是否清。

四处里最容易漏的是 profile 覆盖层:remove 不会替你清手写内容,缓存清理更不会。它也是最容易在重装后造成「配置怎么还是旧的」的原因。
清理顺序:dsh plugin market 先清单后文件
顺序固定:先确认清单干净,再清缓存,最后处理配置与日志。 反过来的话,你会失去「这个包本来该不该在」的判断依据。
# 1. 已安装列表:确认条目已经消失
dsh plugin --profile web list
# 2. profile 清单:dependencies 与 dsh.profile.bundles 两处都不该再有旧包名
cat ~/.dsh/profiles/web/package.json
# 3. 组合树:确认加载层里没有旧插件
dsh --profile web --dump-config | grep -in <插件关键词>
- 跑上面三条只读检查,确认清单层已经干净。
- 清单还残留时,回到市场卸载或按官方
remove命令处理,不要先删文件。 - 清单干净后,再按需回收 pnpm 缓存;它只删没被引用的内容,相对安全。
- 最后处理配置与覆盖层:先备份,再删与目标插件相关的键或段落。
- 日志按保留需要处理,取证用的记录先导出再清。
「先清单后文件」不是形式,而是为了避免「文件删了、清单还在」这种最难排查的状态。那时启动会报找不到包,你却以为已经卸干净了。
重装前怎么确认清干净:DeepSeek Harness 的三处核对
重装前核对三处:列表、清单、覆盖层;三处都干净,重装才不会继承旧状态。 只核对其中的一处,很容易把旧配置带进新版本。
- 已安装列表里搜不到旧条目,来源筛选切到「全部」也没有。
- profile 的
package.json里,dependencies与dsh.profile.bundles都没有旧包名。 - profile 目录的手写覆盖层里,没有指向旧插件的引用或旧路径。
- 如果旧版本留下过数据目录,确认新版本是否会复用;会复用就先备份再重装。
- 三处通过后再安装,装完按正常流程验证入口与日志。
重装不是「覆盖一下就好」,旧覆盖层和新版本可能互相冲突。清理残留的目标不是把环境清空,而是让新版本从一个可解释的状态开始。更完整的残留清单见 卸载后残留怎么彻底清理。
什么时候不该清:DSH plugin 的共享依赖与手写覆盖层
清理的边界是「只属于这个插件的残留」,共享依赖、无关配置和取证日志都不该动。 清过头,问题会从「有残留」变成「环境坏了」。
- 仍被其他插件引用的依赖不要手删,让包管理器判断是否可回收。
- profile 里与目标插件无关的配置项不要整段清,按名称精确处理。
- 还要用来取证的日志先导出再清,别把失败现场一起删掉。
- 不确定归属的覆盖层内容先注释或备份,不要直接删除。
- 清理后重启一次,确认其他插件仍能正常加载。
清理的价值在于「可解释」:你知道删了什么、为什么删、删完环境还能不能跑。做不到这三点,就先停在备份这一步。
清理记录也要留
- 记下卸载的插件名与版本。
- 记下清掉了哪些文件与配置。
- 记下清理后其他插件是否正常。
插件重装的完整顺序,可以接着看 插件卸载与重装。
常见问题
DeepSeek Harness 的市场卸载会从当前 profile 移除插件依赖与加载清单,但不会替你清插件写下的配置、pnpm 缓存、手写覆盖层和日志。所以卸载后「列表里没了」不等于「磁盘上干净了」,残留要靠后续清理。
DeepSeek Harness 里配置多在 profile 目录或你自己的配置层,缓存在 pnpm 存储与 node_modules,profile 残留包括手写的 cordis.patch.yml 覆盖层,日志则在系统日志页显示的存放位置。四处位置不同,清理方式也不同,别用同一条命令全删。
DeepSeek Harness 里先确认清单已经摘干净,再清文件。清单包括 profile 的 dependencies 与 dsh.profile.bundles 两处;清单没摘就手删 node_modules,启动时仍会按清单去找那个包,表现成「卸载了但插件还在」。
DeepSeek Harness 里核对三处:已安装列表没有旧条目、profile 的 package.json 两处清单没有旧包名、profile 目录里没有手写的旧覆盖。三处都干净再重装,否则新装版本可能被旧配置或旧覆盖层干扰。
DeepSeek Harness 里不该动的是仍被其他插件引用的共享依赖、profile 里与目标插件无关的配置,以及系统日志中你还要用来取证的记录。清理的目标是「只属于这个插件的残留」,不是把整个 profile 清空。
相关术语
- 市场卸载
- 市场卸载是 DSH Plugin Hub 已安装列表里的卸载动作,确认后从当前 profile 移除插件依赖与加载清单。它不等于清理插件留下的配置、缓存与日志。— https://api.dsh-plugin.org/images/releases/2-2-5/index.json
- 卸载确认弹窗
- 卸载确认弹窗是 DSH Plugin Hub 在移除插件前显示的确认框,列出待卸载插件与来源仓库。用户确认后才从当前环境移除。— https://api.dsh-plugin.org/images/releases/2-2-5/index.json
- profile
- profile 是 DeepSeek Harness 里按顺序叠加插件与补丁的启动配置栈,位于 $DSH_HOME/profiles/<名字> 下。它同时存放 pnpm 依赖、依赖清单、加载清单与用户自己的覆盖层。— https://github.com/deepseek-ai/deepseek-harness
- cordis.patch.yml
- 它是 profile 目录里由用户手写的补丁覆盖层,cordis.patch.yml 不属于 pnpm 管理的依赖。卸载插件不会自动清掉其中与插件相关的引用。— https://github.com/deepseek-ai/deepseek-harness
来源
- DSH Plugin Hub 2.2.5 界面截图索引· dsh-plugin.org
- deepseek-ai/deepseek-harness(源码仓库)· GitHub
- dshplugin/dsh-plugin-hub 仓库· GitHub