mcpField
V
Victauri

Victauri

本地服务
4da-systems.github.io开发工具42 天前更新

关于 Victauri

Victauri 是嵌入 Tauri 2 和 Tauri 3 预发布应用的开发期测试与检查服务,面向应用开发者和测试套件。它可在一次全栈测试中串联前端操作、IPC、Rust 状态和 SQLite 检查,且仅在调试构建中启用。

主要功能

  1. 01DOM 检查与交互
  2. 02IPC 和 Rust 命令访问
  3. 03检查 SQLite 与应用文件
  4. 04跨层状态对比
  5. 05录制、回放并生成测试
  6. 06支持 macOS、Windows 和 Linux

适用场景

  1. 01验证 UI 操作是否写入 SQLite
  2. 02诊断前端到 Rust 的 IPC 行为
  3. 03查找未使用的前端或后端命令
  4. 04将交互录制为可回放测试

MCP 相关

Victauri 使用 MCP,向 MCP 客户端提供应用 DOM、IPC、命令调用、状态、文件、SQLite、截图和无障碍检查。连接时,其桥接程序会发现正在运行的应用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
cargovictauri-cli0.10.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Victauri

Victauri

Tauri 应用的可信内省与控制

对 Tauri 应用进行全栈测试。在前端点击按钮,验证 Rust 处理程序已运行,并确认数据库行已写入——只需一个测试。

CI crates.io docs.rs 许可证:Apache-2.0 MSRV:1.88+


如今,测试 Tauri 应用意味着要在这些方案中做出选择:会掩盖后端真实情况的前端模拟、需要花一个周末配置的 WebDriver 环境,或付费使用 macOS CI 运行器。Victauri 将这三者一并取代:它会在 Tauri 进程中嵌入一个轻量级服务(仅限调试构建),让测试套件、curl 和 CI 能通过一个测试,直接访问 DOM、IPC 层、Rust 后端状态、数据库和原生窗口,并且支持全部三种平台。无需 WebDriver,也不依赖浏览器。支持 macOS、Windows 和 Linux。

这个服务还支持 MCP,因此任何 AI Agent——Claude Code、Cursor、Windsurf——都能使用相同的全栈访问能力来驱动和调试应用。测试是它的主要用途;Agent 集成则是额外福利。

已针对真实 Tauri 应用进行测试。 在一次性深度评估中(2026 年 5 月),对 5 个开源应用(Kanri、En Croissant、Surrealist、Duckling、Lettura)进行了测试,895 项检查中有 867 项通过(96.9%),Victauri 没有任何缺陷,应用也无需任何改动。一个可复现的兼容性测试套件(scripts/compat)可按需(并每周)使用当前代码,针对 3 个锁定版本的 Tauri 2 应用(Kanri、En Croissant、Lettura),重新运行与应用无关的冒烟测试。它只是尽力应对上游变化,并非发布门槛——第三方应用有自己的更新节奏,也需要定期重新锁定版本。请参阅兼容性测试 README,了解测试范围和各应用的当前状态。

注意——已移除浏览器模式(2026-06-09)。 为了让 Victauri 专注于自身优势:在 Tauri 应用内部进行全栈内省,已移除实验性的 victauri-browser 扩展和 @4da/victauri-browser npm 包(适用于任意网站的 MCP)。如需进行浏览器自动化,请使用 Playwright 或 Chrome DevTools Protocol。Tauri 插件不受影响。详情和迁移说明: #15。

你将获得什么

适用于测试套件和 CI:

  • 全栈验证 — 点击按钮、验证 IPC 调用、查询数据库确认写入,并检查 UI 是否已更新,全都在一个测试中完成
  • 直接访问后端 — 查询 SQLite 数据库、浏览应用文件、读取配置、检查进程内存,无需 WebView 代理
  • 检测幽灵命令 — 找出高置信度的前端孤立调用(confirmed_ghosts:已调用,但始终报错“not found”),以及前端从未调用的后端命令
  • 跨边界状态检查 — 对比 DOM 状态与 Rust 后端状态,发现两者之间的偏差
  • 时光回溯录制 — 录制交互、创建状态检查点、重放操作序列并生成测试文件
  • 跨平台,无需 WebDriver — 在 macOS、Windows 和 Linux 上使用相同的工具接口(不依赖 CDP);可在 CI 中通过 xvfb 以无头模式运行。平台限制会明确记录,不会隐瞒:受信任的(OS 级)输入仅支持 Windows(其他平台会回退到合成事件),在 Linux 上截取窗口需要 X11/XWayland(纯 Wayland 会返回明确错误)
  • 发布版本中零运行时开销 — 服务受 #[cfg(debug_assertions)] 控制,因此 init() 不执行任何操作,发布版本中不会监听。将 victauri-plugin 作为普通的 [dependencies] 条目添加(应用二进制无法访问 [dev-dependencies]);该 crate 仍会被编译,因此若要将其完全排除在发布二进制之外,请将其设为由 Cargo 功能控制的可选依赖(victauri init --optional 会生成相应配置)。**SQLite 注意事项:**默认的 bundled-sqlite 功能会启用 rusqlite/bundled,而 Cargo 功能统一机制也会在发布版本中将其应用于你的应用所用的 rusqlite。如果你的应用链接的是系统 SQLite 或 SQLCipher,请使用 default-features = false, features = ["sqlite"]

