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 爲準。

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

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

小夜