summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorgeril07 <[email protected]>2025-10-23 01:51:46 +0300
committerGitHub <[email protected]>2025-10-22 17:51:46 -0500
commitc2ef930d2ae05f0fc8222ad1c9a04bef233d4ecf (patch)
tree08b2b0559e5493e131973522180b7e811b1dc012
parent3c3d2f5a6e235870bf5634925b1715b9477b266a (diff)
downloadopencode-c2ef930d2ae05f0fc8222ad1c9a04bef233d4ecf.tar.gz
opencode-c2ef930d2ae05f0fc8222ad1c9a04bef233d4ecf.zip
add option to allow agent switches to not change model (#3356)
-rw-r--r--packages/tui/internal/app/app.go66
1 files changed, 27 insertions, 39 deletions
diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go
index 4a891f282..708b92577 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)