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 。

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

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

小夜