v0.5.0
Breaking: leaner public response (F11)
The payload goes straight into an LLM context, so redundant fields cost real tokens:
answeris omitted when a provider produces no prose (keyword providers no longer send an empty string)- result rows no longer repeat the
providername that is already the enclosing dictionary key
Reliability
web_searcharguments are now validated against the declared inputSchema before dispatch; stdio and HTTP return a structuredinvalid_argumentstool error (empty query, wrong types, unknown providers, out-of-range values, unknown fields)- provider misconfiguration no longer breaks startup: only enabled providers are constructed, and a bad
AGENT_WEB_SEARCH_TIMEOUTraises a readable ValueError - tests are isolated from developer-machine provider credentials
Fixes & cleanup
- Grok: correct tool-name matching direction (fixes
mode=both), dead code removed - Parallel: User-Agent version no longer falls back to a stale 0.1.0
- ddgs: removed a dead ImportError branch with a misleading install hint
- ARK: continuation threshold is now a named constant documenting the second billed request
- Exa: removed a dead
min(100, ...)bound - Dropped redundant starlette/uvicorn hard dependencies (mcp already requires them)
- Docs: corrected timeout semantics and Parallel result-cap behavior (en/zh)
Tooling
- Stricter ruff rule set (BLE/I/UP/B/SIM/RUF/C4/PT/E501), all findings fixed
ruff formatapplied and enforced in CI
97 tests pass on Python 3.10-3.13.