





















@@ -34,6 +34,7 @@ const runCrestodianMock = vi.hoisted(() =>
3434const commanderParseAsyncMock = vi.hoisted(() => vi.fn(async () => {}));
3535const addGatewayRunCommandMock = vi.hoisted(() => vi.fn((command: unknown) => command));
3636const emitCliBannerMock = vi.hoisted(() => vi.fn());
37+const enableConsoleCaptureMock = vi.hoisted(() => vi.fn());
3738const progressDoneMock = vi.hoisted(() => vi.fn());
3839const createCliProgressMock = vi.hoisted(() =>
3940vi.fn(() => ({
@@ -95,6 +96,11 @@ vi.mock("./banner.js", () => ({
9596emitCliBanner: emitCliBannerMock,
9697}));
979899+vi.mock("../logging.js", async () => ({
100+ ...(await vi.importActual<typeof import("../logging.js")>("../logging.js")),
101+enableConsoleCapture: enableConsoleCaptureMock,
102+}));
103+98104vi.mock("./container-target.js", () => ({
99105maybeRunCliInContainer: maybeRunCliInContainerMock,
100106parseCliContainerArgs: (argv: string[]) => ({ ok: true, container: null, argv }),
@@ -325,6 +331,17 @@ describe("runCli exit behavior", () => {
325331]);
326332});
327333334+it("installs console capture before parsing the gateway foreground fast path", async () => {
335+await runCli(["node", "openclaw", "gateway", "--force"]);
336+337+expect(enableConsoleCaptureMock).toHaveBeenCalledTimes(1);
338+expect(commanderParseAsyncMock).toHaveBeenCalledTimes(1);
339+const captureOrder = enableConsoleCaptureMock.mock.invocationCallOrder[0] ?? 0;
340+const parseOrder = commanderParseAsyncMock.mock.invocationCallOrder[0] ?? 0;
341+expect(captureOrder).toBeGreaterThan(0);
342+expect(parseOrder).toBeGreaterThan(captureOrder);
343+});
344+328345it("honors banner suppression on the gateway foreground fast path", async () => {
329346process.env.OPENCLAW_HIDE_BANNER = "1";
330347此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。