//! Kranth — stress-test ideas with hundreds of AI personas.
//!
//! ```no_run
//! # use kranth::{Kranth, CreateSimRequest};
//! # use futures::StreamExt;
//! # #[tokio::main]
//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let client = Kranth::new("kr_live_…");
//!
//! let sim = client.sims().create(&CreateSimRequest {
//!     idea_text:     "Launch a paid Rust devtool. $29/mo.".into(),
//!     persona_count: 50,
//!     model_id:      "claude-sonnet-4-6".into(),
//!     training_opt_in: None,
//! }).await?;
//!
//! let mut stream = client.sims().stream(&sim.sim_id);
//! while let Some(ev) = stream.next().await {
//!     let ev = ev?;
//!     if ev.kind == "sim.complete" {
//!         break;
//!     }
//! }
//! # Ok(())
//! # }
//! ```

pub mod blocking;
mod billing;
mod client;
mod debates;
mod errors;
mod recon;
mod resources;
mod sse;
mod types;

pub use billing::CheckoutParams;
pub use client::Kranth;
pub use debates::DebatesResource;
pub use errors::{Error, Result};
pub use recon::ReconResource;
pub use types::*;
