dsh-plugin-settings-float
把 DeepSeek Harness 的设置弹窗变成可拖动、可八向拉伸的浮窗,改设置时不再遮住聊天。
官方设置界面是带全屏遮罩的居中模态:一打开就盖住整个对话,还不能移动。本插件不改官方 bundle,只在设置弹窗挂载后做运行期增强——去掉遮罩、把面板提成浮窗,可以拖标题栏移动、从任意一条边或角拉伸。
> ⚠️ 这是基于 DOM 结构的增强,针对当前 DSH 设置外壳实现。上游 bundle 一律不改;如果 DSH 升级改动了设置弹窗的结构,插件会静默失效(设置页退回原生模态,功能不受影响)。请把它当便利层,而不是官方分叉。
功能
- 可拖动:抓导航标题栏或内容区标题栏,把窗口拖到任意位置。
- 八向拉伸:任意边(↑↓←→)或四角(⤡ ⤢)都能拉,对边保持锚定。
- 聊天不被挡死:去掉深色遮罩、遮罩层不再吞点击,对话在窗口后面依然可见、可点、可滚。
- 记住位置与尺寸:存在
localStorage,按浏览器 profile 生效。 - 快速复位:双击标题栏回默认位置;双击任意拉伸抓手恢复默认尺寸。
- 可配置:默认尺寸、最小尺寸、总开关、点击外部是否关闭,都做成了 DSH 插件配置卡。
安装
dsh plugin --profile <你的profile> add dsh-plugin-settings-float
然后在 profile 的 package.json 里确认它进了 bundles(在 GUI 插件页安装会自动加):
"dsh": {
"profile": {
"bundles": [ "...", "dsh-plugin-settings-float" ]
}
}
必须重启 DSH 宿主——客户端 bundle 在启动时合成,刷新页面不生效。
用法
| 操作 | 效果 |
|---|---|
| 拖导航标题栏 / 内容标题栏 | 移动窗口 |
| 拖任意边或角 | 拉伸(受最小尺寸与视口限制) |
| 双击标题栏 | 位置复位到默认(右侧、垂直居中) |
| 双击拉伸抓手 | 尺寸恢复默认值 |
| Esc / ✕ | 关闭设置(行为不变) |
配置
打开 设置 → 插件 → Settings Float(表单由插件 schema 自动生成),或直接改 profile patch:
- id: settings-float
name: dsh-plugin-settings-float
config:
enabled: true
defaultWidth: 760
defaultHeight: 720
minWidth: 480
minHeight: 320
closeOnOutsideClick: false
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
设为 false 保持原生居中模态 |
defaultWidth / defaultHeight |
760 / 720 |
初始尺寸(用户拉伸过一次后以保存值为准) |
minWidth / minHeight |
480 / 320 |
可拉到的最小尺寸 |
closeOnOutsideClick |
false |
点击窗口后面的聊天时发送 Escape 关闭 |
兼容性
- 在 DSH
0.2.1-rc.3上验证(桌面端与 Web profile 共用同一套设置外壳)。 - 面板定位优先用
role="dialog"+ 设置特有的子节点特征,当前版本的哈希类名只作快速命中,因此类名变化通常只是降级而非报错。 - 需要支持 Web 客户端的 DSH 运行环境(
dsh.clientplatform 为web)。
隐私
- 无网络请求、不改宿主、无遥测。
- 只写两个
localStorage键:dsh.settings-float.pos.v1、dsh.settings-float.size.v1。
开发
npm install
npm test # jsdom 冒烟测试:挂载、八向拉伸、拖动、复位、配置
结构:
lib/index.js 宿主行:插件入口 + Config schema(即配置卡)
lib/client.js 浏览器端:DOM 增强、拖动与拉伸
test/ jsdom 冒烟测试,真实派发指针事件
客户端 bundle 使用 DSH 的客户端模块 ABI(window.__ModuleLoader__.load({ id, factory })),id 必须与包名一致。
许可
MIT