生态与 Crate 全景

Workspace 结构

rust-agent-flow 采用 Cargo Workspace,三 crate 分层:

rust-agent-flow/
├── crates/
│   ├── core/          # rust-agent-flow:框架无关层(无 GPUI 依赖)
│   ├── gpui/          # rust-agent-flow-gpui:GPUI 渲染层
│   └── ...
├── demo/              # rust-agent-flow-demo:示例应用
└── Cargo.toml         # workspace 根

依赖方向规则

**单向依赖,不可逆向**:

应用代码 → rust-agent-flow-gpui → rust-agent-flow (core)
                                      ↑
                                 零 GPUI 依赖

`core` 是金字塔顶端(最抽象),`gpui` 是渲染实现层,应用代码在最上层。这个分层是刻意的:

- `core` 可被任何 Rust 项目使用(包括非 GPUI 的渲染层) - 未来可替换渲染层(如 egui)而不影响 `core` - `core` 的单元测试无需 GPUI 窗口

core — 框架无关层

`rust-agent-flow` 定义所有数据模型与算法,**不依赖** GPUI。

| 模块 | 职责 | |------|------| | `graph` | `FlowGraph`、`Node`、`Edge`、`Port`(slotmap 稳定键) | | `schema` | `NodeSchema`、`PortSpec`、`FieldSpec`、`FlowDocument` | | `geometry` | `PointF`/`RectF`/`SizeF`、边路径算法、命中测试、端口计算 | | `layout` | `LayoutEngine` trait + `DagreLayout`(包装 dagre crate) | | `viewport` | `Viewport` 平移/缩放变换 |

设计意图:

- 第三方可基于 core 编写可插拔的布局引擎或几何算法 - 单元测试可纯数据验证,无需渲染 - 算法层(边路径、布局)可独立复用

gpui — 渲染层

`rust-agent-flow-gpui` 实现 GPUI 渲染与交互:

| 模块 | 职责 | |------|------| | `editor` | `FlowEditorView` 主视图、交互状态机、命中测试、渲染、图操作 | | `node` | `IFlowNode` trait、`NodeRegistry`、`NodeView`、语法高亮服务 | | `edge` | `EdgeView` 边渲染 | | `panel` | `PanelView` Schema 驱动属性面板、`StartPanelView` | | `builtin` | 8 种内置节点实现 | | `data_type` | `IDataType`/`IDataTypeProvider`/`DataTypeRegistry` | | `theme` | `Theme` 亮暗主题颜色 | | `i18n` | `Language`/`TKey`/`t()` 中英文 | | `assets` | `CombinedAssets`/`FlowIcon` 图标资源 |

`editor` 模块按职责进一步拆分(防止单文件膨胀):

editor/
├── flow_editor.rs      # 主视图结构 + Render
├── interaction.rs      # 交互状态机 + 鼠标事件
├── hit_test.rs         # 命中测试
├── graph_ops.rs        # 图变更操作(set_graph/insert_node/delete)
├── rendering/          # 边/节点/面板渲染
├── toolbar.rs          # 内置工具栏
├── toolbar_ext.rs      # ToolbarProvider 扩展接口
├── ports.rs            # 端口位置计算
├── grid.rs             # 点阵背景
└── viewport.rs         # 视口数学

demo — 示例应用

`rust-agent-flow-demo` 演示完整集成:

| 文件 | 职责 | |------|------| | `main.rs` | 入口:加载图、注入工具栏扩展 | | `data_sources.rs` | 三种预置流程(AgentFlow/DataPipeline/SimpleFlow) | | `toolbar_provider.rs` | `DataSourceToolbar` + `AppControlsToolbar` | | `data_type_provider.rs` | 自定义数据类型示例(当前为空,作扩展参考) |

技术栈

| 依赖 | 用途 | |------|------| | `gpui` | Zed 的 GPU UI 框架(git 依赖,锁定特定 rev) | | `gpui-component` | longbridge 的组件库(Button/Input/Dropdown 等) | | `dagre` | Sugiyama 分层布局算法(Rust 移植版) | | `slotmap` | 稳定键的容器(节点/边 ID) | | `serde` | FlowDocument JSON 序列化 | | `rhai` | 默认语法高亮的近似映射 |

内置节点一览

| kind | 节点 | 端口 | 用途 | |------|------|------|------| | `start` | Start | Out | 流程起点,定义输入参数与变量 | | `end` | End | In | 流程终点,定义返回值 | | `action` | Action | In + Out | 顺序执行步骤 | | `condition` | Condition | In + 多 Out | 条件分支(if_0/if_1/.../else) | | `loop` | Loop | In + Done + LoopBody + LoopIn | 循环迭代 | | `variable` | Variable | In + Out | 变量定义 | | `adapter` | Adapter | In + Out | 数据适配 | | `agent` | Agent | In + Out | 智能体配置 |

小结

三 crate 分层体现了**框架无关与渲染实现分离**:core 提供可复用的图模型与算法,gpui 提供 GPUI 渲染与交互,demo 演示集成方式。改渲染层不影响 core 算法,扩展节点不影响框架内核。

下一章:[快速上手](../02-quickstart/INDEX.md)