mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-11 17:21:13 +00:00
81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import { format } from "node:util";
|
|
import type { OutputRuntimeEnv, RuntimeEnv } from "../runtime.js";
|
|
|
|
/** Minimal logger contract accepted by runtime-adapter helpers. */
|
|
type LoggerLike = {
|
|
info: (message: string) => void;
|
|
error: (message: string) => void;
|
|
};
|
|
|
|
/** Adapt a simple logger into the RuntimeEnv contract used by shared plugin SDK helpers. */
|
|
export function createLoggerBackedRuntime(params: {
|
|
logger: LoggerLike;
|
|
exitError?: (code: number) => Error;
|
|
}): OutputRuntimeEnv {
|
|
return {
|
|
log: (...args) => {
|
|
params.logger.info(format(...args));
|
|
},
|
|
error: (...args) => {
|
|
params.logger.error(format(...args));
|
|
},
|
|
writeStdout: (value) => {
|
|
params.logger.info(value);
|
|
},
|
|
writeJson: (value, space = 2) => {
|
|
params.logger.info(JSON.stringify(value, null, space > 0 ? space : undefined));
|
|
},
|
|
exit: (code: number): never => {
|
|
throw params.exitError?.(code) ?? new Error(`exit ${code}`);
|
|
},
|
|
};
|
|
}
|
|
|
|
/** Reuse an existing runtime when present, otherwise synthesize one from the provided logger. */
|
|
export function resolveRuntimeEnv(params: {
|
|
runtime: RuntimeEnv;
|
|
logger: LoggerLike;
|
|
exitError?: (code: number) => Error;
|
|
}): RuntimeEnv;
|
|
export function resolveRuntimeEnv(params: {
|
|
runtime?: undefined;
|
|
logger: LoggerLike;
|
|
exitError?: (code: number) => Error;
|
|
}): OutputRuntimeEnv;
|
|
export function resolveRuntimeEnv(params: {
|
|
runtime?: RuntimeEnv;
|
|
logger: LoggerLike;
|
|
exitError?: (code: number) => Error;
|
|
}): RuntimeEnv | OutputRuntimeEnv {
|
|
return params.runtime ?? createLoggerBackedRuntime(params);
|
|
}
|
|
|
|
/** Resolve a runtime that treats exit requests as unsupported errors instead of process termination. */
|
|
export function resolveRuntimeEnvWithUnavailableExit(params: {
|
|
runtime: RuntimeEnv;
|
|
logger: LoggerLike;
|
|
unavailableMessage?: string;
|
|
}): RuntimeEnv;
|
|
export function resolveRuntimeEnvWithUnavailableExit(params: {
|
|
runtime?: undefined;
|
|
logger: LoggerLike;
|
|
unavailableMessage?: string;
|
|
}): OutputRuntimeEnv;
|
|
export function resolveRuntimeEnvWithUnavailableExit(params: {
|
|
runtime?: RuntimeEnv;
|
|
logger: LoggerLike;
|
|
unavailableMessage?: string;
|
|
}): RuntimeEnv | OutputRuntimeEnv {
|
|
if (params.runtime) {
|
|
return resolveRuntimeEnv({
|
|
runtime: params.runtime,
|
|
logger: params.logger,
|
|
exitError: () => new Error(params.unavailableMessage ?? "Runtime exit not available"),
|
|
});
|
|
}
|
|
return resolveRuntimeEnv({
|
|
logger: params.logger,
|
|
exitError: () => new Error(params.unavailableMessage ?? "Runtime exit not available"),
|
|
});
|
|
}
|