Skip to content

feat: add Bing and Google web search providers for AI discovery#114

Open
linroid wants to merge 1 commit intomainfrom
feat/search-providers
Open

feat: add Bing and Google web search providers for AI discovery#114
linroid wants to merge 1 commit intomainfrom
feat/search-providers

Conversation

@linroid
Copy link
Owner

@linroid linroid commented Feb 24, 2026

Summary

  • Add BingSearchProvider (Bing Web Search API v7) and GoogleSearchProvider (Google Custom Search JSON API) as real implementations of SearchProvider
  • Auto-resolve provider from SearchConfig.provider in AiModule.create() — no manual wiring needed
  • CLI, Desktop, and Android read env vars (BING_SEARCH_API_KEY or GOOGLE_SEARCH_API_KEY + GOOGLE_SEARCH_CX) to auto-select the provider
  • DummySearchProvider remains the fallback when no search API is configured

Test plan

  • Unit tests for query building (buildQuery, buildMultiSiteQuery) with 0, 1, N sites
  • MockEngine integration tests for JSON parsing, empty results, missing fields, HTTP errors
  • ./gradlew :ai:discover:test passes
  • CLI, Desktop, Android modules compile clean
  • Manual: BING_SEARCH_API_KEY=<key> OPENAI_API_KEY=<key> ./gradlew :cli:run --args="ai-discover 'ubuntu 24.04 iso'"
  • Manual: GOOGLE_SEARCH_API_KEY=<key> GOOGLE_SEARCH_CX=<cx> OPENAI_API_KEY=<key> ./gradlew :cli:run --args="ai-discover 'ffmpeg download'"
  • Verify no search env vars → DummySearchProvider (empty results, no crash)

Wire real search APIs into the AI agent's searchWeb/searchSites tools,
which previously always returned empty results via DummySearchProvider.

- BingSearchProvider: Bing Web Search API v7 with site: operators
- GoogleSearchProvider: Google Custom Search JSON API with siteSearch
- Auto-resolve from SearchConfig.provider in AiModule
- CLI/Desktop/Android read BING_SEARCH_API_KEY or GOOGLE_SEARCH_API_KEY
  + GOOGLE_SEARCH_CX env vars to select the provider automatically
- MockEngine integration tests for JSON parsing and error handling
@chatgpt-codex-connector
Copy link

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@github-actions
Copy link
Contributor

Test Results

595 tests   - 350   595 ✅  - 350   7s ⏱️ -5s
 50 suites  -  32     0 💤 ±  0 
 50 files    -  32     0 ❌ ±  0 

Results for commit 3ea7c8f. ± Comparison against base commit 30b0e51.

This pull request removes 350 tests.
wasmJsBrowserTest.com.linroid.ketch.api.DownloadPriorityTest ‑ ordinal_ordering[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ isComplete_whenFullyDownloaded[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ isComplete_whenOverDownloaded[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ isNotComplete_whenPartial[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ isNotComplete_whenZeroTotal[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ percent_complete[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ percent_halfComplete[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ percent_zeroProgress[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadProgressTest ‑ percent_zeroTotal_returnsZero[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
wasmJsBrowserTest.com.linroid.ketch.api.DownloadRequestTest ‑ blankUrl_throws[wasmJs, browser, ChromeHeadless144.0.0.0, Linux0.0.0]
…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant