agcodex_core/
user_agent.rs

1const DEFAULT_ORIGINATOR: &str = "agcodex_cli_rs";
2
3pub fn get_codex_user_agent(originator: Option<&str>) -> String {
4    let build_version = env!("CARGO_PKG_VERSION");
5    let os_info = os_info::get();
6    format!(
7        "{}/{build_version} ({} {}; {})",
8        originator.unwrap_or(DEFAULT_ORIGINATOR),
9        os_info.os_type(),
10        os_info.version(),
11        os_info.architecture().unwrap_or("unknown"),
12    )
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn test_get_codex_user_agent() {
21        let user_agent = get_codex_user_agent(None);
22        assert!(user_agent.starts_with("agcodex_cli_rs/"));
23    }
24
25    #[test]
26    #[cfg(target_os = "macos")]
27    fn test_macos() {
28        use regex_lite::Regex;
29        let user_agent = get_codex_user_agent(None);
30        let re =
31            Regex::new(r"^codex_cli_rs/\d+\.\d+\.\d+ \(Mac OS \d+\.\d+\.\d+; (x86_64|arm64)\)$")
32                .unwrap();
33        assert!(re.is_match(&user_agent));
34    }
35}