前言¶
用 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