Skip to main content

Crate Dependencies

Architecture

Crate Dependencies

EnerOS consists of 56 Rust crates, divided into six levels L0 - L5 from bottom to top, corresponding to the five-layer architecture. All dependencies flow one-way downward, circular dependencies are prohibited, and this is enforced through Cargo workspace + cargo-deny at compile time and in CI.

Dependency Layer Overview

┌─────────────────────────────────────────────────────────────────────┐
│  L5  Application Layer                                              │
│  dispatch-agent · forecast-agent · operation-agent                  │
│  self-healing-agent · planning-agent · trading-agent                │
│  market · report · dashboard · nl · edge                            │
├─────────────────────────────────────────────────────────────────────┤
│  L4  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 - Core Layer

The core layer is the foundation of all crates, providing unified types, error handling, configuration, and linear algebra.

CrateResponsibilityDependencies
eneros-coreUnified types (Bus/Branch/Command/Event), errors, configurationserde, tokio, thiserror
eneros-linalgSparse linear algebra (sprs wrapper)sprs, ndarray

Core Types Exposed by 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 - Infrastructure Layer

The infrastructure layer depends on L0, providing OS, device, protocol, network, and other foundational capabilities.

CrateResponsibilityDirect Dependencies
eneros-osOS services (init/rt/agentos/hal/ha/netcfg/syslog/timesync/update)eneros-core
eneros-perfPerformance optimization (arena/pool/ring_buffer/zero_copy)eneros-core
eneros-deviceDevice management and protocol adaptationeneros-core, eneros-perf
eneros-scadaSCADA data acquisition (IEC 104/CDT/PMU)eneros-core, eneros-device, eneros-timeseries
eneros-multiregionMulti-region replication and disaster recoveryeneros-core, eneros-audit
eneros-tenantMulti-tenant isolation and quotaseneros-core
eneros-protocol-cdtCDT cyclic transmission protocoleneros-core, eneros-device
eneros-protocol-coapCoAP constrained device protocoleneros-core, eneros-device
eneros-protocol-iccpICCP / IEC 60870-6eneros-core, eneros-device
eneros-protocol-iec103IEC 60870-5-103 relay protection protocoleneros-core, eneros-device
eneros-protocol-lwm2mLwM2M device management protocoleneros-core, eneros-device
eneros-protocol-mqttMQTT IoT messaging protocoleneros-core, eneros-device
eneros-protocol-pmuIEEE C37.118 synchronized phasor protocoleneros-core, eneros-device
eneros-protocol-dlt698DLT 698 Chinese energy meter protocoleneros-core, eneros-device
eneros-iot-hubIoT device access hubeneros-core, eneros-device, eneros-protocol-mqtt
eneros-pluginPlugin system (process isolation + signature)eneros-core, eneros-perf
eneros-plugin-macrosPlugin derive macrossyn, quote
eneros-sdkMulti-language SDK (C/Python/Go bindings)eneros-core, eneros-agent
eneros-runtimeTop-level runtime compositioneneros-core, eneros-agent, eneros-gateway
eneros-apiREST/GraphQL/SSE API servereneros-core, eneros-runtime, eneros-trust
eneros-graphqlGraphQL schema and resolvereneros-core, async-graphql
eneros-sloSLO/SLI evaluation and alertingeneros-core, eneros-timeseries
eneros-opsOperations automation (backup/scaling/on-call)eneros-core, eneros-os
eneros-i18nInternationalization (multi-language/timezone/units)eneros-core, fluent
eneros-test-utilsTest utilities and fixtureseneros-core

L2 - Real-Time Safety Gateway Layer

The real-time safety gateway layer depends on L0 + L1, providing security, trust, audit, and compliance capabilities.

CrateResponsibilityDirect Dependencies
eneros-gatewaySafety gateway (command interception/validation/execution/lock-free)eneros-core, eneros-constraint, eneros-device, eneros-perf
eneros-trustZero-trust mTLS + internal CAeneros-core, rustls, tokio-rustls
eneros-idsIntrusion detection (behavior baseline + IOC)eneros-core, eneros-audit
eneros-auditAudit log (HMAC + WORM)eneros-core
eneros-complianceCompliance checks (NERC CIP / IEC 62443 / GDPR / PIPL / CCPA)eneros-core, eneros-audit

L3 - Power-Native Kernel Layer

The Power-Native Kernel layer depends on L0 + L1 (some depend on L2 for constraint validation), providing core grid domain capabilities.

