dsh-widthkeeper
Manifest valid★ 1Session Content Column Guardian: DeepSeek Harness width control plugin, supporting sliders, precise input, automatic value reading, and collapsible controls.
dsh-widthkeeper
GitHub:https://github.com/YuLaiZ/dsh-widthkeeper
会话内容列的守宽人。给 DeepSeek Harness 的 Web / 桌面客户端一个可以精确控制的会话内容列宽度:输入框下方一根滑杆,钉住宽度后还能收起控件,固定模式下正文两侧那条容易误触的拖拽手柄也会隐藏。
解决的问题
Harness 内置的宽度手柄是一条悬停在正文列外侧才显形的 2px 竖线,热区只有 10px 宽、和内容列一样高,很容易误触;默认宽度由 clamp(680px, 列宽 × 64%, 920px) 这类公式给出,随列宽按比例变化。拖动后宿主会记住像素偏好,但想稳定落到某个精确值仍要反复试探。
本插件把宽度控制变成一个可见、可输入、可固定的偏好:写入 --dsh-chat-content-width,并在固定模式下隐藏原生手柄,避免「拖了没反应」的困惑。
功能
- 点击值按钮直接输入精确宽度,不吸附滑杆步进
- 自动模式悬停值按钮,显示实际生效宽度与来源
- 设置页「内容宽度」分区:显示 / 隐藏控件、输入宽度、恢复默认
- 固定宽度后收起输入框下方的控件,宽度仍然生效
范围只限主会话:右侧栏子会话保持宿主自己的响应式宽度,插件不接管、也不在其中显示控件。
安装
DSH 插件页「添加插件」,可从 GitHub 或 npm 安装:
- GitHub:
github:YuLaiZ/dsh-widthkeeper - npm:
@yulaiz/dsh-widthkeeper
Web 版与桌面版各自独立安装,profile 互不相通:
| 客户端 | profile | 安装方式 |
|---|---|---|
Web(dsh web) | ~/.dsh/profiles/web | 插件页「添加插件」,装完点「Enable now」即生效,无需重启 |
| 桌面版(App) | ~/.dsh/profiles/desktop | 插件页「添加插件」,装完完全退出并重开一次 DSH(命令行安装会被拒绝) |
如果已经安装其他宽度控制类插件,请先禁用它或从 profile 卸载,再安装本插件——同时启用会争抢同一条宽度轴,互相覆盖宽度和手柄状态。
使用
- 滑杆:拖动即固定为该宽度(640–2000px,步进 10)。
- 值按钮:显示当前宽度,点击行为随模式不同:
- 固定态:展开内联编辑层输入精确宽度。
Enter/ 失焦提交,Esc取消;超出 640–2000 夹取到边界,空值或非数字回退原值。层内可「使用自动宽度」。 - 自动态:固定为上次宽度。
- 固定态:展开内联编辑层输入精确宽度。
- 自动读数:自动模式悬停值按钮显示
自动 · 836px(已手动调整 / 默认公式),随窗口、会话切换与元素替换刷新。 - 设置页:插件页之后的「内容宽度」分区提供:
- 显示 / 隐藏输入框下方的控件
- 输入宽度(自动模式下禁用,需先点「切回固定宽度」)
- 「当前自动宽度」:自动模式显示实际读数,无可用会话时显示占位;固定模式显示「—(固定宽度生效中)」
- 一键恢复默认:只清本插件的三个偏好键,不动宿主的拖拽偏好
工作原理
宽度轴 --dsh-chat-content-width 由会话主体元素自己声明,从 :root 设值无效。插件用优先级更高的样式规则覆盖它,并在固定模式下隐藏原生手柄;规则在插件激活期间常驻,不随控件显隐或宿主重新挂载而失效。自动模式移除规则,完全回到 Harness 默认行为。
偏好存在浏览器 localStorage:dsh.widthkeeper.enabled / dsh.widthkeeper.value / dsh.widthkeeper.dockVisible。
兼容性
- 要求 DSH
>=0.2.0-rc.1(engines.dsh),Web 与桌面客户端均支持 - 更新的 DSH(0.3 及以上)允许安装;实际兼容性以运行结果为准,插件不锁定具体宿主版本,宿主改版可能使宽度控制失效
- 插件依赖宿主的会话主体元素、宽度轴和手柄标记。宿主 UI 改版若重命名这些结构,插件会静默失效(宽度控制没有效果)或把嵌入式子会话误当主会话(固定宽度压到侧栏、自动读数落到侧栏),此时在插件页关闭本插件、等待更新即可;自动模式下使用输入框下方的控件时,控制台会告警一次提示结构变化(设置页不告警,因为它可能本就不挂载会话)
- 悬浮说明依赖宿主
@deepseek-ai/dsh-client-ui-primitives的Tooltip(与上下文徽标同组件),不再使用原生title;宿主未提供该组件时不显示悬浮提示,控件仍可用
开发
克隆后用插件页「添加插件」填 link:/你的克隆目录(软链安装,改源码立即生效),即可直接在仓库里改:
- 只改
src/client.js:Web 版刷新页面生效;桌面版(Electron)没有可用的应用内刷新入口,需完全退出并重开 DSH。 - 改
package.json/cordis.patch.yml或重新安装 bundle:Web 版重新执行dsh web;桌面版退出并重开。 - 桌面版与 Web 版可以同时
link:同一个克隆目录,改一份代码;两端按上面的方式各自重新加载(Web 刷新、桌面重开)。
不要用 file: 前缀:pnpm 会把目录收进 .pnpm 虚拟 store 作为副本,改源码不会传到 node_modules,热改失效。
变更记录
各版本的变更与升级影响见 CHANGELOG。
来源与致谢
本仓库的代码基线来自 Jinngoo/dsh-conversation-width 0.1.3(MIT,作者 jinngoo)。在此基础上重命名、扩展功能并独立维护;原作者版权声明保留在 LICENSE。
许可证
MIT,见 LICENSE。
Comments
Loading…
From the same category
by anywhere-labs
为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 20k
↓ 145/wk
MIT
TypeScript
Aug 25, 2026
dsh plugin --profile web add dsh-plugin-desktopA collection of independent Web UI plugins and skins, including task boards, Git graphs, mobile access, and live token stats.
★ 8.6k
↓ 156/wk
Apache-2.0
TypeScript
dsh plugin --profile web add dsh-webby zhu1090093659
DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
★ 6k
↓ 156/wk
Apache-2.0
TypeScript
Aug 25, 2026
dsh plugin --profile web add dsh-webby omdsh-dev
开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git,
★ 2.9k
↓ 83.6k/wk
MIT
TypeScript
Aug 25, 2026
dsh plugin --profile web add dsh-better-sidebarby alvinunreal
Local first, desktop companion platform with animated pets, plugin SDK and coding-agent integrations.
★ 1.1k
↓ 230/wk
MIT
TypeScript
Aug 25, 2026
dsh plugin --profile web add @open-pets/dshby agentrq
AgentRQ: Human-in-loop realtime conversational task manager for AI Agents. Self-hosted! Control your own agents from wherever you want Mobile, Web, Desktop. Designed to work well with your own Claude
★ 1.1k
↓ 46/wk
Apache-2.0
JavaScript
Aug 24, 2026
dsh plugin --profile web add @agentrq/dsh-plugin-agentrq