Repository navigation
Releases: myxiyues/dsh-window-size
Releases · myxiyues/dsh-window-size
Release list
dsh-window-size 0.1.0
在客户端「设置」里保存主窗口的尺寸与位置,客户端每次启动自动恢复一次。
三条硬约束(就这么实现的)
- 控制入口只在设置里:
settings.section插槽一栏「窗口尺寸」;主界面零入口(不注册工具、不加按钮/面板、不加命令)。 - 保存后重启生效:配置存
~/.dsh/window-size.json;客户端启动、主窗口出现后应用一次即收手。 - 没有计划任务、没有常驻轮询、没有外部脚本进程:窗口操作全在客户端宿主进程内用 koffi → user32 完成(
EnumWindows / GetWindowRect / SetWindowPos / ShowWindow),不产生任何可见窗口;客户端没开时这套机制里什么都不存在。
机制要点
- 宿主进程是客户端主进程的子进程,完整性级别一致,
SetWindowPos不会被 UIPI 拦下(不需要提权)。 - 只认「标题含
DeepSeek Harness」或「属于本进程树」的可见窗口,永不碰其它程序的窗口。 - 应用后回读校验,最多 4 次尝试收敛;不做后台定时守护。
- 宽高下限就是客户端自己的
minWidth 520/minHeight 600;X / Y 可留空(位置交给客户端)。 - 设置页还能「用当前窗口填充」「应用已保存」「清除保存」「最大化启动」「启动时自动应用」。
安装
# profile 在 ~/.dsh/profiles/<name>,用客户端自带 pnpm
pnpm add link:<this repo>
# 再把 dsh-window-size 加进 profile package.json 的 dsh.profile.bundles包内 cordis.patch.yml 只有一行 insert,保证重启后由 bundles 正常装配。
卸载
删掉 profile node_modules 里的链接、dependencies 与 dsh.profile.bundles 里的该项,再删 ~/.dsh/window-size.json 与 ~/.dsh/window-size.log。
组成
| 文件 | 作用 |
|---|---|
lib/index.js |
宿主半:/api/window-size/dispatch RPC(state.get / config.save / config.apply / config.clear / window.read / windows.list)+ 启动应用 |
lib/win32.js |
koffi 懒加载绑定 user32:找窗口 / 读 / 改 / 报错说人话 |
lib/store.js |
~/.dsh/window-size.json 与日志的读写(读永不抛) |
lib/client.js |
客户端半:手写 bundle,只 require("react"),注册「设置 → 窗口尺寸」 |
依赖
只用到客户端自带的 @deepseek-ai/dsh-client-connection、@deepseek-ai/dsh-client-ui-settings 与内置 koffi。不依赖任何 npm 包。