哪些 DeepSeek Harness 插件不能一起装
插件冲突多数来自两个插件改同一行:补丁替换整行 config,后加载的赢,前一个静默消失。
下面每一对都来自插件页里写过的 peerDependencies 和冲突说明,没有一条是对没读过的行为的猜测。
四组分别是:抢一个界面位、抢一个配置项、打同一个外部接口、干同一件事。
抢同一个界面位
| 包 A | 包 B | 一起装会看到什么 | 留哪个 | 为什么留它 | 为什么不能共存 |
|---|---|---|---|---|---|
dsh-dream-skin | dsh-claude-style | 两个都在改同一批组件。你只会看到一个外观,而且在设置里换主题时只有一部分界面跟着变。 | dsh-dream-skin | 它改 dsh-client-ui-theme 和设置页,换主题的地方就是用户会去找的地方;claude-style 只 peer 了 primitives。 | 两个都写主题那一行,而那一行只存一个值——没有可合并的分插件主题层。 |
dsh-plugin-wallpaper-engine | dsh-pet | 同一层界面上两个浮层:壁纸在背后,宠物在上面,谁都能盖住对方的控件。 | dsh-plugin-wallpaper-engine | 它本身就是背景层;宠物是装饰,删掉不丢布局。 | 两个都挂进 @deepseek-ai/dsh-client-ui-slots 的同一个 overlay slot,而一个 slot id 只渲染一个组件。两者都没声明自己的 id,所以第二次挂载替换第一次。 |
@chengze/dsh-skill-manager | dsh-skill-browser | 两个侧栏面板列同一批技能、状态还不一样,你在哪个里开的,不一定就是 agent 加载的。 | dsh-skill-browser | 它 peer 了 dsh-client-ui-slots,自己读技能目录,还带调用台账;manager 另存一份清单,会漂。 | 两个都抢侧栏技能面板这个入口,又都读技能目录,所以你在哪个里开关,不一定是 agent 真正加载的那份。 |
dsh-skill-browser | dsh-toomuch-plugins | 装完之后那个插件的面板像没装,入口点不进去。 | dsh-skill-browser | 只有当你不需要「整个界面就是那条侧栏入口」的插件时,才去折侧栏。 | 一个插件的全部界面就是一条侧栏入口,另一个把它折进折叠组,于是界面还在却点不到。 |
dsh-genui | deep-view | 都在回答里渲染富块;一个畸形块在一个渲染器报错、在另一个里正常显示。 | dsh-genui | 它 peer 了 dsh-client-ui-slots,还把块格式写进系统提示词,生产者和渲染器在同一个包里。 | 两个都为同一种回答块内容类型注册渲染器。块里没有判别字段,而渲染器注册表每种类型只留一个处理器,所以后注册的替换先注册的。 |
@yugoo-design/dsh-design-panel | dsh-genui | 再加上 deep-view 就是三个渲染器抢同一种块,先认领的那个赢。 | @yugoo-design/dsh-design-panel | 按输出类型选:可编辑设计文件用它,临时图表表单用 genui。一个 profile 留一个。 | 设计面板和生成块共用同一个块位置;后注册的渲染器拿走整个位置,不只是它自己那种块。 |
@zhaoyang10/dsh-web-ide | dsh-codegraph-visualizer | 都给客户端加标签页,标签栏会挤,但不会报错。 | @zhaoyang10/dsh-web-ide | 代码页每个会话都用;代码图谱只在你已经在查它的时候用。 | 两个都在对话上方加标签页,标签栏顺序固定,窗口一窄第二个就把第一个挤出视野。 |
抢同一个配置项
| 包 A | 包 B | 一起装会看到什么 | 留哪个 | 为什么留它 | 为什么不能共存 |
|---|---|---|---|---|---|
@michengai/dsh-archive-manager | dsh-session-superagent | 归档过的会话又回到列表里,或者你预期会看到的一个会话干脆不显示。 | @michengai/dsh-archive-manager | 它 peer 了 16 个官方包,含 dsh-session-projection-cache 与 dsh-storage-domain;看护那个只 peer 一个,且区间很窄。 | 两个都改会话生命周期:一个把会话移出活跃列表,另一个还握着它开着。 |
@michengai/dsh-skills-manager | dsh-univer-office | 技能清单里的条目比你装的少,其中一个插件的技能不见了。 | @michengai/dsh-skills-manager | 技能只在一处声明。office 要技能只为文档工具,manager 的本职就是这份清单。 | 两个都改 @deepseek-ai/dsh-skill 那一行,补丁整行替换,第二个装上去就只剩它自己那份技能清单。 |
dshmarket | universal-plugin-hub | 从其中一个装完插件,回到列表一看:刚装的那个不见了,或者总数少一个。 | dshmarket | 它改的是 dsh-settings 的行,清单留在设置界面,那是 profile 本来就管的地方。 | 两个都写 profile 的 package.json,而依赖只有一份——一边装,可能把另一边刚写的条目挤掉。 |
dsh-better-plugin-updater | dshmarket | 在一个界面里规划好更新,另一个界面装完东西再回去看,那个插件又变回旧版本。 | dsh-better-plugin-updater | 它只出方案、不确认不动手;想控版本时它是更安全的写者。 | 两个都改同一份清单里的版本字段;一边规划好的更新,会被另一边的安装作废。 |
dsh-syn-config | dsh-custom-theme | 配置同步在机器间拷文件,主题插件却在写自己的配置,下次同步把主题盖掉。 | dsh-syn-config | 配置只能有一个权威。开了同步,主题就要放在同步里,别两边都改。 | 一个在 profile 下写 CSS 与背景文件,另一个把这个目录在机器间复制——下次同步把主题盖掉。 |
@aiwayds/dsh-llm-proxy | dsh-providers-hub | 某个服务商的请求没走代理就出去了,你的分流对它们悄悄失效。 | @aiwayds/dsh-llm-proxy | 只有所有模型调用都走同一个 dispatcher,分流才是可观测的。 | 两个都在模型出站路径上:代理装了全局 dispatcher,而自带传输层的服务商插件会绕过它。 |
打同一个外部接口
| 包 A | 包 B | 一起装会看到什么 | 留哪个 | 为什么留它 | 为什么不能共存 |
|---|---|---|---|---|---|
dsh-free-search | @liustack/modsearch | 同一个问题问两次,答案来自不同的搜索引擎,你也没法指定用哪个。 | dsh-free-search | 它 peer 了 @deepseek-ai/dsh-tools 和命令面板,提供者在界面里够得着;modsearch 完全没声明 peer。 | 两个在同一项能力下各注册一个联网搜索工具,模型只会挑一个,而且每轮挑的不稳定。 |
@xmanrui/dsh-im | @tencent-connect/dsh-qqbot | 同一条 QQ 消息经两条桥各到一次,审批提示还不一样。 | @tencent-connect/dsh-qqbot | 它 peer 了 dsh-user-approval 与 @deepseek-ai/dsh-session,审批走的是真正要跑工具的那个会话。 | 两个把同一个 QQ 号接进会话,一条消息到两次,两套审批还各记各的「谁批的」。 |
ds-harness-remote | dsh-mobile-plugin | 同一台主机两个入口,总有一个你会忘了关。 | ds-harness-remote | 它把网关本身通过点对点、端到端加密暴露出去,边界只有一处,不是两组路由。 | 两个各开一条进入同一台主机的通道,令牌分开、路由表分开,没人对账。 |
ds-harness-remote | dshost-plugin | 两个中继暴露同一个本机界面;泄露时要吊销三套凭据。 | ds-harness-remote | 它 peer 了 dsh-api-gateway 与设置页,暴露的东西和被暴露的东西放在一起。 | 两个中继用不同端点暴露同一个本机界面;收回访问要在两处收,总有一处会被忘掉。 |
dsh-computers | dsh-windows-mcp | 都让 agent 在别的机器上跑东西;三个命令工具,沙箱策略和影响面各不相同。 | dsh-computers | 它是为「多台机器」做的,不是为一个操作系统表面;只有目标全是 Windows 才留 windows-mcp。 | 两个都给 agent 在别的机器上执行命令的能力,沙箱策略不同,同一件事取决于模型挑了哪个工具。 |
dsh-tool-database | @mzzsfy/dsh-tool-gate | 数据库工具在跑的时候根本不出现,虽然插件那边显示装好了。 | dsh-tool-database | 留数据库工具、把它加进闸门白名单;去掉闸门等于放弃其他每一轮的提示节省。 | 闸门把白名单外的工具全部延后,数据库工具虽然注册了,不进白名单就不会被声明给模型。 |
干同一件事
| 包 A | 包 B | 一起装会看到什么 | 留哪个 | 为什么留它 | 为什么不能共存 |
|---|---|---|---|---|---|
@nanmicoder/dsh-agent-teams | dsh-agent-compare | 装完第二个,第一个插件加的那个按钮就不见了。 | @nanmicoder/dsh-agent-teams | 它 peer 了 23 个包、管的是团队角色;compare 是每次请求烧 2–4 倍 token 的一次性诊断。 | 两个都改 dsh-client-ui-chat 里的 composer 行。补丁替换整行 config,而这一行只挂一套控件,所以后加载的层把控件从先加载的手里拿走。 |
@nanmicoder/dsh-agent-teams | @xirang-ai/dsh-teamflow | 两个编排器给同一条需求到缺陷的流水线描述角色。 | @xirang-ai/dsh-teamflow | 如果流水线本身就是产品(需求、缺陷、交接),就用建模了它的那个;否则留在通用团队上。 | 两套角色系统描述同一条需求到缺陷的流水线,agent 接到一个任务却拿到两套冲突的角色。 |
@mzzsfy/dsh-tool-gate | @logictan/dsh-tool-surface | agent 能调的工具比这两个插件各自承诺的都少,你明明开了的几个,跑起来根本没出现。 | @mzzsfy/dsh-tool-gate | 一个闸门够了。两个一起用,工具可能被一个延后、被另一个永不加载。 | 两份白名单裁同一份工具清单;实际生效的是交集,被一个延后的工具可能在另一个那里永远不加载。 |
dsh-octop-memory | dsh-mnemon | agent 会引用一条你完全没印象的旧记忆,或者两个插件的记忆在同一条回答里互相打架。 | dsh-octop-memory | dsh-octop-memory 会在轮末把事实写回磁盘,dsh-mnemon 不落盘;两个都装时,写回这件事只有 octop-memory 在做。 | 两个都在每轮前把上下文块注入同一个位置,谁都没标自己比对方更权威。 |
dsh-cost-meter | dsh-whale-widget | 屏幕上两个花费读数,两边都为同一组数字打账户接口。 | dsh-cost-meter | 它按会话和按天拆开销;挂件只显示余额。 | 两个都指向 @deepseek-ai/dsh-client-ui-slots 的会话头部 slot,而一个 slot id 只挂一个组件。两者都没声明独立 id,所以两组读数不可能同时挂着。 |
dsh-custom-theme | dsh-exv-flat-corners | 两个样式表设同一批圆角,决定结果的是加载顺序。 | dsh-custom-theme | 一份你自己拥有的样式表,胜过一份把外观写死的。 | 两个都在网页客户端作用域里声明同一批 --radius-* 自定义属性。自定义属性每个元素只存一个值,而两者都没给选择器加命名空间,后声明的直接覆盖。 |
@dickpy/dsh-imagegen | dsh-meme | 输入框附近两条图片路径;两个按钮,不是报错。 | @dickpy/dsh-imagegen | 生成覆盖面比发表情包广;只有发表情包是常态时才留图库。 | 两个都在输入框旁加一条图片路径,而输入框只有一排动作位——多两个就把第三个控件挤出去。 |
常见问题
这些对子是怎么挑的?
来自共用的 peerDependencies 和两个插件各自页面上写过的冲突说明。没有共用同一块界面的对子没列。
两个一起装会把命令行弄崩吗?
通常不会。补丁替换整行 config,症状是少一个面板或丢一条条目,不是崩。真崩更可能是 engines.dsh 不匹配,那种启动检查会报。
最快看到底谁赢了?
dsh --profile web --dump-config 打印合成树,只出现一次的那行就是赢家。