dsh-vimina
by Sunse666
把 Vimina 的 Windows GUI 自动化能力注册为 DSH 原生工具, 模型可直接调用扫描/点击/输入/按键/脚本/截图/窗口/鼠标/VMA 引擎控制等能力,无需视觉模型。 (Vimina 为独立项目:基于 .NET 8 的 Windows GUI 自动化服务,提供 Vimina.exe serve stdio 入口。)
Registers Vimina's Windows GUI automation capabilities as native DSH tools, so the model can directly call scanning, clicking, typing, key presses, scripting, screenshots, window and mouse control, and the VMA engine — no vision model needed. (Vimina is a standalone project: a .NET 8-based Windows GUI automation service exposing a Vimina.exe serve stdio entry.)
安装
dsh plugin --profile web add github:Sunse666/dsh-viminaGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
目录
把 Vimina 的 Windows GUI 自动化能力注册为 DSH 原生工具,
模型可直接调用扫描/点击/输入/按键/脚本/截图/窗口/鼠标/VMA 引擎控制等能力,无需视觉模型。
(Vimina 为独立项目:基于 .NET 8 的 Windows GUI 自动化服务,提供 Vimina.exe serve stdio 入口。)
工作原理
插件通过 stdio 驱动 Vimina 的常驻服务(Vimina.exe serve,行分隔 JSON-RPC:
一行 {"id",method,params} 请求 → 一行 {"id",ok,result,error} 响应),
把每个方法映射成 ctx.tools 上的一个工具。
工具清单(26 个,模型可见)
窗口 / 扫描
| 工具 | 底层方法 | 说明 |
|---|---|---|
vimina_getWindows |
getWindows | 列出窗口 |
vimina_scan |
scan | 扫描前台窗口控件 |
vimina_scanByTitle |
scanByTitle | 按标题扫描控件(并持久化标签) |
vimina_getElement |
getElement | 按名称查控件 |
vimina_getControlAt |
getControlAt | 查坐标处控件 |
vimina_activate |
activate | 激活窗口 |
点击 / 鼠标
| 工具 | 底层方法 | 说明 |
|---|---|---|
vimina_clickLabel |
clickLabel | 按标签点击 |
vimina_clickAt |
clickAt | 坐标/后台点击(浏览器网页必须用真实点击,缺省 backend 即可) |
vimina_scroll |
runVma(scroll) | 滚轮滚动(delta 正上负下) |
vimina_getMousePos |
getMousePos | 获取鼠标位置 |
vimina_moveMouse |
moveMouse | 移动鼠标 |
vimina_drag |
drag | 拖拽 |
vimina_mouseDown |
mouseDown | 按下鼠标键 |
vimina_mouseUp |
mouseUp | 释放鼠标键 |
键盘
| 工具 | 底层方法 | 说明 |
|---|---|---|
vimina_input |
input | 输入文本 |
vimina_key |
key | 组合键(Ctrl+A 等) |
vimina_keyDown |
keyDown | 按住键 |
vimina_keyUp |
keyUp | 释放键 |
脚本 / 引擎
| 工具 | 底层方法 | 说明 |
|---|---|---|
vimina_runVma |
runVma | 执行 VMA 脚本(返回变量与日志) |
vimina_vmaStatus |
vmaStatus | 引擎状态 |
vimina_vmaStop |
vmaStop | 停止脚本 |
vimina_vmaPause |
vmaPause | 暂停脚本 |
vimina_vmaResume |
vmaResume | 恢复脚本 |
vimina_vmaLog |
vmaLog | 脚本日志 |
其它
| 工具 | 底层方法 | 说明 |
|---|---|---|
vimina_info |
info | 能力自描述 |
vimina_screenshot |
screenshot | 截图并返回路径(默认全屏;可传 x/y/w/h 只截区域,识图更快更省 token) |
安装与挂载
作为 DSH profile 依赖安装(推荐,注册即用,见下),或:
- 安装依赖:
npm install(或先npm run build生成lib/)。 - 用 patch 挂载:
dsh web --patch path/to/dsh-vimina/cordis.yml
通常无需手动配置路径:插件按以下优先级自动解析 Vimina.exe(详见"配置")。
作为 DSH profile 插件安装(推荐)
- 在你的 DSH profile 目录(如
$DSH_HOME/profiles/web)执行:
(或直接往dsh plugin --profile web add <包名或本地路径>package.json的dependencies加"dsh-vimina": "<包名或路径>"后pnpm install,并把dsh-vimina加入dsh.profile.bundles。) - 插件声明了
dsh.bundle.patch,加载器会自动插入vimina条目。 - 重启 DSH web,设置 → 插件 → vimina 可看到 26 个工具与配置项。
配置
| 字段 | 默认 | 说明 |
|---|---|---|
exePath |
自动解析 | Vimina 可执行文件路径 |
timeoutMs |
60000 | 单次工具调用超时 |
exePath 解析优先级:
- 显式配置:DSH web 设置 → 插件 → vimina(推荐),或 profile 的
cordis.patch.yml、--patch补丁 - 环境变量
VIMINA_EXE - 自动探测常见安装位置(
%LOCALAPPDATA%\Programs\Vimina\Vimina.exe、%ProgramFiles%\Vimina\Vimina.exe、%ProgramFiles(x86)%\Vimina\Vimina.exe、当前目录) - 回退:PATH 上的
Vimina.exe
只要 Vimina.exe 在以上任一位置,就无需手动填写路径;启动失败时工具会返回明确的配置指引。
区域截图
vimina_screenshot 默认全屏;传 x / y / w / h 只截指定区域(坐标相对屏幕左上角):
| 参数 | 类型 | 说明 |
|---|---|---|
filename |
string | 可选,保存文件名(默认自动生成) |
x / y |
integer | 区域左上角坐标(可选) |
w / h |
integer | 区域宽度 / 高度(可选) |
- 未传
x/y/w/h时行为不变(全屏,完全兼容旧用法)。 - 区域越界时自动夹取到屏幕边界内(右/下超出部分被裁掉)。
- 返回结果含实际捕获信息(
x/y/width/height),便于核对落盘文件尺寸。 - 用途:只需识别局部(如视频封面、按钮、某块区域文字)时直接截取目标区域, 图像越小视觉识别越快、消耗 token 越少。
- VMA 脚本内同样支持:
screenshot 文件名 x y w h(语句形式)或screenshot("文件名", x, y, w, h)(函数形式)。
示例:
vimina_screenshot({ filename: 'cover.png', x: 100, y: 200, w: 400, h: 300 })
开发与测试
cd dsh-vimina
npm install
npx tsc # 类型检查 + 编译到 lib/
# 单元测试(不依赖真实 Vimina 进程,用 mock 验证协议逻辑)
node --experimental-strip-types test/client-unit.ts
# 插件加载测试(验证工具注册与结构;真实 spawn 需在无沙箱环境)
node --experimental-strip-types test/plugin-test.ts
真实设备测试(需要本机 Vimina.exe)通过环境变量指定可执行文件:
# PowerShell
$env:VIMINA_EXE = 'C:\path\to\Vimina.exe'
node --experimental-strip-types test/e2e-real.ts
node --experimental-strip-types test/full-coverage.ts 5
VIMINA_EXE未设置时回退为'Vimina.exe'(按 PATH 查找);plugin-test.ts在受限沙箱里会被 EPERM 拦截(判定为 SKIP),在正常 DSH 环境可直接跑通。 请勿在提交的代码/配置里写死本机绝对路径。
AI 使用指南(注入 vimina_info)
插件把完整的使用 playbook 与常见错误规避表打包为 usageGuide 字段,随
vimina_info 工具返回注入给模型(源码见 src/usage.ts)。模型首次使用前应先调用
vimina_info 获取指南。指南要点:
- 先扫描后操作:任何操作前先
vimina_scan,控件带标签(DJ/AK),点击用中心坐标。 - 浏览器必须真实点击:
vimina_clickAt缺省 backend(真实点击);网页禁用 backend:true。 - 网页内容滚动后才暴露 UIA:先
vimina_scroll/vimina_key(PageDown|End) 再 scan。 - 无需视觉模型:scan/getElement 直接返回文本控件名,不要依赖 OCR/截图读内容。
- 标签临时性:clickLabel 依赖最近一次 scan 的映射,操作前重新扫描。
- 分任务 playbook:浏览网页 / 桌面应用 / 后台点击 / VMA 脚本,详见 info 返回。
浏览器(Chromium)使用注意事项
真实使用中验证过的经验,模型在操作浏览器页面时请遵循:
- 网页内容要滚动后才暴露给 UIA:打开页面后先
vimina_scan只能看到浏览器框架控件; 滚动(vimina_scroll/vimina_keyPageDown / End)后再 scan,才能看到网页控件。 - 点击网页必须用真实点击:
vimina_clickAt缺省(backend=false)就是真实点击并激活窗口, 浏览器场景下不要用backend:true(FlaUI 后台点击对 Chromium 网页无效)。 vimina_getControlAt对网页多返回外层容器:网页内层控件不暴露 UIA 时,坐标命中 的往往是页面容器而非精确控件,以vimina_scan为准。
说明
- 插件懒启动 Vimina 子进程,插件卸载时自动关闭(
ctx.effect)。 ViminaClient已导出并支持注入spawnFn,便于单元测试。- 环境变量
VIMINA_API_PORT/VIMINA_API_TOKEN可在 spawn 时注入。
原始 README: https://github.com/Sunse666/dsh-vimina/blob/main/README.md ↗
同类插件
查看全部 →
dsh-anchored-standard
两阶段 DeepSeek Harness 预设:先 Minimal 对齐的 bootstrap,再切完整 Standard 工具(Project2 98/99)

PicGo-Core
极致的图片上传引擎,CLI 与 API 双支持

awesome-deepseek-harness
DeepSeek Harness(DSH)及其优秀社区插件的精选指南。

awesome-deepseek-harness
DeepSeek Harness (DSH)生态系统:来自dsh-external/hub和公共dsh-plugin主题的精选插件、工具和基础设施。

AI-Novel-Writer
本地优先 AI 小说创作工作台,提供 Windows/macOS 桌面版与 DeepSeek Harness 插件开发预览,支持角色、大纲、章节蓝图、审稿修稿和本地模型。

mcp-for-stata
MCP-for-Stata:把 Stata 集成进你的 agent