Architecture
naas-abi-core is organized around Hexagonal Architecture (Ports and Adapters) plus a module runtime.
Related pages: Engine, Module-System, Overview, Agents.
Key Building Blocks
- Engine: loads config, resolves module dependencies, loads services, modules, and ontologies.
- Modules: self-contained units that declare dependencies and expose agents/workflows/pipelines.
- Services: infra-facing capabilities behind ports (triple store, vector store, secret, bus, object storage, key-value, cache).
- Applications: API, MCP server, terminal app, Dagster integration.
Dependency Model
- Modules declare required modules and services using
ModuleDependencies. - Engine computes a topological load order.
- Soft dependencies are supported by suffixing module names with
#soft.
Runtime Lifecycle
- Parse config (
config.yamlorconfig.<ENV>.yaml). - Load module dependency graph.
- Load only services required by enabled modules.
- Load modules in dependency order.
- Load ontologies into triple store (if available).
- Call
on_initialized()on every loaded module.
Service Wiring
Services inherit from a shared base and can be wired together.
IEngine.Services.wire_services()injects access to sibling services forServicesAwareimplementations.- Example: triple store can publish events on bus when triples are inserted/deleted.
Practical Design Notes
- Keep business logic in modules and workflows, not inside adapters.
- Add new infrastructure by implementing adapter interfaces, then bind it via config.
- Prefer module boundaries over cross-cutting utility code for domain features.