**额外福利 — 面向 AI Agent:**同一服务也支持 MCP,因此 Claude Code、Cursor、Windsurf 以及任何 MCP 客户端都能通过它进行交互式调试,获得完整的全栈访问能力,无需额外设置。

Victauri 适用于你的应用吗?

Victauri 是一项添加到你自己应用源码中并重新构建的开发时依赖(普通的 [dependencies] 条目——不是应用二进制无法使用的 [dev-dependencies]),并非用于连接已运行或已发布应用的工具。只有以下四项条件全部满足时才能使用:

  1. Tauri 2,或 Tauri 3 预发布版(启用 victauri-plugin 的 tauri-v3 功能 — 参见插件 README)。Tauri 1.x 应用无法托管它 — 它们的 webkit2gtk-sys 0.18 和 Victauri 的 2.x 都会链接原生 web_kit2 库,造成无法解决的 Cargo 冲突。(Tauri 2 是当前主版本;Tauri 1 已属旧版本。)
  2. 从源码构建并接入插件 — 在 Cargo.toml 中添加一行、添加 .plugin(victauri_plugin::init()),并授予 victauri:default 权限(通过 capability 文件,或通过 victauri init --optional 生成的运行时授权)。无法将其注入其他人的二进制文件。
  3. **调试构建。**服务受 #[cfg(debug_assertions)] 控制,因此 init() 不执行任何操作,发布版本中不会监听。它专为开发和测试期间使用而设计。
  4. **每个窗口都授予 victauri:default。**如果缺少此权限,Tauri 的逐窗口权限 ACL 会悄然屏蔽桥接;window introspectability 工具会检测并说明这一问题。

框架(React、Vue/Nuxt、Svelte、原生)和 OS/WebView 引擎(WebView2 / WKWebView / WebKitGTK)均不影响使用 — 所有这些组合都受支持,并已在 Windows、macOS 和 Linux 上进行交叉验证。

✅ 适用场景❌ 不适用场景
你自己的 Tauri 2(或 Tauri 3 预发布版)应用,开发期间使用Tauri 1.x 应用
任何可从源码构建的 Tauri 2/3 应用(调试版)发布版 / 生产构建
任意前端框架,以及 3 种操作系统中的任意一种你未自行构建的二进制文件(没有源码)
非 Tauri 应用(Electron、原生应用、普通 Web 应用)

完整详情、边缘情况和已测试应用列表:兼容性。

快速开始

安装 CLI
cargo install victauri-cli
设置项目

在 Tauri 项目根目录中:

victauri init

此命令将:

  • 将 victauri-plugin 和 victauri-core(开发依赖:victauri-test、tokio)添加到 Cargo.toml
  • 找到 Tauri builder 时,将 .plugin(victauri_plugin::init()) 添加到其中
  • 创建 capabilities/victauri.json(授予 victauri:default)、.mcp.json、tests/ 中的初始测试、CI 工作流、CLAUDE.md 代码块和 Claude Code 技能(.claude/skills/victauri/SKILL.md)
  • 打印无法自行完成的步骤
接入插件

如果 init 报告已修改你的 builder,则跳过此步骤。否则添加一行:

// src-tauri/src/main.rs (or lib.rs)
tauri::Builder::default()
    .plugin(victauri_plugin::init())
    .invoke_handler(tauri::generate_handler![/* your commands */])
    .run(tauri::generate_context!())
    .expect("error while running tauri application");

在发布构建中,init() 会返回一个空操作插件:服务不会启动,链接器会将其移除,因此不需要功能标志。#[inspectable] 同样不会将其任何元数据(描述、意图、示例)编译到发布构建中。不过,插件的依赖仍会编译(见下文)。

