前言¶
在 DeepSeek Harness(DSH)裏做 Windows 桌面自動化,常見路徑是 Python 常駐服務、MCP 多一跳,或依賴視覺模型逐像素猜控件。對只想讓智能體「看屏幕、讀控件樹、點按、打字、啓停應用」的開發者來說,多一層進程和協議往往等於多一層故障面。下面介紹社區插件 dsh-computer-use(維護者 Wonderow666,MIT 許可):把上述能力收進一個原生 computer 工具,底層是約 41 KB 的單文件 C# 橋 bin/cu.exe(Win32 + UI Automation),無 Python、不經 MCP,倉庫自帶編譯產物,裝完即用。
這是什麼¶
dsh-computer-use 是 DSH 的客戶端類插件(僅 win32),面向 Windows 10/11 與 DSH 0.2.x(desktop 或 web profile)。它在模型側註冊一個工具名 computer,通過 action 枚舉驅動屏幕截圖、UI Automation 控件樹、SendInput 鍵鼠注入、UIA 模式調用(SetValue / Invoke 等,不依賴焦點與像素)、應用啓動與結束、剪貼板與進程列表等能力。策略(進程黑名單、是否允許 launch/kill 等)在 Node 插件層;引擎 cu.exe 另有兩道與策略無關的物理護欄(目標窗口須在前臺才接受帶 hwnd 的鍵入;點擊前雙證人座標歸屬檢查)。
插件刻意零第三方 npm 依賴:參數 schema 手寫 JSON Schema,校驗自實現,只用 node: 內置模塊,以便 link: 安裝時 profile 裏能正常解析。
核心功能¶
單一工具,23 個 action¶
一次調用只選一個 action。README 按類別歸納如下(節選要點):
| 類別 | 代表 action | 作用 |
|---|---|---|
| 預檢 | inputcheck |
移動光標再復位,回報落地與完整性;動手輸入前建議先跑 |
| 觀察 | info、windows / procs、screenshot、snapshot、find / hit、geom、modals、hover |
顯示器與 DPI、窗口/進程、PNG 截圖路徑、控件樹(元素 id 如 0.2.1)、幾何與模態窗等 |
| 輸入 | click、move、scroll、drag、type、key、invoke |
SendInput 或 UIA 驅動;支持 hwnd/title 與 relx/rely(客戶區相對座標) |
| 生命週期 | launch、kill、focus、wait |
啓停進程、置前、等待 |
| 雜項 | clipboard |
讀寫剪貼板 |
設計約定(與用法直接相關):
- 截圖不直接回模型文本:PNG 落盤後返回路徑與
scale,需再由宿主側視覺工具讀圖。 snapshot與find的元素 id 同一套編號,find得到的id可直接傳給invoke。- 單次動作一次進程調用,默認超時 30 s(可在配置裏改
timeoutMs);無常駐服務。 dryRun: true只解析參數、不注入、不搶焦點,便於預演。
click / move / drag 會在注入後讀回光標,偏差超過 2 px 會報錯並附診斷,而不是靜默成功。
安全邊界(插件層)¶
配置見 cordis.patch.yml,profile 的 cordis.patch.yml 可按插件 id 覆蓋字段:
blockedProcesses:目標窗口進程名/類名/標題命中則拒絕輸入類動作;默認含TslGame.exe/UnrealWindow;只讀動作不受影響。refuseFullscreenForeground:目標占滿整屏時拒絕注入(默認關)。allowProcessControl: false時禁用launch/kill。- 另有
timeoutMs、enginePath、artifactsDir等。
判定對象是即將接收輸入的窗口,不是「當前前臺」誤傷後臺禁運應用。
安裝與啓用¶
要求:Windows 10/11、DSH 0.2.x、Node ≥ 20。插件版本在 package 中爲 0.2.0。
# 方式 A:直接從 GitHub 裝(推薦)
dsh plugin --profile desktop add github:Wonderow666/dsh-computer-use
# 方式 B:本地開發(link:,改代碼立刻生效,不用重裝)
dsh plugin --profile desktop add link:F:\path\to\dsh-computer-use
# 然後在同一 profile 的 package.json 裏確認 dsh.profile.bundles 末尾有 "dsh-computer-use"
# (`dsh plugin add` 通常會自動追加;沒有就手動加一行)
# 重啓 DSH —— 插件在進程啓動時掛載
dsh 爲 DSH 自帶啓動器,例如:
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:Wonderow666/dsh-computer-use
重啓後須開新會話:工具在會話創建時裝配,進行中的對話不會熱更新。若需確認掛載,可設環境變量 DSH_COMPUTER_USE_DEBUG=1,插件會在 stderr 打出 apply 與 registered tool 'computer'。
倉庫已帶 bin/cu.exe,無需本地構建即可使用;修改 bridge/cu.cs 時可按 README 用 build.ps1 自編譯。
典型用法¶
模型側一次調用形態示例(來自 README):
{ "action": "screenshot", "hwnd": "656368", "maxw": 1200 } // -> PNG 路徑 + scale
{ "action": "snapshot", "hwnd": "656368", "depth": 6 } // -> 控件樹 + 元素 id
{ "action": "invoke", "hwnd": "656368", "elementPath": "0.2.1" }
{ "action": "type", "hwnd": "656368", "text": "你好,世界" }
{ "action": "key", "combo": "ctrl+shift+s" }
常見閉環:先 screenshot 或 snapshot 建立狀態 → 用 invoke 或帶 relx/rely 的 click 操作 → 需要真實鍵鼠時用 type / key(帶 hwnd 時須先 focus 到前臺)。README 文檔圖展示了 UIA SetValue 寫輸入框、Invoke 點按鈕,以及 launch cmd 後打字回車執行命令的控制台閉環。
給了 hwnd / title 時,插件會把目標置前並在結果裏回報 focused: true,降低按鍵落到別窗的風險。
適用場景與注意¶
適合:在 DSH desktop(或對應 profile)裏做 Windows 原生 GUI 自動化、希望少依賴 Python/MCP/視覺模型、需要 UIA 穩定元素 id 與可復現點擊的 Windows 10/11 開發者。
務必注意:
- 插件與 DSH 進程同一權限運行;安裝前請自行審閱源碼與 MIT 許可證,理解
blockedProcesses等策略是否滿足你的環境。 - 僅 Windows;Linux/macOS 不適用。
- 社區目錄 SkillHub 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,本文介紹的是其中一款客戶端插件。
focus 在 Windows 前臺鎖下可能逐級嘗試仍失敗,會返回 ok:false 並說明當前前臺是誰——應先處理置前再輸入,不要假設每次都能搶焦點。
結尾¶
dsh-computer-use 把 Windows 桌面自動化收成 DSH 原生的一個 computer 工具:觀察、輸入、應用生命週期與剪貼板在同一 schema 下完成,底層單文件 C# 橋、無 MCP 跳轉、輸入多層防護。若你在 DSH 裏需要「真正動手」操作本機 Windows GUI,可按上文命令安裝、重啓並新建會話後使用。