
























@@ -87,6 +87,7 @@ const RELEASE_UPGRADE_USER_JOURNEY_SCENARIO_PATH =
8787"scripts/e2e/lib/release-upgrade-user-journey/scenario.sh";
8888const RELEASE_TYPED_ONBOARDING_SCENARIO_PATH =
8989"scripts/e2e/lib/release-typed-onboarding/scenario.sh";
90+const RELEASE_USER_JOURNEY_DOCKER_E2E_PATH = "scripts/e2e/release-user-journey-docker.sh";
9091const RELEASE_USER_JOURNEY_SCENARIO_PATH = "scripts/e2e/lib/release-user-journey/scenario.sh";
9192const UPGRADE_SURVIVOR_RUN_SCRIPT = "scripts/e2e/lib/upgrade-survivor/run.sh";
9293const UPGRADE_SURVIVOR_UPDATE_RESTART_AUTH_PATH =
@@ -2600,6 +2601,95 @@ grep -Fxq preserved "$TMPDIR/caller-fd"
26002601expect(runner).not.toContain("cat /tmp/openclaw-codex-agent-after-uninstall.err");
26012602});
260226032604+it.each([
2605+[
2606+"Codex npm plugin live",
2607+CODEX_NPM_PLUGIN_LIVE_DOCKER_E2E_PATH,
2608+"OPENCLAW_CODEX_NPM_PLUGIN_ASSERT_MAX_TEXT_FILE_BYTES",
2609+"64kb",
2610+],
2611+[
2612+"npm onboard channel-agent",
2613+NPM_ONBOARD_CHANNEL_AGENT_DOCKER_E2E_PATH,
2614+"OPENCLAW_NPM_ONBOARD_JSON_ARTIFACT_MAX_BYTES",
2615+"64kb",
2616+],
2617+[
2618+"plugins",
2619+PLUGINS_DOCKER_E2E_PATH,
2620+"OPENCLAW_PLUGINS_E2E_CLAWHUB_PREFLIGHT_TIMEOUT_MS",
2621+"soon",
2622+],
2623+[
2624+"release user journey",
2625+RELEASE_USER_JOURNEY_DOCKER_E2E_PATH,
2626+"OPENCLAW_RELEASE_USER_JOURNEY_HTTP_BODY_MAX_BYTES",
2627+"64kb",
2628+],
2629+])(
2630+"rejects invalid package assertion env before Docker setup for %s",
2631+(_label, path, envName, value) => {
2632+const result = spawnSync("bash", [path], {
2633+encoding: "utf8",
2634+env: {
2635+ ...process.env,
2636+OPENCLAW_SKIP_DOCKER_BUILD: "1",
2637+[envName]: value,
2638+},
2639+});
2640+2641+expect(result.status).toBe(2);
2642+expect(result.stderr).toContain(`invalid ${envName}: ${value}`);
2643+expect(result.stderr).not.toContain("Docker image not found");
2644+},
2645+);
2646+2647+it("forwards package assertion env limits into Docker runners", () => {
2648+const expectations = [
2649+[
2650+CODEX_NPM_PLUGIN_LIVE_DOCKER_E2E_PATH,
2651+[
2652+["OPENCLAW_CODEX_NPM_PLUGIN_ASSERT_MAX_TEXT_FILE_BYTES", "1048576"],
2653+["OPENCLAW_CODEX_NPM_PLUGIN_ASSERT_MAX_ERROR_TAIL_BYTES", "65536"],
2654+["OPENCLAW_CODEX_NPM_PLUGIN_ASSERT_MAX_TRANSCRIPT_FILES", "64"],
2655+["OPENCLAW_CODEX_NPM_PLUGIN_ASSERT_MAX_TRANSCRIPT_WALK_ENTRIES", "4096"],
2656+["OPENCLAW_CODEX_NPM_PLUGIN_ASSERT_MAX_TRANSCRIPT_SCAN_BYTES", "2097152"],
2657+],
2658+],
2659+[
2660+NPM_ONBOARD_CHANNEL_AGENT_DOCKER_E2E_PATH,
2661+[
2662+["OPENCLAW_NPM_ONBOARD_JSON_ARTIFACT_MAX_BYTES", "1048576"],
2663+["OPENCLAW_NPM_ONBOARD_STATUS_TEXT_MAX_BYTES", "1048576"],
2664+],
2665+],
2666+[
2667+PLUGINS_DOCKER_E2E_PATH,
2668+[
2669+["OPENCLAW_PLUGINS_E2E_CLAWHUB_PREFLIGHT_BODY_MAX_BYTES", "1048576"],
2670+["OPENCLAW_PLUGINS_E2E_CLAWHUB_PREFLIGHT_TIMEOUT_MS", "30000"],
2671+],
2672+],
2673+[
2674+RELEASE_USER_JOURNEY_DOCKER_E2E_PATH,
2675+[
2676+["OPENCLAW_RELEASE_USER_JOURNEY_HTTP_TIMEOUT_MS", "5000"],
2677+["OPENCLAW_RELEASE_USER_JOURNEY_HTTP_BODY_MAX_BYTES", "1048576"],
2678+],
2679+],
2680+] as const;
2681+2682+for (const [path, envs] of expectations) {
2683+const runner = readFileSync(path, "utf8");
2684+for (const [envName, fallback] of envs) {
2685+expect(runner, `${path} reads ${envName}`).toContain(
2686+`docker_e2e_read_positive_int_env ${envName} ${fallback}`,
2687+);
2688+expect(runner, `${path} forwards ${envName}`).toContain(`-e "${envName}=`);
2689+}
2690+}
2691+});
2692+26032693it("cleans package-backed onboarding and plugin Docker artifacts on every exit path", () => {
26042694for (const path of [
26052695CODEX_ON_DEMAND_DOCKER_E2E_PATH,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。