前言¶
DeepSeek Harness(DSH)的 Web 界面里,很多入口来自各插件往「槽位」里注册的条目:设置对话框左侧的分区、左侧栏的面板图标、栏底动作按钮等。插件一多,顺序、显隐、文案往往各管各的,改一处可能要动上游或改多个插件配置。
下面介绍社区插件 dsh-slots-manager(维护者 Yiklek,分类:工作流)。它在客户端槽位注册表上统一做显示/隐藏、排序、改名,不需要修改 deepseek-harness 或其它插件源码。
这是什么¶
dsh-slots-manager 是 DSH Web 插件:编排其它插件贡献到界面上的槽位条目——显示/隐藏、排序、改名——而不动上游。
实现上分两块:
- 槽位无关引擎:在
ctx.slots对应的原型上打三个补丁,对每个纳管槽位套用一份策略; - 槽位表(
src/slots.ts):唯一写明具体槽位的地方;加一个槽位 = 加一行。
当前版本(package.json 为 0.1.0)纳管三类槽位:
| 槽位 | 位置 | 隐藏 | 排序 | 改名 |
|---|---|---|---|---|
settings.section |
「设置」对话框左侧导航分区 | ✅ | ✅ | ✅ |
sidebar.panellist |
左侧栏面板图标按钮 | ✅ | ✅ | ✅ |
sidebar.footer.action |
左侧栏底部、Settings 旁的动作 | ✅ | ✅ | ❌ |
sidebar.footer.action 不提供改名:该槽位注册项不声明 label,按钮文案由组件通过 locale 渲染,改 label 无可见效果,因此 UI 不提供改名按钮。
核心功能¶
管理面板与入口¶
两个入口打开同一套编排面板:
- 设置对话框左侧导航里的 「设置编排」 分区(排在顶部附近,不可隐藏);
- 左侧栏「插件」页 → 本插件详情页(与
dsh-mnemon、dsh-context等配置区相同位置:plugins.bundle.config,按包名 keyed)。
面板按组展示「设置页」「左侧边栏」等,每组可 重置本槽位。
策略如何生效¶
引擎在 SlotRegistry.prototype 上打三个补丁,覆盖注册与读取路径(cordis 服务代理动态取方法,对所有插件立即生效):
| 补丁 | 拦截点 | 作用 |
|---|---|---|
register |
注册入口 | 记录原值(order / label / registrant),不改写,便于 reset 还原 |
entries |
列表读取方(如设置外壳导航) | 过滤隐藏 + 读时改写 order/label(返回克隆) |
entriesOfSlot |
渲染器与侧边栏面板列表 | 过滤隐藏 + 原地替换 entry.options(保留对象身份,避免 StaleAuthorizationError) |
策略经 DSH 标准 settings 命名空间 slots-manager 持久化;宿主半区把策略声明为本插件的 Config,客户端经 remote.settings 读写,由 SettingsProvider 落盘。持久化文档按槽位分组,例如:
{ "version": 1, "slots": { "settings.section": { "hidden": {}, "order": {}, "labels": {} } } }
分组不是装饰:条目 id 只在单个槽位内唯一;扁平结构会导致隐藏一处误伤另一槽位同名 id。
安装与启用¶
官方 CLI:
dsh plugin --profile web add dsh-slots-manager
或在 profile 仓库里用 file: 依赖,并在 package.json 的 dsh.profile.bundles 中加入 dsh-slots-manager,然后执行 pnpm install。用 file: 前需在本插件目录执行 pnpm build(main/exports 指向 lib/ 构建产物)。
重启 dsh web 后生效。
与 dsh-settings-manager 互斥:本插件是其替代品(同一套补丁机制,范围更大)。两者同时启用会叠加两套补丁;启用前请先移除 dsh-settings-manager。本插件不读取旧插件留下的配置,命名空间与文档结构均为新建,无自动迁移。
插件在当前 DSH 进程权限下运行;安装前请自行查看 GitHub 仓库 源码与 MIT 许可证。
典型用法¶
- 安装并重启
dsh web后,打开 设置 → 设置编排,或从左侧栏 插件 页进入 dsh-slots-manager 详情配置区。 - 在对应槽位组内:对条目开关显隐、拖拽或调整顺序、在支持改名的槽位修改显示名称。
- 若改乱,对该组点 重置本槽位;策略会写回
slots-manager命名空间,刷新后仍保留(由 SettingsProvider 持久化)。
非纳管槽位(如 conversation.*、plugins.*、shell.* 等)不会被本插件修改。
适用场景与注意¶
适合谁
- 装了多个 DSH Web 插件,想统一整理设置分区顺序、隐藏不用的面板图标、改设置里分区标题;
- 希望栏底动作(如部分插件的 insights 入口)与其它槽位在同一处管理显隐,而不逐个改各插件开关(与插件自带显示开关不冲突,本插件价值在于统一位置)。
限制与说明(摘自上游 README)
- 隐藏
sidebar.panellist条目只隐藏入口;对应主面板仍可能通过其它路径到达(侧边栏点击走selectPanel(id))。 - 本插件分区
slots-manager不可隐藏;Settings 入口在sidebar.settings,即使隐藏所有面板图标仍可进设置恢复。 - 基础设置分区先于第三方插件注册,引擎在首次读取时补记原值,不依赖插件加载顺序。
开发构建(供贡献者或 file: 依赖):pnpm install、pnpm typecheck、pnpm build;测试含单元、e2e 冒烟与 Playwright(见仓库 README)。
结尾¶
dsh-slots-manager 用三个 SlotRegistry 补丁和一张可扩展槽位表,在不动上游的前提下集中管理设置分区、侧栏面板与栏底动作的显隐、顺序与改名。社区目录页:skillhub.cn/plugins/Yiklek/dsh-slots-manager;源码与详细设计:github.com/Yiklek/dsh-slots-manager。