deer-flow/scripts
jp0xz a6dd2876f0
feat(community): add GroundRoute web search + fetch engine (#3675)
* feat(groundroute): add GroundRoute community web_search + web_fetch tools

GroundRoute is a meta search layer over six engines (Serper, Brave, Exa,
Tavily, Firecrawl, Perplexity) with price-based routing and failover. This
adds a self-contained community engine module (httpx only, no new required
deps) mirroring community/brave + community/tavily:
- web_search: POST /v1/search, normalize to {title,url,snippet,source_engine}.
- web_fetch: fetch a URL via mode=page.
- unit tests covering normalization, auth, clamping, and graceful errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(groundroute): register GroundRoute search + fetch in wizard and config

Add GroundRoute to the setup wizard provider lists (SEARCH_PROVIDERS +
WEB_FETCH_PROVIDERS) and as commented web_search + web_fetch examples in
config.example.yaml, mirroring tavily/serper/brave so SEARCH_API can select it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* style(groundroute): apply repo ruff format (line-length 240)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(groundroute): add GroundRoute to tools docs and config reference

Adds GroundRoute as a web_search and web_fetch option in the en + zh
tools.mdx pages (new tab alongside Tavily/Brave/Exa/etc.) and documents
GROUNDROUTE_API_KEY in CONFIGURATION.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(groundroute): define empty groundroute extra for clean install

The docs install line 'uv add deerflow-harness[groundroute]' (mirroring the
tavily/exa/firecrawl pattern) referenced an undefined extra, which uv accepts
but warns about. GroundRoute needs no extra packages (httpx is a core dep), so
declare an empty 'groundroute' extra in deerflow-harness optional-dependencies
so the documented command resolves without a warning.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(groundroute): per-tool api key + honor caller max_results (review)

Address maintainer review on PR #3675:
- _get_api_key(tool_name): web_fetch now reads the web_fetch config block's key
  instead of always web_search, so a flow that pairs GroundRoute fetch with a
  different search engine authenticates correctly. Mirrors serper/exa/firecrawl.
- web_search honors a caller-supplied max_results (sentinel default None),
  falling back to the configured value only when omitted, so the documented
  parameter is no longer silently discarded.
- warn-once is now keyed per tool. Tests cover both fixes (web_fetch key,
  agent max_results honored).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-06-21 15:55:10 +08:00
..
wizard feat(community): add GroundRoute web search + fetch engine (#3675) 2026-06-21 15:55:10 +08:00
_detector_cli.py chore(blocking-io): fail-loud repo-root resolution and shared detector CLI shim (#3512) 2026-06-12 17:16:01 +08:00
check.py fix(check): windows pnpm version detection in check script (#2189) 2026-04-14 10:29:44 +08:00
check.sh feat(dx): Setup Wizard + doctor command — closes #2030 (#2034) 2026-04-10 17:43:39 +08:00
cleanup-containers.sh feat: send custom event 2026-02-06 17:48:15 +08:00
config-upgrade.sh Fix Windows startup and dependency checks (#1709) 2026-04-01 23:13:00 +08:00
configure.py fix: make check/config cross-platform for Windows (#1080) (#1093) 2026-03-13 21:33:12 +08:00
deploy.sh fix(security): mount host Docker socket only in aio (DooD) sandbox mode (#3517) 2026-06-14 11:03:50 +08:00
detect_blocking_io_static.py chore(blocking-io): fail-loud repo-root resolution and shared detector CLI shim (#3512) 2026-06-12 17:16:01 +08:00
detect_thread_boundaries.py chore(blocking-io): fail-loud repo-root resolution and shared detector CLI shim (#3512) 2026-06-12 17:16:01 +08:00
detect_uv_extras.py feat(channels): enhance Discord with mention-only mode, thread routing, and typing indicators (#2842) 2026-05-15 22:30:05 +08:00
docker.sh fix(security): mount host Docker socket only in aio (DooD) sandbox mode (#3517) 2026-06-14 11:03:50 +08:00
doctor.py feat: add fastCRW provider (#3585) 2026-06-21 09:30:55 +08:00
export_claude_code_oauth.py feat: add Claude Code OAuth and Codex CLI as LLM providers (#1166) 2026-03-22 22:39:50 +08:00
load_memory_sample.py feat: add memory management actions and local filters in memory settings (#1467) 2026-03-29 13:14:45 +08:00
run-with-git-bash.cmd fix: use Git Bash for Windows local startup (#1551) 2026-03-29 21:38:29 +08:00
sandbox_memory_profile.py chore: add sandbox memory profiling tools (#3249) 2026-06-03 22:02:27 +08:00
scan_changed_blocking_io.py chore(blocking-io): fail-loud repo-root resolution and shared detector CLI shim (#3512) 2026-06-12 17:16:01 +08:00
serve.sh fix: make local-dev (make dev) work on non-root / NFS hosts (#3590) 2026-06-19 23:20:55 +08:00
setup-sandbox.sh fix(sandbox): make setup-sandbox.sh script executable (#3618) 2026-06-17 12:32:52 +08:00
setup_wizard.py feat(im): Add user-owned IM channel connections (#3487) 2026-06-12 15:24:58 +08:00
start-daemon.sh feat: unified serve.sh with gateway mode support (#1847) 2026-04-05 21:07:35 +08:00
sync_labels.py feat(ci): PR/issue auto-labeling + declarative label sync (#3360) 2026-06-03 16:40:24 +08:00
tool-error-degradation-detection.sh refactor(lead-agent): make build_middlewares public to drop the last cross-module private import (#3458) 2026-06-09 11:56:28 +08:00
wait-for-port.sh Fix 'make dev' failure in Windows environment (#3236) 2026-06-09 22:37:54 +08:00