diff --git a/extensions/browser/index.test.ts b/extensions/browser/index.test.ts index 7fc45d00851..c5f42e5a0d5 100644 --- a/extensions/browser/index.test.ts +++ b/extensions/browser/index.test.ts @@ -14,8 +14,8 @@ const runtimeApiMocks = vi.hoisted(() => ({ registerBrowserCli: vi.fn(), })); -vi.mock("./runtime-api.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./runtime-api.js", async () => { + const actual = await vi.importActual("./runtime-api.js"); return { ...actual, createBrowserPluginService: runtimeApiMocks.createBrowserPluginService, diff --git a/extensions/browser/src/browser-tool.test.ts b/extensions/browser/src/browser-tool.test.ts index 2ab1c36b202..8fc6f3025c8 100644 --- a/extensions/browser/src/browser-tool.test.ts +++ b/extensions/browser/src/browser-tool.test.ts @@ -115,8 +115,10 @@ vi.mock("../../../src/agents/tools/gateway.js", () => gatewayMocks); const configMocks = vi.hoisted(() => ({ loadConfig: vi.fn(() => ({ browser: {} })), })); -vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/config-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/config-runtime", + ); return { ...actual, loadConfig: configMocks.loadConfig, diff --git a/extensions/browser/src/browser/chrome.default-browser.test.ts b/extensions/browser/src/browser/chrome.default-browser.test.ts index e2f2465a133..ab4502d959c 100644 --- a/extensions/browser/src/browser/chrome.default-browser.test.ts +++ b/extensions/browser/src/browser/chrome.default-browser.test.ts @@ -1,25 +1,32 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -vi.mock("node:child_process", async (importOriginal) => { +vi.mock("node:child_process", async () => { const { mockNodeBuiltinModule } = await import("../../../../test/helpers/node-builtin-mocks.js"); - return mockNodeBuiltinModule(importOriginal, { - execFileSync: vi.fn(), - }); + return mockNodeBuiltinModule( + () => vi.importActual("node:child_process"), + { + execFileSync: vi.fn(), + }, + ); }); -vi.mock("node:fs", async (importOriginal) => { +vi.mock("node:fs", async () => { const { mockNodeBuiltinModule } = await import("../../../../test/helpers/node-builtin-mocks.js"); const existsSync = vi.fn(); const readFileSync = vi.fn(); return mockNodeBuiltinModule( - importOriginal, + () => vi.importActual("node:fs"), { existsSync, readFileSync }, { mirrorToDefault: true }, ); }); -vi.mock("node:os", async (importOriginal) => { +vi.mock("node:os", async () => { const { mockNodeBuiltinModule } = await import("../../../../test/helpers/node-builtin-mocks.js"); const homedir = vi.fn(); - return mockNodeBuiltinModule(importOriginal, { homedir }, { mirrorToDefault: true }); + return mockNodeBuiltinModule( + () => vi.importActual("node:os"), + { homedir }, + { mirrorToDefault: true }, + ); }); import { execFileSync } from "node:child_process"; import * as fs from "node:fs"; diff --git a/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts b/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts index d5b702d9484..3380b3aebb6 100644 --- a/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts +++ b/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts @@ -22,8 +22,8 @@ const mocks = vi.hoisted(() => ({ dispatch: vi.fn(async (): Promise => okDispatchResponse()), })); -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); return { ...actual, loadConfig: mocks.loadConfig, diff --git a/extensions/browser/src/browser/control-service.plugin-disabled.test.ts b/extensions/browser/src/browser/control-service.plugin-disabled.test.ts index 81329d38a57..b757bc66028 100644 --- a/extensions/browser/src/browser/control-service.plugin-disabled.test.ts +++ b/extensions/browser/src/browser/control-service.plugin-disabled.test.ts @@ -17,8 +17,8 @@ const mocks = vi.hoisted(() => ({ })), })); -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); return { ...actual, loadConfig: mocks.loadConfig, diff --git a/extensions/browser/src/browser/profiles-service.test.ts b/extensions/browser/src/browser/profiles-service.test.ts index 03e23823962..8668d1f7a32 100644 --- a/extensions/browser/src/browser/profiles-service.test.ts +++ b/extensions/browser/src/browser/profiles-service.test.ts @@ -6,8 +6,8 @@ import { resolveOpenClawUserDataDir } from "./chrome.js"; import type { BrowserRouteContext, BrowserServerState } from "./server-context.js"; import { movePathToTrash } from "./trash.js"; -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); return { ...actual, loadConfig: vi.fn(), diff --git a/extensions/browser/src/browser/server-context.hot-reload-profiles.test.ts b/extensions/browser/src/browser/server-context.hot-reload-profiles.test.ts index 6166235ecbf..15e74af5fb3 100644 --- a/extensions/browser/src/browser/server-context.hot-reload-profiles.test.ts +++ b/extensions/browser/src/browser/server-context.hot-reload-profiles.test.ts @@ -35,8 +35,8 @@ function buildConfig(): TestConfig { }; } -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); return { ...actual, createConfigIO: () => ({ diff --git a/extensions/browser/src/browser/server.auth-fail-closed.test.ts b/extensions/browser/src/browser/server.auth-fail-closed.test.ts index 1ccdea078f4..19a3601e5fa 100644 --- a/extensions/browser/src/browser/server.auth-fail-closed.test.ts +++ b/extensions/browser/src/browser/server.auth-fail-closed.test.ts @@ -11,8 +11,8 @@ const mocks = vi.hoisted(() => ({ ensureExtensionRelayForProfiles: vi.fn(async () => {}), })); -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); const browserConfig = { enabled: true, }; @@ -24,8 +24,8 @@ vi.mock("../config/config.js", async (importOriginal) => { }; }); -vi.mock("./config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./config.js", async () => { + const actual = await vi.importActual("./config.js"); return { ...actual, resolveBrowserConfig: vi.fn(() => ({ diff --git a/extensions/browser/src/browser/server.control-server.test-harness.ts b/extensions/browser/src/browser/server.control-server.test-harness.ts index 346708f7e9f..9cb807bbcba 100644 --- a/extensions/browser/src/browser/server.control-server.test-harness.ts +++ b/extensions/browser/src/browser/server.control-server.test-harness.ts @@ -225,8 +225,8 @@ function defaultProfilesForState(testPort: number): HarnessState["cfgProfiles"] }; } -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); const loadConfig = () => { return { browser: { diff --git a/extensions/browser/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts b/extensions/browser/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts index b2722d2843a..4e574defb78 100644 --- a/extensions/browser/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts +++ b/extensions/browser/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts @@ -35,8 +35,8 @@ const routeCtxMocks = vi.hoisted(() => { }; }); -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); return { ...actual, loadConfig: () => ({ @@ -57,8 +57,8 @@ vi.mock("./pw-ai-module.js", () => ({ getPwAiModule: vi.fn(async () => pwMocks), })); -vi.mock("./server-context.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./server-context.js", async () => { + const actual = await vi.importActual("./server-context.js"); return { ...actual, createBrowserRouteContext: routeCtxMocks.createBrowserRouteContext, diff --git a/extensions/browser/src/gateway/browser-request.profile-from-body.test.ts b/extensions/browser/src/gateway/browser-request.profile-from-body.test.ts index 2ccb924a182..3617575b810 100644 --- a/extensions/browser/src/gateway/browser-request.profile-from-body.test.ts +++ b/extensions/browser/src/gateway/browser-request.profile-from-body.test.ts @@ -8,8 +8,10 @@ const { loadConfigMock, isNodeCommandAllowedMock, resolveNodeCommandAllowlistMoc }), ); -vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/config-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/config-runtime", + ); return { ...actual, loadConfig: loadConfigMock, diff --git a/extensions/discord/src/monitor/exec-approvals.test.ts b/extensions/discord/src/monitor/exec-approvals.test.ts index 53d623e91bf..ce1c5f512cd 100644 --- a/extensions/discord/src/monitor/exec-approvals.test.ts +++ b/extensions/discord/src/monitor/exec-approvals.test.ts @@ -57,8 +57,8 @@ const mockGatewayClientCtor = vi.hoisted(() => vi.fn()); const mockResolveGatewayConnectionAuth = vi.hoisted(() => vi.fn()); const mockCreateOperatorApprovalsGatewayClient = vi.hoisted(() => vi.fn()); -vi.mock("../send.shared.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../send.shared.js", async () => { + const actual = await vi.importActual("../send.shared.js"); return { ...actual, createDiscordClient: () => ({ @@ -72,8 +72,10 @@ vi.mock("../send.shared.js", async (importOriginal) => { }; }); -vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/config-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/config-runtime", + ); return { ...actual, loadSessionStore: () => mockSessionStoreEntries.value, @@ -148,8 +150,10 @@ vi.mock("../../../../src/gateway/client.js", () => ({ }, })); -vi.mock("openclaw/plugin-sdk/text-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/text-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/text-runtime", + ); return { ...actual, logDebug: vi.fn(), diff --git a/extensions/telegram/src/bot-message-context.dm-threads.test.ts b/extensions/telegram/src/bot-message-context.dm-threads.test.ts index aca9e8412aa..9583ff3e478 100644 --- a/extensions/telegram/src/bot-message-context.dm-threads.test.ts +++ b/extensions/telegram/src/bot-message-context.dm-threads.test.ts @@ -3,8 +3,10 @@ const { recordInboundSessionMock } = vi.hoisted(() => ({ recordInboundSessionMock: vi.fn().mockResolvedValue(undefined), })); -vi.mock("./bot-message-context.session.runtime.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./bot-message-context.session.runtime.js", async () => { + const actual = await vi.importActual( + "./bot-message-context.session.runtime.js", + ); return { ...actual, recordInboundSession: (...args: unknown[]) => recordInboundSessionMock(...args), diff --git a/extensions/telegram/src/bot-message-context.thread-binding.test.ts b/extensions/telegram/src/bot-message-context.thread-binding.test.ts index cdff8c7ca76..ef6d45a01d0 100644 --- a/extensions/telegram/src/bot-message-context.thread-binding.test.ts +++ b/extensions/telegram/src/bot-message-context.thread-binding.test.ts @@ -4,15 +4,18 @@ import { buildTelegramMessageContextForTest } from "./bot-message-context.test-h const recordInboundSessionMock = vi.hoisted(() => vi.fn().mockResolvedValue(undefined)); const resolveTelegramConversationRouteMock = vi.hoisted(() => vi.fn()); -vi.mock("./bot-message-context.session.runtime.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./bot-message-context.session.runtime.js", async () => { + const actual = await vi.importActual( + "./bot-message-context.session.runtime.js", + ); return { ...actual, recordInboundSession: (...args: unknown[]) => recordInboundSessionMock(...args), }; }); -vi.mock("./conversation-route.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./conversation-route.js", async () => { + const actual = + await vi.importActual("./conversation-route.js"); return { ...actual, resolveTelegramConversationRoute: (...args: unknown[]) => diff --git a/extensions/tlon/src/urbit/upload.test.ts b/extensions/tlon/src/urbit/upload.test.ts index 6b09ec8cac3..90c196e6813 100644 --- a/extensions/tlon/src/urbit/upload.test.ts +++ b/extensions/tlon/src/urbit/upload.test.ts @@ -1,8 +1,9 @@ import { describe, expect, it, vi, afterEach, beforeEach } from "vitest"; // Mock fetchWithSsrFGuard from the local runtime seam. -vi.mock("../../runtime-api.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../../runtime-api.js", async () => { + const actual = + await vi.importActual("../../runtime-api.js"); return { ...actual, fetchWithSsrFGuard: vi.fn(), diff --git a/extensions/zalouser/src/channel.test.ts b/extensions/zalouser/src/channel.test.ts index ab50f2e733c..3031efb46e8 100644 --- a/extensions/zalouser/src/channel.test.ts +++ b/extensions/zalouser/src/channel.test.ts @@ -4,8 +4,8 @@ import { zalouserPlugin } from "./channel.js"; import { setZalouserRuntime } from "./runtime.js"; import { sendMessageZalouser, sendReactionZalouser } from "./send.js"; -vi.mock("./send.js", async (importOriginal) => { - const actual = (await importOriginal()) as Record; +vi.mock("./send.js", async () => { + const actual = (await vi.importActual("./send.js")) as Record; return { ...actual, sendMessageZalouser: vi.fn(async () => ({ ok: true, messageId: "mid-1" })), diff --git a/src/auto-reply/reply.block-streaming.test.ts b/src/auto-reply/reply.block-streaming.test.ts index 3f5c22f9aee..4d3221640b9 100644 --- a/src/auto-reply/reply.block-streaming.test.ts +++ b/src/auto-reply/reply.block-streaming.test.ts @@ -10,8 +10,10 @@ const mocks = vi.hoisted(() => ({ runPreparedReply: vi.fn(), })); -vi.mock("../agents/agent-scope.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../agents/agent-scope.js", async () => { + const actual = await vi.importActual( + "../agents/agent-scope.js", + ); return { ...actual, resolveAgentDir: vi.fn(() => "/tmp/agent"), @@ -20,8 +22,10 @@ vi.mock("../agents/agent-scope.js", async (importOriginal) => { resolveAgentSkillsFilter: vi.fn(() => undefined), }; }); -vi.mock("../agents/model-selection.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../agents/model-selection.js", async () => { + const actual = await vi.importActual( + "../agents/model-selection.js", + ); return { ...actual, resolveModelRefFromString: vi.fn(() => null), diff --git a/src/auto-reply/reply/agent-runner-helpers.test.ts b/src/auto-reply/reply/agent-runner-helpers.test.ts index 032cf7590a6..797742f8aa7 100644 --- a/src/auto-reply/reply/agent-runner-helpers.test.ts +++ b/src/auto-reply/reply/agent-runner-helpers.test.ts @@ -8,16 +8,18 @@ const hoisted = vi.hoisted(() => { return { loadSessionStoreMock, scheduleFollowupDrainMock }; }); -vi.mock("../../config/sessions.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../../config/sessions.js", async () => { + const actual = await vi.importActual( + "../../config/sessions.js", + ); return { ...actual, loadSessionStore: (...args: unknown[]) => hoisted.loadSessionStoreMock(...args), }; }); -vi.mock("./queue.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./queue.js", async () => { + const actual = await vi.importActual("./queue.js"); return { ...actual, scheduleFollowupDrain: (...args: unknown[]) => hoisted.scheduleFollowupDrainMock(...args), diff --git a/src/auto-reply/reply/get-reply.imports.test.ts b/src/auto-reply/reply/get-reply.imports.test.ts index ffe9271b5eb..aadf149ffdc 100644 --- a/src/auto-reply/reply/get-reply.imports.test.ts +++ b/src/auto-reply/reply/get-reply.imports.test.ts @@ -5,13 +5,17 @@ describe("get-reply module imports", () => { it("does not load reset-model runtime on module import", async () => { const resetModelRuntimeLoads = vi.fn(); const sandboxMediaRuntimeLoads = vi.fn(); - vi.doMock("./session-reset-model.runtime.js", async (importOriginal) => { + vi.doMock("./session-reset-model.runtime.js", async () => { resetModelRuntimeLoads(); - return await importOriginal(); + return await vi.importActual( + "./session-reset-model.runtime.js", + ); }); - vi.doMock("./stage-sandbox-media.runtime.js", async (importOriginal) => { + vi.doMock("./stage-sandbox-media.runtime.js", async () => { sandboxMediaRuntimeLoads(); - return await importOriginal(); + return await vi.importActual( + "./stage-sandbox-media.runtime.js", + ); }); await importFreshModule( diff --git a/src/cli/daemon-cli.coverage.test.ts b/src/cli/daemon-cli.coverage.test.ts index b42c931d59d..05084023d58 100644 --- a/src/cli/daemon-cli.coverage.test.ts +++ b/src/cli/daemon-cli.coverage.test.ts @@ -70,8 +70,9 @@ vi.mock("../daemon/program-args.js", () => ({ resolveGatewayProgramArguments: (opts: unknown) => resolveGatewayProgramArguments(opts), })); -vi.mock("../daemon/service.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../daemon/service.js", async () => { + const actual = + await vi.importActual("../daemon/service.js"); return { ...actual, resolveGatewayService: () => ({ @@ -104,8 +105,8 @@ vi.mock("../infra/ports.js", () => ({ formatPortDiagnostics: () => ["Port 18789 is already in use."], })); -vi.mock("../runtime.js", async (importOriginal) => ({ - ...(await importOriginal()), +vi.mock("../runtime.js", async () => ({ + ...(await vi.importActual("../runtime.js")), defaultRuntime: mocks.defaultRuntime, })); diff --git a/src/cli/gateway-cli.coverage.test.ts b/src/cli/gateway-cli.coverage.test.ts index df3b667f423..dc425115c66 100644 --- a/src/cli/gateway-cli.coverage.test.ts +++ b/src/cli/gateway-cli.coverage.test.ts @@ -74,8 +74,8 @@ vi.mock("../globals.js", () => ({ setVerbose: (enabled: boolean) => setVerbose(enabled), })); -vi.mock("../runtime.js", async (importOriginal) => ({ - ...(await importOriginal()), +vi.mock("../runtime.js", async () => ({ + ...(await vi.importActual("../runtime.js")), defaultRuntime: mocks.defaultRuntime, })); @@ -105,8 +105,10 @@ vi.mock("../daemon/program-args.js", () => ({ }), })); -vi.mock("../infra/bonjour-discovery.js", async (importOriginal) => ({ - ...(await importOriginal()), +vi.mock("../infra/bonjour-discovery.js", async () => ({ + ...(await vi.importActual( + "../infra/bonjour-discovery.js", + )), discoverGatewayBeacons: (opts: unknown) => discoverGatewayBeacons(opts), })); diff --git a/src/cli/run-main.profile-env.test.ts b/src/cli/run-main.profile-env.test.ts index 6e04eed1432..04db35a4c03 100644 --- a/src/cli/run-main.profile-env.test.ts +++ b/src/cli/run-main.profile-env.test.ts @@ -22,8 +22,8 @@ const maybeRunCliInContainerMock = vi.hoisted(() => vi.fn((argv: string[]) => ({ handled: false, argv })), ); -vi.mock("node:fs", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:fs", async () => { + const actual = await vi.importActual("node:fs"); type ExistsSyncPath = Parameters[0]; return { ...actual, @@ -60,8 +60,9 @@ vi.mock("./windows-argv.js", () => ({ normalizeWindowsArgv: (argv: string[]) => argv, })); -vi.mock("./container-target.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./container-target.js", async () => { + const actual = + await vi.importActual("./container-target.js"); return { ...actual, maybeRunCliInContainer: maybeRunCliInContainerMock, diff --git a/src/commands/gateway-status.test.ts b/src/commands/gateway-status.test.ts index ba0dadfac4b..d36f7f9a561 100644 --- a/src/commands/gateway-status.test.ts +++ b/src/commands/gateway-status.test.ts @@ -132,8 +132,10 @@ vi.mock("../config/config.js", () => ({ resolveGatewayPort: mocks.resolveGatewayPort, })); -vi.mock("../infra/bonjour-discovery.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../infra/bonjour-discovery.js", async () => { + const actual = await vi.importActual( + "../infra/bonjour-discovery.js", + ); return { ...actual, discoverGatewayBeacons: mocks.discoverGatewayBeacons, diff --git a/src/commands/sessions.default-agent-store.test.ts b/src/commands/sessions.default-agent-store.test.ts index b55be975b4b..7c1722bab2b 100644 --- a/src/commands/sessions.default-agent-store.test.ts +++ b/src/commands/sessions.default-agent-store.test.ts @@ -27,16 +27,17 @@ const resolveStorePathMock = vi.hoisted(() => ); const loadSessionStoreMock = vi.hoisted(() => vi.fn(() => ({}))); -vi.mock("../config/config.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/config.js", async () => { + const actual = await vi.importActual("../config/config.js"); return { ...actual, loadConfig: loadConfigMock, }; }); -vi.mock("../config/sessions.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/sessions.js", async () => { + const actual = + await vi.importActual("../config/sessions.js"); return { ...actual, resolveStorePath: resolveStorePathMock, diff --git a/src/cron/service.runs-one-shot-main-job-disables-it.test.ts b/src/cron/service.runs-one-shot-main-job-disables-it.test.ts index 4dd40fe6c88..36922981156 100644 --- a/src/cron/service.runs-one-shot-main-job-disables-it.test.ts +++ b/src/cron/service.runs-one-shot-main-job-disables-it.test.ts @@ -59,8 +59,8 @@ async function makeStorePath() { return { storePath, cleanup: async () => {} }; } -vi.mock("node:fs", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:fs", async () => { + const actual = await vi.importActual("node:fs"); const pathMod = await import("node:path"); const absInMock = (p: string) => pathMod.resolve(p); const isFixtureInMock = (p: string) => { @@ -155,8 +155,8 @@ vi.mock("node:fs", async (importOriginal) => { return { ...wrapped, default: wrapped }; }); -vi.mock("node:fs/promises", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:fs/promises", async () => { + const actual = await vi.importActual("node:fs/promises"); const wrapped = { ...actual, mkdir: async (p: string, _opts?: unknown) => { diff --git a/src/daemon/program-args.test.ts b/src/daemon/program-args.test.ts index 3823f589be1..5a1fcaf4413 100644 --- a/src/daemon/program-args.test.ts +++ b/src/daemon/program-args.test.ts @@ -10,8 +10,8 @@ const fsMocks = vi.hoisted(() => ({ realpath: vi.fn(), })); -vi.mock("node:fs/promises", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:fs/promises", async () => { + const actual = await vi.importActual("node:fs/promises"); return { ...actual, default: { @@ -24,8 +24,8 @@ vi.mock("node:fs/promises", async (importOriginal) => { }; }); -vi.mock("node:child_process", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:child_process", async () => { + const actual = await vi.importActual("node:child_process"); return { ...actual, execFileSync: childProcessMocks.execFileSync, diff --git a/src/gateway/client.test.ts b/src/gateway/client.test.ts index f3c926fad55..ec9862ae2f1 100644 --- a/src/gateway/client.test.ts +++ b/src/gateway/client.test.ts @@ -92,8 +92,10 @@ vi.mock("ws", () => ({ WebSocket: MockWebSocket, })); -vi.mock("../infra/device-auth-store.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../infra/device-auth-store.js", async () => { + const actual = await vi.importActual( + "../infra/device-auth-store.js", + ); return { ...actual, loadDeviceAuthToken: (...args: unknown[]) => loadDeviceAuthTokenMock(...args), @@ -102,8 +104,8 @@ vi.mock("../infra/device-auth-store.js", async (importOriginal) => { }; }); -vi.mock("../logger.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../logger.js", async () => { + const actual = await vi.importActual("../logger.js"); return { ...actual, logDebug: (...args: unknown[]) => logDebugMock(...args), diff --git a/src/gateway/server-methods/chat.directive-tags.test.ts b/src/gateway/server-methods/chat.directive-tags.test.ts index 2b1965ee555..abe770ac9d4 100644 --- a/src/gateway/server-methods/chat.directive-tags.test.ts +++ b/src/gateway/server-methods/chat.directive-tags.test.ts @@ -46,8 +46,9 @@ Sender labels: example <<>>`; -vi.mock("../session-utils.js", async (importOriginal) => { - const original = await importOriginal(); +vi.mock("../session-utils.js", async () => { + const original = + await vi.importActual("../session-utils.js"); return { ...original, loadSessionEntry: (rawKey: string) => ({ @@ -116,8 +117,9 @@ vi.mock("../../sessions/transcript-events.js", () => ({ ), })); -vi.mock("../../media/store.js", async (importOriginal) => { - const original = await importOriginal(); +vi.mock("../../media/store.js", async () => { + const original = + await vi.importActual("../../media/store.js"); return { ...original, saveMediaBuffer: vi.fn(async (buffer: Buffer, contentType?: string, subdir?: string) => { diff --git a/src/gateway/server-methods/sessions.send-followup-status.test.ts b/src/gateway/server-methods/sessions.send-followup-status.test.ts index b34c92a3778..b1bbffb8f7c 100644 --- a/src/gateway/server-methods/sessions.send-followup-status.test.ts +++ b/src/gateway/server-methods/sessions.send-followup-status.test.ts @@ -9,8 +9,8 @@ const getLatestSubagentRunByChildSessionKeyMock = vi.fn(); const replaceSubagentRunAfterSteerMock = vi.fn(); const chatSendMock = vi.fn(); -vi.mock("../session-utils.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../session-utils.js", async () => { + const actual = await vi.importActual("../session-utils.js"); return { ...actual, loadSessionEntry: (...args: unknown[]) => loadSessionEntryMock(...args), @@ -19,8 +19,10 @@ vi.mock("../session-utils.js", async (importOriginal) => { }; }); -vi.mock("../../agents/subagent-registry-read.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../../agents/subagent-registry-read.js", async () => { + const actual = await vi.importActual( + "../../agents/subagent-registry-read.js", + ); return { ...actual, getLatestSubagentRunByChildSessionKey: (...args: unknown[]) => diff --git a/src/gateway/server-methods/update.test.ts b/src/gateway/server-methods/update.test.ts index 3fd0ce2293a..c3820016fa8 100644 --- a/src/gateway/server-methods/update.test.ts +++ b/src/gateway/server-methods/update.test.ts @@ -32,16 +32,18 @@ vi.mock("../../config/sessions.js", () => ({ }, })); -vi.mock("../../infra/openclaw-root.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../../infra/openclaw-root.js", async () => { + const actual = await vi.importActual( + "../../infra/openclaw-root.js", + ); return { ...actual, resolveOpenClawPackageRoot: async () => "/tmp/openclaw", }; }); -vi.mock("../../infra/restart-sentinel.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../../infra/restart-sentinel.js", async () => { + const actual = await vi.importActual("../../infra/restart-sentinel.js"); return { ...(actual as Record), writeRestartSentinel: async (payload: RestartSentinelPayload) => { diff --git a/src/infra/gateway-processes.test.ts b/src/infra/gateway-processes.test.ts index c3418f4516e..cd60a208d1c 100644 --- a/src/infra/gateway-processes.test.ts +++ b/src/infra/gateway-processes.test.ts @@ -7,17 +7,20 @@ const parseProcCmdlineMock = vi.hoisted(() => vi.fn()); const isGatewayArgvMock = vi.hoisted(() => vi.fn()); const findGatewayPidsOnPortSyncMock = vi.hoisted(() => vi.fn()); -vi.mock("node:child_process", async (importOriginal) => { - const { mockNodeBuiltinModule } = await import("../../test/helpers/node-builtin-mocks.js"); - return mockNodeBuiltinModule(importOriginal, { - spawnSync: (...args: unknown[]) => spawnSyncMock(...args), - }); -}); - -vi.mock("node:fs", async (importOriginal) => { +vi.mock("node:child_process", async () => { const { mockNodeBuiltinModule } = await import("../../test/helpers/node-builtin-mocks.js"); return mockNodeBuiltinModule( - importOriginal, + () => vi.importActual("node:child_process"), + { + spawnSync: (...args: unknown[]) => spawnSyncMock(...args), + }, + ); +}); + +vi.mock("node:fs", async () => { + const { mockNodeBuiltinModule } = await import("../../test/helpers/node-builtin-mocks.js"); + return mockNodeBuiltinModule( + () => vi.importActual("node:fs"), { readFileSync: (...args: unknown[]) => readFileSyncMock(...args), }, diff --git a/src/infra/provider-usage.auth.normalizes-keys.test.ts b/src/infra/provider-usage.auth.normalizes-keys.test.ts index 85f69c4b120..2accacf5065 100644 --- a/src/infra/provider-usage.auth.normalizes-keys.test.ts +++ b/src/infra/provider-usage.auth.normalizes-keys.test.ts @@ -160,8 +160,10 @@ const providerRuntimeMocks = vi.hoisted(() => ({ }, })); -vi.mock("../plugins/provider-runtime.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../plugins/provider-runtime.js", async () => { + const actual = await vi.importActual( + "../plugins/provider-runtime.js", + ); return { ...actual, ...providerRuntimeMocks.providerRuntimeMock, @@ -169,8 +171,10 @@ vi.mock("../plugins/provider-runtime.js", async (importOriginal) => { }; }); -vi.mock("../plugins/provider-runtime.ts", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../plugins/provider-runtime.ts", async () => { + const actual = await vi.importActual( + "../plugins/provider-runtime.ts", + ); return { ...actual, ...providerRuntimeMocks.providerRuntimeMock, diff --git a/src/infra/restart.test.ts b/src/infra/restart.test.ts index 0f9f6b6b3b4..91835a363c0 100644 --- a/src/infra/restart.test.ts +++ b/src/infra/restart.test.ts @@ -4,19 +4,22 @@ const spawnSyncMock = vi.hoisted(() => vi.fn()); const resolveLsofCommandSyncMock = vi.hoisted(() => vi.fn()); const resolveGatewayPortMock = vi.hoisted(() => vi.fn()); -vi.mock("node:child_process", async (importOriginal) => { +vi.mock("node:child_process", async () => { const { mockNodeBuiltinModule } = await import("../../test/helpers/node-builtin-mocks.js"); - return mockNodeBuiltinModule(importOriginal, { - spawnSync: (...args: unknown[]) => spawnSyncMock(...args), - }); + return mockNodeBuiltinModule( + () => vi.importActual("node:child_process"), + { + spawnSync: (...args: unknown[]) => spawnSyncMock(...args), + }, + ); }); vi.mock("./ports-lsof.js", () => ({ resolveLsofCommandSync: (...args: unknown[]) => resolveLsofCommandSyncMock(...args), })); -vi.mock("../config/paths.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../config/paths.js", async () => { + const actual = await vi.importActual("../config/paths.js"); return { ...actual, resolveGatewayPort: (...args: unknown[]) => resolveGatewayPortMock(...args), diff --git a/src/infra/wsl.test.ts b/src/infra/wsl.test.ts index 1b6b6a92d2b..6d15d92e0f5 100644 --- a/src/infra/wsl.test.ts +++ b/src/infra/wsl.test.ts @@ -4,16 +4,16 @@ import { captureEnv } from "../test-utils/env.js"; const readFileSyncMock = vi.hoisted(() => vi.fn()); const readFileMock = vi.hoisted(() => vi.fn()); -vi.mock("node:fs", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:fs", async () => { + const actual = await vi.importActual("node:fs"); return { ...actual, readFileSync: readFileSyncMock, }; }); -vi.mock("node:fs/promises", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:fs/promises", async () => { + const actual = await vi.importActual("node:fs/promises"); return { ...actual, default: { diff --git a/src/media-understanding/image.test.ts b/src/media-understanding/image.test.ts index d42e3e1bd96..de65be6b16e 100644 --- a/src/media-understanding/image.test.ts +++ b/src/media-understanding/image.test.ts @@ -29,16 +29,18 @@ const { fetchMock, } = hoisted; -vi.mock("@mariozechner/pi-ai", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("@mariozechner/pi-ai", async () => { + const actual = await vi.importActual("@mariozechner/pi-ai"); return { ...actual, complete: completeMock, }; }); -vi.mock("../agents/models-config.js", async (importOriginal) => ({ - ...(await importOriginal()), +vi.mock("../agents/models-config.js", async () => ({ + ...(await vi.importActual( + "../agents/models-config.js", + )), ensureOpenClawModelsJson: ensureOpenClawModelsJsonMock, })); diff --git a/src/media/server.test.ts b/src/media/server.test.ts index 134efb0ab52..993e55e6dbd 100644 --- a/src/media/server.test.ts +++ b/src/media/server.test.ts @@ -9,8 +9,8 @@ import { withEnvAsync } from "../test-utils/env.js"; let MEDIA_DIR = ""; const cleanOldMedia = vi.fn().mockResolvedValue(undefined); -vi.mock("./store.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./store.js", async () => { + const actual = await vi.importActual("./store.js"); return { ...actual, getMediaDir: () => MEDIA_DIR, diff --git a/src/plugin-sdk/browser-maintenance.test.ts b/src/plugin-sdk/browser-maintenance.test.ts index 48a5f2510b4..d538f49a008 100644 --- a/src/plugin-sdk/browser-maintenance.test.ts +++ b/src/plugin-sdk/browser-maintenance.test.ts @@ -14,19 +14,19 @@ vi.mock("./facade-runtime.js", () => ({ tryLoadActivatedBundledPluginPublicSurfaceModuleSync, })); -vi.mock("node:fs/promises", async (importOriginal) => { +vi.mock("node:fs/promises", async () => { const { mockNodeBuiltinModule } = await import("../../test/helpers/node-builtin-mocks.js"); return mockNodeBuiltinModule( - importOriginal, + () => vi.importActual("node:fs/promises"), { mkdir, access, rename }, { mirrorToDefault: true }, ); }); -vi.mock("node:os", async (importOriginal) => { +vi.mock("node:os", async () => { const { mockNodeBuiltinModule } = await import("../../test/helpers/node-builtin-mocks.js"); return mockNodeBuiltinModule( - importOriginal, + () => vi.importActual("node:os"), { homedir: () => "/home/test" }, { mirrorToDefault: true }, ); diff --git a/src/plugins/conversation-binding.test.ts b/src/plugins/conversation-binding.test.ts index 78f261b4d55..09d9b71a82b 100644 --- a/src/plugins/conversation-binding.test.ts +++ b/src/plugins/conversation-binding.test.ts @@ -91,8 +91,9 @@ const pluginRuntimeState = vi.hoisted( }) satisfies { registry: PluginRegistry }, ); -vi.mock("../infra/home-dir.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../infra/home-dir.js", async () => { + const actual = + await vi.importActual("../infra/home-dir.js"); return { ...actual, expandHomePrefix: (value: string) => { diff --git a/src/secrets/runtime-web-tools.test.ts b/src/secrets/runtime-web-tools.test.ts index bed3b5b57a3..326949bac10 100644 --- a/src/secrets/runtime-web-tools.test.ts +++ b/src/secrets/runtime-web-tools.test.ts @@ -35,9 +35,10 @@ vi.mock("../plugins/web-search-providers.js", () => ({ resolveBundledPluginWebSearchProviders: resolveBundledPluginWebSearchProvidersMock, })); -vi.mock("../plugins/web-search-providers.runtime.js", async (importOriginal) => { - const actual = - await importOriginal(); +vi.mock("../plugins/web-search-providers.runtime.js", async () => { + const actual = await vi.importActual( + "../plugins/web-search-providers.runtime.js", + ); return { ...actual, resolvePluginWebSearchProviders: resolvePluginWebSearchProvidersMock, @@ -48,8 +49,10 @@ vi.mock("../plugins/web-fetch-providers.js", () => ({ resolveBundledPluginWebFetchProviders: resolveBundledPluginWebFetchProvidersMock, })); -vi.mock("../plugins/web-fetch-providers.runtime.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("../plugins/web-fetch-providers.runtime.js", async () => { + const actual = await vi.importActual( + "../plugins/web-fetch-providers.runtime.js", + ); return { ...actual, resolvePluginWebFetchProviders: resolvePluginWebFetchProvidersMock, diff --git a/test/scripts/test-report-utils.test.ts b/test/scripts/test-report-utils.test.ts index 1d4cbd2102d..7e35dbbaab1 100644 --- a/test/scripts/test-report-utils.test.ts +++ b/test/scripts/test-report-utils.test.ts @@ -12,8 +12,8 @@ const { spawnSyncMock } = vi.hoisted(() => ({ spawnSyncMock: vi.fn(), })); -vi.mock("node:child_process", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("node:child_process", async () => { + const actual = await vi.importActual("node:child_process"); return { ...actual, spawnSync: spawnSyncMock,