From 8ad8069854de963cbd86635ee9c0d1550ccdb0cb Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Mon, 16 Mar 2026 12:50:59 +0000 Subject: [PATCH] Tests: fix green check typing regressions --- ...rs-response-has-heartbeat-ok-but-includes.test.ts | 2 +- src/cron/isolated-agent.model-formatting.test.ts | 2 +- ...whatsapp-recipient-besteffortdeliver-true.test.ts | 2 +- ...d-agent.uses-last-non-empty-agent-text-as.test.ts | 10 ++-------- src/cron/isolated-agent/run.test-harness.ts | 2 +- src/media-understanding/apply.test.ts | 4 ++-- src/plugin-sdk/sandbox.ts | 1 + src/plugins/provider-runtime.test.ts | 12 ++++++++---- src/plugins/types.ts | 4 ++++ src/plugins/web-search-providers.ts | 4 ++-- 10 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts b/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts index 6316f394b9c..58450d3a650 100644 --- a/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts +++ b/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts @@ -73,7 +73,7 @@ async function runTelegramAnnounceTurn(params: { describe("runCronIsolatedAgentTurn", () => { beforeEach(() => { - vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue(undefined); + vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue("off"); setupIsolatedAgentTurnMocks({ fast: true }); }); diff --git a/src/cron/isolated-agent.model-formatting.test.ts b/src/cron/isolated-agent.model-formatting.test.ts index c783247e6f3..5232d1349a6 100644 --- a/src/cron/isolated-agent.model-formatting.test.ts +++ b/src/cron/isolated-agent.model-formatting.test.ts @@ -126,7 +126,7 @@ async function expectInvalidModel(home: string, model: string) { describe("cron model formatting and precedence edge cases", () => { beforeEach(() => { - vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue(undefined); + vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue("off"); vi.mocked(runEmbeddedPiAgent).mockClear(); vi.mocked(loadModelCatalog).mockResolvedValue([]); }); diff --git a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts index 639c207459e..9a5adcc2627 100644 --- a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts +++ b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts @@ -262,7 +262,7 @@ async function assertExplicitTelegramTargetDelivery(params: { describe("runCronIsolatedAgentTurn", () => { beforeEach(() => { - vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue(undefined); + vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue("off"); setupIsolatedAgentTurnMocks(); }); diff --git a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts index 5830029d9e7..e7804835054 100644 --- a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts +++ b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts @@ -16,10 +16,6 @@ import { } from "./isolated-agent.test-harness.js"; import type { CronJob } from "./types.js"; -let resolveThinkingDefaultSpy: ReturnType< - typeof vi.spyOn ->; - function makeDeps(): CliDeps { return { sendMessageSlack: vi.fn(), @@ -168,9 +164,7 @@ async function runStoredOverrideAndExpectModel(params: { describe("runCronIsolatedAgentTurn", () => { beforeEach(() => { - resolveThinkingDefaultSpy = vi - .spyOn(modelSelection, "resolveThinkingDefault") - .mockReturnValue(undefined); + vi.spyOn(modelSelection, "resolveThinkingDefault").mockReturnValue("off"); vi.mocked(runEmbeddedPiAgent).mockClear(); vi.mocked(loadModelCatalog).mockResolvedValue([]); }); @@ -513,7 +507,7 @@ describe("runCronIsolatedAgentTurn", () => { it("passes through the resolved default thinking level", async () => { await withTempHome(async (home) => { - resolveThinkingDefaultSpy.mockReturnValueOnce("low"); + vi.mocked(modelSelection.resolveThinkingDefault).mockReturnValueOnce("low"); await runCronTurn(home, { jobPayload: DEFAULT_AGENT_TURN_PAYLOAD, diff --git a/src/cron/isolated-agent/run.test-harness.ts b/src/cron/isolated-agent/run.test-harness.ts index 81e4c8b902b..0e9ac3c6069 100644 --- a/src/cron/isolated-agent/run.test-harness.ts +++ b/src/cron/isolated-agent/run.test-harness.ts @@ -363,7 +363,7 @@ export function resetRunCronIsolatedAgentTurnHarness(): void { resolveConfiguredModelRefMock.mockReturnValue({ provider: "openai", model: "gpt-4" }); resolveAllowedModelRefMock.mockReturnValue({ ref: { provider: "openai", model: "gpt-4" } }); resolveHooksGmailModelMock.mockReturnValue(null); - resolveThinkingDefaultMock.mockReturnValue(undefined); + resolveThinkingDefaultMock.mockReturnValue("off"); getModelRefStatusMock.mockReturnValue({ allowed: false }); isCliProviderMock.mockReturnValue(false); diff --git a/src/media-understanding/apply.test.ts b/src/media-understanding/apply.test.ts index b979a2ac4ad..7058cef6bb1 100644 --- a/src/media-understanding/apply.test.ts +++ b/src/media-understanding/apply.test.ts @@ -13,14 +13,14 @@ import { clearMediaUnderstandingBinaryCacheForTests } from "./runner.js"; import { createSafeAudioFixtureBuffer } from "./runner.test-utils.js"; const resolveApiKeyForProviderMock = vi.hoisted(() => - vi.fn(async () => ({ + vi.fn(async () => ({ apiKey: "test-key", // pragma: allowlist secret source: "test", mode: "api-key", })), ); const hasAvailableAuthForProviderMock = vi.hoisted(() => - vi.fn(async (...args: unknown[]) => { + vi.fn(async (...args: Parameters) => { const resolved = await resolveApiKeyForProviderMock(...args); return Boolean(resolved?.apiKey); }), diff --git a/src/plugin-sdk/sandbox.ts b/src/plugin-sdk/sandbox.ts index 245fa9f6b83..ce349fb9de5 100644 --- a/src/plugin-sdk/sandbox.ts +++ b/src/plugin-sdk/sandbox.ts @@ -19,6 +19,7 @@ export type { SshSandboxSession, SshSandboxSettings, } from "../agents/sandbox.js"; +export type { OpenClawConfig } from "../config/config.js"; export { buildExecRemoteCommand, diff --git a/src/plugins/provider-runtime.test.ts b/src/plugins/provider-runtime.test.ts index dec7be0b53d..a41cb52727f 100644 --- a/src/plugins/provider-runtime.test.ts +++ b/src/plugins/provider-runtime.test.ts @@ -1,9 +1,13 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import type { ProviderPlugin, ProviderRuntimeModel } from "./types.js"; -const resolvePluginProvidersMock = vi.fn((_: unknown) => [] as ProviderPlugin[]); -const resolveOwningPluginIdsForProviderMock = vi.fn( - (_: unknown) => undefined as string[] | undefined, +type ResolvePluginProviders = typeof import("./providers.js").resolvePluginProviders; +type ResolveOwningPluginIdsForProvider = + typeof import("./providers.js").resolveOwningPluginIdsForProvider; + +const resolvePluginProvidersMock = vi.fn((_) => [] as ProviderPlugin[]); +const resolveOwningPluginIdsForProviderMock = vi.fn( + (_) => undefined as string[] | undefined, ); vi.mock("./providers.js", () => ({ @@ -98,7 +102,7 @@ describe("provider-runtime", () => { }); it("dispatches runtime hooks for the matched provider", async () => { - resolveOwningPluginIdsForProviderMock.mockImplementation((params: { provider?: string }) => { + resolveOwningPluginIdsForProviderMock.mockImplementation((params) => { if (params.provider === "demo") { return ["demo"]; } diff --git a/src/plugins/types.ts b/src/plugins/types.ts index b9b6e801214..0c817a99cf8 100644 --- a/src/plugins/types.ts +++ b/src/plugins/types.ts @@ -849,6 +849,10 @@ export type WebSearchProviderPlugin = { createTool: (ctx: WebSearchProviderContext) => WebSearchProviderToolDefinition | null; }; +export type PluginWebSearchProviderEntry = WebSearchProviderPlugin & { + pluginId: string; +}; + export type OpenClawPluginGatewayMethod = { method: string; handler: GatewayRequestHandler; diff --git a/src/plugins/web-search-providers.ts b/src/plugins/web-search-providers.ts index 8ff3c90c932..97b6d9ee022 100644 --- a/src/plugins/web-search-providers.ts +++ b/src/plugins/web-search-providers.ts @@ -12,7 +12,7 @@ import { } from "./bundled-compat.js"; import { normalizePluginsConfig, resolveEffectiveEnableState } from "./config-state.js"; import type { PluginLoadOptions } from "./loader.js"; -import type { WebSearchProviderPlugin } from "./types.js"; +import type { PluginWebSearchProviderEntry } from "./types.js"; const BUNDLED_WEB_SEARCH_ALLOWLIST_COMPAT_PLUGIN_IDS = [ "brave", @@ -114,7 +114,7 @@ export function resolvePluginWebSearchProviders(params: { workspaceDir?: string; env?: PluginLoadOptions["env"]; bundledAllowlistCompat?: boolean; -}): WebSearchProviderPlugin[] { +}): PluginWebSearchProviderEntry[] { const allowlistCompat = params.bundledAllowlistCompat ? withBundledPluginAllowlistCompat({ config: params.config,