From 2748cf958543c330dc670fcd084c3bdec1fa981c Mon Sep 17 00:00:00 2001 From: PabloGNU Date: Tue, 7 Apr 2026 15:20:13 +0200 Subject: [PATCH] fix: propagate authProfile through message chain to Auth.get - message-v2.ts: add authProfile to User.model schema - prompt.ts: copy authProfile from model to userMsg.model - lllm.ts: build auth key with profile when calling Auth.get() - acp/types.ts: add authProfile to ACPSessionState.model - acp/agent.ts: propagate authProfile in setModel call This fixes the bug where embedded profiles (e.g., 'minimax-coding-plan:personal') were lost when creating user messages and never reached Auth.get(). --- packages/opencode/src/acp/agent.ts | 1 + packages/opencode/src/acp/types.ts | 1 + packages/opencode/src/session/llm.ts | 4 +++- packages/opencode/src/session/message-v2.ts | 1 + packages/opencode/src/session/prompt.ts | 6 +++++- 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/acp/agent.ts b/packages/opencode/src/acp/agent.ts index 6e87e7642d..d99578c2c9 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/opencode/src/acp/agent.ts @@ -659,6 +659,7 @@ export namespace ACP { this.sessionManager.setModel(sessionId, { providerID: ProviderID.make(lastUser.model.providerID), modelID: ModelID.make(lastUser.model.modelID), + authProfile: (lastUser.model as { authProfile?: string }).authProfile, }) if (result.modes?.availableModes.some((m) => m.id === lastUser.agent)) { result.modes.currentModeId = lastUser.agent diff --git a/packages/opencode/src/acp/types.ts b/packages/opencode/src/acp/types.ts index 2c3e886bc1..484f88bfca 100644 --- a/packages/opencode/src/acp/types.ts +++ b/packages/opencode/src/acp/types.ts @@ -10,6 +10,7 @@ export interface ACPSessionState { model?: { providerID: ProviderID modelID: ModelID + authProfile?: string } variant?: string modeId?: string diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 7f60c02b1d..e7ad7c3cc9 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -94,7 +94,9 @@ export namespace LLM { Provider.getLanguage(input.model), Config.get(), Provider.getProvider(input.model.providerID), - Auth.get(input.model.providerID), + Auth.get( + input.model.authProfile ? `${input.model.providerID}:${input.model.authProfile}` : input.model.providerID, + ), ]) // TODO: move this to a proper hook const isOpenaiOauth = provider.id === "openai" && auth?.type === "oauth" diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index eb39519854..c402ec4b3d 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -371,6 +371,7 @@ export namespace MessageV2 { model: z.object({ providerID: ProviderID.zod, modelID: ModelID.zod, + authProfile: z.string().optional(), }), system: z.string().optional(), tools: z.record(z.string(), z.boolean()).optional(), diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 24996c8d4b..48baecba11 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -761,7 +761,11 @@ NOTE: At any point in time through this workflow you should feel free to ask the time: { created: Date.now() }, role: "user", agent: input.agent, - model: { providerID: model.providerID, modelID: model.modelID }, + model: { + providerID: model.providerID, + modelID: model.modelID, + authProfile: (model as { authProfile?: string }).authProfile, + }, } yield* sessions.updateMessage(userMsg) const userPart: MessageV2.Part = {