Skip to content

feat(web): add iFlow Search as native Web Search & Extract provider - #46559

Closed
zhengyanglsun wants to merge 3 commits into
NousResearch:mainfrom
zhengyanglsun:feat/iflow-web-search-provider
Closed

feat(web): add iFlow Search as native Web Search & Extract provider#46559
zhengyanglsun wants to merge 3 commits into
NousResearch:mainfrom
zhengyanglsun:feat/iflow-web-search-provider

Conversation

@zhengyanglsun

@zhengyanglsun zhengyanglsun commented Jun 15, 2026

Copy link
Copy Markdown

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 configure IFLOW_API_KEY (BYOK). Maps WebSearchProvider.search()POST /api/search/webSearch and extract()POST /api/search/webFetch against https://platform.iflow.cn (override via IFLOW_BASE_URL).

Intentionally separate from the existing MCP-based iFlow docs route (#29632).

Related Issue

Fixes #42646

Type of Change

  • ✨ New feature (non-breaking change that adds functionality)

Changes Made

  • plugins/web/iflow/{plugin.yaml,__init__.py,provider.py}IFlowWebSearchProvider (search + extract), BYOK
  • tools/web_tools.py — register iflow in backend sets, auto-detect, availability checks
  • hermes_cli/config.pyIFLOW_API_KEY, IFLOW_BASE_URL in OPTIONAL_ENV_VARS; status display
  • agent/web_search_registry.py — legacy fallback preference order
  • tests/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 includes iflow
  • website/docs/reference/environment-variables.md + zh-Hans i18n — document IFLOW_API_KEY / IFLOW_BASE_URL

How to Test

  1. Provider plugin discovery + behavior (no network):
    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
  2. Lint:
    uv run --extra dev ruff check plugins/web/iflow tests/tools/test_web_providers_iflow.py hermes_cli/config.py
    All checks passed
  3. Live BYOK smoke (requires IFLOW_API_KEY, outside pytest hermetic env):
    • webSearch("Hermes Agent", limit=1) → success
    • webFetch(["https://example.com"]) → success
    • Direct POST https://platform.iflow.cn/api/search/webSearch → HTTP 200

Note: pytest -m integration skips by design because root conftest.py strips credential env vars.

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits
  • I searched for existing PRs / issues to avoid duplicates
  • My PR contains only changes related to this feature
  • Scoped provider tests pass (74 passed); full pytest tests/ -q pending upstream CI after workflow approval
  • I've added tests for my changes
  • I've tested on my platform: macOS / Python 3.12

Documentation & Housekeeping

  • I've updated relevant documentation (environment-variables.md, en + zh-Hans)
  • cli-config.yaml.example — N/A (only new web.backend value iflow)
  • CONTRIBUTING.md / AGENTS.md — N/A
  • Cross-platform impact considered — pure-Python httpx provider
  • Tool descriptions/schemas — N/A (reuses existing web_search/web_extract schemas)

Closes #42646

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>
@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/tools Tool registry, model_tools, toolsets comp/plugins Plugin system and bundled plugins comp/cli CLI entry point, hermes_cli/, setup wizard tool/web Web search and extraction labels Jun 15, 2026
zhengyanglsun and others added 2 commits June 17, 2026 17:36
- 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>
@zhengyanglsun

Copy link
Copy Markdown
Author

CI workflows on this fork PR are currently awaiting maintainer approval (action_required on all 11 checks). When you have a moment, could you approve workflow runs so upstream CI can execute?

Local validation so far:

  • 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 passed
  • BYOK smoke with IFLOW_API_KEY: webSearch + webFetch succeeded against platform.iflow.cn

Recent housekeeping commits also:

  • profile-aware missing-key guidance (display_hermes_home())
  • IFLOW_API_KEY / IFLOW_BASE_URL documented in environment-variables.md (en + zh-Hans)
  • AUTHOR_MAP entry for contributor attribution check

Happy to address any review feedback. Thanks!

cc @teknium1 @kshitijk4poor

@teknium1

Copy link
Copy Markdown
Contributor

Thanks for the focused implementation and the BYOK validation documented in the PR. This is an automated hermes-sweeper review.

  • The change adds iFlow Search as a bundled vendor integration under plugins/web/iflow.
  • Hermes' standing policy is that new third-party product integrations do not land in the core tree, regardless of implementation quality, because ongoing compatibility maintenance belongs with the integration owner.
  • The linked issue Feature request: add iFlow Search as a native Web Search & Extract provider #42646 was already closed under this same policy. The existing web-provider interface supports a standalone iFlow plugin installed under ~/.hermes/plugins/ or distributed through a pip entry point, using ctx.register_web_search_provider(...).

Please publish iFlow Search as a standalone plugin repository; it can be promoted in #plugins-skills-and-skins.


Closed as not planned per standing maintainer policy (in-tree-provider-integration). This is a design-direction decision, not a code-quality judgment.


Closed as not-planned per standing maintainer policy (in-tree-provider-integration). This is a design-direction decision, not a code-quality judgment — see the Contribution Rubric in AGENTS.md for what the project is looking for. If you believe this policy was misapplied to your change, comment here and a maintainer will take a look.

@teknium1 teknium1 closed this Jul 14, 2026
@teknium1 teknium1 added the sweeper:not-planned Sweeper: closed per standing maintainer policy (design direction) label Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/plugins Plugin system and bundled plugins comp/tools Tool registry, model_tools, toolsets P3 Low — cosmetic, nice to have sweeper:not-planned Sweeper: closed per standing maintainer policy (design direction) tool/web Web search and extraction type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: add iFlow Search as a native Web Search & Extract provider

3 participants