From 8a321c4536ffa7da613d486c6854a2dfc6ee97e5 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Mon, 18 May 2026 17:23:57 -0400 Subject: [PATCH] fix(native-llm): prefer console opencode token (#28237) --- .../src/session/llm/native-runtime.ts | 7 +---- .../opencode/test/session/llm-native.test.ts | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/session/llm/native-runtime.ts b/packages/opencode/src/session/llm/native-runtime.ts index 8b27803a68..f3dcd0c869 100644 --- a/packages/opencode/src/session/llm/native-runtime.ts +++ b/packages/opencode/src/session/llm/native-runtime.ts @@ -42,12 +42,7 @@ export function status(input: Pick): if (input.model.api.npm !== "@ai-sdk/openai") return { type: "unsupported", reason: "provider package is not OpenAI" } if (input.auth?.type === "oauth") return { type: "unsupported", reason: "OAuth auth is not supported" } - const apiKey = - input.auth?.type === "api" - ? input.auth.key - : typeof input.provider.options.apiKey === "string" - ? input.provider.options.apiKey - : undefined + const apiKey = typeof input.provider.options.apiKey === "string" ? input.provider.options.apiKey : input.provider.key if (!apiKey) return { type: "unsupported", reason: "OpenAI API key is not configured" } return { diff --git a/packages/opencode/test/session/llm-native.test.ts b/packages/opencode/test/session/llm-native.test.ts index 0a19b17ac3..7dd0c2e18a 100644 --- a/packages/opencode/test/session/llm-native.test.ts +++ b/packages/opencode/test/session/llm-native.test.ts @@ -292,6 +292,34 @@ describe("session.llm-native.request", () => { ).toEqual({ type: "unsupported", reason: "OpenAI API key is not configured" }) }) + test("prefers console provider api key over stored opencode auth", () => { + expect( + LLMNativeRuntime.status({ + model: { ...baseModel, providerID: ProviderID.make("opencode") }, + provider: { + ...providerInfo, + id: ProviderID.make("opencode"), + options: { apiKey: "console-token" }, + key: "zen-token", + }, + auth: { type: "api", key: "zen-token" }, + }), + ).toMatchObject({ + type: "supported", + apiKey: "console-token", + }) + expect( + LLMNativeRuntime.status({ + model: baseModel, + provider: { ...providerInfo, options: {}, key: "provider-key" }, + auth: undefined, + }), + ).toMatchObject({ + type: "supported", + apiKey: "provider-key", + }) + }) + test("native tool wrapper converts thrown errors into typed ToolFailure", async () => { const wrapped = LLMNativeRuntime.nativeTools( {