Desktop "Local" mode crashed with ERR_MODULE_NOT_FOUND because electron-builder's pnpm collector drops `deduped` subtrees, so engine's transitive closure (@modelcontextprotocol/sdk, pi-ai provider SDKs, etc.) was never packed. Stage the complete flat prod closure with `pnpm deploy --legacy --config.node-linker=hoisted` and package it via `electron-builder --projectDir deploy`, bypassing the lossy collector entirely. Also make the dashboard-imported example plugins loadable under plain Node (the Electron main runtime): cursor/droid/roadmap now expose compiled `dist` on the `import` condition (keeping `source`→src for the bun CLI) and are built during the desktop build. Add `source` conditions to paperclip/agent-browser/even-cards/ even-realities-glasses/whatsapp-chat so the bun `--conditions=source` Windows CLI compile resolves them from source. Validated on macOS: @fusion/core|engine|dashboard import cleanly from the staged deploy; packing yields a complete 705-package asar; bun-windows-x64 cross-compiles with all plugin dist removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Droid Runtime Plugin
First-class Droid runtime/provider plugin (@fusion-plugin-examples/droid-runtime).
Purpose
This package is the canonical home for Droid-specific runtime behavior, including:
- provider id
droid-cli - model discovery + normalization
- CLI subprocess streaming + session resume
- MCP tool bridge + thinking effort mapping
- probe contract via
probeDroidBinary
Runtime + Provider
- Runtime ID:
droid - Display name:
Droid Runtime - Provider surface preserved:
Factory AI — via Droid CLI(droid-cli)
Core implementation files live in src/:
runtime-adapter.tsprovider.tsprocess-manager.tsprobe.ts- prompt/tool/thinking/control helpers
Dashboard UI contribution surfaces
The plugin registers uiSlots for:
settings-provider-cardsettings-integration-cardonboarding-provider-cardonboarding-setup-helppost-onboarding-recommendation
Compatibility with @fusion/droid-cli
packages/droid-cli is now a thin compatibility shim. It keeps the historical pi-extension entrypoint, but delegates runtime/provider behavior to this plugin package.