左栏菜单管理:zhujiuyi/dsh-leftpanel

前言

在 DSH 里,左侧菜单由各个插件通过 sidebar.panellist 注册。当插件越来越多,菜单会变得冗长,想隐藏某些入口却找不到地方。DSH 本身没有提供菜单管理能力,手动编辑布局文件既繁琐又容易出错。

zhujiuyi/dsh-leftpanel 插件解决的就是这个问题:它在设置中提供一个「左栏菜单」分区,列出所有可注册的入口,逐项隐藏或显示,而不占用左侧菜单本身。

插件定位

这是一个 DeepSeek Harness 客户端插件,维护者为 zhujiuyi。它不改变插件注册的任何行为,只是对左侧菜单的显示结果做一层控制。

核心功能

插件在「设置 → 左栏菜单」下提供一个列表,包含两类条目:

  • 面板入口:插件、自动化任务、Token 用量、MCP 服务等通过 sidebar.panellist 注册的条目。每一项后面带一个开关,可以单独隐藏。
  • 固定控件:侧边栏外壳自带的项目,如新建会话、工作区/会话列表、设置、底部控件、品牌标记。它们不经过面板注册,因此只列出、不提供开关。

隐藏只改变左侧入口的可见性:被隐藏的功能仍然完整注册在布局服务里,通过命令、快捷键或其他入口照常可以打开。

安装与启用

  1. 在 desktop(或任意)profile 目录里执行:
pnpm add link:E:/dsh-plugin/dsh-leftpanel
  1. 把包名加进 profile 的 package.json,在 dsh.profile.bundles 数组中:
{
  "dsh": {
    "profile": {
      "bundles": ["@zhujiuyi/dsh-leftpanel"]
    }
  }
}
  1. 重启 DSH,打开「设置」,在左侧标签列里会出现「左栏菜单」。

工作原理

插件分为 Host 和 Browser 两半边:

半边 文件 职责
Host index.js 把「哪些入口被隐藏」持久化到 Harness home 下的 left-panel.json,提供 GET/POST /api/left-panel/state
Browser client/client.js 向设置页的 settings.section 列表注册「左栏菜单」分区,并把隐藏状态应用到侧边栏行上

Host 侧负责持久化,确保首屏绘制前就能读到隐藏集合,且跨重启保留。Browser 侧负责在 DOM 中应用隐藏状态。

左侧行是通过表现层处理被隐藏的:侧边栏外壳拥有自己的行列表,为 sidebar.panellist 的每个存活条目渲染一行。本插件按与外壳完全相同的排序规则把行与条目投影对齐,再用行的可访问名称交叉校验,给命中的行打上 data-dsh-leftpanel-hidden,由样式表规则把它变成 display:none。

这样做的好处是:别的插件组件保持挂载、状态不丢;能自愈——MutationObserver 会在外壳重新渲染时重新应用标记;当行数或名称不一致时,只处理名称精确匹配的行,不会隐藏错行。

存储位置

隐藏状态存储在 <DSH home>/left-panel.json(默认 ~/.dsh/left-panel.json):

{
  "version": 1,
  "hidden": ["plugins", "token-dashboard"]
}

损坏的文件不会让页面报错:它降级为「什么都没隐藏」,并在日志里告警一次。

适用场景

  • DSH 插件较多,左侧菜单项超过十项,需要按需隐藏不常用的入口。
  • 希望在设置中集中管理菜单可见性,而不手动编辑布局文件。

本插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。

结尾

如果你需要精细控制左侧菜单的显示项,zhujiuyi/dsh-leftpanel 提供了一个轻量级的管理入口。插件目录与 GitHub 仓库见下:

  • 目录页:https://www.skillhub.cn/plugins/zhujiuyi/dsh-leftpanel
  • GitHub:https://github.com/zhujiuyi/dsh-leftpanel
羽毛球分组比赛记分
小程序二维码

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

小夜