diff --git a/CHANGELOG.md b/CHANGELOG.md index 05a060ce65c6..43fb80fbe814 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Docs: https://docs.openclaw.ai ### Changes +- Dependencies: update Pi packages to 0.75.1 and raise the minimum supported Node.js 22 line to 22.19. - Mac app: redesign Settings pages with consistent card layouts, cached navigation, cleaner permissions/voice/skills/cron/exec/debug panes, and steadier spacing around the native sidebar. - Skills: rename the repo-local Codex closeout review skill and helper to `autoreview` while preserving the Codex-first fallback behavior. - Skills: add a meme-maker skill for curated template search, local SVG/PNG rendering, Imgflip hosted rendering, and Know Your Meme provenance links. diff --git a/README.md b/README.md index c4be5a4cab37..a3ce88e5205e 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Model note: while many providers and models are supported, prefer a current flag ## Install (recommended) -Runtime: **Node 24 (recommended) or Node 22.16+**. +Runtime: **Node 24 (recommended) or Node 22.19+**. ```bash npm install -g openclaw@latest @@ -109,7 +109,7 @@ OpenClaw Onboard installs the Gateway daemon (launchd/systemd user service) so i ## Quick start (TL;DR) -Runtime: **Node 24 (recommended) or Node 22.16+**. +Runtime: **Node 24 (recommended) or Node 22.19+**. Full beginner guide (auth, pairing, channels): [Getting started](https://docs.openclaw.ai/start/getting-started) diff --git a/apps/macos/Sources/OpenClaw/RuntimeLocator.swift b/apps/macos/Sources/OpenClaw/RuntimeLocator.swift index 6f1ef2b723da..2f799993dcdc 100644 --- a/apps/macos/Sources/OpenClaw/RuntimeLocator.swift +++ b/apps/macos/Sources/OpenClaw/RuntimeLocator.swift @@ -54,7 +54,7 @@ enum RuntimeResolutionError: Error { enum RuntimeLocator { private static let logger = Logger(subsystem: "ai.openclaw", category: "runtime") - private static let minNode = RuntimeVersion(major: 22, minor: 16, patch: 0) + private static let minNode = RuntimeVersion(major: 22, minor: 19, patch: 0) static func resolve( searchPaths: [String] = CommandResolver.preferredPaths()) -> Result @@ -91,7 +91,7 @@ enum RuntimeLocator { switch error { case let .notFound(searchPaths): [ - "openclaw needs Node >=22.16.0 but found no runtime.", + "openclaw needs Node >=22.19.0 but found no runtime.", "PATH searched: \(searchPaths.joined(separator: ":"))", "Install Node: https://nodejs.org/en/download", ].joined(separator: "\n") @@ -105,7 +105,7 @@ enum RuntimeLocator { [ "Could not parse \(kind.rawValue) version output \"\(raw)\" from \(path).", "PATH searched: \(searchPaths.joined(separator: ":"))", - "Try reinstalling or pinning a supported version (Node >=22.16.0).", + "Try reinstalling or pinning a supported version (Node >=22.19.0).", ].joined(separator: "\n") } } diff --git a/apps/macos/Tests/OpenClawIPCTests/CommandResolverTests.swift b/apps/macos/Tests/OpenClawIPCTests/CommandResolverTests.swift index 98d50e2a2cab..aaee5ca851af 100644 --- a/apps/macos/Tests/OpenClawIPCTests/CommandResolverTests.swift +++ b/apps/macos/Tests/OpenClawIPCTests/CommandResolverTests.swift @@ -48,7 +48,7 @@ import Testing let nodePath = tmp.appendingPathComponent("node_modules/.bin/node") let scriptPath = tmp.appendingPathComponent("bin/openclaw.js") try makeExecutableForTests(at: nodePath) - try "#!/bin/sh\necho v22.16.0\n".write(to: nodePath, atomically: true, encoding: .utf8) + try "#!/bin/sh\necho v22.19.0\n".write(to: nodePath, atomically: true, encoding: .utf8) try FileManager().setAttributes([.posixPermissions: 0o755], ofItemAtPath: nodePath.path) try makeExecutableForTests(at: scriptPath) diff --git a/apps/macos/Tests/OpenClawIPCTests/RuntimeLocatorTests.swift b/apps/macos/Tests/OpenClawIPCTests/RuntimeLocatorTests.swift index 0aa94789850a..764c81f51493 100644 --- a/apps/macos/Tests/OpenClawIPCTests/RuntimeLocatorTests.swift +++ b/apps/macos/Tests/OpenClawIPCTests/RuntimeLocatorTests.swift @@ -16,7 +16,7 @@ struct RuntimeLocatorTests { @Test func `resolve succeeds with valid node`() throws { let script = """ #!/bin/sh - echo v22.16.0 + echo v22.19.0 """ let node = try self.makeTempExecutable(contents: script) let result = RuntimeLocator.resolve(searchPaths: [node.deletingLastPathComponent().path]) @@ -25,13 +25,13 @@ struct RuntimeLocatorTests { return } #expect(res.path == node.path) - #expect(res.version == RuntimeVersion(major: 22, minor: 16, patch: 0)) + #expect(res.version == RuntimeVersion(major: 22, minor: 19, patch: 0)) } @Test func `resolve fails on boundary below minimum`() throws { let script = """ #!/bin/sh - echo v22.15.9 + echo v22.18.9 """ let node = try self.makeTempExecutable(contents: script) let result = RuntimeLocator.resolve(searchPaths: [node.deletingLastPathComponent().path]) @@ -39,8 +39,8 @@ struct RuntimeLocatorTests { Issue.record("Expected unsupported error, got \(result)") return } - #expect(found == RuntimeVersion(major: 22, minor: 15, patch: 9)) - #expect(required == RuntimeVersion(major: 22, minor: 16, patch: 0)) + #expect(found == RuntimeVersion(major: 22, minor: 18, patch: 9)) + #expect(required == RuntimeVersion(major: 22, minor: 19, patch: 0)) #expect(path == node.path) } @@ -76,7 +76,7 @@ struct RuntimeLocatorTests { @Test func `describe failure includes paths`() { let msg = RuntimeLocator.describeFailure(.notFound(searchPaths: ["/tmp/a", "/tmp/b"])) - #expect(msg.contains("Node >=22.16.0")) + #expect(msg.contains("Node >=22.19.0")) #expect(msg.contains("PATH searched: /tmp/a:/tmp/b")) let parseMsg = RuntimeLocator.describeFailure( @@ -85,7 +85,7 @@ struct RuntimeLocatorTests { raw: "garbage", path: "/usr/local/bin/node", searchPaths: ["/usr/local/bin"])) - #expect(parseMsg.contains("Node >=22.16.0")) + #expect(parseMsg.contains("Node >=22.19.0")) } @Test func `runtime version parses with leading V and metadata`() { diff --git a/docs/index.md b/docs/index.md index 261d30d6cb2a..0e6f2d429cfc 100644 --- a/docs/index.md +++ b/docs/index.md @@ -54,7 +54,7 @@ OpenClaw is a **self-hosted gateway** that connects your favorite chat apps and - **Agent-native**: built for coding agents with tool use, sessions, memory, and multi-agent routing - **Open source**: MIT licensed, community-driven -**What do you need?** Node 24 (recommended), or Node 22 LTS (`22.16+`) for compatibility, an API key from your chosen provider, and 5 minutes. For best quality and security, use the strongest latest-generation model available. +**What do you need?** Node 24 (recommended), or Node 22 LTS (`22.19+`) for compatibility, an API key from your chosen provider, and 5 minutes. For best quality and security, use the strongest latest-generation model available. ## How it works diff --git a/docs/install/ansible.md b/docs/install/ansible.md index c076635042a8..d72158487d50 100644 --- a/docs/install/ansible.md +++ b/docs/install/ansible.md @@ -46,7 +46,7 @@ The Ansible playbook installs and configures: 1. **Tailscale** -- mesh VPN for secure remote access 2. **UFW firewall** -- SSH + Tailscale ports only 3. **Docker CE + Compose V2** -- for the default agent sandbox backend -4. **Node.js 24 + pnpm** -- runtime dependencies (Node 22 LTS, currently `22.16+`, remains supported) +4. **Node.js 24 + pnpm** -- runtime dependencies (Node 22 LTS, currently `22.19+`, remains supported) 5. **OpenClaw** -- host-based, not containerized 6. **Systemd service** -- auto-start with security hardening diff --git a/docs/install/bun.md b/docs/install/bun.md index 88406da5c92a..3221e8fc09ab 100644 --- a/docs/install/bun.md +++ b/docs/install/bun.md @@ -39,7 +39,7 @@ Bun is an optional local runtime for running TypeScript directly (`bun run ...`, Bun blocks dependency lifecycle scripts unless explicitly trusted. For this repo, the commonly blocked scripts are not required: -- `baileys` `preinstall` -- checks Node major >= 20 (OpenClaw defaults to Node 24 and still supports Node 22 LTS, currently `22.16+`) +- `baileys` `preinstall` -- checks Node major >= 20 (OpenClaw defaults to Node 24 and still supports Node 22 LTS, currently `22.19+`) - `protobufjs` `postinstall` -- emits warnings about incompatible version schemes (no build artifacts) If you hit a runtime issue that requires these scripts, trust them explicitly: diff --git a/docs/install/index.md b/docs/install/index.md index d8caecea8c07..764c277e50ef 100644 --- a/docs/install/index.md +++ b/docs/install/index.md @@ -9,7 +9,7 @@ title: "Install" ## System requirements -- **Node 24** (recommended) or Node 22.16+ - the installer script handles this automatically +- **Node 24** (recommended) or Node 22.19+ - the installer script handles this automatically - **macOS, Linux, or Windows** - both native Windows and WSL2 are supported; WSL2 is more stable. See [Windows](/platforms/windows). - `pnpm` is only needed if you build from source diff --git a/docs/install/installer.md b/docs/install/installer.md index 9db280577309..9a252da66e58 100644 --- a/docs/install/installer.md +++ b/docs/install/installer.md @@ -71,7 +71,7 @@ Recommended for most interactive installs on macOS/Linux/WSL. Supports macOS and Linux (including WSL). If macOS is detected, installs Homebrew if missing. - Checks Node version and installs Node 24 if needed (Homebrew on macOS, NodeSource setup scripts on Linux apt/dnf/yum). OpenClaw still supports Node 22 LTS, currently `22.16+`, for compatibility. + Checks Node version and installs Node 24 if needed (Homebrew on macOS, NodeSource setup scripts on Linux apt/dnf/yum). OpenClaw still supports Node 22 LTS, currently `22.19+`, for compatibility. Installs Git if missing. @@ -284,7 +284,7 @@ by default, plus git-checkout installs under the same prefix flow. Requires PowerShell 5+. - If missing, attempts install via winget, then Chocolatey, then Scoop. Node 22 LTS, currently `22.16+`, remains supported for compatibility. + If missing, attempts install via winget, then Chocolatey, then Scoop. Node 22 LTS, currently `22.19+`, remains supported for compatibility. - `npm` method (default): global npm install using selected `-Tag`, launched from a writable installer temp directory so shells opened in protected folders such as `C:\` still work diff --git a/docs/install/node.md b/docs/install/node.md index 78534f40cec1..ed9b2bc4cf4e 100644 --- a/docs/install/node.md +++ b/docs/install/node.md @@ -7,7 +7,7 @@ read_when: - "npm install -g fails with permissions or PATH issues" --- -OpenClaw requires **Node 22.16 or newer**. **Node 24 is the default and recommended runtime** for installs, CI, and release workflows. Node 22 remains supported via the active LTS line. The [installer script](/install#alternative-install-methods) will detect and install Node automatically - this page is for when you want to set up Node yourself and make sure everything is wired up correctly (versions, PATH, global installs). +OpenClaw requires **Node 22.19 or newer**. **Node 24 is the default and recommended runtime** for installs, CI, and release workflows. Node 22 remains supported via the active LTS line. The [installer script](/install#alternative-install-methods) will detect and install Node automatically - this page is for when you want to set up Node yourself and make sure everything is wired up correctly (versions, PATH, global installs). ## Check your version @@ -15,7 +15,7 @@ OpenClaw requires **Node 22.16 or newer**. **Node 24 is the default and recommen node -v ``` -If this prints `v24.x.x` or higher, you're on the recommended default. If it prints `v22.16.x` or higher, you're on the supported Node 22 LTS path, but we still recommend upgrading to Node 24 when convenient. If Node isn't installed or the version is too old, pick an install method below. +If this prints `v24.x.x` or higher, you're on the recommended default. If it prints `v22.19.x` or higher, you're on the supported Node 22 LTS path, but we still recommend upgrading to Node 24 when convenient. If Node isn't installed or the version is too old, pick an install method below. ## Install Node diff --git a/docs/pi.md b/docs/pi.md index 363451f2e1bb..12ca5ac56468 100644 --- a/docs/pi.md +++ b/docs/pi.md @@ -23,10 +23,10 @@ OpenClaw uses the pi SDK to embed an AI coding agent into its messaging gateway ```json { - "@earendil-works/pi-agent-core": "0.74.1", - "@earendil-works/pi-ai": "0.74.1", - "@earendil-works/pi-coding-agent": "0.74.1", - "@earendil-works/pi-tui": "0.74.1" + "@earendil-works/pi-agent-core": "0.75.1", + "@earendil-works/pi-ai": "0.75.1", + "@earendil-works/pi-coding-agent": "0.75.1", + "@earendil-works/pi-tui": "0.75.1" } ``` diff --git a/docs/platforms/linux.md b/docs/platforms/linux.md index f7b93698a141..114d86238aee 100644 --- a/docs/platforms/linux.md +++ b/docs/platforms/linux.md @@ -14,7 +14,7 @@ Native Linux companion apps are planned. Contributions are welcome if you want t ## Beginner quick path (VPS) -1. Install Node 24 (recommended; Node 22 LTS, currently `22.16+`, still works for compatibility) +1. Install Node 24 (recommended; Node 22 LTS, currently `22.19+`, still works for compatibility) 2. `npm i -g openclaw@latest` 3. `openclaw onboard --install-daemon` 4. From your laptop: `ssh -N -L 18789:127.0.0.1:18789 @` diff --git a/docs/platforms/mac/bundled-gateway.md b/docs/platforms/mac/bundled-gateway.md index 55cc0de7dbe0..c133d9dffca8 100644 --- a/docs/platforms/mac/bundled-gateway.md +++ b/docs/platforms/mac/bundled-gateway.md @@ -14,7 +14,7 @@ running (or attaches to an existing local Gateway if one is already running). ## Install the CLI (required for local mode) -Node 24 is the default runtime on the Mac. Node 22 LTS, currently `22.16+`, still works for compatibility. Then install `openclaw` globally: +Node 24 is the default runtime on the Mac. Node 22 LTS, currently `22.19+`, still works for compatibility. Then install `openclaw` globally: ```bash npm install -g openclaw@ diff --git a/docs/platforms/mac/dev-setup.md b/docs/platforms/mac/dev-setup.md index e8589eae5b52..000594a628ec 100644 --- a/docs/platforms/mac/dev-setup.md +++ b/docs/platforms/mac/dev-setup.md @@ -14,7 +14,7 @@ Build and run the OpenClaw macOS application from source. Before building the app, ensure you have the following installed: 1. **Xcode 26.2+**: Required for Swift development. -2. **Node.js 24 & pnpm**: Recommended for the gateway, CLI, and packaging scripts. Node 22 LTS, currently `22.16+`, remains supported for compatibility. +2. **Node.js 24 & pnpm**: Recommended for the gateway, CLI, and packaging scripts. Node 22 LTS, currently `22.19+`, remains supported for compatibility. ## 1. Install Dependencies diff --git a/docs/platforms/mac/signing.md b/docs/platforms/mac/signing.md index e22b3fc7f02e..d14261833799 100644 --- a/docs/platforms/mac/signing.md +++ b/docs/platforms/mac/signing.md @@ -14,7 +14,7 @@ This app is usually built from [`scripts/package-mac-app.sh`](https://github.com - calls [`scripts/codesign-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/codesign-mac-app.sh) to sign the main binary and app bundle so macOS treats each rebuild as the same signed bundle and keeps TCC permissions (notifications, accessibility, screen recording, mic, speech). For stable permissions, use a real signing identity; ad-hoc is opt-in and fragile (see [macOS permissions](/platforms/mac/permissions)). - uses `CODESIGN_TIMESTAMP=auto` by default; it enables trusted timestamps for Developer ID signatures. Set `CODESIGN_TIMESTAMP=off` to skip timestamping (offline debug builds). - inject build metadata into Info.plist: `OpenClawBuildTimestamp` (UTC) and `OpenClawGitCommit` (short hash) so the About pane can show build, git, and debug/release channel. -- **Packaging defaults to Node 24**: the script runs TS builds and the Control UI build. Node 22 LTS, currently `22.16+`, remains supported for compatibility. +- **Packaging defaults to Node 24**: the script runs TS builds and the Control UI build. Node 22 LTS, currently `22.19+`, remains supported for compatibility. - reads `SIGN_IDENTITY` from the environment. Add `export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"` (or your Developer ID Application cert) to your shell rc to always sign with your cert. Ad-hoc signing requires explicit opt-in via `ALLOW_ADHOC_SIGNING=1` or `SIGN_IDENTITY="-"` (not recommended for permission testing). - runs a Team ID audit after signing and fails if any Mach-O inside the app bundle is signed by a different Team ID. Set `SKIP_TEAM_ID_CHECK=1` to bypass. diff --git a/docs/start/getting-started.md b/docs/start/getting-started.md index 8632e2686acf..36109d049c87 100644 --- a/docs/start/getting-started.md +++ b/docs/start/getting-started.md @@ -12,7 +12,7 @@ and a working chat session. ## What you need -- **Node.js** — Node 24 recommended (Node 22.16+ also supported) +- **Node.js** — Node 24 recommended (Node 22.19+ also supported) - **An API key** from a model provider (Anthropic, OpenAI, Google, etc.) — onboarding will prompt you diff --git a/docs/start/setup.md b/docs/start/setup.md index 7cf883bedbdc..309d6d44ad1f 100644 --- a/docs/start/setup.md +++ b/docs/start/setup.md @@ -21,7 +21,7 @@ Pick a setup workflow based on how often you want updates and whether you want t ## Prereqs (from source) -- Node 24 recommended (Node 22 LTS, currently `22.16+`, still supported) +- Node 24 recommended (Node 22 LTS, currently `22.19+`, still supported) - `pnpm` required for source checkouts. OpenClaw loads bundled plugins from the `extensions/*` pnpm workspace packages in dev mode, so root `npm install` does not prepare the full source tree. diff --git a/extensions/amazon-bedrock-mantle/package.json b/extensions/amazon-bedrock-mantle/package.json index 6db254d17d61..48ea580dfd95 100644 --- a/extensions/amazon-bedrock-mantle/package.json +++ b/extensions/amazon-bedrock-mantle/package.json @@ -10,7 +10,7 @@ "dependencies": { "@anthropic-ai/sdk": "0.95.2", "@aws/bedrock-token-generator": "1.1.0", - "@earendil-works/pi-ai": "0.74.1" + "@earendil-works/pi-ai": "0.75.1" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/amazon-bedrock/package.json b/extensions/amazon-bedrock/package.json index 2fc2a149981b..cb533e65fc6a 100644 --- a/extensions/amazon-bedrock/package.json +++ b/extensions/amazon-bedrock/package.json @@ -11,7 +11,7 @@ "@aws-sdk/client-bedrock": "3.1047.0", "@aws-sdk/client-bedrock-runtime": "3.1045.0", "@aws-sdk/credential-provider-node": "3.972.41", - "@earendil-works/pi-ai": "0.74.1", + "@earendil-works/pi-ai": "0.75.1", "@smithy/shared-ini-file-loader": "4.5.2" }, "devDependencies": { diff --git a/extensions/anthropic-vertex/package.json b/extensions/anthropic-vertex/package.json index d589b32116f4..8cc1fc5b40ad 100644 --- a/extensions/anthropic-vertex/package.json +++ b/extensions/anthropic-vertex/package.json @@ -9,8 +9,8 @@ "type": "module", "dependencies": { "@anthropic-ai/vertex-sdk": "0.16.0", - "@earendil-works/pi-agent-core": "0.74.1", - "@earendil-works/pi-ai": "0.74.1" + "@earendil-works/pi-agent-core": "0.75.1", + "@earendil-works/pi-ai": "0.75.1" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/anthropic/package.json b/extensions/anthropic/package.json index 2e92dcdd4dc1..5681104d709f 100644 --- a/extensions/anthropic/package.json +++ b/extensions/anthropic/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Anthropic provider plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1" + "@earendil-works/pi-ai": "0.75.1" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/codex/package.json b/extensions/codex/package.json index ef63ac753234..6c4dc96e306f 100644 --- a/extensions/codex/package.json +++ b/extensions/codex/package.json @@ -8,7 +8,7 @@ }, "type": "module", "dependencies": { - "@earendil-works/pi-coding-agent": "0.74.1", + "@earendil-works/pi-coding-agent": "0.75.1", "@openai/codex": "0.130.0", "ajv": "8.20.0", "ws": "8.20.1", diff --git a/extensions/fireworks/package.json b/extensions/fireworks/package.json index e84c76fe6dbc..8347110ed98d 100644 --- a/extensions/fireworks/package.json +++ b/extensions/fireworks/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Fireworks provider plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1" + "@earendil-works/pi-ai": "0.75.1" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/github-copilot/package.json b/extensions/github-copilot/package.json index a51d6e2c0490..3c6cf48c0f62 100644 --- a/extensions/github-copilot/package.json +++ b/extensions/github-copilot/package.json @@ -8,7 +8,7 @@ "@clack/prompts": "1.4.0" }, "devDependencies": { - "@earendil-works/pi-ai": "0.74.1", + "@earendil-works/pi-ai": "0.75.1", "@openclaw/plugin-sdk": "workspace:*" }, "openclaw": { diff --git a/extensions/google/package.json b/extensions/google/package.json index 7ad7eee33958..4125a2c6c4e1 100644 --- a/extensions/google/package.json +++ b/extensions/google/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Google plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1", + "@earendil-works/pi-ai": "0.75.1", "@google/genai": "2.2.0" }, "devDependencies": { diff --git a/extensions/kimi-coding/package.json b/extensions/kimi-coding/package.json index 3d14a9d1d302..7510d84890a0 100644 --- a/extensions/kimi-coding/package.json +++ b/extensions/kimi-coding/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Kimi provider plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1" + "@earendil-works/pi-ai": "0.75.1" }, "devDependencies": { "@openclaw/plugin-sdk": "workspace:*" diff --git a/extensions/lmstudio/package.json b/extensions/lmstudio/package.json index 1349aea8e03d..f7fbac7d6f67 100644 --- a/extensions/lmstudio/package.json +++ b/extensions/lmstudio/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw LM Studio provider plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1" + "@earendil-works/pi-ai": "0.75.1" }, "openclaw": { "extensions": [ diff --git a/extensions/memory-core/src/memory/provider-adapters.ts b/extensions/memory-core/src/memory/provider-adapters.ts index 173a8b4e127c..5f9d484e6207 100644 --- a/extensions/memory-core/src/memory/provider-adapters.ts +++ b/extensions/memory-core/src/memory/provider-adapters.ts @@ -55,7 +55,7 @@ function formatLocalSetupError(err: unknown): string { : undefined, missing && detail ? `Detail: ${detail}` : null, "To enable local embeddings:", - "1) Use Node 24 (recommended for installs/updates; Node 22 LTS, currently 22.16+, remains supported)", + "1) Use Node 24 (recommended for installs/updates; Node 22 LTS, currently 22.19+, remains supported)", missing ? `2) Install ${NODE_LLAMA_CPP_RUNTIME_PACKAGE} next to the OpenClaw package or source checkout` : null, diff --git a/extensions/ollama/package.json b/extensions/ollama/package.json index b1682a85ae36..a932095411a6 100644 --- a/extensions/ollama/package.json +++ b/extensions/ollama/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw Ollama provider plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1", + "@earendil-works/pi-ai": "0.75.1", "typebox": "1.1.38" }, "devDependencies": { diff --git a/extensions/openai/openclaw.plugin.test.ts b/extensions/openai/openclaw.plugin.test.ts index 9fad25298e61..4c7261858a64 100644 --- a/extensions/openai/openclaw.plugin.test.ts +++ b/extensions/openai/openclaw.plugin.test.ts @@ -92,7 +92,7 @@ function expectWizardFields( describe("OpenAI plugin manifest", () => { it("keeps runtime dependencies in the package manifest", () => { - expect(packageJson.dependencies?.["@earendil-works/pi-ai"]).toBe("0.74.1"); + expect(packageJson.dependencies?.["@earendil-works/pi-ai"]).toBe("0.75.1"); expect(packageJson.dependencies?.ws).toBe("8.20.1"); }); diff --git a/extensions/openai/package.json b/extensions/openai/package.json index c351ec9d1f11..df9a625f1d0d 100644 --- a/extensions/openai/package.json +++ b/extensions/openai/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw OpenAI provider plugins", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1", + "@earendil-works/pi-ai": "0.75.1", "ws": "8.20.1" }, "devDependencies": { diff --git a/extensions/xai/package.json b/extensions/xai/package.json index ba98dac886b3..e9338d052738 100644 --- a/extensions/xai/package.json +++ b/extensions/xai/package.json @@ -5,7 +5,7 @@ "description": "OpenClaw xAI plugin", "type": "module", "dependencies": { - "@earendil-works/pi-ai": "0.74.1", + "@earendil-works/pi-ai": "0.75.1", "typebox": "1.1.38" }, "devDependencies": { diff --git a/package.json b/package.json index 08b8d8961101..940da46bceeb 100644 --- a/package.json +++ b/package.json @@ -1762,11 +1762,11 @@ "@agentclientprotocol/sdk": "0.21.1", "@clack/core": "1.3.1", "@clack/prompts": "1.4.0", - "@earendil-works/pi-agent-core": "0.74.1", - "@earendil-works/pi-ai": "0.74.1", - "@earendil-works/pi-coding-agent": "0.74.1", - "@earendil-works/pi-tui": "0.74.1", - "@google/genai": "2.2.0", + "@earendil-works/pi-agent-core": "0.75.1", + "@earendil-works/pi-ai": "0.75.1", + "@earendil-works/pi-coding-agent": "0.75.1", + "@earendil-works/pi-tui": "0.75.1", + "@google/genai": "2.3.0", "@grammyjs/runner": "2.0.3", "@grammyjs/transformer-throttler": "1.2.1", "@homebridge/ciao": "1.3.8", @@ -1788,11 +1788,11 @@ "jiti": "2.7.0", "json5": "2.2.3", "jszip": "3.10.1", - "kysely": "0.29.0", + "kysely": "0.29.1", "linkedom": "0.18.12", "markdown-it": "14.1.1", "node-edge-tts": "1.2.10", - "openai": "6.37.0", + "openai": "6.38.0", "pdfjs-dist": "5.7.284", "playwright-core": "1.60.0", "qrcode": "1.5.4", @@ -1801,8 +1801,8 @@ "tokenjuice": "0.7.1", "tree-sitter-bash": "0.25.1", "tslog": "4.10.2", - "typescript": "6.0.3", "typebox": "1.1.38", + "typescript": "6.0.3", "undici": "8.3.0", "web-push": "3.6.7", "web-tree-sitter": "0.26.8", @@ -1813,7 +1813,7 @@ "devDependencies": { "@a2ui/lit": "0.10.0", "@copilotkit/aimock": "1.24.1", - "@grammyjs/types": "3.27.2", + "@grammyjs/types": "3.27.3", "@lit-labs/signals": "0.3.0", "@lit/context": "1.1.6", "@mdx-js/mdx": "3.1.1", @@ -1821,13 +1821,13 @@ "@types/markdown-it": "14.1.2", "@types/node": "25.8.0", "@types/ws": "8.18.1", - "@typescript/native-preview": "7.0.0-dev.20260514.1", + "@typescript/native-preview": "7.0.0-dev.20260517.1", "@vitest/coverage-v8": "4.1.6", - "jscpd": "4.2.0", + "jscpd": "4.2.2", "jsdom": "29.1.1", "lit": "3.3.3", - "oxfmt": "0.49.0", - "oxlint": "1.64.0", + "oxfmt": "0.50.0", + "oxlint": "1.65.0", "oxlint-tsgolint": "0.22.1", "signal-utils": "0.21.1", "tsdown": "0.22.0", @@ -1847,7 +1847,7 @@ "uuid": "14.0.0" }, "engines": { - "node": ">=22.16.0" + "node": ">=22.19.0" }, "packageManager": "pnpm@11.1.0+sha512.0c44e842e5686b2c061a81adda8b2258bd8818e9704b2cf2c63d56b931a7b2e910092e085027003b96ca3911ab56a07f6df5abaed2be9925034cdd686a535b14" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80eb8f16e8c0..8fe1373c59bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,20 +51,20 @@ importers: specifier: 1.4.0 version: 1.4.0 '@earendil-works/pi-agent-core': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@earendil-works/pi-coding-agent': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@earendil-works/pi-tui': - specifier: 0.74.1 - version: 0.74.1 + specifier: 0.75.1 + version: 0.75.1 '@google/genai': - specifier: 2.2.0 - version: 2.2.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + specifier: 2.3.0 + version: 2.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) '@grammyjs/runner': specifier: 2.0.3 version: 2.0.3(grammy@1.42.0) @@ -129,8 +129,8 @@ importers: specifier: 3.10.1 version: 3.10.1 kysely: - specifier: 0.29.0 - version: 0.29.0 + specifier: 0.29.1 + version: 0.29.1 linkedom: specifier: 0.18.12 version: 0.18.12 @@ -141,8 +141,8 @@ importers: specifier: 1.2.10 version: 1.2.10 openai: - specifier: 6.37.0 - version: 6.37.0(ws@8.20.1)(zod@4.4.3) + specifier: 6.38.0 + version: 6.38.0(ws@8.20.1)(zod@4.4.3) pdfjs-dist: specifier: 5.7.284 version: 5.7.284 @@ -199,8 +199,8 @@ importers: specifier: 1.24.1 version: 1.24.1(vitest@4.1.6) '@grammyjs/types': - specifier: 3.27.2 - version: 3.27.2 + specifier: 3.27.3 + version: 3.27.3 '@lit-labs/signals': specifier: 0.3.0 version: 0.3.0 @@ -223,14 +223,14 @@ importers: specifier: 8.18.1 version: 8.18.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260514.1 - version: 7.0.0-dev.20260514.1 + specifier: 7.0.0-dev.20260517.1 + version: 7.0.0-dev.20260517.1 '@vitest/coverage-v8': specifier: 4.1.6 version: 4.1.6(@vitest/browser@4.1.6)(vitest@4.1.6) jscpd: - specifier: 4.2.0 - version: 4.2.0 + specifier: 4.2.2 + version: 4.2.2 jsdom: specifier: 29.1.1 version: 29.1.1(@noble/hashes@2.0.1) @@ -238,11 +238,11 @@ importers: specifier: 3.3.3 version: 3.3.3 oxfmt: - specifier: 0.49.0 - version: 0.49.0 + specifier: 0.50.0 + version: 0.50.0 oxlint: - specifier: 1.64.0 - version: 1.64.0(oxlint-tsgolint@0.22.1) + specifier: 1.65.0 + version: 1.65.0(oxlint-tsgolint@0.22.1) oxlint-tsgolint: specifier: 0.22.1 version: 0.22.1 @@ -251,7 +251,7 @@ importers: version: 0.21.1(signal-polyfill@0.2.2) tsdown: specifier: 0.22.0 - version: 0.22.0(@typescript/native-preview@7.0.0-dev.20260514.1)(tsx@4.22.0)(typescript@6.0.3)(unrun@0.3.0) + version: 0.22.0(@typescript/native-preview@7.0.0-dev.20260517.1)(tsx@4.22.0)(typescript@6.0.3)(unrun@0.3.0) tsx: specifier: 4.22.0 version: 4.22.0 @@ -309,8 +309,8 @@ importers: specifier: 3.972.41 version: 3.972.41 '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@smithy/shared-ini-file-loader': specifier: 4.5.2 version: 4.5.2 @@ -328,8 +328,8 @@ importers: specifier: 1.1.0 version: 1.1.0 '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -338,8 +338,8 @@ importers: extensions/anthropic: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -351,11 +351,11 @@ importers: specifier: 0.16.0 version: 0.16.0(zod@4.4.3) '@earendil-works/pi-agent-core': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -485,8 +485,8 @@ importers: extensions/codex: dependencies: '@earendil-works/pi-coding-agent': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@openai/codex': specifier: 0.130.0 version: 0.130.0 @@ -715,8 +715,8 @@ importers: extensions/fireworks: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -729,8 +729,8 @@ importers: version: 1.4.0 devDependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@openclaw/plugin-sdk': specifier: workspace:* version: link:../../packages/plugin-sdk @@ -738,8 +738,8 @@ importers: extensions/google: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) '@google/genai': specifier: 2.2.0 version: 2.2.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) @@ -838,8 +838,8 @@ importers: extensions/kimi-coding: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) devDependencies: '@openclaw/plugin-sdk': specifier: workspace:* @@ -880,8 +880,8 @@ importers: extensions/lmstudio: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) extensions/lobster: dependencies: @@ -1166,8 +1166,8 @@ importers: extensions/ollama: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) typebox: specifier: 1.1.38 version: 1.1.38 @@ -1185,8 +1185,8 @@ importers: extensions/openai: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) ws: specifier: 8.20.1 version: 8.20.1 @@ -1657,8 +1657,8 @@ importers: extensions/xai: dependencies: '@earendil-works/pi-ai': - specifier: 0.74.1 - version: 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + specifier: 0.75.1 + version: 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) typebox: specifier: 1.1.38 version: 1.1.38 @@ -2312,23 +2312,23 @@ packages: resolution: {integrity: sha512-3yJ255e4ag3wfZu/DSxeOZK1UtnqNxnspmLaQetGT0pDkThNZoHs+Zg6dgZZ19JEVomXygvfHn9lNpICZuYtEA==} engines: {node: '>=22.12.0'} - '@earendil-works/pi-agent-core@0.74.1': - resolution: {integrity: sha512-K9zedEWr5TTJ21ajX8VgYPzdo9Nd4l0xGsHztXTL1aW4XA/74Lwrt9s8V7AdMIlu3WZ9szJ+BY2h7o1rqkUH9A==} - engines: {node: '>=20.0.0'} + '@earendil-works/pi-agent-core@0.75.1': + resolution: {integrity: sha512-JVpX/Zle/enBzEM6he9sE0ASMo8Yhm8q7nOuPQjR/BXhkTBUevrNz7wtTV8VFvgjyhsXzbAsNCP5A4LiCcDx/A==} + engines: {node: '>=22.19.0'} - '@earendil-works/pi-ai@0.74.1': - resolution: {integrity: sha512-xBgJnsrB+eCIsEB2rQ+aD/goGDo/YJMzQoICyL+ltHSB0SVQDgawjCzNF1IuRCzvUFceqZGJETUiejfWRDUe0Q==} - engines: {node: '>=20.0.0'} + '@earendil-works/pi-ai@0.75.1': + resolution: {integrity: sha512-/bhCWS2R+qHLBDnN+d1t1QRUxtZk7sZpMcrlexPq3W++3bJ0Df0GjhM2FToTubhoCsjOBdBOuRYcV8FNPfRUVQ==} + engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-coding-agent@0.74.1': - resolution: {integrity: sha512-kJpWufgXJOBbZywAoup1QLeJmjCjIK49gtYtmbY+ibjZbINHOlBHEKpuo2RUfuJN9yvfh90iUsptdVW0uNn0Dg==} - engines: {node: '>=20.6.0'} + '@earendil-works/pi-coding-agent@0.75.1': + resolution: {integrity: sha512-QMbmv8lFQ8P98kpuMc/z1ATTq7t0lQ+Bo3GLiOKQ/HonO34n4E1+395FCqlmG8zJEhiMp4yqVTzlj7BALQMlqw==} + engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-tui@0.74.1': - resolution: {integrity: sha512-wQj2TRG43/BBNyd/lReQJWtTCOJVyIwI+7Ifp3hNITfTtQr4zQdMeF7uxqEMQ73LI6rQO7Ljx0P2w+oMx8uyIA==} - engines: {node: '>=20.0.0'} + '@earendil-works/pi-tui@0.75.1': + resolution: {integrity: sha512-IFDSvCXcXMoIxFKxdhqc7ybX8p86KpdxoTUTYEq3FHilMFkBqlXqZD0jZBitqxStBjjMkAlhjS1bKS0IOXSpsg==} + engines: {node: '>=22.19.0'} '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -2525,6 +2525,15 @@ packages: '@modelcontextprotocol/sdk': optional: true + '@google/genai@2.3.0': + resolution: {integrity: sha512-rXDhXUBj31gZafcwQFbXvt8jMrMxZoK7ECjQpk88UfA/OkZls3PtZDprT9lM3jjqRtwRjQoNLoPoNq6MlV8qLw==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + '@grammyjs/runner@2.0.3': resolution: {integrity: sha512-nckmTs1dPWfVQteK9cxqxzE+0m1VRvluLWB8UgFzsjg62w3qthPJt0TYtJBEdG7OedvfQq4vnFAyE6iaMkR42A==} engines: {node: '>=12.20.0 || >=14.13.1'} @@ -2540,8 +2549,8 @@ packages: '@grammyjs/types@3.26.0': resolution: {integrity: sha512-jlnyfxfev/2o68HlvAGRocAXgdPPX5QabG7jZlbqC2r9DZyWBfzTlg+nu3O3Fy4EhgLWu28hZ/8wr7DsNamP9A==} - '@grammyjs/types@3.27.2': - resolution: {integrity: sha512-3Vl/9vmL9lmVj1UVHDBhF+UYJVzZhAvU1Hg48fNOxN3shXk0fVkj7QdRdnN8LiJDty6akYOelle0zATOTJ2/0g==} + '@grammyjs/types@3.27.3': + resolution: {integrity: sha512-yUKMLliGsGbnxu96YUJ7km7B0zy4PzeH/Jvti5705R/LeKDMqkDV4DckMSt+OrliWQpTwQljHE0QLol5zgxBkg==} '@grpc/grpc-js@1.14.3': resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} @@ -2853,20 +2862,20 @@ packages: '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - '@jscpd/badge-reporter@4.2.0': - resolution: {integrity: sha512-edvLAhMBsIo4OLsRTZNO6Mwm4rwJCiWYBiWc4qQdo6ZNFbJ6Sp3ZU9ceyEFMxFVBH2hwX94rHWzO4FgO4Rg4OQ==} + '@jscpd/badge-reporter@4.2.2': + resolution: {integrity: sha512-03ngWGBtvdL6dRC7+Q/4FdoUozN4KBHpaJ1SjGnPaMuPoEmcGDdw7W/+HfhPWSwpzam3lfTM2yBsGhrG2g3LqQ==} - '@jscpd/core@4.2.0': - resolution: {integrity: sha512-fkmjSlTqGQ/PMpAHJqYl5qqB4ALmfj/3i6urfTfme1SR1zLUVgyUQV8KmRQdP2JLn4ZUg16DnuZ4Qgug/8LOew==} + '@jscpd/core@4.2.2': + resolution: {integrity: sha512-YheyoZAVIeZXyQ5mE1lZ+no8Rs8bo02PXnTfW6PN9QrPUOlRsuJ0br5F3T/H6GU8S2DUP5gUJPOp1Lz7oxN+aA==} - '@jscpd/finder@4.2.0': - resolution: {integrity: sha512-5A53+csbgRqvBBWFY53ZG44CVMEmxE4jmBW4Y7fH1qR7w/Wb+PYOSn0R69+yfNv6vTL9m2VPdGHUQu9o/ggpNw==} + '@jscpd/finder@4.2.2': + resolution: {integrity: sha512-HGsvprcIVTjSU3x8+Ofb5mKq2gRYYZ8Cd1O00w97x8GWUub5sHLGOdvlP4Bw19FVoZzBz+1pjnF5dDvzEoj4rg==} - '@jscpd/html-reporter@4.2.0': - resolution: {integrity: sha512-JkMloHiW0bsurnfOiVNJHqJ728Dk2q+yoVuPaTp1XFMvvH6cRXUcOr331B7QR9S9H5OAgeB322qJ/xOEU3rAcw==} + '@jscpd/html-reporter@4.2.2': + resolution: {integrity: sha512-pw+spkYfgWNiDH9bURB0jWzGlfbpQjc8gUe3c726qzPSgMUe9QB3fBA44e9iAJP/o0jtizgUd4MZHyWRbVAw1w==} - '@jscpd/tokenizer@4.2.0': - resolution: {integrity: sha512-jywXhLyzSzP+g/Qfe9IlZk3kPYdy7WKSFXSqgCszIrbR8EjbBrQZ6fyO683So3sWKyFAIpuvYUtnqpNTIefStw==} + '@jscpd/tokenizer@4.2.2': + resolution: {integrity: sha512-haV7OWM2xzQ3I7tWgNTAOcR+kkFr0lYxkdnTOSd5Pve4QGx1Jk7kwk9gotqpXTd6AauaPnBdfHPxeZrUY21QYA==} '@keyv/bigmap@1.3.1': resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} @@ -3514,124 +3523,124 @@ packages: '@oxc-project/types@0.130.0': resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} - '@oxfmt/binding-android-arm-eabi@0.49.0': - resolution: {integrity: sha512-HbifJ84prIh9+55CTPAU35JdRQrwg47y16cGerCC+iejSKOuHXYo2WDql6l7cQlzrYVtc3f4UWY+dBj2lRmOeA==} + '@oxfmt/binding-android-arm-eabi@0.50.0': + resolution: {integrity: sha512-ICXQVKrDvsWUtfx6EiVJxfWrajKTwTfRV8vz2XiMkxZeuCKJLgD4YAj6dE3BWvpqDlkVkie4VSTAtMUWO9LDXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.49.0': - resolution: {integrity: sha512-Ef7SKJqAaH2d7E6eXZZa2OffIShbhFMxnGK0zd93p4qiyTJr75B0qf7lrPD+qQOwcf04BrjYJ0JUxq8d5+yZwg==} + '@oxfmt/binding-android-arm64@0.50.0': + resolution: {integrity: sha512-quwjLQFkuW6OwLHeDeIXsTzOmipQFQbqsYN9HLk2B5I01IlAQZHP1UiLIg0O7pP+dUgPD2AD7SCYA3gs6NH5/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.49.0': - resolution: {integrity: sha512-8x5DN9CsFfb432sHa9NyqX5XisGUdA53LPEGSdv/VniS+v4uEOR8Orv7A9QSB98Xxgp0t6r31DzQA/wpIobGqQ==} + '@oxfmt/binding-darwin-arm64@0.50.0': + resolution: {integrity: sha512-ikU5umElcMi78/TNI334wtjr5WZ5F4nWa1aIDseAKKGL0W3ygxeYKkrIJ0fggWa8MOon66BmG3xCqmX1m9YAOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.49.0': - resolution: {integrity: sha512-e0+DSVzk4ewhMVKNYDaRTmP81jNMBWR1X9al0cVKWS+hDM/dElNqD5zjTOCuLOZc4oOdp2Gx2ldrVL+yYo9TZQ==} + '@oxfmt/binding-darwin-x64@0.50.0': + resolution: {integrity: sha512-WT4MOYG4mv9IXrH0m60vHsJh+rRMPSOKTQmwDpwmgQ+DuW/i5dU4pqc0HDO5uclO5vjz5IFX5z/taW86LSVe/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.49.0': - resolution: {integrity: sha512-W+mjtYtrQvFbXT/uNT+221OBhGRZ8UqNsLxjTWsjZ4GsQnRdvRC/N2NCK86BcamWr7lsTxwpwN3PULnr78sgcQ==} + '@oxfmt/binding-freebsd-x64@0.50.0': + resolution: {integrity: sha512-gH0rycVXqV4juWkvLs2uPMtTyppDc7qEUVzXAxnQ7FpcSZNXqKowUgtjH8q67ngj416r8+4NnAlyR/D35zwwhQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.49.0': - resolution: {integrity: sha512-Rtv6UevV7czDlLqil+NZUe4d8gs8jQo/zScSpumwyf7I+fSdLc+hc8AF3MQC7ymxSMMD9+vfiqQlsIf7wOAzXA==} + '@oxfmt/binding-linux-arm-gnueabihf@0.50.0': + resolution: {integrity: sha512-wL/k+o0hiTeRvi/gPzeC1L/yTHTXIeHDKWU09s2zTBmv7ma59wTm+fADNSGYxhJQDxyavQbwTf1QpW3Zj924tQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.49.0': - resolution: {integrity: sha512-sBi+8C/Q/MdKa5FL8ibAUCdhFBGFH7HFN/Qoyd5xQbZ/0ky3NMPpKfIBpaH0lhK2dXkGLczVQUoZ+xuNSerCdQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.50.0': + resolution: {integrity: sha512-Y59FKqoUM3Gf00E395b4ixfWyJGwO2GzaZawF5MZoVWcb3f6CkWUXyao0jyOvoIxDMzMybcVRuXyG7ih/Nxweg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.49.0': - resolution: {integrity: sha512-JIfWenFhlzx+O8YygyZhoHFzTsdgDhxhbDRnE2iJLnnM5pWKScFvPECO2vOlA7JqJ/9S1g3uzEKuRCkHFwTjvA==} + '@oxfmt/binding-linux-arm64-gnu@0.50.0': + resolution: {integrity: sha512-OvXbfTjMignXWyJXg/NOFsiy996vFe8wb9tkxJaUq8ylq0XrzJg3ttavC5Tcmm6F8/GUs2r3XFJWWu9q/27uYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.49.0': - resolution: {integrity: sha512-iNzkMPG18jPkwBOZ4/HEjwqfzAjq4RrUQ0CgId/fC1ENvYD5jLVAaU/gWgpiqP1ys07kxSsSggDd1fp3E7mQHw==} + '@oxfmt/binding-linux-arm64-musl@0.50.0': + resolution: {integrity: sha512-rqmvHZm7vMa3NLYa0khwkhReCmp9tqKnF23TFZ7S5cYJLvIE4b0k8famWE7kO897/DXznJe675n5SohFBggbxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.49.0': - resolution: {integrity: sha512-BPHA/NN3LvoIXiid+iz3BHt5V0Rzx0tXAqRUovwE1NsbDaLG9e8mtv7evDGRIkVQacqTDBv0XL25THHsxSJosQ==} + '@oxfmt/binding-linux-ppc64-gnu@0.50.0': + resolution: {integrity: sha512-49bAdYbMSde42tzPDtuHnBWzOgmoS0PT9THCjvMnDVYMQYiHzPc2Mv5rkpBHVQOXM+PHfafJlxgK0anXSWBVvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.49.0': - resolution: {integrity: sha512-3Eroshe+s69htC9JIL0+zLGQczLtRKezkMhwqQC21VC5Z/fuLvzLfbAOLgJLUq601H8gDYjy7deYycfOBjCvWg==} + '@oxfmt/binding-linux-riscv64-gnu@0.50.0': + resolution: {integrity: sha512-VFT25/6kckkIM62KeWB2bi+xCEmC/zC+DcMaIpEfaio8ulkGDLSiTz11TyK0eqgTl3x5OklYEGDWohvAgOr8Bw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.49.0': - resolution: {integrity: sha512-fnaERGgsxGm0lKAmO72EYR4BA3qBnzBTJBTi6EtUMq1D4R7EexRBMU4voXnx4TXla3SEDl9x4uNp/18SbkPjGg==} + '@oxfmt/binding-linux-riscv64-musl@0.50.0': + resolution: {integrity: sha512-BBJMuNy6jjkXjUUINF5UTQqb/nvjmtJad43Gp7bab0AAURAdthhJvduR7rHpWInpWYiaMzYsdrmURNcrmpxdZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.49.0': - resolution: {integrity: sha512-rBwasMl1Uul1MCCeTGEFKnOTL7VUxHf+634jWStrQAbzpBJgd5Yz5m4F7exVCsoI8PHn57dNjssXagXLCLB5yA==} + '@oxfmt/binding-linux-s390x-gnu@0.50.0': + resolution: {integrity: sha512-Xd4y+yjAYHKmryXhyUUwbyRD01iKfcvI74iE01L6p4F8SwjhZQXDshK+T8PcrPZLiFqH263P5xqJk94amjkjzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.49.0': - resolution: {integrity: sha512-BoC/F9xHe2y/deuBGA5Aw7bes07OD2gcL2wlpzTrfImR92vPP7S/k3LBTyspQZCNIVNdagkELcqKELwMLGIfAg==} + '@oxfmt/binding-linux-x64-gnu@0.50.0': + resolution: {integrity: sha512-Qp96rYJru7l++7mk4R+eh8qq9GFfFAMdmoN6VGoRHI8AA1XMnUIzH4u+zOcKZZwY+irHdsaBldDearwB4nOH7A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.49.0': - resolution: {integrity: sha512-umY6jFADAo/oztFKl8D/S6vSrG6oBpEskcentiRuz42kZVU2kfDXMWCYavxyZR2bwPjqkHpcHZ6EZFiH3Qj9ZA==} + '@oxfmt/binding-linux-x64-musl@0.50.0': + resolution: {integrity: sha512-5XLGp+yd5w2Key5LMqJO+X3XVsJKgeeUKljy32+MBF/J/JZ5m8WHl6dI5eOQOr3ixopxPiXIyDAxn3slI3UXiQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.49.0': - resolution: {integrity: sha512-J85zQMiw2pXiGPK+OusmDvSnJ/dgpgN7VgmB2zOBtgS8F+nsOUfSg9ZEBrwbQscjZ7tkPbm38CG4VF5f53MsiA==} + '@oxfmt/binding-openharmony-arm64@0.50.0': + resolution: {integrity: sha512-QAxwzh7+GHugCD7WuERolVs8TKQwXNIAZXAHHTecbKVc9oWBkWzOiLauQuezXS57tVcof5zhi1IjZ8tOV0htTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.49.0': - resolution: {integrity: sha512-38K67XR++CoFFORDd4sMFwUVAnD6msYBdGTei+qvKGrRPO6S2PbrYPNL/eQQ1RgnnxOegNba0YQwg6uRkNcw6A==} + '@oxfmt/binding-win32-arm64-msvc@0.50.0': + resolution: {integrity: sha512-3nKN/kqClm9iCFWTwtJ9UpR5SGyExp5l3nw6uIiBt+3XitQtszin+vjHrL7JHfDksZ7Svigdaow2zqz/IKCfqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.49.0': - resolution: {integrity: sha512-rXVe0HICwQF0dBgbQtBCoYf8x/SidPIdhyQl+iPuJlV7suV+qDv7yUEB3wQ4qC3nOeNxz287SwFXKzyr0kWgEg==} + '@oxfmt/binding-win32-ia32-msvc@0.50.0': + resolution: {integrity: sha512-3r6XZ8+X6qlLbXaPW2NygfiAWSpKbkE36pAVzS83mY+cYY+pSMalJ+qnCgkr92tr+Iqv988XKQ1CpARTg9ITbQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.49.0': - resolution: {integrity: sha512-gwWLwSEmBBfIK/Wh7GGd658161o4RKAvHWRaRQbJm571iQXGKfyr7UKsI1vsWvDlNLc30CxJDc8mMmCvJ/kczQ==} + '@oxfmt/binding-win32-x64-msvc@0.50.0': + resolution: {integrity: sha512-BSE8D8KsvquMG9vU+Qt4qGuoOcZ36rxU5S6ZkHNguj+MlWkXWCBETnno3yJ9CfWvfCrbmieaN9LK6hdcdHNZ/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3666,124 +3675,124 @@ packages: cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.64.0': - resolution: {integrity: sha512-2r6Nq3XXGLHEXKkSj8JtmJ6N4gDw431DPFOg0ZoJHlNjnG6HVMm/ksQ10m0HJ8WBvwgMe1L50UHPaYZutCRPCw==} + '@oxlint/binding-android-arm-eabi@1.65.0': + resolution: {integrity: sha512-jDVaGNURT5pEA9qcabh6WusIoBNybOMMDPCx+EFt+gxo6rVvoUf0+73Xy5x81+ZrxU+ewk5uRBYifjy5pgkcnA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.64.0': - resolution: {integrity: sha512-ePJMpePgg7fBv+L/hVx1xXRU5/5gd5m0obLA6hPEfLXF3GjpR8idIDbY1dhQYhyz1ms2wdTccSboo6KEd2Oxtg==} + '@oxlint/binding-android-arm64@1.65.0': + resolution: {integrity: sha512-v0z80IWNA7c9RhUydq9YprBxCVZrQ6Ixls2tdxUC1F/1FFqSfa7xTX+EJf0mj6+BKRg2zWXqWfcbJUnETlLlIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.64.0': - resolution: {integrity: sha512-U4DMLQd10gJLuoSTLSGbfv3bGjTlUNsScm9Dgb8wwBqmCzidf1pE1pXV4doGNxqwH3KtVng1AGTINA0NvkGLvQ==} + '@oxlint/binding-darwin-arm64@1.65.0': + resolution: {integrity: sha512-pL/mG/5gMzBwp1gdc5+Cwi87F9j3XRnPxHGyVj5Zd+dCEV5YkKt0L70PB3EGmEEHxgn4H+jnMS3xLuXs6mZW/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.64.0': - resolution: {integrity: sha512-GoRIL48QWm4/TAvjN8pB1nAG+1/uqc9EdnWT9zqHeb6wsmjZtywj8VRe5aGW47Fdb64YtLOsdLqVxOvQuz98Wg==} + '@oxlint/binding-darwin-x64@1.65.0': + resolution: {integrity: sha512-jVTneaeuHtqTrKYnhrdH1buhnSorinvpy1sv43ayclfWx/e/DfdRWv+h1fopJcHQbYr5WMcZMmDvnfEBkPZ+1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.64.0': - resolution: {integrity: sha512-5dFkv4tkg7PxJJGS9/OjrJwjhuHczrd3OQOkRE0wHcLM+ncUnULtzEPWjqGOxTXxZnLWcB91bGiIznx89TVXyQ==} + '@oxlint/binding-freebsd-x64@1.65.0': + resolution: {integrity: sha512-8lJQ7B6RloYDUhwVdbSpwT2eKsCN5KP1Scn18ly1tytCuhXhbs0nkfKHT4jWWZBJqmynWuzd+78bF7wILrj6pw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.64.0': - resolution: {integrity: sha512-jsBqMLl/uOL5+Kq/+BtK9FrmiNGUbx8SiyZXv+WlUxA45KuwcLu9BfiSIL3I3DBDgWM3yZizDITnTK9BcqNBQg==} + '@oxlint/binding-linux-arm-gnueabihf@1.65.0': + resolution: {integrity: sha512-EgmZY+DeWhLLEnNl70/49j3ltA8I6X9kxMfexupWi2Vwfp6RonGsBaHtGoedLolaU37ne7eDUgoxa3CFB95GZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.64.0': - resolution: {integrity: sha512-1lrj8At/Uuc9GhjrVFBQo0NEjfBrTkzpmtHIGAhNnIXqn1CAyGL+qrztUsXb2GIluJrpl9Q7qRLJOb/NqydacQ==} + '@oxlint/binding-linux-arm-musleabihf@1.65.0': + resolution: {integrity: sha512-OJMWmAYRVBCPPxnYr3j5sXRwHPh1bAuMlTStGco1Z8q3HkvSH4h+A10E9MiRNYmLhUuli5a2P5wmfj8cagiF5Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.64.0': - resolution: {integrity: sha512-HpSQbubwh03mMhAdy2BYtad/fsY8vDFHDAb6bUwuCYg2VD3xCQgn6ArKcO0oZyLCheacKTv4PrF3Mfu5hgoE2g==} + '@oxlint/binding-linux-arm64-gnu@1.65.0': + resolution: {integrity: sha512-D8uNi50LsYKgS0vGARZDRx05TBZeSxAVdLGddSEqQLSU7xsiqdImHPEw55xq8sKA5rCc/4au/5uS7FQALWdLCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.64.0': - resolution: {integrity: sha512-00QQ0h0Y7u0G69BgiH3+ky2aaq/QvkDL6DYok8htIuJHxybiux5aQ8jwmg8qIk9wha6UagUP2BAwAzbemcJbpg==} + '@oxlint/binding-linux-arm64-musl@1.65.0': + resolution: {integrity: sha512-IpbA8QGbwFehQhO+YaHwmoI81f93xvywpspf8HrdPCWOIeKwYfM1dhVhO4YKfZewTRRQEPY/JFjTOXTgkwhKrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.64.0': - resolution: {integrity: sha512-2GaimTV6EMW+s5HS0An3oGbQme3BgHswvfVdGk3EB57Xe9+/gyT+Qd7lNVzb3rtir52vbIPzXfaYArzs5b5zcw==} + '@oxlint/binding-linux-ppc64-gnu@1.65.0': + resolution: {integrity: sha512-ZSe8HgaZdgyHSv2+/pTG68z10+OarB18CkFKQOhRs3lmmP/p2vuigedK2e9d0ztoG2DU/duJzhxXBSjy/492HQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.64.0': - resolution: {integrity: sha512-H46AtFb9wypjoVwGdlxrm0DsD809NGmtiK9HiyPKTxkSte2YjhC4S+00rOIrwCaxcyPiGid3Y3OMXp5KMAkGZw==} + '@oxlint/binding-linux-riscv64-gnu@1.65.0': + resolution: {integrity: sha512-DcTERf++v6HyPHukKAr0JFTRqB+YeDEvqzRgNDMaz7jITPf+tlJIwRxodlAqoXMYhNVEZhXdQM5RAAYH8/oPuw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.64.0': - resolution: {integrity: sha512-HEgsidjjvvyzdg82icYkuFCf7REDV7B9JFwbIMbVwrKLBY0MrXX+bku3POn/hduZ2yW91IyVDUMq0Bf02KwXQw==} + '@oxlint/binding-linux-riscv64-musl@1.65.0': + resolution: {integrity: sha512-xjhMwuFJwRh40NOBzol4gM5gqAa0xPCJU+GQLM6BydV8TbfkIA7JeyCFNhyfbE9Q/5EWcKYTx62R0cRcjP7DAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.64.0': - resolution: {integrity: sha512-Axvm8qryotmKN00P5w4JapaSjvP2LOSbdbBJiX+2SuHd3QzhW7TUc8skqgw+ahQZ5DmzEYeHCqauvW8f32Ns6Q==} + '@oxlint/binding-linux-s390x-gnu@1.65.0': + resolution: {integrity: sha512-lrWSXb8JzboPWYBG6Kunt/eemvjo2oCFXktShsm3yMToY7HjzKLjxh7CljSvGnnZH9oohNFHOKc9xYpGKCPm6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.64.0': - resolution: {integrity: sha512-cR60vSd7+m+KRZ3GQGfDxWwahW5RMXg0qlGvAluZr0fTUYvw0H9N9AXAF/M/PMqgytyqvVNmBAkJG9l7U30Y1g==} + '@oxlint/binding-linux-x64-gnu@1.65.0': + resolution: {integrity: sha512-A7xfghw250m4a1sPV+q44Mow2G5bhiC9FBvhAuIhJS6QovWnqzuL5AFQPEuwOB+PM4DhABkqxVa3Iwe3Y/nFlQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.64.0': - resolution: {integrity: sha512-2u/aPZ9pEg7HnvZPDsHxUGNnrpr4qaHi+mCgLgpt+LYRzPrS4Px4wPfkIdRdr2GvKnaYyt+XSlto0Vm5sbStTg==} + '@oxlint/binding-linux-x64-musl@1.65.0': + resolution: {integrity: sha512-reqOun1+pWO3fW6cv7bsa8hHG0TN3t/82qPdaoJo90FwugXiMjKhZMChmH5Z01cFNRHmxN4+543Fy8478cM/iA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.64.0': - resolution: {integrity: sha512-kfhkGfCdoXLSxEkrhDlJrvBYajGmq+ma4EMc53dsOWTq+rIBOlI0vTBmpZNnM5oH2LY/K/w1HAK+UQEgjgpVUg==} + '@oxlint/binding-openharmony-arm64@1.65.0': + resolution: {integrity: sha512-KQpqOb/juDBO0xyloDkVDhOVxDUgAfZ2OAAVq99TJScJDzT319xry1QzB9LQohV9QGnA7p6m/XATZkMXc84lwA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.64.0': - resolution: {integrity: sha512-r/cNKBFieONoVu2bb1KkVouq9W+edDUgHumXJGphCRRj+U0xaD4nanrw8ZOqo0IsutPkEM4vCcGBpak6x5aXMg==} + '@oxlint/binding-win32-arm64-msvc@1.65.0': + resolution: {integrity: sha512-xfqcOc3nJFeAd1kDY4T9d3XeJIhr00twaaW0kOAzGPyUHkruXtNJv6zz1Ra9fRtSek5VpW2Yoj5AcwPIlT0ZiQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.64.0': - resolution: {integrity: sha512-tUw0xUUwEFVZbpJoeCblkv8SJA4Xz3CdXCJbAnBsiNLyxDrk2tLcxEAS6M73Q7hHHDg3OtwI8vZVK3t5RJt4Gw==} + '@oxlint/binding-win32-ia32-msvc@1.65.0': + resolution: {integrity: sha512-JV+pXm45p8sdgs3c7LOPAohW23optCNZETFOXUcjn6cS4PYZhEU/RI54Z5dHdMudab3nw7T48PZILthM+Q0COQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.64.0': - resolution: {integrity: sha512-9CBR+LO0JVST87fNTzzNxS5I29jIUO5gxT9i9+M3SDHHALElj9sY1Prf12tad3vIRC6OD7Ehtvvh+sn13vSwHw==} + '@oxlint/binding-win32-x64-msvc@1.65.0': + resolution: {integrity: sha512-D7L/oBbskLss21bYrRbFuIs81AiSQV+wRzwck54dOkHIlq2qu1xjLz8u6jCqGH8Fltk8bB5DLBpVhE7v/fA8XQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -4428,50 +4437,50 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-mA/BLJumVJ8JrJaUgl1wTzMbelXl/vuXc2AglltWSxQEL7+NtU3uG1gO+lT6igsFks7378zjEukSMmxv8FEPNw==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-YjoHUk4g7ayc8328Wt/JU9T+ChfOO1hNc5qGmkkygL4J4Q3/Wp+EqCNcFinYRSca0Yl5WdcVngd8xyGFeTlwUA==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-ol5OctuUZDLzQrqDUfR758p3p4x7FDzbIzu6H0XffWi7FXj0eEyDthDfULyTQmTlE8dizxCmbzC7Uv0COeedrQ==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-E/xAkhVaWaoU/u5itoRc1WD8M+A/JPmNbb4SiBexTZDQ3h/5xWU0HRwq/drRiLjFlcm0e1i66MzB8tbc2icctQ==} engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-7bz4QVWdlYm2BsDhqzpmUFSAA/l0W8+1hFto3Ssl/FADEWGIqwLk8/nEzZRMYtnCYjQx5KnRwmrcxnnZtD25jA==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-u+xY12IarGGRFXh7hbN/cxW5aYNdwa84mG0pyXglvThXT0rzzPGUEJdxVkNBo6UHqnc4FJihdcaioWpXBxQe9w==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-65TQUASi7+t81P94kyQopWchsVovWSfeXh5cPK2D5Oziga5of1Zzi6FQR1XUe48DYw5IBYN6DPXabcYG5Bd09A==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-CJZJ21rSBtBxmfebMh8K/kH+e3Z+s8hM2+4ud0ZesEBgkBjePBo6FR4/1IJl38i4OvYnpbZerANR0yCRytv/Pw==} engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-tdnkRgD+AUw+aJ2Uz1B/sAGcqCt7FgrQMyIdEmjJUiSneIb3PeS4oxsQKp7wnPsiqOcfUlpOp7/ZEJc1oJ5ySA==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-yRnlMPugNitsW9lBBQVfy8NgeUrgenjspq2LKeYmaAlvw6uf1bkbSHw6hJeCpl1oh7kH+RAHUx0yzm/RlfFdKg==} engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-9nERcpvv1Ok+IlBdCa9XNvcmNaV9HO3lSTPL1heyrgKFkOyNMxycej/FYRodXFcqZE/FMJCZ5U4lpI5MvivQXQ==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-fomiKzxtXrrasjJWbwaC8BGbzVQQv0VYVWijF0yKdXqxXjDRD01zT72Z1sjQGz0QJ19TVTVhJiNa7nI3wUaEsw==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-BFZ7ddWmFwpO+/zFEIsS2nZTD5jqixchvqeQGrPZMzd8y49RUfL5ztJm6h/jSUS8W3s/UGhQ2ibGfN0+rvfO+w==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-ekFca6XpdGIfLwqaRSm0GzYvI1COhoN+a62KeSwmaZN8EGWN/Rwrp/Tm9VjWGrdHSOLQFdEAGNibmp4bRB4HyA==} engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260514.1': - resolution: {integrity: sha512-gHvZOIbpls1d7Ly0wbVQxMX0EzJU+RBjsCX+AdbyMg3dfk+ET00HksIxn8E0W9+TH6z3ipW7Iitja3VgrgZaSA==} + '@typescript/native-preview@7.0.0-dev.20260517.1': + resolution: {integrity: sha512-RSenvv0X4Uubpqyq9Z28xucCqpt5Gm/YaBs04b2Chps+qxYH+sRhYlLoiRkCx9x7Kxx6WLK3mjP+Xj6YNxHZjg==} engines: {node: '>=16.20.0'} hasBin: true @@ -5775,11 +5784,11 @@ packages: js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} - jscpd-sarif-reporter@4.2.0: - resolution: {integrity: sha512-v/RyDPJDJTHm03P/GUrd5i9EqSyUKXVH/U5tY0ODSQIoPJvAA9ISTyxzOct03KyWHHR8cSqdZzsG2sBSHQHLwQ==} + jscpd-sarif-reporter@4.2.2: + resolution: {integrity: sha512-qpLhFZ6pVJcIjvEcUVRxnsrQuTbRY7bBnAgzXY9th0mL1uYhb1ii+SkMcBrBchH23vFfZu/9EG4lIxLCGfEpCQ==} - jscpd@4.2.0: - resolution: {integrity: sha512-C0J/Tggbt5bKnJK/izPGR8aIdfEgzyEFJ063rn5n46OwkOmSl3mHyrdI14NDYH2CHqAqKp3BECZ2/MpxYaIVnA==} + jscpd@4.2.2: + resolution: {integrity: sha512-zmoSXtG5Dsgo3QHhnsA06okqnKu3DlYBeAuD7MRnNQoNiL13UgBBh28pEEhe0tyR4yqYXk4Q3GAFoHx5cY+oDw==} hasBin: true jsdom@29.1.1: @@ -5862,8 +5871,8 @@ packages: koffi@2.16.2: resolution: {integrity: sha512-owU0MRwv6xkrVqCd+33uw6BaYppkTRXbO/rVdJNI2dvZG0gzyRhYwW25eWtc5pauwK8TGh3AbkFONSezdykfSA==} - kysely@0.29.0: - resolution: {integrity: sha512-LrQfPUeTW7MXbMvT62moEMnpMTuj9TO3lqjCeLKjM975PJ4Alrl/43f2tlDX7xOsNptKgH4LSNGwIbXwEkLg4g==} + kysely@0.29.1: + resolution: {integrity: sha512-mOW4e+UMfrV1u/+a4uXO72mkwEJCIL4Tb/OQ8wU8jY5spUHxLKFfC1AnfNhfSoHubnIRly3u/xgnMdD0Vzq2RQ==} engines: {node: '>=22.0.0'} libsignal@6.0.0: @@ -6420,6 +6429,18 @@ packages: zod: optional: true + openai@6.38.0: + resolution: {integrity: sha512-AoMplt2UalrpgUDMh3L09QWjNRlgJPipclQvA6sYAaeF6nHNBMgmikAZGmcYLn8on4d9sQY9Q8bOLfrBS7Lc8g==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + openshell@0.1.0: resolution: {integrity: sha512-B7jLewH+d73hraWcrSFgNOjvd+frW5JPejkTpqgj2EJBjX/Yk1Y4blgP5pDl4FwrBxfmwsTKR08Uwgrdo+xpSg==} engines: {node: '>=18'} @@ -6431,8 +6452,8 @@ packages: opusscript@0.1.1: resolution: {integrity: sha512-mL0fZZOUnXdZ78woRXp18lApwpp0lF5tozJOD1Wut0dgrA9WuQTgSels/CSmFleaAZrJi/nci5KOVtbuxeWoQA==} - oxfmt@0.49.0: - resolution: {integrity: sha512-IAHFMdlJSWe+oAr65dx22UvjCtV9DBMisAuLnKpDqMQrctzCkGnj3QRwNHm0d+uwSWPalsDF8ZYLz9rh6nH2IQ==} + oxfmt@0.50.0: + resolution: {integrity: sha512-owwjTnhfM5aCOJhYeqDvk7iM504OeYFZpdRU7cxx7xtZMo4uVpjlryTUon+Cf76CugsvnqA32e6rC73pr1hXaw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -6445,8 +6466,8 @@ packages: resolution: {integrity: sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg==} hasBin: true - oxlint@1.64.0: - resolution: {integrity: sha512-Star3SNpWPeWFPw7kRXIhXUSn6fdiAl25q15CQzH/9WaOtG6e9CWTc25vNZOCr4PE1yEP1GtKJKIKglhj3OmEQ==} + oxlint@1.65.0: + resolution: {integrity: sha512-ChUuE3Q7XnAbscvT4XLMsH7HFJmLgLVv9lu+RRgFL5wSXnDqUOzTp5IS8qWDBGd/ZDSzQ2tbX8fjAmijlGLC7A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -8589,9 +8610,9 @@ snapshots: - opusscript - utf-8-validate - '@earendil-works/pi-agent-core@0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3)': + '@earendil-works/pi-agent-core@0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3)': dependencies: - '@earendil-works/pi-ai': 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) ignore: 7.0.5 typebox: 1.1.38 yaml: 2.9.0 @@ -8604,7 +8625,7 @@ snapshots: - ws - zod - '@earendil-works/pi-ai@0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3)': + '@earendil-works/pi-ai@0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.95.1(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1045.0 @@ -8624,11 +8645,11 @@ snapshots: - ws - zod - '@earendil-works/pi-coding-agent@0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3)': + '@earendil-works/pi-coding-agent@0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3)': dependencies: - '@earendil-works/pi-agent-core': 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) - '@earendil-works/pi-ai': 0.74.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) - '@earendil-works/pi-tui': 0.74.1 + '@earendil-works/pi-agent-core': 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.1)(zod@4.4.3) + '@earendil-works/pi-tui': 0.75.1 '@silvia-odwyer/photon-node': 0.3.4 chalk: 5.6.2 diff: 8.0.4 @@ -8641,7 +8662,7 @@ snapshots: proper-lockfile: 4.1.2 strip-ansi: 7.2.0 typebox: 1.1.38 - undici: 7.25.0 + undici: 8.3.0 yaml: 2.9.0 optionalDependencies: '@mariozechner/clipboard': 0.3.6 @@ -8654,7 +8675,7 @@ snapshots: - ws - zod - '@earendil-works/pi-tui@0.74.1': + '@earendil-works/pi-tui@0.75.1': dependencies: get-east-asian-width: 1.6.0 marked: 15.0.12 @@ -8787,6 +8808,19 @@ snapshots: - supports-color - utf-8-validate + '@google/genai@2.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': + dependencies: + google-auth-library: 10.6.2 + p-retry: 4.6.2 + protobufjs: 7.5.6 + ws: 8.20.1 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@grammyjs/runner@2.0.3(grammy@1.42.0)': dependencies: abort-controller: 3.0.0 @@ -8799,7 +8833,7 @@ snapshots: '@grammyjs/types@3.26.0': {} - '@grammyjs/types@3.27.2': {} + '@grammyjs/types@3.27.3': {} '@grpc/grpc-js@1.14.3': dependencies: @@ -9171,20 +9205,20 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} - '@jscpd/badge-reporter@4.2.0': + '@jscpd/badge-reporter@4.2.2': dependencies: badgen: 3.3.2 colors: 1.4.0 fs-extra: 11.3.5 - '@jscpd/core@4.2.0': + '@jscpd/core@4.2.2': dependencies: eventemitter3: 5.0.4 - '@jscpd/finder@4.2.0': + '@jscpd/finder@4.2.2': dependencies: - '@jscpd/core': 4.2.0 - '@jscpd/tokenizer': 4.2.0 + '@jscpd/core': 4.2.2 + '@jscpd/tokenizer': 4.2.2 blamer: 1.0.7 bytes: 3.1.2 cli-table3: 0.6.5 @@ -9194,15 +9228,15 @@ snapshots: markdown-table: 2.0.0 pug: 3.0.4 - '@jscpd/html-reporter@4.2.0': + '@jscpd/html-reporter@4.2.2': dependencies: colors: 1.4.0 fs-extra: 11.3.5 pug: 3.0.4 - '@jscpd/tokenizer@4.2.0': + '@jscpd/tokenizer@4.2.2': dependencies: - '@jscpd/core': 4.2.0 + '@jscpd/core': 4.2.2 spark-md5: 3.0.2 '@keyv/bigmap@1.3.1(keyv@5.6.0)': @@ -9871,61 +9905,61 @@ snapshots: '@oxc-project/types@0.130.0': {} - '@oxfmt/binding-android-arm-eabi@0.49.0': + '@oxfmt/binding-android-arm-eabi@0.50.0': optional: true - '@oxfmt/binding-android-arm64@0.49.0': + '@oxfmt/binding-android-arm64@0.50.0': optional: true - '@oxfmt/binding-darwin-arm64@0.49.0': + '@oxfmt/binding-darwin-arm64@0.50.0': optional: true - '@oxfmt/binding-darwin-x64@0.49.0': + '@oxfmt/binding-darwin-x64@0.50.0': optional: true - '@oxfmt/binding-freebsd-x64@0.49.0': + '@oxfmt/binding-freebsd-x64@0.50.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.49.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.50.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.49.0': + '@oxfmt/binding-linux-arm-musleabihf@0.50.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.49.0': + '@oxfmt/binding-linux-arm64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.49.0': + '@oxfmt/binding-linux-arm64-musl@0.50.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.49.0': + '@oxfmt/binding-linux-ppc64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.49.0': + '@oxfmt/binding-linux-riscv64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.49.0': + '@oxfmt/binding-linux-riscv64-musl@0.50.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.49.0': + '@oxfmt/binding-linux-s390x-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.49.0': + '@oxfmt/binding-linux-x64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.49.0': + '@oxfmt/binding-linux-x64-musl@0.50.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.49.0': + '@oxfmt/binding-openharmony-arm64@0.50.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.49.0': + '@oxfmt/binding-win32-arm64-msvc@0.50.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.49.0': + '@oxfmt/binding-win32-ia32-msvc@0.50.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.49.0': + '@oxfmt/binding-win32-x64-msvc@0.50.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.22.1': @@ -9946,61 +9980,61 @@ snapshots: '@oxlint-tsgolint/win32-x64@0.22.1': optional: true - '@oxlint/binding-android-arm-eabi@1.64.0': + '@oxlint/binding-android-arm-eabi@1.65.0': optional: true - '@oxlint/binding-android-arm64@1.64.0': + '@oxlint/binding-android-arm64@1.65.0': optional: true - '@oxlint/binding-darwin-arm64@1.64.0': + '@oxlint/binding-darwin-arm64@1.65.0': optional: true - '@oxlint/binding-darwin-x64@1.64.0': + '@oxlint/binding-darwin-x64@1.65.0': optional: true - '@oxlint/binding-freebsd-x64@1.64.0': + '@oxlint/binding-freebsd-x64@1.65.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.64.0': + '@oxlint/binding-linux-arm-gnueabihf@1.65.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.64.0': + '@oxlint/binding-linux-arm-musleabihf@1.65.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.64.0': + '@oxlint/binding-linux-arm64-gnu@1.65.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.64.0': + '@oxlint/binding-linux-arm64-musl@1.65.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.64.0': + '@oxlint/binding-linux-ppc64-gnu@1.65.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.64.0': + '@oxlint/binding-linux-riscv64-gnu@1.65.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.64.0': + '@oxlint/binding-linux-riscv64-musl@1.65.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.64.0': + '@oxlint/binding-linux-s390x-gnu@1.65.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.64.0': + '@oxlint/binding-linux-x64-gnu@1.65.0': optional: true - '@oxlint/binding-linux-x64-musl@1.64.0': + '@oxlint/binding-linux-x64-musl@1.65.0': optional: true - '@oxlint/binding-openharmony-arm64@1.64.0': + '@oxlint/binding-openharmony-arm64@1.65.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.64.0': + '@oxlint/binding-win32-arm64-msvc@1.65.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.64.0': + '@oxlint/binding-win32-ia32-msvc@1.65.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.64.0': + '@oxlint/binding-win32-x64-msvc@1.65.0': optional: true '@pierre/diffs@1.1.22(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -10691,36 +10725,36 @@ snapshots: dependencies: '@types/node': 25.8.0 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260514.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260514.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260514.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260514.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260514.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260514.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260514.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260517.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260514.1': + '@typescript/native-preview@7.0.0-dev.20260517.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260514.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260514.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260514.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260514.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260514.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260514.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260514.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260517.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260517.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260517.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260517.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260517.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260517.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260517.1 '@typespec/ts-http-runtime@0.3.5': dependencies: @@ -12158,23 +12192,23 @@ snapshots: js-tokens@10.0.0: {} - jscpd-sarif-reporter@4.2.0: + jscpd-sarif-reporter@4.2.2: dependencies: colors: 1.4.0 fs-extra: 11.3.5 node-sarif-builder: 3.4.0 - jscpd@4.2.0: + jscpd@4.2.2: dependencies: - '@jscpd/badge-reporter': 4.2.0 - '@jscpd/core': 4.2.0 - '@jscpd/finder': 4.2.0 - '@jscpd/html-reporter': 4.2.0 - '@jscpd/tokenizer': 4.2.0 + '@jscpd/badge-reporter': 4.2.2 + '@jscpd/core': 4.2.2 + '@jscpd/finder': 4.2.2 + '@jscpd/html-reporter': 4.2.2 + '@jscpd/tokenizer': 4.2.2 colors: 1.4.0 commander: 5.1.0 fs-extra: 11.3.5 - jscpd-sarif-reporter: 4.2.0 + jscpd-sarif-reporter: 4.2.2 jsdom@29.1.1(@noble/hashes@2.0.1): dependencies: @@ -12296,7 +12330,7 @@ snapshots: koffi@2.16.2: optional: true - kysely@0.29.0: {} + kysely@0.29.1: {} libsignal@6.0.0: dependencies: @@ -12994,6 +13028,11 @@ snapshots: ws: 8.20.1 zod: 4.4.3 + openai@6.38.0(ws@8.20.1)(zod@4.4.3): + optionalDependencies: + ws: 8.20.1 + zod: 4.4.3 + openshell@0.1.0: dependencies: dotenv: 16.6.1 @@ -13008,29 +13047,29 @@ snapshots: opusscript@0.1.1: {} - oxfmt@0.49.0: + oxfmt@0.50.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.49.0 - '@oxfmt/binding-android-arm64': 0.49.0 - '@oxfmt/binding-darwin-arm64': 0.49.0 - '@oxfmt/binding-darwin-x64': 0.49.0 - '@oxfmt/binding-freebsd-x64': 0.49.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.49.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.49.0 - '@oxfmt/binding-linux-arm64-gnu': 0.49.0 - '@oxfmt/binding-linux-arm64-musl': 0.49.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.49.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.49.0 - '@oxfmt/binding-linux-riscv64-musl': 0.49.0 - '@oxfmt/binding-linux-s390x-gnu': 0.49.0 - '@oxfmt/binding-linux-x64-gnu': 0.49.0 - '@oxfmt/binding-linux-x64-musl': 0.49.0 - '@oxfmt/binding-openharmony-arm64': 0.49.0 - '@oxfmt/binding-win32-arm64-msvc': 0.49.0 - '@oxfmt/binding-win32-ia32-msvc': 0.49.0 - '@oxfmt/binding-win32-x64-msvc': 0.49.0 + '@oxfmt/binding-android-arm-eabi': 0.50.0 + '@oxfmt/binding-android-arm64': 0.50.0 + '@oxfmt/binding-darwin-arm64': 0.50.0 + '@oxfmt/binding-darwin-x64': 0.50.0 + '@oxfmt/binding-freebsd-x64': 0.50.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.50.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.50.0 + '@oxfmt/binding-linux-arm64-gnu': 0.50.0 + '@oxfmt/binding-linux-arm64-musl': 0.50.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.50.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.50.0 + '@oxfmt/binding-linux-riscv64-musl': 0.50.0 + '@oxfmt/binding-linux-s390x-gnu': 0.50.0 + '@oxfmt/binding-linux-x64-gnu': 0.50.0 + '@oxfmt/binding-linux-x64-musl': 0.50.0 + '@oxfmt/binding-openharmony-arm64': 0.50.0 + '@oxfmt/binding-win32-arm64-msvc': 0.50.0 + '@oxfmt/binding-win32-ia32-msvc': 0.50.0 + '@oxfmt/binding-win32-x64-msvc': 0.50.0 oxlint-tsgolint@0.22.1: optionalDependencies: @@ -13041,27 +13080,27 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 0.22.1 '@oxlint-tsgolint/win32-x64': 0.22.1 - oxlint@1.64.0(oxlint-tsgolint@0.22.1): + oxlint@1.65.0(oxlint-tsgolint@0.22.1): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.64.0 - '@oxlint/binding-android-arm64': 1.64.0 - '@oxlint/binding-darwin-arm64': 1.64.0 - '@oxlint/binding-darwin-x64': 1.64.0 - '@oxlint/binding-freebsd-x64': 1.64.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.64.0 - '@oxlint/binding-linux-arm-musleabihf': 1.64.0 - '@oxlint/binding-linux-arm64-gnu': 1.64.0 - '@oxlint/binding-linux-arm64-musl': 1.64.0 - '@oxlint/binding-linux-ppc64-gnu': 1.64.0 - '@oxlint/binding-linux-riscv64-gnu': 1.64.0 - '@oxlint/binding-linux-riscv64-musl': 1.64.0 - '@oxlint/binding-linux-s390x-gnu': 1.64.0 - '@oxlint/binding-linux-x64-gnu': 1.64.0 - '@oxlint/binding-linux-x64-musl': 1.64.0 - '@oxlint/binding-openharmony-arm64': 1.64.0 - '@oxlint/binding-win32-arm64-msvc': 1.64.0 - '@oxlint/binding-win32-ia32-msvc': 1.64.0 - '@oxlint/binding-win32-x64-msvc': 1.64.0 + '@oxlint/binding-android-arm-eabi': 1.65.0 + '@oxlint/binding-android-arm64': 1.65.0 + '@oxlint/binding-darwin-arm64': 1.65.0 + '@oxlint/binding-darwin-x64': 1.65.0 + '@oxlint/binding-freebsd-x64': 1.65.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.65.0 + '@oxlint/binding-linux-arm-musleabihf': 1.65.0 + '@oxlint/binding-linux-arm64-gnu': 1.65.0 + '@oxlint/binding-linux-arm64-musl': 1.65.0 + '@oxlint/binding-linux-ppc64-gnu': 1.65.0 + '@oxlint/binding-linux-riscv64-gnu': 1.65.0 + '@oxlint/binding-linux-riscv64-musl': 1.65.0 + '@oxlint/binding-linux-s390x-gnu': 1.65.0 + '@oxlint/binding-linux-x64-gnu': 1.65.0 + '@oxlint/binding-linux-x64-musl': 1.65.0 + '@oxlint/binding-openharmony-arm64': 1.65.0 + '@oxlint/binding-win32-arm64-msvc': 1.65.0 + '@oxlint/binding-win32-ia32-msvc': 1.65.0 + '@oxlint/binding-win32-x64-msvc': 1.65.0 oxlint-tsgolint: 0.22.1 p-finally@1.0.0: {} @@ -13494,7 +13533,7 @@ snapshots: reusify@1.1.0: {} - rolldown-plugin-dts@0.25.0(@typescript/native-preview@7.0.0-dev.20260514.1)(rolldown@1.0.1)(typescript@6.0.3): + rolldown-plugin-dts@0.25.0(@typescript/native-preview@7.0.0-dev.20260517.1)(rolldown@1.0.1)(typescript@6.0.3): dependencies: '@babel/generator': 8.0.0-rc.4 '@babel/helper-validator-identifier': 8.0.0-rc.4 @@ -13506,7 +13545,7 @@ snapshots: obug: 2.1.1 rolldown: 1.0.1 optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260514.1 + '@typescript/native-preview': 7.0.0-dev.20260517.1 typescript: 6.0.3 transitivePeerDependencies: - oxc-resolver @@ -13940,7 +13979,7 @@ snapshots: ts-algebra@2.0.0: {} - tsdown@0.22.0(@typescript/native-preview@7.0.0-dev.20260514.1)(tsx@4.22.0)(typescript@6.0.3)(unrun@0.3.0): + tsdown@0.22.0(@typescript/native-preview@7.0.0-dev.20260517.1)(tsx@4.22.0)(typescript@6.0.3)(unrun@0.3.0): dependencies: ansis: 4.3.0 cac: 7.0.0 @@ -13951,7 +13990,7 @@ snapshots: obug: 2.1.1 picomatch: 4.0.4 rolldown: 1.0.1 - rolldown-plugin-dts: 0.25.0(@typescript/native-preview@7.0.0-dev.20260514.1)(rolldown@1.0.1)(typescript@6.0.3) + rolldown-plugin-dts: 0.25.0(@typescript/native-preview@7.0.0-dev.20260517.1)(rolldown@1.0.1)(typescript@6.0.3) semver: 7.8.0 tinyexec: 1.1.2 tinyglobby: 0.2.16 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b714248ec434..eba19603e53e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,6 +23,10 @@ minimumReleaseAgeExclude: - "@cloudflare/workers-types" - "@hono/node-server" - "@mariozechner/*" + - "@earendil-works/pi-agent-core" + - "@earendil-works/pi-ai" + - "@earendil-works/pi-coding-agent" + - "@earendil-works/pi-tui" - "@openai/codex" - "@openai/codex-*" - "@smithy/shared-ini-file-loader@4.5.1" diff --git a/scripts/control-ui-i18n.ts b/scripts/control-ui-i18n.ts index b0722f2ec9b4..9d7f9855a481 100644 --- a/scripts/control-ui-i18n.ts +++ b/scripts/control-ui-i18n.ts @@ -85,7 +85,7 @@ const CONTROL_UI_I18N_WORKFLOW = 1; const DEFAULT_OPENAI_MODEL = "gpt-5.5"; const DEFAULT_ANTHROPIC_MODEL = "claude-opus-4-6"; const DEFAULT_PROVIDER = "openai"; -export const DEFAULT_PI_PACKAGE_VERSION = "0.74.1"; +export const DEFAULT_PI_PACKAGE_VERSION = "0.75.1"; const PI_PACKAGE_NAME = "@earendil-works/pi-coding-agent"; const HERE = path.dirname(fileURLToPath(import.meta.url)); const ROOT = path.resolve(HERE, ".."); diff --git a/scripts/install.ps1 b/scripts/install.ps1 index 12cb9d9c2e1a..d61d3bf7992e 100644 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -86,12 +86,14 @@ function Check-Node { try { $nodeVersion = (node -v 2>$null) if ($nodeVersion) { - $version = [int]($nodeVersion -replace 'v(\d+)\..*', '$1') - if ($version -ge 22) { + $versionMatch = [regex]::Match($nodeVersion, '^v(?\d+)\.(?\d+)\.') + $major = if ($versionMatch.Success) { [int]$versionMatch.Groups["major"].Value } else { 0 } + $minor = if ($versionMatch.Success) { [int]$versionMatch.Groups["minor"].Value } else { 0 } + if (($major -gt 22) -or (($major -eq 22) -and ($minor -ge 19))) { Write-Host "[OK] Node.js $nodeVersion found" -ForegroundColor Green return $true } else { - Write-Host "[!] Node.js $nodeVersion found, but v22+ required" -ForegroundColor Yellow + Write-Host "[!] Node.js $nodeVersion found, but v22.19+ required" -ForegroundColor Yellow return $false } } diff --git a/scripts/install.sh b/scripts/install.sh index 98c0768e9b10..8ca52e1f9cf5 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -18,7 +18,7 @@ NC='\033[0m' # No Color DEFAULT_TAGLINE="All your chats, one OpenClaw." NODE_DEFAULT_MAJOR=24 NODE_MIN_MAJOR=22 -NODE_MIN_MINOR=14 +NODE_MIN_MINOR=19 NODE_MIN_VERSION="${NODE_MIN_MAJOR}.${NODE_MIN_MINOR}" ORIGINAL_PATH="${PATH:-}" diff --git a/src/cli/update-cli.test.ts b/src/cli/update-cli.test.ts index d0bbe9eaab84..541e08eb5d27 100644 --- a/src/cli/update-cli.test.ts +++ b/src/cli/update-cli.test.ts @@ -622,7 +622,7 @@ describe("update-cli", () => { vi.mocked(fetchNpmPackageTargetStatus).mockResolvedValue({ target: "latest", version: "9999.0.0", - nodeEngine: ">=22.16.0", + nodeEngine: ">=22.19.0", }); vi.mocked(resolveNpmChannelTag).mockResolvedValue({ tag: "latest", @@ -2048,7 +2048,7 @@ describe("update-cli", () => { vi.mocked(fetchNpmPackageTargetStatus).mockResolvedValue({ target: "latest", version: "2026.3.23-2", - nodeEngine: ">=22.16.0", + nodeEngine: ">=22.19.0", }); nodeVersionSatisfiesEngine.mockReturnValue(false); diff --git a/src/cli/update-cli/update-command.ts b/src/cli/update-cli/update-command.ts index e1675c187e45..7daeabf69a61 100644 --- a/src/cli/update-cli/update-command.ts +++ b/src/cli/update-cli/update-command.ts @@ -951,7 +951,7 @@ async function resolvePackageRuntimePreflightError(params: { return [ `Node ${process.versions.node ?? "unknown"} is too old for openclaw@${targetLabel}.`, `The requested package requires ${status.nodeEngine}.`, - "Upgrade Node to 22.16+ or Node 24, then rerun `openclaw update`.", + "Upgrade Node to 22.19+ or Node 24, then rerun `openclaw update`.", "Bare `npm i -g openclaw` can silently install an older compatible release.", "After upgrading Node, use `npm i -g openclaw@latest`.", ].join("\n"); diff --git a/src/commands/doctor-gateway-services.test.ts b/src/commands/doctor-gateway-services.test.ts index 733402414045..80478761e552 100644 --- a/src/commands/doctor-gateway-services.test.ts +++ b/src/commands/doctor-gateway-services.test.ts @@ -376,7 +376,7 @@ describe("maybeRepairGatewayServiceConfig", () => { }); mocks.buildGatewayInstallPlan.mockImplementation(async ({ warn }) => { warn?.( - "System Node 20.20.2 at /usr/bin/node is below the required Node 22.16+. Using /home/orin/.nvm/versions/node/v22.22.2/bin/node for the daemon.", + "System Node 20.20.2 at /usr/bin/node is below the required Node 22.19+. Using /home/orin/.nvm/versions/node/v22.22.2/bin/node for the daemon.", "Gateway runtime", ); return { diff --git a/src/commands/doctor-gateway-services.ts b/src/commands/doctor-gateway-services.ts index ad7bcfff17f1..69c3fc5003c0 100644 --- a/src/commands/doctor-gateway-services.ts +++ b/src/commands/doctor-gateway-services.ts @@ -436,7 +436,7 @@ export async function maybeRepairGatewayServiceConfig( note(warning, "Gateway runtime"); } else { note( - "System Node 22 LTS (22.16+) or Node 24 not found. Install via Homebrew/apt/choco and rerun doctor to migrate off Bun/version managers.", + "System Node 22 LTS (22.19+) or Node 24 not found. Install via Homebrew/apt/choco and rerun doctor to migrate off Bun/version managers.", "Gateway runtime", ); } diff --git a/src/daemon/program-args.ts b/src/daemon/program-args.ts index f19c16ec5a76..863554ad64a2 100644 --- a/src/daemon/program-args.ts +++ b/src/daemon/program-args.ts @@ -175,7 +175,7 @@ async function resolveBinaryPath(binary: string): Promise { throw new Error("Bun not found in PATH. Install bun: https://bun.sh"); } throw new Error( - "Node not found in PATH. Install Node 24 (recommended) or Node 22 LTS (22.16+).", + "Node not found in PATH. Install Node 24 (recommended) or Node 22 LTS (22.19+).", ); } } diff --git a/src/daemon/runtime-paths.test.ts b/src/daemon/runtime-paths.test.ts index 9fc5dcc26088..82a97cb48344 100644 --- a/src/daemon/runtime-paths.test.ts +++ b/src/daemon/runtime-paths.test.ts @@ -139,7 +139,7 @@ describe("resolvePreferredNodePath", () => { const execFile = vi .fn() .mockResolvedValueOnce({ stdout: "24.11.1\n", stderr: "" }) - .mockResolvedValueOnce({ stdout: "22.17.0\n", stderr: "" }); + .mockResolvedValueOnce({ stdout: "22.19.0\n", stderr: "" }); const result = await resolvePreferredNodePath({ env: {}, @@ -179,7 +179,7 @@ describe("resolvePreferredNodePath", () => { const execFile = vi .fn() .mockResolvedValueOnce({ stdout: "18.0.0\n", stderr: "" }) // execPath too old - .mockResolvedValueOnce({ stdout: "22.16.0\n", stderr: "" }); // system node ok + .mockResolvedValueOnce({ stdout: "22.19.0\n", stderr: "" }); // system node ok const result = await resolvePreferredNodePath({ env: {}, @@ -196,7 +196,7 @@ describe("resolvePreferredNodePath", () => { it("ignores execPath when it is not node", async () => { mockNodePathPresent(darwinNode); - const execFile = vi.fn().mockResolvedValue({ stdout: "22.16.0\n", stderr: "" }); + const execFile = vi.fn().mockResolvedValue({ stdout: "22.19.0\n", stderr: "" }); const result = await resolvePreferredNodePath({ env: {}, @@ -216,8 +216,8 @@ describe("resolvePreferredNodePath", () => { it("uses system node when it meets the minimum version", async () => { mockNodePathPresent(darwinNode); - // Node 22.16.0+ is the minimum required version - const execFile = vi.fn().mockResolvedValue({ stdout: "22.16.0\n", stderr: "" }); + // Node 22.19.0+ is the minimum required version + const execFile = vi.fn().mockResolvedValue({ stdout: "22.19.0\n", stderr: "" }); const result = await resolvePreferredNodePath({ env: {}, @@ -234,8 +234,8 @@ describe("resolvePreferredNodePath", () => { it("skips system node when it is too old", async () => { mockNodePathPresent(darwinNode); - // Node 22.15.x is below minimum 22.16.0 - const execFile = vi.fn().mockResolvedValue({ stdout: "22.15.0\n", stderr: "" }); + // Node 22.18.x is below minimum 22.19.0 + const execFile = vi.fn().mockResolvedValue({ stdout: "22.18.0\n", stderr: "" }); const result = await resolvePreferredNodePath({ env: {}, @@ -291,7 +291,7 @@ describe("resolveStableNodePath", () => { it("resolves versioned node@22 formula to opt symlink", async () => { mockNodePathPresent("/opt/homebrew/opt/node@22/bin/node"); - const result = await resolveStableNodePath("/opt/homebrew/Cellar/node@22/22.16.0/bin/node"); + const result = await resolveStableNodePath("/opt/homebrew/Cellar/node@22/22.19.0/bin/node"); expect(result).toBe("/opt/homebrew/opt/node@22/bin/node"); }); @@ -341,8 +341,8 @@ describe("resolveSystemNodeInfo", () => { it("returns supported info when version is new enough", async () => { mockNodePathPresent(darwinNode); - // Node 22.16.0+ is the minimum required version - const execFile = vi.fn().mockResolvedValue({ stdout: "22.16.0\n", stderr: "" }); + // Node 22.19.0+ is the minimum required version + const execFile = vi.fn().mockResolvedValue({ stdout: "22.19.0\n", stderr: "" }); const result = await resolveSystemNodeInfo({ env: {}, @@ -352,7 +352,7 @@ describe("resolveSystemNodeInfo", () => { expect(result).toEqual({ path: darwinNode, - version: "22.16.0", + version: "22.19.0", supported: true, }); }); @@ -371,7 +371,7 @@ describe("resolveSystemNodeInfo", () => { const execFile = vi .fn() .mockResolvedValueOnce({ stdout: "18.0.0\n", stderr: "" }) - .mockResolvedValueOnce({ stdout: "22.17.0\n", stderr: "" }); + .mockResolvedValueOnce({ stdout: "22.19.0\n", stderr: "" }); const result = await resolveSystemNodeInfo({ env: {}, @@ -381,7 +381,7 @@ describe("resolveSystemNodeInfo", () => { expect(result).toEqual({ path: homebrewOptNode, - version: "22.17.0", + version: "22.19.0", supported: true, }); }); @@ -441,7 +441,7 @@ describe("resolveSystemNodeInfo", () => { "/Users/me/.fnm/node-22/bin/node", ); - expect(warning).toContain("below the required Node 22.16+"); + expect(warning).toContain("below the required Node 22.19+"); expect(warning).toContain(darwinNode); }); diff --git a/src/daemon/runtime-paths.ts b/src/daemon/runtime-paths.ts index 8ca52e991b3f..f7ca9138968a 100644 --- a/src/daemon/runtime-paths.ts +++ b/src/daemon/runtime-paths.ts @@ -187,7 +187,7 @@ export function renderSystemNodeWarning( } const versionLabel = systemNode.version ?? "unknown"; const selectedLabel = selectedNodePath ? ` Using ${selectedNodePath} for the daemon.` : ""; - return `System Node ${versionLabel} at ${systemNode.path} is below the required Node 22.16+.${selectedLabel} Install Node 24 (recommended) or Node 22 LTS from nodejs.org or Homebrew.`; + return `System Node ${versionLabel} at ${systemNode.path} is below the required Node 22.19+.${selectedLabel} Install Node 24 (recommended) or Node 22 LTS from nodejs.org or Homebrew.`; } export { resolveStableNodePath }; diff --git a/src/daemon/service-audit.ts b/src/daemon/service-audit.ts index 6ce5f18102e9..65ad1c49c720 100644 --- a/src/daemon/service-audit.ts +++ b/src/daemon/service-audit.ts @@ -508,7 +508,7 @@ async function auditGatewayRuntime( issues.push({ code: SERVICE_AUDIT_CODES.gatewayRuntimeNodeSystemMissing, message: - "System Node 22 LTS (22.16+) or Node 24 not found; install it before migrating away from version managers.", + "System Node 22 LTS (22.19+) or Node 24 not found; install it before migrating away from version managers.", level: "recommended", }); } diff --git a/src/daemon/service-env.test.ts b/src/daemon/service-env.test.ts index c090defd8dcf..6dcb606a649e 100644 --- a/src/daemon/service-env.test.ts +++ b/src/daemon/service-env.test.ts @@ -739,11 +739,11 @@ describe("buildServiceEnvironment", () => { env: { HOME: "/Users/user", VOLTA_HOME: "/Users/user/.volta" }, port: 18789, platform: "darwin", - extraPathDirs: ["/opt/homebrew/Cellar/node/22.16.0/bin"], + extraPathDirs: ["/opt/homebrew/Cellar/node/22.19.0/bin"], }); expect(env.PATH).toBe( - "/opt/homebrew/Cellar/node/22.16.0/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", + "/opt/homebrew/Cellar/node/22.19.0/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", ); }); }); diff --git a/src/infra/runtime-guard.test.ts b/src/infra/runtime-guard.test.ts index b2976db8a90f..b05160bd785d 100644 --- a/src/infra/runtime-guard.test.ts +++ b/src/infra/runtime-guard.test.ts @@ -15,7 +15,7 @@ describe("runtime-guard", () => { it("parses semver with or without leading v", () => { expect(parseSemver("v22.1.3")).toEqual({ major: 22, minor: 1, patch: 3 }); expect(parseSemver("1.3.0")).toEqual({ major: 1, minor: 3, patch: 0 }); - expect(parseSemver("22.16.0-beta.1")).toEqual({ major: 22, minor: 16, patch: 0 }); + expect(parseSemver("22.19.0-beta.1")).toEqual({ major: 22, minor: 19, patch: 0 }); expect(parseSemver("invalid")).toBeNull(); }); @@ -37,11 +37,11 @@ describe("runtime-guard", () => { it("validates runtime thresholds", () => { const nodeOk: RuntimeDetails = { kind: "node", - version: "22.16.0", + version: "22.19.0", execPath: "/usr/bin/node", pathEnv: "/usr/bin", }; - const nodeOld: RuntimeDetails = { ...nodeOk, version: "22.15.0" }; + const nodeOld: RuntimeDetails = { ...nodeOk, version: "22.18.0" }; const nodeTooOld: RuntimeDetails = { ...nodeOk, version: "21.9.0" }; const unknown: RuntimeDetails = { kind: "unknown", @@ -53,22 +53,22 @@ describe("runtime-guard", () => { expect(runtimeSatisfies(nodeOld)).toBe(false); expect(runtimeSatisfies(nodeTooOld)).toBe(false); expect(runtimeSatisfies(unknown)).toBe(false); - expect(isSupportedNodeVersion("22.16.0")).toBe(true); - expect(isSupportedNodeVersion("22.15.9")).toBe(false); + expect(isSupportedNodeVersion("22.19.0")).toBe(true); + expect(isSupportedNodeVersion("22.18.9")).toBe(false); expect(isSupportedNodeVersion(null)).toBe(false); }); it("parses simple minimum node engine ranges", () => { - expect(parseMinimumNodeEngine(">=22.16.0")).toEqual({ major: 22, minor: 16, patch: 0 }); + expect(parseMinimumNodeEngine(">=22.19.0")).toEqual({ major: 22, minor: 19, patch: 0 }); expect(parseMinimumNodeEngine(" >=v24.0.0 ")).toEqual({ major: 24, minor: 0, patch: 0 }); - expect(parseMinimumNodeEngine("^22.16.0")).toBeNull(); + expect(parseMinimumNodeEngine("^22.19.0")).toBeNull(); }); it("checks node versions against simple engine ranges", () => { - expect(nodeVersionSatisfiesEngine("22.16.0", ">=22.16.0")).toBe(true); - expect(nodeVersionSatisfiesEngine("22.15.9", ">=22.16.0")).toBe(false); - expect(nodeVersionSatisfiesEngine("24.0.0", ">=22.16.0")).toBe(true); - expect(nodeVersionSatisfiesEngine("22.16.0", "^22.16.0")).toBeNull(); + expect(nodeVersionSatisfiesEngine("22.19.0", ">=22.19.0")).toBe(true); + expect(nodeVersionSatisfiesEngine("22.18.9", ">=22.19.0")).toBe(false); + expect(nodeVersionSatisfiesEngine("24.0.0", ">=22.19.0")).toBe(true); + expect(nodeVersionSatisfiesEngine("22.19.0", "^22.19.0")).toBeNull(); }); it("throws via exit when runtime is too old", () => { @@ -89,7 +89,7 @@ describe("runtime-guard", () => { expect(runtime.error).toHaveBeenCalledOnce(); expect(runtime.error).toHaveBeenCalledWith( [ - "openclaw requires Node >=22.16.0.", + "openclaw requires Node >=22.19.0.", "Detected: node 20.0.0 (exec: /usr/bin/node).", "PATH searched: /usr/bin", "Install Node: https://nodejs.org/en/download", @@ -108,7 +108,7 @@ describe("runtime-guard", () => { const details: RuntimeDetails = { ...detectRuntime(), kind: "node", - version: "22.16.0", + version: "22.19.0", execPath: "/usr/bin/node", }; expect(assertSupportedRuntime(runtime, details)).toBeUndefined(); @@ -134,7 +134,7 @@ describe("runtime-guard", () => { expect(runtime.error).toHaveBeenCalledOnce(); expect(runtime.error).toHaveBeenCalledWith( [ - "openclaw requires Node >=22.16.0.", + "openclaw requires Node >=22.19.0.", "Detected: unknown runtime (exec: unknown).", "PATH searched: (not set)", "Install Node: https://nodejs.org/en/download", diff --git a/src/infra/runtime-guard.ts b/src/infra/runtime-guard.ts index 8d312c2dd8f2..85408c8406d0 100644 --- a/src/infra/runtime-guard.ts +++ b/src/infra/runtime-guard.ts @@ -9,7 +9,7 @@ type Semver = { patch: number; }; -const MIN_NODE: Semver = { major: 22, minor: 16, patch: 0 }; +const MIN_NODE: Semver = { major: 22, minor: 19, patch: 0 }; const MINIMUM_ENGINE_RE = /^\s*>=\s*v?(\d+\.\d+\.\d+)\s*$/i; export type RuntimeDetails = { @@ -111,7 +111,7 @@ export function assertSupportedRuntime( runtime.error( [ - "openclaw requires Node >=22.16.0.", + "openclaw requires Node >=22.19.0.", `Detected: ${runtimeLabel} (exec: ${execLabel}).`, `PATH searched: ${details.pathEnv}`, "Install Node: https://nodejs.org/en/download", diff --git a/src/infra/update-check.test.ts b/src/infra/update-check.test.ts index aa1b447b99e8..729b9009515f 100644 --- a/src/infra/update-check.test.ts +++ b/src/infra/update-check.test.ts @@ -58,7 +58,7 @@ describe("resolveNpmChannelTag", () => { status: version != null ? 200 : 404, json: async () => ({ version, - engines: version != null ? { node: ">=22.16.0" } : undefined, + engines: version != null ? { node: ">=22.19.0" } : undefined, }), } as Response; }), @@ -113,7 +113,7 @@ describe("resolveNpmChannelTag", () => { ).resolves.toEqual({ target: "latest", version: "1.0.4", - nodeEngine: ">=22.16.0", + nodeEngine: ">=22.19.0", }); await expect(fetchNpmTagVersion({ tag: "latest", timeoutMs: 1000 })).resolves.toEqual({ tag: "latest",