#![allow(unused_imports)]
pub mod checker;
pub mod crates_io;
pub mod diagnostics;
pub mod diagnostics_ml;
pub mod drift;
pub mod graph;
pub mod hero_image;
pub mod publish_status;
pub mod quality;
pub mod quality_checker;
pub mod quality_format;
pub mod releaser;
pub mod releaser_preflight;
pub mod releaser_types;
pub mod tree;
pub mod tui;
pub mod types;
pub use checker::StackChecker;
pub use crates_io::CratesIoClient;
pub use diagnostics::{
render_dashboard, AndonStatus, Anomaly, AnomalyCategory, ComponentMetrics, ComponentNode,
GraphMetrics, HealthStatus, HealthSummary, StackDiagnostics,
};
pub use diagnostics_ml::{ErrorForecaster, ForecastMetrics, IsolationForest};
pub use drift::{format_drift_errors, format_drift_json, DriftChecker, DriftReport, DriftSeverity};
pub use graph::DependencyGraph;
pub use hero_image::{HeroImageResult, ImageFormat};
pub use publish_status::{
format_report_json as format_publish_status_json,
format_report_text as format_publish_status_text, CrateStatus, PublishAction,
PublishStatusCache, PublishStatusReport, PublishStatusScanner,
};
pub use quality::{
ComponentQuality, QualityGrade, QualityIssue, QualitySummary, Score, StackLayer,
StackQualityReport,
};
pub use quality_checker::QualityChecker;
pub use quality_format::{
format_report_json as format_quality_report_json,
format_report_text as format_quality_report_text,
};
pub use releaser_types::{format_plan_text, BumpType, ReleaseConfig, ReleaseResult, ReleasedCrate};
pub use types::*;
pub const PAIML_CRATES: &[&str] = &[
"trueno",
"trueno-viz",
"trueno-db",
"trueno-graph",
"trueno-rag",
"trueno-rag-cli",
"trueno-zram-core",
"trueno-ublk",
"trueno-cupti",
"cbtop",
"aprender",
"aprender-shell",
"aprender-tsp",
"realizar",
"alimentar",
"entrenar",
"renacer",
"repartir",
"pacha",
"duende",
"ttop",
"pzsh",
"forjar",
"simular",
"jugar",
"jugar-probar",
"manzana",
"pepita",
"wos",
"whisper-apr",
"certeza",
"provable-contracts",
"tiny-model-ground-truth",
"batuta",
"presentar",
"presentar-cli",
"presentar-core",
"ruchy",
"decy",
"depyler",
"pmat",
"bashrs",
"bashrs-runtime",
"bashrs-oracle",
"organizational-intelligence-plugin",
"sovereign-ai-stack-book",
"apr-cookbook",
"alm-cookbook",
"pres-cookbook",
"batuta-cookbook",
"qwen-train-canary",
"qwen-coder-deploy",
];
pub fn is_paiml_crate(name: &str) -> bool {
PAIML_CRATES.contains(&name)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_paiml_crate_detection() {
assert!(is_paiml_crate("trueno"));
assert!(is_paiml_crate("aprender"));
assert!(is_paiml_crate("batuta"));
assert!(!is_paiml_crate("serde"));
assert!(!is_paiml_crate("tokio"));
assert!(!is_paiml_crate("arrow"));
}
#[test]
fn test_cookbook_detection() {
assert!(is_paiml_crate("apr-cookbook"));
assert!(is_paiml_crate("alm-cookbook"));
assert!(is_paiml_crate("pres-cookbook"));
assert!(is_paiml_crate("pmat"));
}
#[test]
fn test_new_stack_crates() {
assert!(is_paiml_crate("duende"));
assert!(is_paiml_crate("ttop"));
assert!(is_paiml_crate("forjar"));
assert!(is_paiml_crate("simular"));
assert!(is_paiml_crate("jugar"));
assert!(is_paiml_crate("jugar-probar"));
assert!(is_paiml_crate("manzana"));
assert!(is_paiml_crate("trueno-zram-core"));
assert!(is_paiml_crate("trueno-ublk"));
assert!(is_paiml_crate("trueno-cupti"));
assert!(is_paiml_crate("cbtop"));
assert!(is_paiml_crate("provable-contracts"));
assert!(is_paiml_crate("tiny-model-ground-truth"));
}
#[test]
fn test_paiml_crates_count() {
assert!(PAIML_CRATES.len() >= 47);
}
}