dsh-window-drag-probe: Restoring Window Dragging and Diagnostics in macOS DSH Desktop

前言

在 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 优先级导致的拖拽失效问题,并提供了直观的调试视图。对于遇到拖拽异常的开发者,这是一个可靠的排查与修复工具。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye