diff --git a/extensions/amazon-bedrock/discovery.ts b/extensions/amazon-bedrock/discovery.ts index a0285e66d10..939ee41467e 100644 --- a/extensions/amazon-bedrock/discovery.ts +++ b/extensions/amazon-bedrock/discovery.ts @@ -9,7 +9,7 @@ import type { BedrockDiscoveryConfig, ModelDefinitionConfig, ModelProviderConfig, -} from "openclaw/plugin-sdk/provider-models"; +} from "openclaw/plugin-sdk/provider-model-shared"; const log = createSubsystemLogger("bedrock-discovery"); diff --git a/extensions/anthropic-vertex/api.ts b/extensions/anthropic-vertex/api.ts index fea76564159..1d8f5363f11 100644 --- a/extensions/anthropic-vertex/api.ts +++ b/extensions/anthropic-vertex/api.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; export { ANTHROPIC_VERTEX_DEFAULT_MODEL_ID, buildAnthropicVertexProvider, diff --git a/extensions/anthropic-vertex/provider-catalog.ts b/extensions/anthropic-vertex/provider-catalog.ts index 33194cf5770..6af23669e22 100644 --- a/extensions/anthropic-vertex/provider-catalog.ts +++ b/extensions/anthropic-vertex/provider-catalog.ts @@ -1,7 +1,7 @@ import type { ModelDefinitionConfig, ModelProviderConfig, -} from "openclaw/plugin-sdk/provider-models"; +} from "openclaw/plugin-sdk/provider-model-shared"; import { resolveAnthropicVertexRegion } from "./region.js"; export const ANTHROPIC_VERTEX_DEFAULT_MODEL_ID = "claude-sonnet-4-6"; const ANTHROPIC_VERTEX_DEFAULT_CONTEXT_WINDOW = 1_000_000; diff --git a/extensions/anthropic/index.ts b/extensions/anthropic/index.ts index 18adeb7c02e..c659c64feee 100644 --- a/extensions/anthropic/index.ts +++ b/extensions/anthropic/index.ts @@ -25,7 +25,7 @@ import { validateApiKeyInput, } from "openclaw/plugin-sdk/provider-auth"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth-api-key"; -import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-models"; +import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-model-shared"; import { fetchClaudeUsage } from "openclaw/plugin-sdk/provider-usage"; import { buildAnthropicCliBackend } from "./cli-backend.js"; import { buildAnthropicCliMigrationResult, hasClaudeCliAuth } from "./cli-migration.js"; diff --git a/extensions/byteplus/models.ts b/extensions/byteplus/models.ts index 9db1326fdd7..b7a8f7c5170 100644 --- a/extensions/byteplus/models.ts +++ b/extensions/byteplus/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; type VolcModelCatalogEntry = { id: string; diff --git a/extensions/byteplus/provider-catalog.ts b/extensions/byteplus/provider-catalog.ts index ac3294f9592..0e4b8f51a27 100644 --- a/extensions/byteplus/provider-catalog.ts +++ b/extensions/byteplus/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildBytePlusModelDefinition, BYTEPLUS_BASE_URL, diff --git a/extensions/chutes/models.ts b/extensions/chutes/models.ts index 44d84c0ef5d..16946310862 100644 --- a/extensions/chutes/models.ts +++ b/extensions/chutes/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env"; const log = createSubsystemLogger("chutes-models"); diff --git a/extensions/chutes/provider-catalog.ts b/extensions/chutes/provider-catalog.ts index d77285c4a6b..cea9bda63b5 100644 --- a/extensions/chutes/provider-catalog.ts +++ b/extensions/chutes/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { CHUTES_BASE_URL, CHUTES_MODEL_CATALOG, diff --git a/extensions/cloudflare-ai-gateway/models.ts b/extensions/cloudflare-ai-gateway/models.ts index 9be2038ead5..80efea10ecf 100644 --- a/extensions/cloudflare-ai-gateway/models.ts +++ b/extensions/cloudflare-ai-gateway/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const CLOUDFLARE_AI_GATEWAY_PROVIDER_ID = "cloudflare-ai-gateway"; export const CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_ID = "claude-sonnet-4-5"; diff --git a/extensions/deepseek/models.ts b/extensions/deepseek/models.ts index 269b154172c..377b67c6a6a 100644 --- a/extensions/deepseek/models.ts +++ b/extensions/deepseek/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const DEEPSEEK_BASE_URL = "https://api.deepseek.com"; diff --git a/extensions/deepseek/provider-catalog.ts b/extensions/deepseek/provider-catalog.ts index c1fc8ec1de4..d3e3f6b3b07 100644 --- a/extensions/deepseek/provider-catalog.ts +++ b/extensions/deepseek/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildDeepSeekModelDefinition, DEEPSEEK_BASE_URL, DEEPSEEK_MODEL_CATALOG } from "./api.js"; export function buildDeepSeekProvider(): ModelProviderConfig { diff --git a/extensions/github-copilot/models-defaults.ts b/extensions/github-copilot/models-defaults.ts index 48ac7a29496..299f75b841a 100644 --- a/extensions/github-copilot/models-defaults.ts +++ b/extensions/github-copilot/models-defaults.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; const DEFAULT_CONTEXT_WINDOW = 128_000; const DEFAULT_MAX_TOKENS = 8192; diff --git a/extensions/github-copilot/models.ts b/extensions/github-copilot/models.ts index 227e7959d59..5aeaa9d3731 100644 --- a/extensions/github-copilot/models.ts +++ b/extensions/github-copilot/models.ts @@ -2,7 +2,7 @@ import type { ProviderResolveDynamicModelContext, ProviderRuntimeModel, } from "openclaw/plugin-sdk/core"; -import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-models"; +import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-model-shared"; export const PROVIDER_ID = "github-copilot"; const CODEX_GPT_54_MODEL_ID = "gpt-5.4"; diff --git a/extensions/google/api.ts b/extensions/google/api.ts index d81fd3653cc..41826f0c0f9 100644 --- a/extensions/google/api.ts +++ b/extensions/google/api.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { applyAgentDefaultModelPrimary, type OpenClawConfig, diff --git a/extensions/google/index.ts b/extensions/google/index.ts index 1e7d00def05..16acd0da509 100644 --- a/extensions/google/index.ts +++ b/extensions/google/index.ts @@ -7,7 +7,7 @@ import { type ProviderFetchUsageSnapshotContext, } from "openclaw/plugin-sdk/plugin-entry"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth-api-key"; -import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-models"; +import type { ProviderPlugin } from "openclaw/plugin-sdk/provider-model-shared"; import { createGoogleThinkingPayloadWrapper } from "openclaw/plugin-sdk/provider-stream"; import { GOOGLE_GEMINI_DEFAULT_MODEL, applyGoogleGeminiModelDefault } from "./api.js"; import { buildGoogleGeminiCliBackend } from "./cli-backend.js"; diff --git a/extensions/google/provider-models.ts b/extensions/google/provider-models.ts index e8bc88816a8..9720c25de8c 100644 --- a/extensions/google/provider-models.ts +++ b/extensions/google/provider-models.ts @@ -2,7 +2,7 @@ import type { ProviderResolveDynamicModelContext, ProviderRuntimeModel, } from "openclaw/plugin-sdk/plugin-entry"; -import { cloneFirstTemplateModel } from "openclaw/plugin-sdk/provider-models"; +import { cloneFirstTemplateModel } from "openclaw/plugin-sdk/provider-model-shared"; const GEMINI_3_1_PRO_PREFIX = "gemini-3.1-pro"; const GEMINI_3_1_FLASH_PREFIX = "gemini-3.1-flash"; diff --git a/extensions/huggingface/models.ts b/extensions/huggingface/models.ts index e8ac6f6a9e4..4775151e1a9 100644 --- a/extensions/huggingface/models.ts +++ b/extensions/huggingface/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const HUGGINGFACE_BASE_URL = "https://router.huggingface.co/v1"; export const HUGGINGFACE_POLICY_SUFFIXES = ["cheapest", "fastest"] as const; diff --git a/extensions/huggingface/provider-catalog.ts b/extensions/huggingface/provider-catalog.ts index 0f778279d78..c27cf5eb97d 100644 --- a/extensions/huggingface/provider-catalog.ts +++ b/extensions/huggingface/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildHuggingfaceModelDefinition, discoverHuggingfaceModels, diff --git a/extensions/kilocode/provider-catalog.ts b/extensions/kilocode/provider-catalog.ts index c796a07f44c..4f425fb9bc2 100644 --- a/extensions/kilocode/provider-catalog.ts +++ b/extensions/kilocode/provider-catalog.ts @@ -1,4 +1,4 @@ -import { type ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import { type ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { discoverKilocodeModels, KILOCODE_BASE_URL as LOCAL_KILOCODE_BASE_URL, diff --git a/extensions/kilocode/provider-models.ts b/extensions/kilocode/provider-models.ts index a71f6767906..0436396fdc8 100644 --- a/extensions/kilocode/provider-models.ts +++ b/extensions/kilocode/provider-models.ts @@ -1,5 +1,5 @@ -import type { KilocodeModelCatalogEntry } from "openclaw/plugin-sdk/provider-models"; -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { KilocodeModelCatalogEntry } from "openclaw/plugin-sdk/provider-model-shared"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env"; const log = createSubsystemLogger("kilocode-models"); diff --git a/extensions/kilocode/shared.ts b/extensions/kilocode/shared.ts index 64c7283a50d..a6ab80aa805 100644 --- a/extensions/kilocode/shared.ts +++ b/extensions/kilocode/shared.ts @@ -9,4 +9,4 @@ export { KILOCODE_MODEL_CATALOG, } from "./provider-models.js"; -export type { KilocodeModelCatalogEntry } from "openclaw/plugin-sdk/provider-models"; +export type { KilocodeModelCatalogEntry } from "openclaw/plugin-sdk/provider-model-shared"; diff --git a/extensions/kimi-coding/provider-catalog.ts b/extensions/kimi-coding/provider-catalog.ts index 5fc27495c76..caf0536651b 100644 --- a/extensions/kimi-coding/provider-catalog.ts +++ b/extensions/kimi-coding/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const KIMI_BASE_URL = "https://api.kimi.com/coding/"; const KIMI_CODING_USER_AGENT = "claude-code/0.1.0"; diff --git a/extensions/litellm/provider-catalog.ts b/extensions/litellm/provider-catalog.ts index 6136cfaafca..dc304b8f9ef 100644 --- a/extensions/litellm/provider-catalog.ts +++ b/extensions/litellm/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildLitellmModelDefinition, LITELLM_BASE_URL } from "./onboard.js"; export function buildLitellmProvider(): ModelProviderConfig { diff --git a/extensions/microsoft-foundry/provider.ts b/extensions/microsoft-foundry/provider.ts index 481e6cef390..aa7d4013b38 100644 --- a/extensions/microsoft-foundry/provider.ts +++ b/extensions/microsoft-foundry/provider.ts @@ -1,5 +1,8 @@ import type { ProviderNormalizeResolvedModelContext } from "openclaw/plugin-sdk/core"; -import type { ModelProviderConfig, ProviderPlugin } from "openclaw/plugin-sdk/provider-models"; +import type { + ModelProviderConfig, + ProviderPlugin, +} from "openclaw/plugin-sdk/provider-model-shared"; import { apiKeyAuthMethod, entraIdAuthMethod } from "./auth.js"; import { prepareFoundryRuntimeAuth } from "./runtime.js"; import { diff --git a/extensions/microsoft-foundry/shared.ts b/extensions/microsoft-foundry/shared.ts index 31058b50dcb..bf1cbae35fb 100644 --- a/extensions/microsoft-foundry/shared.ts +++ b/extensions/microsoft-foundry/shared.ts @@ -4,7 +4,7 @@ import { type ProviderAuthResult, type SecretInput, } from "openclaw/plugin-sdk/provider-auth"; -import type { ModelApi, ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelApi, ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const PROVIDER_ID = "microsoft-foundry"; export const DEFAULT_API = "openai-completions"; diff --git a/extensions/minimax/model-definitions.ts b/extensions/minimax/model-definitions.ts index bc78383ae9a..718dea466d1 100644 --- a/extensions/minimax/model-definitions.ts +++ b/extensions/minimax/model-definitions.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG } from "./provider-models.js"; export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1"; diff --git a/extensions/minimax/provider-catalog.ts b/extensions/minimax/provider-catalog.ts index 527e8448e08..1ef5d931740 100644 --- a/extensions/minimax/provider-catalog.ts +++ b/extensions/minimax/provider-catalog.ts @@ -1,7 +1,7 @@ import type { ModelDefinitionConfig, ModelProviderConfig, -} from "openclaw/plugin-sdk/provider-models"; +} from "openclaw/plugin-sdk/provider-model-shared"; import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG, diff --git a/extensions/minimax/provider-models.ts b/extensions/minimax/provider-models.ts index 7f4a0dde228..b4a026deda5 100644 --- a/extensions/minimax/provider-models.ts +++ b/extensions/minimax/provider-models.ts @@ -1,4 +1,4 @@ -import { matchesExactOrPrefix } from "openclaw/plugin-sdk/provider-models"; +import { matchesExactOrPrefix } from "openclaw/plugin-sdk/provider-model-shared"; export const MINIMAX_DEFAULT_MODEL_ID = "MiniMax-M2.7"; export const MINIMAX_DEFAULT_MODEL_REF = `minimax/${MINIMAX_DEFAULT_MODEL_ID}`; diff --git a/extensions/mistral/model-definitions.ts b/extensions/mistral/model-definitions.ts index cf120a0ee4e..c0f7eae3471 100644 --- a/extensions/mistral/model-definitions.ts +++ b/extensions/mistral/model-definitions.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const MISTRAL_BASE_URL = "https://api.mistral.ai/v1"; export const MISTRAL_DEFAULT_MODEL_ID = "mistral-large-latest"; diff --git a/extensions/mistral/provider-catalog.ts b/extensions/mistral/provider-catalog.ts index 9ae61466337..17c595d97ee 100644 --- a/extensions/mistral/provider-catalog.ts +++ b/extensions/mistral/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildMistralCatalogModels, MISTRAL_BASE_URL } from "./model-definitions.js"; export function buildMistralProvider(): ModelProviderConfig { diff --git a/extensions/modelstudio/models.ts b/extensions/modelstudio/models.ts index 00c0ae5f5ec..e742da097da 100644 --- a/extensions/modelstudio/models.ts +++ b/extensions/modelstudio/models.ts @@ -1,7 +1,7 @@ import type { ModelDefinitionConfig, ModelProviderConfig, -} from "openclaw/plugin-sdk/provider-models"; +} from "openclaw/plugin-sdk/provider-model-shared"; export const MODELSTUDIO_BASE_URL = "https://coding-intl.dashscope.aliyuncs.com/v1"; export const MODELSTUDIO_GLOBAL_BASE_URL = MODELSTUDIO_BASE_URL; diff --git a/extensions/modelstudio/provider-catalog.ts b/extensions/modelstudio/provider-catalog.ts index c82b24b4b5b..915b4a289db 100644 --- a/extensions/modelstudio/provider-catalog.ts +++ b/extensions/modelstudio/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { MODELSTUDIO_BASE_URL, MODELSTUDIO_MODEL_CATALOG } from "./models.js"; export function buildModelStudioProvider(): ModelProviderConfig { diff --git a/extensions/moonshot/provider-catalog.ts b/extensions/moonshot/provider-catalog.ts index 12718503e1a..8cbbec462d4 100644 --- a/extensions/moonshot/provider-catalog.ts +++ b/extensions/moonshot/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const MOONSHOT_BASE_URL = "https://api.moonshot.ai/v1"; export const MOONSHOT_CN_BASE_URL = "https://api.moonshot.cn/v1"; diff --git a/extensions/nvidia/provider-catalog.ts b/extensions/nvidia/provider-catalog.ts index ce66986e20a..75f88bad8f0 100644 --- a/extensions/nvidia/provider-catalog.ts +++ b/extensions/nvidia/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; const NVIDIA_BASE_URL = "https://integrate.api.nvidia.com/v1"; const NVIDIA_DEFAULT_MODEL_ID = "nvidia/llama-3.1-nemotron-70b-instruct"; diff --git a/extensions/ollama/src/stream.ts b/extensions/ollama/src/stream.ts index 133b15d5eee..5da8901ac67 100644 --- a/extensions/ollama/src/stream.ts +++ b/extensions/ollama/src/stream.ts @@ -15,7 +15,10 @@ import type { ProviderRuntimeModel, ProviderWrapStreamFnContext, } from "openclaw/plugin-sdk/plugin-entry"; -import { DEFAULT_CONTEXT_TOKENS, normalizeProviderId } from "openclaw/plugin-sdk/provider-models"; +import { + DEFAULT_CONTEXT_TOKENS, + normalizeProviderId, +} from "openclaw/plugin-sdk/provider-model-shared"; import { createMoonshotThinkingWrapper, resolveMoonshotThinkingType, diff --git a/extensions/openai/openai-codex-catalog.ts b/extensions/openai/openai-codex-catalog.ts index 11c1d564986..def11b9c433 100644 --- a/extensions/openai/openai-codex-catalog.ts +++ b/extensions/openai/openai-codex-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const OPENAI_CODEX_BASE_URL = "https://chatgpt.com/backend-api"; diff --git a/extensions/openai/openai-codex-provider.ts b/extensions/openai/openai-codex-provider.ts index 97e82b6277f..2d2e876c6cd 100644 --- a/extensions/openai/openai-codex-provider.ts +++ b/extensions/openai/openai-codex-provider.ts @@ -16,7 +16,7 @@ import { normalizeModelCompat, normalizeProviderId, type ProviderPlugin, -} from "openclaw/plugin-sdk/provider-models"; +} from "openclaw/plugin-sdk/provider-model-shared"; import { createOpenAIAttributionHeadersWrapper } from "openclaw/plugin-sdk/provider-stream"; import { fetchCodexUsage } from "openclaw/plugin-sdk/provider-usage"; import { OPENAI_CODEX_DEFAULT_MODEL } from "./default-models.js"; diff --git a/extensions/openai/openai-provider.ts b/extensions/openai/openai-provider.ts index b2ed4e85e77..41c8db5c01a 100644 --- a/extensions/openai/openai-provider.ts +++ b/extensions/openai/openai-provider.ts @@ -8,7 +8,7 @@ import { normalizeModelCompat, normalizeProviderId, type ProviderPlugin, -} from "openclaw/plugin-sdk/provider-models"; +} from "openclaw/plugin-sdk/provider-model-shared"; import { createOpenAIAttributionHeadersWrapper, createOpenAIDefaultTransportWrapper, diff --git a/extensions/openai/shared.ts b/extensions/openai/shared.ts index b0b8a2ef4b0..129628a0745 100644 --- a/extensions/openai/shared.ts +++ b/extensions/openai/shared.ts @@ -1,4 +1,4 @@ -import { cloneFirstTemplateModel } from "openclaw/plugin-sdk/provider-models"; +import { cloneFirstTemplateModel } from "openclaw/plugin-sdk/provider-model-shared"; export function findCatalogTemplate(params: { entries: ReadonlyArray<{ provider: string; id: string }>; diff --git a/extensions/openrouter/index.ts b/extensions/openrouter/index.ts index 9b5fceaa853..b3227a65a30 100644 --- a/extensions/openrouter/index.ts +++ b/extensions/openrouter/index.ts @@ -5,7 +5,7 @@ import { type ProviderRuntimeModel, } from "openclaw/plugin-sdk/plugin-entry"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth-api-key"; -import { DEFAULT_CONTEXT_TOKENS } from "openclaw/plugin-sdk/provider-models"; +import { DEFAULT_CONTEXT_TOKENS } from "openclaw/plugin-sdk/provider-model-shared"; import { getOpenRouterModelCapabilities, loadOpenRouterModelCapabilities, diff --git a/extensions/openrouter/provider-catalog.ts b/extensions/openrouter/provider-catalog.ts index 52be862e34d..0488f0a1366 100644 --- a/extensions/openrouter/provider-catalog.ts +++ b/extensions/openrouter/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"; const OPENROUTER_DEFAULT_MODEL_ID = "auto"; diff --git a/extensions/qianfan/provider-catalog.ts b/extensions/qianfan/provider-catalog.ts index c8aee208a8e..da676381500 100644 --- a/extensions/qianfan/provider-catalog.ts +++ b/extensions/qianfan/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const QIANFAN_BASE_URL = "https://qianfan.baidubce.com/v2"; export const QIANFAN_DEFAULT_MODEL_ID = "deepseek-v3.2"; diff --git a/extensions/synthetic/models.ts b/extensions/synthetic/models.ts index 2e3a08f7dbd..23dc251cb59 100644 --- a/extensions/synthetic/models.ts +++ b/extensions/synthetic/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const SYNTHETIC_BASE_URL = "https://api.synthetic.new/anthropic"; export const SYNTHETIC_DEFAULT_MODEL_ID = "hf:MiniMaxAI/MiniMax-M2.5"; diff --git a/extensions/synthetic/provider-catalog.ts b/extensions/synthetic/provider-catalog.ts index 6f3efa75ade..91499b71efc 100644 --- a/extensions/synthetic/provider-catalog.ts +++ b/extensions/synthetic/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildSyntheticModelDefinition, SYNTHETIC_BASE_URL, diff --git a/extensions/together/models.ts b/extensions/together/models.ts index 70e62956803..a240598028c 100644 --- a/extensions/together/models.ts +++ b/extensions/together/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const TOGETHER_BASE_URL = "https://api.together.xyz/v1"; diff --git a/extensions/together/provider-catalog.ts b/extensions/together/provider-catalog.ts index 8782b911c90..dbfaafdb93a 100644 --- a/extensions/together/provider-catalog.ts +++ b/extensions/together/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildTogetherModelDefinition, TOGETHER_BASE_URL, TOGETHER_MODEL_CATALOG } from "./api.js"; export function buildTogetherProvider(): ModelProviderConfig { diff --git a/extensions/venice/models.ts b/extensions/venice/models.ts index 79e57650a04..5a41096ce9b 100644 --- a/extensions/venice/models.ts +++ b/extensions/venice/models.ts @@ -1,5 +1,5 @@ import { retryAsync } from "openclaw/plugin-sdk/infra-runtime"; -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env"; const log = createSubsystemLogger("venice-models"); diff --git a/extensions/venice/provider-catalog.ts b/extensions/venice/provider-catalog.ts index 662e1df861e..1bd7fec2f20 100644 --- a/extensions/venice/provider-catalog.ts +++ b/extensions/venice/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { discoverVeniceModels, VENICE_BASE_URL } from "./api.js"; export async function buildVeniceProvider(): Promise { diff --git a/extensions/vercel-ai-gateway/models.ts b/extensions/vercel-ai-gateway/models.ts index a8c2cd46fc8..9e3eded2ce4 100644 --- a/extensions/vercel-ai-gateway/models.ts +++ b/extensions/vercel-ai-gateway/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env"; export const VERCEL_AI_GATEWAY_PROVIDER_ID = "vercel-ai-gateway"; diff --git a/extensions/vercel-ai-gateway/provider-catalog.ts b/extensions/vercel-ai-gateway/provider-catalog.ts index 0ffac509b51..deb7c571174 100644 --- a/extensions/vercel-ai-gateway/provider-catalog.ts +++ b/extensions/vercel-ai-gateway/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { discoverVercelAiGatewayModels, VERCEL_AI_GATEWAY_BASE_URL } from "./api.js"; export async function buildVercelAiGatewayProvider(): Promise { diff --git a/extensions/volcengine/models.ts b/extensions/volcengine/models.ts index 3e1263b2ef6..9d24dcb186b 100644 --- a/extensions/volcengine/models.ts +++ b/extensions/volcengine/models.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; type VolcModelCatalogEntry = { id: string; diff --git a/extensions/volcengine/provider-catalog.ts b/extensions/volcengine/provider-catalog.ts index 23ab6c24510..33825c0b192 100644 --- a/extensions/volcengine/provider-catalog.ts +++ b/extensions/volcengine/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildDoubaoModelDefinition, DOUBAO_BASE_URL, diff --git a/extensions/xai/model-definitions.ts b/extensions/xai/model-definitions.ts index 56187457200..628f59a2583 100644 --- a/extensions/xai/model-definitions.ts +++ b/extensions/xai/model-definitions.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const XAI_BASE_URL = "https://api.x.ai/v1"; export const XAI_DEFAULT_MODEL_ID = "grok-4"; diff --git a/extensions/xai/provider-catalog.ts b/extensions/xai/provider-catalog.ts index ee56e905f1e..c97b36ec48e 100644 --- a/extensions/xai/provider-catalog.ts +++ b/extensions/xai/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; import { buildXaiCatalogModels, XAI_BASE_URL } from "./model-definitions.js"; export function buildXaiProvider( diff --git a/extensions/xai/provider-models.ts b/extensions/xai/provider-models.ts index 1195bf789b2..313b24061ca 100644 --- a/extensions/xai/provider-models.ts +++ b/extensions/xai/provider-models.ts @@ -2,7 +2,7 @@ import type { ProviderResolveDynamicModelContext, ProviderRuntimeModel, } from "openclaw/plugin-sdk/core"; -import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-models"; +import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-model-shared"; import { applyXaiModelCompat } from "./api.js"; import { resolveXaiCatalogEntry, XAI_BASE_URL } from "./model-definitions.js"; diff --git a/extensions/xiaomi/provider-catalog.ts b/extensions/xiaomi/provider-catalog.ts index 53da8f2c00a..bc1167f5d30 100644 --- a/extensions/xiaomi/provider-catalog.ts +++ b/extensions/xiaomi/provider-catalog.ts @@ -1,4 +1,4 @@ -import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; const XIAOMI_BASE_URL = "https://api.xiaomimimo.com/v1"; export const XIAOMI_DEFAULT_MODEL_ID = "mimo-v2-flash"; diff --git a/extensions/zai/index.ts b/extensions/zai/index.ts index fc87031b9b0..92a2934e1cc 100644 --- a/extensions/zai/index.ts +++ b/extensions/zai/index.ts @@ -16,7 +16,10 @@ import { upsertAuthProfile, validateApiKeyInput, } from "openclaw/plugin-sdk/provider-auth-api-key"; -import { DEFAULT_CONTEXT_TOKENS, normalizeModelCompat } from "openclaw/plugin-sdk/provider-models"; +import { + DEFAULT_CONTEXT_TOKENS, + normalizeModelCompat, +} from "openclaw/plugin-sdk/provider-model-shared"; import { createZaiToolStreamWrapper } from "openclaw/plugin-sdk/provider-stream"; import { fetchZaiUsage, resolveLegacyPiAgentAccessToken } from "openclaw/plugin-sdk/provider-usage"; import { detectZaiEndpoint, type ZaiEndpointId } from "./detect.js"; diff --git a/extensions/zai/model-definitions.ts b/extensions/zai/model-definitions.ts index ce59be40f75..bc34bbb74af 100644 --- a/extensions/zai/model-definitions.ts +++ b/extensions/zai/model-definitions.ts @@ -1,4 +1,4 @@ -import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models"; +import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; export const ZAI_CODING_GLOBAL_BASE_URL = "https://api.z.ai/api/coding/paas/v4"; export const ZAI_CODING_CN_BASE_URL = "https://open.bigmodel.cn/api/coding/paas/v4"; diff --git a/package.json b/package.json index 2ea8aba53ad..ce188e91cd1 100644 --- a/package.json +++ b/package.json @@ -148,6 +148,10 @@ "types": "./dist/plugin-sdk/thread-bindings-runtime.d.ts", "default": "./dist/plugin-sdk/thread-bindings-runtime.js" }, + "./plugin-sdk/together": { + "types": "./dist/plugin-sdk/together.d.ts", + "default": "./dist/plugin-sdk/together.js" + }, "./plugin-sdk/text-runtime": { "types": "./dist/plugin-sdk/text-runtime.d.ts", "default": "./dist/plugin-sdk/text-runtime.js" @@ -712,6 +716,10 @@ "types": "./dist/plugin-sdk/provider-google.d.ts", "default": "./dist/plugin-sdk/provider-google.js" }, + "./plugin-sdk/provider-model-shared": { + "types": "./dist/plugin-sdk/provider-model-shared.d.ts", + "default": "./dist/plugin-sdk/provider-model-shared.js" + }, "./plugin-sdk/provider-models": { "types": "./dist/plugin-sdk/provider-models.d.ts", "default": "./dist/plugin-sdk/provider-models.js" diff --git a/scripts/lib/plugin-sdk-entrypoints.json b/scripts/lib/plugin-sdk-entrypoints.json index 632c6a91404..db8bc85450f 100644 --- a/scripts/lib/plugin-sdk-entrypoints.json +++ b/scripts/lib/plugin-sdk-entrypoints.json @@ -27,6 +27,7 @@ "matrix-runtime-heavy", "matrix-runtime-shared", "thread-bindings-runtime", + "together", "text-runtime", "agent-runtime", "speech-runtime", @@ -168,6 +169,7 @@ "provider-env-vars", "provider-http", "provider-google", + "provider-model-shared", "provider-models", "provider-moonshot", "provider-onboard", diff --git a/src/plugin-sdk/provider-model-shared.ts b/src/plugin-sdk/provider-model-shared.ts new file mode 100644 index 00000000000..524c39bd5e6 --- /dev/null +++ b/src/plugin-sdk/provider-model-shared.ts @@ -0,0 +1,38 @@ +// Shared model/catalog helpers for provider plugins. +// +// Keep provider-owned exports out of this subpath so plugin loaders can import it +// without recursing through provider-specific facades. + +import type { BedrockDiscoveryConfig, ModelDefinitionConfig } from "../config/types.models.js"; + +export type { ModelApi, ModelProviderConfig } from "../config/types.models.js"; +export type { BedrockDiscoveryConfig, ModelDefinitionConfig } from "../config/types.models.js"; +export type { ProviderPlugin } from "../plugins/types.js"; +export type { KilocodeModelCatalogEntry } from "../plugins/provider-model-kilocode.js"; + +export { DEFAULT_CONTEXT_TOKENS } from "../agents/defaults.js"; +export { + hasNativeWebSearchTool, + HTML_ENTITY_TOOL_CALL_ARGUMENTS_ENCODING, + normalizeModelCompat, + resolveToolCallArgumentsEncoding, + usesXaiToolSchemaProfile, + XAI_TOOL_SCHEMA_PROFILE, +} from "../agents/model-compat.js"; +export { normalizeProviderId } from "../agents/provider-id.js"; +export { + createMoonshotThinkingWrapper, + resolveMoonshotThinkingType, +} from "../agents/pi-embedded-runner/moonshot-thinking-stream-wrappers.js"; +export { + cloneFirstTemplateModel, + matchesExactOrPrefix, +} from "../plugins/provider-model-helpers.js"; +export { + MINIMAX_DEFAULT_MODEL_ID, + MINIMAX_DEFAULT_MODEL_REF, + MINIMAX_TEXT_MODEL_CATALOG, + MINIMAX_TEXT_MODEL_ORDER, + MINIMAX_TEXT_MODEL_REFS, + isMiniMaxModernModelId, +} from "./minimax.js"; diff --git a/src/plugin-sdk/subpaths.test.ts b/src/plugin-sdk/subpaths.test.ts index c7bbcd419b1..c8fc221c476 100644 --- a/src/plugin-sdk/subpaths.test.ts +++ b/src/plugin-sdk/subpaths.test.ts @@ -540,6 +540,10 @@ describe("plugin-sdk subpath exports", () => { "resolveZaiBaseUrl", ], }); + expectSourceContract("provider-model-shared", { + mentions: ["DEFAULT_CONTEXT_TOKENS", "normalizeModelCompat", "cloneFirstTemplateModel"], + omits: ["applyOpenAIConfig", "buildKilocodeModelDefinition", "discoverHuggingfaceModels"], + }); expectSourceMentions("setup", [ "DEFAULT_ACCOUNT_ID",