use std::path::{Path, PathBuf};
pub fn load_agents_md(start_dir: &Path) -> Option<(String, PathBuf)> {
load_all_agents_md(start_dir).into_iter().next()
}
pub fn load_all_agents_md(start_dir: &Path) -> Vec<(String, PathBuf)> {
let mut results = Vec::new();
let mut current = start_dir.to_path_buf();
let repo_root = find_git_root(start_dir);
loop {
if let Some(found) = load_file(¤t) {
results.push(found);
}
if repo_root.as_ref() == Some(¤t) || !current.pop() {
break;
}
}
results
}
fn load_file(dir: &Path) -> Option<(String, PathBuf)> {
let agents_path = dir.join("AGENTS.md");
std::fs::read_to_string(&agents_path)
.ok()
.map(|content| (content, agents_path))
}
fn find_git_root(start_dir: &Path) -> Option<PathBuf> {
let mut current = start_dir.to_path_buf();
loop {
if current.join(".git").exists() {
return Some(current);
}
if !current.pop() {
return None;
}
}
}