SuperCoder/internal/llm/agent/coder.go

64 lines
1.4 KiB
Go
Raw Normal View History

2025-03-23 22:25:31 +01:00
package agent
import (
2025-04-10 13:29:44 +02:00
"context"
2025-03-27 22:35:48 +01:00
"errors"
2025-03-23 22:25:31 +01:00
2025-03-27 22:35:48 +01:00
"github.com/kujtimiihoxha/termai/internal/config"
2025-03-23 22:25:31 +01:00
"github.com/kujtimiihoxha/termai/internal/llm/models"
"github.com/kujtimiihoxha/termai/internal/llm/tools"
2025-04-13 14:37:05 +02:00
"github.com/kujtimiihoxha/termai/internal/lsp"
"github.com/kujtimiihoxha/termai/internal/message"
"github.com/kujtimiihoxha/termai/internal/permission"
"github.com/kujtimiihoxha/termai/internal/session"
2025-03-23 22:25:31 +01:00
)
2025-03-27 22:35:48 +01:00
type coderAgent struct {
2025-04-13 14:37:05 +02:00
Service
2025-03-23 22:25:31 +01:00
}
2025-04-13 14:37:05 +02:00
func NewCoderAgent(
permissions permission.Service,
sessions session.Service,
messages message.Service,
lspClients map[string]*lsp.Client,
) (Service, error) {
2025-03-27 22:35:48 +01:00
model, ok := models.SupportedModels[config.Get().Model.Coder]
if !ok {
return nil, errors.New("model not supported")
}
2025-03-23 22:25:31 +01:00
2025-04-13 13:17:17 +02:00
ctx := context.Background()
2025-04-13 14:37:05 +02:00
otherTools := GetMcpTools(ctx, permissions)
if len(lspClients) > 0 {
otherTools = append(otherTools, tools.NewDiagnosticsTool(lspClients))
}
agent, err := NewAgent(
ctx,
sessions,
messages,
model,
append(
[]tools.BaseTool{
tools.NewBashTool(permissions),
tools.NewEditTool(lspClients, permissions),
tools.NewFetchTool(permissions),
tools.NewGlobTool(),
tools.NewGrepTool(),
tools.NewLsTool(),
tools.NewSourcegraphTool(),
tools.NewViewTool(lspClients),
tools.NewWriteTool(lspClients, permissions),
2025-04-15 11:58:01 +02:00
NewAgentTool(sessions, messages, lspClients),
2025-04-13 14:37:05 +02:00
}, otherTools...,
),
)
2025-03-27 22:35:48 +01:00
if err != nil {
return nil, err
2025-03-23 22:25:31 +01:00
}
2025-03-27 22:35:48 +01:00
return &coderAgent{
2025-04-13 14:37:05 +02:00
agent,
2025-03-27 22:35:48 +01:00
}, nil
2025-03-23 22:25:31 +01:00
}