mod registry;
#[macro_use]
pub(crate) mod delegation;
pub mod anthropic;
pub mod bai;
pub mod deepseek;
pub mod google;
pub mod groq;
pub mod kimi_coding;
pub mod minimax;
pub mod ollama;
pub mod openai;
pub mod openai_compatible;
pub mod openai_responses;
pub mod opencode_go;
pub mod openrouter;
pub mod xai;
pub mod zai;
pub mod zenmux;
pub use crate::protocol::{ArcProtocol, BoxedProtocol, LLMProtocol};
pub use registry::{
clear_providers, get_provider, get_registered_providers, global_registry, register_provider,
ProtocolRegistry,
};
pub fn register_all_providers() {
use std::sync::Arc;
register_provider(Arc::new(openai::OpenAIProvider::new()));
register_provider(Arc::new(openai_compatible::OpenAICompatibleProvider::new()));
register_provider(Arc::new(openai_responses::OpenAIResponsesProvider::new()));
register_provider(Arc::new(anthropic::AnthropicProvider::new()));
register_provider(Arc::new(google::GoogleProvider::new()));
register_provider(Arc::new(ollama::OllamaProvider::new()));
register_provider(Arc::new(xai::XAIProvider::new()));
register_provider(Arc::new(groq::GroqProvider::new()));
register_provider(Arc::new(openrouter::OpenRouterProvider::new()));
register_provider(Arc::new(minimax::MiniMaxProvider::new()));
register_provider(Arc::new(kimi_coding::KimiCodingProvider::new()));
register_provider(Arc::new(zai::ZAIProvider::new()));
register_provider(Arc::new(deepseek::DeepSeekProvider::new()));
register_provider(Arc::new(zenmux::ZenmuxProvider::new()));
register_provider(Arc::new(bai::BaiProvider::new()));
register_provider(Arc::new(opencode_go::OpenCodeGoProvider::new()));
}