feat(FN-3261): wire droid bundled plugin and improve agent detail view
Merged four step commits bringing AgentDetailView improvements with model favoritism UI, bundled plugin install wiring for the droid runtime, aligned documentation between settings reference and the plugin README, plus mobile layout refinements with safe-area padding test updates. Fusion-Task-Id: FN-3261
This commit is contained in:
@@ -548,7 +548,7 @@ fn plugin install ./plugins/fusion-plugin-hermes-runtime
|
||||
fn plugin install ./plugins/fusion-plugin-openclaw-runtime
|
||||
```
|
||||
|
||||
> 💡 In the dashboard, go to **Settings → Plugins → Fusion Plugins**. The **Bundled Runtime Plugins** section surfaces Hermes, Paperclip, and OpenClaw directly from shipped manifests, shows install status, and provides one-click install actions for runtimes that are not yet installed.
|
||||
> 💡 In the dashboard, go to **Settings → Plugins → Fusion Plugins**. The **Bundled Plugins** section surfaces Agent Browser, Hermes, Paperclip, OpenClaw, and Droid directly from shipped manifests, shows install status, and provides one-click install actions for plugins that are not yet installed.
|
||||
|
||||
2. Create agents with the appropriate `runtimeConfig`:
|
||||
|
||||
|
||||
@@ -39,14 +39,14 @@ interface PluginManagerProps {
|
||||
projectId?: string;
|
||||
}
|
||||
|
||||
interface BundledRuntimePlugin {
|
||||
interface BundledPlugin {
|
||||
id: string;
|
||||
name: string;
|
||||
path: string;
|
||||
experimental?: boolean;
|
||||
}
|
||||
|
||||
const BUNDLED_RUNTIME_PLUGINS: BundledRuntimePlugin[] = [
|
||||
const BUNDLED_PLUGINS: BundledPlugin[] = [
|
||||
{
|
||||
id: "fusion-plugin-agent-browser-runtime",
|
||||
name: "Agent Browser Runtime",
|
||||
@@ -70,6 +70,12 @@ const BUNDLED_RUNTIME_PLUGINS: BundledRuntimePlugin[] = [
|
||||
path: "./plugins/fusion-plugin-openclaw-runtime",
|
||||
experimental: true,
|
||||
},
|
||||
{
|
||||
id: "fusion-plugin-droid-runtime",
|
||||
name: "Droid Runtime",
|
||||
path: "./plugins/fusion-plugin-droid-runtime",
|
||||
experimental: true,
|
||||
},
|
||||
];
|
||||
|
||||
export const STATE_COLORS: Record<string, string> = {
|
||||
@@ -209,7 +215,7 @@ export function PluginManager({ addToast, projectId }: PluginManagerProps) {
|
||||
}
|
||||
};
|
||||
|
||||
const handleInstallBundledRuntimePlugin = async (plugin: BundledRuntimePlugin) => {
|
||||
const handleInstallBundledPlugin = async (plugin: BundledPlugin) => {
|
||||
try {
|
||||
setInstallingBundledPluginId(plugin.id);
|
||||
await installPlugin({ path: plugin.path }, projectId);
|
||||
@@ -516,15 +522,15 @@ export function PluginManager({ addToast, projectId }: PluginManagerProps) {
|
||||
const installedPlugins = plugins;
|
||||
|
||||
const renderBundledRuntimeSection = () => (
|
||||
<section className="plugin-bundled-runtime-section" aria-label="Bundled Runtime Plugins">
|
||||
<section className="plugin-bundled-runtime-section" aria-label="Bundled Plugins">
|
||||
<div className="plugin-bundled-runtime-header">
|
||||
<h4 className="plugin-bundled-runtime-heading">Bundled Runtime Plugins</h4>
|
||||
<h4 className="plugin-bundled-runtime-heading">Bundled Plugins</h4>
|
||||
<p className="plugin-bundled-runtime-description">
|
||||
Install Fusion's bundled runtimes directly from this screen.
|
||||
Install Fusion's bundled plugins directly from this screen.
|
||||
</p>
|
||||
</div>
|
||||
<div className="plugin-bundled-runtime-list" aria-label="Bundled runtime plugin recommendations">
|
||||
{BUNDLED_RUNTIME_PLUGINS.map((bundledPlugin) => {
|
||||
<div className="plugin-bundled-runtime-list" aria-label="Bundled plugin recommendations">
|
||||
{BUNDLED_PLUGINS.map((bundledPlugin) => {
|
||||
const isInstalled = installedPluginIds.has(bundledPlugin.id);
|
||||
return (
|
||||
<div key={bundledPlugin.id} className="plugin-bundled-runtime-item">
|
||||
@@ -549,7 +555,7 @@ export function PluginManager({ addToast, projectId }: PluginManagerProps) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
void handleInstallBundledRuntimePlugin(bundledPlugin);
|
||||
void handleInstallBundledPlugin(bundledPlugin);
|
||||
}}
|
||||
disabled={installingBundledPluginId === bundledPlugin.id}
|
||||
>
|
||||
@@ -617,7 +623,7 @@ export function PluginManager({ addToast, projectId }: PluginManagerProps) {
|
||||
<div className="settings-empty-state">
|
||||
<Package size={32} className="text-muted" />
|
||||
<p>No plugins installed.</p>
|
||||
<p className="text-muted">Install a plugin to get started, or use a bundled runtime below.</p>
|
||||
<p className="text-muted">Install a plugin to get started, or use a bundled plugin below.</p>
|
||||
</div>
|
||||
) : (
|
||||
<div className="plugin-list">
|
||||
|
||||
@@ -230,9 +230,10 @@ describe("PluginManager", () => {
|
||||
expect(screen.getByText("Hermes Runtime")).toBeTruthy();
|
||||
expect(screen.getByText("Paperclip Runtime")).toBeTruthy();
|
||||
expect(screen.getByText("OpenClaw Runtime")).toBeTruthy();
|
||||
expect(screen.getByText("Droid Runtime")).toBeTruthy();
|
||||
});
|
||||
|
||||
it("installs bundled runtime plugins from the bundled runtime section", async () => {
|
||||
it("installs bundled plugins from the bundled plugin section", async () => {
|
||||
render(<PluginManager addToast={addToast} />);
|
||||
|
||||
await waitFor(() => {
|
||||
@@ -264,7 +265,7 @@ describe("PluginManager", () => {
|
||||
expect(screen.getByText("Test Plugin B")).toBeTruthy();
|
||||
expect(screen.getByText("v1.0.0")).toBeTruthy();
|
||||
expect(screen.getByText("v2.0.0")).toBeTruthy();
|
||||
expect(screen.getByRole("heading", { name: "Bundled Runtime Plugins" })).toBeTruthy();
|
||||
expect(screen.getByRole("heading", { name: "Bundled Plugins" })).toBeTruthy();
|
||||
expect(screen.getAllByText("Not installed").length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,9 +1,19 @@
|
||||
# Droid Runtime Plugin
|
||||
|
||||
Provides the Droid CLI runtime/provider integration for Fusion.
|
||||
First-class Droid plugin package under `plugins/fusion-plugin-droid-runtime`.
|
||||
|
||||
## What this package is
|
||||
|
||||
- Canonical home for Droid runtime/provider plugin code.
|
||||
- Installable from dashboard **Settings → Plugins → Fusion Plugins → Bundled Plugins** via path `./plugins/fusion-plugin-droid-runtime`.
|
||||
- Plugin identity is stable: `fusion-plugin-droid-runtime`.
|
||||
|
||||
## Migration context
|
||||
|
||||
- FN-3261 established this package as the official landing zone so Droid plugin work does not need ad-hoc layouts.
|
||||
- Runtime/provider logic that used to live in `packages/droid-cli` is now owned here; `@fusion/droid-cli` remains a compatibility shim surface where needed.
|
||||
|
||||
## Key IDs
|
||||
|
||||
- Runtime ID: `droid`
|
||||
- Provider ID: `droid-cli`
|
||||
- Exports probe helpers and runtime adapter for dashboard + engine integration.
|
||||
|
||||
`@fusion/droid-cli` now acts as a compatibility shim and delegates to this plugin-owned implementation.
|
||||
|
||||
Reference in New Issue
Block a user