task.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/session"
13)
14
15type taskAgent struct {
16	Service
17}
18
19func NewTaskAgent(messages message.Service, sessions session.Service, lspClients map[string]*lsp.Client) (Service, error) {
20	model, ok := models.SupportedModels[config.Get().Model.Coder]
21	if !ok {
22		return nil, errors.New("model not supported")
23	}
24
25	ctx := context.Background()
26
27	agent, err := NewAgent(
28		ctx,
29		sessions,
30		messages,
31		model,
32		[]tools.BaseTool{
33			tools.NewGlobTool(),
34			tools.NewGrepTool(),
35			tools.NewLsTool(),
36			tools.NewSourcegraphTool(),
37			tools.NewViewTool(lspClients),
38		},
39	)
40	if err != nil {
41		return nil, err
42	}
43
44	return &taskAgent{
45		agent,
46	}, nil
47}