fix: clear regex cache on new session to prevent unbounded growth (#2161)
M1xA
created
Change summary
internal/agent/tools/grep.go | 11 +++++++++++
internal/ui/model/ui.go | 2 ++
2 files changed, 13 insertions(+)
Detailed changes
@@ -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()
@@ -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())