滤液
Exfiltered是Rust应用程序的远程调试框架。
它允许您检查和控制正在运行的应用程序(即使在WASM/浏览器环境中) 通过CLI工具。当尝试使用代理调试程序时,这尤其有用,例如 克劳德密码、Codex、Gemini等。
概述
Exfiltre提供了一个简单、自包含和可嵌入的服务器实现, 主要是出于嵌入可调试程序的需要。它的设计目的是 易于使用,易于用自定义命令扩展,易于与现有的Rust代码库集成,
与需要ptrace/OS支持的传统调试器(gdb、lldb)不同,exfiltrate 通过在应用程序中嵌入一个小型服务器线程来工作。这使它能够工作 在WebAssembly、移动设备、远程机器、沙盒等受限环境中, 等等
主要特点
- 无需异步运行时:使用线程而不是tokio,简化了集成。
- 可嵌入的:进入任何Rust应用程序进行调试或代理交互。
- 平台支持:适用于桌面、移动和WebAssembly(有限制)。
- 代理架构:通过WebSockets启用浏览器/WASM应用程序的远程调试。
- 隐私意识日志:与集成
logwise用于受控日志捕获。
用例
Exfiltre是这些常见问题的答案:
- 如何快速将程序的内部状态或操作暴露给CLI?
- 如何将自定义调试命令添加到程序的调试版本中?
- 我如何与在外部环境中运行的程序(如移动应用程序或浏览器)进行交互?
- 我如何引导LLM代理在运行时推理程序的状态?
快速启动
claude“运行exfiltrate_cli命令,然后将库集成到我的程序中。”
渐进式披露
一个关键的设计理念是使用类似的功能 代理技能 逐步披露对任务有用的信息。当exfiltrate启动时,它提供 一份有用的主题菜单,供人类或代理人在闲暇时仔细阅读。
使用 exfiltrate list 在CLI中查看所有可用命令(内置和自定义), 和 exfiltrate help 以获取有关任何命令的详细信息。
代理使用
我建议在调试Rust之前明确指示代理使用exfiltrate命令 程序。
启动速度较慢
基本用法
- 添加
exfiltrate作为一种依赖。 - 呼叫
exfiltrate::begin()在程序开始时。 - 使用
exfiltrateCLI用于连接和运行命令。
实现自定义命令
use exfiltrate::command::{Command, Response};
struct HelloCommand;
impl Command for HelloCommand {
fn name(&self) -> &'static str {
"hello"
}
fn short_description(&self) -> &'static str {
"Greets a user"
}
fn full_description(&self) -> &'static str {
"Greets a user. Usage: hello [name]"
}
fn execute(&self, args: Vec) -> Result {
let name = args.get(0).map(|s| s.as_str()).unwrap_or("World");
Ok(format!("Hello, {}!", name).into())
}
}
// Register the command
exfiltrate::add_command(HelloCommand);建筑
为什么是线程?
许多Rust网络库依赖于 tokio 或其他异步运行时。这是有道理的 高并发服务器,但当您只需要时,它会增加大量的重量和复杂性 调试程序。
此代码库不依赖于 tokio相反,它只是使用线程。每个人的线程。
WebAssembly支持
在浏览器中运行的WebAssembly应用程序无法打开原始TCP套接字。支持调试 这些应用, exfiltrate 使用代理架构:
- WASM应用程序连接到本地代理(
exfiltrate_proxy)通过WebSockets。 - 这
exfiltrateCLI通过TCP连接到同一个代理。 - 代理桥接连接,允许CLI控制WASM应用程序,就像它是本地的一样。
功能开关
logwise-实现与的集成logwise用于日志捕获的日志框架。
响应类型
命令可以返回不同的响应类型:
- 字符串 -文本输出(最常见)
- 文件 -二进制文件通过
FileInfo - 图像 -RGBA图像通过
ImageInfo
对于文件和图像响应,请使用以下类型 command 模块。图像使用 RGBA8 从再出口 rgb 机箱。
有关集成指导,请运行 exfiltrate help integration。有关详细示例 所有响应类型,运行 exfiltrate help custom_commands 在CLI中。
许可证
看 许可证 了解详情。
