hermes-bsd/hermes_cli
kshitijk4poor 1b9c539c6e feat(tools): mirror image_gen plugin-injection in Browser Automation picker
Drops the three hardcoded browser-provider rows (Browserbase, Browser Use,
Firecrawl) from TOOL_CATEGORIES['browser']['providers'] and replaces them
with runtime injection from agent.browser_registry — mirroring the
_plugin_web_search_providers() pattern PR #25182 established for the
Web Search and Extract category.

Adds _plugin_browser_providers() helper in hermes_cli/tools_config.py
that walks list_providers() and builds a TOOL_CATEGORIES-shape dict per
provider via get_setup_schema(). The new visible_providers() hook calls
it for cat['name'] == 'Browser Automation'.

The three remaining hardcoded rows are non-provider UX setup-flow rows:
  - 'Nous Subscription (Browser Use cloud)' — managed Browser Use billed
    via Nous subscription; uses the browser-use plugin as the underlying
    backend but has distinct setup UX (requires_nous_auth gates it).
  - 'Local Browser' — headless Chromium, no CloudBrowserProvider.
  - 'Camofox' — anti-detection local Firefox; _is_camofox_mode()
    short-circuits the cloud-provider dispatch path entirely.

Verified the picker output matches pre-migration order/content:
  Local Browser, Camofox, Browser Use, Browserbase, Firecrawl
(with 'Nous Subscription' surfaced only when the user is Nous-authed,
unchanged from main).
2026-05-17 04:04:15 -07:00
..
proxy chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
__init__.py chore: release v0.14.0 (2026.5.16) (#26862) 2026-05-16 02:58:57 -07:00
_parser.py
_subprocess_compat.py
auth.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
auth_commands.py feat(xai-oauth): add xAI Grok OAuth (SuperGrok Subscription) provider 2026-05-15 12:11:32 -07:00
azure_detect.py
backup.py
banner.py refactor: DRY cleanup from code review 2026-05-15 14:45:43 -07:00
browser_connect.py
callbacks.py
checkpoints.py
claw.py
cli_output.py
clipboard.py fix(clipboard): only read PNG signature bytes, not entire file 2026-05-13 22:54:21 -07:00
codex_models.py
codex_runtime_plugin_migration.py fix(codex-runtime): de-dup [plugins.X] tables and stop leaking HERMES_HOME into config.toml 2026-05-15 02:31:30 -07:00
codex_runtime_switch.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
colors.py
commands.py fix(gateway): add codex runtime telegram alias 2026-05-17 02:31:18 -07:00
completion.py test(cli): strengthen zsh completion regression coverage 2026-05-13 09:34:15 -07:00
config.py fix: preserve discover_models in _normalize_custom_provider_entry 2026-05-16 23:05:27 -07:00
copilot_auth.py
cron.py feat(cron): support name-based lookup for job operations 2026-05-15 01:36:03 -07:00
curator.py
curses_ui.py
debug.py
default_soul.py
dep_ensure.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
dingtalk_auth.py
doctor.py fix(doctor): SSH check ignores TERMINAL_SSH_USER, TERMINAL_SSH_PORT, TERMINAL_SSH_KEY 2026-05-17 02:31:18 -07:00
dump.py
env_loader.py
fallback_cmd.py
gateway.py fix(gateway): add missing logger definition to prevent NameError in _all_platforms 2026-05-16 22:43:08 -07:00
gateway_windows.py
goals.py feat: inject current time into goal judge prompt 2026-05-16 23:05:27 -07:00
hooks.py
inventory.py refactor(inventory): extract shared ConfigContext + build_models_payload 2026-05-13 22:31:11 -07:00
kanban.py fix(kanban): --severity filter uses >= comparison per documented behavior (#26379) 2026-05-16 22:54:22 -07:00
kanban_db.py fix(windows): suppress console window flash on subprocess spawns 2026-05-16 23:05:27 -07:00
kanban_diagnostics.py
kanban_specify.py feat(nous): unified client=hermes-client-v<version> tag on every Portal request (#24779) 2026-05-12 20:49:20 -07:00
logs.py
main.py fix(tui): harden Terminal.app render behavior 2026-05-16 22:51:51 -05:00
mcp_config.py fix(mcp): pre-compile env-var regex and unify interpolation 2026-05-15 01:43:54 -07:00
memory_setup.py fix: restrict .env file permissions to 0600 2026-05-14 07:59:38 -07:00
model_catalog.py
model_normalize.py
model_switch.py fix(model-switch): probe /models for custom providers without api_key 2026-05-16 23:05:27 -07:00
models.py fix: detect gh-copilot deprecation and improve GitHub Models 413 errors (#10648) 2026-05-16 02:24:48 -07:00
nous_subscription.py
oneshot.py
pairing.py
platforms.py
plugins.py feat(browser): add BrowserProvider ABC mirroring web_search_provider template 2026-05-17 04:04:15 -07:00
plugins_cmd.py test(plugins): cover _discover_all_plugins recursion + cross-link loader 2026-05-16 17:15:19 -07:00
profile_distribution.py
profiles.py refactor(profiles): remove dead generate_bash_completion / generate_zsh_completion 2026-05-13 09:34:15 -07:00
providers.py feat(xai-oauth): add xAI Grok OAuth (SuperGrok Subscription) provider 2026-05-15 12:11:32 -07:00
pt_input_extras.py
pty_bridge.py
relaunch.py
runtime_provider.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
security_advisories.py
send_cmd.py fix(review): address Copilot follow-up on sanitizer and file decode errors 2026-05-16 23:00:58 -05:00
session_recap.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
setup.py feat(xai-oauth): add xAI Grok OAuth (SuperGrok Subscription) provider 2026-05-15 12:11:32 -07:00
skills_config.py
skills_hub.py
skin_engine.py fix(cli): kill resize scrollback duplication + light-mode visibility 2026-05-14 23:23:32 -07:00
slack_cli.py
status.py chore: remove Atropos RL environments and tinker-atropos integration (#26106) 2026-05-15 10:36:38 +05:30
stdio.py
timeouts.py
tips.py
tools_config.py feat(tools): mirror image_gen plugin-injection in Browser Automation picker 2026-05-17 04:04:15 -07:00
uninstall.py
vercel_auth.py
voice.py
web_server.py refactor(inventory): extract shared ConfigContext + build_models_payload 2026-05-13 22:31:11 -07:00
webhook.py