From 9aaf7c869158e64426716bd3ad7a1d9fba22793a Mon Sep 17 00:00:00 2001 From: DaXu999 <139777540+DaXu999@users.noreply.github.com> Date: Sun, 8 Nov 2026 14:49:08 +0000 Subject: [PATCH] build!: require Node 22.19 Node 20 has been end of life since April 2026, and newer dependencies need a newer floor: undici 8, which the model client is moving to, needs Node 22.19. Raise engines.node to >=22.19 in the root, every package and the examples. CI runs on Node 22.19 and 24. The docs state the new floor, and the reference host drops its own 22.5 note for node:sqlite, which 22.19 covers. --- .github/workflows/ci.yml | 2 +- CHANGELOG.md | 6 ++++++ CONTRIBUTING.md | 2 +- README.md | 6 +++--- docs/integrations/pact.md | 2 +- docs/quickstart.md | 7 +++---- docs/release-readiness.md | 2 +- examples/network-studio/package.json | 2 +- examples/reference-host/README.md | 3 ++- examples/reference-host/package.json | 2 +- package.json | 2 +- packages/adapters/package.json | 2 +- packages/client/package.json | 2 +- packages/conformance/package.json | 2 +- packages/contracts/package.json | 2 +- packages/core/package.json | 2 +- packages/http/package.json | 2 +- packages/mcp/package.json | 2 +- packages/os/package.json | 2 +- packages/precedent/package.json | 2 +- packages/runtime/package.json | 2 +- packages/sdk/package.json | 2 +- packages/testkit/package.json | 2 +- 23 files changed, 33 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6fda98dd..71d0a1ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [20.11, 22] + node-version: [22.19, 24] timeout-minutes: 10 steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index f20b1d88..a9d10c79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,12 @@ each entry calls out what a host has to update. ### Changed +- **Breaking: Node.js 22.19 or newer is required (was 20.11).** Node 20 has + been end of life since April 2026, and newer dependencies such as `undici` + 8 need Node 22.19. Every package's `engines.node` is `>=22.19`, and CI runs + on Node 22.19 and 24. A host on an older Node upgrades Node; nothing else + changes. + - **Claude Code's in-process subagent is no longer refused.** `Task` leaves the `--disallowedTools` list of `CLAUDE_CODE_MCP_HARNESS`. A subagent runs in the same process under the same identity and MCP configuration, so its calls diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 59d3c464..4e0ea274 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ opening a public issue. Requirements: -- Node.js 20.11 or newer (22.5 or newer to run the reference host example); +- Node.js 22.19 or newer; - pnpm 9.15. ```bash diff --git a/README.md b/README.md index 569a01a0..d3d2432c 100644 --- a/README.md +++ b/README.md @@ -67,14 +67,14 @@ The longer argument, with a worked request, is in npm install @aicoo/sharedos ``` -Node.js 20.11 or newer; the packages are ESM-only. The +Node.js 22.19 or newer; the packages are ESM-only. The [quickstart](docs/quickstart.md) is two working programs, the kernel embedded in your process and the same kernel over HTTP, written against the published packages. ### Build from Source -Requirements: Node.js 20.11 or newer and pnpm 9.15. +Requirements: Node.js 22.19 or newer and pnpm 9.15. ```bash git clone https://github.com/systemind-team/SharedOS.git @@ -92,7 +92,7 @@ integration writes those before anything runs. The [reference host](examples/reference-host/README.md) is a working one: a filesystem `files` provider covering all twelve actions, SQLite stores for bounded uses, revocation, namespace settings and audit, and a driver over a live -model. It needs Node.js 22.5 or newer for `node:sqlite`. +model. ## How a turn runs diff --git a/docs/integrations/pact.md b/docs/integrations/pact.md index 0f4aa82d..a4e46484 100644 --- a/docs/integrations/pact.md +++ b/docs/integrations/pact.md @@ -114,7 +114,7 @@ Transport differences cannot alter grants or inject hidden authority. Each tick must include an explicit target-agent execution grant in its isolated world. PACT must also upgrade its runtime from Node 18 to the SharedOS minimum -of Node 20.11 before integration. +of Node 22.19 before integration. ## Failure handling diff --git a/docs/quickstart.md b/docs/quickstart.md index bbc764c0..436b4294 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -8,7 +8,7 @@ in this page requires a clone of this repository. npm install @aicoo/sharedos ``` -Node.js 20.11 or newer. The packages are ESM-only. Every SharedOS package is a +Node.js 22.19 or newer. The packages are ESM-only. Every SharedOS package is a `1.0.0` preview, so pin an exact version if you need reproducibility. ## What you have to bring @@ -25,8 +25,7 @@ three things, and only the first is required to see anything work: The examples below use an in-memory provider so they run immediately. [`examples/reference-host`](https://github.com/systemind-team/SharedOS/tree/main/examples/reference-host) -is the same shape backed by a real filesystem and SQLite; it needs Node.js 22.5 -or newer for `node:sqlite`, where the packages themselves need 20.11. +is the same shape backed by a real filesystem and SQLite. ## Embedded: authorize one file read @@ -322,7 +321,7 @@ const handler = createSharedOSHandler({ mounts anywhere the Fetch API is available: ```ts -// Node 20+, Bun, Deno +// Node 22.19+, Bun, Deno Deno.serve(handler); // Next.js app router: app/api/sharedos/[...path]/route.ts export const GET = handler; diff --git a/docs/release-readiness.md b/docs/release-readiness.md index 7856f4e5..73bdbb28 100644 --- a/docs/release-readiness.md +++ b/docs/release-readiness.md @@ -66,5 +66,5 @@ vulnerability-reporting contact. - A dependency-ordered, `next`-tagged release script with package lint, dry-run, registry collision checks, canonical-content recovery, and a tag-triggered trusted-publishing workflow. -- Apache-2.0 public prerelease metadata, Node 20/22 CI, type checks, tests, +- Apache-2.0 public prerelease metadata, Node 22/24 CI, type checks, tests, build, and executable sender-to-receiver quickstart. diff --git a/examples/network-studio/package.json b/examples/network-studio/package.json index 7d0200d6..8d2bde2c 100644 --- a/examples/network-studio/package.json +++ b/examples/network-studio/package.json @@ -8,6 +8,6 @@ "start": "node server.mjs" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" } } diff --git a/examples/reference-host/README.md b/examples/reference-host/README.md index 62afbcb7..38a99577 100644 --- a/examples/reference-host/README.md +++ b/examples/reference-host/README.md @@ -12,7 +12,8 @@ pnpm example:reference-host Set `ANTHROPIC_API_KEY` to drive the same turn with a live model instead of the scripted driver; `ANTHROPIC_BASE_URL` overrides the endpoint. The example needs -Node.js 22.5 or newer, because the stores use `node:sqlite`. +Node.js 22.19 or newer, as SharedOS does; its stores use the built-in +`node:sqlite`. ## What it implements diff --git a/examples/reference-host/package.json b/examples/reference-host/package.json index 3fee3a29..7e21558d 100644 --- a/examples/reference-host/package.json +++ b/examples/reference-host/package.json @@ -14,6 +14,6 @@ "@aicoo/sharedos-runtime": "workspace:*" }, "engines": { - "node": ">=22.5" + "node": ">=22.19" } } diff --git a/package.json b/package.json index bc1f4663..c53f20b4 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "type": "module", "packageManager": "pnpm@9.15.0", "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "scripts": { "build": "node scripts/clean-generated.mjs && tsc -b --force && node scripts/check-generated.mjs", diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 38b8a864..c0afc3ab 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -29,7 +29,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/client/package.json b/packages/client/package.json index 8f713ee8..fb4036e3 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/conformance/package.json b/packages/conformance/package.json index 6c559f5d..34a6fd14 100644 --- a/packages/conformance/package.json +++ b/packages/conformance/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/contracts/package.json b/packages/contracts/package.json index d7a1b5a4..b85b8068 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/core/package.json b/packages/core/package.json index 0c647a9f..32828dc6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/http/package.json b/packages/http/package.json index 02a7e052..dbf19999 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 2b5726a5..38266a0b 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/os/package.json b/packages/os/package.json index 94896e7a..1a327c24 100644 --- a/packages/os/package.json +++ b/packages/os/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/precedent/package.json b/packages/precedent/package.json index b020a518..18f425c1 100644 --- a/packages/precedent/package.json +++ b/packages/precedent/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index e229bf2a..22a1db73 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index fded0bd1..07fc4b96 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -27,7 +27,7 @@ "directory": "packages/sdk" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js", diff --git a/packages/testkit/package.json b/packages/testkit/package.json index b3463c4b..b21a4ed8 100644 --- a/packages/testkit/package.json +++ b/packages/testkit/package.json @@ -27,7 +27,7 @@ "registry": "https://registry.npmjs.org" }, "engines": { - "node": ">=20.11" + "node": ">=22.19" }, "files": [ "dist/**/*.js",