dsh-sidebar-fold:把侧边栏全局面板收成「插件大全」一行

前言

在 DeepSeek Harness(DSH)里用久了,侧边栏上半部分往往会被一串全局面板占满:插件、终端、容器、记忆、今日值得读等,每一项各占一行。工作区(会话列表)被压到下面一条缝,切会话、扫历史都不顺手。这些入口大多来自不同插件,关掉某一个又未必符合使用习惯。

下面介绍社区插件 dsh-sidebar-fold(维护者 moophone):不改宿主源码,把上述面板行折叠成单独一行「插件大全」,把高度还给工作区;面板里仍可点任意项跳转,并支持临时展开回全貌。

这是什么

dsh-sidebar-fold 是纯客户端 DSH 插件:零依赖、零构建链,安装即用。当前包版本为 0.4.0,许可证 MIT,源码与说明见 GitHub 仓库,目录页为 SkillHub 插件页。

它解决的是侧边栏「全局面板行过多、挤压工作区」的界面问题;原有各插件能力不删,只换入口。

核心功能

折叠前后对比

折叠前,侧边栏上半部分可能被多个面板行占满(README 中本机实测为 11 行),工作区可视高度很小。折叠后侧边栏只保留一行「插件大全」;点击后打开面板,列出全部面板项(带图标),点任一项直接跳转。面板内还提供开关,可随时把侧边栏临时展开为完整列表。

实现要点(与排障相关)

插件走官方 Cordis 契约,不修改 DSH 宿主源码,主要包括:

  1. 注册 sidebar.panellist 席位与 dsh-sidebar-fold 主面板。
  2. 通过 DOM 识别并隐藏其余行:既包含走 sidebar.panellist 的 <button>,也包含插件绕过 slot 注入、且 dataset 含 /^dsh.*Entry$/ 形态键的行(如 dsh-tty-entry、dsh-docker-entry 等)。
  3. 「插件大全」列表读侧边栏实时 DOM,点击时对真实按钮执行 .click(),避免晚注册插件被漏掉。
  4. 隐藏使用 data-dsh-fold-hidden 与 !important 样式,减少与部分插件自带 MutationObserver 争改 display 的冲突。
  5. 用 MutationObserver 监听页面变化并合并刷新;展开/折叠状态写入 localStorage,重启保留。
  6. v0.4.0 起失效安全:若认不出「插件大全」自身那一行,则一行都不隐藏,避免误清空侧边栏。

数据方面:除 localStorage 中的折叠开关与诊断键 dsh-sidebar-fold:diag 外,不上传、不持久化其他信息。

安装与启用

前置条件:已安装 dsh CLI。插件随当前 profile 安装,并以该 profile 启动的 DSH 客户端 bundle 加载;改插件或新装后须完整重启 DSH(仅刷新浏览器页面不会重新加载 bundle)。

官方 README 给出的安装方式如下。

dsh plugin --profile <name> add dsh-sidebar-fold

其他形式:

# GitHub 源码安装(会自动跑 prepare;本包无需构建)
dsh plugin --profile <name> add github:moophone/dsh-sidebar-fold

# 本地开发
dsh plugin --profile <name> add link:/abs/path/to/dsh-sidebar-fold

# 预打包 tarball
dsh plugin --profile <name> add ./dsh-sidebar-fold-0.4.0.tgz

dsh plugin add 会自动写入 profile 的 package.json(dependencies 与 dsh.profile.bundles)以及 cordis.patch.yml 的 insert 层,无需手改 profile 文件。

卸载:

dsh plugin --profile <name> remove dsh-sidebar-fold

典型用法

  1. 按上一节命令对正在使用的 profile 安装插件,并完整重启 DSH。
  2. 重启后侧边栏应出现一行「插件大全」;其余全局面板行默认被收起,工作区高度恢复。
  3. 点击「插件大全」,在面板中选择要用的功能(终端、容器、插件市场等),与原先点侧边栏对应行效果一致。
  4. 需要对照完整侧边栏时,在面板内打开「临时展开」类开关(README 描述为可随时展开回全貌)。

若安装后无变化,可先查看浏览器控制台;约 4 秒后可能出现自检日志,例如:

[dsh-sidebar-fold] active: expanded=false navRows=7 injectedRows=5 rootFound=true

也可查看 localStorage 键 dsh-sidebar-fold:diag 中的 JSON(键不存在通常表示客户端 bundle 未加载,需检查 profile 与是否已重启)。若出现 host has no slots service — panel folding disabled,说明宿主过旧、未提供 slots 服务,插件会主动放弃折叠。

适用场景与注意

适合谁:长期开很多 DSH 全局面板插件、侧边栏行数多、更在意会话列表可视区域的开发者。

权限与安全:插件在 当前 dsh 进程与 profile 所加载的客户端环境 中运行,会操作页面 DOM 与 localStorage。安装前建议阅读 源码 与 MIT 许可证,确认符合你的环境策略。

兼容性:面向 Web 客户端(dsh.client.platform: 'web');仅 require('react') 且使用 createElement,ES5 风格源码。若某第三方插件改用新的侧边栏插入方式、不再符合 data-dsh-*-entry 约定,可能出现「只折一部分」;可按 README 排障说明收集 DOM 信息反馈 issue。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录独立于 DeepSeek / 幻方,并非官方应用商店。

结尾

dsh-sidebar-fold 用一行「插件大全」收回侧边栏上的全局面板行,在不删减插件能力的前提下把工作区高度还给你。需要安装命令、实现细节与排障时,以仓库 README 为准:

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

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

Xiaoye