dsh-settings-resizable:讓 DeepSeek Harness 設置窗口可拖拽縮放並記住尺寸

前言

在 DeepSeek Harness(DSH)裏改配置,往往要長時間停在設置對話框裏翻導航和選項。客戶端默認給出的設置窗尺寸是固定的,左側導航列寬度也寫死在殼層樣式裏;窗口偏大或偏小時只能將就,導航區和內容區誰寬誰窄也無法按個人習慣微調。社區插件生態裏常見做法是改殼層或寫依賴構建產物的腳本,殼層一更新就容易失效。

下面介紹維護者 oover120 發佈的客戶端插件 dsh-settings-resizable(當前版本 0.2.0,MIT 許可證,零 npm 依賴)。它只做 Web UI 裝飾:在設置模態框上增加拖拽手柄和導航分隔條,把用戶選擇的寬高寫入 localStorage,並在每次變更時把尺寸限制在視口內;不替換應用根節點、不追加第二套應用,也不依賴帶 hash 的 class 名作錨點。

這是什麼

dsh-settings-resizable 是運行在 DSH 客戶端側的本地插件,宿主側(Host) intentionally 爲空,行爲全部在 client.js 中實現。README 標明適配 DeepSeek Harness 0.2.2-rc.1+。在 SkillHub 目錄 中分類爲客戶端;GitHub 倉庫地址爲 oover120/dsh-settings-resizable,星標數爲 0(以目錄頁展示爲準)。

插件通過穩定選擇器 [data-shortcut-modal="settings"] 定位設置對話框。若模態存在但缺少該屬性,插件會打一條 warning 並保持靜默,不會猜測別的 DOM 節點。

核心功能

外框八向縮放

掛載時在對話框邊緣和四角追加八個 pointers 手柄(data-dsh-settings-resizable,類名 dsh-sr-handle dsh-sr-<direction>)。在因 overlay 居中導致「改寬度 N 像素只讓每邊動 N/2」的前提下,插件對水平、豎直位移做 ×2 補償,使光標下的邊與指針同速移動。

拖拽在 window 上跟蹤 pointermove / pointerup / pointercancel;若 pointerup 在窗口外丟失,下一次 pointermove 會通過 event.buttons 結束拖拽。寬和高以 inline width / height 寫在對話框上,居中與 grid 仍由殼層樣式負責。

導航列與分隔條

設置窗 grid 爲 "title header" / "nav options" 兩列布局。插件不改 grid 區域定義,而是通過 inline grid-template-columns: <navWidth>px minmax(0, 1fr) 和 CSS 變量 --dsh-sr-nav-width 調整導航列寬;選項列至少保留 320 px,分隔條不會把內容區擠沒。

窄視口全屏佈局、以及標題欄/Electron 下不 dock 的佈局裏,插件會自動交出控制權:去掉 inline 樣式、手柄和分隔條,對話框保持全屏。

鍵盤、持久化與邊界

  1. 聚焦手柄或分隔條後,方向鍵以 16 px 步進改尺寸。
  2. 尺寸寫入 localStorage 鍵 dsh-settings-resizable:v1,值爲 { width, height, navWidth }。
  3. 最小外框 480 × 400 px;最大寬高按當前視口計算,並在對話框尺寸變化時重新約束導航列寬。

可訪問性與國際化

手柄爲 role="separator",帶本地化 aria-label、方向屬性與可見焦點環;東、南、東南手柄與導航分隔條爲 tabindex="0",其餘手柄爲 tabindex="-1" 以免 Tab 連停八次。通過 DSH locale 服務註冊 zh、en(及 README 中的 ru)文案。

生命週期

用 MutationObserver 監聽文檔,在設置窗再次打開時重新掛載,無輪詢。關閉或頁面卸載時移除監聽、定時器、手柄與注入樣式,並在拆卸前刷新待執行的防抖保存。

安裝與啓用

插件以當前 DSH 進程的權限運行。安裝前應自行閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認符合你的安全策略。

SkillHub 目錄給出的安裝方式爲交給 Harness 處理,示例表述如下(與目錄頁一致,非憑空拼接的 CLI):

請安裝 DSH 插件 oover120/dsh-settings-resizable。

按你本地 DSH 的插件安裝流程執行上述安裝請求即可。package.json 中 dsh.client 配置爲 Web 平臺、immediately: true,客戶端插件會在符合條件時儘早加載。

典型用法

無需額外配置文件或環境變量。完成安裝後:

  1. 打開 DSH 設置對話框(插件錨定 [data-shortcut-modal="settings"])。
  2. 在視口大於 dock 佈局斷點(README 中 injected 規則爲 width > 767px)時,拖動八向手柄改變整體寬高,或拖動導航與選項之間的豎條改變導航列寬。
  3. 需要精細調整時,用 Tab 聚焦東/南/東南手柄或分隔條,用方向鍵以 16 px 步進修改。
  4. 關閉設置窗後再次打開,或刷新頁面後打開,尺寸應從 dsh-settings-resizable:v1 恢復。

README 截圖中的參考環境:默認視口 1408 × 797 時對話框約 800 × 749 px;拖動右邊與底邊後尺寸會跨重載保持;導航列可拉到例如 308 px,選項列在旁重排。

適用場景與注意

適合誰: 經常在 DSH 裏調配置、希望設置窗和左側導航寬度貼合個人屏幕與習慣的用戶;只需要純前端裝飾、希望殼層小版本更新後仍能靠穩定 data-* 錨點工作的場景。

不適合或會自動退出的情況: 全屏/narrow 佈局下插件會移除裝飾,行爲與未安裝時一致;若殼層去掉 data-shortcut-modal="settings",插件僅告警而不生效,需等待作者適配或 fork。

權限與安全: 插件讀寫瀏覽器 localStorage,注入樣式與 DOM 節點,權限範圍與 DSH 客戶端相同。它不替換應用根、不加載額外 npm 依賴,但仍屬第三方代碼,務必以源碼爲準做審查。

生態說明: DSH 社區目錄 SkillHub 是獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝來源以目錄頁與 GitHub 倉庫爲準。

結尾

dsh-settings-resizable 用零依賴的客戶端補丁,把設置對話框變成可拖拽、可鍵盤微調、可記住尺寸且不超過視口的界面,並在全屏殼層佈局下自動讓位。若你需要可復現的尺寸記憶而非改殼層 CSS,可按 SkillHub 指引安裝 oover120/dsh-settings-resizable。

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

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

小夜