j_agent/util/
path_utils.rs1pub fn expand_tilde(path: &str) -> String {
3 if path == "~" {
4 std::env::var("HOME").unwrap_or_else(|_| "~".to_string())
5 } else if let Some(rest) = path.strip_prefix("~/") {
6 match std::env::var("HOME") {
7 Ok(home) => format!("{}/{}", home, rest),
8 Err(_) => path.to_string(),
9 }
10 } else {
11 path.to_string()
12 }
13}
14
15use crate::agent::thread_identity::thread_cwd;
16
17pub fn resolve_path(path: &str) -> String {
19 let expanded = expand_tilde(path);
20 if std::path::Path::new(&expanded).is_absolute() {
21 return expanded;
22 }
23 if let Some(cwd) = thread_cwd() {
24 return cwd.join(&expanded).to_string_lossy().to_string();
25 }
26 expanded
27}
28
29pub fn effective_cwd() -> String {
31 if let Some(cwd) = thread_cwd() {
32 return cwd.to_string_lossy().to_string();
33 }
34 std::env::current_dir()
35 .map(|d| d.to_string_lossy().to_string())
36 .unwrap_or_else(|_| ".".to_string())
37}