5b8deef2f9
Bun compiled binaries have an empty process.env when running inside sandbox environments (e.g. nono on Linux/macOS). This broke API key detection and model discovery because all process.env.* lookups returned undefined. - Add restoreSandboxEnv() helper that reads /proc/self/environ when Bun is detected and process.env is empty, populating process.env before any other code runs (coding-agent/src/bun/cli.ts entry point) - Add getProcEnv() fallback in env-api-keys.ts for direct @mariozechner/pi-ai consumers that may not go through the coding-agent entry point - Add unit tests for restoreSandboxEnv
33 lines
936 B
TypeScript
33 lines
936 B
TypeScript
/**
|
|
* Workaround for https://github.com/oven-sh/bun/issues/27802
|
|
*
|
|
* Bun compiled binaries have an empty `process.env` when running inside
|
|
* sandbox environments (e.g. nono on Linux/macOS). On Linux we can recover
|
|
* the environment from `/proc/self/environ`.
|
|
*/
|
|
|
|
import { readFileSync } from "node:fs";
|
|
|
|
/**
|
|
* Restore environment variables from `/proc/self/environ` when running
|
|
* inside a sandbox where Bun's `process.env` is empty.
|
|
*/
|
|
export function restoreSandboxEnv(): void {
|
|
if (!process.versions?.bun) return;
|
|
|
|
// If process.env already has entries, nothing to fix.
|
|
if (Object.keys(process.env).length > 0) return;
|
|
|
|
try {
|
|
const data = readFileSync("/proc/self/environ", "utf-8");
|
|
for (const entry of data.split("\0")) {
|
|
const idx = entry.indexOf("=");
|
|
if (idx > 0) {
|
|
process.env[entry.slice(0, idx)] = entry.slice(idx + 1);
|
|
}
|
|
}
|
|
} catch {
|
|
// /proc/self/environ may not be readable; ignore.
|
|
}
|
|
}
|