diff --git a/extensions/kilocode/index.ts b/extensions/kilocode/index.ts index 33dc9718021..c423606e552 100644 --- a/extensions/kilocode/index.ts +++ b/extensions/kilocode/index.ts @@ -4,8 +4,8 @@ import { createKilocodeWrapper, isProxyReasoningUnsupported, } from "openclaw/plugin-sdk/provider-stream"; -import { applyKilocodeConfig, KILOCODE_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applyKilocodeConfig, KILOCODE_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildKilocodeProviderWithDiscovery } from "./provider-catalog.js"; const PROVIDER_ID = "kilocode"; diff --git a/extensions/qianfan/index.ts b/extensions/qianfan/index.ts index e8f2f2cc59d..42b5b8a0cb7 100644 --- a/extensions/qianfan/index.ts +++ b/extensions/qianfan/index.ts @@ -1,7 +1,7 @@ import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; -import { applyQianfanConfig, QIANFAN_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applyQianfanConfig, QIANFAN_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildQianfanProvider } from "./provider-catalog.js"; const PROVIDER_ID = "qianfan"; diff --git a/extensions/synthetic/index.ts b/extensions/synthetic/index.ts index 19e7424bfb7..f538dd1fbcb 100644 --- a/extensions/synthetic/index.ts +++ b/extensions/synthetic/index.ts @@ -1,7 +1,7 @@ import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; -import { applySyntheticConfig, SYNTHETIC_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applySyntheticConfig, SYNTHETIC_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSyntheticProvider } from "./provider-catalog.js"; const PROVIDER_ID = "synthetic"; diff --git a/extensions/together/index.ts b/extensions/together/index.ts index 5f6dfb3e7c4..2ae0072ca88 100644 --- a/extensions/together/index.ts +++ b/extensions/together/index.ts @@ -1,7 +1,7 @@ import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; -import { applyTogetherConfig, TOGETHER_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applyTogetherConfig, TOGETHER_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildTogetherProvider } from "./provider-catalog.js"; const PROVIDER_ID = "together"; diff --git a/extensions/venice/index.ts b/extensions/venice/index.ts index d25e8ffb9b8..b67831fe7a9 100644 --- a/extensions/venice/index.ts +++ b/extensions/venice/index.ts @@ -1,7 +1,7 @@ import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; -import { applyVeniceConfig, VENICE_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applyVeniceConfig, VENICE_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildVeniceProvider } from "./provider-catalog.js"; const PROVIDER_ID = "venice"; diff --git a/extensions/vercel-ai-gateway/index.ts b/extensions/vercel-ai-gateway/index.ts index 1f126260321..433f6cee09a 100644 --- a/extensions/vercel-ai-gateway/index.ts +++ b/extensions/vercel-ai-gateway/index.ts @@ -1,7 +1,7 @@ import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; -import { applyVercelAiGatewayConfig, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applyVercelAiGatewayConfig, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildVercelAiGatewayProvider } from "./provider-catalog.js"; const PROVIDER_ID = "vercel-ai-gateway"; diff --git a/extensions/xiaomi/index.ts b/extensions/xiaomi/index.ts index 1badf6e2d9d..2edc1b33b25 100644 --- a/extensions/xiaomi/index.ts +++ b/extensions/xiaomi/index.ts @@ -1,8 +1,8 @@ import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; import { PROVIDER_LABELS } from "openclaw/plugin-sdk/provider-usage"; -import { applyXiaomiConfig, XIAOMI_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildSingleProviderApiKeyCatalog } from "../../src/plugins/provider-catalog.js"; +import { applyXiaomiConfig, XIAOMI_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildXiaomiProvider } from "./provider-catalog.js"; const PROVIDER_ID = "xiaomi"; diff --git a/src/plugins/provider-catalog.test.ts b/src/plugins/provider-catalog.test.ts index e150d021a7b..b8c865dec5d 100644 --- a/src/plugins/provider-catalog.test.ts +++ b/src/plugins/provider-catalog.test.ts @@ -7,6 +7,15 @@ import { } from "./provider-catalog.js"; import type { ProviderCatalogContext } from "./types.js"; +function createProviderConfig(params?: { provider?: string; baseUrl?: string }) { + return { + api: "openai-completions" as const, + provider: params?.provider ?? "test-provider", + baseUrl: params?.baseUrl ?? "https://default.example/v1", + models: [], + }; +} + function createCatalogContext(params: { config?: OpenClawConfig; apiKeys?: Record; @@ -38,7 +47,7 @@ describe("buildSingleProviderApiKeyCatalog", () => { const result = await buildSingleProviderApiKeyCatalog({ ctx: createCatalogContext({}), providerId: "test-provider", - buildProvider: () => ({ api: "openai-completions", provider: "test-provider" }), + buildProvider: () => createProviderConfig(), }); expect(result).toBeNull(); @@ -50,12 +59,14 @@ describe("buildSingleProviderApiKeyCatalog", () => { apiKeys: { "test-provider": "secret-key" }, }), providerId: "test-provider", - buildProvider: async () => ({ api: "openai-completions", provider: "test-provider" }), + buildProvider: async () => createProviderConfig(), }); expect(result).toEqual({ provider: { api: "openai-completions", + baseUrl: "https://default.example/v1", + models: [], provider: "test-provider", apiKey: "secret-key", }, @@ -71,6 +82,7 @@ describe("buildSingleProviderApiKeyCatalog", () => { providers: { "test-provider": { baseUrl: " https://override.example/v1/ ", + models: [], }, }, }, @@ -78,8 +90,7 @@ describe("buildSingleProviderApiKeyCatalog", () => { }), providerId: "test-provider", buildProvider: () => ({ - api: "openai-completions", - provider: "test-provider", + ...createProviderConfig(), baseUrl: "https://default.example/v1", }), allowExplicitBaseUrl: true, @@ -88,8 +99,9 @@ describe("buildSingleProviderApiKeyCatalog", () => { expect(result).toEqual({ provider: { api: "openai-completions", - provider: "test-provider", baseUrl: "https://override.example/v1/", + models: [], + provider: "test-provider", apiKey: "secret-key", }, }); @@ -102,8 +114,8 @@ describe("buildSingleProviderApiKeyCatalog", () => { }), providerId: "test-provider", buildProviders: async () => ({ - alpha: { api: "openai-completions", provider: "alpha" }, - beta: { api: "openai-completions", provider: "beta" }, + alpha: createProviderConfig({ provider: "alpha" }), + beta: createProviderConfig({ provider: "beta" }), }), }); @@ -111,11 +123,15 @@ describe("buildSingleProviderApiKeyCatalog", () => { providers: { alpha: { api: "openai-completions", + baseUrl: "https://default.example/v1", + models: [], provider: "alpha", apiKey: "secret-key", }, beta: { api: "openai-completions", + baseUrl: "https://default.example/v1", + models: [], provider: "beta", apiKey: "secret-key", },