From 359deb6c2385df742d874252930846feba9dc3a6 Mon Sep 17 00:00:00 2001 From: Jeremy McSpadden Date: Mon, 16 Mar 2026 18:54:30 -0500 Subject: [PATCH] fix(forensics): use GSD_VERSION env var instead of package.json path traversal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extensions run from ~/.gsd/agent/extensions/gsd/ at runtime, not from the package install directory. The previous code traversed 4 levels up from import.meta.url to find package.json, which resolves to ~/package.json at runtime — wrong on every system. The loader already sets process.env.GSD_VERSION at startup, which is how every other extension reads the version. Use that instead. --- src/resources/extensions/gsd/forensics.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/resources/extensions/gsd/forensics.ts b/src/resources/extensions/gsd/forensics.ts index df518bb13..adabdbb88 100644 --- a/src/resources/extensions/gsd/forensics.ts +++ b/src/resources/extensions/gsd/forensics.ts @@ -178,14 +178,10 @@ async function buildForensicReport(basePath: string): Promise { } } - // 8. GSD version - let gsdVersion = "unknown"; - try { - const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "../../../../package.json"); - if (existsSync(pkgPath)) { - gsdVersion = JSON.parse(readFileSync(pkgPath, "utf-8")).version ?? "unknown"; - } - } catch { /* non-fatal */ } + // 8. GSD version — use GSD_VERSION env var set by the loader at startup. + // Extensions run from ~/.gsd/agent/extensions/gsd/ at runtime, so path-traversal + // from import.meta.url would resolve to ~/package.json (wrong on every system). + const gsdVersion = process.env.GSD_VERSION || "unknown"; // 9. Run anomaly detectors if (metrics?.units) detectStuckLoops(metrics.units, anomalies);