test: share gateway live env helpers

This commit is contained in:
Peter Steinberger
2026-04-23 18:40:55 +01:00
parent 9d8690d6b3
commit bd2553e126
3 changed files with 43 additions and 102 deletions

View File

@@ -25,6 +25,7 @@ import {
runOpenClawCliJson,
type CronListJob,
} from "./live-agent-probes.js";
import { restoreLiveEnv, snapshotLiveEnv, type LiveEnvSnapshot } from "./live-env-test-helpers.js";
import { renderCatFacePngBase64 } from "./live-image-probe.js";
const LIVE = isLiveTestEnabled();
@@ -65,20 +66,6 @@ type CapturedAgentEvent = {
sessionKey?: string;
};
type EnvSnapshot = {
agentRuntime?: string;
configPath?: string;
gatewayToken?: string;
openaiApiKey?: string;
openaiBaseUrl?: string;
skipBrowserControl?: string;
skipCanvas?: string;
skipChannels?: string;
skipCron?: string;
skipGmail?: string;
stateDir?: string;
};
function resolveLiveTimeoutMs(raw: string | undefined, fallback: number): number {
const parsed = raw ? Number(raw) : Number.NaN;
return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;
@@ -109,42 +96,12 @@ async function subscribeCodexLiveDebugEvents(sessionKey: string): Promise<() =>
});
}
function snapshotEnv(): EnvSnapshot {
return {
agentRuntime: process.env.OPENCLAW_AGENT_RUNTIME,
configPath: process.env.OPENCLAW_CONFIG_PATH,
gatewayToken: process.env.OPENCLAW_GATEWAY_TOKEN,
openaiApiKey: process.env.OPENAI_API_KEY,
openaiBaseUrl: process.env.OPENAI_BASE_URL,
skipBrowserControl: process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER,
skipCanvas: process.env.OPENCLAW_SKIP_CANVAS_HOST,
skipChannels: process.env.OPENCLAW_SKIP_CHANNELS,
skipCron: process.env.OPENCLAW_SKIP_CRON,
skipGmail: process.env.OPENCLAW_SKIP_GMAIL_WATCHER,
stateDir: process.env.OPENCLAW_STATE_DIR,
};
function snapshotEnv(): LiveEnvSnapshot {
return snapshotLiveEnv();
}
function restoreEnv(snapshot: EnvSnapshot): void {
restoreEnvVar("OPENCLAW_AGENT_RUNTIME", snapshot.agentRuntime);
restoreEnvVar("OPENCLAW_CONFIG_PATH", snapshot.configPath);
restoreEnvVar("OPENCLAW_GATEWAY_TOKEN", snapshot.gatewayToken);
restoreEnvVar("OPENAI_API_KEY", snapshot.openaiApiKey);
restoreEnvVar("OPENAI_BASE_URL", snapshot.openaiBaseUrl);
restoreEnvVar("OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", snapshot.skipBrowserControl);
restoreEnvVar("OPENCLAW_SKIP_CANVAS_HOST", snapshot.skipCanvas);
restoreEnvVar("OPENCLAW_SKIP_CHANNELS", snapshot.skipChannels);
restoreEnvVar("OPENCLAW_SKIP_CRON", snapshot.skipCron);
restoreEnvVar("OPENCLAW_SKIP_GMAIL_WATCHER", snapshot.skipGmail);
restoreEnvVar("OPENCLAW_STATE_DIR", snapshot.stateDir);
}
function restoreEnvVar(name: string, value: string | undefined): void {
if (value === undefined) {
delete process.env[name];
return;
}
process.env[name] = value;
function restoreEnv(snapshot: LiveEnvSnapshot): void {
restoreLiveEnv(snapshot);
}
async function getFreeGatewayPort(): Promise<number> {

View File

@@ -12,6 +12,7 @@ import {
ensurePairedTestGatewayClientIdentity,
getFreeGatewayPort,
} from "./gateway-cli-backend.live-helpers.js";
import { restoreLiveEnv, snapshotLiveEnv, type LiveEnvSnapshot } from "./live-env-test-helpers.js";
import { extractPayloadText } from "./test-helpers.agent-results.js";
const LIVE = isLiveTestEnabled();
@@ -23,22 +24,6 @@ const GATEWAY_CONNECT_TIMEOUT_MS = 60_000;
const AGENT_REQUEST_TIMEOUT_MS = 180_000;
const DEFAULT_CODEX_MODEL = "codex/gpt-5.4";
type EnvSnapshot = {
agentRuntime?: string;
configPath?: string;
gatewayToken?: string;
openaiApiKey?: string;
openaiBaseUrl?: string;
skipBrowserControl?: string;
skipCanvas?: string;
skipChannels?: string;
skipCron?: string;
skipGmail?: string;
stateDir?: string;
trajectory?: string;
trajectoryDir?: string;
};
function logLiveStep(step: string, details?: Record<string, unknown>): void {
if (!CODEX_HARNESS_DEBUG) {
return;
@@ -47,46 +32,12 @@ function logLiveStep(step: string, details?: Record<string, unknown>): void {
console.error(`[gateway-trajectory-live] ${step}${suffix}`);
}
function snapshotEnv(): EnvSnapshot {
return {
agentRuntime: process.env.OPENCLAW_AGENT_RUNTIME,
configPath: process.env.OPENCLAW_CONFIG_PATH,
gatewayToken: process.env.OPENCLAW_GATEWAY_TOKEN,
openaiApiKey: process.env.OPENAI_API_KEY,
openaiBaseUrl: process.env.OPENAI_BASE_URL,
skipBrowserControl: process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER,
skipCanvas: process.env.OPENCLAW_SKIP_CANVAS_HOST,
skipChannels: process.env.OPENCLAW_SKIP_CHANNELS,
skipCron: process.env.OPENCLAW_SKIP_CRON,
skipGmail: process.env.OPENCLAW_SKIP_GMAIL_WATCHER,
stateDir: process.env.OPENCLAW_STATE_DIR,
trajectory: process.env.OPENCLAW_TRAJECTORY,
trajectoryDir: process.env.OPENCLAW_TRAJECTORY_DIR,
};
function snapshotEnv(): LiveEnvSnapshot {
return snapshotLiveEnv(["OPENCLAW_TRAJECTORY", "OPENCLAW_TRAJECTORY_DIR"]);
}
function restoreEnv(snapshot: EnvSnapshot): void {
restoreEnvVar("OPENCLAW_AGENT_RUNTIME", snapshot.agentRuntime);
restoreEnvVar("OPENCLAW_CONFIG_PATH", snapshot.configPath);
restoreEnvVar("OPENCLAW_GATEWAY_TOKEN", snapshot.gatewayToken);
restoreEnvVar("OPENAI_API_KEY", snapshot.openaiApiKey);
restoreEnvVar("OPENAI_BASE_URL", snapshot.openaiBaseUrl);
restoreEnvVar("OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", snapshot.skipBrowserControl);
restoreEnvVar("OPENCLAW_SKIP_CANVAS_HOST", snapshot.skipCanvas);
restoreEnvVar("OPENCLAW_SKIP_CHANNELS", snapshot.skipChannels);
restoreEnvVar("OPENCLAW_SKIP_CRON", snapshot.skipCron);
restoreEnvVar("OPENCLAW_SKIP_GMAIL_WATCHER", snapshot.skipGmail);
restoreEnvVar("OPENCLAW_STATE_DIR", snapshot.stateDir);
restoreEnvVar("OPENCLAW_TRAJECTORY", snapshot.trajectory);
restoreEnvVar("OPENCLAW_TRAJECTORY_DIR", snapshot.trajectoryDir);
}
function restoreEnvVar(name: string, value: string | undefined): void {
if (value === undefined) {
delete process.env[name];
return;
}
process.env[name] = value;
function restoreEnv(snapshot: LiveEnvSnapshot): void {
restoreLiveEnv(snapshot);
}
async function writeLiveGatewayConfig(params: {

View File

@@ -0,0 +1,33 @@
const COMMON_LIVE_ENV_NAMES = [
"OPENCLAW_AGENT_RUNTIME",
"OPENCLAW_CONFIG_PATH",
"OPENCLAW_GATEWAY_TOKEN",
"OPENAI_API_KEY",
"OPENAI_BASE_URL",
"OPENCLAW_SKIP_BROWSER_CONTROL_SERVER",
"OPENCLAW_SKIP_CANVAS_HOST",
"OPENCLAW_SKIP_CHANNELS",
"OPENCLAW_SKIP_CRON",
"OPENCLAW_SKIP_GMAIL_WATCHER",
"OPENCLAW_STATE_DIR",
] as const;
export type LiveEnvSnapshot = Record<string, string | undefined>;
export function snapshotLiveEnv(extraNames: readonly string[] = []): LiveEnvSnapshot {
const snapshot: LiveEnvSnapshot = {};
for (const name of [...COMMON_LIVE_ENV_NAMES, ...extraNames]) {
snapshot[name] = process.env[name];
}
return snapshot;
}
export function restoreLiveEnv(snapshot: LiveEnvSnapshot): void {
for (const [name, value] of Object.entries(snapshot)) {
if (value === undefined) {
delete process.env[name];
} else {
process.env[name] = value;
}
}
}