diff --git a/internal/agent/tools/grep.go b/internal/agent/tools/grep.go index 3111a3f56872f72bb1735f314637d5d530a4447b..8dc7598911a1ba368ba1b667648f0801508bba4f 100644 --- a/internal/agent/tools/grep.go +++ b/internal/agent/tools/grep.go @@ -64,6 +64,17 @@ func (rc *regexCache) get(pattern string) (*regexp.Regexp, error) { return regex, nil } +// ResetCache clears compiled regex caches to prevent unbounded growth across sessions. +func ResetCache() { + searchRegexCache.mu.Lock() + clear(searchRegexCache.cache) + searchRegexCache.mu.Unlock() + + globRegexCache.mu.Lock() + clear(globRegexCache.cache) + globRegexCache.mu.Unlock() +} + // Global regex cache instances var ( searchRegexCache = newRegexCache() diff --git a/internal/ui/model/ui.go b/internal/ui/model/ui.go index 1088212a91ef0810bce7c5316a1bb33cad204b46..32469b697508f28b6367d91190a5af9735c1c236 100644 --- a/internal/ui/model/ui.go +++ b/internal/ui/model/ui.go @@ -24,6 +24,7 @@ import ( tea "charm.land/bubbletea/v2" "charm.land/catwalk/pkg/catwalk" "charm.land/lipgloss/v2" + agenttools "github.com/charmbracelet/crush/internal/agent/tools" "github.com/charmbracelet/crush/internal/agent/tools/mcp" "github.com/charmbracelet/crush/internal/app" "github.com/charmbracelet/crush/internal/commands" @@ -2986,6 +2987,7 @@ func (m *UI) newSession() tea.Cmd { m.promptQueue = 0 m.pillsView = "" m.historyReset() + agenttools.ResetCache() return tea.Batch( func() tea.Msg { m.com.App.LSPManager.StopAll(context.Background())