前言¶
DeepSeek Harness(DSH)的左上角侧栏通过 sidebar.panellist 插槽向各插件开放:谁要放图标入口,就注册一条记录并用 order 决定排序。外壳只按数字从小到大画一列,不关心这些按钮分别代表什么。
插件装多了之后,这一列容易变成互不相干的长列表,很难一眼分清用途。社区里也有按插件各自加侧栏按钮的做法,但没有统一的分组层。下面介绍的 插件侧栏管理(包名 dsh-plugins-sidebar-manager,维护者 HighToward)只在视觉上接管这一列:自建一级/二级分类、调整顺序、隐藏不需要的入口,不改其他插件代码,也不要求对方配合。
这是什么¶
这是一个面向 DSH Web 外壳的客户端插件(DSH Desktop 与 dsh web 同属 Web 外壳)。当前版本 0.1.0,许可 MIT。在 设置 → 插件侧栏管理 里完成所有调整,保存后立刻生效,无需重启(link: 本地开发时改宿主半源码需重启 DSH)。
核心功能¶
分类¶
- 一级分类:侧栏顶层的分组标题。
- 二级分类:挂在一级下面,带缩进,可再拆细。
- 分类可重命名、上移、下移、删除;可折叠,折叠状态会记住。
- 删除分类不会丢入口,成员退回「未分类」。
入口¶
- 每个侧栏入口可放入任意分类,分类内可调顺序。
- 每个入口可单独隐藏或显示;隐藏后从侧栏消失,插件仍照常运行。
- 未归类入口排在所有分类之后,顺序与插件注册时一致。
整体控制¶
- 接管侧栏:总开关。关闭后侧栏立刻恢复各插件注册时的原样,配置保留;再打开即恢复你的布局。
- 重新扫描:重新读取当前已注册的侧栏入口。
- 恢复默认:清空全部分类与隐藏设置,需 3 秒内点两次确认。
侧栏收折成约 36 像素宽的图标条时,分类标题会自动隐藏,避免撑破布局;外壳自带的「更多」等入口不受本插件管理。
安装与启用¶
从 GitHub 安装¶
在 DSH 插件管理页(侧栏「插件」)点安装,填入:
github:HighToward/dsh-plugins-sidebar-manager
命令行(以 desktop profile 为例):
dsh plugin --profile desktop add github:HighToward/dsh-plugins-sidebar-manager
或使用 pnpm:
cd ~/.dsh/profiles/desktop
pnpm add github:HighToward/dsh-plugins-sidebar-manager
装完之后¶
打开 设置,左侧会多出一项 插件侧栏管理(在「插件」之后)。插件列表中显示中文名「插件侧栏管理」,说明来自包内 locale/zh.json。
依赖:DSH >= 0.2.1-rc.2;React 18 及以上(设置页使用 useSyncExternalStore)。插件无额外运行时依赖,由外壳注入模块。
典型用法¶
第一步:建分类¶
进入 设置 → 插件侧栏管理,点 新建一级分类。名称可留空,但侧栏会显示空标题,建议命名。
在一级分类卡片内点 新建二级分类 可挂二级;也可用 上级分类 下拉改挂父级,或选「未指定」升为一级。
第二步:归类入口¶
每个分类卡片底部有下拉(仅未归类入口)和 加入 按钮。成员列表中:
- ↑ ↓:分类内顺序。
- 眼睛图标:隐藏或显示(隐藏后行变淡并标「已隐藏」)。
- ×:移出分类,回到未分类。
第三步:侧栏呈现¶
卡片头部的 ▾ / ▸ 控制折叠;折叠后该分类下成员在侧栏一并隐藏。一级分类之间的顺序用卡片头部 ↑ ↓ 调整;二级跟随父级。
排查问题时,可先关闭 接管侧栏,确认是否为本插件导致的显示差异。
配置与数据¶
配置存两份,互为备份:
| 位置 | 作用 |
|---|---|
浏览器 localStorage,键 dsh.plugins-sidebar-manager.v1 |
首屏即可按分类渲染 |
$DSH_HOME/plugins-sidebar-manager.json(默认 ~/.dsh) |
跨浏览器缓存、长期保存 |
改动先写 localStorage,再防抖 400ms POST 到宿主;宿主用临时文件加原子 rename 写盘。清浏览器缓存可从宿主读回;宿主无文件时按「未配置」处理,侧栏保持原生顺序。
文档结构示例(version 当前为 1):
{
"version": 1,
"enabled": true,
"groups": [
{ "id": "g1", "name": "创作", "level": 1, "parent": "", "collapsed": false }
],
"items": {
"skill-manager": { "group": "g1", "order": 0, "hidden": false }
}
}
入口 id 即各插件注册 sidebar.panellist 时的 options.id(如 skill-manager)。读入后会做规整,非法字段丢弃或回退默认值,避免半截配置拖垮界面。
宿主提供本机-only 的读写接口(GET/POST /api/dsh-plugins-sidebar-manager/config 等),非回环地址返回 403。远程端口转发访问时,POST 可能被拒,但已保存在 localStorage 的布局仍可用。
实现要点(选读)¶
官方插槽是扁平列表,没有「分组标题」的注册位。本插件在页面加载后对侧栏列做后置增强:通过 aria-label 与注册表匹配定位 nav,不改 React 节点结构,用 flex 的 CSS order 调视觉顺序,用 display: none 隐藏;分组标题以兄弟节点插入 DOM。外壳重渲染时 React 会复位 DOM 顺序,但会保留各按钮上的 style,因此 order 方案能持续生效。MutationObserver 与定时兜底负责与外壳同步;增强逻辑包在 try/catch 内,失败只打日志,不中断 DSH 启动。
适用场景与注意¶
适合:经常安装多个 DSH 插件、希望按「创作 / 工具 / 调试」等习惯整理左上角入口,或暂时隐藏不常用面板又不想卸载插件的用户。
注意:
- 插件在当前 DSH 进程权限下运行,安装前宜阅读 GitHub 仓库 源码与 MIT 许可。
- 侧栏识别依赖外壳当前 DOM 习惯(如
nav、入口aria-label);外壳大改侧栏结构时,可能表现为「不接管、保持原样」,一般不报错。 - 卸载插件不会自动删除
plugins-sidebar-manager.json与对应localStorage;彻底清理需手动删除。 - 本插件归类属于社区目录中的客户端类工具;SkillHub 目录页 与 GitHub 为公开来源,与 DeepSeek / 幻方无官方从属关系。
结尾¶
插件侧栏管理补的是 DSH 开放侧栏在「入口变多」时的排版层:分类、顺序、显隐均可本地配置,并可一键交回原生顺序。需要安装说明与配置字段细节时,以仓库 README 为准。