@@ -6,7 +6,6 @@ import (
"io"
"log/slog"
"os"
- "time"
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/crush/internal/app"
@@ -84,15 +83,12 @@ to assist developers in writing, debugging, and understanding code directly from
return err
}
- slog.Info("Initing...")
- now := time.Now()
app, err := app.New(ctx, conn, cfg)
if err != nil {
slog.Error(fmt.Sprintf("Failed to create app instance: %v", err))
return err
}
defer app.Shutdown()
- slog.Info("Init done", "took", time.Since(now).String())
prompt, err = maybePrependStdin(prompt)
if err != nil {
@@ -187,6 +187,10 @@ func NewAgent(
go func() {
slog.Info("Initializing agent tools", "agent", agentCfg.ID)
+ defer func() {
+ slog.Info("Initialized agent tools", "agent", agentCfg.ID)
+ agent.toolsDone.Store(true)
+ }()
cwd := cfg.WorkingDir()
allTools := []tools.BaseTool{
@@ -203,29 +207,28 @@ func NewAgent(
}
mcpTools := GetMCPTools(ctx, permissions, cfg)
+ allTools = append(allTools, mcpTools...)
+
if len(lspClients) > 0 {
- mcpTools = append(mcpTools, tools.NewDiagnosticsTool(lspClients))
+ allTools = append(allTools, tools.NewDiagnosticsTool(lspClients))
}
- allTools = append(allTools, mcpTools...)
if agentTool != nil {
allTools = append(allTools, agentTool)
}
- agentTools := []tools.BaseTool{}
if agentCfg.AllowedTools == nil {
- agentTools = allTools
- } else {
- for _, tool := range allTools {
- if slices.Contains(agentCfg.AllowedTools, tool.Name()) {
- agentTools = append(agentTools, tool)
- }
- }
+ agent.tools = allTools
+ return
}
- slog.Info("Initialized agent tools", "agent", agentCfg.ID)
- agent.tools = agentTools
- agent.toolsDone.Store(true)
+ var filteredTools []tools.BaseTool
+ for _, tool := range allTools {
+ if slices.Contains(agentCfg.AllowedTools, tool.Name()) {
+ filteredTools = append(filteredTools, tool)
+ }
+ }
+ agent.tools = filteredTools
}()
return agent, nil