1package agent
2
3import (
4 "context"
5 "errors"
6
7 "github.com/kujtimiihoxha/termai/internal/config"
8 "github.com/kujtimiihoxha/termai/internal/llm/models"
9 "github.com/kujtimiihoxha/termai/internal/llm/tools"
10 "github.com/kujtimiihoxha/termai/internal/lsp"
11 "github.com/kujtimiihoxha/termai/internal/message"
12 "github.com/kujtimiihoxha/termai/internal/permission"
13 "github.com/kujtimiihoxha/termai/internal/session"
14)
15
16type coderAgent struct {
17 Service
18}
19
20func NewCoderAgent(
21 permissions permission.Service,
22 sessions session.Service,
23 messages message.Service,
24 lspClients map[string]*lsp.Client,
25) (Service, error) {
26 model, ok := models.SupportedModels[config.Get().Model.Coder]
27 if !ok {
28 return nil, errors.New("model not supported")
29 }
30
31 ctx := context.Background()
32 otherTools := GetMcpTools(ctx, permissions)
33 if len(lspClients) > 0 {
34 otherTools = append(otherTools, tools.NewDiagnosticsTool(lspClients))
35 }
36 agent, err := NewAgent(
37 ctx,
38 sessions,
39 messages,
40 model,
41 append(
42 []tools.BaseTool{
43 tools.NewBashTool(permissions),
44 tools.NewEditTool(lspClients, permissions),
45 tools.NewFetchTool(permissions),
46 tools.NewGlobTool(),
47 tools.NewGrepTool(),
48 tools.NewLsTool(),
49 tools.NewSourcegraphTool(),
50 tools.NewViewTool(lspClients),
51 tools.NewWriteTool(lspClients, permissions),
52 NewAgentTool(sessions, messages, lspClients),
53 }, otherTools...,
54 ),
55 )
56 if err != nil {
57 return nil, err
58 }
59
60 return &coderAgent{
61 agent,
62 }, nil
63}