//! Commonly-used types for agent applications.
//!
//! ```no_run
//! use querymt_agent::prelude::*;
//!
//! # #[tokio::main]
//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! // Single agent
//! let agent = Agent::single()
//!     .provider("anthropic", "claude-sonnet-4-20250514")
//!     .build()
//!     .await?;
//!
//! // Multi-agent (same Agent type back)
//! let agent = Agent::multi()
//!     .planner(|p| p.provider("openai", "gpt-4"))
//!     .delegate("coder", |d| d.provider("anthropic", "claude-sonnet-4-20250514"))
//!     .build()
//!     .await?;
//! # Ok(())
//! # }
//! ```
//!
// Error types
pub use crate::error::AgentError;

// High-level APIs
pub use crate::api::{
    Agent, AgentBuilder, AgentInfra, AgentMesh, AgentSession, DelegateConfigBuilder, Mesh,
    MeshJoinOutcome, MeshRuntime, MeshSpec, PlannerConfigBuilder, QuorumBuilder,
};
// Config and runner APIs
pub use crate::config::{
    AgentSettings, Config, ConfigSource, DelegateConfig, McpServerConfig, PlannerConfig,
    QuorumConfig, QuorumSettings, SingleAgentConfig,
};
pub use crate::runner::{
    AgentRunner, ChatRunner, ChatRunnerExt, ChatSession, ChatSessionExt, from_config,
    from_config_value_with_infra, from_config_with_infra,
};

// Core agent types
pub use crate::agent::{AgentHandle, LocalAgentHandle, SnapshotPolicy, ToolPolicy};
pub use crate::quorum::{AgentQuorum, DelegateAgent};

// Events
pub use crate::events::{AgentEvent, AgentEventKind};

// Delegation & Multi-agent
pub use crate::delegation::{AgentInfo, AgentRegistry};

// Configuration types
pub use crate::agent::DelegationContextTiming;
pub use crate::middleware::{ContextConfig, DelegationConfig, LimitsConfig, MiddlewarePresets};

// Session & Storage
pub use crate::session::domain::Task;
pub use crate::session::store::SessionStore;

// Hash
pub use crate::hash::RapidHash;

// Tools
pub use crate::tools::Tool;

// ACP Server
pub use crate::acp::AcpTransport;

// Builder (for advanced use)
pub use crate::agent::AgentConfigBuilder;
