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-runtimeCoreState
  • 宿主适配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(包装 CoreStateTauriContext)并注册到 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_metricsPrometheus 兼容指标
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/mcpAI Agent / IDE 集成
relay-core-tauri桌面应用内嵌,与 UI 深度集成

三者共享同一套 runtime 能力面;差异在宿主进程与交互方式。CLI 侧文档见快速开始,HTTP 控制面见HTTP API

相关文档