发布构建零开销。 作为普通依赖,此 crate 仍会编译进发布构建中(处于惰性状态;链接器会移除不可达的服务,但默认的 bundled-sqlite 功能会加入 SQLite 的 C 代码——在未启用 LTO 时约增加 1.7 MB,在全新项目中启用 LTO 时约增加 58 KB——并且还会将应用自身的 rusqlite(如果有)切换为 bundled)。victauri init --optional 则会将 Victauri 设置为 victauri Cargo 功能背后的可选依赖,因此发布构建不会包含它;之后你需要启用该功能来启动应用(npm run tauri dev -- --features victauri,或 pnpm tauri dev --features victauri)。 参见入门 → 发布构建零开销。

运行测试

启动应用,然后运行冒烟测试套件:

npm run tauri dev                                # start your app (or pnpm/yarn/bun tauri dev)
cd src-tauri && VICTAURI_E2E=1 cargo test --test smoke   # in a second terminal (the tests live in src-tauri/tests)

在 Windows 上,正在运行的应用会锁定其 .exe,而 cargo test 会重新构建它,因此请为测试运行指定独立的目标目录:CARGO_TARGET_DIR=target-test VICTAURI_E2E=1 cargo test --test smoke。

也可以使用 CLI 立即验证:

victauri test                                    # 11 built-in smoke checks
victauri check                                   # server health + IPC diagnostics
victauri call dom_snapshot                       # any tool from the shell → JSON on stdout
与你的 Agent 搭配使用

每个客户端使用一条命令。每条命令都会写入(或合并到)该客户端的 MCP 配置,将其指向 victauri bridge --app <your identifier>,并添加 Agent 指令,告知它优先使用 Victauri 而非 CDP/Playwright,确认已连接到正确的应用,并使用 wait_for 等待异步任务完成:

客户端命令写入内容
Claude Codevictauri setup claude(普通的 victauri init 也会执行此操作).mcp.json、CLAUDE.md 代码块、.claude/skills/victauri/SKILL.md
Cursorvictauri setup cursor.cursor/mcp.json、AGENTS.md 代码块
VS Code / GitHub Copilotvictauri setup vscode.vscode/mcp.json、AGENTS.md 代码块
Windsurf / Devin Desktopvictauri setup windsurf --user-config用户级 mcp_config.json(其文档中唯一提及的配置)、AGENTS.md 代码块
OpenAI Codexvictauri setup codex.codex/config.toml(受信任项目;--user-config 用于 ~/.codex)、AGENTS.md 代码块
Gemini CLIvictauri setup gemini.gemini/settings.json、AGENTS.md 代码块、GEMINI.md 导入
Zedvictauri setup zed.zed/settings.json、AGENTS.md 代码块(Zed 只读取找到的第一个规则文件——.rules / .cursorrules 会隐藏 AGENTS.md)
Roo Codevictauri setup roo.roo/mcp.json、AGENTS.md 代码块
以上所有客户端victauri setup all上述所有项目级文件

现有配置会被合并,而不会覆盖(JSONC 文件中的注释会保留);重复运行不会更改任何内容;--dry-run 会显示将要进行的更改。请参阅Victauri 与其他 Tauri Agent 和测试工具的比较。

手动连接 AI Agent

在项目根目录添加 .mcp.json(由 victauri init 自动创建):

{
  "mcpServers": {
    "victauri": {
      "command": "victauri",
      "args": ["bridge"]
    }
  }
}

victauri bridge 标准输入/输出代理会在连接时发现正在运行的应用端口,并在重启后重新发现,因此 Agent 始终能连接到正确的应用——即使重新构建,或同时运行多个 Victauri 应用时也一样(添加 "--app", "<your.bundle.identifier>" 可固定连接到某个应用)。 建议使用它,而不要使用固定的 "url": "http://127.0.0.1:7373/mcp",因为固定 URL 会硬编码端口,并可能绑定到错误的应用。

适用于 Claude Code、Cursor、Windsurf 和任何 MCP 客户端。你的 Agent 可以访问完整技术栈:DOM 快照、IPC 监控、命令调用、截图、无障碍审计等。

使用 Claude Code 时,启动应用后,Claude 可以立即:

  • 检查 DOM 树,并点击/输入/填充任意元素
  • 调用任意 #[tauri::command] 并验证响应
  • 读取应用配置、列出文件、查询 SQLite 数据库
  • 截图并审计无障碍功能
  • 记录交互并将其重放为测试

