From f2632d5c78f945dba9a642178b9227ef3fe7d66f Mon Sep 17 00:00:00 2001 From: ciregenz Date: Fri, 5 Jun 2026 16:48:07 -0700 Subject: [PATCH] [eric] browser: long click names are card blobs not send controls, prefix no longer cut short --- backend/apps/agents/browser/browser_skills.py | 7 ++++++- backend/tests/test_browser_skills.py | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/backend/apps/agents/browser/browser_skills.py b/backend/apps/agents/browser/browser_skills.py index 06e86328..67b6f2df 100644 --- a/backend/apps/agents/browser/browser_skills.py +++ b/backend/apps/agents/browser/browser_skills.py @@ -309,7 +309,12 @@ def first_unsafe_step(steps: list[dict]) -> tuple[int, str]: p = s.get("params", {}) or {} probe = None if tool in ("BrowserClickByName", "BrowserClick"): - probe = {"action": "click", "name": p.get("name") or p.get("selector") or ""} + name = p.get("name") or p.get("selector") or "" + # Real Send controls have short names ("Send", "Send InMail"); a + # 100ch profile-card blob containing "Send a..." is not one, and + # flagging it cut a 6-step prefix to 1 (measured, r19). + if len(name) <= 40: + probe = {"action": "click", "name": name} elif tool == "BrowserType": probe = {"action": "type", "selector": p.get("selector") or ""} if probe and browser_batch_replay.is_send_step(probe): diff --git a/backend/tests/test_browser_skills.py b/backend/tests/test_browser_skills.py index 5bf03b83..b0c4ab7f 100644 --- a/backend/tests/test_browser_skills.py +++ b/backend/tests/test_browser_skills.py @@ -525,3 +525,17 @@ def test_template_task_ignores_possessive_apostrophes(): assert "chen's linkedin" in t14 assert _sig(r14) == _sig(r15) assert template_task("no quotes here at all") == ("no quotes here at all", []) + + +def test_long_card_blob_click_names_are_not_send_steps(): + from backend.apps.agents.browser.browser_skills import first_unsafe_step + flow = [ + {"tool": "BrowserNavigate", "params": {"url": "https://www.linkedin.com/search"}}, + {"tool": "BrowserClickByName", "params": {"name": ( + "Tyler Chen Premium • 1st Something Here Irvine, California, United States Send a message to Tyler" + )}}, + {"tool": "BrowserClickByName", "params": {"name": "Message"}}, + {"tool": "BrowserClickByName", "params": {"name": "Send"}}, + ] + i, why = first_unsafe_step(flow) + assert i == 3, f"expected the short Send click flagged, got {i}: {why}"