Skip to main content

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
35/// CLI download and management utilities
36pub mod cli_download;
37mod client;
38mod client_working;
39mod errors;
40mod interactive;
41mod internal_query;
42mod message_parser;
43pub mod model_recommendation;
44mod optimized_client;
45/// Session history API
46pub mod sessions;
47mod perf_utils;
48mod query;
49mod sdk_mcp;
50pub mod token_tracker;
51pub mod transport;
52mod types;
53
54/// LLM Proxy — use Claude Code subscription as a direct LLM interface.
55///
56/// Strips away the CC agent layer (tools, system prompt, hooks) and provides
57/// a simple "send prompt, get text" API.
58pub mod llm;
59
60// Re-export main types and functions
61pub use client::ClaudeSDKClient;
62pub use client_working::ClaudeSDKClientWorking;
63pub use errors::{Result, SdkError};
64pub use interactive::InteractiveClient;
65pub use internal_query::Query;
66pub use query::query;
67// Keep the old name as an alias for backward compatibility
68pub use interactive::InteractiveClient as SimpleInteractiveClient;
69pub use model_recommendation::ModelRecommendation;
70pub use optimized_client::{ClientMode, OptimizedClient};
71pub use sessions::{SessionInfo, SessionMessage, list_sessions, get_session_messages, rename_session, tag_session, delete_session, fork_session};
72pub use perf_utils::{MessageBatcher, PerformanceMetrics, RetryConfig};
73pub use token_tracker::{BudgetLimit, BudgetManager, BudgetStatus, TokenUsageTracker};
74/// Default interactive client - the recommended client for interactive use
75pub type ClaudeSDKClientDefault = InteractiveClient;
76pub use types::{
77    AssistantContent, AssistantMessage, ClaudeCodeOptions, ContentBlock, ContentValue,
78    ControlProtocolFormat, ControlRequest, ControlResponse, McpServerConfig, Message,
79    PermissionMode, ResultMessage, SystemMessage, TextContent, ThinkingContent,
80    ToolResultContent, ToolUseContent, UserContent, UserMessage,
81    // Permission types
82    PermissionBehavior, PermissionResult, PermissionResultAllow, PermissionResultDeny,
83    PermissionRuleValue, PermissionUpdate, PermissionUpdateDestination, PermissionUpdateType,
84    ToolPermissionContext, CanUseTool,
85    // Hook types (v0.3.0 - strongly-typed hooks)
86    HookCallback, HookContext, HookMatcher,
87    // Hook Input types (strongly-typed)
88    BaseHookInput, HookInput, PreToolUseHookInput, PostToolUseHookInput,
89    PostToolUseFailureHookInput, UserPromptSubmitHookInput, StopHookInput,
90    SubagentStopHookInput, PreCompactHookInput,
91    NotificationHookInput, SubagentStartHookInput, PermissionRequestHookInput,
92    // Hook Output types (strongly-typed)
93    HookJSONOutput, AsyncHookJSONOutput, SyncHookJSONOutput,
94    HookSpecificOutput, PreToolUseHookSpecificOutput, PostToolUseHookSpecificOutput,
95    PostToolUseFailureHookSpecificOutput, UserPromptSubmitHookSpecificOutput,
96    SessionStartHookSpecificOutput, NotificationHookSpecificOutput,
97    SubagentStartHookSpecificOutput, PermissionRequestHookSpecificOutput,
98    // SDK Control Protocol types
99    SDKControlInitializeRequest, SDKControlInterruptRequest, SDKControlMcpMessageRequest,
100    SDKControlPermissionRequest, SDKControlRequest, SDKControlSetPermissionModeRequest,
101    SDKHookCallbackRequest, SDKControlRewindFilesRequest,
102    SDKControlGetContextUsageRequest, SDKControlStopTaskRequest,
103    SDKControlMcpStatusRequest, SDKControlMcpReconnectRequest, SDKControlMcpToggleRequest,
104    // Phase 2 enhancements
105    SettingSource, AgentDefinition, SystemPrompt,
106    // Task message types (Python SDK parity)
107    TaskUsage, TaskStatus, TaskStartedMessage, TaskProgressMessage, TaskNotificationMessage,
108    // Phase 3 enhancements (Python SDK v0.1.12+ sync)
109    ToolsConfig, ToolsPreset, SdkBeta,
110    // v0.7.0 enhancements (Python SDK parity)
111    Effort, RateLimitStatus, RateLimitType, RateLimitInfo, AssistantMessageError,
112    McpConnectionStatus, McpToolAnnotations, McpToolInfo, McpServerInfo, McpServerStatus,
113    ThinkingConfig,
114    SandboxSettings, SandboxNetworkConfig, SandboxIgnoreViolations,
115    SdkPluginConfig,
116    // v0.8.0 enhancements (Python SDK full parity)
117    ContextUsageResponse, ContextUsageCategory, ApiUsage,
118    TaskBudget, ForkSessionResult,
119};
120
121// Phase 3: Type aliases for naming consistency
122/// Alias for ClaudeCodeOptions (matches Python SDK naming)
123pub type ClaudeAgentOptions = ClaudeCodeOptions;
124/// Alias for ClaudeCodeOptionsBuilder (matches Python SDK naming)
125pub type ClaudeAgentOptionsBuilder = ClaudeCodeOptionsBuilder;
126
127// Re-export builder
128pub use types::ClaudeCodeOptionsBuilder;
129
130// Re-export transport types for convenience
131pub use transport::SubprocessTransport;
132#[cfg(feature = "websocket")]
133pub use transport::websocket::{WebSocketTransport, WebSocketConfig};
134
135// Re-export SDK MCP types
136pub use sdk_mcp::{
137    SdkMcpServer, SdkMcpServerBuilder, ToolDefinition, ToolHandler, ToolInputSchema,
138    ToolResult, create_simple_tool,
139    ToolResultContent as SdkToolResultContent,
140};
141
142// Re-export LLM proxy types
143pub use llm::{LlmOptions, LlmOptionsBuilder, LlmResponse};
144
145/// Prelude module for convenient imports
146pub mod prelude {
147    pub use crate::{
148        ClaudeCodeOptions, ClaudeSDKClient, ClaudeSDKClientWorking, Message, PermissionMode,
149        Result, SdkError, query,
150    };
151}