diff --git a/rust/crates/agentforge-candidates/src/lib.rs b/rust/crates/agentforge-candidates/src/lib.rs index bafddcf..a961af2 100644 --- a/rust/crates/agentforge-candidates/src/lib.rs +++ b/rust/crates/agentforge-candidates/src/lib.rs @@ -32,6 +32,12 @@ pub use promote::{ab_prep, promote_candidate, PromotionResult}; // Submodules provide organization + inherent impl extensions (store.rs etc). // Full split of types into modules will happen as real logic is ported. +/// Default AgentForge subdir under $HOME (legacy /home/eveselove fallback). +pub(crate) fn home_agentforge(sub: &str) -> PathBuf { + let home = std::env::var("HOME").unwrap_or_else(|_| "/home/eveselove".to_string()); + PathBuf::from(home).join("agentforge").join(sub) +} + /// Canonical candidate metadata (candidate_meta.json). /// Mirrors Python structure for seamless migration. #[derive(Debug, Clone, Serialize, Deserialize, Default)] @@ -96,7 +102,7 @@ impl CandidateStore { std::env::var("AGENTFORGE_PENDING_CANDIDATES_DIR") .or_else(|_| std::env::var("AGENTFORGE_PENDING_CANDIDATES")) .map(PathBuf::from) - .unwrap_or_else(|_| PathBuf::from("/home/eveselove/agentforge/pending_candidates")) + .unwrap_or_else(|_| home_agentforge("pending_candidates")) }); // In real: mkdir let _ = std::fs::create_dir_all(&root); diff --git a/rust/crates/agentforge-candidates/src/promote.rs b/rust/crates/agentforge-candidates/src/promote.rs index 80581b5..dcee1ff 100644 --- a/rust/crates/agentforge-candidates/src/promote.rs +++ b/rust/crates/agentforge-candidates/src/promote.rs @@ -70,7 +70,7 @@ pub fn promote_candidate( if copy_to_skills && yaml_src.exists() { let skills_dir = std::env::var("AGENTFORGE_SKILLS_DIR") .map(PathBuf::from) - .unwrap_or_else(|_| PathBuf::from("/home/eveselove/agentforge/skills")); + .unwrap_or_else(|_| crate::home_agentforge("skills")); let mut base = candidate_id.to_string(); // Prefer yaml "name:" (Python parity for clean promoted filenames on real data) @@ -315,7 +315,7 @@ pub fn promote_candidate( // 5) Rolling skills/promotion_history.json (exact Python shape, last 50) for complete audit/UX on real data (full end-to-end) let skills_dir = std::env::var("AGENTFORGE_SKILLS_DIR") .map(PathBuf::from) - .unwrap_or_else(|_| PathBuf::from("/home/eveselove/agentforge/skills")); + .unwrap_or_else(|_| crate::home_agentforge("skills")); let skills_hist_p = skills_dir.join("promotion_history.json"); if !dry_run { if let Some(p) = skills_hist_p.parent() {