dsh-compactui:把 DSH 侧栏收成 Codex 式紧凑布局

前言

DeepSeek Harness(DSH)桌面版的左侧栏会同时承载 Logo、搜索、新会话、工作区里的项目与会话,以及插件、插件市场、自动化任务等导航入口。条目一多,纵向空间很快被占满,常用会话和次要入口混在一起,查找成本偏高。

DSH 生态里不少能力都以插件形式挂在同一套 Web 渲染层上。若不额外改 UI,侧栏结构由宿主决定:插件类入口默认竖排占多行。下面介绍的 dsh-compactui(维护者 ifengz)在浏览器端重排侧栏视觉与交互,把导航收成浮层、把搜索嵌进顶栏,并用 localStorage 保住置顶与「加回侧栏」的入口,目标是对齐 Codex 风格的紧凑侧栏,而不是再叠一层配置面板。

这是什么

dsh-compactui 是一个面向 DSH Web / 桌面渲染层的 UI 插件:package.json 中 dsh.client.platform 为 web,逻辑集中在 client.js;宿主侧 index.js 仅为 cordis 合法的占位 apply()。它不改动 CLI 或纯 API 使用场景。

插件在已验证环境 DSH 桌面版 0.2.2-rc.1(Windows、macOS)上做过开发与验证;与宿主的耦合主要来自侧栏 DOM 的类名片段和若干 aria-label 文案(如「搜索会话」「已置顶」),宿主大改侧栏时需要同步维护插件。

侧栏长什么样

装好后刷新页面,侧栏大致分为三块行为(与 README 中的示意一致):

序号 界面上你会看到什么
1 顶部一行:Logo、搜索、菜单;其下是细条「新会话」、可折叠「置顶」、以及保持原样的「工作区」
2 点菜单后,插件类入口从竖排收成贴菜单弹出的浮层;每条右侧有 +,可把该入口加回侧栏
3 点放大镜后,搜索框原位替换 Logo,输入时过滤会话;置顶区单独一块,可折叠

品牌行高度 56px,Logo 26px,名称 16px/600;右侧为 28px 的搜索与菜单图标。新会话由居中大按钮改为贴左、34px 高的细条。工作区仍按宿主原样展示项目分组与会话行。

浮层菜单与「加回侧栏」

侧栏里原本竖排的插件、插件市场、自动化任务、「更多」等入口,全部迁入贴着菜单按钮弹出的浮层。

  1. 浮层中某条右侧点淡蓝色 +,该入口会以普通竖排行出现在「新会话」正下方,位置与原生面板行一致。
  2. 常驻行右侧有弱化 −(默认约 35% 透明度,悬停变实),点它可把入口收回浮层。
  3. 已加回侧栏的项,在浮层里显示勾号而非 +。会展开子菜单的入口(如「更多」)在浮层下方直接展开子菜单,主浮层保持打开。

常驻导航文案列表写在 localStorage["dsh-compactui:promoted"],重启后仍保留;每次打开浮层会重新读取宿主导航,新插件会自动出现在浮层里并可添加。

内联搜索与置顶区

点放大镜后,搜索框占据 Logo 原位(Logo 与右侧按钮暂时隐藏),边输入边过滤侧栏会话;Enter 打开第一条命中,Esc 或 ✕ 退出并复原。

置顶只在存在置顶会话时出现,标题可折叠;行右侧 ✕ 为取消置顶,点行本身打开会话。

置顶列表持久化在 localStorage["dsh-compactui:pinned"],记录形如 [{ "t": "会话标题" }]。DSH 折叠项目时会从 DOM 卸载会话行,纯扫 DOM 的实现会丢置顶;本插件在本地记标题,折叠后条目仍在,点开会自动展开对应项目再进入会话。首次启动且本地列表为空时,会临时展开折叠项目扫一遍再收回,以便已有置顶能显示(折叠项目可能短暂闪一下)。

实现要点(读源码时看哪里)

全部 UI 改动在 client.js 完成,便于理解行为边界:

  1. 样式注入:通过 <style id="dsh-compactui:style"> 注入;选择器使用 [class*="_logoRow"] 这类类名片段,避免绑定 DSH CSS Modules 的构建期哈希。
  2. 不搬移宿主 React 节点:原面板导航行用 CSS 隐藏,浮层里用克隆按钮,点击时按文案找回仍存活的原按钮并 .click(),交给宿主跳转逻辑。
  3. 跟随重渲染:MutationObserver + requestAnimationFrame 去抖补齐自有节点;ctx.effect 的 dispose 会移除注入样式与节点。
  4. 窗口拖动:侧栏顶部两行为 data-window-drag 拖拽区;浮层打开时临时改为 no-drag,避免浮层挡住拖动,仍靠顶部空白区域拖窗。

与其它改侧栏的插件可能争用同一批 DOM 与 CSS 优先级,已有同类插件时建议只保留一个。

安装与卸载

插件以当前 DSH 进程的权限在浏览器端运行;安装前建议查看 GitHub 仓库 源码与 MIT 许可证。

从 npm(发布后)安装 web profile:

dsh plugin --profile web add dsh-compactui

从本地目录或 tgz:

dsh plugin --profile web add file:C:/path/to/dsh-compactui
dsh plugin --profile web add C:/path/to/dsh-compactui-0.5.11.tgz

装完后刷新页面(桌面版可在 DevTools 执行 location.reload(),或重启 DSH)。

卸载:

dsh plugin --profile web remove dsh-compactui

卸载后侧栏立即恢复宿主原样;localStorage 可能仍保留 dsh-compactui:pinned 与 dsh-compactui:promoted,需要时可手动清除。

典型用法

本插件没有独立配置文件,使用方式就是安装启用后,在侧栏上按界面操作:

  1. 常用插件入口:打开菜单浮层 → 点 + 固定到「新会话」下方 → 不常用时点 − 收回。
  2. 找历史会话:点搜索图标 → 输入过滤 → Enter 打开第一条,或 Esc / ✕ 退出。
  3. 固定会话:在置顶区管理;折叠工作区项目后,置顶项仍应来自本地记录显示(依赖会话标题匹配)。

适用场景与限制

适合:长期在 DSH 桌面 Web 界面工作、希望侧栏更紧凑、愿意把次要入口收到浮层里的开发者。

需注意:

  • 置顶与常驻行均按文案匹配;会话或入口改名后,旧记录不会自动跟随,需重新置顶或用减号收回无效常驻行。
  • 会话被彻底删除后,对应置顶记录只能通过条目 ✕ 手动清除。
  • 依赖宿主侧栏结构与 aria-label 文案;大版本 UI 变更后可能要更新插件。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;DSH 仍遵循「一切皆插件」的扩展方式。

结尾

经过上面的步骤,dsh-compactui 把 DSH 左侧栏收成「顶栏 Logo + 内联搜索 + 浮层收纳插件入口 + 可持久置顶」的布局,改动集中在客户端脚本,卸载可退回原生侧栏。进一步了解可打开目录页 https://www.skillhub.cn/plugins/ifengz/dsh-compactui 与仓库 https://github.com/ifengz/dsh-compactUI。

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

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

小夜