From 4dfc85a27f183d7572d43101130f01a51bcbebad Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 25 Oct 2026 14:18:49 +0000 Subject: [PATCH 1/3] [Tooling] Align Node minimum to 22.23.4 Make the pascal doctor Node check follow the engines range from #1142 and update docs/skills that still said Node 22.13 or newer. --- README.md | 2 +- SETUP.md | 2 +- packages/cli/README.md | 2 +- packages/cli/src/diagnostics.test.ts | 11 ++++++++++- packages/cli/src/diagnostics.ts | 23 +++++++++++++++++------ packages/mcp/README.md | 2 +- skills/README.md | 2 +- skills/furniture-fit/references/setup.md | 2 +- skills/pascal-3d/SKILL.md | 2 +- skills/pascal-3d/references/setup.md | 4 ++-- 10 files changed, 36 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ccaaa32b5c..d503d6e2e0 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ and note your edits; no separate permission is needed. ## Run the Editor Locally -Node.js 22.13 or newer can create a persistent local Pascal installation without +Node.js 22.23.4 or newer can create a persistent local Pascal installation without cloning this repository: ```bash diff --git a/SETUP.md b/SETUP.md index c4dca5b575..b837309b03 100644 --- a/SETUP.md +++ b/SETUP.md @@ -82,7 +82,7 @@ only for shared projects; the files a shared scene references are served to it a ## CLI-managed editor -Node.js 22.13 or newer can install a persistent local runtime, start it in the +Node.js 22.23.4 or newer can install a persistent local runtime, start it in the background, and open it in the browser without a repository checkout: ```bash diff --git a/packages/cli/README.md b/packages/cli/README.md index 0ccf62a741..2b819e919a 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -33,7 +33,7 @@ separately from the runtime, so updating the CLI does not replace your work. ## Requirements -- Node.js 22.13 or newer +- Node.js 22.23.4 or newer - npm, including when the CLI itself is launched with pnpm or Bun - A browser, unless you pass `--no-open` - Network access the first time you start the editor, or a local copy of the web runtime diff --git a/packages/cli/src/diagnostics.test.ts b/packages/cli/src/diagnostics.test.ts index b9b3be542d..819a1f9fe2 100644 --- a/packages/cli/src/diagnostics.test.ts +++ b/packages/cli/src/diagnostics.test.ts @@ -2,10 +2,19 @@ import { expect, test } from 'bun:test' import { mkdir, mkdtemp, rm, stat, writeFile } from 'node:fs/promises' import os from 'node:os' import path from 'node:path' -import { collectInfo, runDoctor } from './diagnostics.js' +import { collectInfo, isSupportedNodeVersion, runDoctor } from './diagnostics.js' import { resolvePascalPaths } from './paths.js' import { installBundledRuntime } from './runtime.js' +test('node check follows the engines range', () => { + for (const version of ['22.23.4', '22.24.0', '24.22.1', '24.23.0', '26.12.1', '27.0.0']) { + expect(isSupportedNodeVersion(version)).toBe(true) + } + for (const version of ['22.13.0', '22.23.3', '23.11.0', '24.22.0', '25.9.0', '26.12.0']) { + expect(isSupportedNodeVersion(version)).toBe(false) + } +}) + test('doctor reports corrupt managed state instead of crashing', async () => { const root = await mkdtemp(path.join(os.tmpdir(), 'pascal-cli-doctor-')) try { diff --git a/packages/cli/src/diagnostics.ts b/packages/cli/src/diagnostics.ts index 5dc3fc3b00..f2e4b9d73a 100644 --- a/packages/cli/src/diagnostics.ts +++ b/packages/cli/src/diagnostics.ts @@ -11,20 +11,31 @@ export interface DiagnosticCheck { message: string } +// Mirrors `engines.node` in packages/cli/package.json: ^22.23.4 || ^24.22.1 || >=26.12.1 +export function isSupportedNodeVersion(version: string): boolean { + const [major = 0, minor = 0, patch = 0] = version + .split('.') + .slice(0, 3) + .map((part) => Number.parseInt(part, 10) || 0) + const atLeast = (m: number, p: number) => minor > m || (minor === m && patch >= p) + if (major === 22) return atLeast(23, 4) + if (major === 24) return atLeast(22, 1) + if (major === 26) return atLeast(12, 1) + return major > 26 +} + export async function runDoctor( paths: PascalPaths, options: { runtimeSourceFile?: string } = {}, ): Promise { const checks: DiagnosticCheck[] = [] - const [major = 0, minor = 0] = process.versions.node - .split('.') - .slice(0, 2) - .map((part) => Number.parseInt(part, 10)) - const nodeSupported = major > 22 || (major === 22 && minor >= 13) + const nodeSupported = isSupportedNodeVersion(process.versions.node) checks.push({ id: 'node', status: nodeSupported ? 'pass' : 'fail', - message: nodeSupported ? `Node ${process.versions.node}` : 'Node 22.13 or newer is required.', + message: nodeSupported + ? `Node ${process.versions.node}` + : 'Node 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ is required.', }) try { await ensurePascalDirectories(paths) diff --git a/packages/mcp/README.md b/packages/mcp/README.md index 1393d46dc2..cad6e35ac8 100644 --- a/packages/mcp/README.md +++ b/packages/mcp/README.md @@ -8,7 +8,7 @@ Cursor, and OpenClaw, read [Connect an AI agent](https://editor.pascal.app/docs/ The hosted endpoint edits projects in a Pascal account; this package is the open-source, local server for custom hosts and local scene storage. -The server runs headlessly in Node.js 22.13 or newer or Bun, with no browser, +The server runs headlessly in Node.js 22.23.4 or newer or Bun, with no browser, WebGPU, React, or external database service. It exposes the same scene mutations used by the editor UI (create walls, place items, cut openings, undo, etc.) as MCP tools, resources, and prompts. diff --git a/skills/README.md b/skills/README.md index 773d777d05..6c87962436 100644 --- a/skills/README.md +++ b/skills/README.md @@ -88,7 +88,7 @@ Use one active agent client per local CLI service. Its standalone HTTP runtime s ## Install in Cursor -The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.13 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. +The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. The hosted `pascal-hosted` server uses browser sign-in. In **Customize → MCPs**, choose **Authenticate** (or **Connect**) beside `pascal-hosted`. Pascal opens in your browser: sign in or create an account with Google or email, choose the intended workspace, review access, then return to Cursor. No API key or plugin variable is required. Let the user approve the account and workspace shown in consent. Ordinary access covers reading and editing projects; it does not authorize publishing, credit spending, external AI processing, community posting, or account management. Disconnect at `https://editor.pascal.app/settings/connected-apps`. diff --git a/skills/furniture-fit/references/setup.md b/skills/furniture-fit/references/setup.md index 72904bd252..c52f2d45b2 100644 --- a/skills/furniture-fit/references/setup.md +++ b/skills/furniture-fit/references/setup.md @@ -81,7 +81,7 @@ The current OpenClaw static-header path stores the expanded key in its private M Cursor: -The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.13 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. +The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. The hosted `pascal-hosted` server uses browser sign-in. In **Customize → MCPs**, choose **Authenticate** (or **Connect**) beside `pascal-hosted`. Pascal opens in your browser: sign in or create an account with Google or email, choose the intended workspace, review access, then return to Cursor. No API key or plugin variable is required. Let the user approve the account and workspace shown in consent. Ordinary access covers reading and editing projects; it does not authorize publishing, credit spending, external AI processing, community posting, or account management. Disconnect at `https://editor.pascal.app/settings/connected-apps`. diff --git a/skills/pascal-3d/SKILL.md b/skills/pascal-3d/SKILL.md index c66e72c7f4..a7a4f0f096 100644 --- a/skills/pascal-3d/SKILL.md +++ b/skills/pascal-3d/SKILL.md @@ -1,7 +1,7 @@ --- name: pascal-3d description: Connect to Pascal and use its MCP tools to create, inspect, edit, validate, save, or hand off editable 3D building scenes. Use this skill whenever a user asks an agent to work in Pascal, make a room or building model, inspect a Pascal project, perform spatial edits, connect Pascal MCP, or return a verified Pascal editor link. It also governs safe local, existing-account, and explicitly authorized autonomous setup. -compatibility: Requires an MCP-capable host and either the local Pascal CLI or access to the hosted Pascal MCP endpoint. Local CLI requires Node.js 22.13 or newer. +compatibility: Requires an MCP-capable host and either the local Pascal CLI or access to the hosted Pascal MCP endpoint. Local CLI requires Node.js 22.23.4 or newer. metadata: version: "0.1.0" source-reviewed: "2026-09-08" diff --git a/skills/pascal-3d/references/setup.md b/skills/pascal-3d/references/setup.md index 7d65706f93..1fc3c7052a 100644 --- a/skills/pascal-3d/references/setup.md +++ b/skills/pascal-3d/references/setup.md @@ -6,7 +6,7 @@ Choose one path. Do not switch storage boundaries without the user's instruction ## Local Pascal CLI -Use local mode when the project should remain on the current machine. It requires Node.js 22.13 or newer and does not require a Pascal account or API key. +Use local mode when the project should remain on the current machine. It requires Node.js 22.23.4 or newer and does not require a Pascal account or API key. Install the published CLI: @@ -107,7 +107,7 @@ The current OpenClaw static-header path stores the expanded key in its private M Cursor: -The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.13 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. +The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. The hosted `pascal-hosted` server uses browser sign-in. In **Customize → MCPs**, choose **Authenticate** (or **Connect**) beside `pascal-hosted`. Pascal opens in your browser: sign in or create an account with Google or email, choose the intended workspace, review access, then return to Cursor. No API key or plugin variable is required. Let the user approve the account and workspace shown in consent. Ordinary access covers reading and editing projects; it does not authorize publishing, credit spending, external AI processing, community posting, or account management. Disconnect at `https://editor.pascal.app/settings/connected-apps`. From fa4da9f7de3b95d05f9cfa582d43919fe804a89b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 25 Oct 2026 14:20:55 +0000 Subject: [PATCH 2/3] Docs: state per-major Node range where docs said 22.23.4 or newer The supported range is not contiguous, so match the pascal doctor message. --- README.md | 2 +- SETUP.md | 2 +- packages/cli/README.md | 2 +- packages/mcp/README.md | 2 +- skills/README.md | 2 +- skills/furniture-fit/references/setup.md | 2 +- skills/pascal-3d/SKILL.md | 2 +- skills/pascal-3d/references/setup.md | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index d503d6e2e0..d4ab692e39 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ and note your edits; no separate permission is needed. ## Run the Editor Locally -Node.js 22.23.4 or newer can create a persistent local Pascal installation without +Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ can create a persistent local Pascal installation without cloning this repository: ```bash diff --git a/SETUP.md b/SETUP.md index b837309b03..631720a076 100644 --- a/SETUP.md +++ b/SETUP.md @@ -82,7 +82,7 @@ only for shared projects; the files a shared scene references are served to it a ## CLI-managed editor -Node.js 22.23.4 or newer can install a persistent local runtime, start it in the +Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ can install a persistent local runtime, start it in the background, and open it in the browser without a repository checkout: ```bash diff --git a/packages/cli/README.md b/packages/cli/README.md index 2b819e919a..99cede6cba 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -33,7 +33,7 @@ separately from the runtime, so updating the CLI does not replace your work. ## Requirements -- Node.js 22.23.4 or newer +- Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ - npm, including when the CLI itself is launched with pnpm or Bun - A browser, unless you pass `--no-open` - Network access the first time you start the editor, or a local copy of the web runtime diff --git a/packages/mcp/README.md b/packages/mcp/README.md index cad6e35ac8..783f0ac0e5 100644 --- a/packages/mcp/README.md +++ b/packages/mcp/README.md @@ -8,7 +8,7 @@ Cursor, and OpenClaw, read [Connect an AI agent](https://editor.pascal.app/docs/ The hosted endpoint edits projects in a Pascal account; this package is the open-source, local server for custom hosts and local scene storage. -The server runs headlessly in Node.js 22.23.4 or newer or Bun, with no browser, +The server runs headlessly in Node.js (22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+) or Bun, with no browser, WebGPU, React, or external database service. It exposes the same scene mutations used by the editor UI (create walls, place items, cut openings, undo, etc.) as MCP tools, resources, and prompts. diff --git a/skills/README.md b/skills/README.md index 6c87962436..52262ae03a 100644 --- a/skills/README.md +++ b/skills/README.md @@ -88,7 +88,7 @@ Use one active agent client per local CLI service. Its standalone HTTP runtime s ## Install in Cursor -The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. +The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. The hosted `pascal-hosted` server uses browser sign-in. In **Customize → MCPs**, choose **Authenticate** (or **Connect**) beside `pascal-hosted`. Pascal opens in your browser: sign in or create an account with Google or email, choose the intended workspace, review access, then return to Cursor. No API key or plugin variable is required. Let the user approve the account and workspace shown in consent. Ordinary access covers reading and editing projects; it does not authorize publishing, credit spending, external AI processing, community posting, or account management. Disconnect at `https://editor.pascal.app/settings/connected-apps`. diff --git a/skills/furniture-fit/references/setup.md b/skills/furniture-fit/references/setup.md index c52f2d45b2..b701e92a99 100644 --- a/skills/furniture-fit/references/setup.md +++ b/skills/furniture-fit/references/setup.md @@ -81,7 +81,7 @@ The current OpenClaw static-header path stores the expanded key in its private M Cursor: -The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. +The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. The hosted `pascal-hosted` server uses browser sign-in. In **Customize → MCPs**, choose **Authenticate** (or **Connect**) beside `pascal-hosted`. Pascal opens in your browser: sign in or create an account with Google or email, choose the intended workspace, review access, then return to Cursor. No API key or plugin variable is required. Let the user approve the account and workspace shown in consent. Ordinary access covers reading and editing projects; it does not authorize publishing, credit spending, external AI processing, community posting, or account management. Disconnect at `https://editor.pascal.app/settings/connected-apps`. diff --git a/skills/pascal-3d/SKILL.md b/skills/pascal-3d/SKILL.md index a7a4f0f096..2fa3c7ac74 100644 --- a/skills/pascal-3d/SKILL.md +++ b/skills/pascal-3d/SKILL.md @@ -1,7 +1,7 @@ --- name: pascal-3d description: Connect to Pascal and use its MCP tools to create, inspect, edit, validate, save, or hand off editable 3D building scenes. Use this skill whenever a user asks an agent to work in Pascal, make a room or building model, inspect a Pascal project, perform spatial edits, connect Pascal MCP, or return a verified Pascal editor link. It also governs safe local, existing-account, and explicitly authorized autonomous setup. -compatibility: Requires an MCP-capable host and either the local Pascal CLI or access to the hosted Pascal MCP endpoint. Local CLI requires Node.js 22.23.4 or newer. +compatibility: Requires an MCP-capable host and either the local Pascal CLI or access to the hosted Pascal MCP endpoint. Local CLI requires Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+. metadata: version: "0.1.0" source-reviewed: "2026-09-08" diff --git a/skills/pascal-3d/references/setup.md b/skills/pascal-3d/references/setup.md index 1fc3c7052a..56d81d750e 100644 --- a/skills/pascal-3d/references/setup.md +++ b/skills/pascal-3d/references/setup.md @@ -6,7 +6,7 @@ Choose one path. Do not switch storage boundaries without the user's instruction ## Local Pascal CLI -Use local mode when the project should remain on the current machine. It requires Node.js 22.23.4 or newer and does not require a Pascal account or API key. +Use local mode when the project should remain on the current machine. It requires Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ and does not require a Pascal account or API key. Install the published CLI: @@ -107,7 +107,7 @@ The current OpenClaw static-header path stores the expanded key in its private M Cursor: -The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4 or newer and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. +The Cursor marketplace installs this repository's `skills/` directory. Its `.cursor-plugin/plugin.json` explicitly selects the Cursor MCP configuration, so the Claude-only `${user_config.pascal_api_key}` header is never used by Cursor. The local server runs `npx --yes --package=@pascal-app/cli@1.0.6 pascal mcp connect`; Node.js 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ and npm must be available to Cursor. No global `pascal` installation or web-editor runtime is required. The first connection downloads the pinned CLI from npm, and later connections reuse npm's cache. This starts only the local MCP service and keeps existing local project storage. If Cursor reports `spawn npx ENOENT`, install Node.js/npm and fully restart Cursor so it picks up the executable path. For an older installed bundle that still runs `pascal`, update the plugin; `npm install --global @pascal-app/cli@1.0.6` followed by **Customize → MCPs → pascal → Reload** repairs that legacy local command. The hosted `pascal-hosted` server uses browser sign-in. In **Customize → MCPs**, choose **Authenticate** (or **Connect**) beside `pascal-hosted`. Pascal opens in your browser: sign in or create an account with Google or email, choose the intended workspace, review access, then return to Cursor. No API key or plugin variable is required. Let the user approve the account and workspace shown in consent. Ordinary access covers reading and editing projects; it does not authorize publishing, credit spending, external AI processing, community posting, or account management. Disconnect at `https://editor.pascal.app/settings/connected-apps`. From f1735c7298270d718654d76ac32e97f558a4635b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 25 Oct 2026 14:28:28 +0000 Subject: [PATCH 3/3] cli: doctor reports Bun instead of judging its Node compat version Bun 1.4.4 reports Node 26.3.0, which the engines range rejects, so the packed-runtime smoke test failed running pascal doctor under Bun. --- packages/cli/src/diagnostics.test.ts | 15 +++++++++++++++ packages/cli/src/diagnostics.ts | 8 ++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/diagnostics.test.ts b/packages/cli/src/diagnostics.test.ts index 819a1f9fe2..5afa6de215 100644 --- a/packages/cli/src/diagnostics.test.ts +++ b/packages/cli/src/diagnostics.test.ts @@ -15,6 +15,21 @@ test('node check follows the engines range', () => { } }) +test('doctor accepts Bun regardless of its reported Node version', async () => { + const root = await mkdtemp(path.join(os.tmpdir(), 'pascal-cli-doctor-')) + try { + const checks = await runDoctor(resolvePascalPaths({ PASCAL_HOME: path.join(root, 'home') })) + + expect(checks).toContainEqual({ + id: 'node', + status: 'pass', + message: `Bun ${process.versions.bun}`, + }) + } finally { + await rm(root, { recursive: true, force: true }) + } +}) + test('doctor reports corrupt managed state instead of crashing', async () => { const root = await mkdtemp(path.join(os.tmpdir(), 'pascal-cli-doctor-')) try { diff --git a/packages/cli/src/diagnostics.ts b/packages/cli/src/diagnostics.ts index f2e4b9d73a..3268656a4d 100644 --- a/packages/cli/src/diagnostics.ts +++ b/packages/cli/src/diagnostics.ts @@ -29,12 +29,16 @@ export async function runDoctor( options: { runtimeSourceFile?: string } = {}, ): Promise { const checks: DiagnosticCheck[] = [] - const nodeSupported = isSupportedNodeVersion(process.versions.node) + // Bun reports a Node compatibility version that does not track Node security releases. + const bun = process.versions.bun + const nodeSupported = bun !== undefined || isSupportedNodeVersion(process.versions.node) checks.push({ id: 'node', status: nodeSupported ? 'pass' : 'fail', message: nodeSupported - ? `Node ${process.versions.node}` + ? bun + ? `Bun ${bun}` + : `Node ${process.versions.node}` : 'Node 22.23.4+ on 22.x, 24.22.1+ on 24.x, or 26.12.1+ is required.', }) try {