fix(tools): handle dict URLs in web_extract display and tool processing

When web_search results are passed directly to web_extract, the URLs
field contains dict objects (e.g., {"url": "...", "title": "..."})
rather than plain URL strings. Two code paths assumed URLs were always
strings and crashed:

- agent/display.py get_cute_tool_message for web_extract: tried to call
  url.replace() on a dict, causing AttributeError
- tools/web_tools.py web_extract_tool loop: tried regex search on a dict,
  causing TypeError

Both now extract the URL string from dict objects (url or href field) or
fall back to empty string, preserving the cosmetic display and allowing
the tool to process the URLs correctly.

Fixes #61693
This commit is contained in:
liuhao1024
2026-07-10 07:17:54 +08:00
committed by kshitij
parent 8727e67295
commit 7ae9faecf7
4 changed files with 199 additions and 0 deletions
+5
View File
@@ -763,6 +763,11 @@ async def web_extract_tool(
from urllib.parse import unquote
normalized_urls: List[str] = []
for _url in urls:
# Handle dict objects from web_search results
if isinstance(_url, dict):
_url = _url.get("url") or _url.get("href") or ""
elif not isinstance(_url, str):
_url = str(_url)
normalized_url = normalize_url_for_request(_url)
if (
_PREFIX_RE.search(_url)