youyou-window-drag:恢复 macOS 桌面版 DSH 窗口顶部拖拽

前言

在 macOS 上使用 DeepSeek Harness(DSH)桌面版时,窗口采用 hiddenInset 样式,没有系统原生标题栏,能否拖动窗口完全依赖页面里 -webkit-app-region: drag 标记的区域。官方 UI 已在 chrome 行上做了 data-window-drag 映射,但在同一份 base.css 里,所有可交互元素又被标成 no-drag。Electron 按文档顺序合成拖拽区,后出现的 no-drag 盒子会从已标记的 drag 区域中扣减,chrome 行上往往只剩几个像素可拖,表现为「顶部几乎拖不动窗口」。youyou-window-drag 是社区维护的客户端插件,在不改官方文件的前提下,在页面顶部补一条通栏拖拽带,把整块窗口拖动的能力找回来。

这是什么

youyou-window-drag(npm 包名同名)由维护者 mryouyouHK 发布,归类为 客户端 插件,许可证 MIT(package.json 标注版本 1.0.0)。它只面向 macOS 上的 DSH Desktop:按住窗口最顶部任意位置往下拖,整个窗口跟着移动。其它平台或浏览器里不插入任何 DOM、也不改变交互——那里没有可拖动的应用窗口,也不应吞掉页面点击。

仓库与目录页:

为什么顶部会拖不动

macOS 桌面版窗口没有原生标题栏。外壳给每条 chrome 行打了 data-window-drag,ui-web 的 base.css 再转成 Darwin 下的 drag 规则,设计本身合理。

冲突来自另一条全局规则:button、a、input、[tabindex] 以及各类 ARIA 控件一律 -webkit-app-region: no-drag。合成时 后出现的 no-drag 会减掉它压到的 drag 区域。真实页面里这类控件数量很多,压在 chrome 行上的部分会把顶部 drag 吃掉,用户侧往往只剩极窄一条缝,看起来像标题栏完全失效。

插件怎么修

插件 不修改官方任何文件,只做一件事:在 <body> 的 最后一个子元素 位置插入一条通栏拖拽带。

  1. 文档顺序在最后:压过页面上所有 no-drag 盒子,顶部这一条始终是 drag 区域。
  2. 高度 16px:在 hiddenInset 红绿灯(约自顶部 18px 起)之上,也在 chrome 行第一条控件之上;其下按钮、输入框、滚动等行为不变。
  3. 视觉:静止时完全透明;悬停时可有一极淡蓝色提示(仅渲染器能收到 hover 时可见)。
  4. 全屏:原生全屏时自动隐藏(全屏窗口本不可拖,顶部也不该拦截点击)。
  5. 平台:data-platform 仅由桌面端 preload 写入,浏览器中不会插入内容。
  6. 幂等:始终只保留一条带;若有新的 <body> 直属子节点挂上,会把拖拽带重新排到末尾。

package.json 中 dsh.client 配置为 platform: "web"、immediately: true,通过 cordis.patch.yml 以 bundle patch 方式接入。

安装与启用

README 给出的 desktop profile 安装方式为本地路径加入(请把路径换成你本机插件源码或检出目录的实际位置;资料中的示例目录名为 window-drag):

# desktop profile(mac app 自己管理的那份)
dsh plugin --profile desktop add /path/to/default-workspace/window-drag

也可手工:将包目录 link 到 ~/.dsh/profiles/desktop/node_modules/youyou-window-drag,并在 ~/.dsh/profiles/desktop/package.json 的 dependencies 与 dsh.profile.bundles 中各加入 youyou-window-drag,然后在该目录执行 pnpm install。

client 包在宿主启动时组装进 bundle。装好后须完整退出应用(⌘Q)再打开;只关窗口或刷新页面不会加载新插件。

安装前建议自行查阅仓库源码与 MIT 许可证。插件随当前 DSH 桌面进程与页面渲染上下文运行,权限边界与宿主一致,不应在未审阅代码的情况下盲信第三方包。

验证用法

人工验证(README 推荐以重启后拖动为准):

  1. 重启后把窗口从全屏或最大化拉回普通大小。
  2. 按住窗口最顶端(红绿灯右侧,或窗口右上角顶部 16px 内)拖动,窗口应整体移动。
  3. 确认顶部以下的按钮、输入框、滚动等行为与安装前一致。

自动冒烟测试(无浏览器、无额外依赖,校验注册契约、拖拽带样式、末位挂载、非 darwin 不插入、卸载清理):

node --test window-drag/test/client-smoke.test.mjs

(路径与 README 一致,需在你本地的插件目录下执行。)

调整与边界

可调参数(改插件内 client.js):

  • 抓取区太窄:将 BAND_HEIGHT 调到 20–24;代价是可能盖住 chrome 行控件上半部分(资料注明按钮约在 y≈10–38)。
  • 不需要悬停提示:删除 HOVER_TINT 相关规则。

已知边界(资料原文):

  • 只解决「拖窗口」,不实现双击缩放或双击最大化等系统标题栏行为。
  • 浏览器里的 Web GUI 不会出现拖拽带。
  • 本机暂无法用渲染层做像素级回归,验收以重启后人工拖动为主。

结尾

若你主要在 macOS DSH Desktop 里工作,又被顶部几乎无法拖动窗口困扰,youyou-window-drag 用一条末尾挂载的 16px 拖拽带,在不动官方 UI 的前提下补回整块窗口移动能力。DSH 生态是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,安装与排错以仓库 README 为准。

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

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

小夜