CrateResponsibilityDirect Dependencies
eneros-topologyGrid topology engine (graph modeling/search/electrical islands)eneros-core, eneros-linalg
eneros-powerflowPower flow calculation (Newton-Raphson)eneros-core, eneros-linalg, eneros-topology
eneros-constraintSafety constraint engine (validation/projection)eneros-core, eneros-topology, eneros-powerflow
eneros-equipmentEquipment model library (parameterized models)eneros-core
eneros-cnpowerChinese distribution equipment and standardseneros-core, eneros-equipment, eneros-topology
eneros-timeseriesTime-series storage (Gorilla encoding + LSM)eneros-core, eneros-perf
eneros-eventbusEvent bus (publish-subscribe)eneros-core
eneros-analysisAdvanced analysis (state estimation/OPF/short circuit/DSA/harmonics)eneros-core, eneros-linalg, eneros-topology, eneros-powerflow
eneros-emtpElectromagnetic transient simulationeneros-core, eneros-linalg, eneros-topology
eneros-simulatorScenario simulatoreneros-core, eneros-topology, eneros-powerflow, eneros-timeseries
eneros-networkCIM network model and simulationeneros-core, eneros-topology
eneros-3d3D visualization scenes (glTF export)eneros-core, eneros-topology
eneros-bridgeBridge (external system integration)eneros-core

L4 - Agent Runtime Layer

The Agent Runtime layer depends on L0 - L3, providing Agent lifecycle, memory, tools, and reasoning capabilities.

CrateResponsibilityDirect Dependencies
eneros-agentAgent lifecycle, orchestration, collaboration, learning, reflection, explanationeneros-core, eneros-memory, eneros-tool, eneros-reasoning, eneros-gateway
eneros-memoryMemory system (short-term/long-term/vector)eneros-core, eneros-timeseries
eneros-toolTool engine (registration/invocation/permissions)eneros-core, eneros-topology, eneros-powerflow, eneros-constraint
eneros-reasoningReasoning engine (ReAct/CoT/reflection)eneros-core, eneros-ai
eneros-aiAI/ML integration (LLM/anomaly detection/prediction/embedding)eneros-core
eneros-twinDigital twin (real-time mirroring/what-if/replay)eneros-core, eneros-topology, eneros-powerflow, eneros-timeseries
eneros-aiopsAIOps (alert correlation/root cause analysis/event suppression)eneros-core, eneros-ai, eneros-eventbus

L5 - Application Layer

The Application layer depends on L0 - L4, providing specific scenario applications for power business.

Crate / BinaryResponsibilityDirect Dependencies
dispatch-agentIntelligent dispatch Agenteneros-agent, eneros-powerflow, eneros-constraint
forecast-agentLoad forecasting Agenteneros-agent, eneros-ai, eneros-timeseries
operation-agentIntelligent operations Agenteneros-agent, eneros-aiops
self-healing-agentFault self-healing Agenteneros-agent, eneros-topology, eneros-gateway
planning-agentDistribution planning Agenteneros-agent, eneros-analysis
trading-agentElectricity trading Agenteneros-agent, eneros-market
eneros-marketElectricity market matching and settlementeneros-core, eneros-timeseries, eneros-api
eneros-reportReport generation (PDF/Excel/Word/email)eneros-core, eneros-timeseries
eneros-dashboardWeb visualization and PWAeneros-core, eneros-api
eneros-nlNatural language interaction and intent recognitioneneros-core, eneros-ai, eneros-agent
eneros-edgeEdge AI inference and autonomyeneros-core, eneros-ai, eneros-device

Core Dependency Chains

Kernel Dependency Chain

eneros-core (L0 unified types/errors/config)

  ├── eneros-linalg (L0 sparse linear algebra)
  │     │
  │     └── eneros-powerflow (L3 power flow calculation)
  │           │     ↑ depends on eneros-topology
  │           ├── eneros-analysis (L3 state estimation/OPF/short circuit/DSA)
  │           │     ↑ depends on eneros-topology
  │           └── eneros-emtp (L3 electromagnetic transient simulation)
  │                 ↑ depends on eneros-topology

  ├── eneros-topology (L3 grid topology)
  │     │
  │     ├── eneros-constraint (L3 safety constraints)
  │     │     ↑ depends on eneros-powerflow
  │     ├── eneros-cnpower (L3 Chinese distribution network)
  │     │     ↑ depends on eneros-equipment
  │     ├── eneros-network (L3 CIM network model)
  │     └── eneros-3d (L3 3D visualization scenes)

  ├── eneros-equipment (L3 equipment models)

  ├── eneros-timeseries (L3 time-series storage)
  │     ↑ depends on eneros-perf

  └── eneros-eventbus (L3 event bus)

