diff --git a/src/bin/runtime_inventory.rs b/src/bin/runtime_inventory.rs index 8a07096..20d61f0 100644 --- a/src/bin/runtime_inventory.rs +++ b/src/bin/runtime_inventory.rs @@ -99,15 +99,22 @@ fn command_exists(program: &str) -> bool { .unwrap_or(false) } +<<<<<<< Updated upstream fn package_json_version(path: impl AsRef) -> Option { let raw = fs::read_to_string(path).ok()?; let parsed = serde_json::from_str::(&raw).ok()?; +======= +fn read_pi_version_from(package_json: &str) -> Option { + let raw = fs::read_to_string(package_json).ok()?; + let parsed: serde_json::Value = serde_json::from_str(&raw).ok()?; +>>>>>>> Stashed changes parsed .get("version") .and_then(|value| value.as_str()) .map(|value| value.to_string()) } +<<<<<<< Updated upstream fn pi_package_version_from_bin(candidate: &str) -> Option { let canonical = fs::canonicalize(candidate).ok()?; for dir in canonical.ancestors() { @@ -122,6 +129,8 @@ fn pi_package_version_from_bin(candidate: &str) -> Option { None } +======= +>>>>>>> Stashed changes fn detect_pi_version() -> Option { if let Ok(pi_bin) = env::var("PI_BIN") { if let Some(version) = @@ -132,17 +141,32 @@ fn detect_pi_version() -> Option { } if let Ok(home) = env::var("HOME") { + // Explicit npm-global layout (FreeBSD / user installs). let pi_bin = format!("{home}/.npm-global/bin/pi"); if let Some(version) = command_output(&pi_bin, &["--version"]).or_else(|| pi_package_version_from_bin(&pi_bin)) { return Some(version); } - - let package_json = format!( + if let Some(version) = read_pi_version_from(&format!( "{home}/.npm-global/lib/node_modules/@earendil-works/pi-coding-agent/package.json" +<<<<<<< Updated upstream ); if let Some(version) = package_json_version(package_json) { +======= + )) { + return Some(version); + } + } + + // Active-node global install (nvm on Linux, pkg node on FreeBSD): resolve + // the global node_modules with `npm root -g` and read pi's package.json. + // `pi --version` is unreliable (no stable stdout), so prefer the manifest. + if let Some(root) = command_output("npm", &["root", "-g"]) { + if let Some(version) = read_pi_version_from(&format!( + "{root}/@earendil-works/pi-coding-agent/package.json" + )) { +>>>>>>> Stashed changes return Some(version); } }