From 15e104bca8465e2e226030f41c073077e72e4b7c Mon Sep 17 00:00:00 2001 From: PabloGNU Date: Tue, 7 Apr 2026 15:40:52 +0200 Subject: [PATCH] fix: parse composite auth keys correctly in provider list and load apikeys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit providers.ts: - Use lastIndexOf + slice instead of split(':') for profile parsing provider.ts: - Extract base provider ID from composite auth keys (e.g., 'minimax-coding-plan:personal' → 'minimax-coding-plan') - This fixes the issue where providers weren't recognized when using profile-based auth keys --- packages/opencode/src/cli/cmd/providers.ts | 4 +++- packages/opencode/src/provider/provider.ts | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/cli/cmd/providers.ts b/packages/opencode/src/cli/cmd/providers.ts index 4a758f18bc..6d7d9c2897 100644 --- a/packages/opencode/src/cli/cmd/providers.ts +++ b/packages/opencode/src/cli/cmd/providers.ts @@ -228,7 +228,9 @@ export const ProvidersListCommand = cmd({ const byProvider: Record> = {} for (const [compositeKey, result] of results) { - const [baseProvider, profile] = compositeKey.includes(":") ? compositeKey.split(":") : [compositeKey, "default"] + const lastColon = compositeKey.lastIndexOf(":") + const baseProvider = lastColon === -1 ? compositeKey : compositeKey.slice(0, lastColon) + const profile = lastColon === -1 ? "default" : compositeKey.slice(lastColon + 1) if (!byProvider[baseProvider]) byProvider[baseProvider] = [] byProvider[baseProvider]!.push({ profile, type: result.type }) } diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 5de6aa0b05..bae3ab8467 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1192,7 +1192,10 @@ export namespace Provider { // load apikeys const auths = yield* auth.all().pipe(Effect.orDie) for (const [id, provider] of Object.entries(auths)) { - const providerID = ProviderID.make(id) + // Extract base provider from composite keys (e.g., "minimax-coding-plan:personal" → "minimax-coding-plan") + const lastColon = id.lastIndexOf(":") + const baseProvider = lastColon === -1 ? id : id.slice(0, lastColon) + const providerID = ProviderID.make(baseProvider) if (disabled.has(providerID)) continue if (provider.type === "api") { mergeProvider(providerID, {