ai-agent 0.13.4

Idiomatic agent sdk inspired by the claude code source leak
Documentation
#![allow(dead_code)]

pub fn eager_parse_cli_flag(flag_name: &str, argv: Option<Vec<String>>) -> Option<String> {
    let argv = argv.unwrap_or_else(|| std::env::args().collect());

    for i in 0..argv.len() {
        let arg = argv.get(i)?;
        // Handle --flag=value syntax
        if arg.starts_with(&format!("{}=", flag_name)) {
            return Some(arg[flag_name.len() + 1..].to_string());
        }
        // Handle --flag value syntax
        if arg == flag_name && i + 1 < argv.len() {
            return Some(argv[i + 1].clone());
        }
    }
    None
}

pub fn extract_args_after_double_dash(
    command_or_value: &str,
    args: Option<Vec<String>>,
) -> (String, Vec<String>) {
    let args = args.unwrap_or_default();

    if command_or_value == "--" && !args.is_empty() {
        let command = args[0].clone();
        let remaining = args[1..].to_vec();
        return (command, remaining);
    }
    (command_or_value.to_string(), args)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_eager_parse_cli_flag_equals() {
        let argv = vec!["prog".to_string(), "--flag=value".to_string()];
        assert_eq!(
            eager_parse_cli_flag("--flag", Some(argv)),
            Some("value".to_string())
        );
    }

    #[test]
    fn test_eager_parse_cli_flag_space() {
        let argv = vec![
            "prog".to_string(),
            "--flag".to_string(),
            "value".to_string(),
        ];
        assert_eq!(
            eager_parse_cli_flag("--flag", Some(argv)),
            Some("value".to_string())
        );
    }

    #[test]
    fn test_eager_parse_cli_flag_not_found() {
        let argv = vec!["prog".to_string(), "--other".to_string()];
        assert_eq!(eager_parse_cli_flag("--flag", Some(argv)), None);
    }

    #[test]
    fn test_extract_args_after_double_dash() {
        let args = vec![
            "subcmd".to_string(),
            "--flag".to_string(),
            "arg".to_string(),
        ];
        let (command, remaining) = extract_args_after_double_dash("--", Some(args));
        assert_eq!(command, "subcmd");
        assert_eq!(remaining, vec!["--flag", "arg"]);
    }

    #[test]
    fn test_extract_args_no_double_dash() {
        let args = vec!["--flag".to_string(), "arg".to_string()];
        let (command, remaining) = extract_args_after_double_dash("name", Some(args));
        assert_eq!(command, "name");
        assert_eq!(remaining, vec!["--flag", "arg"]);
    }
}