前言¶
在 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 。