编写测试

e2e_test! 宏会处理服务检测和自动连接:

use victauri_test::{e2e_test, VictauriClient};

e2e_test!(greet_flow, |client| async move {
    client.fill_by_id("name-input", "World").await.unwrap();
    client.click_by_id("greet-btn").await.unwrap();
    client.expect_text("Hello, World!").await.unwrap();
});
定位器 API

对于复杂查询,可使用支持组合的定位器和自动等待断言:

use victauri_test::prelude::*;

e2e_test!(settings_flow, |client| async move {
    let save = Locator::role("button").and_text("Save");
    let email = Locator::label("Email address");

    email.fill(&mut client, "[email protected]").await.unwrap();
    save.click(&mut client).await.unwrap();

    Locator::test_id("toast-message")
        .expect(&mut client)
        .to_contain_text("Settings saved")
        .await
        .unwrap();
});

定位器支持 role、text、test_id、css、label、placeholder、alt_text 和 title 策略,并可链式细化(.and_text()、.nth()、.and_tag())。完整的定位器 API 参考请参阅测试指南。

直接客户端方法
方法功能
click_by_text("Submit")按可见文本查找元素并点击
click_by_id("save-btn")按 HTML id 查找元素并点击
fill_by_id("email", "[email protected]")按 id 查找输入框并填充值
type_by_id("search", "query")按 id 查找输入框并逐字符输入
select_by_id("theme", "dark")按 id 查找下拉框并选择选项
expect_text("Success!")轮询直至文本出现(超时为 5s)
expect_no_text("Error")轮询直至文本消失(超时为 3s)
text_by_id("counter")获取指定 id 元素的文本内容

全栈验证

这正是 Victauri 的独到之处——验证前端操作是否确实触发了正确的后端逻辑。

从 UI 到 IPC 再到数据库
// Click "Save" in the UI
client.click_by_id("save-btn").await?;

// Verify the IPC command was called
let log = client.get_ipc_log(None).await?;
assert_ipc_called(&log, "save_settings");

// Verify the database was actually written
let result = client.query_db(
    "SELECT value FROM settings WHERE key = 'theme'",
    None, None,
).await?;
assert_eq!(result["rows"][0]["value"], "dark");
流畅验证

通过单份报告一次性检查多个条件——DOM、IPC、无障碍功能和错误:

client.verify()
    .has_text("Settings saved")
    .ipc_was_called("save_settings")
    .no_console_errors()
    .no_ghost_commands()
    .ipc_healthy()
    .coverage_above(80.0)
    .run()
    .await?
    .assert_all_passed();
检测未使用的命令

查找孤立命令——在前端调用、但后端缺失的命令:

let ghosts = client.detect_ghost_commands().await?;
assert!(ghosts["confirmed_ghosts"].as_array().unwrap().is_empty(),
    "Found ghost commands: {ghosts}");

IPC 检查点、视觉回归测试、IPC 覆盖率、无障碍审计、性能监控、时间回溯记录、CI 集成等内容,请参阅测试指南。


MCP 工具

覆盖完整技术栈的 35 个工具——后端、IPC、WebView 和内省:

