Files
openclaw/src/commands/status.service-summary.ts
2026-03-07 17:46:24 -08:00

53 lines
1.5 KiB
TypeScript

import type { GatewayServiceRuntime } from "../daemon/service-runtime.js";
import type { GatewayService } from "../daemon/service.js";
export type ServiceStatusSummary = {
label: string;
installed: boolean | null;
loaded: boolean;
managedByOpenClaw: boolean;
externallyManaged: boolean;
loadedText: string;
runtime: GatewayServiceRuntime | undefined;
};
export async function readServiceStatusSummary(
service: GatewayService,
fallbackLabel: string,
): Promise<ServiceStatusSummary> {
try {
const [loaded, runtime, command] = await Promise.all([
service.isLoaded({ env: process.env }).catch(() => false),
service.readRuntime(process.env).catch(() => undefined),
service.readCommand(process.env).catch(() => null),
]);
const managedByOpenClaw = command != null;
const externallyManaged = !managedByOpenClaw && runtime?.status === "running";
const installed = managedByOpenClaw || externallyManaged;
const loadedText = externallyManaged
? "running (externally managed)"
: loaded
? service.loadedText
: service.notLoadedText;
return {
label: service.label,
installed,
loaded,
managedByOpenClaw,
externallyManaged,
loadedText,
runtime,
};
} catch {
return {
label: fallbackLabel,
installed: null,
loaded: false,
managedByOpenClaw: false,
externallyManaged: false,
loadedText: "unknown",
runtime: undefined,
};
}
}