From d1e4ee03ff6f33d81627f65e60e67aa51c988c43 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 14 Mar 2026 23:18:26 -0700 Subject: [PATCH] fix(context): skip eager warmup for non-model CLI commands --- src/agents/context.lookup.test.ts | 14 ++++++++++++++ src/agents/context.ts | 19 +++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/agents/context.lookup.test.ts b/src/agents/context.lookup.test.ts index a395f0b3089..e5025b36c76 100644 --- a/src/agents/context.lookup.test.ts +++ b/src/agents/context.lookup.test.ts @@ -90,6 +90,20 @@ describe("lookupContextTokens", () => { } }); + it("skips eager warmup for logs commands that do not need model metadata at startup", async () => { + const loadConfigMock = vi.fn(() => ({ models: {} })); + mockContextModuleDeps(loadConfigMock); + + const argvSnapshot = process.argv; + process.argv = ["node", "openclaw", "logs", "--limit", "5"]; + try { + await import("./context.js"); + expect(loadConfigMock).not.toHaveBeenCalled(); + } finally { + process.argv = argvSnapshot; + } + }); + it("retries config loading after backoff when an initial load fails", async () => { vi.useFakeTimers(); const loadConfigMock = vi diff --git a/src/agents/context.ts b/src/agents/context.ts index c18d9534689..5550f67e3b7 100644 --- a/src/agents/context.ts +++ b/src/agents/context.ts @@ -108,9 +108,24 @@ function getCommandPathFromArgv(argv: string[]): string[] { return tokens; } +const SKIP_EAGER_WARMUP_PRIMARY_COMMANDS = new Set([ + "backup", + "completion", + "config", + "directory", + "doctor", + "health", + "hooks", + "logs", + "plugins", + "secrets", + "update", + "webhooks", +]); + function shouldSkipEagerContextWindowWarmup(argv: string[] = process.argv): boolean { - const [primary, secondary] = getCommandPathFromArgv(argv); - return primary === "config" && secondary === "validate"; + const [primary] = getCommandPathFromArgv(argv); + return primary ? SKIP_EAGER_WARMUP_PRIMARY_COMMANDS.has(primary) : false; } function primeConfiguredContextWindows(): OpenClawConfig | undefined {