//! Dónde buscar programas externos (agentes ACP, servidores MCP, CLIs de inicio de sesión).
//!
//! Una app abierta desde el Finder hereda un `PATH` mínimo, sin `~/.local/bin`, Homebrew ni nvm: aquí se completa.
use crate::core::platform;
use std::ffi::OsString;
use std::path::PathBuf;
/// Directorios de búsqueda: el `PATH` heredado primero y después los lugares habituales del sistema.
pub fn search_dirs() -> Vec<PathBuf> {
platform::tool_dirs()
}
/// Ruta completa del programa: tal cual si ya es una ruta; si no, el primero que exista en `search_dirs`.
pub fn resolve(command: &str) -> PathBuf {
platform::find_program(command)
}
/// `PATH` para el proceso hijo: así `npx` encuentra `node` aunque la app no heredara su directorio.
pub fn child_path() -> OsString {
platform::path_for_child()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn delega_en_la_capa_de_sistema() {
assert_eq!(resolve("/opt/mi/agente"), PathBuf::from("/opt/mi/agente"));
assert_eq!(resolve("no-existe-aura-xyz"), PathBuf::from("no-existe-aura-xyz"));
assert!(!child_path().is_empty() && !search_dirs().is_empty());
}
}