dsh-sidebar-layout:把 DSH 侧栏插件入口收成可滚动窗口

前言

DeepSeek Harness(DSH)左侧栏里,每个带侧栏入口的插件都会占固定一行:行高 36px,行间距 2px。入口一多,这一列会无条件变长,挤占下方工作区会话列表的可视高度。宿主「更多」菜单里的取消固定既不持久,也无法隐藏 Plugins 入口,排序也改不了。

下面介绍社区插件 dsh-sidebar-layout(维护者 Yu-jianhai,分类:客户端)。它不改宿主侧栏单例槽,在入口列表上叠一层布局控制:限高滚动、拖动排序与调高、逐个显隐,把省下来的纵向空间还给会话列表。

这是什么

dsh-sidebar-layout 是 DSH 插件包:通过 dsh.client 与 cordis.patch.yml 注入客户端 bundle(lib/client.js,无需单独构建)。目标很明确——把左侧栏插件入口从「无限长高的一整列」变成「有上限、可滚动、顺序与显隐可持久化」的窗口。

README 中举例:约八个侧栏入口时,入口列固定占用约 348px,会话列表因此被压缩。本插件通过 nav 的 max-height(按可见行数 3 行起,最多到「一行一个入口」)把多出的入口收进窗口内滚动,而不是继续向侧栏要高度。

核心功能

限高与滚动

鼠标移到入口列表底部会出现横向热区,上下拖动可改变窗口显示行数;双击可恢复「不限高」。行数下限为 3,上限随当前入口数量变化:最多拖到「全部 N 行」,不会出现空白行;若你主动设了较小的上限,新装的侧栏插件仍追加在列表末尾,留在滚动区外,小上限会被尊重。

拖动排序

行内悬浮时右侧出现抓手,按住上下拖即可改顺序,结果写入 localStorage。设置页提供 ↑ / ↓ 作为键盘可达兜底。拖动时:被拖行变为跟手浮卡([data-dsl-drag-card]),原位置用占位([data-dsl-drag-ph])标出落点,其余行以 180ms FLIP 让位,松手先吸附再 persist();按 Esc 取消且不提交。占位形态可在设置中选择实心灰块、虚线框或幽灵行,也可关闭吸附回弹——仅影响观感,不改排序语义。

逐个显隐

在 设置 → 侧栏布局 中勾选,或使用侧栏底部三条横线图标打开的浮层,可对每个入口单独开关。隐藏的行使用 display: none。这与宿主「更多」菜单里的 pin 状态不同步(宿主未暴露该 API)。

实验性紧凑密度

设置里可开启「实验性」紧凑模式,行高由 36px 变为 28px,对应 nav[data-dsl-density="compact"]。

其它设计要点

  • 不改宿主宽度与滚动条样式,继承 --dsh-scrollbar-width(5px),仅做横向对齐补偿,使列表滚动条与会话列表对齐。
  • 与 dsh-apple-hig 分工:会话树拖拽归 apple-hig,一级导航入口归本插件。
  • 找不到侧栏时静默降级,最坏情况等同未安装。
  • 设置页若在某 DSH 版本渲染失败,会显示错误文本与 __dsl 排查提示,侧栏本身不受影响。

偏好存储键:localStorage['dsh-sidebar-layout:v1'],结构为 { v, order: string[], hidden: string[], maxRows: number|null, density: 'comfortable'|'compact' }。

安装与启用

这是本地 profile 依赖方式安装,与其它 DSH 本地插件一致:写入 dependencies 并在 dsh.profile.bundles 中登记 bundle 名,再让 node_modules/dsh-sidebar-layout 指向插件目录(联合或联接均可)。若 DSH 的 HMR 关闭,安装或修改后需重启 DSH。

// ~/.dsh/profiles/desktop/package.json
{
  "dependencies": { "dsh-sidebar-layout": "link:/path/to/dsh-sidebar-layout" },
  "dsh": { "profile": { "bundles": [ /* … */ "dsh-sidebar-layout" ] } }
}

无构建步骤:lib/client.js 已是 window.__ModuleLoader__.load({…}) 形态的客户端 bundle。

典型用法

  1. 安装并重启(必要时)后,侧栏入口列会受插件管理的 max-height 与滚动约束。
  2. 需要常看的入口拖到靠前位置;不常用的在 设置 → 侧栏布局 或底栏三条线浮层里关闭显示。
  3. 入口变多时,在列表底边热区拖动调高可见行数,或保持较小上限并在窗口内滚动。
  4. 调试时在浏览器控制台使用 window.__dsl:
    - __dsl.state() — 当前偏好
    - __dsl.mapping() — 入口 id 与渲染行对应
    - __dsl.nav() — 定位到的 nav
    - __dsl.align() — 滚动条对齐实测值
    - __dsl.caps() — 行数上限派生值
    - __dsl.refresh() / __dsl.reset() — 刷新或清空偏好

维护者提供的自检命令(在插件目录内):

node --check lib/client.js
node test/boot-smoke.mjs

卸载时从 bundles 与 dependencies 移除名称、删除目录联接并重启;插件会清理注入的 <style>、行内样式与浮层节点。

适用场景与注意

适合侧栏插件入口较多、会话列表经常被挤短的 DSH 0.2.x 桌面 profile 用户。插件以当前 DSH 客户端进程权限运行,安装前应阅读仓库源码并确认 MIT 许可证与 cordis.patch.yml 行为是否符合你的环境。

注意:不要指望与宿主「更多」菜单的隐藏状态一致;Plugins 入口仍受宿主规则约束。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-sidebar-layout 用叠加层方式整理侧栏插件入口:限高滚动、可排序、可调高、可显隐,把纵向空间还给工作区会话列表。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

小夜