From 6fc4e36625fefd6a2e0848546644c4541d0a7031 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Wed, 18 Mar 2026 02:21:29 -0700 Subject: [PATCH] fix: search all sources by default in session_search (#1892) * fix: include ACP sessions in default search sources * fix: remove hardcoded source allowlist from session search The default source_filter was a hardcoded list that silently excluded any platform not explicitly listed. Instead of maintaining an ever-growing allowlist, remove it entirely so all sources are searched by default. Callers can still pass source_filter explicitly to narrow results. Follow-up to cherry-picked PR #1817. --------- Co-authored-by: someoneexistsontheinternet <154079416+someoneexistsontheinternet@users.noreply.github.com> Co-authored-by: Test --- hermes_state.py | 10 ++++------ tests/test_hermes_state.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/hermes_state.py b/hermes_state.py index e87997ec..b35723d1 100644 --- a/hermes_state.py +++ b/hermes_state.py @@ -757,16 +757,14 @@ class SessionDB: if not query: return [] - if source_filter is None: - source_filter = ["cli", "telegram", "discord", "whatsapp", "slack"] - # Build WHERE clauses dynamically where_clauses = ["messages_fts MATCH ?"] params: list = [query] - source_placeholders = ",".join("?" for _ in source_filter) - where_clauses.append(f"s.source IN ({source_placeholders})") - params.extend(source_filter) + if source_filter is not None: + source_placeholders = ",".join("?" for _ in source_filter) + where_clauses.append(f"s.source IN ({source_placeholders})") + params.extend(source_filter) if role_filter: role_placeholders = ",".join("?" for _ in role_filter) diff --git a/tests/test_hermes_state.py b/tests/test_hermes_state.py index f9155d3f..c731ccf3 100644 --- a/tests/test_hermes_state.py +++ b/tests/test_hermes_state.py @@ -210,6 +210,25 @@ class TestFTS5Search: sources = [r["source"] for r in results] assert all(s == "telegram" for s in sources) + def test_search_default_sources_include_acp(self, db): + db.create_session(session_id="s1", source="acp") + db.append_message("s1", role="user", content="ACP question about Python") + + results = db.search_messages("Python") + sources = [r["source"] for r in results] + assert "acp" in sources + + def test_search_default_includes_all_platforms(self, db): + """Default search (no source_filter) should find sessions from any platform.""" + for src in ("cli", "telegram", "signal", "homeassistant", "acp", "matrix"): + sid = f"s-{src}" + db.create_session(session_id=sid, source=src) + db.append_message(sid, role="user", content=f"universal search test from {src}") + + results = db.search_messages("universal search test") + found_sources = {r["source"] for r in results} + assert found_sources == {"cli", "telegram", "signal", "homeassistant", "acp", "matrix"} + def test_search_with_role_filter(self, db): db.create_session(session_id="s1", source="cli") db.append_message("s1", role="user", content="What is FastAPI?")