dsh-sidebar-density:把侧栏高度还给工作区列表

前言

在 DSH(DeepSeek Harness)里装面板型插件越多,左侧栏里「全局导航」占的行数越高,中间「工作区」会话列表能分到的高度就越少。宿主侧栏是几块固定高度叠在一起,只有工作区区域是 flex:1,拿到的永远是剩余空间;在约 840px 视口里,列表有时只剩大约 4.5 行。靠改主题或手改 DOM 既难维护,又容易在宿主重渲染时被覆盖。

下面介绍社区客户端插件 dsh-sidebar-density(维护者 LUgABeEEE,v0.1.0):用折叠开关、密度与宽度预设,把被品牌行、导航、费用卡、底部按钮等占掉的空间尽量收回来,并把控件收进侧栏底部一行和设置页,而不是再堆一块常驻面板。

这是什么

dsh-sidebar-density 是面向 DSH Web 客户端的轻量侧栏 UI 插件:五个折叠开关、三档密度预设、三档宽度预设,入口在侧栏底部「密度」按钮与设置里的「侧栏密度」分区。实现上无 npm 运行时依赖、无后台服务、无构建步骤——一个 lib/client.js 加注入样式表;选项只写在 <html> 的 data-dsd-* 属性上,不编辑宿主 React 树。分类属于 客户端;仓库 GitHub,目录页 SkillHub。

核心功能

五个折叠开关

全部默认关闭;状态持久化在浏览器 localStorage(v2,会从 v1 两开关记录自动迁移)。

开关 关闭时 打开后大致效果
导航 竖排多行面板入口 横排一行图标,面板仍可点
账单 完整费用卡 只留首行(今日)
品牌行 约 60px 约 32px,只留标志与折叠按钮
新会话 约 38px 约 26px,只留图标
区标题 约 36px 约 26px

资料中估算:五个都打开时,大约多还给会话列表 270px(约 7 行量级)。

三档密度与三档宽度

密度作用于侧栏整列(标准 / 紧凑 / 舒适),折叠成 56px 图标栏时不施加,避免打乱 rail;右栏展开时预设主要调右栏内容字号。宽度预设为自动(尊重宿主拖拽)、窄(264px)、宽(320px);仅在右栏无轨道、侧栏未折叠、非右栏全屏等可预测布局时覆盖宿主 inline 的列宽——一旦拖动侧栏分隔条,插件会把宽度设回「自动」,把控制权交还宿主。

底部一行入口

插件在 sidebar.footer.action 注册「密度」按钮(order -10,在费用卡之前),点开弹出全部控件。同时把 dsh-chat-import 的「导入会话」与 dsh-mobile 的「移动访问」从各占 footer 一行,收成同一行快捷条:密度 | 导入 | 移动(约 24px 高)。导入优先调用 sidebarRight.openTab('chat-import');移动触发 dsh-mobile-control__trigger。原生按钮仍留在 DOM;若上游改名导致隐藏规则失效,按钮会回到 footer,快捷入口随之消失,避免死链。侧栏收成图标栏时,底部只保留「密度」图标。

实现要点(便于评估风险)

  • 控件注册在官方文档中的 sidebar.footer.action 与 settings.section(order 40,General 之后),不依赖私有 API。
  • 样式用 CSS module 本地名匹配(如 [class*="panelRow"]),上游改哈希不会坏布局,最多规则静默失效、侧栏回到原样。
  • 卸载:dsh plugin remove 并去掉注入样式即可还原;host 侧几乎是空实现(无服务、无路由、无配置 schema)。

安装与启用

安装步骤以仓库 README 为准。路径传给 dsh plugin add 时必须是绝对路径;客户端改动无 HMR 时需重启 dsh-web,仅刷新页面不足以换掉服务端缓存的 bundle。

# 1) 克隆到任意目录
git clone git@github.com:LUgABeEEE/dsh-sidebar-density.git

# 2) 装进 web profile(路径必须是绝对路径)
dsh plugin --profile web add "$(pwd)/dsh-sidebar-density"

# 重启 dsh-web 让组合生效。
# ⚠ 本机 SER8 实测:systemctl restart dsh-web 可能被 polkit 拦截;
#   现行做法是 kill 主进程,由 Restart=always 接管:
kill "$(systemctl show -p MainPID --value dsh-web)"

只停用、不卸载:在 profile 的 cordis.patch.yml 里为 sidebar-density 设置 disabled: true,然后同样重启。

# 卸载
dsh plugin --profile web remove dsh-sidebar-density

环境要求(来自 package.json):Node >=22.19.0,DSH >=0.2.0-rc.1 <0.3.0。

典型用法与验收

刷新页面后,可按 README「上手验收」逐条对照:

  1. 侧栏底部出现「密度」,面板内有预设、宽度、五个开关。
  2. 选「紧凑」→ 字号与各行高度一起收紧,列表可见行数增加。
  3. 打开「导航」→ 面板导航变一行图标。
  4. 选「窄」→ 侧栏 264px;拖一下分隔条 → 宽度回到自动,设置里宽度显示「自动」。
  5. 侧栏收成图标栏 → 「密度」仍为可点图标。
  6. 打开右栏 → 宽度预设不与右栏布局抢控制;右栏字号跟随密度预设。
  7. 设置页出现「侧栏密度」,控件与弹出面板一致。
  8. 「恢复默认」→ 界面回到出厂样子(localStorage 记录仍可保留)。
  9. 底部为费用卡 + 一行「密度 / 导入 / 移动」。
  10. 「导入」打开右栏导入 tab;「移动」打开移动访问面板。

开发者自测:

npm run verify     # node --check + node --test

适用场景与注意

适合谁:长期在 DSH Web 里工作、侧栏插件较多、需要更多会话列表可视行数,又希望密度/宽度在一处调节的用户。

务必知晓:

  • 插件在 当前 dsh 进程权限 下运行;安装前请自行阅读源码与 MIT 许可证,确认可接受的行为范围。
  • 宽度预设与宿主 inline 布局存在上述取舍;依赖 :has() 等的真实层叠以运行中 GUI 为准,单测不覆盖完整 CSS 布局。
  • SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本插件是社区客户端扩展之一。

结尾

dsh-sidebar-density 用属性 + 样式表的方式,在不改宿主 React 树的前提下,把侧栏折叠、密度和宽度控制收到底部一行与设置页,目标是把固定块占掉的高度尽量还给工作区列表。需要细节与更新时,以仓库 README 为准。

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

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

Xiaoye