Crate 依赖关系
EnerOS 由 56 个 Rust crate 组成,按依赖层次从下到上分为 L0 - L5 六个等级,对应五层架构。所有依赖单向向下流动,禁止循环依赖,通过 Cargo workspace + cargo-deny 在编译期与 CI 中强制保证。
依赖层次总览
┌─────────────────────────────────────────────────────────────────────┐
│ L5 应用层(Application) │
│ dispatch-agent · forecast-agent · operation-agent │
│ self-healing-agent · planning-agent · trading-agent │
│ market · report · dashboard · nl · edge │
├─────────────────────────────────────────────────────────────────────┤
│ L4 Agent 运行时(Agent Runtime) │
│ eneros-agent · eneros-reasoning · eneros-memory │
│ eneros-tool · eneros-ai · eneros-twin · eneros-aiops │
├─────────────────────────────────────────────────────────────────────┤
│ L3 电力原生内核(Power-Native Kernel) │
│ eneros-topology · eneros-powerflow · eneros-constraint │
│ eneros-equipment · eneros-cnpower · eneros-timeseries │
│ eneros-eventbus · eneros-analysis · eneros-emtp · eneros-simulator │
│ eneros-network · eneros-3d · eneros-bridge │
├─────────────────────────────────────────────────────────────────────┤
│ L2 实时安全网关(Safety Gateway) │
│ eneros-gateway · eneros-trust · eneros-ids │
│ eneros-audit · eneros-compliance │
├─────────────────────────────────────────────────────────────────────┤
│ L1 基础设施(Infrastructure) │
│ eneros-os · eneros-multiregion · eneros-tenant │
│ eneros-scada · eneros-device · eneros-perf │
│ eneros-protocol-* · eneros-iot-hub · eneros-plugin │
│ eneros-sdk · eneros-runtime · eneros-api │
│ eneros-graphql · eneros-slo · eneros-ops │
│ eneros-i18n · eneros-test-utils · eneros-plugin-macros │
├─────────────────────────────────────────────────────────────────────┤
│ L0 核心(Core) │
│ eneros-core · eneros-linalg │
└─────────────────────────────────────────────────────────────────────┘
L0 - 核心层
核心层是所有 crate 的根基,提供统一类型、错误处理、配置与线性代数。
| Crate | 职责 | 依赖 |
|---|---|---|
eneros-core | 统一类型(Bus/Branch/Command/Event)、错误、配置 | serde, tokio, thiserror |
eneros-linalg | 稀疏线性代数(sprs 封装) | sprs, ndarray |
eneros-core 暴露的核心类型
// eneros-core/src/types.rs
pub struct Bus {
pub id: u32,
pub name: String,
pub base_kv: f64,
pub bus_type: BusType,
}
pub struct Branch {
pub id: u32,
pub from_bus: u32,
pub to_bus: u32,
pub resistance: f64,
pub reactance: f64,
}
pub enum Command {
SwitchToggle { switch_id: u32, closed: bool },
GeneratorSetpoint { generator_id: u32, target_mw: f64 },
TransformerTap { transformer_id: u32, tap: f64 },
LoadShed { load_id: u32, amount_mw: f64 },
}
pub enum Event {
FaultDetected { bus_id: u32, fault_type: FaultType },
SwitchChanged { switch_id: u32, closed: bool },
FrequencyDeviation { hz: f64 },
}
L1 - 基础设施层
基础设施层依赖 L0,提供 OS、设备、协议、网络等基础能力。
| Crate | 职责 | 直接依赖 |
|---|---|---|
eneros-os | OS 服务(init/rt/agentos/hal/ha/netcfg/syslog/timesync/update) | eneros-core |
eneros-perf | 性能优化(arena/pool/ring_buffer/zero_copy) | eneros-core |
eneros-device | 设备管理与协议适配 | eneros-core, eneros-perf |
eneros-scada | SCADA 数据采集(IEC 104/CDT/PMU) | eneros-core, eneros-device, eneros-timeseries |
eneros-multiregion | 多区域复制与灾备 | eneros-core, eneros-audit |
eneros-tenant | 多租户隔离与配额 | eneros-core |
eneros-protocol-cdt | CDT 循环式传输协议 | eneros-core, eneros-device |
eneros-protocol-coap | CoAP 受限设备协议 | eneros-core, eneros-device |
eneros-protocol-iccp | ICCP / IEC 60870-6 | eneros-core, eneros-device |
eneros-protocol-iec103 | IEC 60870-5-103 继电保护协议 | eneros-core, eneros-device |
eneros-protocol-lwm2m | LwM2M 设备管理协议 | eneros-core, eneros-device |
eneros-protocol-mqtt | MQTT IoT 消息协议 | eneros-core, eneros-device |
eneros-protocol-pmu | IEEE C37.118 同步相量协议 | eneros-core, eneros-device |
eneros-protocol-dlt698 | DLT 698 中国电能表协议 | eneros-core, eneros-device |
eneros-iot-hub | IoT 设备接入枢纽 | eneros-core, eneros-device, eneros-protocol-mqtt |
eneros-plugin | 插件系统(进程隔离 + 签名) | eneros-core, eneros-perf |
eneros-plugin-macros | 插件派生宏 | syn, quote |
eneros-sdk | 多语言 SDK(C/Python/Go 绑定) | eneros-core, eneros-agent |
eneros-runtime | 顶层运行时组合 | eneros-core, eneros-agent, eneros-gateway |
eneros-api | REST/GraphQL/SSE API 服务器 | eneros-core, eneros-runtime, eneros-trust |
eneros-graphql | GraphQL schema 与 resolver | eneros-core, async-graphql |
eneros-slo | SLO/SLI 评估与告警 | eneros-core, eneros-timeseries |
eneros-ops | 运维自动化(备份/扩缩容/值班) | eneros-core, eneros-os |
eneros-i18n | 国际化(多语言/时区/单位) | eneros-core, fluent |
eneros-test-utils | 测试工具与 fixture | eneros-core |
L2 - 实时安全网关层
实时安全网关层依赖 L0 + L1,提供安全、信任、审计、合规能力。
| Crate | 职责 | 直接依赖 |
|---|---|---|
eneros-gateway | 安全网关(命令拦截/校验/执行/lock-free) | eneros-core, eneros-constraint, eneros-device, eneros-perf |
eneros-trust | 零信任 mTLS + 内部 CA | eneros-core, rustls, tokio-rustls |
eneros-ids | 入侵检测(行为基线 + IOC) | eneros-core, eneros-audit |
eneros-audit | 审计日志(HMAC + WORM) | eneros-core |
eneros-compliance | 合规检查(NERC CIP / IEC 62443 / GDPR / PIPL / CCPA) | eneros-core, eneros-audit |
L3 - 电力原生内核层
电力原生内核层依赖 L0 + L1(部分依赖 L2 做约束校验),提供电网领域核心能力。
| Crate | 职责 | 直接依赖 |
|---|---|---|
eneros-topology | 电网拓扑引擎(图建模/搜索/电气岛) | eneros-core, eneros-linalg |
eneros-powerflow | 潮流计算(Newton-Raphson) | eneros-core, eneros-linalg, eneros-topology |
eneros-constraint | 安全约束引擎(校验/投影) | eneros-core, eneros-topology, eneros-powerflow |
eneros-equipment | 设备模型库(参数化模型) | eneros-core |
eneros-cnpower | 中国配网设备与标准 | eneros-core, eneros-equipment, eneros-topology |
eneros-timeseries | 时序存储(Gorilla 编码 + LSM) | eneros-core, eneros-perf |
eneros-eventbus | 事件总线(发布订阅) | eneros-core |
eneros-analysis | 高级分析(状态估计/OPF/短路/DSA/谐波) | eneros-core, eneros-linalg, eneros-topology, eneros-powerflow |
eneros-emtp | 电磁暂态仿真 | eneros-core, eneros-linalg, eneros-topology |
eneros-simulator | 场景仿真器 | eneros-core, eneros-topology, eneros-powerflow, eneros-timeseries |
eneros-network | CIM 网络模型与仿真 | eneros-core, eneros-topology |
eneros-3d | 3D 可视化场景(glTF 导出) | eneros-core, eneros-topology |
eneros-bridge | 桥接器(外部系统集成) | eneros-core |
L4 - Agent 运行时层
Agent 运行时层依赖 L0 - L3,提供 Agent 生命周期、记忆、工具、推理能力。
| Crate | 职责 | 直接依赖 |
|---|---|---|
eneros-agent | Agent 生命周期、编排、协作、学习、反思、解释 | eneros-core, eneros-memory, eneros-tool, eneros-reasoning, eneros-gateway |
eneros-memory | 记忆系统(短期/长期/向量) | eneros-core, eneros-timeseries |
eneros-tool | 工具引擎(注册/调用/权限) | eneros-core, eneros-topology, eneros-powerflow, eneros-constraint |
eneros-reasoning | 推理引擎(ReAct/CoT/反思) | eneros-core, eneros-ai |
eneros-ai | AI/ML 集成(LLM/异常检测/预测/嵌入) | eneros-core |
eneros-twin | 数字孪生(实时镜像/what-if/回放) | eneros-core, eneros-topology, eneros-powerflow, eneros-timeseries |
eneros-aiops | AIOps(告警关联/根因分析/事件抑制) | eneros-core, eneros-ai, eneros-eventbus |
L5 - 应用层
应用层依赖 L0 - L4,提供面向电力业务的具体场景应用。
| Crate / Binary | 职责 | 直接依赖 |
|---|---|---|
dispatch-agent | 智能调度 Agent | eneros-agent, eneros-powerflow, eneros-constraint |
forecast-agent | 负荷预测 Agent | eneros-agent, eneros-ai, eneros-timeseries |
operation-agent | 智能运维 Agent | eneros-agent, eneros-aiops |
self-healing-agent | 故障自愈 Agent | eneros-agent, eneros-topology, eneros-gateway |
planning-agent | 配网规划 Agent | eneros-agent, eneros-analysis |
trading-agent | 电力交易 Agent | eneros-agent, eneros-market |
eneros-market | 电力市场撮合与结算 | eneros-core, eneros-timeseries, eneros-api |
eneros-report | 报表生成(PDF/Excel/Word/邮件) | eneros-core, eneros-timeseries |
eneros-dashboard | Web 可视化与 PWA | eneros-core, eneros-api |
eneros-nl | 自然语言交互与意图识别 | eneros-core, eneros-ai, eneros-agent |
eneros-edge | 边缘 AI 推理与自治 | eneros-core, eneros-ai, eneros-device |
核心依赖链
内核依赖链
eneros-core (L0 统一类型/错误/配置)
│
├── eneros-linalg (L0 稀疏线性代数)
│ │
│ └── eneros-powerflow (L3 潮流计算)
│ │ ↑ 依赖 eneros-topology
│ ├── eneros-analysis (L3 状态估计/OPF/短路/DSA)
│ │ ↑ 依赖 eneros-topology
│ └── eneros-emtp (L3 电磁暂态仿真)
│ ↑ 依赖 eneros-topology
│
├── eneros-topology (L3 电网拓扑)
│ │
│ ├── eneros-constraint (L3 安全约束)
│ │ ↑ 依赖 eneros-powerflow
│ ├── eneros-cnpower (L3 中国配网)
│ │ ↑ 依赖 eneros-equipment
│ ├── eneros-network (L3 CIM 网络模型)
│ └── eneros-3d (L3 3D 可视化场景)
│
├── eneros-equipment (L3 设备模型)
│
├── eneros-timeseries (L3 时序存储)
│ ↑ 依赖 eneros-perf
│
└── eneros-eventbus (L3 事件总线)
Agent 依赖链
eneros-agent (L4 Agent 运行时)
│
├── eneros-memory (L4 记忆系统)
│ ↑ 依赖 eneros-timeseries
│
├── eneros-tool (L4 工具引擎)
│ ↑ 依赖 eneros-topology, eneros-powerflow, eneros-constraint
│
├── eneros-reasoning (L4 推理引擎)
│ │
│ └── eneros-ai (L4 AI/ML 集成)
│
├── eneros-twin (L4 数字孪生)
│ ↑ 依赖 eneros-topology, eneros-powerflow, eneros-timeseries
│
└── eneros-gateway (L2 安全网关)
↑ 依赖 eneros-constraint, eneros-device, eneros-perf
安全依赖链
eneros-gateway (L2 安全网关)
│
├── eneros-constraint (L3 约束引擎)
│
├── eneros-device (L1 设备管理)
│
└── eneros-perf (L1 性能优化)
eneros-trust (L2 零信任)
│
└── rustls + tokio-rustls
eneros-audit (L2 审计)
│
└── eneros-core
eneros-ids (L2 入侵检测)
│
└── eneros-audit
eneros-compliance (L2 合规)
│
└── eneros-audit
完整 Crate 索引表
下表列出全部 56 个 crate 及其层次、职责与直接依赖数量:
| # | Crate | 层次 | 职责 | 直接依赖数 |
|---|---|---|---|---|
| 1 | eneros-core | L0 | 统一类型/错误/配置 | 0 |
| 2 | eneros-linalg | L0 | 稀疏线性代数 | 1 |
| 3 | eneros-perf | L1 | 性能优化(arena/pool/ring) | 1 |
| 4 | eneros-audit | L2 | 审计日志(HMAC + WORM) | 1 |
| 5 | eneros-topology | L3 | 电网拓扑引擎 | 2 |
| 6 | eneros-powerflow | L3 | 潮流计算 | 3 |
| 7 | eneros-constraint | L3 | 安全约束引擎 | 3 |
| 8 | eneros-equipment | L3 | 设备模型库 | 1 |
| 9 | eneros-cnpower | L3 | 中国配网设备与标准 | 3 |
| 10 | eneros-timeseries | L3 | 时序存储 | 2 |
| 11 | eneros-eventbus | L3 | 事件总线 | 1 |
| 12 | eneros-device | L1 | 设备管理与协议适配 | 2 |
| 13 | eneros-gateway | L2 | 安全网关 | 4 |
| 14 | eneros-trust | L2 | 零信任 mTLS + CA | 2 |
| 15 | eneros-ids | L2 | 入侵检测 | 2 |
| 16 | eneros-compliance | L2 | 合规检查 | 2 |
| 17 | eneros-os | L1 | OS 服务 | 1 |
| 18 | eneros-multiregion | L1 | 多区域复制 | 2 |
| 19 | eneros-tenant | L1 | 多租户隔离 | 1 |
| 20 | eneros-scada | L1 | SCADA 数据采集 | 3 |
| 21 | eneros-protocol-cdt | L1 | CDT 协议 | 2 |
| 22 | eneros-protocol-coap | L1 | CoAP 协议 | 2 |
| 23 | eneros-protocol-iccp | L1 | ICCP 协议 | 2 |
| 24 | eneros-protocol-iec103 | L1 | IEC 103 协议 | 2 |
| 25 | eneros-protocol-lwm2m | L1 | LwM2M 协议 | 2 |
| 26 | eneros-protocol-mqtt | L1 | MQTT 协议 | 2 |
| 27 | eneros-protocol-pmu | L1 | PMU 协议 | 2 |
| 28 | eneros-protocol-dlt698 | L1 | DLT 698 协议 | 2 |
| 29 | eneros-iot-hub | L1 | IoT 设备接入 | 3 |
| 30 | eneros-plugin | L1 | 插件系统 | 2 |
| 31 | eneros-plugin-macros | L1 | 插件派生宏 | 0 |
| 32 | eneros-sdk | L1 | 多语言 SDK | 2 |
| 33 | eneros-runtime | L1 | 顶层运行时组合 | 3 |
| 34 | eneros-api | L1 | REST/GraphQL/SSE API | 3 |
| 35 | eneros-graphql | L1 | GraphQL schema | 2 |
| 36 | eneros-slo | L1 | SLO/SLI 评估 | 2 |
| 37 | eneros-ops | L1 | 运维自动化 | 2 |
| 38 | eneros-i18n | L1 | 国际化 | 2 |
| 39 | eneros-test-utils | L1 | 测试工具 | 1 |
| 40 | eneros-analysis | L3 | 高级分析 | 4 |
| 41 | eneros-emtp | L3 | 电磁暂态仿真 | 3 |
| 42 | eneros-simulator | L3 | 场景仿真器 | 4 |
| 43 | eneros-network | L3 | CIM 网络模型 | 2 |
| 44 | eneros-3d | L3 | 3D 可视化场景 | 2 |
| 45 | eneros-bridge | L3 | 外部系统桥接 | 1 |
| 46 | eneros-memory | L4 | 记忆系统 | 2 |
| 47 | eneros-tool | L4 | 工具引擎 | 4 |
| 48 | eneros-reasoning | L4 | 推理引擎 | 2 |
| 49 | eneros-ai | L4 | AI/ML 集成 | 1 |
| 50 | eneros-twin | L4 | 数字孪生 | 4 |
| 51 | eneros-aiops | L4 | AIOps | 3 |
| 52 | eneros-agent | L4 | Agent 运行时 | 5 |
| 53 | eneros-market | L5 | 电力市场撮合 | 3 |
| 54 | eneros-report | L5 | 报表生成 | 2 |
| 55 | eneros-dashboard | L5 | Web 可视化 | 2 |
| 56 | eneros-nl | L5 | 自然语言交互 | 3 |
注:表中的”直接依赖数”统计 EnerOS workspace 内部 crate 依赖数量,不含第三方依赖。Agent 二进制(dispatch-agent / forecast-agent / operation-agent / self-healing-agent / planning-agent / trading-agent)由
eneros-agentcrate 的bins/子目录构建,不单独计数。
Crate 分组
按功能类别分组
| 类别 | Crate 数量 | 成员 |
|---|---|---|
| 核心 | 2 | eneros-core, eneros-linalg |
| 内核 | 11 | eneros-topology, eneros-powerflow, eneros-constraint, eneros-equipment, eneros-cnpower, eneros-timeseries, eneros-eventbus, eneros-analysis, eneros-emtp, eneros-simulator, eneros-network |
| 安全网关 | 5 | eneros-gateway, eneros-trust, eneros-ids, eneros-audit, eneros-compliance |
| 基础设施 | 12 | eneros-os, eneros-perf, eneros-device, eneros-scada, eneros-multiregion, eneros-tenant, eneros-iot-hub, eneros-plugin, eneros-plugin-macros, eneros-sdk, eneros-runtime, eneros-bridge |
| 协议 | 8 | eneros-protocol-cdt, eneros-protocol-coap, eneros-protocol-iccp, eneros-protocol-iec103, eneros-protocol-lwm2m, eneros-protocol-mqtt, eneros-protocol-pmu, eneros-protocol-dlt698 |
| API/网关 | 4 | eneros-api, eneros-graphql, eneros-slo, eneros-ops |
| Agent 运行时 | 7 | eneros-agent, eneros-memory, eneros-tool, eneros-reasoning, eneros-ai, eneros-twin, eneros-aiops |
| 应用 | 5 | eneros-market, eneros-report, eneros-dashboard, eneros-nl, eneros-edge |
| 工具 | 2 | eneros-i18n, eneros-test-utils |
| 可视化 | 1 | eneros-3d |
按执行域分组
| 执行域 | Crate | 说明 |
|---|---|---|
| 通用域 | 大部分 crate | 默认运行域 |
| 实时域 | eneros-os (rt), eneros-scada, eneros-protocol-* | 硬实时调度 |
| 跨域 | eneros-gateway, eneros-os (rt/shm), eneros-perf | 域间桥梁 |
依赖规则
强制规则
| 规则 | 说明 | 强制方式 |
|---|---|---|
| 单向依赖 | 上层可依赖下层,禁止反向 | Cargo.toml 依赖声明 |
| 无循环依赖 | 任何 crate 不得形成依赖环 | cargo-deny + CI 检查 |
| 最小依赖 | 只依赖必要的 crate,禁止全量依赖 | code review + clippy |
| 版本统一 | workspace 内同一 crate 版本必须一致 | [workspace.dependencies] 统一声明 |
| Feature 最小化 | 只启用必要的 feature | Cargo.toml feature 显式声明 |
Cargo Workspace 配置
# Cargo.toml (workspace 根)
[workspace]
resolver = "2"
members = [
"crates/eneros-core",
"crates/eneros-linalg",
"crates/eneros-perf",
"crates/eneros-audit",
"crates/eneros-topology",
"crates/eneros-powerflow",
"crates/eneros-constraint",
"crates/eneros-equipment",
"crates/eneros-cnpower",
"crates/eneros-timeseries",
"crates/eneros-eventbus",
"crates/eneros-eventbus/bins/broker",
"crates/eneros-gateway",
"crates/eneros-gateway/bins/gateway",
"crates/eneros-device",
"crates/eneros-api",
"crates/eneros-runtime",
"crates/eneros-bridge",
"crates/eneros-network",
"crates/eneros-memory",
"crates/eneros-tenant",
"crates/eneros-tool",
"crates/eneros-reasoning",
"crates/eneros-agent",
"crates/eneros-agent/bins/dispatch-agent",
"crates/eneros-agent/bins/forecast-agent",
"crates/eneros-agent/bins/operation-agent",
"crates/eneros-agent/bins/self-healing-agent",
"crates/eneros-agent/bins/planning-agent",
"crates/eneros-agent/bins/trading-agent",
"crates/eneros-test-utils",
"crates/eneros-scada",
"crates/eneros-twin",
"crates/eneros-graphql",
"crates/eneros-ai",
"crates/eneros-aiops",
"crates/eneros-edge",
"crates/eneros-protocol-iec103",
"crates/eneros-protocol-cdt",
"crates/eneros-protocol-pmu",
"crates/eneros-protocol-iccp",
"crates/eneros-analysis",
"crates/eneros-dashboard",
"crates/eneros-simulator",
"crates/eneros-slo",
"crates/eneros-plugin",
"crates/eneros-plugin/bins/plugin-daemon",
"crates/eneros-plugin-macros",
"crates/eneros-sdk",
"crates/eneros-sdk/bindings/c",
"crates/eneros-sdk/bindings/python",
"crates/eneros-ops",
"crates/eneros-os",
"crates/eneros-os/bins/eneros-init",
"crates/eneros-os/bins/eneros-ha",
"crates/eneros-os/bins/eneros-timesync",
"crates/eneros-os/bins/enerosctl",
"crates/eneros-os/bins/eneros-installer",
"crates/eneros-os/bins/eneros-autoscaler",
"crates/eneros-os/bins/eneros-backup",
"crates/eneros-os/bins/eneros-oncall",
"crates/eneros-os/bins/eneros-dr-orchestrator",
"crates/eneros-os/bins/eneros-upgrader",
"crates/eneros-market",
"crates/eneros-market/bins/market-server",
"crates/eneros-ids",
"crates/eneros-compliance",
"crates/eneros-trust",
"crates/eneros-multiregion",
"crates/eneros-emtp",
"crates/eneros-protocol-mqtt",
"crates/eneros-protocol-coap",
"crates/eneros-protocol-lwm2m",
"crates/eneros-protocol-dlt698",
"crates/eneros-iot-hub",
"crates/eneros-nl",
"crates/eneros-3d",
"crates/eneros-report",
"crates/eneros-i18n",
"os/tests",
"tests/e2e",
"tests/protocol_conformance",
"tests/security",
"benches",
]
[workspace.package]
version = "0.44.0"
edition = "2021"
authors = ["GAWG-AI"]
license = "MIT"
description = "EnerOS - Power-Native Agent Operating System"
[workspace.dependencies]
# Async runtime
tokio = { version = "1", features = ["full"] }
async-trait = "0.1"
futures = "0.3"
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bincode = "1"
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] }
# Error handling
thiserror = "1"
anyhow = "1"
# Data structures
dashmap = "5"
parking_lot = "0.12"
uuid = { version = "1", features = ["v4", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
# Math/Science
ndarray = { version = "0.15", features = ["serde"] }
num-complex = { version = "0.4", features = ["serde"] }
sprs = "0.11"
# Security
jsonwebtoken = "9"
sha2 = "0.10"
hmac = "0.12"
aes-gcm = "0.10"
ed25519-dalek = { version = "2", features = ["rand_core"] }
zeroize = { version = "1", features = ["derive", "serde", "alloc"] }
libseccomp = "0.4"
# TLS
tokio-rustls = "0.26"
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
# Internal crates (path dependencies)
eneros-core = { path = "crates/eneros-core" }
eneros-linalg = { path = "crates/eneros-linalg" }
eneros-topology = { path = "crates/eneros-topology" }
eneros-powerflow = { path = "crates/eneros-powerflow" }
# ... 其余内部 crate 同样以 path 声明
循环依赖检测
CI 流水线通过以下方式检测循环依赖:
# 1. cargo-deny 检查重复依赖与许可
cargo deny check
# 2. cargo-tree 检查依赖树
cargo tree -d # 重复依赖
cargo tree --invert eneros-core # 反向依赖
# 3. 自定义脚本检测循环
# scripts/check_cycles.sh
示例:eneros-gateway 的依赖声明
# crates/eneros-gateway/Cargo.toml
[package]
name = "eneros-gateway"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
description = "EnerOS real-time safety gateway"
[dependencies]
# EnerOS 内部依赖(L0 + L1 + L3)
eneros-core = { workspace = true }
eneros-constraint = { workspace = true }
eneros-device = { workspace = true }
eneros-perf = { workspace = true }
# 第三方依赖
tokio = { workspace = true }
async-trait = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tracing = { workspace = true }
thiserror = { workspace = true }
parking_lot = { workspace = true }
dashmap = { workspace = true }
crossbeam-skiplist = "0.1"
rayon = "1"
[dev-dependencies]
eneros-test-utils = { workspace = true }
可视化依赖图
以下是核心 crate 的依赖关系图(简化版,箭头表示”依赖于”):
┌──────────────┐
│ eneros-core │
└──────┬───────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ linalg │ │ perf │ │ audit │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
▼ │ ▼
┌──────────┐ │ ┌──────────┐
│topology │ │ │ ids │
└────┬─────┘ │ └──────────┘
│ │
▼ │
┌──────────┐ │
│powerflow │◄─────┘
└────┬─────┘
│
▼
┌──────────┐
│constraint│
└────┬─────┘
│
▼
┌──────────┐
│ gateway │
└────┬─────┘
│
▼
┌──────────┐
│ agent │
└──────────┘
版本管理
语义化版本
EnerOS 遵循语义化版本 2.0.0:
| 版本号 | 当前 | 含义 |
|---|---|---|
| MAJOR | 0 | 不兼容 API 变更(0.x 阶段允许频繁破坏) |
| MINOR | 44 | 向后兼容的功能新增 |
| PATCH | 0 | 向后兼容的缺陷修复 |
内部 crate 版本
所有内部 crate 使用 workspace 统一版本(version.workspace = true),与主版本保持一致。