#![deny(missing_docs)]
#![deny(rust_2018_idioms)]
#![deny(rustdoc::broken_intra_doc_links)]

//! `klieo-graph-projector` — continuous-learning bridge from
//! [`klieo_core::memory::EpisodicMemory`] to
//! [`klieo_memory_graph::KnowledgeGraph`].
//!
//! Two entry points:
//!
//! - [`ProjectableEpisodic`] — drop-in wrapper around any
//!   `Arc<dyn EpisodicMemory>` that broadcasts each recorded
//!   `(RunId, Episode)` pair on a `tokio::sync::broadcast` channel.
//!   The wrapped store is the single source of truth; the broadcast
//!   is a side-effect for subscribers and never causes `record()` to
//!   fail.
//! - [`EpisodeProjector`] — broadcast subscriber that translates
//!   each episode into typed entities (via an
//!   [`klieo_memory_graph::EntityExtractor`]) and writes
//!   `MENTIONED_IN` edges into a [`klieo_memory_graph::KnowledgeGraph`].
//!   Also offers `project_run()` for on-demand batch replay of
//!   historical episodes.
//!
//! Stable at `1.x`. Trait freeze contract recorded in
//! [ADR-039](https://github.com/adesso-insurance-solutions/klieo/blob/main/docs/adr/adr-039-graphrag-1-0-promotion.md).

pub mod error;
pub mod extractors;
pub mod projectable;
pub mod projector;
pub mod rules;

pub use error::ProjectionError;
pub use extractors::HintsOnlyExtractor;
pub use projectable::ProjectableEpisodic;
pub use projector::{EpisodeProjector, EpisodeProjectorBuilder};
pub use rules::entities_for_episode;
