dsh-test-window:在指定显示器上打开 Agent 拉起的测试窗口

前言

在 DeepSeek Harness(DSH)里做游戏、前端或工具开发时,Agent 常会执行命令拉起 Godot 编辑器、本地 dev 服务器浏览器页或预览窗口。多屏环境下,这些窗口往往按程序自己的习惯落在任意位置,最常见的是压在 DSH 对话窗口上,挡住继续协作。手动拖窗口可以救急,但 Agent 每次启动都会重来一遍。

下面介绍社区客户端插件 dsh-test-window(维护者 Aily-DSH):在 DSH 设置里选定一块物理显示器后,无论是设置页手动启动,还是 Agent 调用 open_test_window,新窗口都会被识别、移动并在目标屏上保持摆放。插件当前版本 0.2.0,许可证 MIT,仅支持 Windows 10/11。

这是什么

dsh-test-window 解决「测试窗口开在哪块屏」这一件事:把显示器选择做成持久配置,并同时覆盖两条入口——设置页的「立即启动」与 Agent 工具 open_test_window。一次选择,两边共用同一套最大化、置顶与焦点策略。

分类上属于 DSH 客户端插件(注入设置 UI),不是纯服务端扩展。社区目录页:skillhub.cn 插件条目;源码与文档:GitHub - Aily-DSH/dsh-test-window。

核心功能

显示器与摆放

设置页会列出真实物理屏幕(DPI 感知、物理像素、坐标、工作区、是否主屏),点选即写入配置。窗口出现后插件会移动或最大化到目标屏,并在默认 6 秒(settleMs)内持续校正位置,以应对引擎启动后回写窗口几何的情况。若程序拒绝最大化,会降级为铺满目标屏工作区的普通窗口,避免越界。

窗口识别

只认启动后新出现的可见主窗口:启动前已存在的窗口不会被误抓;按进程树归属分档匹配,并每 300ms 重读进程树,以便 .bat、npm 等启动器延迟拉起子进程时仍能命中。GPU 驱动或引擎创建的隐藏辅助窗口(如 Godot 4 在 NVIDIA 下的 NVOpenGLPbuffer)以及控制台黑框不会被当成测试目标。

启动体验

程序在「创建即隐藏」的新控制台里启动(CREATE_NEW_CONSOLE + SW_HIDE),主屏不会闪控制台黑框,.bat 中的 timeout / pause 仍可用。焦点策略三档:never / idle / always,默认 idle——你在打字、拖动或开着右键菜单时,新窗口只摆位、不抢前台;检测到鼠标按住、窗口正在移动/缩放或菜单打开时,会暂停位置校正。窗口被程序销毁重建时,插件会跟踪新窗口而不是直接报「窗口已关闭」。

Agent 与回报

注册工具 open_test_window,并在会话系统提示中引导 Agent 用该工具开窗口。返回结构包含窗口矩形、是否在目标屏内、是否用户拖动、焦点是否给予等字段;窗口被关掉返回 window-closed,启动失败返回 spawn-failed / command-failed(含退出码)。HTTP 路由仅接受回环地址。

环境要求

  • Windows 10/11(依赖 PowerShell 与 Win32 窗口 API;macOS / Linux 不支持)
  • PowerShell 5.1+(系统自带)
  • DeepSeek Harness >= 0.2.1-rc.2
  • Node.js ^22.19.0 || >=24.0.0

安装与启用

在 DSH CLI 所在目录执行官方安装命令(资料原文如下):

cd "/d/Program Files/DeepSeek Harness/resources/runtime/cli/bin"
./dsh.cmd plugin --profile desktop add "git+https://github.com/Aily-DSH/dsh-test-window.git"

本地开发时可改用 file: 路径安装。装完后重启一次 DeepSeek Harness 客户端(宿主半与注入清单在启动时计算),再打开 设置 → 测试窗口。

卸载:

dsh plugin --profile desktop remove dsh-test-window

可选删除配置目录 ~/.dsh/dsh-test-window/。

典型用法

设置页

  1. 打开 设置 → 测试窗口,从列表选择显示器(例如 2 · 1920×1080 @ 640,-1080)。
  2. 按需勾选「最大化」「置顶」,选择焦点策略(默认「空闲时才切到前台」),保存。
  3. 在「立即启动命令」填写例如 godot --path D:/GC/MyGame 并启动,确认窗口落在目标屏。
  4. 之后 Agent 通过 open_test_window 拉起窗口时会沿用该配置,除非工具参数显式覆盖。

Agent 工具参数

参数 说明
command(必填) 要执行的命令,如 godot --path D:/GC/MyGame、npm run dev
cwd 工作目录
displayIndex 覆盖设置中的显示器序号(从 1 起,与设置页一致)
titleContains 窗口标题子串(浏览器等由别的进程持有时常用)
maximize / topMost 覆盖最大化、置顶
focus never / idle / always
timeoutMs / settleMs 等待窗口出现与后续校正的时长

配置文件路径:~/.dsh/dsh-test-window/config.json。常用字段包括 displayIndex(0 表示未选)、maximize(默认 true)、topMost(默认 false)、focus(默认 idle)、timeoutMs(默认 20000)、settleMs(默认 6000)。

适用场景与注意

适合在 Windows 多屏环境下长期用 DSH Agent 跑本地游戏、编辑器或前端 dev 预览的开发者。全屏(fullscreen)程序不受摆位控制;无人值守或服务会话下窗口 API 不可用。使用 titleContains 时若进程快速换窗口标题,可能需要增大 timeoutMs 或改用更稳的标题片段。

DSH 社区插件以当前 dsh 进程权限运行,安装前建议自行查看仓库源码与 MIT 许可证。社区目录与 GitHub 索引由社区维护,与 DeepSeek / 幻方无官方从属关系;若在客户端插件市场暂未搜到,可直接用上述 git+https://... 命令安装。

结尾

dsh-test-window 把「Agent 拉起的测试窗口落在哪块屏」收成一项设置,并兼顾窗口识别、持续校正与不抢输入等细节,减少多屏开发时被预览窗盖住对话的情况。

  • 目录页:https://www.skillhub.cn/plugins/Aily-DSH/dsh-test-window
  • GitHub:https://github.com/Aily-DSH/dsh-test-window
羽毛球分组比赛记分
小程序二维码

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

小夜