1package agent
2
3import (
4 "errors"
5
6 "github.com/kujtimiihoxha/termai/internal/app"
7 "github.com/kujtimiihoxha/termai/internal/config"
8 "github.com/kujtimiihoxha/termai/internal/llm/models"
9 "github.com/kujtimiihoxha/termai/internal/llm/tools"
10)
11
12type coderAgent struct {
13 *agent
14}
15
16func (c *coderAgent) setAgentTool(sessionID string) {
17 inx := -1
18 for i, tool := range c.tools {
19 if tool.Info().Name == AgentToolName {
20 inx = i
21 break
22 }
23 }
24 if inx == -1 {
25 c.tools = append(c.tools, NewAgentTool(sessionID, c.App))
26 } else {
27 c.tools[inx] = NewAgentTool(sessionID, c.App)
28 }
29}
30
31func (c *coderAgent) Generate(sessionID string, content string) error {
32 c.setAgentTool(sessionID)
33 return c.generate(sessionID, content)
34}
35
36func NewCoderAgent(app *app.App) (Agent, error) {
37 model, ok := models.SupportedModels[config.Get().Model.Coder]
38 if !ok {
39 return nil, errors.New("model not supported")
40 }
41
42 agentProvider, titleGenerator, err := getAgentProviders(app.Context, model)
43 if err != nil {
44 return nil, err
45 }
46
47 mcpTools := GetMcpTools(app.Context)
48 return &coderAgent{
49 agent: &agent{
50 App: app,
51 tools: append(
52 []tools.BaseTool{
53 tools.NewBashTool(),
54 tools.NewEditTool(),
55 tools.NewGlobTool(),
56 tools.NewGrepTool(),
57 tools.NewLsTool(),
58 tools.NewViewTool(),
59 tools.NewWriteTool(),
60 }, mcpTools...,
61 ),
62 model: model,
63 agent: agentProvider,
64 titleGenerator: titleGenerator,
65 },
66 }, nil
67}