dsh-widthkeeper:给 DeepSeek Harness 会话内容列加一根可控的「守宽人」

前言

DSH 的会话内容列宽度由宿主内置的一条 2px 竖线手柄控制。这条手柄悬停在正文列外侧才显形,热区只有 10px 宽、和内容列一样高,拖动时很容易误触;默认宽度由 clamp(680px, 列宽 × 64%, 920px) 这类公式给出,随列宽按比例变化,想稳定落到某个精确像素值,往往要反复试探。拖动后宿主虽然会记住像素偏好,但缺少可见、可输入的宽度入口。

下面介绍一个针对这个问题的客户端插件:YuLaiZ 维护的 yulaiz/dsh-widthkeeper。它把宽度控制做成可见、可输入、可固定的偏好,写入 --dsh-chat-content-width,并在固定模式下隐藏原生手柄。

这是什么

dsh-widthkeeper 是 DeepSeek Harness 的 Web / 桌面客户端插件,定位是「会话内容列的守宽人」。维护者为 YuLaiZ,分类为客户端插件,许可证 MIT,当前版本 0.2.1,要求 DSH >=0.2.0-rc.1。

它的代码基线来自 Jinngoo 的 dsh-conversation-width 0.1.3,在此基础上重命名、扩展功能后独立维护,原作者版权声明保留在仓库的 LICENSE 中。

核心功能

插件提供四种能力,都只作用于主会话,右侧栏子会话保持宿主自己的响应式宽度,插件不接管、也不在其中显示控件。

1、滑杆。输入框下方一根滑杆,拖动即固定为该宽度,范围 640–2000px,步进 10。

2、精确输入。值按钮显示当前宽度,点击后按模式展开不同行为:

固定态   展开内联编辑层,输入精确宽度。Enter / 失焦提交,Esc 取消
         超出 640–2000 会夹取到边界,空值或非数字回退原值
         层内提供「使用自动宽度」选项
自动态   固定为上次宽度

3、自动读数。自动模式悬停值按钮,显示 自动 · 836px(已手动调整 / 默认公式),读数随窗口、会话切换与元素替换刷新。

4、设置页分区。插件页之后新增「内容宽度」分区,提供显示 / 隐藏控件、输入宽度、查看当前自动宽度、一键恢复默认。恢复默认只清本插件的三个偏好键,不动宿主的拖拽偏好。固定宽度后可以收起输入框下方的控件,宽度仍然生效。

安装与启用

在 DSH 插件页点「添加插件」,可从 GitHub 或 npm 安装:

github:YuLaiZ/dsh-widthkeeper
@yulaiz/dsh-widthkeeper

Web 版与桌面版各自独立安装,profile 互不相通:

客户端 profile 安装方式
Web(dsh web) ~/.dsh/profiles/web 插件页「添加插件」,装完点「Enable now」即生效,无需重启
桌面版(App) ~/.dsh/profiles/desktop 插件页「添加插件」,装完完全退出并重开一次 DSH(命令行安装会被拒绝)

如果已经安装其他宽度控制类插件,先禁用它或从 profile 卸载,再安装本插件——同时启用会争抢同一条宽度轴,互相覆盖宽度和手柄状态。

典型用法

日常使用的完整链路是:拖滑杆定宽 → 点击值按钮确认当前宽度 → 需要精确值时在内联编辑层输入数字提交 → 定下来之后在设置页隐藏控件保持界面干净。自动模式下想回到固定宽度,需要在设置页点「切回固定宽度」,输入框才会重新可用。

开发调试时,插件支持软链安装,改源码立即生效:

link:/你的克隆目录

仓库里改代码的注意点:

  • 只改 src/client.js:Web 版刷新页面生效;桌面版没有应用内刷新入口,需完全退出并重开 DSH。
  • 改 package.json / cordis.patch.yml 或重新安装 bundle:Web 版重新执行 dsh web;桌面版退出并重开。
  • 不要用 file: 前缀:pnpm 会把目录收进 .pnpm 虚拟 store 作为副本,改源码不会传到 node_modules,热改失效。

工作原理

宽度轴 --dsh-chat-content-width 由会话主体元素自己声明,从 :root 设值无效。插件用优先级更高的样式规则覆盖它,并在固定模式下隐藏原生手柄;规则在插件激活期间常驻,不随控件显隐或宿主重新挂载而失效。自动模式移除规则,完全回到 Harness 默认行为。

偏好存在浏览器 localStorage:

dsh.widthkeeper.enabled      // 是否启用
dsh.widthkeeper.value        // 固定宽度值
dsh.widthkeeper.dockVisible   // 输入框下方控件是否显示

插件依赖宿主的会话主体元素、宽度轴和手柄标记。宿主 UI 改版若重命名这些结构,插件会静默失效(宽度控制没有效果)或把嵌入式子会话误当主会话(固定宽度压到侧栏),此时在插件页关闭本插件、等待更新即可。悬浮说明依赖宿主 @deepseek-ai/dsh-client-ui-primitives 的 Tooltip,宿主未提供该组件时不显示悬浮提示,控件仍可用。

适用场景与注意

适合需要长期固定会话内容列宽度、靠精确像素对齐界面的 DSH 用户,尤其是 Web 版和桌面版都使用、希望两边一致控制的人。

使用时注意三点:

1、插件以当前 DSH 进程权限运行,安装前应检查插件源码与 MIT 许可证。
2、安装前确认没有其他宽度控制类插件同时启用。
3、宿主改版可能使宽度控制失效,插件不锁定具体宿主版本。

结尾

dsh-widthkeeper 做的事情很窄:把 DSH 会话内容列宽度从「悬停细手柄 + 公式默认值」变成一根可见的滑杆加一个可精确输入的值按钮,定宽后随手收起。功能只覆盖主会话,但正好补上了原生手柄不好用、默认宽度不好控制的那块。

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

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

小夜