1package agent
2
3import (
4 "context"
5
6 "github.com/charmbracelet/crush/internal/history"
7 "github.com/charmbracelet/crush/internal/llm/prompt"
8 "github.com/charmbracelet/crush/internal/llm/provider"
9 "github.com/charmbracelet/crush/internal/lsp"
10 "github.com/charmbracelet/crush/internal/message"
11 "github.com/charmbracelet/crush/internal/permission"
12 "github.com/charmbracelet/crush/internal/session"
13)
14
15func NewCoderAgent(
16 ctx context.Context,
17 cwd string,
18 providers map[string]provider.Config,
19 smallModel Model,
20 largeModel Model,
21 contextFiles []string,
22 sessions session.Service,
23 messages message.Service,
24 permissions permission.Service,
25 lspClients map[string]*lsp.Client,
26 history history.Service,
27 mcps map[string]MCPConfig,
28) (Service, error) {
29 systemPrompt := prompt.CoderPrompt(cwd, contextFiles...)
30 tools := NewCoderTools(
31 ctx,
32 cwd,
33 sessions,
34 messages,
35 permissions,
36 lspClients,
37 history,
38 mcps,
39 )
40
41 return NewAgent(
42 ctx,
43 cwd,
44 systemPrompt,
45 tools,
46 providers,
47 smallModel,
48 largeModel,
49 sessions,
50 messages,
51 )
52}