From c2ef930d2ae05f0fc8222ad1c9a04bef233d4ecf Mon Sep 17 00:00:00 2001 From: geril07 <62308020+geril07@users.noreply.github.com> Date: Thu, 23 Oct 2025 01:51:46 +0300 Subject: [PATCH] add option to allow agent switches to not change model (#3356) --- packages/tui/internal/app/app.go | 66 +++++++++++++------------------- 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go index 4a891f28..708b9257 100644 --- a/packages/tui/internal/app/app.go +++ b/packages/tui/internal/app/app.go @@ -253,22 +253,14 @@ func SetClipboard(text string) tea.Cmd { return tea.Sequence(cmds...) } -func (a *App) cycleMode(forward bool) (*App, tea.Cmd) { - if forward { - a.AgentIndex++ - if a.AgentIndex >= len(a.Agents) { - a.AgentIndex = 0 - } - } else { - a.AgentIndex-- - if a.AgentIndex < 0 { - a.AgentIndex = len(a.Agents) - 1 - } - } - if a.Agent().Mode == "subagent" { - return a.cycleMode(forward) - } +func (a *App) updateModelForNewAgent() { + singleModelEnv := os.Getenv("OPENCODE_AGENTS_SWITCH_SINGLE_MODEL") + isSingleModel := singleModelEnv == "1" || singleModelEnv == "true" + if isSingleModel { + return + } + // Set up model for the new agent modelID := a.Agent().Model.ModelID providerID := a.Agent().Model.ProviderID if modelID == "" { @@ -292,6 +284,25 @@ func (a *App) cycleMode(forward bool) (*App, tea.Cmd) { } } } +} + +func (a *App) cycleMode(forward bool) (*App, tea.Cmd) { + if forward { + a.AgentIndex++ + if a.AgentIndex >= len(a.Agents) { + a.AgentIndex = 0 + } + } else { + a.AgentIndex-- + if a.AgentIndex < 0 { + a.AgentIndex = len(a.Agents) - 1 + } + } + if a.Agent().Mode == "subagent" { + return a.cycleMode(forward) + } + + a.updateModelForNewAgent() a.State.Agent = a.Agent().Name a.State.UpdateAgentUsage(a.Agent().Name) @@ -380,30 +391,7 @@ func (a *App) SwitchToAgent(agentName string) (*App, tea.Cmd) { } } - // Set up model for the new agent - modelID := a.Agent().Model.ModelID - providerID := a.Agent().Model.ProviderID - if modelID == "" { - if model, ok := a.State.AgentModel[a.Agent().Name]; ok { - modelID = model.ModelID - providerID = model.ProviderID - } - } - - if modelID != "" { - for _, provider := range a.Providers { - if provider.ID == providerID { - a.Provider = &provider - for _, model := range provider.Models { - if model.ID == modelID { - a.Model = &model - break - } - } - break - } - } - } + a.updateModelForNewAgent() a.State.Agent = a.Agent().Name a.State.UpdateAgentUsage(agentName)