From 12a42ea77f3fec13d23e0aac00029172c60e9abc Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Thu, 26 Jun 2025 14:31:34 +0200 Subject: [PATCH] chore: add name to tools --- internal/config_v2/config.go | 50 +++++++++++++++++-------------- internal/llm/agent/agent-tool.go | 4 +++ internal/llm/agent/mcp-tools.go | 4 +++ internal/llm/provider/provider.go | 22 -------------- internal/llm/tools/bash.go | 4 +++ internal/llm/tools/diagnostics.go | 4 +++ internal/llm/tools/edit.go | 4 +++ internal/llm/tools/fetch.go | 4 +++ internal/llm/tools/glob.go | 4 +++ internal/llm/tools/grep.go | 4 +++ internal/llm/tools/ls.go | 4 +++ internal/llm/tools/sourcegraph.go | 4 +++ internal/llm/tools/tools.go | 1 + internal/llm/tools/view.go | 4 +++ internal/llm/tools/write.go | 4 +++ 15 files changed, 77 insertions(+), 44 deletions(-) diff --git a/internal/config_v2/config.go b/internal/config_v2/config.go index 0de27aa1b16cf71e97c655561a5c8ce20bae0838..9f7f2ad14356531150cca4f05952fb390c716c68 100644 --- a/internal/config_v2/config.go +++ b/internal/config_v2/config.go @@ -82,8 +82,9 @@ type ProviderConfig struct { } type Agent struct { - Name string `json:"name"` - Description string `json:"description,omitempty"` + ID AgentID `json:"id"` + Name string `json:"name"` + Description string `json:"description,omitempty"` // This is the id of the system prompt used by the agent Disabled bool `json:"disabled"` @@ -229,6 +230,7 @@ func loadConfig(cwd string) (*Config, error) { agents := map[AgentID]Agent{ AgentCoder: { + ID: AgentCoder, Name: "Coder", Description: "An agent that helps with executing coding tasks.", Provider: preferredProvider.ID, @@ -237,6 +239,7 @@ func loadConfig(cwd string) (*Config, error) { // All tools allowed }, AgentTask: { + ID: AgentTask, Name: "Task", Description: "An agent that helps with searching for context and finding implementation details.", Provider: preferredProvider.ID, @@ -254,6 +257,7 @@ func loadConfig(cwd string) (*Config, error) { AllowedLSP: []string{}, }, AgentTitle: { + ID: AgentTitle, Name: "Title", Description: "An agent that helps with generating titles for sessions.", Provider: preferredProvider.ID, @@ -265,6 +269,7 @@ func loadConfig(cwd string) (*Config, error) { AllowedLSP: []string{}, }, AgentSummarize: { + ID: AgentSummarize, Name: "Summarize", Description: "An agent that helps with summarizing sessions.", Provider: preferredProvider.ID, @@ -429,43 +434,44 @@ func mergeAgents(base, global, local *Config) { if cfg == nil { continue } - for agentID, globalAgent := range cfg.Agents { + for agentID, newAgent := range cfg.Agents { if _, ok := base.Agents[agentID]; !ok { - base.Agents[agentID] = globalAgent + newAgent.ID = agentID // Ensure the ID is set correctly + base.Agents[agentID] = newAgent } else { switch agentID { case AgentCoder: baseAgent := base.Agents[agentID] - baseAgent.Model = globalAgent.Model - baseAgent.Provider = globalAgent.Provider - baseAgent.AllowedMCP = globalAgent.AllowedMCP - baseAgent.AllowedLSP = globalAgent.AllowedLSP + baseAgent.Model = newAgent.Model + baseAgent.Provider = newAgent.Provider + baseAgent.AllowedMCP = newAgent.AllowedMCP + baseAgent.AllowedLSP = newAgent.AllowedLSP base.Agents[agentID] = baseAgent case AgentTask: baseAgent := base.Agents[agentID] - baseAgent.Model = globalAgent.Model - baseAgent.Provider = globalAgent.Provider + baseAgent.Model = newAgent.Model + baseAgent.Provider = newAgent.Provider base.Agents[agentID] = baseAgent case AgentTitle: baseAgent := base.Agents[agentID] - baseAgent.Model = globalAgent.Model - baseAgent.Provider = globalAgent.Provider + baseAgent.Model = newAgent.Model + baseAgent.Provider = newAgent.Provider base.Agents[agentID] = baseAgent case AgentSummarize: baseAgent := base.Agents[agentID] - baseAgent.Model = globalAgent.Model - baseAgent.Provider = globalAgent.Provider + baseAgent.Model = newAgent.Model + baseAgent.Provider = newAgent.Provider base.Agents[agentID] = baseAgent default: baseAgent := base.Agents[agentID] - baseAgent.Name = globalAgent.Name - baseAgent.Description = globalAgent.Description - baseAgent.Disabled = globalAgent.Disabled - baseAgent.Provider = globalAgent.Provider - baseAgent.Model = globalAgent.Model - baseAgent.AllowedTools = globalAgent.AllowedTools - baseAgent.AllowedMCP = globalAgent.AllowedMCP - baseAgent.AllowedLSP = globalAgent.AllowedLSP + baseAgent.Name = newAgent.Name + baseAgent.Description = newAgent.Description + baseAgent.Disabled = newAgent.Disabled + baseAgent.Provider = newAgent.Provider + baseAgent.Model = newAgent.Model + baseAgent.AllowedTools = newAgent.AllowedTools + baseAgent.AllowedMCP = newAgent.AllowedMCP + baseAgent.AllowedLSP = newAgent.AllowedLSP base.Agents[agentID] = baseAgent } diff --git a/internal/llm/agent/agent-tool.go b/internal/llm/agent/agent-tool.go index de4a86ac36d62ef0990a58d6abeb9a53572bc215..9e5e9bc7844b055c52464032dfc4d75495f9e426 100644 --- a/internal/llm/agent/agent-tool.go +++ b/internal/llm/agent/agent-tool.go @@ -26,6 +26,10 @@ type AgentParams struct { Prompt string `json:"prompt"` } +func (b *agentTool) Name() string { + return AgentToolName +} + func (b *agentTool) Info() tools.ToolInfo { return tools.ToolInfo{ Name: AgentToolName, diff --git a/internal/llm/agent/mcp-tools.go b/internal/llm/agent/mcp-tools.go index 55b6983d053a70ccebf56f7c6d239246acf8c317..8fde02755eb320b8925891a3eca938c3cd7911f9 100644 --- a/internal/llm/agent/mcp-tools.go +++ b/internal/llm/agent/mcp-tools.go @@ -32,6 +32,10 @@ type MCPClient interface { Close() error } +func (b *mcpTool) Name() string { + return fmt.Sprintf("%s_%s", b.mcpName, b.tool.Name) +} + func (b *mcpTool) Info() tools.ToolInfo { return tools.ToolInfo{ Name: fmt.Sprintf("%s_%s", b.mcpName, b.tool.Name), diff --git a/internal/llm/provider/provider.go b/internal/llm/provider/provider.go index 86c47c2e0c24f2f99d91eb51c946da7bbf90dfa0..0d98b74c3292c0aa066dfd0676445e587b800b57 100644 --- a/internal/llm/provider/provider.go +++ b/internal/llm/provider/provider.go @@ -3,7 +3,6 @@ package provider import ( "context" "fmt" - "maps" "os" "github.com/charmbracelet/crush/internal/llm/models" @@ -177,18 +176,6 @@ func (p *baseProvider[C]) StreamResponse(ctx context.Context, messages []message return p.client.stream(ctx, messages, tools) } -func WithBaseURL(baseURL string) ProviderClientOption { - return func(options *providerClientOptions) { - options.baseURL = baseURL - } -} - -func WithAPIKey(apiKey string) ProviderClientOption { - return func(options *providerClientOptions) { - options.apiKey = apiKey - } -} - func WithModel(model models.Model) ProviderClientOption { return func(options *providerClientOptions) { options.model = model @@ -201,15 +188,6 @@ func WithDisableCache(disableCache bool) ProviderClientOption { } } -func WithExtraHeaders(extraHeaders map[string]string) ProviderClientOption { - return func(options *providerClientOptions) { - if options.extraHeaders == nil { - options.extraHeaders = make(map[string]string) - } - maps.Copy(options.extraHeaders, extraHeaders) - } -} - func WithMaxTokens(maxTokens int64) ProviderClientOption { return func(options *providerClientOptions) { options.maxTokens = maxTokens diff --git a/internal/llm/tools/bash.go b/internal/llm/tools/bash.go index abbd19113db746cd8e82c5cdebc02c4b8fc28b99..5f8b41338c8c5ef6f771e80fbd4e1355b27eb036 100644 --- a/internal/llm/tools/bash.go +++ b/internal/llm/tools/bash.go @@ -250,6 +250,10 @@ func NewBashTool(permission permission.Service) BaseTool { } } +func (b *bashTool) Name() string { + return BashToolName +} + func (b *bashTool) Info() ToolInfo { return ToolInfo{ Name: BashToolName, diff --git a/internal/llm/tools/diagnostics.go b/internal/llm/tools/diagnostics.go index e48132414ad338635ada6294134e3d7f2d938c7d..5e0d19f9e5b3f72ea7588e4c4a15b71ae7b262d9 100644 --- a/internal/llm/tools/diagnostics.go +++ b/internal/llm/tools/diagnostics.go @@ -51,6 +51,10 @@ func NewDiagnosticsTool(lspClients map[string]*lsp.Client) BaseTool { } } +func (b *diagnosticsTool) Name() string { + return DiagnosticsToolName +} + func (b *diagnosticsTool) Info() ToolInfo { return ToolInfo{ Name: DiagnosticsToolName, diff --git a/internal/llm/tools/edit.go b/internal/llm/tools/edit.go index 52a202e32cd95869e3f76ebe6e3e01ca2f4802cc..b72112f43e140edd7298e802ab88ba2747784d7c 100644 --- a/internal/llm/tools/edit.go +++ b/internal/llm/tools/edit.go @@ -106,6 +106,10 @@ func NewEditTool(lspClients map[string]*lsp.Client, permissions permission.Servi } } +func (e *editTool) Name() string { + return EditToolName +} + func (e *editTool) Info() ToolInfo { return ToolInfo{ Name: EditToolName, diff --git a/internal/llm/tools/fetch.go b/internal/llm/tools/fetch.go index 7acf23bae61df88792dd805317bdf8a67095dd0d..ac73ddbf3b0033cf503bdc8cfa2ef065a0072477 100644 --- a/internal/llm/tools/fetch.go +++ b/internal/llm/tools/fetch.go @@ -79,6 +79,10 @@ func NewFetchTool(permissions permission.Service) BaseTool { } } +func (t *fetchTool) Name() string { + return FetchToolName +} + func (t *fetchTool) Info() ToolInfo { return ToolInfo{ Name: FetchToolName, diff --git a/internal/llm/tools/glob.go b/internal/llm/tools/glob.go index 39471a8ae81f9c31c4bccccf273f88044184f6ad..25c80860b791a5b601366d455f5ddd1ea91523ed 100644 --- a/internal/llm/tools/glob.go +++ b/internal/llm/tools/glob.go @@ -74,6 +74,10 @@ func NewGlobTool() BaseTool { return &globTool{} } +func (g *globTool) Name() string { + return GlobToolName +} + func (g *globTool) Info() ToolInfo { return ToolInfo{ Name: GlobToolName, diff --git a/internal/llm/tools/grep.go b/internal/llm/tools/grep.go index 7321ad4ed9a2d713cb8685b3f4b23dbc62cc6c2a..c3e13766884f17932187ad63cb5ffaacdf375b45 100644 --- a/internal/llm/tools/grep.go +++ b/internal/llm/tools/grep.go @@ -140,6 +140,10 @@ func NewGrepTool() BaseTool { return &grepTool{} } +func (g *grepTool) Name() string { + return GrepToolName +} + func (g *grepTool) Info() ToolInfo { return ToolInfo{ Name: GrepToolName, diff --git a/internal/llm/tools/ls.go b/internal/llm/tools/ls.go index aeda758a66bc9dc796dc8d4e3722f8711aa39f67..a51b5bdb5dccb7c209d9cdc28e94dad328e8c093 100644 --- a/internal/llm/tools/ls.go +++ b/internal/llm/tools/ls.go @@ -74,6 +74,10 @@ func NewLsTool() BaseTool { return &lsTool{} } +func (l *lsTool) Name() string { + return LSToolName +} + func (l *lsTool) Info() ToolInfo { return ToolInfo{ Name: LSToolName, diff --git a/internal/llm/tools/sourcegraph.go b/internal/llm/tools/sourcegraph.go index 29518b7b818da5746d195ea8b7da521d80429962..fcc9bb57428b45a4620417775c61acb380b4d7ad 100644 --- a/internal/llm/tools/sourcegraph.go +++ b/internal/llm/tools/sourcegraph.go @@ -138,6 +138,10 @@ func NewSourcegraphTool() BaseTool { } } +func (t *sourcegraphTool) Name() string { + return SourcegraphToolName +} + func (t *sourcegraphTool) Info() ToolInfo { return ToolInfo{ Name: SourcegraphToolName, diff --git a/internal/llm/tools/tools.go b/internal/llm/tools/tools.go index bf0f8df0bacdc34fc6a3f5f89f3591b8b6fd8f15..41c0515616032b117f3c09a0056cac9e86b62c66 100644 --- a/internal/llm/tools/tools.go +++ b/internal/llm/tools/tools.go @@ -68,6 +68,7 @@ type ToolCall struct { type BaseTool interface { Info() ToolInfo + Name() string Run(ctx context.Context, params ToolCall) (ToolResponse, error) } diff --git a/internal/llm/tools/view.go b/internal/llm/tools/view.go index 7d9cdaefcb98e0d6289396c9c44d45c4aa0b03c5..750efef73795f115e3ad90e4da9a2d955ee10529 100644 --- a/internal/llm/tools/view.go +++ b/internal/llm/tools/view.go @@ -77,6 +77,10 @@ func NewViewTool(lspClients map[string]*lsp.Client) BaseTool { } } +func (v *viewTool) Name() string { + return ViewToolName +} + func (v *viewTool) Info() ToolInfo { return ToolInfo{ Name: ViewToolName, diff --git a/internal/llm/tools/write.go b/internal/llm/tools/write.go index 4186954d03acc4768233435c71c2ac5d78606119..0c213cec1f4e0a9bc8fc205a183206c0842f9688 100644 --- a/internal/llm/tools/write.go +++ b/internal/llm/tools/write.go @@ -84,6 +84,10 @@ func NewWriteTool(lspClients map[string]*lsp.Client, permissions permission.Serv } } +func (w *writeTool) Name() string { + return WriteToolName +} + func (w *writeTool) Info() ToolInfo { return ToolInfo{ Name: WriteToolName,