mpiton/tauri-pilot

GitHub: mpiton/tauri-pilot

为 Tauri v2 应用提供交互式测试 CLI,让 AI 代理能实时检查、交互与调试桌面 UI。

Stars: 17 | Forks: 5

# tauri-pilot **Tauri v2 应用的交互式测试 CLI** — 让 AI 代理(Claude Code)和开发者能够实时检查、交互与调试 Tauri 应用。 ``` $ tauri-pilot snapshot -i - heading "PR Dashboard" [ref=e1] - textbox "Search PRs" [ref=e2] value="" - button "Refresh" [ref=e3] - list "PR List" [ref=e4] - listitem "fix: resolve memory leak #142" [ref=e5] - listitem "feat: add workspace support #138" [ref=e6] - button "Load More" [ref=e7] $ tauri-pilot click @e3 ok $ tauri-pilot fill @e2 "workspace" ok ``` ## 为什么? 目前没有工具能让 AI 代理与 Tauri 应用 UI 进行交互。Playwright 无法工作(Tauri 使用系统 WebView — Linux 上是 WebKitGTK,macOS 上是 WebKit — 而不是 Chromium)。tauri-pilot 通过一个轻量级插件 + CLI 填补这一空白,它使用一种为 LLM 消费优化的协议进行通信。 ## 工作原理 ``` ┌──────────────┐ Unix Socket ┌─────────────────────────────┐ │ tauri-pilot │ ◄──────────────► │ tauri-plugin-pilot (Rust) │ │ (CLI) │ JSON-RPC │ embedded in your app │ └──────────────┘ │ │ │ ┌─────────────────────┐ │ │ │ JS Bridge (injected)│ │ │ │ window.__PILOT__ │ │ │ └─────────────────────┘ │ │ WebView │ └─────────────────────────────┘ ``` 1. **插件**嵌入到你的 Tauri 应用(仅调试构建),启动一个 Unix 套接字服务器 2. **CLI**连接到该套接字,发送 JSON-RPC 命令 3. **JS 桥接**注入到 WebView 中,负责 DOM 检查与交互 ## 快速开始 ### 1. 添加插件到你的 Tauri 应用 ``` # src-tauri/Cargo.toml [dependencies] tauri-plugin-pilot = { git = "https://github.com/mpiton/tauri-pilot" } ``` ``` // src-tauri/src/main.rs fn main() { let mut builder = tauri::Builder::default(); #[cfg(debug_assertions)] { builder = builder.plugin(tauri_plugin_pilot::init()); } builder.run(tauri::generate_context!()).expect("error running app"); } ``` ### 2. 安装 CLI ``` cargo install tauri-pilot-cli ``` 可选地,让你的 Agent 可以使用: ``` npx skills add https://github.com/mpiton/tauri-pilot ``` ### 3. 使用它 ``` # 检查连接 tauri-pilot ping # 检查 UI tauri-pilot snapshot -i # interactive elements only tauri-pilot snapshot -s "#sidebar" # scoped to a CSS selector # 交互 tauri-pilot click @e3 tauri-pilot fill @e2 "hello" tauri-pilot press Enter # 验证 tauri-pilot assert text @e1 "Expected text" tauri-pilot assert visible @e3 tauri-pilot wait --selector ".success-message" # 使用 JavaScript 调试 tauri-pilot eval "document.title" tauri-pilot eval - <<'EOF' document.querySelector('[data-id="main"]').textContent EOF echo 'window.location.pathname' | tauri-pilot eval - ``` 对于复杂或多行脚本,请使用 `tauri-pilot eval -`。单引号 heredoc 分隔符(`<<'EOF'`)会禁用 shell 扩展,因此 JavaScript 中的 `$`、反引号和引号无需转义。 ## 命令 | 命令 | 描述 | |------|------| | `ping` | 健康检查 | | `snapshot` | 可访问性树(含引用,`--save` 可持久化) | | `diff` | 比较快照,仅显示变更 | | `click` | 点击元素 | | `fill` | 清空并输入内容 | | `type` | 输入内容但不清空 | | `press` | 发送按键 | | `select` | 选择下拉选项 | | `check` | 切换复选框 | | `scroll` | 滚动页面或元素 | | `drag` | 拖动元素到元素或偏移位置 | | `drop` | 模拟文件拖放 | | `text` | 获取元素文本内容 | | `html` | 获取元素 innerHTML | | `value` | 获取输入值 | | `attrs` | 获取所有属性 | | `eval` | 执行任意 JS | | `ipc` | 调用 Tauri IPC 命令 | | `screenshot` | 截图为 PNG | | `wait` | 等待元素出现或消失 | | `navigate` | 更改 WebView URL | | `state` | 获取 URL、标题、视口与滚动位置 | | `assert` | 一步验证(文本、可见、隐藏、值、数量、选中、包含、URL;退出 0 = 通过,1 = 失败) | | `watch` | 观察 DOM 变动 | | `storage` | 读写 localStorage 与 sessionStorage(`--session`) | | `logs` | 捕获并显示控制台输出 | | `network` | 捕获并显示网络请求 | | `record` | 录制交互(`start`、`stop --output`、`status`) | | `replay` | 回放录制会话(`--export sh` 生成 Shell 脚本) | | `mcp` | 通过 stdio 启动 Model Context Protocol 服务器 | ## 针对 AI 代理 tauri-pilot 专为 AI 代理设计。工作流程如下: 1. `tauri-pilot snapshot -i` — 获取带有引用的可访问性树 2. 读取输出中的引用(如 `@e1`、`@e2`) 3. `tauri-pilot click @e3` — 使用引用进行交互 4. `tauri-pilot assert text @e1 "Dashboard"` — 一步验证状态(退出 0 = 通过,1 = 失败) 5. `tauri-pilot diff -i` — 仅查看变更(节省令牌,无需完整重拍) 6. `tauri-pilot logs --level error` — 检查 JS 错误 `assert` 命令替代了手动 `text @ref` + 解析 + 比较的模式,减少往返与令牌消耗。 如需程序化解析,请使用 `--json` 获取结构化输出。 ### MCP 服务器 对于具备原生 MCP 支持的代理,可以直接以 stdio MCP 服务器运行 tauri-pilot,而无需为每个命令单独调用: ``` { "mcpServers": { "tauri-pilot": { "command": "tauri-pilot", "args": ["mcp"] } } } ``` MCP 服务器暴露了与 CLI 相同的功能接口: `snapshot`、`click`、`fill`、`logs`、`network`、`eval`、`ipc`、`assert_*` 以及其他测试工具。 使用全局标志在 `mcp` 之前指定特定的应用套接字或窗口: ``` { "mcpServers": { "tauri-pilot": { "command": "tauri-pilot", "args": ["--socket", "/tmp/tauri-pilot-myapp.sock", "--window", "main", "mcp"] } } } ``` ## 要求 - **Linux**(WebKitGTK)或 **macOS**(WebKit)— Windows 计划支持 - **Tauri v2**(v1 不支持) - **Rust 1.94.1+**(LTS,edition 2024) ## 谁在使用? 你正在使用 tauri-pilot 吗?[提交 PR](https://github.com/mpiton/tauri-pilot/pulls) 将你的项目添加到此列表! ## 许可证 MIT — 参见 [LICENSE](LICENSE)
标签:AI代理, CLI测试, JSON-RPC, Rust, SEO: AI测试工具, SEO: Tauri测试, SEO: 桌面应用调试, Syscall, Tauri, Tauri v2, Unix Socket, Web开发, 交互式测试, 前端自动化, 可视化界面, 威胁情报, 实时调试, 开发者工具, 插件开发, 文档结构分析, 桌面应用测试, 网络流量审计, 跨平台测试, 通知系统