diff --git a/plugins/memory/honcho/__init__.py b/plugins/memory/honcho/__init__.py index 4e5ee3a1dbfd..36dc69e5ce7b 100644 --- a/plugins/memory/honcho/__init__.py +++ b/plugins/memory/honcho/__init__.py @@ -1437,7 +1437,7 @@ class HonchoMemoryProvider(MemoryProvider): return json.dumps({"result": card}) elif tool_name == "honcho_search": - query = args.get("query", "") + query = (args.get("query") or "").strip() if not query: return tool_error("Missing required parameter: query") max_tokens = min(int(args.get("max_tokens", 800)), 2000) @@ -1450,7 +1450,7 @@ class HonchoMemoryProvider(MemoryProvider): return json.dumps({"result": result}) elif tool_name == "honcho_reasoning": - query = args.get("query", "") + query = (args.get("query") or "").strip() if not query: return tool_error("Missing required parameter: query") peer = args.get("peer", "user") diff --git a/tests/honcho_plugin/test_session.py b/tests/honcho_plugin/test_session.py index 24d6cf90c6ce..ce1321c5eeb3 100644 --- a/tests/honcho_plugin/test_session.py +++ b/tests/honcho_plugin/test_session.py @@ -566,6 +566,19 @@ class TestConcludeToolDispatch: peer="hermes", ) + def test_honcho_search_rejects_whitespace_only_query(self): + """Whitespace-only query must not hit Honcho search API.""" + import json + provider = HonchoMemoryProvider() + provider._session_initialized = True + provider._session_key = "telegram:123" + provider._manager = MagicMock() + + result = provider.handle_tool_call("honcho_search", {"query": " \t\n "}) + parsed = json.loads(result) + assert parsed == {"error": "Missing required parameter: query"} + provider._manager.search_context.assert_not_called() + def test_honcho_reasoning_can_target_explicit_peer_id(self): provider = HonchoMemoryProvider() provider._session_initialized = True @@ -587,6 +600,19 @@ class TestConcludeToolDispatch: apply_injection_cap=False, ) + def test_honcho_reasoning_rejects_whitespace_only_query(self): + """Whitespace-only query must not hit Honcho dialectic API.""" + import json + provider = HonchoMemoryProvider() + provider._session_initialized = True + provider._session_key = "telegram:123" + provider._manager = MagicMock() + + result = provider.handle_tool_call("honcho_reasoning", {"query": " "}) + parsed = json.loads(result) + assert parsed == {"error": "Missing required parameter: query"} + provider._manager.dialectic_query.assert_not_called() + def test_honcho_conclude_missing_both_params_returns_error(self): """Calling honcho_conclude with neither conclusion nor delete_id returns a tool error.""" import json