dsh-hide-sidebar:窄屏 Web 下把侧栏收成顶部抽屉

前言

DeepSeek Harness(dsh)的 Web GUI 在窄视口下仍会保留一条约 56px 宽的折叠图标轨(icon rail)。对话页和插件管理等面板因此少掉约七分之一的横向空间;侧栏展开时,主内容区还会被压到很窄。若你主要在手机或窄浏览器窗口里用 Harness,这种固定占位和列内挤压并不友好。

下面介绍社区插件 dsh-hide-sidebar(维护者 winniesi):在帧宽小于 1024px 时,去掉常驻图标轨,改为顶部按钮唤出侧栏,侧栏以抽屉形式叠在内容之上;宽屏行为与官方 ui-layout 一致,不做改动。

这是什么

dsh-hide-sidebar 是面向 DeepSeek Harness Web 客户端 的插件(分类:客户端)。它只改前端布局与交互,不碰模型、文件系统或传输层;宿主侧 index.js 刻意保持为空,逻辑集中在 client.js。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录独立于 DeepSeek / 幻方,并非官方应用商店。安装前建议自行查看源码与许可证。

核心功能

窄屏(帧宽小于 1024px)

断点与 ui-layout 自带的自动折叠一致:1024px。比较的是帧的实测宽度,与 ui-layout 使用同一测量方式,避免 JS 与 CSS 模式不一致。

状态 安装前 安装后
折叠 56px 图标轨常驻,占去约七分之一屏宽 图标轨消失,内容区占满宽度
展开 侧栏占一列,主内容被挤到约 110px 侧栏为抽屉(宽度跟随网格第一轨,非写死 280px),叠在内容上,内容保持原宽
打开 轨上的小箭头 左上角按钮:对话页在 conversation.header.leading;其他面板在帧左上角浮动,面板根节点预留 40px 透明左边距
关闭 再点箭头 遮罩(scrim)、侧栏自带折叠控件,或选中会话 / 切换面板 / 点链接等导航类操作

最后一项是刻意设计:抽屉在选中会话后应自动收起,否则刚选中的内容仍被挡住。插件通过稳定 DOM 钩子(如 data-row-key、data-slot、aria-expanded、aria-haspopup)判断「这次点击是导航还是展开控件」,而不是靠生成类名或文案。

  • 会关闭抽屉:选会话、切到全局面板(如 Plugins)、Settings、New Session、链接等。
  • 保持打开:打开子 UI 的控件(如 Command Code 配额卡片展开、会话操作菜单、会话搜索、Workspace 分组行)以及行内嵌套操作(归档、置顶);点空白区域也不关。

侧栏组件树、滚动位置与 portal 不会卸载,不会出现第二份会话列表或状态丢失。

宽屏(≥ 1024px)

插件处于惰性状态:不渲染顶部按钮,布局规则仅在 html[data-dsh-hide-sidebar] 下生效(该属性只在实测宽度低于断点时写入)。侧栏仍停靠、可拖拽宽度、可折叠,与官方一致。

遮罩与层级

遮罩挂在帧的 shell.overlay,使用应用自带的 modal 遮罩 token(如 --dsw-alias-bg-mask-1、--dsw-mask-blur),深浅色随主题。抽屉 z-index 30,遮罩层 20,只 dim 内容,不 dim 抽屉。

实现要点(便于排查)

  • 开关复用 ui-layout 的 ctx.layout.toggleSidebar(),状态读 data-sidebar-collapsed,不重复存储。
  • 网格第一轨用 CSS 压成 0px,侧栏列仍为 grid 项;抽屉通过 translateX 滑入滑出(约 0.26s),关闭时为 translateX(-101%)。
  • 图标为从 @deepseek-ai/dsh-client-ui-primitives 复制的 IconPanelLeftOutlineRegular 快照,避免 profile 安装的插件依赖 dsh 内部包导致 Web 启动失败。

安装与启用

依赖 dsh 版本范围:>= 0.2.0-rc.1 且 < 0.3.0-0(须写明 prerelease;^0.2.0 不能匹配 0.2.0-rc.2)。安装与启动时会通过 peerDependencies 校验。

Web 环境:

# 从 GitHub 安装
dsh plugin --profile web add github:winniesi/dsh-hide-sidebar

# 或本地目录(pnpm 会创建 link,改 client.js 后刷新页面即可)
dsh plugin --profile web add /path/to/dsh-hide-sidebar

安装完成后刷新浏览器页面即可,一般无需重启 dsh。

卸载:

dsh plugin --profile web remove dsh-hide-sidebar

桌面 Electron 应用:在 Settings → Plugins → Add plugin → Local directory 添加本地目录,之后需重启应用。没有 --profile desktop,该 profile 专属于 Electron 应用。

变更内容 生效方式
client.js(抽屉、按钮、样式、文案) 刷新浏览器
package.json / cordis.patch.yml 通常 live reload 重组
index.js(宿主侧,当前为空) 重启 dsh

典型用法

  1. 在已安装 dsh(版本落在上述范围内)的机器上执行 Web 安装命令。
  2. 打开 Harness Web GUI,将浏览器窗口或手机竖屏宽度调到 1024px 以下(或用开发者工具设备模式)。
  3. 确认左侧不再有 56px 图标轨;点击左上角侧栏按钮,侧栏应从左侧滑入,内容区保持全宽并被遮罩 dim。
  4. 在抽屉中点击某个会话或进入 Plugins 等面板,抽屉应收起;在侧栏底部展开 Command Code 配额卡片时,抽屉应保持打开。
  5. 将窗口拉宽到 1024px 及以上,确认无顶部切换按钮,侧栏行为与未装插件时相同。

右侧面板在手机全屏打开时,浮动按钮会隐藏(该面板自有折叠控件,且打开右栏时窄屏侧栏已折叠)。

适用场景与注意

适合谁

  • 经常在手机或窄浏览器里用 dsh Web GUI 的开发者或使用者。
  • 希望窄屏下对话与插件管理页尽量占满宽度,而不是长期让 56px 轨占位的人。

注意事项

  • 插件仅在 Web profile 下通过 cordis.patch.yml 注入客户端;宿主 index.js 不执行业务逻辑,但安装仍会在 Loader 中占一行插件记录。
  • 插件以当前 dsh 进程权限 运行;虽本插件不改后端,安装任意社区插件前仍应阅读源码与 MIT 许可证。
  • 要求 Node.js >= 18(见 package.json engines)。
  • GitHub 仓库星标为 0(截至社区目录线索),不代表质量结论,仅作生态可见度参考。

结尾

dsh-hide-sidebar 把 Harness Web 在窄屏下的侧栏从「常驻窄轨 + 列内挤压」改成「全宽内容 + 按需抽屉」,并与 ui-layout 共用开关状态与 1024px 断点;宽屏零干扰。若你需要在移动端更顺畅地切会话、进插件页,可按上文命令安装并刷新页面验证。

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

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

Xiaoye