diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index a0ab5eb3474d..34294c7bc343 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1523,7 +1523,7 @@ const layer = Layer.effect( if (!apiKey) continue mergeProvider(providerID, { source: "env", - key: provider.env.length === 1 ? apiKey : undefined, + key: apiKey, }) } diff --git a/packages/opencode/src/session/llm/native-request.ts b/packages/opencode/src/session/llm/native-request.ts index b7f30e24c362..2dd383454d0d 100644 --- a/packages/opencode/src/session/llm/native-request.ts +++ b/packages/opencode/src/session/llm/native-request.ts @@ -13,6 +13,16 @@ import type { ModelMessage } from "ai" import type { Provider } from "@/provider/provider" import { isRecord } from "@/util/record" +export const SUPPORTED_NPM_PACKAGES = new Set([ + "@ai-sdk/openai", + "@ai-sdk/azure", + "@ai-sdk/anthropic", + "@ai-sdk/google", + "@ai-sdk/amazon-bedrock", + "@ai-sdk/openai-compatible", + "@openrouter/ai-sdk-provider", +]) + type ToolInput = { readonly description?: string readonly inputSchema?: unknown diff --git a/packages/opencode/src/session/llm/native-runtime.ts b/packages/opencode/src/session/llm/native-runtime.ts index bac385c59137..81d61906a6f8 100644 --- a/packages/opencode/src/session/llm/native-runtime.ts +++ b/packages/opencode/src/session/llm/native-runtime.ts @@ -51,12 +51,9 @@ function statusWithFetch( input: Pick, fetch: typeof globalThis.fetch | undefined, ): RuntimeStatus { - const providerID = input.model.providerID - if (providerID !== "openai" && providerID !== "anthropic" && !providerID.startsWith("opencode")) - return { type: "unsupported", reason: "provider is not openai, opencode, or anthropic" } const npm = input.model.api.npm - if (npm !== "@ai-sdk/openai" && npm !== "@ai-sdk/openai-compatible" && npm !== "@ai-sdk/anthropic") - return { type: "unsupported", reason: "provider package is not OpenAI, OpenAI-compatible, or Anthropic" } + if (!LLMNative.SUPPORTED_NPM_PACKAGES.has(npm)) + return { type: "unsupported", reason: `provider package ${npm} is not supported by native runtime` } if (input.auth?.type === "oauth" && !(input.provider.id === "openai" && fetch)) { return { type: "unsupported", reason: "OAuth auth requires a provider fetch override" } }