dsh-settings-hub: Centralizing third-party plugin settings under "Plugin Settings"

前言

DeepSeek Harness(DSH)采用「一切皆插件」的扩展方式:每装一个带设置页的插件,设置面板左栏往往就多一行。插件一多,账号、通用、模型、内置插件与各类第三方配置混在一起,找某一插件的设置页要反复扫左栏。

dsh-settings-hub 是维护者 MrXiongBear 发布的客户端类 DSH 插件,目标是把除产品自身页面以外的第三方设置页折叠进统一的「插件设置 / Plugins」入口,左栏只保留核心分区,具体插件配置在同一页内列表、搜索并展开。下面介绍它的定位、行为、安装方式与使用注意。

这是什么

dsh-settings-hub(npm 包名 dsh-settings-hub,当前资料中版本为 1.0.4,MIT 许可证)面向在 DSH 里安装多个第三方插件、且这些插件各自注册了设置页的用户。它不替代各插件的设置逻辑,只改设置外壳的导航与聚合方式:产品内置页面仍在原位置,其余 settings.section 条目收进新页面。

仓库说明标明本包为实验性、自用性质,紧贴 DSH 宿主接缝(apply / inject / client bundle / 配置解析),仅在编写时对应的 DSH 版本上验证过;未发布到 npm,社区目录页位于 SkillHub,源码在 GitHub。SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

统一的「插件设置」页

插件会新增一个 settings.section 页面:id 为 plugin-settings,标签为「插件设置 / Plugins」,排序 order 5(位于 General 之后、Models 之前)。

在该页中:

  • 列出所有被折叠的、由插件提供的设置页;
  • 支持搜索;
  • 点击后在当前页内展开;展开的是插件原本的页面组件(组件、locale、store、inject 全部复用),功能与外观与原生页面一致。

左栏折叠规则

以下内置页面保持原位,不会被收进「插件设置」:

  • account
  • general
  • models
  • plugins
  • agent-presets
  • archived-sessions
  • session-log

其余 settings.section 条目(含以后新装的插件)默认折叠。左栏不再「一个插件一行」。

镜像与跳转

折叠页的组件通过本插件声明的子槽 plugin-settings.detail 做镜像注册(槽渲染器只允许渲染自己声明过的子槽)。镜像保留原条目顶层的 locale、store、inject——这三项在槽条目上是顶层字段,不在 options 里。

若某个页面自己声明了子槽、无法安全镜像,列表中该行会改为调用设置外壳的 actions.openSection(id),跳转到该插件自己的独立设置页。

动态增删与停用还原

新装或卸载插件时,settings.section 的订阅会触发,「插件设置」内的列表会自动增删。

停用本插件时会还原导航过滤并移除所有镜像,设置面板恢复为安装前的左栏布局。

导航过滤与降级

实现上对 slots 服务的 entries 方法做局部包装:仅当 key === "settings.section" 时过滤被折叠的行,其它 slot 原样返回;停用时按 descriptor 校验还原。若包装失效,会退化为「多一个插件设置页」并显示提示,不会导致设置面板崩溃。

客户端加载后会将自检结果 POST 到 Host 半边的 /api/settings-hub/status,写入包目录下的 .diagnostics.json,便于观测导航可见/隐藏的 section id、已镜像页面、过滤是否安装成功等信息。

安装与启用

DSH 的 profile 加载为全有或全无:任一插件 import 失败可能连坐整个 profile。安装前请先备份 profile 中的 package.json 与 cordis.patch.yml。

README 给出的 bundle 安装方式为:

plugin_manager action:"install_bundle" target:"<repo>"

将 <repo> 换为实际仓库标识(与你在 DSH 环境中安装其它 bundle 时使用的 target 一致)。安装后无需重启;打开「设置」(账号菜单 → 设置,或 Ctrl+,)即可看到「插件设置」。

若不用 bundle 管理器,也可按仓库说明手动操作:把本目录放进 profile 的 node_modules,或在 package.json 中用 "<包名>": "link:<本目录绝对路径>",并在 package.json 的 dsh.profile.bundles 里登记,然后重启 DSH。

改插件代码后需要 remove_bundle 再 install_bundle,并且 bump version,客户端 bundle 才会在页面内重新加载。

卸载时:从 dsh.profile.bundles 移除登记 → pnpm remove <包名> 或删掉 junction → 重启;若异常,用备份的 package.json 与 cordis.patch.yml 还原。

典型用法

  1. 按上文命令安装 dsh-settings-hub。
  2. 打开设置,在左栏找到 General 与 Models 之间的「插件设置 / Plugins」。
  3. 在列表中搜索或浏览第三方插件名称,点击条目;可在当前页内展开该插件的原生设置 UI。
  4. 若某条目因子槽限制无法镜像,点击后会跳转到该插件在左栏对应的独立 section(若过滤仍隐藏左栏项,则通过列表入口进入)。

无需额外配置文件;行为随已安装的 settings.section 插件自动变化。

适用场景与注意

适合:本地或团队环境中已安装多个带设置页的 DSH 插件,希望左栏只保留账号、通用、模型等核心项,把第三方配置集中在一页管理。

务必注意:

  • 插件以当前 DSH 进程的权限运行;安装前应阅读 源码 与 MIT 许可证,自行评估风险。
  • 仓库顶部标明代码 100% 由 AI 生成,实验性、非商业;宿主升级后可能直接失效。
  • 没有 npm 发布;依赖 profile / bundle 方式接入,与官方应用商店无关。

Host 侧主要文件:index.js 注册诊断 API;client.js 承担 UI、镜像与导航过滤;cordis.patch.yml 插入 loader 条目 settings-hub。

结尾

dsh-settings-hub 解决的是「设置左栏随插件变长」的导航问题:内置分区不动,第三方设置集中到可搜索的「插件设置」页,并尽量复用各插件原有设置组件。需要进一步了解说明与 issue 时,可查看 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye