前言¶
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