import type { OutputRuntimeEnv, RuntimeEnv } from "openclaw/plugin-sdk/runtime"; import { vi } from "vitest"; type RuntimeEnvOptions = { throwOnExit?: boolean; }; export function createRuntimeEnv(options?: RuntimeEnvOptions): OutputRuntimeEnv { const throwOnExit = options?.throwOnExit ?? true; return { log: vi.fn(), error: vi.fn(), writeStdout: vi.fn(), writeJson: vi.fn(), exit: throwOnExit ? vi.fn((code: number): never => { throw new Error(`exit ${code}`); }) : vi.fn(), }; } export function createTypedRuntimeEnv( options?: RuntimeEnvOptions, _runtimeShape?: (runtime: TRuntime) => void, ): TRuntime { return createRuntimeEnv(options) as unknown as TRuntime; } export function createNonExitingRuntimeEnv(): OutputRuntimeEnv { return createRuntimeEnv({ throwOnExit: false }); } export function createNonExitingTypedRuntimeEnv( runtimeShape?: (runtime: TRuntime) => void, ): TRuntime { return createTypedRuntimeEnv({ throwOnExit: false }, runtimeShape); }