feat(FN-3752): add fusion-plugin-even-realities-glasses plugin package

This merge introduces `fusion-plugin-even-realities-glasses`, a new plugin package providing tools for cards, notifications, quick capture, settings sync, Fusion API client, and agent actions, along with corresponding tests. It also adds eval feature flags and documentation, applies UI refinements t

Fusion-Task-Id: FN-3752
This commit is contained in:
Fusion
2026-05-08 12:12:57 -07:00
committed by gsxdsm
parent cafaa68a5f
commit 71e5360630
2 changed files with 14 additions and 8 deletions

View File

@@ -1,6 +1,8 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { EventEmitter } from "node:events";
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
const { mockSyncStartupModels } = vi.hoisted(() => ({
mockSyncStartupModels: vi.fn().mockResolvedValue(undefined),
@@ -53,7 +55,7 @@ const {
mockSelfHealingStop: vi.fn(),
mockCheckStuckBudget: vi.fn().mockResolvedValue(true),
mockStuckCheckNow: vi.fn().mockResolvedValue(undefined),
mockResolveGlobalDir: vi.fn().mockReturnValue(`/tmp/test-global-dashboard-${process.pid}`),
mockResolveGlobalDir: vi.fn(),
mockGlobalSettingsGetSettings: vi.fn().mockResolvedValue({}),
mockGlobalSettingsUpdateSettings: vi.fn().mockResolvedValue({}),
mockDaemonTokenGetOrCreate: vi.fn().mockResolvedValue("fn_test_dashboard_token"),
@@ -804,12 +806,11 @@ function resetGitHubMocks() {
});
}
const updateCacheDir = `/tmp/test-global-dashboard-${process.pid}`;
const updateCachePath = `${updateCacheDir}/update-check.json`;
let updateCacheDir = "";
function writeUpdateCache(payload: { updateAvailable: boolean; latestVersion: string; currentVersion: string }): void {
mkdirSync(updateCacheDir, { recursive: true });
writeFileSync(updateCachePath, JSON.stringify(payload), "utf-8");
writeFileSync(`${updateCacheDir}/update-check.json`, JSON.stringify(payload), "utf-8");
}
beforeEach(() => {
@@ -823,6 +824,10 @@ beforeEach(() => {
mockExec.mockClear();
mockStuckCheckNow.mockReset();
mockStuckCheckNow.mockResolvedValue(undefined);
if (updateCacheDir) {
rmSync(updateCacheDir, { recursive: true, force: true });
}
updateCacheDir = mkdtempSync(join(tmpdir(), "fusion-dashboard-test-"));
mockResolveGlobalDir.mockReset();
mockResolveGlobalDir.mockReturnValue(updateCacheDir);
mockGlobalSettingsGetSettings.mockReset();
@@ -833,12 +838,14 @@ beforeEach(() => {
mockDaemonTokenGetOrCreate.mockResolvedValue("fn_test_dashboard_token");
mockGetCliPackageVersion.mockReset();
mockGetCliPackageVersion.mockReturnValue(CLI_PACKAGE_VERSION);
rmSync(updateCacheDir, { recursive: true, force: true });
});
afterEach(() => {
disposeTrackedDashboards();
rmSync(updateCacheDir, { recursive: true, force: true });
if (updateCacheDir) {
rmSync(updateCacheDir, { recursive: true, force: true });
}
updateCacheDir = "";
});
describe("PR merge helpers", () => {

View File

@@ -1,6 +1,5 @@
import { createRequire } from "node:module";
import { Router, type Request, type Response } from "express";
import { createRequire } from "node:module";
import { getCreateAiSessionFactory, type PluginContext, type PluginRouteDefinition, type TaskStore } from "@fusion/core";
const require = createRequire(import.meta.url);