Tauri 插件
relay-core-tauri 是 RelayCore 的 Tauri v2 宿主适配器:在桌面应用进程内嵌入 CoreState,通过 Tauri command 暴露代理启动、流量查询、拦截控制与 CA 管理。RelayCraft 桌面端即基于此插件构建;你也可以在自建 Tauri 应用中集成同一套能力。
适用场景
- 需要在桌面应用内运行 MITM 代理,而不是单独启动 CLI
- 前端 UI 要直接调用
invoke查询 Flow、处理断点、读写策略 - 与 CLI / HTTP API / MCP 共享同一 runtime,保证行为一致
架构位置
- 数据面:
relay-core-lib— 捕获与 MITM - 编排层:
relay-core-runtime—CoreState - 宿主适配:
relay-core-tauri— Tauri IPC 与 Flow 事件桥接
快速集成
1. 添加依赖
在 Tauri 应用的 src-tauri/Cargo.toml 中引入插件 crate(与 RelayCore 主仓库同版本):
[dependencies]
relay-core-tauri = { git = "https://github.com/relaycraft/relay-core", tag = "v0.5.2" }
tauri = { version = "2", features = [] } 2. 注册插件
// src-tauri/src/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(relay_core_tauri::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
} 插件 ID 为 relay-core-tauri。初始化时会创建 RelayCoreState(包装 CoreState 与 TauriContext)并注册到 Tauri 状态管理。
3. 配置权限(Tauri v2 capabilities)
默认仅允许 start_core_proxy。完整桌面调试场景建议在 capability 中显式开放所需 command:
{
"identifier": "main-capability",
"windows": ["main"],
"permissions": [
"relay-core-tauri:allow-start-core-proxy",
"relay-core-tauri:allow-stop-core-proxy",
"relay-core-tauri:allow-get-core-status",
"relay-core-tauri:allow-get-flow-detail",
"relay-core-tauri:allow-get-pending-intercepts",
"relay-core-tauri:allow-resume-flow",
"relay-core-tauri:allow-install-ca-cert"
]
} 4. 从前端启动代理
import { invoke } from "@tauri-apps/api/core";
// 默认端口 8080;CA 写入应用 app_data_dir
await invoke("plugin:relay-core-tauri|start_core_proxy", { port: 8080 });
const status = await invoke("plugin:relay-core-tauri|get_core_status");
console.log(status); 首次 HTTPS 拦截前需信任 CA:start_core_proxy 会在应用数据目录生成证书,再调用 install_ca_cert 打开系统安装引导(macOS / Windows)。
可用 Commands
| Command | 说明 |
|---|---|
start_core_proxy | 启动嵌入式代理(可选 port,默认 8080) |
stop_core_proxy | 停止代理 |
get_core_status | 运行状态快照 |
get_core_metrics | Prometheus 兼容指标 |
get_flow_detail | 按 ID 获取 Flow 详情 |
get_pending_intercepts | 列出待处理拦截 |
resume_flow | 继续或丢弃已暂停流量 |
set_intercept_rule | 设置拦截规则 |
get_policy / update_policy / patch_policy | 代理策略读写 |
load_script | 热加载 Deno 脚本 |
get_ca_cert_path | 返回 CA 证书路径(需先启动代理) |
install_ca_cert | 打开系统 CA 安装引导 |
get_recent_audit | 最近控制面审计事件 |
典型工作流
// 1. 启动代理
await invoke("plugin:relay-core-tauri|start_core_proxy", { port: 8080 });
// 2. 安装 CA(用户需在系统对话框中确认信任)
await invoke("plugin:relay-core-tauri|install_ca_cert");
// 3. 查询待处理拦截并恢复
const pending = await invoke("plugin:relay-core-tauri|get_pending_intercepts");
// ... UI 展示后 ...
await invoke("plugin:relay-core-tauri|resume_flow", { id: "flow-id:request", action: "continue" }); 与 CLI / MCP 的关系
| 宿主 | 适用 |
|---|---|
relay-core-cli | 终端调试、脚本开发、CI |
relay-core-probe(@relay-core/mcp) | AI Agent / IDE 集成 |
relay-core-tauri | 桌面应用内嵌,与 UI 深度集成 |
三者共享同一套 runtime 能力面;差异在宿主进程与交互方式。CLI 侧文档见快速开始,HTTP 控制面见HTTP API。