feat(dashboard): Plugins page — manage, enable/disable, auth status#18095
Merged
Conversation
…nstall/remove - New PluginsPage.tsx: full plugin management UI (list, enable/disable, install from git, remove, git pull updates, provider picker) - Backend: dashboard_set_agent_plugin_enabled now also toggles the plugin's toolset in platform_toolsets so enabling actually makes tools visible in agent sessions - Backend: /api/dashboard/plugins/hub returns auth_required + auth_command per plugin (checks tool registry check_fn) - Frontend: auth_required shown as Badge + CommandBlock with copy-able auth command - Fix: Select overflow in providers card (min-w-0 grid cells, removed truncate/overflow-hidden that clipped dropdown) - Refactor: _install_plugin_core extracted for non-interactive reuse, PluginOperationError for structured error handling - i18n: en/zh/types updated with all new plugin page strings
- Add _validate_plugin_name() guard on all {name} path param endpoints
(rejects /, \, .. before reaching plugin logic)
- Strip after_install_path from install response (no internal paths to client)
- Update nix/tui.nix lockfile hash to match committed package-lock.json
Add /plugins route to resolve-page-title BUILTIN map.
…t title Use usePageHeader().setEnd to place the rescan button in the shared header bar. Remove the inline H2 title (already shown by the header) and the wrapper div.
- New config key: dashboard.hidden_plugins (list of plugin names)
- GET /api/dashboard/plugins now filters out hidden plugins from sidebar
- POST /api/dashboard/plugins/{name}/visibility toggles visibility
- Hub response includes user_hidden boolean per plugin row
- Eye/EyeOff toggle on plugin cards with dashboard manifests
- i18n: 'Show in sidebar' / 'Hide from sidebar' (en/zh)
e455de9 to
c73b799
Compare
1 task
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.
What does this PR do?
Adds a full Plugins page to the dashboard with plugin management (enable/disable/install/remove/update), auth status surfacing, and runtime provider selection.
The key bug fix: clicking "Enable" on a bundled backend plugin (like Spotify) previously only wrote to
plugins.enabled— which is a no-op for auto-loaded bundled backends. The actual gate isplatform_toolsets. Now the enable action correctly adds the plugin's toolset to all configured platforms.Related Issue
N/A — new feature, no existing issue.
Type of Change
Changes Made
web/src/pages/PluginsPage.tsx— New dashboard page: plugin list with status badges, enable/disable switches, install from git, remove, git pull, provider pickerhermes_cli/plugins_cmd.py—dashboard_set_agent_plugin_enabled()now calls_toggle_plugin_toolset()to add/remove the toolset fromplatform_toolsets; new helpers_get_plugin_toolset_key(),_toggle_plugin_toolset(),_install_plugin_core(),PluginOperationErrorhermes_cli/web_server.py— New endpoints:/api/dashboard/plugins/hub, agent plugin install/enable/disable/update/remove, provider save; hub response includesauth_required+auth_commandper pluginweb/src/lib/api.ts— AddedHubAgentPluginRow.auth_requiredandauth_commandfields, new API methodsweb/src/i18n/en.ts,zh.ts,types.ts— All new plugin page i18n stringsweb/src/App.tsx— Route registration for plugins pageweb/src/plugins/slots.ts— Plugin slot definitions for extensibilityHow to Test
hermes dashboard→ navigate to Plugins pagespotifyappears inplatform_toolsets.cliin~/.hermes/config.yamlhermes auth spotifyCommandBlock appears for unauthenticated SpotifyChecklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AScreenshots / Logs