claude_code_acp/command_safety/
mod.rs

1//! Command safety analysis module
2//!
3//! This module provides functions to determine if shell commands are safe to execute
4//! automatically or potentially dangerous and require user confirmation.
5//!
6//! Reference: vendors/codex/codex-rs/core/src/command_safety/
7
8mod is_dangerous_command;
9mod is_safe_command;
10
11pub use is_dangerous_command::command_might_be_dangerous;
12pub use is_safe_command::is_known_safe_command;
13
14/// Extract the basename of a command, handling full paths
15///
16/// Examples:
17/// - `/usr/bin/find` → `find`
18/// - `find` → `find`
19/// - `` → ``
20pub fn extract_command_basename(cmd: &str) -> &str {
21    cmd.split_whitespace()
22        .next()
23        .and_then(|s| std::path::Path::new(s).file_name())
24        .and_then(|s| s.to_str())
25        .unwrap_or("")
26}
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    #[test]
33    fn test_extract_command_basename() {
34        assert_eq!(extract_command_basename("find . -name '*.rs'"), "find");
35        assert_eq!(extract_command_basename("/usr/bin/find ."), "find");
36        assert_eq!(extract_command_basename("/usr/local/bin/git status"), "git");
37        assert_eq!(extract_command_basename("ls -la"), "ls");
38        assert_eq!(extract_command_basename(""), "");
39    }
40}