From 3bf92944b2d3a3c433f7f3917ee188406384edad Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 5 Apr 2026 18:19:58 +0100 Subject: [PATCH] fix: skip agent context eager warmup on import --- src/agents/context.eager-warmup.test.ts | 30 +++++++++++++++++++++++++ src/agents/context.ts | 2 ++ 2 files changed, 32 insertions(+) create mode 100644 src/agents/context.eager-warmup.test.ts diff --git a/src/agents/context.eager-warmup.test.ts b/src/agents/context.eager-warmup.test.ts new file mode 100644 index 00000000000..827a3cf257e --- /dev/null +++ b/src/agents/context.eager-warmup.test.ts @@ -0,0 +1,30 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +const loadConfigMock = vi.hoisted(() => vi.fn()); + +vi.mock("../config/config.js", () => ({ + loadConfig: loadConfigMock, +})); + +describe("agents/context eager warmup", () => { + const originalArgv = process.argv.slice(); + + beforeEach(() => { + vi.resetModules(); + loadConfigMock.mockReset(); + }); + + afterEach(() => { + process.argv = originalArgv.slice(); + }); + + it.each([ + ["models", ["node", "openclaw", "models", "set", "openai/gpt-5.4"]], + ["agent", ["node", "openclaw", "agent", "--message", "ok"]], + ])("does not eager-load config for %s commands on import", async (_label, argv) => { + process.argv = argv; + await import("./context.js"); + + expect(loadConfigMock).not.toHaveBeenCalled(); + }); +}); diff --git a/src/agents/context.ts b/src/agents/context.ts index 198490e2277..3404c900934 100644 --- a/src/agents/context.ts +++ b/src/agents/context.ts @@ -129,6 +129,7 @@ function getCommandPathFromArgv(argv: string[]): string[] { } const SKIP_EAGER_WARMUP_PRIMARY_COMMANDS = new Set([ + "agent", "backup", "completion", "config", @@ -138,6 +139,7 @@ const SKIP_EAGER_WARMUP_PRIMARY_COMMANDS = new Set([ "health", "hooks", "logs", + "models", "plugins", "secrets", "status",