coder.go

 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}