From 3254e961e94366f426309bcb1b346d300ed4cf97 Mon Sep 17 00:00:00 2001 From: Shakker Date: Fri, 24 Apr 2026 04:19:21 +0100 Subject: [PATCH] refactor: expose bundled static provider catalogs --- extensions/arcee/openclaw.plugin.json | 1 + extensions/arcee/provider-discovery.ts | 31 +++++++++++++++++++ extensions/byteplus/openclaw.plugin.json | 1 + extensions/byteplus/provider-discovery.ts | 31 +++++++++++++++++++ extensions/chutes/openclaw.plugin.json | 1 + extensions/chutes/provider-discovery.ts | 17 ++++++++++ extensions/deepseek/openclaw.plugin.json | 1 + extensions/deepseek/provider-discovery.ts | 17 ++++++++++ extensions/kilocode/openclaw.plugin.json | 1 + extensions/kilocode/provider-discovery.ts | 17 ++++++++++ extensions/moonshot/openclaw.plugin.json | 1 + extensions/moonshot/provider-discovery.ts | 17 ++++++++++ extensions/tencent/openclaw.plugin.json | 1 + extensions/tencent/provider-discovery.ts | 17 ++++++++++ .../vercel-ai-gateway/openclaw.plugin.json | 1 + .../vercel-ai-gateway/provider-discovery.ts | 17 ++++++++++ extensions/volcengine/openclaw.plugin.json | 1 + extensions/volcengine/provider-discovery.ts | 31 +++++++++++++++++++ 18 files changed, 204 insertions(+) create mode 100644 extensions/arcee/provider-discovery.ts create mode 100644 extensions/byteplus/provider-discovery.ts create mode 100644 extensions/chutes/provider-discovery.ts create mode 100644 extensions/deepseek/provider-discovery.ts create mode 100644 extensions/kilocode/provider-discovery.ts create mode 100644 extensions/moonshot/provider-discovery.ts create mode 100644 extensions/tencent/provider-discovery.ts create mode 100644 extensions/vercel-ai-gateway/provider-discovery.ts create mode 100644 extensions/volcengine/provider-discovery.ts diff --git a/extensions/arcee/openclaw.plugin.json b/extensions/arcee/openclaw.plugin.json index 03d1c4ec49b..f625eb46a43 100644 --- a/extensions/arcee/openclaw.plugin.json +++ b/extensions/arcee/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "arcee", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["arcee"], "providerAuthEnvVars": { "arcee": ["ARCEEAI_API_KEY"] diff --git a/extensions/arcee/provider-discovery.ts b/extensions/arcee/provider-discovery.ts new file mode 100644 index 00000000000..4b0543d0d6b --- /dev/null +++ b/extensions/arcee/provider-discovery.ts @@ -0,0 +1,31 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildArceeOpenRouterProvider, buildArceeProvider } from "./provider-catalog.js"; + +export const arceeProviderDiscovery: ProviderPlugin[] = [ + { + id: "arcee", + label: "Arcee AI", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildArceeProvider(), + }), + }, + }, + { + id: "arcee-openrouter", + label: "Arcee AI via OpenRouter", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildArceeOpenRouterProvider(), + }), + }, + }, +]; + +export default arceeProviderDiscovery; diff --git a/extensions/byteplus/openclaw.plugin.json b/extensions/byteplus/openclaw.plugin.json index 961c36e588e..490fbf9b941 100644 --- a/extensions/byteplus/openclaw.plugin.json +++ b/extensions/byteplus/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "byteplus", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["byteplus", "byteplus-plan"], "providerAuthEnvVars": { "byteplus": ["BYTEPLUS_API_KEY"] diff --git a/extensions/byteplus/provider-discovery.ts b/extensions/byteplus/provider-discovery.ts new file mode 100644 index 00000000000..c761f07d887 --- /dev/null +++ b/extensions/byteplus/provider-discovery.ts @@ -0,0 +1,31 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildBytePlusCodingProvider, buildBytePlusProvider } from "./provider-catalog.js"; + +export const bytePlusProviderDiscovery: ProviderPlugin[] = [ + { + id: "byteplus", + label: "BytePlus", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildBytePlusProvider(), + }), + }, + }, + { + id: "byteplus-plan", + label: "BytePlus Plan", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildBytePlusCodingProvider(), + }), + }, + }, +]; + +export default bytePlusProviderDiscovery; diff --git a/extensions/chutes/openclaw.plugin.json b/extensions/chutes/openclaw.plugin.json index 26174f31b3a..6d7775ed13e 100644 --- a/extensions/chutes/openclaw.plugin.json +++ b/extensions/chutes/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "chutes", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["chutes"], "providerAuthEnvVars": { "chutes": ["CHUTES_API_KEY", "CHUTES_OAUTH_TOKEN"] diff --git a/extensions/chutes/provider-discovery.ts b/extensions/chutes/provider-discovery.ts new file mode 100644 index 00000000000..5587291343e --- /dev/null +++ b/extensions/chutes/provider-discovery.ts @@ -0,0 +1,17 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildStaticChutesProvider } from "./provider-catalog.js"; + +export const chutesProviderDiscovery: ProviderPlugin = { + id: "chutes", + label: "Chutes", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "profile", + run: async () => ({ + provider: buildStaticChutesProvider(), + }), + }, +}; + +export default chutesProviderDiscovery; diff --git a/extensions/deepseek/openclaw.plugin.json b/extensions/deepseek/openclaw.plugin.json index 8981657c4e5..7acb4ae1c95 100644 --- a/extensions/deepseek/openclaw.plugin.json +++ b/extensions/deepseek/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "deepseek", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["deepseek"], "providerAuthEnvVars": { "deepseek": ["DEEPSEEK_API_KEY"] diff --git a/extensions/deepseek/provider-discovery.ts b/extensions/deepseek/provider-discovery.ts new file mode 100644 index 00000000000..27b17275089 --- /dev/null +++ b/extensions/deepseek/provider-discovery.ts @@ -0,0 +1,17 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildDeepSeekProvider } from "./provider-catalog.js"; + +export const deepSeekProviderDiscovery: ProviderPlugin = { + id: "deepseek", + label: "DeepSeek", + docsPath: "/providers/deepseek", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildDeepSeekProvider(), + }), + }, +}; + +export default deepSeekProviderDiscovery; diff --git a/extensions/kilocode/openclaw.plugin.json b/extensions/kilocode/openclaw.plugin.json index ef3d29a20df..01f1a43b21d 100644 --- a/extensions/kilocode/openclaw.plugin.json +++ b/extensions/kilocode/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "kilocode", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["kilocode"], "providerAuthEnvVars": { "kilocode": ["KILOCODE_API_KEY"] diff --git a/extensions/kilocode/provider-discovery.ts b/extensions/kilocode/provider-discovery.ts new file mode 100644 index 00000000000..806200f7398 --- /dev/null +++ b/extensions/kilocode/provider-discovery.ts @@ -0,0 +1,17 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildKilocodeProvider } from "./provider-catalog.js"; + +export const kilocodeProviderDiscovery: ProviderPlugin = { + id: "kilocode", + label: "Kilo Code", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildKilocodeProvider(), + }), + }, +}; + +export default kilocodeProviderDiscovery; diff --git a/extensions/moonshot/openclaw.plugin.json b/extensions/moonshot/openclaw.plugin.json index db2af85de0e..71c7b1d149c 100644 --- a/extensions/moonshot/openclaw.plugin.json +++ b/extensions/moonshot/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "moonshot", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["moonshot"], "providerAuthEnvVars": { "moonshot": ["MOONSHOT_API_KEY", "KIMI_API_KEY"] diff --git a/extensions/moonshot/provider-discovery.ts b/extensions/moonshot/provider-discovery.ts new file mode 100644 index 00000000000..c9590b13144 --- /dev/null +++ b/extensions/moonshot/provider-discovery.ts @@ -0,0 +1,17 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildMoonshotProvider } from "./provider-catalog.js"; + +export const moonshotProviderDiscovery: ProviderPlugin = { + id: "moonshot", + label: "Moonshot", + docsPath: "/providers/moonshot", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildMoonshotProvider(), + }), + }, +}; + +export default moonshotProviderDiscovery; diff --git a/extensions/tencent/openclaw.plugin.json b/extensions/tencent/openclaw.plugin.json index ddf0791250c..197c209046d 100644 --- a/extensions/tencent/openclaw.plugin.json +++ b/extensions/tencent/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "tencent", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["tencent-tokenhub"], "providerAuthEnvVars": { "tencent-tokenhub": ["TOKENHUB_API_KEY"] diff --git a/extensions/tencent/provider-discovery.ts b/extensions/tencent/provider-discovery.ts new file mode 100644 index 00000000000..ae8689c3920 --- /dev/null +++ b/extensions/tencent/provider-discovery.ts @@ -0,0 +1,17 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildTokenHubProvider } from "./provider-catalog.js"; + +export const tencentProviderDiscovery: ProviderPlugin = { + id: "tencent-tokenhub", + label: "Tencent TokenHub", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildTokenHubProvider(), + }), + }, +}; + +export default tencentProviderDiscovery; diff --git a/extensions/vercel-ai-gateway/openclaw.plugin.json b/extensions/vercel-ai-gateway/openclaw.plugin.json index 865c7d9765c..a4b576ffba1 100644 --- a/extensions/vercel-ai-gateway/openclaw.plugin.json +++ b/extensions/vercel-ai-gateway/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "vercel-ai-gateway", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["vercel-ai-gateway"], "providerAuthEnvVars": { "vercel-ai-gateway": ["AI_GATEWAY_API_KEY"] diff --git a/extensions/vercel-ai-gateway/provider-discovery.ts b/extensions/vercel-ai-gateway/provider-discovery.ts new file mode 100644 index 00000000000..658646ae3bf --- /dev/null +++ b/extensions/vercel-ai-gateway/provider-discovery.ts @@ -0,0 +1,17 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildStaticVercelAiGatewayProvider } from "./provider-catalog.js"; + +export const vercelAiGatewayProviderDiscovery: ProviderPlugin = { + id: "vercel-ai-gateway", + label: "Vercel AI Gateway", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildStaticVercelAiGatewayProvider(), + }), + }, +}; + +export default vercelAiGatewayProviderDiscovery; diff --git a/extensions/volcengine/openclaw.plugin.json b/extensions/volcengine/openclaw.plugin.json index 98ce4c256af..e64f0a4048c 100644 --- a/extensions/volcengine/openclaw.plugin.json +++ b/extensions/volcengine/openclaw.plugin.json @@ -1,6 +1,7 @@ { "id": "volcengine", "enabledByDefault": true, + "providerDiscoveryEntry": "./provider-discovery.ts", "providers": ["volcengine", "volcengine-plan"], "providerAuthEnvVars": { "volcengine": ["VOLCANO_ENGINE_API_KEY"] diff --git a/extensions/volcengine/provider-discovery.ts b/extensions/volcengine/provider-discovery.ts new file mode 100644 index 00000000000..14f878c4bd9 --- /dev/null +++ b/extensions/volcengine/provider-discovery.ts @@ -0,0 +1,31 @@ +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; +import { buildDoubaoCodingProvider, buildDoubaoProvider } from "./provider-catalog.js"; + +export const volcengineProviderDiscovery: ProviderPlugin[] = [ + { + id: "volcengine", + label: "Volcengine", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildDoubaoProvider(), + }), + }, + }, + { + id: "volcengine-plan", + label: "Volcengine Plan", + docsPath: "/providers/models", + auth: [], + staticCatalog: { + order: "simple", + run: async () => ({ + provider: buildDoubaoCodingProvider(), + }), + }, + }, +]; + +export default volcengineProviderDiscovery;