pub fn expand_tilde(path: &str) -> String {
if path == "~" {
std::env::var("HOME").unwrap_or_else(|_| "~".to_string())
} else if let Some(rest) = path.strip_prefix("~/") {
match std::env::var("HOME") {
Ok(home) => format!("{}/{}", home, rest),
Err(_) => path.to_string(),
}
} else {
path.to_string()
}
}
use crate::command::chat::agent::thread_identity::thread_cwd;
pub fn resolve_path(path: &str) -> String {
let expanded = expand_tilde(path);
if std::path::Path::new(&expanded).is_absolute() {
return expanded;
}
if let Some(cwd) = thread_cwd() {
return cwd.join(&expanded).to_string_lossy().to_string();
}
expanded
}
pub fn effective_cwd() -> String {
if let Some(cwd) = thread_cwd() {
return cwd.to_string_lossy().to_string();
}
std::env::current_dir()
.map(|d| d.to_string_lossy().to_string())
.unwrap_or_else(|_| ".".to_string())
}