winpilot:把微信小程序控制臺掛進 DSH

前言

在 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 。

羽毛球分组比赛记分
小程序二维码

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

小夜