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
羽毛球分组比赛记分
小程序二维码

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

小夜