feat: add bedrock thinking/reasoning support

Micah Walter created

- Add thinking toggle visibility for Bedrock models in commands dialog.
- Update coordinator to use `reasoning_effort` (medium) for Bedrock thinking
- Enables `/think` command for Bedrock models that support reasoning

Change summary

internal/agent/coordinator.go                        | 11 +++++++++++
internal/tui/components/dialogs/commands/commands.go |  4 ++--
2 files changed, 13 insertions(+), 2 deletions(-)

Detailed changes

internal/agent/coordinator.go 🔗

@@ -292,6 +292,17 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
 		if err == nil {
 			options[google.Name] = parsed
 		}
+	case bedrock.Name:
+		_, hasThink := mergedOptions["thinking"]
+		if !hasThink && model.ModelCfg.Think {
+			mergedOptions["thinking"] = map[string]any{
+				"reasoning_effort": "medium",
+			}
+		}
+		parsed, err := bedrock.ParseOptions(mergedOptions)
+		if err == nil {
+			options[bedrock.Name] = parsed
+		}
 	case openaicompat.Name:
 		_, hasReasoningEffort := mergedOptions["reasoning_effort"]
 		if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {

internal/tui/components/dialogs/commands/commands.go 🔗

@@ -363,8 +363,8 @@ func (c *commandDialogCmp) defaultCommands() []Command {
 		if providerCfg != nil && model != nil && model.CanReason {
 			selectedModel := cfg.Models[agentCfg.Model]
 
-			// Anthropic models: thinking toggle
-			if providerCfg.Type == catwalk.TypeAnthropic || providerCfg.Type == catwalk.Type(hyper.Name) {
+			// Anthropic/Bedrock models: thinking toggle
+			if providerCfg.Type == catwalk.TypeAnthropic || providerCfg.Type == catwalk.Type(hyper.Name) || providerCfg.Type == catwalk.TypeBedrock {
 				status := "Enable"
 				if selectedModel.Think {
 					status = "Disable"