claude_code_agent_sdk/
version.rs1pub const SDK_VERSION: &str = env!("CARGO_PKG_VERSION");
5
6pub const MIN_CLI_VERSION: &str = "2.0.0";
8
9pub const SKIP_VERSION_CHECK_ENV: &str = "CLAUDE_AGENT_SDK_SKIP_VERSION_CHECK";
11
12pub const ENTRYPOINT: &str = "sdk-rs";
14
15pub 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
29pub 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 if cli_min > req_min {
48 return true;
49 }
50 if cli_min < req_min {
51 return false;
52 }
53
54 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}