卸载 DeepSeek Harness 桌面端会影响命令行吗?DSH plugin 两套安装的卸载边界
卸载 DeepSeek Harness 桌面端不会移除命令行的 dsh 命令,卸载命令行版也不会动桌面端:两套安装共享 $DSH_HOME 下受支持的产品数据(会话、设置、凭据、任务),但绝不共享可执行包、插件激活、锁文件或 node_modules(来源)。
这篇按「两条链路怎么各自确认 → 共享与不共享的边界 → 分别卸载的先后与验证」三步讲。桌面端卸载本身的步骤见《DeepSeek Harness 桌面端怎么卸载》。
桌面端与命令行是两条安装链路:先各自确认装了什么
官方把二者描述为互不相同的安装归属:命令行版通过 npx / npm / 源码安装,桌面端通过签名安装包安装;卸载桌面端与卸载命令行版是两件互不相干的事(来源)。
用命令先把两侧都点清楚,再谈卸载边界:
- 查命令行是否装了、以哪种方式装的 — 跑
which dsh或dsh --version,再用npm ls -g @deepseek-ai/dsh看全局包。预期:能看到命令路径与包来源;npx临时运行的不会留下全局包。 - 查桌面端是否装了 — macOS 看「应用程序」里是否有 DeepSeek Harness,Windows 看「应用和功能」列表。预期:能确认桌面端应用本体是否存在。
- 查桌面端是否注册了 dsh 命令 — 在应用菜单打开「管理 dsh 命令…」。预期:对话框显示当前注册状态与安装、修复、移除三项;这一步决定卸载桌面端时要不要先移除注册。
- 查共享数据在哪 — 跑
ls -la "$DSH_HOME"(默认~/.dsh)与ls "$DSH_HOME/profiles"。预期:能看到会话、设置等共享数据,以及桌面端的profiles/desktop。
第 3 步和第 1 步要分清:which dsh 命中的路径到底是桌面端注册的,还是命令行版装的。两者可能都存在,卸载前必须认清楚,否则容易「卸了桌面端却以为命令行也没了」。
共享什么、不共享什么:$DSH_HOME 产品数据 vs 可执行包
桌面端与命令行共享 $DSH_HOME 下受支持的产品数据(会话、设置、凭据、任务),但绝不共享可执行包、插件激活、锁文件或 node_modules;桌面端只在其中独占 profiles/desktop 这一层(来源)。
按「共享 / 不共享」两栏对照,逐项用命令确认:
- 共享:会话与设置 — 跑
ls "$DSH_HOME"看会话与设置目录。预期:两侧都能读到同一份数据;卸载任一侧不删除它。 - 共享:凭据与任务 — 同样的
$DSH_HOME层。预期:删掉一侧程序后,另一侧仍能用同一份凭据与任务。 - 不共享:可执行包 — 命令行版是全局包 / npx / 源码,桌面端是安装包。预期:卸载桌面端后
dsh --version命令行的那个仍在(如果命令行版也装过)。 - 不共享:插件激活与
node_modules— 命令行按 profile 各自装插件,桌面端独占profiles/desktop。预期:两侧各自维护一套已装插件;桌面上装的不等于命令行装的那套。
第 4 项是误解最多的地方:桌面端与命令行各自维护一套已装插件。用 DSH Plugin Hub 的已安装列表看到的是桌面端这一套;命令行侧要按 profile 到对应 node_modules 与配置里核对,别拿一边的列表去推断另一边。
分别卸载的先后与验证
两侧可以独立卸载:先卸桌面端(记得先移除 CLI 命令注册),再卸命令行版;卸完分别验证命令与包是否消失,而 $DSH_HOME 里的会话、设置、凭据是否保留是另一件事(来源)。
按顺序执行,每步核对预期:
- 先在桌面端移除 dsh 命令注册 — 「管理 dsh 命令… → 移除」。预期:桌面端注册的入口被清掉,不会在卸应用后留下悬空命令。
- 卸载桌面端应用 — 走系统常规卸载。预期:应用从系统移除,桌面端可执行层消失。
- 卸命令行版 — 按当初的装法卸:全局包用对应包管理器卸载,npx 临时运行的无需处理,源码方式直接删目录。预期:
which dsh与npm ls -g @deepseek-ai/dsh都不再有结果。 - 验证共享数据仍在 — 跑
ls "$DSH_HOME"。预期:会话、设置、凭据仍在;两套程序都卸了也不影响这份数据,除非你主动删除。
第 1 步为什么必须先做:桌面端卸载程序不会移除 CLI 命令注册(官方明确写出),漏掉它系统里会留下一个指向已删应用的 dsh,看起来就像「命令行没卸干净」,其实那是桌面端注册的那一个。
卸载 DeepSeek Harness 桌面端与命令行的注意事项
- 先认清命令归属:
which dsh的路径可能是桌面端注册的,也可能是命令行版装的,卸载前先分辨。 - 桌面端卸载不删 CLI 注册:必须用「管理 dsh 命令… → 移除」手动清掉,否则留下悬空命令。
- 共享数据不在卸载范围:
~/.dsh的会话、设置、凭据、任务保留;要彻底清需自己删除。 - 插件各管各的:桌面端
profiles/desktop与命令行各 profile 的插件互不影响,核对别跨侧推断。 - 顺序建议先桌面后命令行:先清桌面端注册再卸应用,最后卸命令行版,验证更清晰。
在桌面端核对已装 DSH插件与卸载,用 DSH Plugin Hub 最直观;命令行侧的插件则回到对应 profile 里查,两侧分开看才不会被「共享 / 不共享」绕晕。

