claude_code_agent_sdk/
version.rs

1//! Version information for the Claude Agent SDK
2
3/// The version of this SDK
4pub const SDK_VERSION: &str = env!("CARGO_PKG_VERSION");
5
6/// Minimum required Claude Code CLI version
7pub const MIN_CLI_VERSION: &str = "2.0.0";
8
9/// Environment variable to skip version check
10pub const SKIP_VERSION_CHECK_ENV: &str = "CLAUDE_AGENT_SDK_SKIP_VERSION_CHECK";
11
12/// Entrypoint identifier for subprocess
13pub const ENTRYPOINT: &str = "sdk-rs";
14
15/// Parse a semantic version string into (major, minor, patch)
16pub fn parse_version(version: &str) -> Option<(u32, u32, u32)> {
17    let parts: Vec<&str> = version.trim_start_matches('v').split('.').collect();
18    if parts.len() < 3 {
19        return None;
20    }
21
22    let major = parts[0].parse().ok()?;
23    let minor = parts[1].parse().ok()?;
24    let patch = parts[2].parse().ok()?;
25
26    Some((major, minor, patch))
27}
28
29/// Check if the CLI version meets the minimum requirement
30pub fn check_version(cli_version: &str) -> bool {
31    let Some((cli_maj, cli_min, cli_patch)) = parse_version(cli_version) else {
32        return false;
33    };
34
35    let Some((req_maj, req_min, req_patch)) = parse_version(MIN_CLI_VERSION) else {
36        return false;
37    };
38
39    if cli_maj > req_maj {
40        return true;
41    }
42    if cli_maj < req_maj {
43        return false;
44    }
45
46    // Major versions are equal
47    if cli_min > req_min {
48        return true;
49    }
50    if cli_min < req_min {
51        return false;
52    }
53
54    // Major and minor are equal
55    cli_patch >= req_patch
56}
57
58#[cfg(test)]
59mod tests {
60    use super::*;
61
62    #[test]
63    fn test_parse_version() {
64        assert_eq!(parse_version("1.2.3"), Some((1, 2, 3)));
65        assert_eq!(parse_version("v1.2.3"), Some((1, 2, 3)));
66        assert_eq!(parse_version("10.20.30"), Some((10, 20, 30)));
67        assert_eq!(parse_version("1.2"), None);
68        assert_eq!(parse_version("invalid"), None);
69    }
70
71    #[test]
72    fn test_check_version() {
73        assert!(check_version("2.0.0"));
74        assert!(check_version("2.0.1"));
75        assert!(check_version("2.1.0"));
76        assert!(check_version("3.0.0"));
77        assert!(!check_version("1.9.9"));
78        assert!(!check_version("1.99.99"));
79    }
80}