Skip to main content

agentctl_auth/
lib.rs

1//! agentctl-auth — Unified auth pool and LLM API client.
2//!
3//! Provides:
4//! - **AuthPool**: credential management (load/save/add/remove/import from auth-profiles.json)
5//! - **Credential testing**: validate API keys against provider endpoints
6//! - **Claude client**: Messages API with OAuth stealth headers, token rotation on 429
7//!
8//! # Quick Start
9//!
10//! ```no_run
11//! use agentctl_auth::{AuthPool, claude};
12//!
13//! # async fn example() -> anyhow::Result<()> {
14//! // Load auth pool
15//! let pool = AuthPool::load(&std::path::PathBuf::from("~/.agentctl/auth.toml"))?;
16//!
17//! // Get default Anthropic credential
18//! let (name, cred) = pool.get_default("anthropic").unwrap();
19//!
20//! // Build a Claude client with token rotation
21//! let client = claude::ClientBuilder::new()
22//!     .pool(&pool)
23//!     .build()?;
24//!
25//! let response = client.message(
26//!     "claude-sonnet-4-20250514",
27//!     &[claude::Message::user("Hello!")],
28//!     4096,
29//! ).await?;
30//!
31//! println!("Tokens used: {}", response.usage.input_tokens + response.usage.output_tokens);
32//! # Ok(())
33//! # }
34//! ```
35
36pub mod pool;
37pub mod credential;
38pub mod test_credential;
39pub mod claude;
40mod import;
41
42pub use credential::{Credential, UsageStats, TestResult};
43pub use pool::AuthPool;
44pub use test_credential::{test_credential, test_all};
45
46// Re-export key claude types for convenience
47pub use claude::{
48    Client as ClaudeClient,
49    Tool, ToolHandler, ToolOutput, AgentLoopResult,
50    Message, ContentBlock, ToolResultBlock,
51};