dsh-window-memory:記住 DSH Desktop 主窗口位置與尺寸

前言

用 DSH Desktop 做日常開發時,主窗口的位置和大小往往會被你按習慣調好;一旦完整退出再打開,客戶端通常會回到默認幾何,又要重新拖一遍。瀏覽器裏打開的 DSH 標籤頁本身沒有可獨立記憶的「應用窗口」,這類需求在 Web 側也天然不存在。下面介紹社區插件 dsh-window-memory:在 DSH Desktop 裏記住主窗口關閉前的位置與尺寸,下次啓動時還原,且不把狀態寫到 Host 側 profile 配置文件裏。

這是什麼

dsh-window-memory 是 DeepSeek Harness(DSH)的第三方插件,維護者爲 notpdpton,在 SkillHub 目錄中歸類爲「記憶」。npm 包名與安裝標識均爲 dsh-window-memory,當前 README 對應版本爲 0.1.1,許可證 MIT。Host 半邊入口 index.js 刻意爲空,功能全部在瀏覽器半邊的 client.js 中完成。

運行環境與限制

插件僅在 DSH Desktop 生效。瀏覽器標籤頁沒有用戶可拖動、可縮放的應用級窗口,插件在那裏按設計不啓動:不恢復、不記錄、不註冊監聽、不寫存儲。

運行時通過 isDesktopShell() 判斷,任一信號成立即視爲 Desktop(不寫死具體平臺值):

信號 說明
location.protocol === 'dsh-app:' 且 hostname === 'app' 主窗口 URL,該 scheme 僅 Desktop 註冊
<html data-platform="…"> Desktop preload 注入
__DSH_HOST_PATHS__ / dshDesktopBoot / dshDesktop preload 兜底標記

package.json 裏 dsh.client.platform 只能是 "web"(DSH 加載器限制),因此 Desktop 限定放在運行時而不是 manifest 開關;dsh.runtime.shell 的 desktop 說明供人閱讀,真正把關的是上述檢測邏輯。

引擎要求:dsh.engines.dsh 爲 >=0.2.0-rc.1。若下界寫高於當前 DSH 版本,插件可能「裝上了卻不加載」且無報錯,安裝後應在「插件」頁確認卡片是否出現。

核心功能

以下能力均來自項目 README 與實現說明。

  1. 重開還原:完整退出 DSH 再打開時,主窗口回到關閉時的位置與尺寸。
  2. 最大化語義:關閉時若處於最大化,下次以最大化之前的矩形打開——最大化視爲臨時狀態,不是用戶選定的擺放。
  3. 單次恢復:每次啓動只恢復一次(sessionStorage 標記 dsh-window-memory:window-restored),頁面內刷新不會覆蓋剛調好的大小。
  4. 尺寸下限:恢復後的尺寸不低於 DSH 原生窗口最小值 520×600。
  5. 多顯示器與越界:保存的位置在所有顯示器都不可見時(例如拔掉副屏)拒絕恢復,避免窗口跑到屏幕外;部分越界則拉回最近的顯示器,尺寸不變。
  6. 存儲位置:不寫 Host 側配置文件;幾何狀態保存在瀏覽器 localStorage,鍵名爲 dsh-window-memory:window-state,文檔字段包括 { v, rect, dpr, maximized, frame, updatedAt }。

工作區文檔即主窗口頂層文檔,插件通過 window.moveTo() / window.resizeTo() 作用於 BrowserWindow;渲染進程讀到的矩形與真實窗口存在固定內縮差,放置是一段對請求值的修正循環,而非一次賦值。更細的設計與限制見倉庫內 docs/window-state.md。

控制方式

插件沒有設置頁、沒有偏好開關。唯一控制是「插件」頁上本插件卡片上的啓用開關:

狀態 行爲
啓用(默認) 記住位置與尺寸,重開時還原
停用 瀏覽器半邊不執行 apply(),既不恢復也不記錄

不存在「插件在運行但功能關閉」的中間狀態。

安裝與啓用

要求:DSH Desktop(瀏覽器中不生效)。

在「插件」頁安裝(推薦)

  1. 打開 設置 → 插件;
  2. 點右上角 添加插件;
  3. 選 安裝第三方插件;
  4. 在「包名或地址」裏填入 dsh-window-memory,點 安裝;
  5. 裝完按提示 重啓 DSH;
  6. 重啓後回到「插件」頁,卡片出現在「已安裝插件」下,標題爲「窗口記憶」,開關默認打開。

調試時可填本地源碼絕對路徑,例如 D:/path/to/dsh-window-memory,與 npm 包名二選一填入同一字段。

手動配置 profile

適合固定版本或離線環境。在 profile 的 package.json 中聲明依賴,並在 dsh.profile.bundles 中加入包名(只加依賴不寫 bundle 時包會被安裝但不會加載):

// <profile>/package.json
{
  "dependencies": {
    "dsh-window-memory": "^0.1.1"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-window-memory"
      ]
    }
  }
}

通過「插件」頁安裝時,DSH 會自動把帶 dsh.bundle 的包追加進 bundles,一般無需手寫上一段。

典型用法與驗證

  1. 在「插件」頁確認 dsh-window-memory 已安裝且開關爲開;
  2. 拖動 Desktop 主窗口到任意位置、調整大小;
  3. 完整退出 DSH(不是僅刷新頁面),再重新打開;
  4. 窗口應回到步驟 2 離開時的位置與尺寸。

若無效:先確認開關未停用(停用時無日誌);再確認使用的是 DSH Desktop 窗口而非瀏覽器標籤頁。

卸載:在「插件」頁詳情中點 卸載,或從 profile 的 dependencies 與 bundles 中移除 dsh-window-memory。插件不寫 profile 目錄下的配置文件;卸載後除 localStorage 中 dsh-window-memory:window-state 外無 Host 側殘留。

適用場景與注意

適合誰:長期在 Desktop 上使用固定窗口布局、或多顯示器環境下希望關閉後幾何可預期的 DSH 用戶。

權限與安全:插件以當前 DSH 進程(渲染進程 + 瀏覽器存儲)的權限運行,只讀寫本插件獨佔的 localStorage / sessionStorage 鍵。安裝第三方插件前建議瀏覽 GitHub 倉庫 源碼與 MIT 許可證,自行判斷是否信任維護者。

生態說明:DSH 採用「一切皆插件」的擴展方式;SkillHub(目錄頁)爲社區插件目錄,與 DeepSeek / 幻方無官方從屬關係,並非官方應用商店。

結尾

dsh-window-memory 用本地瀏覽器存儲解決 Desktop 主窗口幾何記憶問題,邏輯集中在客戶端、無 Host 配置項,啓停與「插件」頁開關一致。需要細節時可查閱倉庫 README 與 docs/window-state.md。

  • 目錄頁:https://www.skillhub.cn/plugins/notpdpton/dsh-window-memory
  • GitHub:https://github.com/notpdpton/dsh-window-memory
羽毛球分组比赛记分
小程序二维码

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

小夜