后端工具(直接访问 Rust,无需 WebView)
工具功能
app_info应用配置、目录路径、环境变量、发现的数据库、进程信息
list_app_dir浏览应用数据/配置/日志/本地数据目录中的文件
read_app_file读取应用后端目录中的文件(UTF-8 或 base64)
query_db支持自动发现的只读 SQLite 查询
invoke_command通过应用实际的 IPC 路径调用任意 Tauri 命令(通过 WebView 的 invoke 分发,因此需要有运行中的窗口)
app_state读取应用定义的后端状态探针(流水线/队列/缓存内部状态)——无需 IPC 往返
get_memory_stats实时获取操作系统进程内存数据(工作集、页面错误)
IPC 工具
工具功能
get_registry列出所有 #[inspectable] 命令架构
detect_ghost_commands查找孤立的前端 IPC 调用(高置信度的 confirmed_ghosts)
check_ipc_integrity检测卡住、过时或出错的 IPC 调用
verify_state对比前端 DOM 与后端状态
resolve_command将自然语言匹配到相应的 Tauri 命令
Webview 工具
工具功能
eval_js在 Webview 中执行 JavaScript
dom_snapshot包含引用句柄的完整无障碍树
find_elements按文本、角色、测试 ID、CSS、标签、占位符、替代文本、标题搜索
screenshot平台原生窗口截图(不使用 Chromium)
wait_for轮询条件:文本、选择器、IPC 完成、JS expression 或 Tauri event——无需休眠即可等待异步后端工作
assert_semantic执行 JS,并根据预期值进行断言
复合工具(每个工具可执行多个操作)
工具操作
interactclick、double_click、hover、focus、scroll_into_view、select_option
inputfill、type_text、press_key(支持组合键;trusted: true = OS 级输入,仅限 Windows)
windowget_state、list、manage、resize、move_to、set_title、introspectability
storageget、set、delete、get_cookies
navigatego_to、go_back、get_history、set_dialog_response、get_dialog_log
recordingstart、stop、checkpoint、list_checkpoints、get_events、events_between、get_replay、export、import、replay、flush
inspectget_styles、get_bounding_boxes、highlight、clear_highlights、audit_accessibility、get_performance
cssinject、remove
routeadd(拦截/满足/延迟 fetch+XHR)、list、clear、clear_all、matches
tracestart、stop、status、frames(后台屏幕录制环形缓冲区)
animationlist、scrub、sample(Web Animations API——不使用 CDP)
logsconsole、network、ipc、navigation、dialogs、events、slow_ipc、clear
introspectcommand_timings、coverage、command_catalog、contract_record、contract_check、contract_list、contract_clear、startup_timing、capabilities、db_health、plugin_state、processes、plugin_tasks、event_bus、event_bus_clear
faultinject(延迟/错误/丢弃/损坏)、list、clear、clear_all
explainsummary、last_action、diff
get_plugin_info插件配置:端口、工具、隐私、版本
get_diagnosticsShadow DOM、服务工作线程、iframe、大型 DOM 检测

无需 MCP 客户端:每个工具也可以作为 shell 命令使用——victauri call query_db query="SELECT 1" 会以 JSON 格式打印结果(victauri tools <name> 会显示工具的参数)——也可通过 REST 端点 POST /api/tools/{name} 调用。请参阅工具参考。


工作原理

AI Agent / cargo test / curl
        |
        v
  HTTP on :7373
  ├── /mcp          (MCP protocol — for AI agents)
  ├── /api/tools    (REST API — for scripts and CI)
  └── /health       (health check — for monitoring)
        |
        v
  Victauri Plugin  (inside Tauri process)
     |       |       |
     v       v       v
  WebView  IPC    Backend
  - DOM    - log   - app config
  - click  - args  - file system
  - eval   - cmds  - SQLite DBs
  - a11y   - ghost - memory
  - perf   - verify- env vars

Victauri 在 Tauri 进程内部运行——使用同一线程池和同一内存空间。这并非实现细节,而是会改变可能实现的功能:

嵌入式(Victauri)外部进程
工具响应后端工具:一次本地主机 HTTP 跳转和一次进程内调用(无需额外进程)。Webview 工具:JS 往返约需 10-30 ms同样的 HTTP 跳转,外加通过单独进程中继
状态准确性直接从进程实时读取后端状态。Webview 端日志(IPC、控制台)是有界页面缓冲区外部工具能够观察到的内容
后端访问权限完整(AppHandle、DB、状态)受限(仅 Webview)
设置在 Cargo.toml 中添加一行单独的进程 + 配置
发布构建init() 不执行任何操作(运行时开销为零)必须手动禁用

**端口选择:**Victauri 会先尝试端口 7373,若被占用,则依次回退尝试 7374-7383。实际使用的端口会写入临时目录,以便客户端自动发现。


架构

victauri/
├── crates/
│   ├── victauri-plugin/     # Tauri plugin + MCP server + JS bridge (the main crate)
│   ├── victauri-core/       # Shared types (events, registry, snapshots, verification)
│   ├── victauri-macros/     # #[inspectable] proc macro for command schemas
│   ├── victauri-test/       # Test client + Locator API + assertion helpers
│   ├── victauri-cli/        # CLI: init, check, test, record, watch, coverage
│   └── victauri-watchdog/   # Health-check sidecar for crash recovery
├── docs/                    # mdbook documentation site
└── examples/
    └── demo-app/            # Multi-window Tauri app with 21 instrumented commands
Crate用途是否依赖 Tauri?
victauri-plugin嵌入你的应用——MCP 服务 + 桥接是
victauri-test在测试中使用——客户端 + 断言否
victauri-cli全局安装——脚手架 + 诊断否
victauri-macros用于命令——#[inspectable]否
victauri-core共享类型(通常不会直接使用)否
victauri-watchdog作为边车运行,以便在崩溃后恢复否

安全性