来源:DeepSeek Harness 桌面端 README(官方仓库)、DeepSeek Harness 命令行 README(官方仓库)、DeepSeek Harness 源码仓库
常见问题
不会。桌面端与命令行是两条互不相同的安装链路,卸载桌面端只移除应用本体与它自己的可执行层,不会动命令行的 dsh 命令。官方还明确桌面端卸载程序不会替你移除 CLI 命令注册,所以卸载桌面端前要先用「管理 dsh 命令…」把注册移除,否则留下的悬空 dsh 恰恰是桌面端注册的那一个,而不是命令行版装的。
不会。卸载命令行版只移除它自己那套可执行包与安装方式(npx / npm / 源码),桌面端是独立的签名安装包,两者不共享可执行代码。官方说明二者共享 $DSH_HOME 下的受支持产品数据,但绝不共享可执行包、插件激活、锁文件或 node_modules,所以在命令行版被卸载后,桌面端仍能正常启动并读取共享的会话与设置。
两者共享 $DSH_HOME(默认 ~/.dsh)下受支持的产品数据,例如会话、设置、凭据与任务。但绝不共享可执行包、插件激活、锁文件或 node_modules;桌面端只在其中独占 profiles/desktop 这一层。因此删掉桌面端不会丢会话,删掉共享数据才会同时影响两侧。
建议先卸桌面端、再卸命令行版。先卸桌面端前要在应用菜单里用「管理 dsh 命令… → 移除」清掉它注册的 dsh 命令,避免卸载后残留一个指向已删应用的悬空命令;之后再按命令行的安装方式卸载命令行版。两侧都卸完后,凭证、会话与设置仍在 $DSH_HOME,需要彻底清空才会删除。
分别核对两条链路即可。命令行侧用 which dsh 或 dsh --version 确认命令已不存在,用 npm ls -g @deepseek-ai/dsh 确认全局包已移除;桌面端侧确认应用已从系统移除、注册的 dsh 命令已用「管理 dsh 命令…」移除。共享数据 $DSH_HOME 是否还在,与两套程序是否卸干净是两件事,保留它不影响卸载结果。
相关术语
- 安装归属(installation ownership)
- 安装归属是 DeepSeek Harness 桌面端 README 里区分两条安装链路的说法:命令行版通过 npx / npm / 源码安装,桌面端通过签名安装包安装,二者的可执行层互不相同。— DeepSeek Harness 桌面端 README
- $DSH_HOME
- $DSH_HOME 是 DeepSeek Harness 的产品数据根目录,默认位于 ~/.dsh,存放会话、设置、凭据与任务;桌面端与命令行共享其中的受支持数据,但桌面端独占 profiles/desktop 这一层。— DeepSeek Harness 桌面端 README
- Profile
- Profile 是 DeepSeek Harness 命令行按入口模式使用的独立环境,目录内含 package.json、dsh.profile manifest 与 cordis.patch.yml,pnpm 会把树外插件装进该 profile 的 node_modules;桌面端独占自己的 profiles/desktop。— DeepSeek Harness 命令行 README
来源
- DeepSeek Harness 桌面端 README· deepseek-ai
- DeepSeek Harness 命令行 README· deepseek-ai
- DeepSeek Harness 源码仓库· GitHub