diff --git a/README.md b/README.md index 0faa318d34..361ff72e12 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,11 @@ Works with 23+ CLI-based coding agents including Claude Code, OpenAI Codex, Curs | Git | Any | Latest | | pnpm | Any | Latest | +The Electron frontend is currently developed and packaged on Node 20.x. Run +`nvm use 20 || nvm install 20` before installing `frontend/` dependencies; its +preinstall check rejects unsupported runtimes before they can leave Electron +partially installed. + **Optional:** - `tmux` (Darwin/Linux) - For Unix runtime diff --git a/frontend/.nvmrc b/frontend/.nvmrc new file mode 100644 index 0000000000..209e3ef4b6 --- /dev/null +++ b/frontend/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/frontend/package.json b/frontend/package.json index a70a05a573..96279d24ed 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,6 +6,9 @@ "description": "Electron + TypeScript frontend for the agent-orchestrator rewrite", "author": "Agent Orchestrator", "license": "MIT", + "engines": { + "node": "20.x" + }, "homepage": "https://github.com/aoagents/agent-orchestrator", "main": ".vite/build/main.js", "repository": { @@ -13,6 +16,7 @@ "url": "https://github.com/aoagents/agent-orchestrator" }, "scripts": { + "preinstall": "node ./scripts/check-node-version.mjs", "build:daemon": "node ./scripts/build-daemon.mjs", "dev": "electron-forge start", "dev:web": "VITE_NO_ELECTRON=1 vite --config vite.renderer.config.ts", diff --git a/frontend/scripts/check-node-version.mjs b/frontend/scripts/check-node-version.mjs new file mode 100644 index 0000000000..62ce83e9d1 --- /dev/null +++ b/frontend/scripts/check-node-version.mjs @@ -0,0 +1,22 @@ +const supportedMajor = 20; +const currentMajor = Number.parseInt(process.versions.node.split(".")[0], 10); + +if (currentMajor !== supportedMajor) { + console.error( + [ + `Unsupported Node.js runtime: ${process.versions.node}.`, + `The Electron frontend is currently supported on Node ${supportedMajor}.x only.`, + "", + "Why this is enforced:", + "- CI and desktop packaging run on Node 20.", + "- Newer runtimes can leave node_modules/electron partially installed,", + " causing `npm run dev` to fail with `Electron failed to install correctly`.", + "", + "Switch to Node 20 and reinstall dependencies:", + " nvm use 20 || nvm install 20", + " rm -rf node_modules", + " npm ci", + ].join("\n"), + ); + process.exit(1); +}