From b68c5bbba067655aa269bb70cbef6c7d8728e244 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Thu, 9 Oct 2025 16:44:56 -0300 Subject: [PATCH] refactor: clean Signed-off-by: Carlos Alexandro Becker --- .../components/dialogs/commands/arguments.go | 9 +++--- .../tui/components/dialogs/commands/loader.go | 12 +++---- internal/tui/tui.go | 32 +++++++++++-------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/internal/tui/components/dialogs/commands/arguments.go b/internal/tui/components/dialogs/commands/arguments.go index 86d19c3ab0450072d6a3c1fc5461f652b0ffda42..d00d10be1f835ce78c83d337632ae20a47fbfedd 100644 --- a/internal/tui/components/dialogs/commands/arguments.go +++ b/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 + ":") diff --git a/internal/tui/components/dialogs/commands/loader.go b/internal/tui/components/dialogs/commands/loader.go index 92ce517ce85e5f4f68e21c0c8c815d9ff5a74a48..d5449a8f41d3bc990d3db49b96ddebd2a695d9b2 100644 --- a/internal/tui/components/dialogs/commands/loader.go +++ b/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), }) } diff --git a/internal/tui/tui.go b/internal/tui/tui.go index f50fa52c0ce299f35505ccf47d012dc5846cb7de..353b55dd6be75c360ff50f31db61c47cd32e96b2 100644 --- a/internal/tui/tui.go +++ b/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(), } } },