From fe3e68f5728b04b5b66cfaf62558c36e5852b40d Mon Sep 17 00:00:00 2001 From: kshitijk4poor Date: Thu, 16 Apr 2026 22:19:54 +0530 Subject: [PATCH] fix(honcho): strip whitespace from conclusion and delete_id inputs Models may send whitespace-only strings like {"conclusion": " "} which pass bool() but create meaningless conclusions. Strip both inputs so whitespace-only values are treated as empty. Adds tests for whitespace-only conclusion and delete_id. Reviewed-by: @erosika --- plugins/memory/honcho/__init__.py | 4 ++-- tests/honcho_plugin/test_session.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/plugins/memory/honcho/__init__.py b/plugins/memory/honcho/__init__.py index fcd64b881..ca44ce601 100644 --- a/plugins/memory/honcho/__init__.py +++ b/plugins/memory/honcho/__init__.py @@ -1008,8 +1008,8 @@ class HonchoMemoryProvider(MemoryProvider): return json.dumps({"result": "\n\n".join(parts) or "No context available."}) elif tool_name == "honcho_conclude": - delete_id = args.get("delete_id") - conclusion = args.get("conclusion", "") + delete_id = (args.get("delete_id") or "").strip() + conclusion = args.get("conclusion", "").strip() peer = args.get("peer", "user") has_delete_id = bool(delete_id) diff --git a/tests/honcho_plugin/test_session.py b/tests/honcho_plugin/test_session.py index 404f82120..9784959d3 100644 --- a/tests/honcho_plugin/test_session.py +++ b/tests/honcho_plugin/test_session.py @@ -501,6 +501,30 @@ class TestConcludeToolDispatch: provider._manager.create_conclusion.assert_not_called() provider._manager.delete_conclusion.assert_not_called() + def test_honcho_conclude_rejects_whitespace_only_conclusion(self): + """Whitespace-only conclusion should be treated as empty.""" + import json + provider = HonchoMemoryProvider() + provider._session_initialized = True + provider._session_key = "telegram:123" + provider._manager = MagicMock() + result = provider.handle_tool_call("honcho_conclude", {"conclusion": " "}) + parsed = json.loads(result) + assert parsed == {"error": "Exactly one of conclusion or delete_id must be provided."} + provider._manager.create_conclusion.assert_not_called() + + def test_honcho_conclude_rejects_whitespace_only_delete_id(self): + """Whitespace-only delete_id should be treated as empty.""" + import json + provider = HonchoMemoryProvider() + provider._session_initialized = True + provider._session_key = "telegram:123" + provider._manager = MagicMock() + result = provider.handle_tool_call("honcho_conclude", {"delete_id": " "}) + parsed = json.loads(result) + assert parsed == {"error": "Exactly one of conclusion or delete_id must be provided."} + provider._manager.delete_conclusion.assert_not_called() + # --------------------------------------------------------------------------- # Message chunking