
























@@ -21,8 +21,12 @@ const OPENWEBUI_DOCKER_E2E_PATH = "scripts/e2e/openwebui-docker.sh";
2121const ONBOARD_DOCKER_E2E_PATH = "scripts/e2e/onboard-docker.sh";
2222const KITCHEN_SINK_PLUGIN_DOCKER_E2E_PATH = "scripts/e2e/kitchen-sink-plugin-docker.sh";
2323const KITCHEN_SINK_RPC_DOCKER_E2E_PATH = "scripts/e2e/kitchen-sink-rpc-docker.sh";
24+const CODEX_ON_DEMAND_DOCKER_E2E_PATH = "scripts/e2e/codex-on-demand-docker.sh";
2425const CODEX_NPM_PLUGIN_LIVE_DOCKER_E2E_PATH =
2526"scripts/e2e/codex-npm-plugin-live-docker.sh";
27+const LIVE_PLUGIN_TOOL_DOCKER_E2E_PATH = "scripts/e2e/live-plugin-tool-docker.sh";
28+const NPM_ONBOARD_CHANNEL_AGENT_DOCKER_E2E_PATH =
29+"scripts/e2e/npm-onboard-channel-agent-docker.sh";
2630const SKILL_INSTALL_DOCKER_E2E_PATH = "scripts/e2e/skill-install-docker.sh";
2731const PLUGIN_BINDING_COMMAND_ESCAPE_DOCKER_E2E_PATH =
2832"scripts/e2e/plugin-binding-command-escape-docker.sh";
@@ -411,6 +415,23 @@ test -f "$TMPDIR/docker-cmd-seen"
411415expect(runner).not.toContain('rm -f "$run_log"\n exit 1');
412416});
413417418+it("cleans package-backed onboarding and plugin Docker artifacts on every exit path", () => {
419+for (const path of [
420+CODEX_ON_DEMAND_DOCKER_E2E_PATH,
421+LIVE_PLUGIN_TOOL_DOCKER_E2E_PATH,
422+NPM_ONBOARD_CHANNEL_AGENT_DOCKER_E2E_PATH,
423+]) {
424+const runner = readFileSync(path, "utf8");
425+426+expect(runner, path).toContain('run_log=""');
427+expect(runner, path).toMatch(
428+/cleanup\(\) \{[\s\S]*docker_e2e_cleanup_package_tgz "\$PACKAGE_TGZ"[\s\S]*rm -f "\$run_log"/u,
429+);
430+expect(runner, path).toContain("trap cleanup EXIT");
431+expect(runner, path).not.toContain('rm -f "$run_log"\n exit 1');
432+}
433+});
434+414435it("runs skill install through the package-cleaning Docker harness", () => {
415436const runner = readFileSync(SKILL_INSTALL_DOCKER_E2E_PATH, "utf8");
416437此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。