diff --git a/back/internal/search/demo.go b/back/internal/search/demo.go index 65cbde1..3206eb1 100644 --- a/back/internal/search/demo.go +++ b/back/internal/search/demo.go @@ -21,6 +21,7 @@ func (m *Manager) InjectDemoSearches() { InputType: tools.InputTypeEmail, Profile: "default", StartedAt: now.Add(-2 * time.Hour), + pinned: true, PlannedTools: []ToolStatus{ {Name: "user-scanner", ResultCount: ptr(10)}, {Name: "github-recon", ResultCount: ptr(3)}, @@ -77,6 +78,7 @@ func (m *Manager) InjectDemoSearches() { InputType: tools.InputTypeUsername, Profile: "default", StartedAt: now.Add(-30 * time.Minute), + pinned: true, PlannedTools: []ToolStatus{ {Name: "user-scanner", ResultCount: ptr(10)}, {Name: "github-recon", ResultCount: ptr(0)}, diff --git a/back/internal/search/manager.go b/back/internal/search/manager.go index d39ded5..361fde7 100644 --- a/back/internal/search/manager.go +++ b/back/internal/search/manager.go @@ -131,6 +131,9 @@ func (m *Manager) purgeExpired() { m.mu.Lock() defer m.mu.Unlock() for id, s := range m.searches { + if s.pinned { + continue // demo/pinned searches are never purged + } ft := s.FinishedAt() if ft.IsZero() { continue // still running diff --git a/back/internal/search/search.go b/back/internal/search/search.go index 67679c9..d21c06c 100644 --- a/back/internal/search/search.go +++ b/back/internal/search/search.go @@ -32,6 +32,7 @@ type Search struct { PlannedTools []ToolStatus cancelFn context.CancelFunc + pinned bool // if true, never purged by the cleanup loop mu sync.RWMutex events []tools.Event