feat(web): add iFlow Search as native Web Search & Extract provider - #46559
feat(web): add iFlow Search as native Web Search & Extract provider#46559zhengyanglsun wants to merge 3 commits into
Conversation
Adds a bundled web provider plugin for iFlow Search (search + extract) following the Web Search provider plugin architecture from NousResearch#25182. Closes NousResearch#42646 Co-authored-by: Cursor <cursoragent@cursor.com>
- Use profile-aware display_hermes_home() in missing-key guidance - Document IFLOW_API_KEY and IFLOW_BASE_URL in env var reference (en/zh) - Register IFLOW_BASE_URL in OPTIONAL_ENV_VARS and config setters - Show iFlow Search in hermes status API key list - Assert missing-key error avoids hardcoded ~/.hermes path in tests Co-authored-by: Cursor <cursoragent@cursor.com>
Prevents Contributor Attribution Check failure once upstream CI runs. Co-authored-by: Cursor <cursoragent@cursor.com>
|
CI workflows on this fork PR are currently awaiting maintainer approval ( Local validation so far:
Recent housekeeping commits also:
Happy to address any review feedback. Thanks! |
|
Thanks for the focused implementation and the BYOK validation documented in the PR. This is an automated hermes-sweeper review.
Please publish iFlow Search as a standalone plugin repository; it can be promoted in Closed as not planned per standing maintainer policy ( Closed as not-planned per standing maintainer policy ( |
What does this PR do?
Adds iFlow Search as a bundled native Web Search & Extract provider (
iflow), following the plugin architecture from #25182. Users select iFlow from the Web Search & Extract provider picker and configureIFLOW_API_KEY(BYOK). MapsWebSearchProvider.search()→POST /api/search/webSearchandextract()→POST /api/search/webFetchagainsthttps://platform.iflow.cn(override viaIFLOW_BASE_URL).Intentionally separate from the existing MCP-based iFlow docs route (#29632).
Related Issue
Fixes #42646
Type of Change
Changes Made
plugins/web/iflow/{plugin.yaml,__init__.py,provider.py}—IFlowWebSearchProvider(search + extract), BYOKtools/web_tools.py— registeriflowin backend sets, auto-detect, availability checkshermes_cli/config.py—IFLOW_API_KEY,IFLOW_BASE_URLinOPTIONAL_ENV_VARS; status displayagent/web_search_registry.py— legacy fallback preference ordertests/tools/test_web_providers_iflow.py— dedicated provider tests (mocked httpx, no network)tests/plugins/web/test_web_search_provider_plugins.py— bundled provider set includesiflowwebsite/docs/reference/environment-variables.md+ zh-Hans i18n — documentIFLOW_API_KEY/IFLOW_BASE_URLHow to Test
uv run --extra dev pytest tests/tools/test_web_providers_iflow.py tests/plugins/web/test_web_search_provider_plugins.py -m "not integration"→ 74 passed, 2 deselected
uv run --extra dev ruff check plugins/web/iflow tests/tools/test_web_providers_iflow.py hermes_cli/config.py→ All checks passed
IFLOW_API_KEY, outside pytest hermetic env):webSearch("Hermes Agent", limit=1)→ successwebFetch(["https://example.com"])→ successPOST https://platform.iflow.cn/api/search/webSearch→ HTTP 200Note:
pytest -m integrationskips by design because rootconftest.pystrips credential env vars.Checklist
Code
pytest tests/ -qpending upstream CI after workflow approvalDocumentation & Housekeeping
environment-variables.md, en + zh-Hans)cli-config.yaml.example— N/A (only newweb.backendvalueiflow)CONTRIBUTING.md/AGENTS.md— N/Aweb_search/web_extractschemas)Closes #42646