openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
49 lines (48 loc) • 1.94 kB
JavaScript
import { t as GATEWAY_LAUNCH_AGENT_LABEL, u as resolveGatewayLaunchAgentLabel } from "./constants-e049XCW0.js";
//#region src/infra/supervisor-markers.ts
const SUPERVISOR_HINTS = {
launchd: ["OPENCLAW_LAUNCHD_LABEL"],
systemd: [
"OPENCLAW_SYSTEMD_UNIT",
"INVOCATION_ID",
"SYSTEMD_EXEC_PID",
"JOURNAL_STREAM"
],
schtasks: ["OPENCLAW_WINDOWS_TASK_NAME"]
};
/** Environment keys that imply the gateway process is supervised by an external respawner. */
const SUPERVISOR_HINT_ENV_VARS = [
"LAUNCH_JOB_LABEL",
"LAUNCH_JOB_NAME",
"XPC_SERVICE_NAME",
...SUPERVISOR_HINTS.launchd,
...SUPERVISOR_HINTS.systemd,
...SUPERVISOR_HINTS.schtasks,
"OPENCLAW_SERVICE_MARKER",
"OPENCLAW_SERVICE_KIND"
];
function hasAnyHint(env, keys) {
return keys.some((key) => {
const value = env[key];
return typeof value === "string" && value.trim().length > 0;
});
}
function isCurrentGatewayLaunchdJob(env) {
const expectedLabel = resolveGatewayLaunchAgentLabel(env.OPENCLAW_PROFILE);
if ([env.LAUNCH_JOB_LABEL, env.LAUNCH_JOB_NAME].some((value) => value?.trim() === expectedLabel)) return true;
return env.XPC_SERVICE_NAME?.trim() === GATEWAY_LAUNCH_AGENT_LABEL;
}
/** Detects the current platform supervisor from process environment hints. */
function detectRespawnSupervisor(env = process.env, platform = process.platform) {
if (platform === "darwin") return hasAnyHint(env, SUPERVISOR_HINTS.launchd) || isCurrentGatewayLaunchdJob(env) ? "launchd" : null;
if (platform === "linux") return hasAnyHint(env, SUPERVISOR_HINTS.systemd) ? "systemd" : null;
if (platform === "win32") {
if (hasAnyHint(env, SUPERVISOR_HINTS.schtasks)) return "schtasks";
const marker = env.OPENCLAW_SERVICE_MARKER?.trim();
const serviceKind = env.OPENCLAW_SERVICE_KIND?.trim();
return marker && serviceKind === "gateway" ? "schtasks" : null;
}
return null;
}
//#endregion
export { detectRespawnSupervisor as n, SUPERVISOR_HINT_ENV_VARS as t };