1package agent
2
3import (
4 "context"
5
6 "github.com/charmbracelet/crush/internal/history"
7 "github.com/charmbracelet/crush/internal/llm/tools"
8 "github.com/charmbracelet/crush/internal/lsp"
9 "github.com/charmbracelet/crush/internal/message"
10 "github.com/charmbracelet/crush/internal/permission"
11 "github.com/charmbracelet/crush/internal/session"
12)
13
14func NewCoderTools(
15 ctx context.Context,
16 cwd string,
17 sessions session.Service,
18 messages message.Service,
19 permissions permission.Service,
20 lspClients map[string]*lsp.Client,
21 history history.Service,
22 mcps map[string]MCPConfig,
23) tools.Registry {
24 toolFn := func() []tools.BaseTool {
25 allTools := []tools.BaseTool{
26 tools.NewBashTool(permissions, cwd),
27 tools.NewDownloadTool(permissions, cwd),
28 tools.NewEditTool(lspClients, permissions, history, cwd),
29 tools.NewFetchTool(permissions, cwd),
30 tools.NewGlobTool(cwd),
31 tools.NewGrepTool(cwd),
32 tools.NewLsTool(cwd),
33 tools.NewSourcegraphTool(),
34 tools.NewViewTool(lspClients, cwd),
35 tools.NewWriteTool(lspClients, permissions, history, cwd),
36 }
37 mcpTools := GetMCPTools(ctx, cwd, mcps, permissions)
38 allTools = append(allTools, mcpTools...)
39 if len(lspClients) > 0 {
40 allTools = append(allTools, tools.NewDiagnosticsTool(lspClients))
41 }
42 return allTools
43 }
44 return tools.NewRegistry(toolFn)
45}
46
47func NewTaskTools(cwd string) tools.Registry {
48 return tools.NewRegistryFromTools([]tools.BaseTool{
49 tools.NewGlobTool(cwd),
50 tools.NewGrepTool(cwd),
51 tools.NewLsTool(cwd),
52 tools.NewSourcegraphTool(),
53 // no need for LSP info here
54 tools.NewViewTool(map[string]*lsp.Client{}, cwd),
55 })
56}