Agent Dependency Chain

eneros-agent (L4 Agent runtime)

  ├── eneros-memory (L4 memory system)
  │     ↑ depends on eneros-timeseries

  ├── eneros-tool (L4 tool engine)
  │     ↑ depends on eneros-topology, eneros-powerflow, eneros-constraint

  ├── eneros-reasoning (L4 reasoning engine)
  │     │
  │     └── eneros-ai (L4 AI/ML integration)

  ├── eneros-twin (L4 digital twin)
  │     ↑ depends on eneros-topology, eneros-powerflow, eneros-timeseries

  └── eneros-gateway (L2 safety gateway)
        ↑ depends on eneros-constraint, eneros-device, eneros-perf

Security Dependency Chain

eneros-gateway (L2 safety gateway)

  ├── eneros-constraint (L3 constraint engine)

  ├── eneros-device (L1 device management)

  └── eneros-perf (L1 performance optimization)

eneros-trust (L2 zero trust)

  └── rustls + tokio-rustls

eneros-audit (L2 audit)

  └── eneros-core

eneros-ids (L2 intrusion detection)

  └── eneros-audit

eneros-compliance (L2 compliance)

  └── eneros-audit

Complete Crate Index Table

The following table lists all 56 crates with their layer, responsibility, and direct dependency count:

#CrateLayerResponsibilityDirect Dependencies
1eneros-coreL0Unified types/errors/config0
2eneros-linalgL0Sparse linear algebra1
3eneros-perfL1Performance optimization (arena/pool/ring)1
4eneros-auditL2Audit log (HMAC + WORM)1
5eneros-topologyL3Grid topology engine2
6eneros-powerflowL3Power flow calculation3
7eneros-constraintL3Safety constraint engine3
8eneros-equipmentL3Equipment model library1
9eneros-cnpowerL3Chinese distribution equipment and standards3
10eneros-timeseriesL3Time-series storage2
11eneros-eventbusL3Event bus1
12eneros-deviceL1Device management and protocol adaptation2
13eneros-gatewayL2Safety gateway4
14eneros-trustL2Zero-trust mTLS + CA2
15eneros-idsL2Intrusion detection2
16eneros-complianceL2Compliance checks2
17eneros-osL1OS services1
18eneros-multiregionL1Multi-region replication2
19eneros-tenantL1Multi-tenant isolation1
20eneros-scadaL1SCADA data acquisition3
21eneros-protocol-cdtL1CDT protocol2
22eneros-protocol-coapL1CoAP protocol2
23eneros-protocol-iccpL1ICCP protocol2
24eneros-protocol-iec103L1IEC 103 protocol2
25eneros-protocol-lwm2mL1LwM2M protocol2
26eneros-protocol-mqttL1MQTT protocol2
27eneros-protocol-pmuL1PMU protocol2
28eneros-protocol-dlt698L1DLT 698 protocol2
29eneros-iot-hubL1IoT device access3
30eneros-pluginL1Plugin system2
31eneros-plugin-macrosL1Plugin derive macros0
32eneros-sdkL1Multi-language SDK2
33eneros-runtimeL1Top-level runtime composition3
34eneros-apiL1REST/GraphQL/SSE API3
35eneros-graphqlL1GraphQL schema2
36eneros-sloL1SLO/SLI evaluation2
37eneros-opsL1Operations automation2
38eneros-i18nL1Internationalization2
39eneros-test-utilsL1Test utilities1
40eneros-analysisL3Advanced analysis4
41eneros-emtpL3Electromagnetic transient simulation3
42eneros-simulatorL3Scenario simulator4
43eneros-networkL3CIM network model2
44eneros-3dL33D visualization scenes2
45eneros-bridgeL3External system bridging1
46eneros-memoryL4Memory system2
47eneros-toolL4Tool engine4
48eneros-reasoningL4Reasoning engine2
49eneros-aiL4AI/ML integration1
50eneros-twinL4Digital twin4
51eneros-aiopsL4AIOps3
52eneros-agentL4Agent runtime5
53eneros-marketL5Electricity market matching3
54eneros-reportL5Report generation2
55eneros-dashboardL5Web visualization2
56eneros-nlL5Natural language interaction3

