openclaw/docs/tools
AkosCz 3a3c2da916
[Feature]: Add Gemini (Google Search grounding) as web_search provider (#13075)
* feat: add Gemini (Google Search grounding) as web_search provider

Add Gemini as a fourth web search provider alongside Brave, Perplexity,
and Grok. Uses Gemini's built-in Google Search grounding tool to return
search results with citations.

- Add runGeminiSearch() with Google Search grounding via tools API
- Resolve Gemini's grounding redirect URLs to direct URLs via parallel
  HEAD requests (5s timeout, graceful fallback)
- Add Gemini config block (apiKey, model) with env var fallback
- Default model: gemini-2.5-flash (fast, cheap, grounding-capable)
- Strip API key from error messages for security
- Add config validation tests for Gemini provider
- Update docs/tools/web.md with Gemini provider documentation

Closes #13074

* feat: auto-detect search provider from available API keys

When no explicit provider is configured, resolveSearchProvider now
checks for available API keys in priority order (Brave → Gemini →
Perplexity → Grok) and selects the first provider with a valid key.

- Add auto-detection logic using existing resolve*ApiKey functions
- Export resolveSearchProvider via __testing_provider for tests
- Add 8 tests covering auto-detection, priority order, and explicit override
- Update docs/tools/web.md with auto-detection documentation

* fix: merge __testing exports, downgrade auto-detect log to debug

* fix: use defaultRuntime.log instead of .debug (not in RuntimeEnv type)

* fix: mark gemini apiKey as sensitive in zod schema

* fix: address Greptile review — add externalContent to Gemini payload, add Gemini/Grok entries to schema labels/help, remove dead schema-fields.ts

* fix(web-search): add JSON parse guard for Gemini API responses

Addresses Greptile review comment: add try/catch to handle non-JSON
responses from Gemini API gracefully, preventing runtime errors on
malformed responses.

Note: FIELD_HELP entries for gemini.apiKey and gemini.model were
already present in schema.help.ts, and gemini.apiKey was already
marked as sensitive in zod-schema.agent-runtime.ts (both fixed in
earlier commits).

* fix: use structured readResponseText result in Gemini error path

readResponseText returns { text, truncated, bytesRead }, not a string.
The Gemini error handler was using the result object directly, which
would always be truthy and never fall through to res.statusText.
Align with Perplexity/xAI/Brave error patterns.

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

* style: fix import order and formatting after rebase onto main

* Web search: send Gemini API key via header

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-02-23 09:30:51 -05:00
..
agent-send.md Docs: add nav titles across docs (#5689) 2026-01-31 15:04:03 -06:00
apply-patch.md fix(security): default apply_patch workspace containment 2026-02-15 03:19:27 +01:00
browser-linux-troubleshooting.md revert(docs): undo markdownlint autofix churn 2026-02-06 10:00:08 -05:00
browser-login.md chore(skills): remove bird skill 2026-02-06 22:28:44 -08:00
browser.md CLI: resolve parent/subcommand option collisions (#18725) 2026-02-17 20:57:09 -05:00
chrome-extension.md fix(browser): unify extension relay auth on gateway token 2026-02-19 08:40:40 +01:00
clawhub.md Docs: expand ClawHub overview 2026-02-02 02:26:11 -08:00
creating-skills.md docs: add missing summaries and read_when hints 2026-02-22 20:37:02 +01:00
elevated.md fix(security): tighten elevated allowFrom sender matching 2026-02-22 22:00:08 +01:00
exec-approvals.md fix(security): harden allow-always wrapper persistence 2026-02-22 22:55:33 +01:00
exec.md fix(exec): restore sandbox as implicit host default 2026-02-23 01:48:24 +01:00
firecrawl.md Docs: add nav titles across docs (#5689) 2026-01-31 15:04:03 -06:00
index.md docs: document thread-bound subagent sessions and remove plan 2026-02-21 19:59:55 +01:00
llm-task.md revert(docs): undo markdownlint autofix churn 2026-02-06 10:00:08 -05:00
lobster.md refactor(lobster): remove lobsterPath overrides 2026-02-19 14:58:13 +01:00
loop-detection.md docs: add missing summary/read_when metadata 2026-02-22 20:45:09 +01:00
multi-agent-sandbox-tools.md fix(security): scope session tools and webhook secret fallback 2026-02-16 03:47:10 +01:00
plugin.md chore: remove dead plugin hook loader 2026-02-22 08:45:24 +01:00
reactions.md Docs: add nav titles across docs (#5689) 2026-01-31 15:04:03 -06:00
skills-config.md Docs: add nav titles across docs (#5689) 2026-01-31 15:04:03 -06:00
skills.md docs: canonicalize docs paths and align zh navigation (#11428) 2026-02-07 15:40:35 -05:00
slash-commands.md docs: document verbose-gated tool error details 2026-02-22 15:26:48 +01:00
subagents.md docs: keep channel names only in thread-support list 2026-02-22 14:39:40 +01:00
thinking.md docs: document verbose-gated tool error details 2026-02-22 15:26:48 +01:00
web.md [Feature]: Add Gemini (Google Search grounding) as web_search provider (#13075) 2026-02-23 09:30:51 -05:00