feat(webui): add BYOK web search settings#3709
Merged
Merged
Conversation
Let WebUI users configure the single web search provider credential from BYOK while keeping saved secrets masked and hot-reloaded for new searches. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR extends the WebUI BYOK settings experience so users can configure Web Search credentials directly from the settings page, alongside existing LLM provider keys.
What changed
LLMandWeb Search.tools.web.searchconfiguration.DuckDuckGo: no credential requiredSearXNG: requires a base URLBrave,Tavily,Jina,Kagi,Olostep: require an API keyweb_searchcalls without restarting nanobot.Backend details
/api/settingswith aweb_searchpayload containing:/api/settings/web-search/updatefor updating the single Web Search provider config.WebSearchTool, matching the no-restart expectation of the WebUI settings flow.UX details
Save.Test plan
python -m pytest tests/channels/test_websocket_channel.py::test_settings_api_returns_safe_subset_and_updates_whitelist tests/tools/test_search_tools.py::test_web_search_tool_refreshes_dynamic_config_loaderpython -m ruff check nanobot/agent/loop.py nanobot/agent/tools/web.py nanobot/channels/websocket.py tests/channels/test_websocket_channel.py tests/tools/test_search_tools.pynpm test -- src/tests/api.test.ts src/tests/app-layout.test.tsxnpm run buildNotes
npm run lintwas not run successfully in this environment because the localeslintbinary was unavailable (eslint: not found). Focused TypeScript build, Vitest coverage, backend pytest, and focused Ruff checks passed.