Note: The “Direct Dependencies” in the table counts internal EnerOS workspace crate dependencies, excluding third-party dependencies. Agent binaries (dispatch-agent / forecast-agent / operation-agent / self-healing-agent / planning-agent / trading-agent) are built from the bins/ subdirectory of the eneros-agent crate and are not counted separately.

Crate Grouping

Grouped by Functional Category

CategoryCrate CountMembers
Core2eneros-core, eneros-linalg
Kernel11eneros-topology, eneros-powerflow, eneros-constraint, eneros-equipment, eneros-cnpower, eneros-timeseries, eneros-eventbus, eneros-analysis, eneros-emtp, eneros-simulator, eneros-network
Safety Gateway5eneros-gateway, eneros-trust, eneros-ids, eneros-audit, eneros-compliance
Infrastructure12eneros-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
Protocols8eneros-protocol-cdt, eneros-protocol-coap, eneros-protocol-iccp, eneros-protocol-iec103, eneros-protocol-lwm2m, eneros-protocol-mqtt, eneros-protocol-pmu, eneros-protocol-dlt698
API/Gateway4eneros-api, eneros-graphql, eneros-slo, eneros-ops
Agent Runtime7eneros-agent, eneros-memory, eneros-tool, eneros-reasoning, eneros-ai, eneros-twin, eneros-aiops
Applications5eneros-market, eneros-report, eneros-dashboard, eneros-nl, eneros-edge
Tools2eneros-i18n, eneros-test-utils
Visualization1eneros-3d

Grouped by Execution Domain

Execution DomainCratesDescription
General domainMost cratesDefault execution domain
Real-time domaineneros-os (rt), eneros-scada, eneros-protocol-*Hard real-time scheduling
Cross-domaineneros-gateway, eneros-os (rt/shm), eneros-perfInter-domain bridge

Dependency Rules

Enforced Rules

RuleDescriptionEnforcement Method
One-way dependencyUpper layers can depend on lower layers, reverse is prohibitedCargo.toml dependency declarations
No circular dependenciesNo crate may form a dependency cyclecargo-deny + CI checks
Minimal dependenciesOnly depend on necessary crates, no full dependenciescode review + clippy
Version unificationSame crate version must be consistent within workspace[workspace.dependencies] unified declaration
Feature minimizationOnly enable necessary featuresCargo.toml explicit feature declaration

Cargo Workspace Configuration

# Cargo.toml (workspace root)
[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" }
# ... other internal crates declared as path dependencies

Circular Dependency Detection

CI pipeline detects circular dependencies through the following methods:

# 1. cargo-deny checks for duplicate dependencies and licenses
cargo deny check

# 2. cargo-tree checks dependency tree
cargo tree -d  # duplicate dependencies
cargo tree --invert eneros-core  # reverse dependencies

# 3. Custom script to detect cycles
# scripts/check_cycles.sh

Example: eneros-gateway Dependency Declaration

# 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 internal dependencies (L0 + L1 + L3)
eneros-core = { workspace = true }
eneros-constraint = { workspace = true }
eneros-device = { workspace = true }
eneros-perf = { workspace = true }

# Third-party dependencies
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 }

Visual Dependency Graph

Below is the dependency graph for core crates (simplified version, arrows indicate “depends on”):

                    ┌──────────────┐
                    │ eneros-core  │
                    └──────┬───────┘

              ┌────────────┼────────────┐
              │            │            │
              ▼            ▼            ▼
       ┌──────────┐ ┌──────────┐ ┌──────────┐
       │ linalg   │ │ perf     │ │ audit    │
       └────┬─────┘ └────┬─────┘ └────┬─────┘
            │            │            │
            ▼            │            ▼
       ┌──────────┐      │     ┌──────────┐
       │topology  │      │     │  ids     │
       └────┬─────┘      │     └──────────┘
            │            │
            ▼            │
       ┌──────────┐      │
       │powerflow │◄─────┘
       └────┬─────┘


       ┌──────────┐
       │constraint│
       └────┬─────┘


       ┌──────────┐
       │ gateway  │
       └────┬─────┘


       ┌──────────┐
       │  agent   │
       └──────────┘

Version Management

Semantic Versioning

EnerOS follows Semantic Versioning 2.0.0:

Version NumberCurrentMeaning
MAJOR0Incompatible API changes (0.x stage allows frequent breaking)
MINOR44Backward-compatible feature additions
PATCH0Backward-compatible bug fixes

Internal Crate Versions

All internal crates use the workspace unified version (version.workspace = true), consistent with the main version.