前言¶
在 DeepSeek Harness(DSH)里,侧边栏往往同时承担「新建会话、工作区、会话列表」和「插件入口(市场、任务、技能等)」两类导航。条目挤在同一列时,找会话和切插件都要在同一套列表里滚动或辨认。社区插件 dsh-two-pane-sidebar(维护者 A-Meng-E)的做法是:把插件导航挪到主侧边栏左侧一条固定窄栏(plugin rail),主侧边栏只保留会话与工作区相关能力,布局更接近「导航分区」而不是「单栏堆叠」。
这是什么¶
dsh-two-pane-sidebar 是面向 DSH Desktop / Web 的纯客户端布局插件:在界面最左侧增加一条持久化的插件轨,中间仍是宿主自带的 SidebarRoot(新建会话、工作区、会话),右侧为对话区。插件不安装 Host 行为、不发网络请求、不上报遥测,也不读写会话或工作区数据;除一条 localStorage 键外几乎无持久状态。
分类上属于 DSH 生态目录中的「客户端」类插件。目录页:skillhub.cn/plugins/A-Meng-E/dsh-two-pane-sidebar;源码与说明:GitHub - A-Meng-E/dsh-two-pane-sidebar。
核心功能¶
三列布局¶
安装后大致呈现为:左侧 plugin rail(约 52 px 或 208 px 宽)→ 中间 sidebar → 右侧 conversation。rail 由本插件绘制;中间 sidebar 保持宿主原有实现,不被本插件改宽度逻辑。
数据驱动的插件列表¶
rail 渲染宿主 sidebar.panellist 插槽里注册的条目(形状为 { id, order, label, component })。其他插件若向该插槽注册导航项,会自动出现在 rail 上,无需改本插件代码或额外配置;注销后对应行消失。
交互与宽度¶
- 点击某一行打开对应插件面板;当前行左侧有高亮条。
- 窄栏模式下悬停行会显示与主题一致的 tooltip。
- 底部箭头在 52 px(仅图标) 与 208 px(图标 + 标签) 之间切换,按钮位置固定,避免切换时跳动。
- 宽度选择写入
localStorage["dsh.two-pane-sidebar.v2"],重启后保留。 - 系统开启
prefers-reduced-motion时,宽度过渡动画会关闭。
与主侧边栏的关系¶
rail 通过给布局 frame 设置 padding-left 预留列宽,对话区会少占 52 px;主侧边栏宽度仍由用户拖拽决定,不会被 rail 挤窄。宿主 sidebar 内重复的插件导航列表由 CSS 隐藏,避免两套入口并存。
实现要点(便于评估兼容性)¶
client.js 约 670 行、无依赖:注册到 shell.overlay、订阅 sidebar.panellist、调用 ctx.layout.selectPanel(id) 打开面板,并从原生 sidebar 列复制背景/文字色以跟随第三方皮肤。依赖若干宿主内部插槽与 DOM 约定;Harness 大版本升级后若接口变化,rail 可能降级或不可见,但不会破坏会话数据。详见 README 中的 Compatibility 表与仓库内 docs/troubleshooting.md。
环境与要求¶
| 项目 | 要求 |
|---|---|
| Harness | DSH Desktop / Web 0.2.1-rc.2(Windows、macOS、Linux) |
| 运行时 | 无额外运行时;纯 ESM,无构建步骤、无 npm 依赖 |
| 引擎声明 | engines.dsh: >=0.2.1-rc.2 <0.3.0 |
当前包版本(资料中的 package.json):0.2.0,许可证 MIT。
安装与启用¶
通过宿主 plugin_manager 安装 bundle(会写入 profile manifest、执行 pnpm add 并应用 patch)。任选其一:
# 1. registry — 尚未上架 npm,名称已预留,未来可用:
# plugin_manager install_bundle target=@a-meng-e/dsh-two-pane-sidebar@0.2.0
# 2. release 固定制品(无需 npm 账号)
plugin_manager install_bundle target=https://github.com/A-Meng-E/dsh-two-pane-sidebar/releases/download/v0.2.0/dsh-two-pane-sidebar-0.2.0.tgz
# 3. 直接从 git
plugin_manager install_bundle target=git+https://github.com/A-Meng-E/dsh-two-pane-sidebar.git
安装后重启应用(profile 变更不会热加载),并刷新页面。说明中提到 spec 会传给 pnpm add,因此 file: / link: 本地路径也可用于开发安装。
卸载:
plugin_manager remove_bundle target=dsh-two-pane-sidebar
也可先退出应用,再从 ~/.dsh/profiles/<profile>/package.json 删除 dsh-two-pane-sidebar 行,并从 dsh.profile.bundles 去掉对应条目(运行中编辑 profile 可能触发与其他内置插件的热加载竞态,需自行确认后再改)。除 localStorage 键外一般不残留配置。
典型用法¶
本插件没有开关或配置文件:安装并重启后 rail 始终启用。
- 在 rail 中点击「市场」「任务」「技能」等已注册入口,在主内容区打开对应面板。
- 需要看清文字标签时,点底部箭头展开到 208 px;日常可收起到 52 px 省横向空间。
- 开发本插件或其它 rail 条目时,可用 link 安装后改
client.js,刷新页面即可验证(locale 元数据改后需重启):
plugin_manager install_bundle target=link:/absolute/path/to/two-pane-sidebar
浏览器控制台可过滤 [two-pane-sidebar] 查看降级路径的警告。
适用场景与注意¶
适合谁:长期在 DSH 里切换多个插件面板、又希望会话与工作区列表保持独立一列的用户;也适合需要验证 sidebar.panellist 生态、或做客户端布局类插件的开发者参考实现。
已知限制(来自 README):
- rail 在 overlay 层,用 padding 占位,没有可拖拽分隔条,宽度仅两档。
- 视口宽度小于 1024 px 的「窄窗口」逻辑会因对话区少 52 px 而更早触发。
- 皮肤若不在 sidebar 列元素上绘制,rail 可能回退到主题 token。
- 图标组件应只依赖
{ size, active },否则可能显示占位方块。
安全与信任:插件以当前 DSH 进程权限在客户端运行。安装前建议在 GitHub 阅读 client.js 与 cordis.patch.yml,确认 MIT 许可证与行为是否符合预期。社区目录站点与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。
结尾¶
dsh-two-pane-sidebar 把插件导航从主侧边栏拆到左侧固定 rail,主栏专注会话与工作区;列表由宿主插槽驱动,安装后无需配置。若你使用 DSH 0.2.1-rc.2 且接受对话区固定让出 52 px,可按上文命令安装并重启验证。
- 目录页:https://www.skillhub.cn/plugins/A-Meng-E/dsh-two-pane-sidebar
- 仓库:https://github.com/A-Meng-E/dsh-two-pane-sidebar