跳到主内容

Crate 依赖关系

架构设计

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-osOS 服务(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-scadaSCADA 数据采集(IEC 104/CDT/PMU)eneros-core, eneros-device, eneros-timeseries
eneros-multiregion多区域复制与灾备eneros-core, eneros-audit
eneros-tenant多租户隔离与配额eneros-core
eneros-protocol-cdtCDT 循环式传输协议eneros-core, eneros-device
eneros-protocol-coapCoAP 受限设备协议eneros-core, eneros-device
eneros-protocol-iccpICCP / IEC 60870-6eneros-core, eneros-device
eneros-protocol-iec103IEC 60870-5-103 继电保护协议eneros-core, eneros-device
eneros-protocol-lwm2mLwM2M 设备管理协议eneros-core, eneros-device
eneros-protocol-mqttMQTT IoT 消息协议eneros-core, eneros-device
eneros-protocol-pmuIEEE C37.118 同步相量协议eneros-core, eneros-device
eneros-protocol-dlt698DLT 698 中国电能表协议eneros-core, eneros-device
eneros-iot-hubIoT 设备接入枢纽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-apiREST/GraphQL/SSE API 服务器eneros-core, eneros-runtime, eneros-trust
eneros-graphqlGraphQL schema 与 resolvereneros-core, async-graphql
eneros-sloSLO/SLI 评估与告警eneros-core, eneros-timeseries
eneros-ops运维自动化(备份/扩缩容/值班)eneros-core, eneros-os
eneros-i18n国际化(多语言/时区/单位)eneros-core, fluent
eneros-test-utils测试工具与 fixtureeneros-core

L2 - 实时安全网关层

实时安全网关层依赖 L0 + L1,提供安全、信任、审计、合规能力。

Crate职责直接依赖
eneros-gateway安全网关(命令拦截/校验/执行/lock-free)eneros-core, eneros-constraint, eneros-device, eneros-perf
eneros-trust零信任 mTLS + 内部 CAeneros-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-networkCIM 网络模型与仿真eneros-core, eneros-topology
eneros-3d3D 可视化场景(glTF 导出)eneros-core, eneros-topology
eneros-bridge桥接器(外部系统集成)eneros-core

L4 - Agent 运行时层

Agent 运行时层依赖 L0 - L3,提供 Agent 生命周期、记忆、工具、推理能力。

Crate职责直接依赖
eneros-agentAgent 生命周期、编排、协作、学习、反思、解释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-aiAI/ML 集成(LLM/异常检测/预测/嵌入)eneros-core
eneros-twin数字孪生(实时镜像/what-if/回放)eneros-core, eneros-topology, eneros-powerflow, eneros-timeseries
eneros-aiopsAIOps(告警关联/根因分析/事件抑制)eneros-core, eneros-ai, eneros-eventbus

L5 - 应用层

应用层依赖 L0 - L4,提供面向电力业务的具体场景应用。

Crate / Binary职责直接依赖
dispatch-agent智能调度 Agenteneros-agent, eneros-powerflow, eneros-constraint
forecast-agent负荷预测 Agenteneros-agent, eneros-ai, eneros-timeseries
operation-agent智能运维 Agenteneros-agent, eneros-aiops
self-healing-agent故障自愈 Agenteneros-agent, eneros-topology, eneros-gateway
planning-agent配网规划 Agenteneros-agent, eneros-analysis
trading-agent电力交易 Agenteneros-agent, eneros-market
eneros-market电力市场撮合与结算eneros-core, eneros-timeseries, eneros-api
eneros-report报表生成(PDF/Excel/Word/邮件)eneros-core, eneros-timeseries
eneros-dashboardWeb 可视化与 PWAeneros-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层次职责直接依赖数
1eneros-coreL0统一类型/错误/配置0
2eneros-linalgL0稀疏线性代数1
3eneros-perfL1性能优化(arena/pool/ring)1
4eneros-auditL2审计日志(HMAC + WORM)1
5eneros-topologyL3电网拓扑引擎2
6eneros-powerflowL3潮流计算3
7eneros-constraintL3安全约束引擎3
8eneros-equipmentL3设备模型库1
9eneros-cnpowerL3中国配网设备与标准3
10eneros-timeseriesL3时序存储2
11eneros-eventbusL3事件总线1
12eneros-deviceL1设备管理与协议适配2
13eneros-gatewayL2安全网关4
14eneros-trustL2零信任 mTLS + CA2
15eneros-idsL2入侵检测2
16eneros-complianceL2合规检查2
17eneros-osL1OS 服务1
18eneros-multiregionL1多区域复制2
19eneros-tenantL1多租户隔离1
20eneros-scadaL1SCADA 数据采集3
21eneros-protocol-cdtL1CDT 协议2
22eneros-protocol-coapL1CoAP 协议2
23eneros-protocol-iccpL1ICCP 协议2
24eneros-protocol-iec103L1IEC 103 协议2
25eneros-protocol-lwm2mL1LwM2M 协议2
26eneros-protocol-mqttL1MQTT 协议2
27eneros-protocol-pmuL1PMU 协议2
28eneros-protocol-dlt698L1DLT 698 协议2
29eneros-iot-hubL1IoT 设备接入3
30eneros-pluginL1插件系统2
31eneros-plugin-macrosL1插件派生宏0
32eneros-sdkL1多语言 SDK2
33eneros-runtimeL1顶层运行时组合3
34eneros-apiL1REST/GraphQL/SSE API3
35eneros-graphqlL1GraphQL schema2
36eneros-sloL1SLO/SLI 评估2
37eneros-opsL1运维自动化2
38eneros-i18nL1国际化2
39eneros-test-utilsL1测试工具1
40eneros-analysisL3高级分析4
41eneros-emtpL3电磁暂态仿真3
42eneros-simulatorL3场景仿真器4
43eneros-networkL3CIM 网络模型2
44eneros-3dL33D 可视化场景2
45eneros-bridgeL3外部系统桥接1
46eneros-memoryL4记忆系统2
47eneros-toolL4工具引擎4
48eneros-reasoningL4推理引擎2
49eneros-aiL4AI/ML 集成1
50eneros-twinL4数字孪生4
51eneros-aiopsL4AIOps3
52eneros-agentL4Agent 运行时5
53eneros-marketL5电力市场撮合3
54eneros-reportL5报表生成2
55eneros-dashboardL5Web 可视化2
56eneros-nlL5自然语言交互3

:表中的”直接依赖数”统计 EnerOS workspace 内部 crate 依赖数量,不含第三方依赖。Agent 二进制(dispatch-agent / forecast-agent / operation-agent / self-healing-agent / planning-agent / trading-agent)由 eneros-agent crate 的 bins/ 子目录构建,不单独计数。

Crate 分组

按功能类别分组

类别Crate 数量成员
核心2eneros-core, eneros-linalg
内核11eneros-topology, eneros-powerflow, eneros-constraint, eneros-equipment, eneros-cnpower, eneros-timeseries, eneros-eventbus, eneros-analysis, eneros-emtp, eneros-simulator, eneros-network
安全网关5eneros-gateway, eneros-trust, eneros-ids, eneros-audit, eneros-compliance
基础设施12eneros-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
协议8eneros-protocol-cdt, eneros-protocol-coap, eneros-protocol-iccp, eneros-protocol-iec103, eneros-protocol-lwm2m, eneros-protocol-mqtt, eneros-protocol-pmu, eneros-protocol-dlt698
API/网关4eneros-api, eneros-graphql, eneros-slo, eneros-ops
Agent 运行时7eneros-agent, eneros-memory, eneros-tool, eneros-reasoning, eneros-ai, eneros-twin, eneros-aiops
应用5eneros-market, eneros-report, eneros-dashboard, eneros-nl, eneros-edge
工具2eneros-i18n, eneros-test-utils
可视化1eneros-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 最小化只启用必要的 featureCargo.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:

版本号当前含义
MAJOR0不兼容 API 变更(0.x 阶段允许频繁破坏)
MINOR44向后兼容的功能新增
PATCH0向后兼容的缺陷修复

内部 crate 版本

所有内部 crate 使用 workspace 统一版本(version.workspace = true),与主版本保持一致。

相关文档