on main help sign in
chore: add name to tools
commit6e0feda9c412babd6f0b1ca67c4495d51f8ccd05 authorKujtim Hoxha <kujtimii.h@gmail.com> dateThu 26 Jun 2025, 14:31 (1 year ago) parent399e7f7
15 files changed+77−44
internal/config_v2/config.go+28−22 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
internal/config_v2/config.go+28−22
@@ -82,8 +82,9 @@ type ProviderConfig struct {
8282}
8383
8484type Agent struct {
85− Name string `json:"name"`
86− Description string `json:"description,omitempty"`
85+ ID AgentID `json:"id"`
86+ Name string `json:"name"`
87+ Description string `json:"description,omitempty"`
8788 // This is the id of the system prompt used by the agent
8889 Disabled bool `json:"disabled"`
8990
@@ -229,6 +230,7 @@ func loadConfig(cwd string) (*Config, error) {
229230
230231 agents := map[AgentID]Agent{
231232 AgentCoder: {
233+ ID: AgentCoder,
232234 Name: "Coder",
233235 Description: "An agent that helps with executing coding tasks.",
234236 Provider: preferredProvider.ID,
@@ -237,6 +239,7 @@ func loadConfig(cwd string) (*Config, error) {
237239 // All tools allowed
238240 },
239241 AgentTask: {
242+ ID: AgentTask,
240243 Name: "Task",
241244 Description: "An agent that helps with searching for context and finding implementation details.",
242245 Provider: preferredProvider.ID,
@@ -254,6 +257,7 @@ func loadConfig(cwd string) (*Config, error) {
254257 AllowedLSP: []string{},
255258 },
256259 AgentTitle: {
260+ ID: AgentTitle,
257261 Name: "Title",
258262 Description: "An agent that helps with generating titles for sessions.",
259263 Provider: preferredProvider.ID,
@@ -265,6 +269,7 @@ func loadConfig(cwd string) (*Config, error) {
265269 AllowedLSP: []string{},
266270 },
267271 AgentSummarize: {
272+ ID: AgentSummarize,
268273 Name: "Summarize",
269274 Description: "An agent that helps with summarizing sessions.",
270275 Provider: preferredProvider.ID,
@@ -429,43 +434,44 @@ func mergeAgents(base, global, local *Config) {
429434 if cfg == nil {
430435 continue
431436 }
432− for agentID, globalAgent := range cfg.Agents {
437+ for agentID, newAgent := range cfg.Agents {
433438 if _, ok := base.Agents[agentID]; !ok {
434− base.Agents[agentID] = globalAgent
439+ newAgent.ID = agentID // Ensure the ID is set correctly
440+ base.Agents[agentID] = newAgent
435441 } else {
436442 switch agentID {
437443 case AgentCoder:
438444 baseAgent := base.Agents[agentID]
439− baseAgent.Model = globalAgent.Model
440− baseAgent.Provider = globalAgent.Provider
441− baseAgent.AllowedMCP = globalAgent.AllowedMCP
442− baseAgent.AllowedLSP = globalAgent.AllowedLSP
445+ baseAgent.Model = newAgent.Model
446+ baseAgent.Provider = newAgent.Provider
447+ baseAgent.AllowedMCP = newAgent.AllowedMCP
448+ baseAgent.AllowedLSP = newAgent.AllowedLSP
443449 base.Agents[agentID] = baseAgent
444450 case AgentTask:
445451 baseAgent := base.Agents[agentID]
446− baseAgent.Model = globalAgent.Model
447− baseAgent.Provider = globalAgent.Provider
452+ baseAgent.Model = newAgent.Model
453+ baseAgent.Provider = newAgent.Provider
448454 base.Agents[agentID] = baseAgent
449455 case AgentTitle:
450456 baseAgent := base.Agents[agentID]
451− baseAgent.Model = globalAgent.Model
452− baseAgent.Provider = globalAgent.Provider
457+ baseAgent.Model = newAgent.Model
458+ baseAgent.Provider = newAgent.Provider
453459 base.Agents[agentID] = baseAgent
454460 case AgentSummarize:
455461 baseAgent := base.Agents[agentID]
456− baseAgent.Model = globalAgent.Model
457− baseAgent.Provider = globalAgent.Provider
462+ baseAgent.Model = newAgent.Model
463+ baseAgent.Provider = newAgent.Provider
458464 base.Agents[agentID] = baseAgent
459465 default:
460466 baseAgent := base.Agents[agentID]
461− baseAgent.Name = globalAgent.Name
462− baseAgent.Description = globalAgent.Description
463− baseAgent.Disabled = globalAgent.Disabled
464− baseAgent.Provider = globalAgent.Provider
465− baseAgent.Model = globalAgent.Model
466− baseAgent.AllowedTools = globalAgent.AllowedTools
467− baseAgent.AllowedMCP = globalAgent.AllowedMCP
468− baseAgent.AllowedLSP = globalAgent.AllowedLSP
467+ baseAgent.Name = newAgent.Name
468+ baseAgent.Description = newAgent.Description
469+ baseAgent.Disabled = newAgent.Disabled
470+ baseAgent.Provider = newAgent.Provider
471+ baseAgent.Model = newAgent.Model
472+ baseAgent.AllowedTools = newAgent.AllowedTools
473+ baseAgent.AllowedMCP = newAgent.AllowedMCP
474+ baseAgent.AllowedLSP = newAgent.AllowedLSP
469475 base.Agents[agentID] = baseAgent
470476
471477 }
internal/llm/agent/agent-tool.go+4
@@ -26,6 +26,10 @@ type AgentParams struct {
2626 Prompt string `json:"prompt"`
2727}
2828
29+func (b *agentTool) Name() string {
30+ return AgentToolName
31+}
32+
2933func (b *agentTool) Info() tools.ToolInfo {
3034 return tools.ToolInfo{
3135 Name: AgentToolName,
internal/llm/agent/mcp-tools.go+4
@@ -32,6 +32,10 @@ type MCPClient interface {
3232 Close() error
3333}
3434
35+func (b *mcpTool) Name() string {
36+ return fmt.Sprintf("%s_%s", b.mcpName, b.tool.Name)
37+}
38+
3539func (b *mcpTool) Info() tools.ToolInfo {
3640 return tools.ToolInfo{
3741 Name: fmt.Sprintf("%s_%s", b.mcpName, b.tool.Name),
internal/llm/provider/provider.go−22
@@ -3,7 +3,6 @@ package provider
33import (
44 "context"
55 "fmt"
6− "maps"
76 "os"
87
98 "github.com/charmbracelet/crush/internal/llm/models"
@@ -177,18 +176,6 @@ func (p *baseProvider[C]) StreamResponse(ctx context.Context, messages []message
177176 return p.client.stream(ctx, messages, tools)
178177}
179178
180−func WithBaseURL(baseURL string) ProviderClientOption {
181− return func(options *providerClientOptions) {
182− options.baseURL = baseURL
183− }
184−}
185−
186−func WithAPIKey(apiKey string) ProviderClientOption {
187− return func(options *providerClientOptions) {
188− options.apiKey = apiKey
189− }
190−}
191−
192179func WithModel(model models.Model) ProviderClientOption {
193180 return func(options *providerClientOptions) {
194181 options.model = model
@@ -201,15 +188,6 @@ func WithDisableCache(disableCache bool) ProviderClientOption {
201188 }
202189}
203190
204−func WithExtraHeaders(extraHeaders map[string]string) ProviderClientOption {
205− return func(options *providerClientOptions) {
206− if options.extraHeaders == nil {
207− options.extraHeaders = make(map[string]string)
208− }
209− maps.Copy(options.extraHeaders, extraHeaders)
210− }
211−}
212−
213191func WithMaxTokens(maxTokens int64) ProviderClientOption {
214192 return func(options *providerClientOptions) {
215193 options.maxTokens = maxTokens
internal/llm/tools/bash.go+4
@@ -250,6 +250,10 @@ func NewBashTool(permission permission.Service) BaseTool {
250250 }
251251}
252252
253+func (b *bashTool) Name() string {
254+ return BashToolName
255+}
256+
253257func (b *bashTool) Info() ToolInfo {
254258 return ToolInfo{
255259 Name: BashToolName,
internal/llm/tools/diagnostics.go+4
@@ -51,6 +51,10 @@ func NewDiagnosticsTool(lspClients map[string]*lsp.Client) BaseTool {
5151 }
5252}
5353
54+func (b *diagnosticsTool) Name() string {
55+ return DiagnosticsToolName
56+}
57+
5458func (b *diagnosticsTool) Info() ToolInfo {
5559 return ToolInfo{
5660 Name: DiagnosticsToolName,
internal/llm/tools/edit.go+4
@@ -106,6 +106,10 @@ func NewEditTool(lspClients map[string]*lsp.Client, permissions permission.Servi
106106 }
107107}
108108
109+func (e *editTool) Name() string {
110+ return EditToolName
111+}
112+
109113func (e *editTool) Info() ToolInfo {
110114 return ToolInfo{
111115 Name: EditToolName,
internal/llm/tools/fetch.go+4
@@ -79,6 +79,10 @@ func NewFetchTool(permissions permission.Service) BaseTool {
7979 }
8080}
8181
82+func (t *fetchTool) Name() string {
83+ return FetchToolName
84+}
85+
8286func (t *fetchTool) Info() ToolInfo {
8387 return ToolInfo{
8488 Name: FetchToolName,
internal/llm/tools/glob.go+4
@@ -74,6 +74,10 @@ func NewGlobTool() BaseTool {
7474 return &globTool{}
7575}
7676
77+func (g *globTool) Name() string {
78+ return GlobToolName
79+}
80+
7781func (g *globTool) Info() ToolInfo {
7882 return ToolInfo{
7983 Name: GlobToolName,
internal/llm/tools/grep.go+4
@@ -140,6 +140,10 @@ func NewGrepTool() BaseTool {
140140 return &grepTool{}
141141}
142142
143+func (g *grepTool) Name() string {
144+ return GrepToolName
145+}
146+
143147func (g *grepTool) Info() ToolInfo {
144148 return ToolInfo{
145149 Name: GrepToolName,
internal/llm/tools/ls.go+4
@@ -74,6 +74,10 @@ func NewLsTool() BaseTool {
7474 return &lsTool{}
7575}
7676
77+func (l *lsTool) Name() string {
78+ return LSToolName
79+}
80+
7781func (l *lsTool) Info() ToolInfo {
7882 return ToolInfo{
7983 Name: LSToolName,
internal/llm/tools/sourcegraph.go+4
@@ -138,6 +138,10 @@ func NewSourcegraphTool() BaseTool {
138138 }
139139}
140140
141+func (t *sourcegraphTool) Name() string {
142+ return SourcegraphToolName
143+}
144+
141145func (t *sourcegraphTool) Info() ToolInfo {
142146 return ToolInfo{
143147 Name: SourcegraphToolName,
internal/llm/tools/tools.go+1
@@ -68,6 +68,7 @@ type ToolCall struct {
6868
6969type BaseTool interface {
7070 Info() ToolInfo
71+ Name() string
7172 Run(ctx context.Context, params ToolCall) (ToolResponse, error)
7273}
7374
internal/llm/tools/view.go+4
@@ -77,6 +77,10 @@ func NewViewTool(lspClients map[string]*lsp.Client) BaseTool {
7777 }
7878}
7979
80+func (v *viewTool) Name() string {
81+ return ViewToolName
82+}
83+
8084func (v *viewTool) Info() ToolInfo {
8185 return ToolInfo{
8286 Name: ViewToolName,
internal/llm/tools/write.go+4
@@ -84,6 +84,10 @@ func NewWriteTool(lspClients map[string]*lsp.Client, permissions permission.Serv
8484 }
8585}
8686
87+func (w *writeTool) Name() string {
88+ return WriteToolName
89+}
90+
8791func (w *writeTool) Info() ToolInfo {
8892 return ToolInfo{
8993 Name: WriteToolName,