mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-07 08:02:23 +00:00
feat(browser): add BrowserProvider ABC mirroring web_search_provider template
Foundation commit for the browser-provider plugin migration (#25214). Mirrors the architecture established by PR #25182 (web providers): - agent/browser_provider.py — BrowserProvider ABC. Preserves the legacy CloudBrowserProvider lifecycle contract bit-for-bit (create_session, close_session, emergency_cleanup, session metadata shape) so the dispatcher in tools/browser_tool.py becomes a pure registry lookup. Renames is_configured() → is_available() for parity with WebSearchProvider. - agent/browser_registry.py — selection registry with the same three-rule resolution as web_search_registry: 1. Explicit config wins (returns even if is_available() == False so the dispatcher surfaces a precise credentials error) 2. Single-eligible shortcut 3. Legacy preference walk: browser-use → browserbase, filtered by availability. Firecrawl is intentionally NOT in the legacy walk (matches pre-migration behaviour — Firecrawl was only reachable via explicit browser.cloud_provider: firecrawl). - hermes_cli/plugins.py — adds ctx.register_browser_provider() facade, one-liner mirror of register_web_search_provider(). No plugins registered yet; no dispatcher cutover yet. The next commits move browserbase/browser-use/firecrawl into plugins/browser/<vendor>/ and switch tools/browser_tool.py over to the registry.
This commit is contained in:
parent
150b577da5
commit
c6e6909e5a
3 changed files with 408 additions and 0 deletions
|
|
@ -608,6 +608,38 @@ class PluginContext:
|
|||
self.manifest.name, provider.name,
|
||||
)
|
||||
|
||||
# -- browser provider registration ---------------------------------------
|
||||
|
||||
def register_browser_provider(self, provider) -> None:
|
||||
"""Register a cloud browser backend.
|
||||
|
||||
``provider`` must be an instance of
|
||||
:class:`agent.browser_provider.BrowserProvider`. The
|
||||
``provider.name`` attribute is what ``browser.cloud_provider`` in
|
||||
``config.yaml`` matches against when routing cloud-mode
|
||||
``browser_*`` tool calls.
|
||||
|
||||
Mirrors :meth:`register_web_search_provider` exactly — same
|
||||
registration shape, same gating, same logging. The browser
|
||||
subsystem's dispatcher (:func:`tools.browser_tool._get_cloud_provider`)
|
||||
consults the registry built up by these calls.
|
||||
"""
|
||||
from agent.browser_provider import BrowserProvider
|
||||
from agent.browser_registry import register_provider as _register_browser_provider
|
||||
|
||||
if not isinstance(provider, BrowserProvider):
|
||||
logger.warning(
|
||||
"Plugin '%s' tried to register a browser provider that does "
|
||||
"not inherit from BrowserProvider. Ignoring.",
|
||||
self.manifest.name,
|
||||
)
|
||||
return
|
||||
_register_browser_provider(provider)
|
||||
logger.info(
|
||||
"Plugin '%s' registered browser provider: %s",
|
||||
self.manifest.name, provider.name,
|
||||
)
|
||||
|
||||
# -- platform adapter registration ---------------------------------------
|
||||
|
||||
def register_platform(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue