cc_sdk/
lib.rs

1//! # Claude Code SDK for Rust
2//!
3//! A Rust SDK for interacting with the Claude Code CLI, providing both simple query
4//! and interactive client interfaces.
5//!
6//! ## Features
7//!
8//! - **Simple Query Interface**: One-shot queries with the `query` function
9//! - **Interactive Client**: Stateful conversations with `ClaudeSDKClient`
10//! - **Streaming Support**: Async streaming of responses
11//! - **Type Safety**: Strongly typed messages and errors
12//! - **Flexible Configuration**: Extensive options for customization
13//!
14//! ## Quick Start
15//!
16//! ```rust,no_run
17//! use cc_sdk::{query, Result};
18//! use futures::StreamExt;
19//!
20//! #[tokio::main]
21//! async fn main() -> Result<()> {
22//!     let mut messages = query("What is 2 + 2?", None).await?;
23//!     
24//!     while let Some(msg) = messages.next().await {
25//!         println!("{:?}", msg?);
26//!     }
27//!     
28//!     Ok(())
29//! }
30//! ```
31
32#![warn(missing_docs)]
33#![warn(rustdoc::missing_crate_level_docs)]
34
35mod client;
36// mod client_v2;  // Has compilation errors
37// mod client_final;  // Has compilation errors
38mod client_working;
39mod errors;
40mod interactive;
41mod internal_query;
42mod message_parser;
43pub mod model_recommendation;
44mod optimized_client;
45mod perf_utils;
46mod query;
47mod sdk_mcp;
48pub mod token_tracker;
49pub mod transport;
50mod types;
51
52// Re-export main types and functions
53pub use client::ClaudeSDKClient;
54// pub use client_v2::ClaudeSDKClientV2;  // Has compilation errors
55// pub use client_final::ClaudeSDKClientFinal;  // Has compilation errors
56pub use client_working::ClaudeSDKClientWorking;
57pub use errors::{Result, SdkError};
58pub use interactive::InteractiveClient;
59pub use internal_query::Query;
60pub use query::query;
61// Keep the old name as an alias for backward compatibility
62pub use interactive::InteractiveClient as SimpleInteractiveClient;
63pub use model_recommendation::ModelRecommendation;
64pub use optimized_client::{ClientMode, OptimizedClient};
65pub use perf_utils::{MessageBatcher, PerformanceMetrics, RetryConfig};
66pub use token_tracker::{BudgetLimit, BudgetManager, BudgetStatus, TokenUsageTracker};
67
68/// Default interactive client - the recommended client for interactive use
69pub type ClaudeSDKClientDefault = InteractiveClient;
70pub use types::{
71    AssistantContent, AssistantMessage, ClaudeCodeOptions, ContentBlock, ContentValue,
72    ControlProtocolFormat, ControlRequest, ControlResponse, McpServerConfig, Message,
73    PermissionMode, ResultMessage, SystemMessage, TextContent, ThinkingContent,
74    ToolResultContent, ToolUseContent, UserContent, UserMessage,
75    // New permission and hook types
76    PermissionBehavior, PermissionResult, PermissionResultAllow, PermissionResultDeny,
77    PermissionRuleValue, PermissionUpdate, PermissionUpdateDestination, PermissionUpdateType,
78    ToolPermissionContext, CanUseTool, HookCallback, HookContext, HookMatcher,
79    // SDK Control Protocol types
80    SDKControlInitializeRequest, SDKControlInterruptRequest, SDKControlMcpMessageRequest,
81    SDKControlPermissionRequest, SDKControlRequest, SDKControlSetPermissionModeRequest,
82    SDKHookCallbackRequest,
83    // Phase 2 enhancements
84    SettingSource, AgentDefinition, SystemPrompt,
85};
86
87// Phase 3: Type aliases for naming consistency
88/// Alias for ClaudeCodeOptions (matches Python SDK naming)
89pub type ClaudeAgentOptions = ClaudeCodeOptions;
90/// Alias for ClaudeCodeOptionsBuilder (matches Python SDK naming)
91pub type ClaudeAgentOptionsBuilder = ClaudeCodeOptionsBuilder;
92
93// Re-export builder
94pub use types::ClaudeCodeOptionsBuilder;
95
96// Re-export SDK MCP types
97pub use sdk_mcp::{
98    SdkMcpServer, SdkMcpServerBuilder, ToolDefinition, ToolHandler, ToolInputSchema,
99    ToolResult, create_simple_tool,
100    ToolResultContent as SdkToolResultContent,
101};
102
103/// Prelude module for convenient imports
104pub mod prelude {
105    pub use crate::{
106        ClaudeCodeOptions, ClaudeSDKClient, ClaudeSDKClientWorking, Message, PermissionMode,
107        Result, SdkError, query,
108    };
109}