Victauri 面向开发环境设计,不适用于生产环境:

  • 仅限调试模式:服务受 #[cfg(debug_assertions)] 控制,因此 init() 不执行任何操作,发布构建中也不会监听任何内容
  • 仅限本地主机:绑定到 127.0.0.1,提供 DNS 重绑定保护
  • 默认启用身份验证:自动生成 Bearer 令牌,并由客户端自动发现(可通过 .auth_disabled() 选择退出)
  • 速率限制:每秒 1000 个请求,采用令牌桶算法
  • 隐私配置文件:Observe(只读)、Test(交互)、FullControl(全部权限)
  • 输出脱敏:自动清除工具响应中的 API 密钥、令牌和电子邮件地址

威胁模型、隐私配置和命令过滤请参阅安全指南。


CI 集成

GitHub Actions

使用内置的复合操作,在 CI 中运行 Victauri 冒烟测试:

- name: Build my app
  run: cargo build -p my-app

- name: Start app under xvfb
  run: |
    xvfb-run -a ./target/debug/my-app &
    sleep 3

- uses: 4DA-Systems/victauri/.github/actions/[email protected]
  with:
    max-load-ms: 10000
    max-heap-mb: 512

该操作会安装 victauri-cli,等待服务运行正常,然后执行全部 11 项冒烟检查。可用输入:

输入默认值说明
port7373Victauri 服务端口
max-load-ms10000DOM 完成时间上限(ms)
max-heap-mb512JS 堆用量上限(MB)
junit-pathJUnit XML 报告的写入路径
coveragefalse在测试后运行 IPC 覆盖率报告
coverage-threshold最低覆盖率 %(低于此值则失败)
health-timeout30等待服务运行正常的秒数

或者,使用 victauri init 为你的项目生成完整的 CI 工作流文件:

victauri init    # generates .github/workflows/victauri.yml

文档


不支持的功能

  • 不用于生产环境 — 按设计仅支持调试构建
  • 不支持远程访问 — 仅限 localhost,不支持端口转发
  • 仅支持同源框架 — 会遍历同源 iframe;跨源框架会标记并跳过
  • 前端 IPC 控制仅支持 fetch 传输 — fault 注入适用于通过 Victauri 自身的 invoke_command 驱动的命令;若要更改应用真实 invoke 接收的内容,route 规则可在 Tauri 的 fetch 传输(桌面端默认使用)上模拟或延迟请求,但不支持通过 postMessage(Android 或回退后)
  • 并非所有 webview↔Rust 消息都会记录在 IPC 日志中 — 两种 Tauri 传输(自定义协议 fetch 和 postMessage 回退)上的命令调用都会被捕获(get_diagnostics 会报告当前使用的传输以及捕获是否完整),但 listen_events 之外的 Rust→JS 事件、Channel 消息和隔离模式参数不会被捕获。参见架构 → IPC 层
  • 尚未达到 1.0 — API 可能会变更(CI 中通过 semver 检查)

开发

cargo build --workspace                               # Build all crates
cargo test --workspace                                # Run all tests
cargo bench -p victauri-core                          # Criterion benchmarks (16)
cargo clippy --workspace --all-targets                # Lint (20 enforced lints)
cargo fmt --all -- --check                            # Format
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps  # Docs (zero warnings)

Lint 策略: 20 条 clippy lint(pedantic + nursery)以 deny 级别强制执行 — 参见 Cargo.toml 中的 [workspace.lints.clippy]。

社区与贡献

Victauri 是由 4DA Systems 创建并维护的开源项目,4DA Systems 用它来测试自己的 Tauri 应用。我们希望它成为测试 Tauri 应用全栈功能的默认方式,而这需要不止一家公司的参与。

  • 在 Tauri 应用中使用它? 告诉我们 — 在 讨论区发起讨论或提交 issue。我们很乐意将你加入“使用者”列表,并了解遇到了哪些问题。
  • 想要贡献? 请参阅 CONTRIBUTING.md。适合入门的方向:为 victauri-test 添加更多断言辅助函数、编写特定框架的测试指南,以及 CI 配置示例。
  • 发现了 bug,或遇到无法正常运行的 Tauri 应用? 请提交 issue,并附上应用信息和失败的工具调用 — 这些报告对我们最有帮助。

如果 Victauri 帮你省下了一个周末配置 WebDriver,给个 ⭐ 就能帮助其他 Tauri 开发者发现它。

许可证

Apache-2.0 — LICENSE

由 4DA Systems 构建并维护。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。