This merge adds a complete plugin management system to Fusion: a new `fn plugin` CLI command for installing/removing plugins, a plugin loader in core, a plugin runner in engine, and dashboard routes for plugin management UI, along with a plugin management guide in docs. It also documents task evalua Fusion-Task-Id: FN-3565
6.4 KiB
Plugin Management Guide
This guide is the canonical end-user workflow for managing Fusion plugins across the full lifecycle: discover, install, enable/disable, configure, use, update, uninstall, and troubleshoot.
Plugin author/developer details (manifest, SDK APIs, hooks, routes, and runtime implementation) live in Plugin Authoring.
1) Plugin basics
Fusion uses two plugin surfaces in Settings:
- Fusion Plugins (
Settings → Plugins → Fusion Plugins): extend Fusion behavior (tools, routes, UI slots/views, runtimes) - Pi Extensions (
Settings → Plugins → Pi Extensions): manage pi extension packages/sources
These are related but different systems; do not treat Pi Extensions as Fusion Plugins.
Lifecycle states
| State | Meaning |
|---|---|
installed |
Registered but not started yet |
started |
Loaded and active |
stopped |
Disabled/stopped |
error |
Failed to load or failed at runtime |
Common locations
| Location | Purpose |
|---|---|
~/.fusion/plugins/ |
Default local plugin install location |
| Bundled plugin manifests (shipped with Fusion) | Discoverable/installable from Plugin Manager |
| Custom local path (absolute path) | Install plugin from a local directory |
2) Discover available plugins
Dashboard
- Open Settings → Plugins → Fusion Plugins.
- Review bundled entries in Bundled Plugins and currently installed entries.
- Check each plugin’s status/state in the manager.
Expected outcome: You can see what is already installed, what is bundled and available, and each plugin’s current lifecycle state.
CLI
- Run:
fn plugin list - Review installed plugin IDs and status.
Expected outcome: You have a terminal view of installed plugins for scripting/remote workflows.
3) Install plugins
Install bundled plugin (dashboard)
- Go to Settings → Plugins → Fusion Plugins.
- In Bundled Plugins, click Install for the plugin.
Expected outcome: Plugin is registered and appears with an initial state (typically installed then started when enabled/loaded).
Install from local path (dashboard)
- Go to Settings → Plugins → Fusion Plugins.
- Use Install and provide an absolute plugin path.
- Confirm installation.
Expected outcome: Plugin is added to your local plugin set and appears in the manager.
Install from local path (CLI)
- Run:
fn plugin install <path> - Confirm the plugin appears in:
fn plugin list
Expected outcome: Plugin is installed from the specified path and visible in plugin listings.
4) Enable, disable, and reload plugins
Dashboard
- Open Settings → Plugins → Fusion Plugins.
- Toggle plugin enable/disable controls.
- Use reload controls when available.
Expected outcome: Plugin transitions between runtime states (started / stopped) and reflects transitions in the manager.
CLI
fn plugin enable <id>
fn plugin disable <id>
Expected outcome: Plugin is enabled or disabled by ID.
5) Configure plugin settings
- Go to Settings → Plugins → Fusion Plugins.
- Open the plugin settings editor (gear/settings action).
- Update fields and save.
Expected outcome: Plugin-defined settings are persisted and used by that plugin at runtime.
6) Verify plugin is working
After installing/enabling, verify success signals relevant to that plugin:
- New agent tools become available in runtime/tooling surfaces
- Plugin routes are reachable through plugin API paths
- Plugin UI slots/views appear in dashboard surfaces (tabs, sections, cards, nav entries)
- Runtime-providing plugins become available for runtime hint selection/usage
- Plugin state remains
started(noterror)
If you need capability-level details for a specific plugin, check its README and Plugin Authoring.
7) Update plugins
Fusion does not use a dedicated fn plugin update command. Update by reinstalling the desired plugin version/source.
Dashboard
- Reinstall from the bundled entry or updated local path.
- Re-check state and behavior in the plugin manager.
CLI
- Re-run install against the updated source path:
fn plugin install <path> - Confirm with:
fn plugin list
Expected outcome: Updated plugin build/version is installed and operational.
8) Uninstall plugins
Dashboard
- Open Settings → Plugins → Fusion Plugins.
- Uninstall the target plugin.
Expected outcome: Plugin is removed from the installed list and no longer active.
CLI
- Run:
fn plugin uninstall <id> --force - Verify removal:
fn plugin list
Expected outcome: Plugin is removed by ID.
9) Dashboard vs CLI mapping
| Workflow | Dashboard path | CLI command |
|---|---|---|
| List installed plugins | Settings → Plugins → Fusion Plugins | fn plugin list |
| Install plugin | Settings → Plugins → Fusion Plugins → Install | fn plugin install <path> |
| Enable plugin | Settings → Plugins → Fusion Plugins → Enable toggle | fn plugin enable <id> |
| Disable plugin | Settings → Plugins → Fusion Plugins → Disable toggle | fn plugin disable <id> |
| Uninstall plugin | Settings → Plugins → Fusion Plugins → Uninstall | fn plugin uninstall <id> --force |
| Scaffold new plugin (authoring) | n/a (developer workflow) | fn plugin create <name> |
10) Troubleshooting
Plugin is in error state
- Open Settings → Plugins → Fusion Plugins and inspect state/transition feedback.
- Disable then re-enable the plugin.
- Confirm plugin source path and dependencies are valid.
- If needed, uninstall and reinstall the plugin.
Plugin installed but features are not visible
- Confirm plugin state is
started. - Verify what that plugin actually contributes (tools/routes/UI/runtime) in plugin docs.
- Confirm you are checking the correct dashboard surface (for example nav view vs settings section vs task detail slot).
Confusion between Fusion Plugins and Pi Extensions
- Use Fusion Plugins for Fusion plugin lifecycle management.
- Use Pi Extensions only for pi extension sources/extensions/skills/prompts/themes.
Need implementation/API details
Use Plugin Authoring for manifest fields, lifecycle hook signatures, UI/runtime contribution contracts, and SDK examples.