aaryanrwt/QuickChat
GitHub: aaryanrwt/QuickChat
一款基于 Rust 和 QUIC 的零配置点对点终端通讯工具,通过端到端加密与去中心化发现机制实现无需服务器的安全即时通信。
Stars: 2 | Forks: 0
# QuickChat
`。
* **优势:** 完全的隐私保护,不会因中心化服务中断而停机,且具有超低延迟。
### OpenMLS 群组密钥更新
* **功能:** 使用持续群组密钥协商(CGKA)保护多方群组的安全。
* **存在原因:** 在动态聊天室中提供完美前向保密(PFS)。
* **如何使用:** 当多个对等节点加入路由聊天时自动进行。
* **优势:** 即使今天有密钥被泄露,过去和未来的消息依然是安全的。
### 全球节点发现(Kademlia DHT)
* **功能:** 自动发现全球其他 QuickChat 用户。
* **存在原因:** 克服局域网 mDNS 的限制。
* **如何使用:** 由 `libp2p-kad` 在后台静默处理。
* **优势:** 无需手动设置端口转发,即可与互联网上任何地方的开发者建立连接。
### SQLite 消息持久化
* **功能:** 将加密的聊天记录本地保存到您的磁盘。
* **存在原因:** 以免您在关闭终端时丢失对话。
* **如何使用:** 默认启用。启动时会自动加载历史记录。
* **优势:** 拥有完全的数据所有权和离线阅读功能。
### WASM 插件生态系统
* **功能:** 允许社区插件在安全、沙箱化的环境中运行。
* **存在原因:** 在不危及核心应用程序的前提下提供无限的可扩展性。
* **如何使用:** 将 `.wasm` 模块加载到 `plugins/` 目录中。
* **优势:** 安全地添加 GitHub 集成或本地 LLM 桥接等功能。
## 4. 版本对比
| 功能 | 版本 2 | 版本 3 |
|----------|-----------|-----------|
| **网络** | 仅限局域网 | 全球互联网路由 |
| **插件** | 基础执行 | WASI 沙箱化,IPC 主机通信 |
| **发现(DHT)** | 无(仅限 mDNS) | 集成 Kademlia DHT |
| **中继** | 无 | `quickchat_relay` 守护进程,用于异步投递 |
| **密码学(MLS)**| Noise_XX(仅限一对一) | OpenMLS(支持群组 CGKA) |
| **持久化(SQLite)**| 仅限临时 RAM | 持久化的本地 SQLite 数据库 |
| **UI** | 单一聊天视图 | 多面板工作区(聊天、联系人、插件) |
| **命令** | 基础斜杠命令 | 高级 `code://` 指针,用于动态生成实时编辑器 |
| **安全性** | TOFU 密钥交换 | 沙箱化插件与完美前向保密 |
## 5. 安装说明
### 从源码构建
请确保您已安装最新的 Rust 工具链。
**Linux / macOS / Windows:**
```
git clone https://github.com/aaryanrwt/QuickChat.git
cd QuickChat
cargo build --release
```
**使用 Cargo:**
```
cargo install --path .
```
可执行文件将被放置在您的 cargo bin 目录中(例如,`~/.cargo/bin/quickchat_cli`)。
## 6. 快速入门
1. **启动:** 运行可执行文件。
quickchat_cli
2. **发现:** DHT 将自动映射本地和全球节点。请查看您的“联系人”面板。
3. **连接:** 将 `/connect` 命令与对等节点的公钥一起使用(显示在其 UI 顶部)。
4. **消息:** 输入您的消息并按 `Enter` 键。
5. **插件:** 尝试发送 `code://file.rs:42` 指针,以自动触发他们的本地编辑器!
6. **退出:** 输入 `/quit` 或按 `Ctrl+C`。
## 7. 命令
### `/help`
* **用途:** 显示内置的帮助菜单。
* **语法:** `/help`
* **示例:** `/help`
* **预期输出:** 一个总结所有可用键盘快捷键和插件命令的模态窗口。
### `/connect`
* **用途:** 发起 OpenMLS 握手以建立安全的 P2P 连接。
* **语法:** `/connect `
* **示例:** `/connect 8a2f...3c`
* **预期输出:** UI 将显示连接成功状态并切换到聊天视图。
### `/clear`
* **用途:** 清除可见的终端工作区面板。
* **语法:** `/clear`
* **示例:** `/clear`
* **预期输出:** 屏幕将被清空。(您的 SQLite 历史记录将在磁盘上保持完好)。
### `/ping`
* **用途:** 评估 WASM 插件沙箱功能。
* **语法:** `/ping`
* **示例:** `/ping`
* **预期输出:** 插件将拦截该命令并返回 `Pong!`。
### `/quit`
* **用途:** 安全刷新数据库,关闭网络流并退出。
* **语法:** `/quit`
* **示例:** `/quit`
* **预期输出:** 终端返回到标准 shell 提示符。
## 8. 架构
QuickChat 采用事件驱动的高度模块化架构,将网络、UI 和插件执行分离开来。核心应用程序逻辑使用高并发的异步事件总线来协调这些系统。
### 组件图
```
graph TD
subgraph QuickChat Node
CLI[CLI Entry Point] --> Core[Application Core]
Core --> DB[(SQLite Database)]
Core --> TUI[Ratatui UI]
Core --> Net[Network Layer]
Net --> QUIC[QUIC Transport]
Net --> DHT[Kademlia DHT]
Net --> MLS[OpenMLS Crypto Engine]
Core --> Plugins[WASM Plugin Host]
Plugins --> Sandbox[WASI Sandbox]
end
QUIC <--> Internet((P2P Internet))
DHT <--> Internet
```
### 消息流转序列
```
sequenceDiagram
participant User
participant TUI
participant Core
participant Net
participant Peer
User->>TUI: Types message & hits Enter
TUI->>Core: Emits AppEvent::Message
Core->>Core: Saves to SQLite
Core->>Net: Dispatches for transmission
Net->>Net: Encrypts via OpenMLS
Net->>Peer: Streams via QUIC
Peer-->>Net: Acknowledges receipt
```
## 9. 项目结构
该 monorepo 经过精心拆分,划分为具有逻辑的各个 crate:
* **`quickchat_cli`**:二进制可执行文件及命令行参数解析器。
* **`quickchat_core`**:核心应用程序状态、SQLite 数据库逻辑和 OpenMLS 密码学引擎。
* **`quickchat_net`**:处理 QUIC 传输的 P2P 网络层。
* **`quickchat_dht`**:基于 Kademlia 的全球对等节点路由与发现模块。
* **`quickchat_relay`**:一个可选的无头守护进程,用于异步的存储转发式消息投递。
* **`quickchat_tui`**:使用 `ratatui` 和 `crossterm` 构建的交互式终端用户界面。
* **`quickchat_plugin_host`**:安全加载并执行第三方 `.wasm` 插件的 `wasmtime` 运行时。
* **`quickchat_plugin_sdk`**:供社区开发者构建 QuickChat 扩展的 FFI 绑定和宏。
* **`quickchat_types`**:跨网络和 WASM 边界使用的共享 Protocol Buffer 定义。
## 10. 安全性
* **消息层安全(MLS):** 我们使用 `MLS_128_DHKEMX25519_CHACHA20POLY1305_SHA256_Ed25519` 密码套件。这提供了最先进的带有认证加密的关联数据(AEAD)和完美前向保密。
* **插件沙箱:** 第三方插件在受限的 WebAssembly 系统接口(WASI)内执行。它们与主机操作系统的网络堆栈和文件系统隔离,严格通过结构化的进程间通信(IPC)进行通信。
* **去中心化发现:** Kademlia DHT 防止任何中央服务器映射出谁在与谁通信的社交图谱。
* **本地存储:** 您的聊天记录(`quickchat.db`)严格保存到您的本地 SSD 中。我们完全无法访问您的数据。
## 11. 性能
* **QUIC 多路复用:** 消息和文件传输通过高度多路复用的 UDP 流进行,消除了与传统 TCP 套接字相关的队头阻塞。
* **异步 I/O:** 完全由 `tokio` 驱动,该应用程序可以处理数千个并发的后台 DHT 查询,而不会阻塞 60 FPS 的 UI 渲染线程。
* **静态链接:** 整个应用程序编译为单个二进制文件,没有庞大的运行时要求。
## 13. 路线图
计划在 **版本 4** 生命周期中推出的即将上线功能:
* **异步加入群组:** 升级 `quickchat_relay` 以临时保存加密的 MLS KeyPackages,从而支持无缝的离线群组邀请。
* **加密 SQLite:** 集成 SQLCipher,对静态存储的本地 `quickchat.db` 进行加密。
* **插件注册表:** 提供一个集中的索引,用于直接从 TUI 中发现并安装社区 WASM 插件。
* **自动化 CI/CD 钩子:** 提供原生集成,将 GitHub Actions 的构建结果直接推送到 QuickChat 频道中。
去中心化、安全的点对点终端通信工具
## 1. 概述 QuickChat 让开发者能够通过局域网和互联网进行安全通信,无需中心化服务器、账号或云端基础设施。它通过将您的对话完全保持在点对点、加密的状态,并运行在开发者最喜爱的终端环境中,从而解决了不可信网络和企业数据挖掘的问题。 无论您是跨越全球进行结对编程,还是在网闸隔离的网络中进行安全协作,QuickChat 都能提供毫不妥协的隐私保护以及出色的原生终端用户体验。 ## 3. 功能概述 ### 点对点加密消息传递 * **功能:** 使用 QUIC 流直接将您与对等节点连接起来。 * **存在原因:** 消除中间人服务器和数据收集。 * **如何使用:** 输入 `/connect标签:AI工具, Kademlia DHT, P2P网络, QUIC, Rust, 即时通讯, 可视化界面, 端到端加密, 终端应用, 网络流量审计, 通知系统