From 3ab03506f374c2e45e596bde17b7c909d4b5a6fd Mon Sep 17 00:00:00 2001 From: Ronaldo Davi Date: Thu, 16 Jul 2026 13:23:57 -0300 Subject: [PATCH 1/2] fix(build): align engines.node with SUPPORTED_NODE_RANGE (#7446) --- README.md | 28 ++++++++++++------------- package-lock.json | 2 +- package.json | 2 +- tests/unit/node-runtime-support.test.ts | 9 ++++++++ 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 0ccfa90a47b8..a7521179a950 100644 --- a/README.md +++ b/README.md @@ -569,18 +569,18 @@ claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp Engines run in pipeline order; each is independently toggleable and configurable per combo: -| # | Engine | What it does | -| --- | ----------------- | ------------------------------------------------------------------- | -| 1 | **Session-Dedup** | Drops content repeated across turns (content-addressed, cross-turn) | -| 2 | **CCR** | Archives large blocks behind retrieve markers, fetched on demand | -| 3 | **RTK** | Smart tool-result filtering, dedup & truncation (command-aware) | +| # | Engine | What it does | +| --- | ----------------- | ----------------------------------------------------------------------------------------------------------------------- | +| 1 | **Session-Dedup** | Drops content repeated across turns (content-addressed, cross-turn) | +| 2 | **CCR** | Archives large blocks behind retrieve markers, fetched on demand | +| 3 | **RTK** | Smart tool-result filtering, dedup & truncation (command-aware) | | 4 | **Headroom** | Lossless tabular compaction of homogeneous JSON arrays, flat or nested (~30%), via a vendored **GCF** codec (spec v3.2) | -| 5 | **Relevance** | Extractive sentence scoring against the last user query | -| 6 | **Caveman** | Rule-based prose compression (~65–75% on output) | -| 7 | **LLMLingua-2** | ML semantic pruning via MobileBERT ONNX — code-safe, async | -| 8 | **Lite** | Whitespace + image-URL trimming (latency-light baseline) | -| 9 | **Aggressive** | Summarization + progressive aging of old turns | -| 10 | **Ultra** | Heuristic token pruning with an optional small-model (SLM) tier | +| 5 | **Relevance** | Extractive sentence scoring against the last user query | +| 6 | **Caveman** | Rule-based prose compression (~65–75% on output) | +| 7 | **LLMLingua-2** | ML semantic pruning via MobileBERT ONNX — code-safe, async | +| 8 | **Lite** | Whitespace + image-URL trimming (latency-light baseline) | +| 9 | **Aggressive** | Summarization + progressive aging of old turns | +| 10 | **Ultra** | Heuristic token pruning with an optional small-model (SLM) tier | Code blocks, URLs and structured data are **always preserved** byte-perfect. **One-click presets** combine the engines: @@ -969,7 +969,7 @@ Compression: aggressive (~50%) → double your free quota · Cost: $0/mo -- **Runtime**: Node.js 22.x or 24.x LTS (24 LTS recommended) — `>=22.0.0 <23 || >=24.0.0 <27` +- **Runtime**: Node.js 22.x or 24.x LTS (24 LTS recommended) — `>=22.22.2 <23 || >=24.0.0 <27` - **Language**: TypeScript 6.0 — **100% TypeScript** across `src/` and `open-sse/` (zero `any` in core modules since v2.0) - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4 - **Database**: better-sqlite3 (SQLite) + LowDB (JSON legacy) — domain state, proxy logs, MCP audit, routing decisions, memory, skills @@ -1028,7 +1028,7 @@ Compression: aggressive (~50%) → double your free quota · Cost: $0/mo | [Compression Rules Format](docs/compression/COMPRESSION_RULES_FORMAT.md) | JSON rule-pack schemas for Caveman and RTK filters | | [Compression Language Packs](docs/compression/COMPRESSION_LANGUAGE_PACKS.md) | Language detection and Caveman rule-pack authoring | | [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md) | Circuit breakers, cooldowns, queue, anti-thundering herd, TLS spoofing | -| [Auto-Combo Engine](docs/routing/AUTO-COMBO.md) | 12-factor scoring, mode packs, self-healing | +| [Auto-Combo Engine](docs/routing/AUTO-COMBO.md) | 12-factor scoring, mode packs, self-healing | | [Proxy Guide](docs/ops/PROXY_GUIDE.md) | 3-level proxy system, 1proxy marketplace, registry CRUD | | [Free Tiers](docs/reference/FREE_TIERS.md) | 25+ free API providers consolidated directory | | [Features Gallery](docs/guides/FEATURES.md) | Visual dashboard tour with screenshots | @@ -1216,7 +1216,7 @@ OmniRoute stands on the shoulders of giants. It started as a fork of **[9router] | Project | ⭐ | How it inspired OmniRoute | | ---------------------------------------------------------------------------------------------- | ----: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **[TOON](https://github.com/toon-format/toon)** · toon-format | 24.7k | Token-Oriented Object Notation — its columnar, header-plus-rows model shaped our tabular compaction stage. | -| **[GCF – Graph Compact Format](https://github.com/blackwell-systems/gcf)** · Blackwell Systems | 14 | First inspired our tabular compaction stage; now its zero-dependency, lossless generic-profile encoder is **vendored directly** as the Headroom codec (MIT, SPDX-marked), current with GCF spec v3.2. | +| **[GCF – Graph Compact Format](https://github.com/blackwell-systems/gcf)** · Blackwell Systems | 14 | First inspired our tabular compaction stage; now its zero-dependency, lossless generic-profile encoder is **vendored directly** as the Headroom codec (MIT, SPDX-marked), current with GCF spec v3.2. | | **[token-optimizer-mcp](https://github.com/ooples/token-optimizer-mcp)** · ooples | 421 | Brotli/SQLite cache + per-session context-delta — inspired our `session-dedup` engine. | | **[token-savior](https://github.com/Mibayy/token-savior)** · Mibayy | 1.0k | Bash-output compaction + MCP profiles — inspired our compression bail-out discipline and MCP tool-manifest reduction. | | **[token-saver](https://github.com/ppgranger/token-saver)** · ppgranger | 110 | Content-aware, per-file-type output compression with failure-aware bail-out — validated our per-type dispatch and minimum-gain skip. | diff --git a/package-lock.json b/package-lock.json index a678e41868fd..216042b08c93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -144,7 +144,7 @@ "wtfnode": "^0.10.1" }, "engines": { - "node": ">=22.0.0 <23 || >=24.0.0 <27" + "node": ">=22.22.2 <23 || >=24.0.0 <27" }, "optionalDependencies": { "@atjsh/llmlingua-2": "2.0.3", diff --git a/package.json b/package.json index 937d70363d27..93f77f6e5a6e 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "open-sse" ], "engines": { - "node": ">=22.0.0 <23 || >=24.0.0 <27" + "node": ">=22.22.2 <23 || >=24.0.0 <27" }, "keywords": [ "ai", diff --git a/tests/unit/node-runtime-support.test.ts b/tests/unit/node-runtime-support.test.ts index dd49708de7af..7cbce5069719 100644 --- a/tests/unit/node-runtime-support.test.ts +++ b/tests/unit/node-runtime-support.test.ts @@ -1,5 +1,6 @@ import test from "node:test"; import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; import { SUPPORTED_NODE_RANGE, @@ -82,3 +83,11 @@ test("CLI runtime support stays aligned with the shared runtime policy", () => { assert.deepEqual(getCliNodeRuntimeSupport("22.22.2"), getNodeRuntimeSupport("22.22.2")); assert.equal(getCliNodeRuntimeWarning("27.1.0"), getNodeRuntimeWarning("27.1.0")); }); + +test("package.json engines.node equals SUPPORTED_NODE_RANGE (install gate == runtime gate)", () => { + // Regression guard for #7446: npm consults `engines.node` at install time while the + // runtime rejects anything outside SUPPORTED_NODE_RANGE. If the two drift, npm installs + // OmniRoute on a Node version the runtime then refuses to run (the Node 22.0.0–22.22.1 gap). + const pkg = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8")); + assert.equal(pkg.engines.node, SUPPORTED_NODE_RANGE); +}); From 3bf63242704367e089a2653eda5fc267fe3b766d Mon Sep 17 00:00:00 2001 From: Ronaldo Davi Date: Sat, 18 Jul 2026 07:10:34 -0300 Subject: [PATCH 2/2] docs(changelog): add 7490 engines-node alignment fragment Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --- changelog.d/fixes/7490-align-engines-node.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/fixes/7490-align-engines-node.md diff --git a/changelog.d/fixes/7490-align-engines-node.md b/changelog.d/fixes/7490-align-engines-node.md new file mode 100644 index 000000000000..2b6839f77467 --- /dev/null +++ b/changelog.d/fixes/7490-align-engines-node.md @@ -0,0 +1 @@ +- fix(build): align `engines.node` supported range (>=22.22.2 <23 || >=24.0.0 <27) across package.json, lockfile, README engine references and the node-runtime support test, so install-time engine checks match the actually-tested runtimes (#7446)