前言¶
用 DeepSeek Harness(DSH)桌面客户端时,主窗口的宽高和屏幕坐标往往要靠系统或窗口管理器「记住」上一次状态;换机器、清配置或客户端自身未持久化时,每次都要手动拖一遍。社区插件 dsh-window-size(维护者 myxiyues)把这件事收进 客户端 → 设置 → 窗口尺寸:填好数值保存即生效,并在每次启动客户端后自动恢复一次。实现上在宿主进程内通过 Win32 API 改窗口,不挂计划任务、不起外部守护进程。
这是什么¶
dsh-window-size 是 DSH 客户端侧插件(分类:客户端)。它只在设置里提供「窗口尺寸」一节(settings.section 插槽),不在主界面加按钮或面板,也不注册工具或命令。配置落在用户目录,重启后由宿主在窗口出现后应用一次保存的尺寸,然后不再轮询。
目录页:SkillHub - dsh-window-size
源码与说明:GitHub - myxiyues/dsh-window-size(MIT,当前包版本 0.1.0)
核心功能¶
下面介绍插件在资料中明确写明的能力。
设置页保存与应用¶
- 打开 客户端 → 设置 → 窗口尺寸。
- 填写宽、高(下限与客户端一致:
minWidth 520、minHeight 600);X、Y 可留空,留空表示位置交给客户端默认逻辑。 - 点击 保存并应用:立即调整主窗口并写入磁盘。
- 之后每次启动客户端,宿主会在窗口出现后应用一次已保存的尺寸,然后停止干预。
若要回到客户端默认尺寸,使用 清除保存(会删除配置文件)。
窗口识别与安全边界¶
- 只处理标题含
DeepSeek Harness或属于本进程树内的可见窗口,不操作其它程序窗口。 - 窗口控制加载失败时不会把异常抛给宿主;设置页会显示失败原因,配置仍可保存。
实现方式(为何不是「守护脚本」)¶
- 无计划任务、无常驻轮询、无外部脚本进程。在客户端宿主进程内通过自带的
koffi(路径形如resources\app.asar.unpacked\dsh\node_modules\koffi)绑定user32.dll,调用EnumWindows、GetWindowRect、SetWindowPos、ShowWindow等。 - 宿主进程是客户端主进程的子进程,完整性级别与窗口一致,因此
SetWindowPos不会被 UIPI 拦住。 - 仅在两个时刻改窗口:客户端启动后收敛一次、用户在设置页点保存/应用。客户端未运行时,插件侧不会有任何进程、窗口或弹窗。
配置与 RPC¶
| 位置 | 说明 |
|---|---|
~/.dsh/window-size.json |
保存的配置字段:width、height、x、y、maximized、applyOnStart、savedAt |
~/.dsh/window-size.log |
启动应用/保存相关结果行,供排查(自动截断) |
POST /api/window-size/dispatch |
宿主注册的 RPC(经 connection.fetch.register) |
RPC 报文风格与 dsh-novel-desk 相同,例如客户端请求:
// 客户端 → 宿主
{ "type": "client-request", "method": "window-size/dispatch", "rpcId": "…", "payload": { "action": "config.save", "args": { "width": 2027, "height": 1074, "x": 231, "y": 163 } } }
action 取值包括:state.get、config.save、config.apply、config.clear、window.read、windows.list。
安装与启用¶
官方 README 说明:客户端自带 pnpm;profile 位于 ~/.dsh/profiles/desktop。已通过 dsh-super-injector 的 dev_install_package 装配(在 profile 的 package.json 里做 link 依赖,并写入 dsh.profile.bundles)。包内 cordis.patch.yml 仅一行 insert,用于保证重启后由 profile 的 bundles 正常装配。
# 客户端自带 pnpm;profile 在 ~/.dsh/profiles/desktop
# 已经通过 dsh-super-injector 的 dev_install_package 装配(profile package.json 的 link 依赖 + dsh.profile.bundles)
若你使用注入器卸载,可一步执行 dev_uninject_plugin 并匹配包名 dsh-window-size。
典型用法¶
经过上面的安装与设置入口,日常可按下面步骤复现 README 中的流程:
- 启动 DSH 客户端,进入 设置 → 窗口尺寸。
- 按需填写宽高;需要固定到某块显示器时填写 X、Y,否则留空。
- 点 保存并应用,确认窗口立即变化。
- 完全退出后再次启动客户端,确认尺寸(及已保存的位置)在窗口出现后恢复一次。
排查时可查看 ~/.dsh/window-size.log 中与启动、保存相关的行。
适用场景与注意¶
适合谁:长期在固定分辨率或多显示器布局下使用 DSH 桌面客户端,希望宽高与坐标由插件显式落盘、启动即恢复一次的开发者。
权限与信任:窗口操作在 DSH 客户端宿主进程内执行,插件以当前 DSH 进程权限运行;安装前请自行阅读 源码 与 MIT 许可证,确认符合你的安全策略。
平台:实现依赖 Windows user32 与进程内 koffi 绑定;资料面向 Win32 客户端场景,其它平台行为以仓库说明为准。
生态说明:DSH 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;插件通过 Cordis patch 接入 profile,属于「一切皆插件」生态中的客户端扩展,而非内置功能。
结尾¶
dsh-window-size 把主窗口尺寸与位置收敛到设置页和 ~/.dsh/window-size.json,启动时自动恢复一次,且不在后台常驻。需要进一步了解参数与 RPC 时,以 GitHub README 为准。
- 目录页:https://www.skillhub.cn/plugins/myxiyues/dsh-window-size
- GitHub:https://github.com/myxiyues/dsh-window-size