前言¶
用 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 與實現說明。
- 重開還原:完整退出 DSH 再打開時,主窗口回到關閉時的位置與尺寸。
- 最大化語義:關閉時若處於最大化,下次以最大化之前的矩形打開——最大化視爲臨時狀態,不是用戶選定的擺放。
- 單次恢復:每次啓動只恢復一次(
sessionStorage標記dsh-window-memory:window-restored),頁面內刷新不會覆蓋剛調好的大小。 - 尺寸下限:恢復後的尺寸不低於 DSH 原生窗口最小值 520×600。
- 多顯示器與越界:保存的位置在所有顯示器都不可見時(例如拔掉副屏)拒絕恢復,避免窗口跑到屏幕外;部分越界則拉回最近的顯示器,尺寸不變。
- 存儲位置:不寫 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(瀏覽器中不生效)。
在「插件」頁安裝(推薦)¶
- 打開 設置 → 插件;
- 點右上角 添加插件;
- 選 安裝第三方插件;
- 在「包名或地址」裏填入
dsh-window-memory,點 安裝; - 裝完按提示 重啓 DSH;
- 重啓後回到「插件」頁,卡片出現在「已安裝插件」下,標題爲「窗口記憶」,開關默認打開。
調試時可填本地源碼絕對路徑,例如 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,一般無需手寫上一段。
典型用法與驗證¶
- 在「插件」頁確認
dsh-window-memory已安裝且開關爲開; - 拖動 Desktop 主窗口到任意位置、調整大小;
- 完整退出 DSH(不是僅刷新頁面),再重新打開;
- 窗口應回到步驟 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