hermes-agent/plugins/web
kshitijk4poor 31fcde876c feat(web): tavily plugin — first three-capability plugin (search + extract + crawl)
Migrates Tavily from inline _tavily_request() / _normalize_tavily_*
helpers in tools/web_tools.py to a bundled plugin at plugins/web/tavily/.

First plugin in the codebase to advertise supports_crawl=True. Tavily is
unique among built-in backends in offering a native /crawl endpoint that
walks linked pages from a seed URL with optional natural-language
instructions and depth ("basic" or "advanced").

Capabilities:
  - supports_search()  -> True (Tavily /search)
  - supports_extract() -> True (Tavily /extract)
  - supports_crawl()   -> True (Tavily /crawl)
  All sync (httpx.post under the hood).

The crawl method accepts forward-compat kwargs (instructions, depth,
limit) and is gated against unsafe URLs/policy by the dispatcher in
web_crawl_tool — exactly as before.

Behavior preserved:
  - TAVILY_API_KEY required (ValueError → typed error response)
  - TAVILY_BASE_URL env override honored
  - /crawl requires both body auth AND Bearer header — preserved
  - failed_results[] and failed_urls[] response keys mapped to per-URL
    items with error fields rather than raising
  - max_results capped at 20 server-side

Adds "tavily" to _WEB_PLUGIN_SKIPLIST.

The legacy inline _tavily_request / _normalize_tavily_search_results /
_normalize_tavily_documents / _TAVILY_BASE_URL in tools/web_tools.py are
NOT deleted yet — search/extract dispatch and the entire web_crawl_tool
function still reference them. They go away when those dispatchers are
cut over to the registry.

E2E verified:
  - Tavily registers with all 3 capabilities
  - Provider list now: brave-free, ddgs, exa, parallel, searxng, tavily
2026-05-13 22:31:28 -07:00
..
brave_free refactor(web): remove legacy in-tree provider modules 2026-05-13 22:31:28 -07:00
ddgs refactor(web): remove legacy in-tree provider modules 2026-05-13 22:31:28 -07:00
exa feat(web): exa plugin — first multi-capability migration (search + extract) 2026-05-13 22:31:28 -07:00
parallel feat(web): parallel plugin — first async-extract plugin 2026-05-13 22:31:28 -07:00
searxng refactor(web): remove legacy in-tree provider modules 2026-05-13 22:31:28 -07:00
tavily feat(web): tavily plugin — first three-capability plugin (search + extract + crawl) 2026-05-13 22:31:28 -07:00
__init__.py feat(web): brave_free plugin (first migration from tools/web_providers/) 2026-05-13 22:31:28 -07:00