前言¶
在 macOS 上,DSH Desktop 是一个 hiddenInset 窗口,没有原生标题栏,窗口拖拽完全依赖页面中通过 -webkit-app-region: drag 声明的区域。壳层会将 Chrome 行标记为 data-window-drag,ui-web 的 base.css 将其转换为拖拽规则。然而,页面中大量的交互式 no-drag 选择器(如按钮、[tabindex] 容器、ARIA 组件)会覆盖这些标记。只要有一个 no-drag 元素与 Chrome 行重叠,就会减去该区域的拖拽能力,最终导致顶部拖拽区域变得极窄,无法正常拖动。
这是什么¶
dsh-window-drag-probe 是一个 DeepSeek Harness (DSH) 客户端插件,由 adamcjm 维护。它通过在 document.body 追加 DOM 元素来恢复 macOS DSH Desktop 的窗口拖拽功能,并提供一个诊断面板,用于读取窗口的 DOM 状态(如 computed app-region、recall 标记、窗口位移记录)以排查拖拽失效的原因。
核心功能¶
该插件具备以下能力:
- 顶部拖拽带:在窗口顶部添加一个 16px 宽的透明拖拽带。该元素以文档流最后一位插入,并带有内联
app-region: drag样式,确保不会被页面中较早的no-drag元素覆盖。 - 诊断面板:提供一个悬浮面板,读取并展示以下信息:
- 平台标记(
data-platform)。 - Chrome 行的 computed
app-region值。 recall标记状态。- 窗口位移记录(
window.screenX/screenY)。 - 所有
app-region盒子及其文档顺序。 - 顶部可拖性矩阵与采样点命中链。
- 平台标记(
- 本地读取:仅读取本地 DOM 状态,不向外部发送任何数据。
安装与启用¶
在安装前,请确认 DSH Desktop 版本。该插件已验证在 DSH Desktop 0.2.0-rc.2 / Electron 44.0.0 上运行。DSH 客户端 API 不向前兼容,如果宿主版本与验证版本不同,可能导致崩溃。
通过命令行安装(需要指定 profile):
dsh plugin --profile <profile> add dsh-window-drag-probe
安装完成后,需要完全退出 DSH Desktop(使用 ⌘Q)并重新打开,因为客户端 bundle 仅在启动时组装一次。
典型用法¶
启用插件后,窗口顶部 16px 区域即为拖拽带。该区域在静止时完全透明,仅在鼠标悬停时显示微弱的蓝色提示。
通过插件页面打开诊断面板,可以使用以下按钮进行操作:
1. 重新采集:刷新诊断数据。
2. 插入/移除顶部拖拽带:动态调整拖拽带的存在状态。
3. 复位位置:恢复面板默认位置。
4. 隐藏面板:关闭诊断界面。
适用场景与注意¶
- 适用场景:需要解决 macOS DSH Desktop 窗口无法拖拽的问题,或需要通过诊断面板查看
app-region渲染细节的开发者。 - 注意事项:
- 该插件仅作为变通方案和诊断工具,并非上游修复。如果矩阵显示可拖拽但仍无法移动,说明问题不在页面 DOM 层,需等待上游修复。
- 插件声明无硬服务依赖(
inject: []),不会因缺少服务而挂起。 - 插件遵循 MIT 许可证。
短结尾¶
dsh-window-drag-probe 通过简单的 DOM 追加解决了 macOS 下的 CSS 优先级导致的拖拽失效问题,并提供了直观的调试视图。对于遇到拖拽异常的开发者,这是一个可靠的排查与修复工具。