//! # Seshat Core
//!
//! Foundational types, traits, and intermediate representation (IR) shared
//! across all Seshat crates. This crate has zero dependencies on other seshat
//! crates and defines the common vocabulary used throughout the pipeline:
//!
//! - **IR types** (`ProjectFile`, `LanguageIR`): normalized, language-agnostic
//!   representation of parsed source code
//! - **Knowledge types** (`KnowledgeNode`, `KnowledgeNature`, `KnowledgeWeight`):
//!   the two-dimensional typing system for the knowledge graph
//! - **Edge types** (`Edge`, `EdgeType`): typed relationships between knowledge nodes
//! - **Type-safe IDs** (`NodeId`, `EdgeId`, `BranchId`): newtype wrappers preventing
//!   accidental misuse
//! - **Detector results** (`ConventionFinding`, `DetectorResults`): output types
//!   flowing from detectors through storage to the graph
//! - **Configuration** (`ScanConfig`, `DetectionConfig`, `ServerConfig`): all
//!   implement `Default` for zero-config operation

pub mod config;
pub mod dependency;
pub mod detector_result;
pub mod edge;
pub mod error;
pub mod ids;
pub mod ir;
pub mod knowledge;
pub mod snippet;
pub mod symbol_snippet;

#[cfg(any(test, feature = "test-helpers"))]
pub mod test_helpers;

pub use config::{BackupConfig, DetectionConfig, ScanConfig, ServerConfig};
pub use dependency::{
    DependencyDomain, PathAlias, classify_domain, is_python_stdlib_module,
    matches_keyword_at_boundary, resolve_path_alias, top_level_module,
};
pub use detector_result::{
    AnchorKind, CodeEvidence, ConventionFinding, DetectorResults, FindingKind,
};
pub use edge::{Edge, EdgeType};
pub use error::{CoreError, ParseEnumError};
pub use ids::{BranchId, EdgeId, NodeId};
pub use ir::{
    DependencyUsage, DeriveUsage, Export, Function, FunctionCall, Import, JavaScriptIR, Language,
    LanguageIR, MacroCall, ModDeclaration, ModuleSystem, ProjectFile, PythonIR, RustIR, TraitImpl,
    TypeDef, TypeDefKind, TypeScriptIR,
};
pub use knowledge::{KnowledgeNature, KnowledgeNode, KnowledgeWeight, Trend};
pub use snippet::{CodeSnippet, MAX_SNIPPET_LINES, truncate_snippet, truncate_snippet_to};
pub use symbol_snippet::{
    MAX_DEFINITION_SNIPPET_LINES, export_definition_snippet, function_definition_snippet,
    type_definition_snippet,
};
