diff --git a/agent/display.py b/agent/display.py index 3f1341485..474595d76 100644 --- a/agent/display.py +++ b/agent/display.py @@ -225,9 +225,11 @@ def build_tool_preview(tool_name: str, args: dict, max_len: int | None = None) - content = _oneline(args.get("content", "")) return f"+{target}: \"{content[:25]}{'...' if len(content) > 25 else ''}\"" elif action == "replace": - return f"~{target}: \"{_oneline(args.get('old_text', '')[:20])}\"" + old = _oneline(args.get("old_text") or "") or "" + return f"~{target}: \"{old[:20]}\"" elif action == "remove": - return f"-{target}: \"{_oneline(args.get('old_text', '')[:20])}\"" + old = _oneline(args.get("old_text") or "") or "" + return f"-{target}: \"{old[:20]}\"" return action if tool_name == "send_message": @@ -939,9 +941,13 @@ def get_cute_tool_message( if action == "add": return _wrap(f"┊ 🧠 memory +{target}: \"{_trunc(args.get('content', ''), 30)}\" {dur}") elif action == "replace": - return _wrap(f"┊ 🧠 memory ~{target}: \"{_trunc(args.get('old_text', ''), 20)}\" {dur}") + old = args.get("old_text") or "" + old = old if old else "" + return _wrap(f"┊ 🧠 memory ~{target}: \"{_trunc(old, 20)}\" {dur}") elif action == "remove": - return _wrap(f"┊ 🧠 memory -{target}: \"{_trunc(args.get('old_text', ''), 20)}\" {dur}") + old = args.get("old_text") or "" + old = old if old else "" + return _wrap(f"┊ 🧠 memory -{target}: \"{_trunc(old, 20)}\" {dur}") return _wrap(f"┊ 🧠 memory {action} {dur}") if tool_name == "skills_list": return _wrap(f"┊ 📚 skills list {args.get('category', 'all')} {dur}") diff --git a/tests/agent/test_display.py b/tests/agent/test_display.py index 5127a930b..4c1309a44 100644 --- a/tests/agent/test_display.py +++ b/tests/agent/test_display.py @@ -83,6 +83,13 @@ class TestBuildToolPreview: assert result is not None assert "user" in result + def test_memory_replace_missing_old_text_marked(self): + # Avoid empty quotes "" in the preview when old_text is missing/None. + result = build_tool_preview("memory", {"action": "replace", "target": "memory"}) + assert result == '~memory: ""' + result = build_tool_preview("memory", {"action": "remove", "target": "memory", "old_text": None}) + assert result == '-memory: ""' + def test_session_search_preview(self): result = build_tool_preview("session_search", {"query": "find something"}) assert result is not None