内容
<p align="center">
<img src="crates/desktop/icons/icon.png" alt="OpenFlow" width="128" height="128" />
</p>
<h1 align="center">OpenFlow</h1>
<p align="center">
<strong>可视化构建和运行 AI 智能体工作流</strong><br/>
一个基于 Rust 的桌面应用程序,用于构建基于 DAG 的智能体管道,包含工具、子智能体和实时对话。
</p>
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License" /></a>
<img src="https://img.shields.io/badge/rust-2021-orange?logo=rust&logoColor=white" alt="Rust 2021" />
<img src="https://img.shields.io/badge/tauri-2.0-FFC131?logo=tauri&logoColor=white" alt="Tauri 2" />
<img src="https://img.shields.io/badge/react-18-61DAFB?logo=react&logoColor=white" alt="React" />
</p>
<p align="center">
<a href="#screenshots">截图</a> ·
<a href="#features">功能</a> ·
<a href="#architecture">架构</a> ·
<a href="#quick-start">快速开始</a> ·
<a href="#development">开发</a> ·
<a href="#contributing">贡献</a>
</p>
---
## 截图
<p align="center">
<img src="docs/assets/workflow-run.png" alt="运行工作流,带有并行智能体层和节点聊天" width="900" />
<br/>
<em>运行多智能体管道 — 并行层、实时状态和节点对话。</em>
</p>
<p align="center">
<img src="docs/assets/agent-editor.png" alt="智能体编辑器,用于模型、提示和审批设置" width="900" />
<br/>
<em>配置可重用智能体 — 模型、提示、JSON 模式和工具审批。</em>
</p>
<p align="center">
<img src="docs/assets/build-workflow-with-ai.png" alt="使用自然语言目标构建工作流" width="900" />
<br/>
<em>用自然语言描述工作流,进行迭代,然后应用到编辑器。</em>
</p>
## 功能
<table>
<tr>
<td width="50%" valign="top">
### 可视化工作流编辑器
将节点拖放到画布上,将它们连接成 DAG,并在检查器面板中配置每个智能体。每次运行前都会进行验证:循环和断开的边永远不会执行。
</td>
<td width="50%" valign="top">
### 并行智能体层
同一拓扑层中的节点并行运行。下游智能体自动接收上游输出,无需手动配置。
</td>
</tr>
<tr>
<td width="50%" valign="top">
### 工具和子智能体
内置文件系统、shell 和搜索工具,带有分级审批策略。节点可以在运行时调用保存的智能体作为子智能体。
</td>
<td width="50%" valign="top">
### 多提供商 LLM 支持
OpenAI 兼容和 Anthropic 适配器位于单个 `AiPort` 后面。每个节点可以切换模型或在工作流级别覆盖。
</td>
</tr>
<tr>
<td width="50%" valign="top">
### 项目感知持久性
工作流存储在应用商店或 `.flow/workflows/` 下的存储库中。项目绑定存储库路径,以便智能体在正确的工作目录下运行。
</td>
<td width="50%" valign="top">
### 交互式运行
暂停、恢复、审批工具和与各个节点聊天。节点对话面板实时显示思考、工具调用和结果。
</td>
</tr>
</table>
## 架构
OpenFlow 使用嵌套六边形架构:五层,依赖关系严格向内,在 CI 中强制执行。
```
┌─────────────────────────────────────────────────────────┐
│ UI (React + TypeScript) crates/ui │
├─────────────────────────────────────────────────────────┤
│ 桌面适配器(Tauri IPC) crates/desktop │
├─────────────────────────────────────────────────────────┤
│ 协调(运行、存储) crates/orchestration│
├──────────────────────────┬──────────────────────────────┤
│ 引擎(无 I/O 核心) │ 提供商(LLM 传输) │
│ crates/engine │ crates/providers │
└──────────────────────────┴──────────────────────────────┘
```
| Crate | 责任 |
| --- | --- |
| **engine** | 工作流模型、DAG 验证、运行状态机、端口 |
| **orchestration** | 持久性、运行协调、工具执行、组合根 |
| **providers** | OpenAI 兼容和 Anthropic 线适配器 |
| **desktop** | Tauri 命令和 IPC 边界 |
| **ui** | 画布、对话面板、设置、工作流编辑器 |
深入了解:[`docs/architecture/technical-overview.md`](docs/architecture/technical-overview.md)
## 快速开始
### 先决条件
- [Rust](https://rustup.rs/) (稳定版)
- [Node.js](https://nodejs.org/) 18+
- [Tauri](https://v2.tauri.app/start/prerequisites/) 的平台构建工具
### 设置
```bash
./scripts/setup.sh # 安装依赖
./scripts/setup.sh --dev # 设置 + 启动开发应用
./scripts/setup.sh --build # 设置 + 构建发布包
```
### 从源代码运行
```bash
npm --prefix crates/desktop run start -- dev
```
编译的应用位于 `crates/desktop/target/release/bundle/`。
> **macOS gatekeeper:** 未签名的本地构建在第一次启动时可能会被阻止。右键单击 **OpenFlow** → **Open**,或运行 `xattr -cr /path/to/OpenFlow.app`。
## 开发
```bash
# 完整验证门控(格式、clippy、测试、架构、UI 类型检查等)
./scripts/verify.sh
# 仅前端(热重载,无 Tauri shell)
npm --prefix crates/ui run dev
# 前端类型检查
npm --prefix crates/ui run typecheck
# 工作流验收测试
cargo test -p orchestration --test workflow_acceptance -- --nocapture
```
| 资源 | 路径 |
| --- | --- |
| 仓库映射和变更路径 | [`AGENTS.md`](AGENTS.md) |
| 编码模式 | [`docs/contributing/coding-patterns.md`](docs/contributing/coding-patterns.md) |
| 测试工作流 | [`docs/contributing/testing-workflows.md`](docs/contributing/testing-workflows.md) |
| 领域词汇表 | [`docs/glossary.md`](docs/glossary.md) |
| 层合约 | [`docs/architecture/contract.md`](docs/architecture/contract.md) |
## 贡献
参见 [`CONTRIBUTING.md`](CONTRIBUTING.md) 获取 PR 检查清单。将您的更改分类为 [`docs/contributing/development-lanes.md`](docs/contributing/development-lanes.md),运行 `./scripts/verify.sh`,并为用户可见的更改更新 [`CHANGELOG.md`](CHANGELOG.md)。
## License
[MIT](LICENSE)