前言¶
在 Windows 上做微信小程序自動化,常見的做法是手動打開微信開發者工具,靠腳本或人工點擊去觀察界面狀態。把它交給 DSH 和模型執行時,難點在於:開發者工具的連接、項目目錄、截圖、頁面狀態分散在多個入口,模型拿不到一個統一、可讀的工具面。下面介紹的 winpilot 就是爲解決這個問題而生:它把 winpilot CLI 註冊成一個模型工具,同時掛一塊側欄面板,把連接、項目、截圖與診斷收進同一個配置臺。
這是什麼¶
winpilot 是一個 DSH 插件,倉庫地址 https://github.com/wodaimnd/winpilot ,維護者 wodaimnd。它做的事情很具體:
1、把 winpilot CLI 註冊成模型工具 winpilot,用於在 Windows 上驅動微信開發者工具。
2、提供一塊「小程序」控制台面板(側欄入口「小程序」),用於配置、看狀態、按需截圖。
它不替代微信開發者工具,只在 CLI 與模型之間做一層適配。插件當前 version 0.1.0,license AGPL-3.0-or-later。
核心功能¶
工具入口統一是 winpilot,入參爲 operation 與 params:
{
"operation": "tap",
"params": { "reference": "%2" }
}
返回固定形狀,DSH 會按 output.schema 校驗:
{ "ok": true, "exitCode": 0, "data": { ... }, "text": "已點擊 %2 <button.submit> \"提交訂單\"" }
render() 只把 text 交給模型,data 留給程序消費。
支持的 operation 分爲幾類:
- 連接與生命週期:
start/connect/disconnect/status/doctor/back/reload - 頁面讀取:
view/find/wait/peek - 頁面操作:
tap/read/type/scroll/assert - 狀態與截圖:
state/shot - 導航與腳本:
goto;run/wx(需要enableJsEval: true)
reference 接受 %3、3、"3" 三種寫法。peek 比較特殊:一次連接取「端點 + 當前頁 + 頁面數據 + 一張圖」,且只讀——不分配 %N、不寫 session.json。
控制台面板正面分五塊:
| 區塊 | 內容 |
|---|---|
| ① 開發者工具 | 連接狀態 + 啓動/重連/斷開 +「端口沒開」的分步指引 |
| ② 項目 | 項目目錄(可瀏覽/最近使用)、AppID 只讀回顯、%N 新鮮度 |
| ③ 截圖 | 按需截一張(不自動刷新),顯示寬高與頁面路徑 |
| ④ 高級(默認摺疊) | 截圖/狀態目錄、run/wx 開關狀態、診斷與複製 |
| ⑤ 數據說明 | 存了什麼、存在哪、一鍵清除界面偏好 |
需要強調:面板是配置臺,不是操作檯。tap / type / scroll / assert / goto 等頁面操作不在面板白名單裏,全部交給 AI 用工具執行。面板與工具共用同一個串行隊列,面板刷新不會打亂模型手裏的 %N。Host 半路由是 /api/winpilot(loopback-only、POST-only、body ≤ 256 KB、白名單)。
安裝與啓用¶
用 DSH 的 profile 模式安裝:
dsh plugin --profile web add G:\AI PGRM\DSH\winpilot\dsh-plugin
或把本目錄鏈接到 DSH 的本地插件目錄(本工作區是 G:\AI PGRM\DSH\plugins\)。
配置寫在 cordis.patch.yml 中:
- insert:
- id: winpilot
name: '@local/winpilot'
config:
cliPath: '' # 默認自動定位 ../bin/winpilot.js
stateDir: '' # 空 = 用 CLI 自己的目錄(%LOCALAPPDATA%\winpilot)
shotsDir: '' # 空 = <狀態目錄>\shots
timeoutMs: 120000
autoPort: 9420
enableJsEval: false # run / wx 的總開關,默認關
注意:cordis.patch.yml 裏的 config 與 index.js 的 DEFAULTS 必須逐字一致;不要用 !!js 條件修飾開關行,插件管理器啓停會把行改寫成 disabled: false,覆蓋條件並導致安裝回滾。
典型用法¶
模型側的操作通過工具完成。點擊某個元素:
{ "operation": "tap", "params": { "reference": "%2" } }
輸入文本:
{ "operation": "type", "params": { "reference": "%1", "text": "搜索" } }
向下滾動:
{ "operation": "scroll", "params": { "reference": "%1", "direction": "down" } }
斷言頁面元素:
{ "operation": "assert", "params": { "reference": "%3", "expected": "提交訂單" } }
適用場景與注意¶
適合在 Windows 上做微信小程序自動化、想把開發者工具的操作交給 DSH/智能體執行,又希望有面板隨時看連接狀態和截圖的人。如果只做一次性的人工調試,這套工具偏重。
幾點注意:
- 插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
- 所有操作串行執行,
view分配的%N是後續操作的輸入,併發會互相踩踏。 run/wx執行 JS 的總開關默認關閉,需要enableJsEval: true纔可用。- Host 半路由
/api/winpilot是 loopback-only、POST-only、body ≤ 256 KB、白名單。 - 插件只是把 CLI 註冊成工具並掛一塊麪板,卸載不會刪除 winpilot 本體,也不會動開發者工具。
卸載按三步走:從 profile 清單去掉依賴與 bundles 條目、刪掉 node_modules 下的鏈接、重啓 DSH。
Remove-Item "C:\Users\<你>\.dsh\profiles\desktop\node_modules\@local\winpilot" -Force
小結¶
winpilot 的價值在於把「驅動微信開發者工具」拆成一條工具面加一塊配置面板:複雜的頁面操作交給模型用工具串行執行,連接、項目、截圖、診斷留在面板上完成。它只做適配,不替換 CLI 和開發者工具。目錄頁:https://www.skillhub.cn/plugins/wodaimnd/winpilot ;倉庫:https://github.com/wodaimnd/winpilot 。