前言¶
在 DeepSeek Harness(DSH)里改配置,往往要长时间停在设置对话框里翻导航和选项。客户端默认给出的设置窗尺寸是固定的,左侧导航列宽度也写死在壳层样式里;窗口偏大或偏小时只能将就,导航区和内容区谁宽谁窄也无法按个人习惯微调。社区插件生态里常见做法是改壳层或写依赖构建产物的脚本,壳层一更新就容易失效。
下面介绍维护者 oover120 发布的客户端插件 dsh-settings-resizable(当前版本 0.2.0,MIT 许可证,零 npm 依赖)。它只做 Web UI 装饰:在设置模态框上增加拖拽手柄和导航分隔条,把用户选择的宽高写入 localStorage,并在每次变更时把尺寸限制在视口内;不替换应用根节点、不追加第二套应用,也不依赖带 hash 的 class 名作锚点。
这是什么¶
dsh-settings-resizable 是运行在 DSH 客户端侧的本地插件,宿主侧(Host) intentionally 为空,行为全部在 client.js 中实现。README 标明适配 DeepSeek Harness 0.2.2-rc.1+。在 SkillHub 目录 中分类为客户端;GitHub 仓库地址为 oover120/dsh-settings-resizable,星标数为 0(以目录页展示为准)。
插件通过稳定选择器 [data-shortcut-modal="settings"] 定位设置对话框。若模态存在但缺少该属性,插件会打一条 warning 并保持静默,不会猜测别的 DOM 节点。
核心功能¶
外框八向缩放¶
挂载时在对话框边缘和四角追加八个 pointers 手柄(data-dsh-settings-resizable,类名 dsh-sr-handle dsh-sr-<direction>)。在因 overlay 居中导致「改宽度 N 像素只让每边动 N/2」的前提下,插件对水平、竖直位移做 ×2 补偿,使光标下的边与指针同速移动。
拖拽在 window 上跟踪 pointermove / pointerup / pointercancel;若 pointerup 在窗口外丢失,下一次 pointermove 会通过 event.buttons 结束拖拽。宽和高以 inline width / height 写在对话框上,居中与 grid 仍由壳层样式负责。
导航列与分隔条¶
设置窗 grid 为 "title header" / "nav options" 两列布局。插件不改 grid 区域定义,而是通过 inline grid-template-columns: <navWidth>px minmax(0, 1fr) 和 CSS 变量 --dsh-sr-nav-width 调整导航列宽;选项列至少保留 320 px,分隔条不会把内容区挤没。
窄视口全屏布局、以及标题栏/Electron 下不 dock 的布局里,插件会自动交出控制权:去掉 inline 样式、手柄和分隔条,对话框保持全屏。
键盘、持久化与边界¶
- 聚焦手柄或分隔条后,方向键以 16 px 步进改尺寸。
- 尺寸写入
localStorage键dsh-settings-resizable:v1,值为{ width, height, navWidth }。 - 最小外框 480 × 400 px;最大宽高按当前视口计算,并在对话框尺寸变化时重新约束导航列宽。
可访问性与国际化¶
手柄为 role="separator",带本地化 aria-label、方向属性与可见焦点环;东、南、东南手柄与导航分隔条为 tabindex="0",其余手柄为 tabindex="-1" 以免 Tab 连停八次。通过 DSH locale 服务注册 zh、en(及 README 中的 ru)文案。
生命周期¶
用 MutationObserver 监听文档,在设置窗再次打开时重新挂载,无轮询。关闭或页面卸载时移除监听、定时器、手柄与注入样式,并在拆卸前刷新待执行的防抖保存。
安装与启用¶
插件以当前 DSH 进程的权限运行。安装前应自行阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全策略。
SkillHub 目录给出的安装方式为交给 Harness 处理,示例表述如下(与目录页一致,非凭空拼接的 CLI):
请安装 DSH 插件 oover120/dsh-settings-resizable。
按你本地 DSH 的插件安装流程执行上述安装请求即可。package.json 中 dsh.client 配置为 Web 平台、immediately: true,客户端插件会在符合条件时尽早加载。
典型用法¶
无需额外配置文件或环境变量。完成安装后:
- 打开 DSH 设置对话框(插件锚定
[data-shortcut-modal="settings"])。 - 在视口大于 dock 布局断点(README 中 injected 规则为
width > 767px)时,拖动八向手柄改变整体宽高,或拖动导航与选项之间的竖条改变导航列宽。 - 需要精细调整时,用 Tab 聚焦东/南/东南手柄或分隔条,用方向键以 16 px 步进修改。
- 关闭设置窗后再次打开,或刷新页面后打开,尺寸应从
dsh-settings-resizable:v1恢复。
README 截图中的参考环境:默认视口 1408 × 797 时对话框约 800 × 749 px;拖动右边与底边后尺寸会跨重载保持;导航列可拉到例如 308 px,选项列在旁重排。
适用场景与注意¶
适合谁: 经常在 DSH 里调配置、希望设置窗和左侧导航宽度贴合个人屏幕与习惯的用户;只需要纯前端装饰、希望壳层小版本更新后仍能靠稳定 data-* 锚点工作的场景。
不适合或会自动退出的情况: 全屏/narrow 布局下插件会移除装饰,行为与未安装时一致;若壳层去掉 data-shortcut-modal="settings",插件仅告警而不生效,需等待作者适配或 fork。
权限与安全: 插件读写浏览器 localStorage,注入样式与 DOM 节点,权限范围与 DSH 客户端相同。它不替换应用根、不加载额外 npm 依赖,但仍属第三方代码,务必以源码为准做审查。
生态说明: DSH 社区目录 SkillHub 是独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以目录页与 GitHub 仓库为准。
结尾¶
dsh-settings-resizable 用零依赖的客户端补丁,把设置对话框变成可拖拽、可键盘微调、可记住尺寸且不超过视口的界面,并在全屏壳层布局下自动让位。若你需要可复现的尺寸记忆而非改壳层 CSS,可按 SkillHub 指引安装 oover120/dsh-settings-resizable。