// Env-configured bin roots (override defaults when present). // Note: FNM_DIR on macOS defaults to ~/Library/Application Support/fnm // Note: PNPM_HOME on macOS defaults to ~/Library/pnpm
addCommonEnvConfiguredBinDirs(dirs, env); // nvm: no stable default path, relies on env or user's shell config // User must set NVM_DIR and source nvm.sh for it to work
addNonEmptyDir(dirs, env?.NVM_DIR); // fnm: use aliases/default (not current)
addNonEmptyDir(dirs, appendSubdir(env?.FNM_DIR, "aliases/default/bin")); // pnpm: binary is directly in PNPM_HOME (not in bin subdirectory)
// Common user bin directories
addCommonUserBinDirs(dirs, home);
// Nix Home Manager (cross-platform)
addNixProfileBinDirs(dirs, home, env);
// Node version managers - macOS specific paths // nvm: no stable default path, depends on user's shell configuration // fnm: macOS default is ~/Library/Application Support/fnm, not ~/.fnm
dirs.push(`${home}/Library/Application Support/fnm/aliases/default/bin`); // fnm default
dirs.push(`${home}/.fnm/aliases/default/bin`); // fnm if customized to ~/.fnm // pnpm: macOS default is ~/Library/pnpm, not ~/.local/share/pnpm
dirs.push(`${home}/Library/pnpm`); // pnpm default
dirs.push(`${home}/.local/share/pnpm`); // pnpm XDG fallback
// Env-configured bin roots (override defaults when present).
addCommonEnvConfiguredBinDirs(dirs, env);
addNonEmptyDir(dirs, appendSubdir(env?.NVM_DIR, "current/bin"));
addNonEmptyDir(dirs, appendSubdir(env?.FNM_DIR, "current/bin"));
// Common user bin directories
addCommonUserBinDirs(dirs, home);
// Nix Home Manager (cross-platform)
addNixProfileBinDirs(dirs, home, env);
// Node version managers
dirs.push(`${home}/.nvm/current/bin`); // nvm with current symlink
dirs.push(`${home}/.fnm/current/bin`); // fnm
dirs.push(`${home}/.local/share/pnpm`); // pnpm global bin
// Add user bin directories for version managers (npm global, nvm, fnm, volta, etc.) const userDirs =
platform === "linux"
? resolveLinuxUserBinDirs(options.home, options.env)
: platform === "darwin"
? resolveDarwinUserBinDirs(options.home, options.env)
: [];
const add = (dir: string) => { if (!dir) { return;
} if (!parts.includes(dir)) {
parts.push(dir);
}
};
for (const dir of extraDirs) {
add(dir);
} // User dirs first so user-installed binaries take precedence for (const dir of userDirs) {
add(dir);
} for (const dir of systemDirs) {
add(dir);
}
function resolveSharedServiceEnvironmentFields(
env: Record<string, string | undefined>,
platform: NodeJS.Platform,
extraPathDirs: string[] | undefined,
execPath?: string,
): SharedServiceEnvironmentFields { const stateDir = env.OPENCLAW_STATE_DIR; const configPath = env.OPENCLAW_CONFIG_PATH; // Keep a usable temp directory for supervised services even when the host env omits TMPDIR. const tmpDir = env.TMPDIR?.trim() || os.tmpdir(); const proxyEnv = readServiceProxyEnvironment(env); // On macOS, launchd services don't inherit the shell environment, so Node's undici/fetch // cannot locate the system CA bundle. Default to /etc/ssl/cert.pem so TLS verification // works correctly when running as a LaunchAgent without extra user configuration. // On Linux, nvm-installed Node may need the host CA bundle injected before startup. const startupTlsEnv = resolveNodeStartupTlsEnvironment({
env,
platform,
execPath,
}); return {
stateDir,
configPath,
tmpDir, // On Windows, Scheduled Tasks should inherit the current task PATH instead of // freezing the install-time snapshot into gateway.cmd/node-host.cmd.
minimalPath:
platform === "win32"
? undefined
: buildMinimalServicePath({ env, platform, extraDirs: extraPathDirs }),
proxyEnv,
nodeCaCerts: startupTlsEnv.NODE_EXTRA_CA_CERTS,
nodeUseSystemCa: startupTlsEnv.NODE_USE_SYSTEM_CA,
};
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-09)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.