From 7194f23f88104bde31af0339fc829c9397f00cfc Mon Sep 17 00:00:00 2001 From: Robert Rittich Date: Mon, 6 Jul 2026 14:56:44 -0400 Subject: [PATCH] Fix: DeployComponents leaves __BUN_PATH__ unsubstituted in pulse plist The pulse component materializes com.lifeos.pulse.plist but only replaces __HOME__, leaving __BUN_PATH__ literal. launchd then tries to exec a program named '__BUN_PATH__' and the service dies with EX_CONFIG (78) / healthz 000, even though 'bun run pulse.ts' works directly. Substitute __BUN_PATH__ with process.execPath so the managed service actually starts. --- LifeOS/Tools/DeployComponents.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/LifeOS/Tools/DeployComponents.ts b/LifeOS/Tools/DeployComponents.ts index e7fcb178f..effb12382 100755 --- a/LifeOS/Tools/DeployComponents.ts +++ b/LifeOS/Tools/DeployComponents.ts @@ -156,7 +156,9 @@ function deployPulse(ctx: Ctx): ComponentResult { ensurePresent("PULSE", ctx); const plistSrc = join(pulseDir, "com.lifeos.pulse.plist"); if (!existsSync(plistSrc)) throw new Error(`plist template missing at ${plistSrc}`); - const materialized = readFileSync(plistSrc, "utf-8").replaceAll("__HOME__", ctx.home); + const materialized = readFileSync(plistSrc, "utf-8") + .replaceAll("__HOME__", ctx.home) + .replaceAll("__BUN_PATH__", process.execPath); const u = uid(); const sameOnDisk = existsSync(plistDst) && readFileSync(plistDst, "utf-8") === materialized; const alreadyLoaded = launchctl(["print", `gui/${u}/com.lifeos.pulse`]).ok;