diff --git a/pkg/agent/instance.go b/pkg/agent/instance.go index bacfa49c5..9593a1d80 100644 --- a/pkg/agent/instance.go +++ b/pkg/agent/instance.go @@ -157,7 +157,7 @@ func NewAgentInstance( } var thinkingLevelStr string - if mc, err := cfg.GetModelConfig(model); err == nil { + if mc := lookupModelConfigByRef(cfg, model); mc != nil { thinkingLevelStr = mc.ThinkingLevel } thinkingLevel := parseThinkingLevel(thinkingLevelStr) diff --git a/pkg/agent/instance_test.go b/pkg/agent/instance_test.go index ba907e88b..0c1b4dd2d 100644 --- a/pkg/agent/instance_test.go +++ b/pkg/agent/instance_test.go @@ -217,6 +217,61 @@ func TestNewAgentInstance_PreservesDistinctLimiterIdentityForSharedResolvedModel } } +func TestNewAgentInstance_ResolvesThinkingLevelFromModelReference(t *testing.T) { + tests := []struct { + name string + primary string + wantThinking ThinkingLevel + }{ + { + name: "full protocol reference", + primary: "anthropic/claude-sonnet-4.6", + wantThinking: ThinkingHigh, + }, + { + name: "bare model id", + primary: "claude-sonnet-4.6", + wantThinking: ThinkingHigh, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tmpDir := t.TempDir() + + cfg := &config.Config{ + Agents: config.AgentsConfig{ + Defaults: config.AgentDefaults{ + Workspace: tmpDir, + ModelName: "main-model", + }, + List: []config.AgentConfig{ + { + ID: "main", + Model: &config.AgentModelConfig{ + Primary: tt.primary, + }, + }, + }, + }, + ModelList: []*config.ModelConfig{ + { + ModelName: "main-model", + Model: "anthropic/claude-sonnet-4.6", + ThinkingLevel: "high", + APIBase: "https://example.invalid", + }, + }, + } + + agent := NewAgentInstance(&cfg.Agents.List[0], &cfg.Agents.Defaults, cfg, &mockProvider{}) + if agent.ThinkingLevel != tt.wantThinking { + t.Fatalf("ThinkingLevel = %q, want %q", agent.ThinkingLevel, tt.wantThinking) + } + }) + } +} + func TestNewAgentInstance_AllowsMediaTempDirForReadListAndExec(t *testing.T) { workspace := t.TempDir() mediaDir := media.TempDir()