## Summary Packaged Fusion desktop Local mode failed after the SQLite→Postgres cutover: 1. **Embedded Postgres** could not start from `app.asar` — platform packages resolve `initdb`/`postgres` via `import.meta.url` into the asar virtual path, and `spawn` fails with `ENOTDIR`. 2. **After Postgres was fixed**, Local mode still fell back to the mode chooser because `@fusion-plugin-examples/omp-runtime` was never built into `dist/` (dashboard imports it from `runtime-provider-probes.ts`). This PR makes packaged Local mode boot embedded Postgres reliably and keep the dashboard shell up. ### Changes - **CJS bootstrap** (`main-bootstrap.cjs`) as Electron `main`: patches `child_process.spawn` / `fs.promises.stat|chmod` before the ESM main loads so asar binary paths rewrite to real files. - **Materialize** the full native PG install (`bin` + `lib` + `share`) under `~/.fusion/embedded-postgres/runtime-bin/<plat-arch>/`. - **electron-builder**: full `asarUnpack` of embedded-postgres packages; allowlist PG deps and `@fusion-plugin-examples/**/*` (+ plugin-sdk / ACP SDK). - **Build** `fusion-plugin-omp-runtime` with the other dashboard-static runtime plugins; export `DASHBOARD_RUNTIME_PLUGIN_PACKAGES` for tests. - Unit coverage for asar path rewrite, packaging allowlists, and omp build inclusion. ## Test plan - [x] `pnpm --filter @fusion/core test:embedded-postgres` (23/23) - [x] Desktop packaging unit tests (`build-bundling`, `electron-builder-config`) - [x] Packaged macOS `Fusion.app` Local mode: - [x] `embedded postgres: ready on port … (database "fusion")` - [x] `desktopMode` stays `"local"` (no chooser fallback) - [x] `GET /api/health` → `status: ok`, `database.healthy: true`, `engine.available: true` - [x] Linux embedded binary lifecycle smoke (Docker aarch64, `@embedded-postgres/linux-arm64`) — initdb/start/persist/restart - [ ] CI release desktop jobs (macOS/Linux) when this lands - [ ] Windows packaged desktop Local + PG (separate agent / host) ## Verification notes | Platform | Embedded Postgres | Packaged Local shell | |----------|-------------------|----------------------| | macOS | Working | Working after this PR | | Linux | Native binary smoke pass | Full AppImage not built on this host | | Windows | Out of scope here | Separate verification | <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved embedded PostgreSQL reliability in Electron-packaged apps by rewriting bundled `app.asar` binary paths to their unpacked/materialized locations. * Ensured embedded PostgreSQL runtime binaries resolve correctly across platforms/architectures, with best-effort executable permissions and macOS dylib link normalization. * **Packaging** * Updated the desktop Electron entry to use a bootstrap module for embedded PostgreSQL binary resolution. * Expanded Electron Builder inclusion and asar-unpack rules for embedded-postgres and related packages, plus required runtime plugin/sdk assets. * **Tests** * Updated and added checks to match the new packaging and plugin/runtime expectations. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
64 lines
1.8 KiB
JSON
64 lines
1.8 KiB
JSON
{
|
|
"name": "@fusion/desktop",
|
|
"productName": "Fusion",
|
|
"version": "0.60.0",
|
|
"license": "MIT",
|
|
"author": {
|
|
"name": "Runfusion",
|
|
"email": "support@runfusion.ai"
|
|
},
|
|
"description": "Fusion desktop: Electron wrapper around the Fusion dashboard for macOS, Windows, and Linux.",
|
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/Runfusion/Fusion",
|
|
"directory": "packages/desktop"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/Runfusion/Fusion/issues"
|
|
},
|
|
"private": true,
|
|
"type": "module",
|
|
"main": "dist/main-bootstrap.cjs",
|
|
"engines": {
|
|
"node": ">=22.5.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "tsx scripts/dev.ts",
|
|
"build": "tsx scripts/build.ts",
|
|
"test": "tsx scripts/test.ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"generate:icons": "tsx scripts/generate-icons.ts",
|
|
"pack": "electron-builder --projectDir deploy --dir",
|
|
"dist": "electron-builder --projectDir deploy",
|
|
"dist:win": "electron-builder --projectDir deploy --win",
|
|
"dist:mac": "electron-builder --projectDir deploy --mac",
|
|
"dist:linux": "electron-builder --projectDir deploy --linux"
|
|
},
|
|
"dependencies": {
|
|
"@fusion/core": "workspace:*",
|
|
"@fusion/dashboard": "workspace:*",
|
|
"@fusion/engine": "workspace:*",
|
|
"electron-updater": "^6.6.0",
|
|
"ms": "^2.1.3"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/node": "^22.0.0",
|
|
"@types/react": "^19.0.0",
|
|
"@types/react-dom": "^19.0.0",
|
|
"@vitest/coverage-v8": "^4.1.0",
|
|
"electron": "^35.0.0",
|
|
"electron-builder": "^26.0.0",
|
|
"esbuild": "^0.25.12",
|
|
"jsdom": "^29.0.1",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"sharp": "^0.33.0",
|
|
"tsx": "^4.19.0",
|
|
"typescript": "^5.7.0",
|
|
"vite": "^6.0.0",
|
|
"vitest": "^4.1.0"
|
|
}
|
|
}
|