feat(FN-3778): add reports plugin scaffold with notification service improv

The merge introduces a new `fusion-plugin-reports` plugin scaffold with settings schema, manifest, entry point, and tests, alongside a mobile session switcher in the chat header. It also adds a mailbox notifications system with ntfy/webhook providers, cleans up roadmap types from core, and includes

Fusion-Task-Id: FN-3778
This commit is contained in:
Fusion
2026-05-08 22:56:27 -07:00
committed by gsxdsm
parent 82fe24e42a
commit 1148d29426
14 changed files with 472 additions and 2 deletions

View File

@@ -36,6 +36,8 @@ const whatsappChatPluginSrc = join(__dirname, "..", "..", "plugins", "fusion-plu
const whatsappChatPluginDest = join(__dirname, "dist", "plugins", "fusion-plugin-whatsapp-chat");
const roadmapPluginSrc = join(__dirname, "..", "..", "plugins", "fusion-plugin-roadmap");
const roadmapPluginDest = join(__dirname, "dist", "plugins", "fusion-plugin-roadmap");
const reportsPluginSrc = join(__dirname, "..", "..", "plugins", "fusion-plugin-reports");
const reportsPluginDest = join(__dirname, "dist", "plugins", "fusion-plugin-reports");
const dashboardClientStub = `<!doctype html>
<html lang="en">
<head>
@@ -180,6 +182,21 @@ export default defineConfig({
);
}
if (existsSync(reportsPluginDest)) {
rmSync(reportsPluginDest, { recursive: true, force: true });
}
if (existsSync(reportsPluginSrc)) {
mkdirSync(reportsPluginDest, { recursive: true });
cpSync(join(reportsPluginSrc, "manifest.json"), join(reportsPluginDest, "manifest.json"));
cpSync(join(reportsPluginSrc, "package.json"), join(reportsPluginDest, "package.json"));
cpSync(join(reportsPluginSrc, "src"), join(reportsPluginDest, "src"), { recursive: true });
console.log("Copied reports plugin to dist/plugins/fusion-plugin-reports/");
} else {
console.warn(
`WARNING: Reports plugin source not found at ${reportsPluginSrc}; bundled auto-install will be unavailable.`,
);
}
// Bundle each runtime plugin into a self-contained ESM file so npm/npx
// installs can load them without the workspace `@fusion/plugin-sdk`.
for (const pluginId of RUNTIME_PLUGIN_IDS) {

View File

@@ -711,8 +711,8 @@
}
.agent-card--clickable:focus-visible {
outline: 2px solid var(--focus-ring, var(--state-active-border));
outline-offset: 2px;
outline: none;
box-shadow: var(--focus-ring-strong);
}
.agent-empty {