refactor: clean

Carlos Alexandro Becker created

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Change summary

internal/tui/components/dialogs/commands/arguments.go |  9 ++-
internal/tui/components/dialogs/commands/loader.go    | 12 +---
internal/tui/tui.go                                   | 32 +++++++-----
3 files changed, 27 insertions(+), 26 deletions(-)

Detailed changes

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

@@ -71,7 +71,7 @@ func NewCommandArgumentsDialog(
 
 	for i, arg := range arguments {
 		ti := textinput.New()
-		ti.Placeholder = cmp.Or(arg.Description, "Enter value for "+arg.Name)
+		ti.Placeholder = cmp.Or(arg.Description, "Enter value for "+arg.Title)
 		ti.SetWidth(40)
 		ti.SetVirtualCursor(false)
 		ti.Prompt = ""
@@ -182,9 +182,10 @@ func (c *commandArgumentsDialogCmp) View() string {
 			labelStyle = labelStyle.Foreground(t.FgMuted)
 		}
 
-		argName := c.arguments[i].Name
-		if c.arguments[i].Required {
-			argName += " *"
+		arg := c.arguments[i]
+		argName := cmp.Or(arg.Title, arg.Name)
+		if arg.Required {
+			argName += "*"
 		}
 		label := labelStyle.Render(argName + ":")
 

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

@@ -1,7 +1,6 @@
 package commands
 
 import (
-	"cmp"
 	"context"
 	"fmt"
 	"io/fs"
@@ -216,17 +215,14 @@ func LoadMCPPrompts() []Command {
 
 	for key, prompt := range prompts {
 		p := prompt
-		// key format is "clientName:promptName"
-		parts := strings.SplitN(key, ":", 2)
-		if len(parts) != 2 {
+		clientName, promptName, ok := strings.Cut(key, ":")
+		if !ok {
 			continue
 		}
-		clientName, promptName := parts[0], parts[1]
-		displayName := clientName + " " + cmp.Or(p.Title, promptName)
 		commands = append(commands, Command{
 			ID:          key,
-			Title:       displayName,
-			Description: fmt.Sprintf("[%s] %s", clientName, p.Description),
+			Title:       clientName + ":" + promptName,
+			Description: p.Description,
 			Handler:     createMCPPromptHandler(key, promptName, p),
 		})
 	}

internal/tui/tui.go 🔗

@@ -36,6 +36,8 @@ import (
 	"github.com/charmbracelet/crush/internal/tui/util"
 	"github.com/charmbracelet/lipgloss/v2"
 	"github.com/modelcontextprotocol/go-sdk/mcp"
+	"golang.org/x/text/cases"
+	"golang.org/x/text/language"
 )
 
 var lastMouseEvent time.Time
@@ -142,7 +144,11 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 	case commands.ShowArgumentsDialogMsg:
 		var args []commands.Argument
 		for _, arg := range msg.ArgNames {
-			args = append(args, commands.Argument{Name: arg})
+			args = append(args, commands.Argument{
+				Name:     arg,
+				Title:    cases.Title(language.English).String(arg),
+				Required: true,
+			})
 		}
 		return a, util.CmdHandler(
 			dialogs.OpenDialogMsg{
@@ -170,6 +176,7 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		)
 	case commands.ShowMCPPromptArgumentsDialogMsg:
 		prompt, ok := agent.GetMCPPrompt(msg.PromptID)
+		clientName, _, ok := strings.Cut(msg.PromptID, ":")
 		if !ok {
 			slog.Warn("prompt not found", "prompt_id", msg.PromptID, "prompt_name", msg.PromptName)
 			util.ReportWarn(fmt.Sprintf("Prompt %s not found", msg.PromptName))
@@ -187,12 +194,6 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			args,
 			func(args map[string]string) tea.Cmd {
 				return func() tea.Msg {
-					parts := strings.SplitN(msg.PromptID, ":", 2)
-					if len(parts) != 2 {
-						return util.ReportError(fmt.Errorf("invalid prompt ID: %s", msg.PromptID))
-					}
-					clientName := parts[0]
-
 					ctx := context.Background()
 					result, err := agent.GetMCPPromptContent(ctx, clientName, prompt.Name, args)
 					if err != nil {
@@ -201,15 +202,18 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 
 					var content strings.Builder
 					for _, msg := range result.Messages {
-						if msg.Role == "user" {
-							if textContent, ok := msg.Content.(*mcp.TextContent); ok {
-								content.WriteString(textContent.Text)
-								content.WriteString("\n")
-							}
+						if msg.Role != "user" {
+							continue
+						}
+						textContent, ok := msg.Content.(*mcp.TextContent)
+						if !ok {
+							continue
 						}
+						_, _ = content.WriteString(textContent.Text)
+						_, _ = content.WriteString("\n")
 					}
-					return cmpChat.SendMsg{
-						Text: content.String(),
+					return commands.CommandRunCustomMsg{
+						Content: content.String(),
 					}
 				}
 			},